





















@@ -4,6 +4,7 @@ import {
44EXPERIMENTAL_WARNING_FLAG,
55OPENCLAW_NODE_EXTRA_CA_CERTS_READY,
66OPENCLAW_NODE_OPTIONS_READY,
7+resolveCliRespawnCommand,
78} from "./entry.respawn.js";
89910const shouldSkipRespawnForArgvMock = vi.hoisted(() => vi.fn(() => false));
@@ -42,6 +43,7 @@ describe("buildCliRespawnPlan", () => {
4243});
43444445expect(plan).not.toBeNull();
46+expect(plan?.command).toBe(process.execPath);
4547expect(plan?.argv[0]).toBe(EXPERIMENTAL_WARNING_FLAG);
4648expect(plan?.env.NODE_EXTRA_CA_CERTS).toBe("/etc/ssl/certs/ca-certificates.crt");
4749expect(plan?.env[OPENCLAW_NODE_EXTRA_CA_CERTS_READY]).toBe("1");
@@ -88,4 +90,35 @@ describe("buildCliRespawnPlan", () => {
8890}),
8991).toBeNull();
9092});
93+94+it("respawns Volta shims through node so the shim is not called directly", () => {
95+const plan = buildCliRespawnPlan({
96+argv: ["/home/alice/.volta/bin/volta-shim", "/usr/local/bin/openclaw", "status"],
97+env: { PATH: "/home/alice/.volta/bin:/usr/bin:/bin" },
98+execArgv: [],
99+execPath: "/home/alice/.volta/bin/volta-shim",
100+autoNodeExtraCaCerts: undefined,
101+platform: "linux",
102+});
103+104+expect(plan?.command).toBe("node");
105+expect(plan?.argv).toEqual([EXPERIMENTAL_WARNING_FLAG, "/usr/local/bin/openclaw", "status"]);
106+});
107+});
108+109+describe("resolveCliRespawnCommand", () => {
110+it("keeps normal node paths absolute", () => {
111+expect(resolveCliRespawnCommand({ execPath: "/usr/bin/node", platform: "linux" })).toBe(
112+"/usr/bin/node",
113+);
114+});
115+116+it("maps Volta's Unix shim target back to the named node shim", () => {
117+expect(
118+resolveCliRespawnCommand({
119+execPath: "/home/alice/.volta/bin/volta-shim",
120+platform: "linux",
121+}),
122+).toBe("node");
123+});
91124});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。