fix(agents): unwrap read_agent_context DTO content (#140)

Le contexte projet d'un agent s'affichait "[object Object]" et se
vidait à la réouverture du panneau : read_agent_context renvoie déjà
{content} côté backend, mais les gateways front traitaient la réponse
comme une string brute. Les deux gateways (Tauri + HTTP) unwrap
maintenant .content ; type AgentContextDocument ajouté au domaine.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 14:35:36 +02:00
parent cf61060ffb
commit 863d9b7277
10 changed files with 135 additions and 6 deletions

View File

@ -241,6 +241,43 @@ describe("AgentsPanel (with MockAgentGateway)", () => {
});
});
it("reopening the agents panel reloads the saved context as textarea text", async () => {
const agent = new MockAgentGateway();
await agent.createAgent(PROJECT_ID, {
name: "Reopen",
profileId: "p1",
initialContent: "initial",
});
const firstRender = renderPanel(agent);
await waitForIdle();
let buttons = screen.getAllByRole("button", { name: /reopen/i });
let rowBtn = buttons.find((b) => b.hasAttribute("aria-pressed"))!;
fireEvent.click(rowBtn);
let textarea = await screen.findByLabelText("agent context");
fireEvent.change(textarea, { target: { value: "persisted after reopen" } });
fireEvent.click(screen.getByRole("button", { name: "Save" }));
await waitFor(async () => {
const agents = await agent.listAgents(PROJECT_ID);
await expect(agent.readContext(PROJECT_ID, agents[0].id)).resolves.toBe(
"persisted after reopen",
);
});
firstRender.unmount();
renderPanel(agent);
await waitForIdle();
buttons = screen.getAllByRole("button", { name: /reopen/i });
rowBtn = buttons.find((b) => b.hasAttribute("aria-pressed"))!;
fireEvent.click(rowBtn);
textarea = await screen.findByLabelText("agent context");
expect((textarea as HTMLTextAreaElement).value).toBe("persisted after reopen");
});
it("deleting an agent removes it from the list", async () => {
const agent = new MockAgentGateway();
await agent.createAgent(PROJECT_ID, {