mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-18 19:24:46 +00:00
test: clear acp prompt prefix broad matchers
This commit is contained in:
@@ -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<string, unknown>;
|
||||
}
|
||||
|
||||
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();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user