fix: cover Windows exe argv (#1480) (thanks @Takhoffman)

This commit is contained in:
Peter Steinberger
2026-01-23 04:45:23 +00:00
parent ea7791f2b9
commit ee24cfb58e
4 changed files with 19 additions and 0 deletions

View File

@@ -24,6 +24,7 @@ Docs: https://docs.clawd.bot
### Fixes
- BlueBubbles: stop typing indicator on idle/no-reply. (#1439) Thanks @Nicell.
- Message tool: keep path/filePath as-is for send; hydrate buffers only for sendAttachment. (#1444) Thanks @hopyky.
- CLI: handle Windows runtime exe argv and pnpm build shims more reliably. (#1480) Thanks @Takhoffman.
- Auto-reply: only report a model switch when session state is available. (#1465) Thanks @robbyczgw-cla.
- Control UI: resolve local avatar URLs with basePath across injection + identity RPC. (#1457) Thanks @dlauer.
- Agents: surface concrete API error details instead of generic AI service errors.

View File

@@ -116,6 +116,7 @@ if (!shouldBuild()) {
} else {
logRunner("Building TypeScript (dist is stale).");
const pnpmArgs = ["exec", compiler, ...projectArgs];
// On Windows, pnpm is a .cmd shim, so use cmd.exe for reliable resolution.
const buildCmd = process.platform === "win32" ? "cmd.exe" : "pnpm";
const buildArgs =
process.platform === "win32" ? ["/d", "/s", "/c", "pnpm", ...pnpmArgs] : pnpmArgs;

View File

@@ -78,6 +78,16 @@ describe("argv helpers", () => {
});
expect(nodeArgv).toEqual(["node", "clawdbot", "status"]);
const nodeExeArgv = buildParseArgv({
programName: "clawdbot",
rawArgs: ["C:\\\\Program Files\\\\nodejs\\\\Node.EXE", "clawdbot", "status"],
});
expect(nodeExeArgv).toEqual([
"C:\\\\Program Files\\\\nodejs\\\\Node.EXE",
"clawdbot",
"status",
]);
const directArgv = buildParseArgv({
programName: "clawdbot",
rawArgs: ["clawdbot", "status"],
@@ -89,6 +99,12 @@ describe("argv helpers", () => {
rawArgs: ["bun", "src/entry.ts", "status"],
});
expect(bunArgv).toEqual(["bun", "src/entry.ts", "status"]);
const bunExeArgv = buildParseArgv({
programName: "clawdbot",
rawArgs: ["C:\\\\bun\\\\bun.exe", "src\\\\entry.ts", "status"],
});
expect(bunExeArgv).toEqual(["C:\\\\bun\\\\bun.exe", "src\\\\entry.ts", "status"]);
});
it("builds parse argv from fallback args", () => {

View File

@@ -95,6 +95,7 @@ export function buildParseArgv(params: {
? baseArgv.slice(1)
: baseArgv;
const executable = (normalizedArgv[0]?.split(/[/\\]/).pop() ?? "").toLowerCase();
// Normalize Windows `.exe` runtimes (node.exe/bun.exe) for runtime detection.
const looksLikeNode =
normalizedArgv.length >= 2 &&
(executable === "node" ||