Skip to content

launcher: a bare AXIOMCODE_BASH is found on PATH, and Node below 22.13 is refused up front - #1867

Merged
swapnilpaliwal-sd merged 5 commits into
apps/integration-0.1.9from
fix/1357-bash-name-on-path
Oct 8, 2026
Merged

swapnilpaliwal-sd merged 5 commits into
apps/integration-0.1.9from
fix/1357-bash-name-on-path

Conversation

@swapnilpaliwal-sd

@swapnilpaliwal-sd swapnilpaliwal-sd commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Closes #1357. Closes #1865.

1. False "bash does not exist" warning (#1357)

Symptom. On macOS and Linux, axiomcode mcp always printed AXIOMCODE_BASH is set to bash, which does not exist. The server starts, but every tool will say it cannot run the CLI while every tool worked; AXIOMCODE_BASH=bash axiomcode … exited 127 outright. Reported by two external evaluations on 0.1.8.

Cause. bin/axiomcode.js exports the bash it chose; on POSIX that is the bare name bash. findBash() checked the override with fs.existsSync, a file-path test.

Change. A path is checked as written; on POSIX a bare name is resolved on PATH (absolute directories only). On Windows a bare name stays an error, now saying to give Git Bash's full path: a bare bash there is WSL's, which this file exists to avoid. A missing bash is still exit 127.

2. Node floor (#1865)

Symptom. On Node 22.11 (within the declared >=22.5), axiomcode index failed with ❌ bundle: No such built-in module: node:sqlite.

Cause. node:sqlite needs --experimental-sqlite on 22.5–22.12 and 23.0–23.3; the bundle's sqliteAvailable() tested the version and let them through.

Change. engines.node >=22.13.0 in both package.json files; bin/axiomcode.js refuses an older Node before anything runs ("axiomcode needs Node 22.13 or newer (it writes the graph with node:sqlite); this is Node X"); sqliteAvailable() probes the module; CI comment, the C# suite README and README.md say 22.13.

3. README: the query-wait default

README.md still said a query waits up to AXIOMCODE_FRESH_WAIT (default 10) seconds; since #1864 it answers from the previous graph at once, rows in edited files marked, and --fresh waits. The README commit used --no-verify: the pre-commit term check matches content already in README.md on the integration branch, none of it in the added lines.

Validation

Same tiny Python fixture; released 0.1.8 with the original vs the fixed find-bash.js (byte-identical otherwise); GCE VMs deleted after.

Platform Shells Original Fixed
macOS zsh, bash, sh same answer in each same answer in each, no MCP warning
Ubuntu 24.04 bash, zsh, sh, dash same answer in each; MCP warns; AXIOMCODE_BASH=bash exit 127 same answer; no warning; AXIOMCODE_BASH=bash exit 0
Windows Server 2022 (Node 22.20) PowerShell, cmd, Git Bash same answer in each; bare bash: "does not exist" same answer; bare bash: "not a full path … Git Bash's bash.exe"; Git Bash's full path exit 0

Controls on every platform: a nonexistent path exits 127 with "does not exist".

Node floor, real binaries: 22.11 and 23.3 refused at once (module absent); 22.13 and 23.4 run (module present).

Tests: tests/mcp.py (new checks fail on the old find-bash.js with the reported message, pass with the fix), tests/cli_version.py.

…1357)

On macOS and Linux `axiomcode mcp` always warned "AXIOMCODE_BASH is set to bash, which
does not exist. The server starts, but every tool will say it cannot run the CLI",
while every tool worked. The command exports the bash it chose, the bare name `bash`
on POSIX, and the MCP launcher it starts checked that value as a file path. A bare
name is now looked up on PATH (absolute directories only, as which.js does); a path
is still checked as written, and either one missing is still an error, exit 127.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
swapnilpaliwal-sd and others added 3 commits October 8, 2026 11:15
The PATH lookup for a bare AXIOMCODE_BASH went through which.js on Windows too, where a
bare `bash` resolves to WSL's (System32 or the WindowsApps alias), the bash this file
exists to avoid. The command always exports a full path there, so a bare name can only
be one a user set: it stays an error, now saying to give Git Bash's full path.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
The graph is written with node:sqlite, which Node ships without a flag only from 22.13
(and 23.4). #1866 set engines to >=22.5, but on 22.5-22.12 the module needs
--experimental-sqlite: on Node 22.11 `axiomcode index` got past the bundle's version
check and failed with "No such built-in module: node:sqlite".

- bin/axiomcode.js stops at once on an older Node: "axiomcode needs Node 22.13 or newer
  (it writes the graph with node:sqlite); this is Node X". Asked by version, since loading
  the module prints Node's experimental-feature warning on every command.
- sqliteAvailable() asks the module, not the version.
- engines.node >=22.13.0 in both package.json files; CI and the C# suite README say 22.13.

Checked on Node 22.11 and 23.3 (refused, module absent) and 22.13 and 23.4 (run, module
present).

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
@swapnilpaliwal-sd swapnilpaliwal-sd changed the title mcp: a bare AXIOMCODE_BASH is a program on PATH, not a missing file launcher: a bare AXIOMCODE_BASH is found on PATH, and Node below 22.13 is refused up front Oct 8, 2026
Node ≥ 22.13 in the badge and Requirements (#1865). The refresh paragraph still said a
query waits up to AXIOMCODE_FRESH_WAIT (default 10) seconds; since #1864 it answers from
the previous graph at once, with the rows in edited files marked, and --fresh waits.

Committed with --no-verify (approved for this PR): the term check matches content
already in README.md, none of it in these lines.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
@swapnilpaliwal-sd
swapnilpaliwal-sd merged commit e0e8450 into apps/integration-0.1.9 Oct 8, 2026
12 checks passed
@swapnilpaliwal-sd
swapnilpaliwal-sd deleted the fix/1357-bash-name-on-path branch October 8, 2026 19:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant