feat(cli): aligne les Final à droite, tools MCP « qui parle à qui », icône animée seulement pendant l'exécution (started→done), supprime le message de fin de tool redondant — #176 (QA verte)

This commit is contained in:
2026-08-11 11:24:44 +02:00
parent 66afd3584a
commit 84fd3547a9
2 changed files with 98 additions and 13 deletions

View File

@ -242,6 +242,9 @@ describe("CustomAgentChatView", () => {
await screen.findByText("done");
expect(screen.getAllByText("hello agent")).toHaveLength(1);
expect(screen.getByText("Terminé").parentElement?.parentElement?.className).toContain(
"justify-end",
);
});
it("renders canonical progress chunks as live agent, MCP, and delegation activity", async () => {
@ -357,8 +360,8 @@ describe("CustomAgentChatView", () => {
expect(screen.getByText("MCP")).toBeTruthy();
expect(screen.getByText("MCP").closest("[data-testid='chat-tool-progress']")).toBeTruthy();
expect(screen.getByText("idea_ticket_read")).toBeTruthy();
expect(screen.getByText("Demande à QA")).toBeTruthy();
expect(screen.getByText("Demande à QA").closest("[data-testid='chat-tool-progress']")).toBeTruthy();
expect(screen.getByText("Worker ← QA")).toBeTruthy();
expect(screen.getByText("Worker ← QA").closest("[data-testid='chat-tool-progress']")).toBeTruthy();
expect(screen.getByText("Valider le rendu progress")).toBeTruthy();
expect((await screen.findAllByText("done")).length).toBeGreaterThan(0);
});
@ -547,6 +550,13 @@ describe("CustomAgentChatView", () => {
act(() => {
emitChunk?.(progress("providerNative", "started"));
emitChunk?.(progress("ideaLocal", "started"));
});
expect(screen.getByText("Worker → QA")).toBeTruthy();
expect(screen.getByText("Worker → QA").parentElement?.textContent).toContain("started");
expect(screen.getAllByRole("status", { name: "Loading" }).length).toBeGreaterThan(0);
act(() => {
emitChunk?.(progress("providerNative", "completed"));
emitChunk?.(progress("ideaLocal", "completed"));
emitChunk?.(progress("providerNative", "started"));
@ -557,11 +567,12 @@ describe("CustomAgentChatView", () => {
});
await screen.findByText("done");
expect(screen.getByText("Demande à QA")).toBeTruthy();
expect(screen.getByText("validate")).toBeTruthy();
expect(screen.getByText("Appel inter-agent")).toBeTruthy();
expect(screen.getByText("reply delivered")).toBeTruthy();
expect(screen.getAllByText("Worker ← QA")).toHaveLength(2);
expect(screen.getAllByText("validate")).toHaveLength(2);
expect(screen.queryByText("Appel inter-agent")).toBeNull();
expect(screen.queryByText("reply delivered")).toBeNull();
expect(screen.queryByText("Tool")).toBeNull();
expect(screen.queryByText("started")).toBeNull();
await waitFor(() =>
expect(screen.queryByRole("status", { name: "Loading" })).toBeNull(),
);