feat: implement tool-session progress panel and live list updates

- Add SessionOperationsContext + SessionProgressPanel for global,
  non-blocking lifecycle progress (create/start/stop/restart/delete/
  recreate-tunnel) driven by SSE events.
- Promote SessionsContext to authoritative shared session state with
  refresh, addOrUpdateSession, and removeSession helpers.
- Wire AppShell, DashboardPage, SessionsPage, useInstanceActions,
  ToolStarter, and InstanceList into shared state so lists update
  immediately after create/delete without manual refresh.
- Remove legacy blocking overlays from CreateSessionForm, SessionCard,
  and InstanceList; keep disabled states and inline spinners only.
- Update DashboardPage tests to wrap with SessionsProvider and
  SessionOperationsProvider.
- Add .cache/ to .gitignore.

Quality gates: npm run typecheck, npm run lint, npm test -- --run
(82 passed).
This commit is contained in:
Developer
2026-06-12 13:19:58 +00:00
parent 110844e597
commit 7440720b7b
30 changed files with 1664 additions and 845 deletions
@@ -0,0 +1,19 @@
# specs/sessions-hub (index)
dir: specs/sessions-hub
## role
Defines requirements for a shared global session state system that enables real-time UI synchronization across dashboard, sessions page, and navigation components when sessions change.
## parent
index: specs/.pi-map.index.md
map: specs/.pi-map.md
## children
-
## files
- spec.md
## links
index: specs/sessions-hub/.pi-map.index.md
map: specs/sessions-hub/.pi-map.md
## workflows
-
## dirty
-
@@ -0,0 +1,19 @@
# specs/sessions-hub
dir: specs/sessions-hub
index: specs/sessions-hub/.pi-map.index.md
## role
Defines requirements for a shared global session state system that enables real-time UI synchronization across dashboard, sessions page, and navigation components when sessions change.
## files
- spec.md | Defines requirements for implementing a shared global session state across dashboard, sessions page, and navigation to enable immediate UI updates when sessions are created or modified. | dep: SessionsContext, React Context API, sessions API (`/users/me/sessions`)
## arch
Specification-driven architecture using a centralized hub pattern with reactive state propagation to decoupled consumers.
## tags
sessions, spec, defines, requirements, implementing, shared, global, session
## symbols
-
## workflows
-
## dirty
-
@@ -0,0 +1,33 @@
## ADDED Requirements
### Requirement: New sessions appear in lists immediately
The system SHALL add a newly created session to every session list as soon as the creation API returns.
#### Scenario: Create session from floating button
- **WHEN** the user starts a tool from the global floating action button
- **THEN** the modal closes
- **AND** the new session appears on the dashboard and sessions page with status "pending" or "building"
- **AND** the active session count in the navigation updates immediately
#### Scenario: Create session from repository detail
- **WHEN** the user launches a tool inside a repository/workspace detail page
- **THEN** the new session appears in the repository instance list
- **AND** the global session lists update without requiring a manual refresh
### Requirement: Global session state is authoritative
The system SHALL use a single shared session state for the navigation sidebar, dashboard, and sessions page.
#### Scenario: Shared state updated
- **WHEN** a session is added, removed, or changed
- **THEN** the navigation badge, dashboard, and sessions page all reflect the change
- **AND** no page reload is required
## MODIFIED Requirements
### Requirement: Sessions page loads sessions
**FROM:** Sessions page fetches `/users/me/sessions` independently on mount.
**TO:** Sessions page reads sessions from the shared `SessionsContext`; the context fetches on mount and exposes a refresh function.
### Requirement: Dashboard page loads sessions
**FROM:** Dashboard page fetches `/users/me/sessions` independently on mount.
**TO:** Dashboard page reads sessions from the shared `SessionsContext`.