mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 04:40:23 +00:00
* refactor: move provider replay runtime ownership into plugins * fix(provider-runtime): address review followups --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import type { AgentMessage } from "@mariozechner/pi-agent-core";
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
makeInMemorySessionManager,
|
|
makeModelSnapshotEntry,
|
|
} from "./pi-embedded-runner.sanitize-session-history.test-harness.js";
|
|
import { sanitizeSessionHistory } from "./pi-embedded-runner/replay-history.js";
|
|
import { castAgentMessage } from "./test-helpers/agent-message-fixtures.js";
|
|
|
|
describe("sanitizeSessionHistory openai tool id preservation", () => {
|
|
const makeSessionManager = () =>
|
|
makeInMemorySessionManager([
|
|
makeModelSnapshotEntry({
|
|
provider: "openai",
|
|
modelApi: "openai-responses",
|
|
modelId: "gpt-5.2-codex",
|
|
}),
|
|
]);
|
|
|
|
const makeMessages = (withReasoning: boolean): AgentMessage[] => [
|
|
castAgentMessage({
|
|
role: "assistant",
|
|
content: [
|
|
...(withReasoning
|
|
? [
|
|
{
|
|
type: "thinking",
|
|
thinking: "internal reasoning",
|
|
thinkingSignature: JSON.stringify({ id: "rs_123", type: "reasoning" }),
|
|
},
|
|
]
|
|
: []),
|
|
{ type: "toolCall", id: "call_123|fc_123", name: "noop", arguments: {} },
|
|
],
|
|
}),
|
|
castAgentMessage({
|
|
role: "toolResult",
|
|
toolCallId: "call_123|fc_123",
|
|
toolName: "noop",
|
|
content: [{ type: "text", text: "ok" }],
|
|
isError: false,
|
|
}),
|
|
];
|
|
|
|
it.each([
|
|
{
|
|
name: "strips fc ids when replayable reasoning metadata is missing",
|
|
withReasoning: false,
|
|
expectedToolId: "call_123",
|
|
},
|
|
{
|
|
name: "keeps canonical call_id|fc_id pairings when replayable reasoning is present",
|
|
withReasoning: true,
|
|
expectedToolId: "call_123|fc_123",
|
|
},
|
|
])("$name", async ({ withReasoning, expectedToolId }) => {
|
|
const result = await sanitizeSessionHistory({
|
|
messages: makeMessages(withReasoning),
|
|
modelApi: "openai-responses",
|
|
provider: "openai",
|
|
modelId: "gpt-5.2-codex",
|
|
sessionManager: makeSessionManager(),
|
|
sessionId: "test-session",
|
|
});
|
|
|
|
const assistant = result[0] as { content?: Array<{ type?: string; id?: string }> };
|
|
const toolCall = assistant.content?.find((block) => block.type === "toolCall");
|
|
expect(toolCall?.id).toBe(expectedToolId);
|
|
|
|
const toolResult = result[1] as { toolCallId?: string };
|
|
expect(toolResult.toolCallId).toBe(expectedToolId);
|
|
});
|
|
});
|