feat: chat rendering toolcalls, footer overview

This commit is contained in:
2026-08-09 20:24:11 -04:00
parent cb8a88d0bd
commit 259b1d3b2d
14 changed files with 664 additions and 383 deletions

View File

@@ -374,7 +374,7 @@ describe("/pygienium-all orchestrator (task 12)", () => {
expect(joined).toContain("all [");
});
it("renders only the unified widget in UI mode (no per-check spinner)", async () => {
it("renders only the unified footer widget in UI mode (no per-check footer)", async () => {
registerCheck(fakeCheck("alpha"));
registerCheck(fakeCheck("beta"));
const calls: Array<[string, string[] | undefined]> = [];
@@ -387,14 +387,15 @@ describe("/pygienium-all orchestrator (task 12)", () => {
await runAllChecks({ cwd, ui, hasUI: true });
const keys = new Set(calls.map(([k]) => k));
// The unified strip drives the widget area
expect(keys.has("pygienium-all-progress")).toBe(true);
// …and per-check strips never claim it, so no second spinner can
// flicker/swap against the unified one.
expect(keys.has("pygienium-progress")).toBe(false);
// The all-run footer drives the belowEditor widget area under its own key
expect(keys.has("pygienium-all")).toBe(true);
// …and per-check footers never claim their slot (footer:false), so two
// overviews never compete over the same widget area.
expect(keys.has("pygienium")).toBe(false);
// The widget is cleared when the run completes.
const last = calls[calls.length - 1]!;
expect(last[0]).toBe("pygienium-all-progress");
expect(last[1]).toBeUndefined();
const last = calls[calls.length - 1];
expect(last).toBeDefined();
expect(last?.[0]).toBe("pygienium-all");
expect(last?.[1]).toBeUndefined();
});
});