From 46d90416462e292995263b24d7425fd5a3eb74fc Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 10 May 2026 17:17:46 +0100 Subject: [PATCH] test: clear acp prompt prefix broad matchers --- src/acp/translator.prompt-prefix.test.ts | 131 ++++++++--------------- 1 file changed, 47 insertions(+), 84 deletions(-) diff --git a/src/acp/translator.prompt-prefix.test.ts b/src/acp/translator.prompt-prefix.test.ts index 959dee9dd09..efad796966f 100644 --- a/src/acp/translator.prompt-prefix.test.ts +++ b/src/acp/translator.prompt-prefix.test.ts @@ -24,6 +24,15 @@ describe("acp prompt cwd prefix", () => { return {}; }); + function chatSendPayload(requestSpy: { mock: { calls: unknown[][] } }, index = 0) { + const call = requestSpy.mock.calls[index]; + expect(call?.[0]).toBe("chat.send"); + expect(call?.[2]).toEqual({ timeoutMs: null }); + expect(typeof call?.[1]).toBe("object"); + expect(call?.[1]).not.toBeNull(); + return call?.[1] as Record; + } + async function runPromptAndCaptureRequest( options: { cwd?: string; @@ -78,79 +87,44 @@ describe("acp prompt cwd prefix", () => { it("redacts home directory in prompt prefix", async () => { const requestSpy = await runPromptWithCwd(path.join(os.homedir(), "openclaw-test")); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - message: expect.stringMatching(/\[Working directory: ~[\\/]openclaw-test\]/), - }), - { timeoutMs: null }, - ); + const payload = chatSendPayload(requestSpy); + expect(typeof payload.message).toBe("string"); + expect(payload.message).toMatch(/\[Working directory: ~[\\/]openclaw-test\]/); }); it("keeps backslash separators when cwd uses them", async () => { const requestSpy = await runPromptWithCwd(`${os.homedir()}\\openclaw-test`); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - message: expect.stringContaining("[Working directory: ~\\openclaw-test]"), - }), - { timeoutMs: null }, - ); + const payload = chatSendPayload(requestSpy); + expect(payload.message).toContain("[Working directory: ~\\openclaw-test]"); }); it("injects system provenance metadata when enabled", async () => { const requestSpy = await runPromptAndCaptureRequest({ provenanceMode: "meta" }); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - systemInputProvenance: { - kind: "external_user", - originSessionId: TEST_SESSION_ID, - sourceChannel: "acp", - sourceTool: "openclaw_acp", - }, - systemProvenanceReceipt: undefined, - }), - { timeoutMs: null }, - ); + const payload = chatSendPayload(requestSpy); + expect(payload.systemInputProvenance).toEqual({ + kind: "external_user", + originSessionId: TEST_SESSION_ID, + sourceChannel: "acp", + sourceTool: "openclaw_acp", + }); + expect(payload.systemProvenanceReceipt).toBeUndefined(); }); it("injects a system provenance receipt when requested", async () => { const requestSpy = await runPromptAndCaptureRequest({ provenanceMode: "meta+receipt" }); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - systemInputProvenance: { - kind: "external_user", - originSessionId: TEST_SESSION_ID, - sourceChannel: "acp", - sourceTool: "openclaw_acp", - }, - systemProvenanceReceipt: expect.stringContaining("[Source Receipt]"), - }), - { timeoutMs: null }, - ); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - systemProvenanceReceipt: expect.stringContaining("bridge=openclaw-acp"), - }), - { timeoutMs: null }, - ); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - systemProvenanceReceipt: expect.stringContaining(`originSessionId=${TEST_SESSION_ID}`), - }), - { timeoutMs: null }, - ); - expect(requestSpy).toHaveBeenCalledWith( - "chat.send", - expect.objectContaining({ - systemProvenanceReceipt: expect.stringContaining(`targetSession=${TEST_SESSION_KEY}`), - }), - { timeoutMs: null }, - ); + const payload = chatSendPayload(requestSpy); + expect(payload.systemInputProvenance).toEqual({ + kind: "external_user", + originSessionId: TEST_SESSION_ID, + sourceChannel: "acp", + sourceTool: "openclaw_acp", + }); + expect(typeof payload.systemProvenanceReceipt).toBe("string"); + const receipt = payload.systemProvenanceReceipt as string; + expect(receipt).toContain("[Source Receipt]"); + expect(receipt).toContain("bridge=openclaw-acp"); + expect(receipt).toContain(`originSessionId=${TEST_SESSION_ID}`); + expect(receipt).toContain(`targetSession=${TEST_SESSION_KEY}`); }); it("retries without provenance when the gateway rejects admin-only provenance fields", async () => { @@ -180,28 +154,17 @@ describe("acp prompt cwd prefix", () => { await expect(agent.prompt(TEST_PROMPT)).rejects.toThrow("stop-after-send"); expect(requestSpy).toHaveBeenCalledTimes(2); - expect(requestSpy).toHaveBeenNthCalledWith( - 1, - "chat.send", - expect.objectContaining({ - systemInputProvenance: { - kind: "external_user", - originSessionId: TEST_SESSION_ID, - sourceChannel: "acp", - sourceTool: "openclaw_acp", - }, - systemProvenanceReceipt: expect.stringContaining("[Source Receipt]"), - }), - { timeoutMs: null }, - ); - expect(requestSpy).toHaveBeenNthCalledWith( - 2, - "chat.send", - expect.not.objectContaining({ - systemInputProvenance: expect.anything(), - systemProvenanceReceipt: expect.anything(), - }), - { timeoutMs: null }, - ); + const firstPayload = chatSendPayload(requestSpy, 0); + expect(firstPayload.systemInputProvenance).toEqual({ + kind: "external_user", + originSessionId: TEST_SESSION_ID, + sourceChannel: "acp", + sourceTool: "openclaw_acp", + }); + expect(firstPayload.systemProvenanceReceipt).toContain("[Source Receipt]"); + + const retryPayload = chatSendPayload(requestSpy, 1); + expect(retryPayload.systemInputProvenance).toBeUndefined(); + expect(retryPayload.systemProvenanceReceipt).toBeUndefined(); }); });