mirror of
https://github.com/mksglu/context-mode.git
synced 2026-09-19 03:27:16 +08:00
e918eac6c1
The background install of the three optional fetch deps (turndown, turndown-plugin-gfm, @mixmark-io/domino) spawned npm with `shell: IS_WIN32`. On Windows + Node, `shell: true` DROPS the `cwd` option, so the spawned cmd.exe runs in an arbitrary working dir (C:\Windows under Claude Code). `npm install` then tries to create `C:\Windows\node_modules` -> EPERM on every MCP boot, and a cmd.exe window flashes each time; the install never persists, so the existsSync guard never short-circuits and it re-fires every session (reported by @lravizzoni with npm-debug-log evidence). Prefer running npm's own CLI through node directly (no `.cmd` shim, no shell): resolve `npm-cli.js` beside `process.execPath` and spawn it with `shell: false` (honors `cwd`) + `windowsHide: true` (no console window). Fall back to the `npm.cmd` shim only when npm-cli.js can't be located, so a working host — e.g. a POSIX layout where npm-cli.js isn't beside node — never regresses (POSIX already used shell:false, so its behavior is unchanged). Also surface spawn failures and non-zero exits to stderr; this EPERM was invisible for months behind stdio:"ignore" + an empty error handler. Tests: structural regression pins the node/shell:false/windowsHide/fallback contract (regex-free, matches the start.mjs test pattern); a portable behavioral test pins the runtime property the fix relies on (shell:false honors cwd). #634 background-install contract preserved. Needs Windows CI / on-device confirmation.