This PR introduces integration tests that run [codex-shell-tool-mcp](https://www.npmjs.com/package/@openai/codex-shell-tool-mcp) as a user would. Note that this requires running our fork of Bash, so we introduce a [DotSlash](https://dotslash-cli.com/) file for `bash` so that we can run the integration tests on multiple platforms without having to check the binaries into the repository. (As noted in the DotSlash file, it is slightly more heavyweight than necessary, which may be worth addressing as disk space in CI is limited: https://github.com/openai/codex/pull/7678.) To start, this PR adds two tests: - `list_tools()` makes the `list_tools` request to the MCP server and verifies we get the expected response - `accept_elicitation_for_prompt_rule()` defines a `prefix_rule()` with `decision="prompt"` and verifies the elicitation flow works as expected Though the `accept_elicitation_for_prompt_rule()` test **only works on Linux**, as this PR reveals that there are currently issues when running the Bash fork in a read-only sandbox on Linux. This will have to be fixed in a follow-up PR. Incidentally, getting this test run to correctly on macOS also requires a recent fix we made to `brew` that hasn't hit a mainline release yet, so getting CI green in this PR required https://github.com/openai/codex/pull/7680.
75 lines
2.7 KiB
Text
Executable file
75 lines
2.7 KiB
Text
Executable file
#!/usr/bin/env dotslash
|
|
|
|
// This is an instance of the fork of Bash that we bundle with
|
|
// https://www.npmjs.com/package/@openai/codex-shell-tool-mcp.
|
|
// Fetching the prebuilt version via DotSlash makes it easier to write
|
|
// integration tests for the MCP server.
|
|
//
|
|
// TODO(mbolin): Currently, we use a .tgz artifact that includes binaries for
|
|
// multiple platforms, but we could save a bit of space by making arch-specific
|
|
// artifacts available in the GitHub releases and referencing those here.
|
|
{
|
|
"name": "codex-bash",
|
|
"platforms": {
|
|
// macOS 13 builds (and therefore x86_64) were dropped in
|
|
// https://github.com/openai/codex/pull/7295, so we only provide an
|
|
// Apple Silicon build for now.
|
|
"macos-aarch64": {
|
|
"size": 37003612,
|
|
"hash": "blake3",
|
|
"digest": "d9cd5928c993b65c340507931c61c02bd6e9179933f8bf26a548482bb5fa53bb",
|
|
"format": "tar.gz",
|
|
"path": "package/vendor/aarch64-apple-darwin/bash/macos-15/bash",
|
|
"providers": [
|
|
{
|
|
"url": "https://github.com/openai/codex/releases/download/rust-v0.65.0/codex-shell-tool-mcp-npm-0.65.0.tgz"
|
|
},
|
|
{
|
|
"type": "github-release",
|
|
"repo": "openai/codex",
|
|
"tag": "rust-v0.65.0",
|
|
"name": "codex-shell-tool-mcp-npm-0.65.0.tgz"
|
|
}
|
|
]
|
|
},
|
|
// Note the `musl` parts of the Linux paths are misleading: the Bash
|
|
// binaries are actually linked against `glibc`, but the
|
|
// `codex-execve-wrapper` that invokes them is linked against `musl`.
|
|
"linux-x86_64": {
|
|
"size": 37003612,
|
|
"hash": "blake3",
|
|
"digest": "d9cd5928c993b65c340507931c61c02bd6e9179933f8bf26a548482bb5fa53bb",
|
|
"format": "tar.gz",
|
|
"path": "package/vendor/x86_64-unknown-linux-musl/bash/ubuntu-24.04/bash",
|
|
"providers": [
|
|
{
|
|
"url": "https://github.com/openai/codex/releases/download/rust-v0.65.0/codex-shell-tool-mcp-npm-0.65.0.tgz"
|
|
},
|
|
{
|
|
"type": "github-release",
|
|
"repo": "openai/codex",
|
|
"tag": "rust-v0.65.0",
|
|
"name": "codex-shell-tool-mcp-npm-0.65.0.tgz"
|
|
}
|
|
]
|
|
},
|
|
"linux-aarch64": {
|
|
"size": 37003612,
|
|
"hash": "blake3",
|
|
"digest": "d9cd5928c993b65c340507931c61c02bd6e9179933f8bf26a548482bb5fa53bb",
|
|
"format": "tar.gz",
|
|
"path": "package/vendor/aarch64-unknown-linux-musl/bash/ubuntu-24.04/bash",
|
|
"providers": [
|
|
{
|
|
"url": "https://github.com/openai/codex/releases/download/rust-v0.65.0/codex-shell-tool-mcp-npm-0.65.0.tgz"
|
|
},
|
|
{
|
|
"type": "github-release",
|
|
"repo": "openai/codex",
|
|
"tag": "rust-v0.65.0",
|
|
"name": "codex-shell-tool-mcp-npm-0.65.0.tgz"
|
|
}
|
|
]
|
|
},
|
|
}
|
|
}
|