fix: spawn agents via resolved absolute path on Windows (#10)
Detection in `/api/agents` resolves each agent's full executable path,
but `/api/chat` was spawning the bare `def.bin` ("claude"). On Windows
the child process's PATH often doesn't include the user's npm-global
shim directory, so spawn() failed with ENOENT despite the picker
showing the agent as available.
Use the resolved path at spawn time, and pass `shell: true` when the
resolved bin is a `.cmd`/`.bat` shim so Node ≥21 doesn't refuse to
execute it (CVE-2024-27980).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -125,3 +125,13 @@ export async function detectAgents() {
|
||||
export function getAgentDef(id) {
|
||||
return AGENT_DEFS.find((a) => a.id === id) || null;
|
||||
}
|
||||
|
||||
// Resolve the absolute path of an agent's binary on the current PATH.
|
||||
// Used by the chat handler so spawn() gets the same executable that
|
||||
// detection reported as available — fixes Windows ENOENT when the bare
|
||||
// bin name isn't on the child process's PATH (issue #10).
|
||||
export function resolveAgentBin(id) {
|
||||
const def = getAgentDef(id);
|
||||
if (!def?.bin) return null;
|
||||
return resolveOnPath(def.bin);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user