feat(frontend): central 'working' indicator — elapsed time + model-stream tail
While the model works (active session, no pending widget), CentralStatus shows a Claude-Code-style live status: a pulsing dot, elapsed seconds (ticking), and a short tail of the model's current output — so the centre no longer looks stuck during the long F1 loop. Verbose stream stays in the left panel. No tokens yet (would need the SessionBridge to forward Pi usage). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -86,11 +86,15 @@ test("WIP icon toggles the Model activity panel and shows the streamed text", as
|
||||
server.use(http.post("http://localhost:8787/sessions/:id/resume", () => new HttpResponse(null, { status: 204 })));
|
||||
await userEvent.click(await screen.findByText("Attiva uno")); // opens docs panel
|
||||
await userEvent.click(await screen.findByRole("button", { name: /resume/i })); // active session
|
||||
act(() => { useSessionStore.getState().applyEvent({ type: "text_delta", text: "Looking at dim_patient." }); });
|
||||
// Model activity hidden until the WIP icon is clicked
|
||||
expect(screen.queryByText(/Looking at dim_patient/)).not.toBeInTheDocument();
|
||||
act(() => { useSessionStore.getState().applyEvent({ type: "text_delta", text: "FIRSTLINE alpha bravo charlie delta echo foxtrot golf hotel india juliet kilo" }); });
|
||||
// The verbose stream stays in the (closed) left panel: its START is not shown centrally
|
||||
// (the central working indicator shows only a short tail of last words, by design).
|
||||
expect(screen.queryByRole("heading", { name: /model activity/i })).not.toBeInTheDocument();
|
||||
expect(screen.queryByText(/FIRSTLINE/)).not.toBeInTheDocument();
|
||||
await userEvent.click(screen.getByRole("button", { name: /model activity/i }));
|
||||
expect(await screen.findByText(/Looking at dim_patient/)).toBeInTheDocument();
|
||||
// Panel open: the full streamed text is visible inside it.
|
||||
expect(await screen.findByRole("heading", { name: /model activity/i })).toBeInTheDocument();
|
||||
expect(screen.getByText(/FIRSTLINE/)).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test("renaming a group reassigns its members via setSessionGroup", async () => {
|
||||
|
||||
Reference in New Issue
Block a user