fix: harden agent prompt handling
This commit is contained in:
@@ -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", () => {
|
||||
|
||||
Reference in New Issue
Block a user