fix: harden agent prompt handling

This commit is contained in:
Codex
2026-05-30 13:52:18 +08:00
parent 9eb44acd18
commit 5a858f89b5
12 changed files with 212 additions and 69 deletions

View File

@@ -296,6 +296,40 @@ describe("AcpEngine.prompt", () => {
const event = onPromptEnd.mock.calls.at(-1)?.[0];
expect(event.reason).toBe("mcp_reconnecting");
});
it("qimingcode prompt 长时间无响应时结束会话等待", async () => {
const { engine, sessionId, session, acpConnection } =
setupEngine("qimingcode");
const onPromptEnd = vi.fn();
const onSessionError = vi.fn();
engine.on("computer:promptEnd", onPromptEnd);
engine.on("session.error", onSessionError);
acpConnection.prompt.mockReturnValueOnce(new Promise(() => {}));
vi.useFakeTimers();
const promptPromise = engine.prompt(
sessionId,
[{ type: "text", text: "hi" }],
{ messageID: "rid-timeout-001" },
);
await vi.advanceTimersByTimeAsync(60_001);
await expect(promptPromise).resolves.toBeDefined();
expect(onPromptEnd).toHaveBeenCalledTimes(1);
expect(onPromptEnd.mock.calls[0][0]).toMatchObject({
sessionId,
reason: "error",
});
expect(onPromptEnd.mock.calls[0][0].description).toContain(
"ACP prompt timed out",
);
expect(onSessionError).toHaveBeenCalledTimes(1);
expect(session.status).toBe("idle");
expect((engine as any).activePromptSessions.has(sessionId)).toBe(false);
expect((engine as any).activePromptRejects.has(sessionId)).toBe(false);
});
});
describe("AcpEngine.handleAcpSessionUpdate", () => {