windows: unify non-core spawn handling across acp qmd and docker#31750
windows: unify non-core spawn handling across acp qmd and docker#31750Takhoffman merged 2 commits intomainfrom
Conversation
|
PR #31750 - windows: unify non-core spawn handling across acp qmd and docker (#31750) Merged via squash.
Thanks @Takhoffman! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 70d439c11b
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| env: params.env, | ||
| execPath: process.execPath, | ||
| packageName: params.packageName, | ||
| allowShellFallback: true, |
There was a problem hiding this comment.
Disable shell fallback for qmd and mcporter spawns
This unconditional allowShellFallback: true enables the shell: true path for unresolved .cmd wrappers, but runQmd and runMcporter feed user-derived search text into argv (for example via buildSearchArgs), so on Windows this can turn query metacharacters like & or | into cmd.exe operators instead of literal arguments. Because Node shell mode builds a single command string from file + argv, unresolved-wrapper environments can hit command injection/command breakage from normal chat input; this new resolver wiring should fail closed (or strictly escape) instead of falling back to shell execution.
Useful? React with 👍 / 👎.
Greptile SummaryUnifies Windows spawn handling across ACP client, QMD/mcporter memory manager, and Docker sandbox by leveraging the shared Key improvements:
Implementation pattern:
Testing:
Confidence Score: 5/5
Last reviewed commit: fc8f412 |
…nclaw#31750) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
…nclaw#31750) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
…nclaw#31750) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
…nclaw#31750) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
…nclaw#31750) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
…nclaw#31750) thanks @Takhoffman Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check (fails on pre-existing unrelated src/slack/monitor/events/messages.ts typing errors) - pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.ts Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
Summary
Closes #31740 by unifying remaining non-core Windows spawn behavior behind the shared Windows spawn resolver.
This removes mixed ad-hoc behavior across ACP client, QMD/mcporter memory path, and Docker sandbox command execution.
What changed
src/acp/client.tsresolveAcpClientSpawnInvocation(...)using sharedwindows-spawnpolicy.createAcpClient(...)now uses resolved command/argv/shell/windowsHide.src/memory/qmd-manager.tsrunQmd(...)andrunMcporter(...)..cmd/.batwrappers and shell fallback.src/agents/sandbox/docker.tsresolveDockerSpawnInvocation(...)using sharedwindows-spawnpolicy.execDockerRaw(...)now spawns with resolved command/argv/shell/windowsHide.Tests
src/agents/sandbox/docker.windows.test.tssrc/acp/client.test.tssrc/memory/qmd-manager.test.tsVerified locally:
pnpm vitest run src/acp/client.test.ts src/memory/qmd-manager.test.ts src/agents/sandbox/docker.execDockerRaw.enoent.test.ts src/agents/sandbox/docker.windows.test.ts extensions/acpx/src/runtime-internals/process.test.tsScope / risk
extensions/acpxwas already aligned and unchanged.Notes
pnpm checkcurrently fails on pre-existing TypeScript errors insrc/slack/monitor/events/messages.tsunrelated to this PR.