fix: clear pending tool-call state across provider modes (#32120) (thanks @jnMetaCode)
This commit is contained in:
@@ -85,6 +85,25 @@ describe("installSessionToolResultGuard", () => {
|
||||
expectPersistedRoles(sm, ["assistant", "toolResult"]);
|
||||
});
|
||||
|
||||
it("clears pending on user interruption when synthetic tool results are disabled", () => {
|
||||
const sm = SessionManager.inMemory();
|
||||
const guard = installSessionToolResultGuard(sm, {
|
||||
allowSyntheticToolResults: false,
|
||||
});
|
||||
|
||||
sm.appendMessage(toolCallMessage);
|
||||
sm.appendMessage(
|
||||
asAppendMessage({
|
||||
role: "user",
|
||||
content: "interrupt",
|
||||
timestamp: Date.now(),
|
||||
}),
|
||||
);
|
||||
|
||||
expectPersistedRoles(sm, ["assistant", "user"]);
|
||||
expect(guard.getPendingIds()).toEqual([]);
|
||||
});
|
||||
|
||||
it("does not add synthetic toolResult when a matching one exists", () => {
|
||||
const sm = SessionManager.inMemory();
|
||||
installSessionToolResultGuard(sm);
|
||||
@@ -271,6 +290,54 @@ describe("installSessionToolResultGuard", () => {
|
||||
expectPersistedRoles(sm, ["assistant", "toolResult"]);
|
||||
});
|
||||
|
||||
it("clears pending when a sanitized assistant message is dropped and synthetic results are disabled", () => {
|
||||
const sm = SessionManager.inMemory();
|
||||
const guard = installSessionToolResultGuard(sm, {
|
||||
allowSyntheticToolResults: false,
|
||||
allowedToolNames: ["read"],
|
||||
});
|
||||
|
||||
sm.appendMessage(
|
||||
asAppendMessage({
|
||||
role: "assistant",
|
||||
content: [{ type: "toolCall", id: "call_1", name: "read", arguments: {} }],
|
||||
}),
|
||||
);
|
||||
|
||||
sm.appendMessage(
|
||||
asAppendMessage({
|
||||
role: "assistant",
|
||||
content: [{ type: "toolCall", id: "call_2", name: "write", arguments: {} }],
|
||||
}),
|
||||
);
|
||||
|
||||
expectPersistedRoles(sm, ["assistant"]);
|
||||
expect(guard.getPendingIds()).toEqual([]);
|
||||
});
|
||||
|
||||
it("drops older pending ids before new tool calls when synthetic results are disabled", () => {
|
||||
const sm = SessionManager.inMemory();
|
||||
const guard = installSessionToolResultGuard(sm, {
|
||||
allowSyntheticToolResults: false,
|
||||
});
|
||||
|
||||
sm.appendMessage(
|
||||
asAppendMessage({
|
||||
role: "assistant",
|
||||
content: [{ type: "toolCall", id: "call_1", name: "read", arguments: {} }],
|
||||
}),
|
||||
);
|
||||
sm.appendMessage(
|
||||
asAppendMessage({
|
||||
role: "assistant",
|
||||
content: [{ type: "toolCall", id: "call_2", name: "read", arguments: {} }],
|
||||
}),
|
||||
);
|
||||
|
||||
expectPersistedRoles(sm, ["assistant", "assistant"]);
|
||||
expect(guard.getPendingIds()).toEqual(["call_2"]);
|
||||
});
|
||||
|
||||
it("caps oversized tool result text during persistence", () => {
|
||||
const sm = SessionManager.inMemory();
|
||||
installSessionToolResultGuard(sm);
|
||||
|
||||
Reference in New Issue
Block a user