diff --git a/CHANGELOG.md b/CHANGELOG.md index f5659af14..460cc3989 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ Docs: https://docs.clawd.bot - Matrix: decrypt E2EE media attachments with preflight size guard. (#1744) Thanks @araa47. - Gateway: allow Control UI token-only auth to skip device pairing even when device identity is present (`gateway.controlUi.allowInsecureAuth`). (#1679) Thanks @steipete. - Gateway: include inline config env vars in service install environments. (#1735) Thanks @Seredeep. +- Exec: treat Windows platform labels as Windows for node shell selection. (#1760) Thanks @ymat19. - BlueBubbles: route phone-number targets to DMs, avoid leaking routing IDs, and auto-create missing DMs (Private API required). (#1751) Thanks @tyler6204. https://docs.clawd.bot/channels/bluebubbles - BlueBubbles: keep part-index GUIDs in reply tags when short IDs are missing. - Web UI: hide internal `message_id` hints in chat bubbles. diff --git a/src/infra/node-shell.test.ts b/src/infra/node-shell.test.ts new file mode 100644 index 000000000..8f95a29a8 --- /dev/null +++ b/src/infra/node-shell.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from "vitest"; + +import { buildNodeShellCommand } from "./node-shell.js"; + +describe("buildNodeShellCommand", () => { + it("uses cmd.exe for win32", () => { + expect(buildNodeShellCommand("echo hi", "win32")).toEqual([ + "cmd.exe", + "/d", + "/s", + "/c", + "echo hi", + ]); + }); + + it("uses cmd.exe for windows labels", () => { + expect(buildNodeShellCommand("echo hi", "windows")).toEqual([ + "cmd.exe", + "/d", + "/s", + "/c", + "echo hi", + ]); + expect(buildNodeShellCommand("echo hi", "Windows 11")).toEqual([ + "cmd.exe", + "/d", + "/s", + "/c", + "echo hi", + ]); + }); + + it("uses /bin/sh for darwin", () => { + expect(buildNodeShellCommand("echo hi", "darwin")).toEqual(["/bin/sh", "-lc", "echo hi"]); + }); + + it("uses /bin/sh when platform missing", () => { + expect(buildNodeShellCommand("echo hi")).toEqual(["/bin/sh", "-lc", "echo hi"]); + }); +}); diff --git a/src/infra/node-shell.ts b/src/infra/node-shell.ts index 29ac52e15..8a59fb524 100644 --- a/src/infra/node-shell.ts +++ b/src/infra/node-shell.ts @@ -2,7 +2,7 @@ export function buildNodeShellCommand(command: string, platform?: string | null) const normalized = String(platform ?? "") .trim() .toLowerCase(); - if (normalized === "win32") { + if (normalized.startsWith("win")) { return ["cmd.exe", "/d", "/s", "/c", command]; } return ["/bin/sh", "-lc", command];