import { expect, it, vi } from "vitest"; import type { AgentQuestionRequest } from "@/features/agent"; import { createAgentInteractionReplies } from "./agent-interaction-replies"; import type { AgentSessionRuntime } from "./agent-session-runtime"; import { WorkbenchSessionResources } from "./workbench-session-resources"; it("keeps a reply bound to its original session when the user switches conversations", async () => { let resolve: () => void = () => {}; const request = vi.fn(() => new Promise((done) => { resolve = done; })); const original = { sessionId: "original", client: { replyQuestion: request }, questionOverrides: {} } as unknown as AgentSessionRuntime; const next = { sessionId: "next", questionOverrides: {} } as AgentSessionRuntime; const resources = new WorkbenchSessionResources(); resources.activeAgent = original; const setters = { permission: vi.fn(), question: vi.fn() }; const replies = createAgentInteractionReplies(resources, setters); const question = { sessionId: "original", requestId: "question" } as AgentQuestionRequest; const submitted = replies.replyQuestion(question, [["A"]]); expect(original.questionOverrides.question.status).toBe("submitting"); resources.activeAgent = next; setters.question.mockClear(); resolve(); await submitted; expect(original.questionOverrides.question).toEqual({ status: "answered", answers: [["A"]] }); expect(next.questionOverrides).toEqual({}); expect(setters.question).not.toHaveBeenCalled(); await replies.replyQuestion(question, [["B"]]); expect(request).toHaveBeenCalledTimes(1); });