Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
80cfaf8
docs: add Windows desktop redesign spec
ULookup Jun 19, 2026
b540aba
docs: add Windows desktop implementation plan
ULookup Jun 19, 2026
7f252a2
chore: ignore local worktrees
ULookup Jun 19, 2026
055a551
refactor(webui): split shared API transport
ULookup Jun 19, 2026
cf75e80
fix(webui): reject non-success HTTP responses
ULookup Jun 19, 2026
592dd5d
feat(webui): add typed worldbuilding APIs
ULookup Jun 19, 2026
c18bb2b
docs: align desktop plan with API contract
ULookup Jun 19, 2026
52fd4bf
fix(webui): align typed APIs with backend contract
ULookup Jun 19, 2026
2f6dee2
fix(webui): preserve typed API response metadata
ULookup Jun 19, 2026
5d1e925
feat(webui): complete interactive SSE requests
ULookup Jun 19, 2026
8f79d13
docs: align SSE workflow plan with runtime
ULookup Jun 19, 2026
1f2a17f
fix(webui): harden interactive SSE workflows
ULookup Jun 19, 2026
98437b3
fix(webui): isolate interactive request lifecycles
ULookup Jun 19, 2026
4064753
feat(webui): add resource page primitives
ULookup Jun 19, 2026
0e85b04
fix(webui): harden resource page primitives
ULookup Jun 19, 2026
836f9f3
docs: sequence desktop shell before pages
ULookup Jun 19, 2026
967164d
feat(webui): add ten-page desktop shell
ULookup Jun 19, 2026
aec7441
fix(webui): preserve shell overlays and page state
ULookup Jun 19, 2026
f6f51fd
fix(webui): keep world dashboard scrollable
ULookup Jun 19, 2026
25f3499
feat(webui): add real-data world overview
ULookup Jun 19, 2026
3e296fc
fix(webui): preserve overview data availability
ULookup Jun 19, 2026
1377c64
fix(webui): clarify overview metric provenance
ULookup Jun 20, 2026
cf7df90
feat(webui): migrate sessions into desktop workspace
ULookup Jun 20, 2026
2206b82
fix(webui): preserve sessions workbench state
ULookup Jun 20, 2026
e133d3e
fix(webui): keep sessions inspector reachable
ULookup Jun 20, 2026
9b7597e
feat(webui): add world and character workspaces
ULookup Jun 20, 2026
c38a5b7
fix(webui): complete character resource workspace
ULookup Jun 20, 2026
1929f8e
fix(webui): retain character deletion state
ULookup Jun 20, 2026
9e38231
fix(webui): preserve empty character refresh warning
ULookup Jun 20, 2026
1f23612
feat(webui): add chapter and scene workspaces
ULookup Jun 20, 2026
39fea59
fix(webui): harden chapter and scene workflows
ULookup Jun 20, 2026
6eb1f36
fix(webui): guard chapter workspace navigation
ULookup Jun 20, 2026
f7a41dd
fix(webui): guard world changes and revert drafts
ULookup Jun 20, 2026
c50946d
feat(webui): add foreshadowing and secret workspaces
ULookup Jun 20, 2026
6182402
fix(webui): harden foreshadowing and secret workspaces
ULookup Jun 20, 2026
7c2d9ea
fix(webui): align narrative workspaces with real context
ULookup Jun 20, 2026
abb6ef8
fix(webui): guard narrative mutations across committed worlds
ULookup Jun 20, 2026
ffb0ff2
feat(webui): add file library and desktop settings
ULookup Jun 20, 2026
c0c0e51
fix(webui): harden file and settings workflows
ULookup Jun 20, 2026
467a228
fix(webui): preserve partial file and settings states
ULookup Jun 20, 2026
824117f
fix(webui): isolate file inspector across worlds
ULookup Jun 21, 2026
9d70b2c
fix(loop): remove AgentLoop retry layer, rely on provider internal retry
ULookup Jun 21, 2026
94cbbff
fix(loop): keep context-window error recovery in AgentLoop retry logic
ULookup Jun 21, 2026
f09ec47
fix(loop): remove all AgentLoop retry logic, delegate entirely to pro…
ULookup Jun 21, 2026
dd864ad
fix(webui): surface file and desktop failures
ULookup Jun 21, 2026
42fc8e1
style(webui): match approved desktop design system
ULookup Jun 21, 2026
b7bffec
fix(webui): complete responsive desktop drawers
ULookup Jun 21, 2026
077cf07
fix(webui): harden responsive drawer focus
ULookup Jun 21, 2026
5d5bc3e
fix(webui): restore focus after compact navigation
ULookup Jun 21, 2026
d8f545a
merge: resolve .gitignore conflict with main
ULookup Jun 21, 2026
099a830
merge: resolve agent_loop.cpp conflict with main (PR #169 hardening)
ULookup Jun 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ config.json
CMakeUserPresets.json
.merak/
.claude/
/docs/
.superpowers/

# Dependencies
node_modules/
Expand All @@ -34,5 +32,9 @@ Thumbs.db
# Build artifacts
dist/

# Documentation (generated)
/docs/
.superpowers/

# Worktrees
.worktrees/
113 changes: 113 additions & 0 deletions .superpowers/sdd/task-7-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Task 7 Report: Sessions Workbench

## Status

Implemented the lazy `sessions` route as a three-column sessions workbench using the existing session history, conversation, composer, SSE, and inspector components.

## RED

1. Baseline command:
`npm test -- --run src/__tests__/UserFlow.test.tsx src/__tests__/components.test.tsx`
2. Baseline result: 48 passed, 2 failed.
3. Preserved baseline failures:
- `World time control` / `Current: Day 4, dusk` did not match the approved rendered labels `世界时间` / `当前:Day 4, dusk`.
- The removed `Foreshadowing` sub-tab did not exist; `Create` is the approved accessible top-level tab.
4. New page test RED:
`npm test -- --run src/__tests__/UserFlow.test.tsx`
5. New page test result: failed because `../pages/SessionsPage` did not exist.

## GREEN

1. Focused command:
`npm test -- --run src/__tests__/UserFlow.test.tsx src/__tests__/components.test.tsx`
2. Result: 51 passed, 0 failed across 2 test files.
3. Build command: `npm run build`
4. Result: TypeScript and Vite production build passed; Vite emitted a pre-existing large main-chunk advisory.
5. Lint command: `npm run lint`
6. Result: 0 errors and 12 pre-existing unused-type warnings in `src/api/client.ts`.

## Preserved Workflows

- `SessionList` remains the sole owner of create, select, rename, generated-title, archive, and restore behavior.
- `ChatTimeline` and `Composer` remain mounted once through `MainPanel`, preserving messages, send, cancel, approvals, SSE status, and tool/run rendering.
- `InspectorPanel` remains the sole owner of Story, Files, Agents, Create, and Run content, preserving generated files, editor entry points, creation dialogs, run replay, and audit behavior.
- `App` still owns SSE setup and keeps help, setup, chapter review, ask, creation request, and export overlays outside the page route.
- Editor routing and close protection remain unchanged.

## Structure

- Left: current-world session history using real `state.sessions` data.
- Center: selected session title, connection status, chat timeline, and composer.
- Right: existing inspector with approved `Story`, `Files`, `Agents`, `Create`, and `Run` labels.
- Responsive behavior retains the history and inspector toggles without duplicating stateful workbench components.

## Self-review

- Confirmed `SessionsPage` is emitted as a separate lazy build chunk.
- Confirmed the legacy workbench remains available for routes not migrated in this task.
- Confirmed overlays remain siblings of the lazy page and were not moved or duplicated.
- Confirmed no fixture content was added to production UI.
- No task-specific lint errors remain.

## Review Fixes

### RED

Command:
`npm test -- --run src/__tests__/UserFlow.test.tsx src/__tests__/components.test.tsx src/__tests__/AppState.test.ts`

The new regressions demonstrated that:

- `SET_SESSION` retained the previous agent when the selected session had no `agent_id`.
- The sessions page exposed no `aria-hidden` state and desktop/tablet toggles did not control panel visibility.
- A typed composer prompt could enable the send button without a selected session.
- The App phase policy did not admit `sessions` during `no_agent`.

### GREEN

Focused command:
`npm test -- --run src/__tests__/UserFlow.test.tsx src/__tests__/components.test.tsx src/__tests__/AppState.test.ts`

Result: 98 passed, 0 failed across 3 test files.

Build command: `npm run build`

Result: TypeScript and Vite production build passed. The existing main-chunk size advisory remains; `SessionsPage` remains a separate lazy chunk.

Lint command: `npm run lint`

Result: 0 errors and the same 12 pre-existing unused-type warnings in `src/api/client.ts`.

### Preserved constraints

- `no_world` still renders onboarding before any sessions route can mount.
- `no_agent` permits the sessions route so a user can select or create a session.
- Selecting or creating a session atomically sets its agent, clears a missing agent, and moves the app to ready.
- The composer send action stays disabled until both prompt text and a session ID exist; its handler guard remains intact.
- Desktop and tablet toggles now collapse grid columns, remove hidden panels from interaction, and expose matching `aria-hidden` / `aria-expanded` state.

## Final Review Fixes

### RED

Command:
`npm test -- --run src/__tests__/components.test.tsx src/__tests__/UserFlow.test.tsx`

Result: 2 new failures, confirming that the base sessions grid required a 420px center track and legacy `MainPanel` sidebar mode referenced the sessions-only `session-history-panel` ID.

### GREEN

Command:
`npm test -- --run src/__tests__/components.test.tsx src/__tests__/UserFlow.test.tsx`

Result: 57 passed, 0 failed across 2 test files.

Build command: `npm run build`

Result: TypeScript and Vite production build passed. The existing main-chunk size advisory remains.

### Preserved constraints

- The base three-column grid now uses `minmax(0, 1fr)`, so a 1180-1293px viewport can retain the inspector without exceeding the shell content width.
- The existing `1179px` inspector-overlay breakpoint remains, preserving the 960px minimum-window layout.
- Sessions mode retains `aria-controls="session-history-panel"`; legacy sidebar mode emits no reference to that sessions-only ID.
Loading
Loading