feat(shell): 30/55/15 layout, formatted activity log, instant resume, stop confirmation

Left panels 30vw / central 55% / right rail 15vw, minimal padding. Model-activity
log and documents render via .thot-prose; decisions become hairline rows with
semantic type chips. Resume switches the view optimistically (instant feedback).
The Stop button now asks for confirmation before interrupting.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 18:15:48 +02:00
co-authored by Claude Opus 4.8
parent a719ad5990
commit f1b071d165
5 changed files with 102 additions and 33 deletions
@@ -33,8 +33,9 @@ beforeEach(() => {
test("renders the document titles from the API", async () => {
wrap(<SessionDocumentsPanel session={base} onClose={vi.fn()} onResume={vi.fn()} />);
expect(await screen.findByText("Original question")).toBeInTheDocument();
expect(screen.getByText("Final SQL")).toBeInTheDocument();
expect(await screen.findByRole("heading", { name: "Original question" })).toBeInTheDocument();
// "Final SQL" is both the section heading and the SqlViewer block label — target the heading.
expect(screen.getByRole("heading", { name: "Final SQL" })).toBeInTheDocument();
});
test("shows Resume for resumable, hides it for finalized", async () => {