




















@@ -71,7 +71,7 @@ function buildPreparedCliRunContext(params: {
7171modelArg: "--model",
7272sessionArg: "--session-id",
7373sessionMode: "always" as const,
74-systemPromptArg: "--append-system-prompt",
74+systemPromptFileArg: "--append-system-prompt-file",
7575systemPromptWhen: "first" as const,
7676serialize: true,
7777}
@@ -244,6 +244,41 @@ describe("runCliAgent spawn path", () => {
244244expect(input.argv).not.toContain("Explain this diff");
245245});
246246247+it("passes Claude system prompts through a file instead of argv", async () => {
248+let systemPromptPath = "";
249+supervisorSpawnMock.mockImplementationOnce(async (...args: unknown[]) => {
250+const input = (args[0] ?? {}) as { argv?: string[] };
251+const systemPromptArgIndex = input.argv?.indexOf("--append-system-prompt-file") ?? -1;
252+expect(systemPromptArgIndex).toBeGreaterThanOrEqual(0);
253+systemPromptPath = input.argv?.[systemPromptArgIndex + 1] ?? "";
254+expect(systemPromptPath).toContain("openclaw-cli-system-prompt-");
255+await expect(fs.readFile(systemPromptPath, "utf-8")).resolves.toBe(
256+"You are a helpful assistant.",
257+);
258+expect(input.argv).not.toContain("You are a helpful assistant.");
259+return createManagedRun({
260+reason: "exit",
261+exitCode: 0,
262+exitSignal: null,
263+durationMs: 50,
264+stdout: "ok",
265+stderr: "",
266+timedOut: false,
267+noOutputTimedOut: false,
268+});
269+});
270+271+await executePreparedCliRun(
272+buildPreparedCliRunContext({
273+provider: "claude-cli",
274+model: "sonnet",
275+runId: "run-claude-system-prompt-file",
276+}),
277+);
278+279+await expect(fs.access(systemPromptPath)).rejects.toMatchObject({ code: "ENOENT" });
280+});
281+247282it("passes --session-id for new Claude sessions", async () => {
248283mockSuccessfulCliRun();
249284@@ -990,10 +1025,9 @@ describe("runCliAgent spawn path", () => {
9901025await vi.waitFor(() => expect(supervisorSpawnMock).toHaveBeenCalledOnce());
9911026releaseSpawn?.();
9921027993-await expect(Promise.all([first, second])).resolves.toEqual([
994-expect.objectContaining({ text: "one" }),
995-expect.objectContaining({ text: "two" }),
996-]);
1028+const results = await Promise.all([first, second]);
1029+expect(results.map((result) => result.text).sort()).toEqual(["one", "two"]);
1030+expect(stdin.write).toHaveBeenCalledTimes(2);
9971031expect(supervisorSpawnMock).toHaveBeenCalledOnce();
9981032});
9991033@@ -1087,6 +1121,7 @@ describe("runCliAgent spawn path", () => {
10871121input: "stdin",
10881122sessionArg: "--session-id",
10891123systemPromptArg: "--append-system-prompt",
1124+systemPromptFileArg: "--append-system-prompt-file",
10901125};
1091112610921127const args = buildClaudeLiveArgs({
@@ -1100,6 +1135,8 @@ describe("runCliAgent spawn path", () => {
11001135"openclaw-session",
11011136"--append-system-prompt",
11021137"old prompt",
1138+"--append-system-prompt-file",
1139+"/tmp/system-prompt.md",
11031140],
11041141 backend,
11051142systemPrompt: "current prompt",
@@ -1110,6 +1147,8 @@ describe("runCliAgent spawn path", () => {
11101147expect(args).toContain("claude-session");
11111148expect(args).not.toContain("--session-id");
11121149expect(args).not.toContain("openclaw-session");
1150+expect(args).not.toContain("--append-system-prompt-file");
1151+expect(args).not.toContain("/tmp/system-prompt.md");
11131152expect(args).not.toContain("--append-system-prompt");
11141153expect(args).not.toContain("old prompt");
11151154expect(args).not.toContain("current prompt");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。