Spaces:
Sleeping
Sleeping
Commit History
-
Restore expired sessions via summary-based catch-up (#52)
Aksel Joonas ReediUnverified signatureWhen the backend loses a session (typically: HF Space restarted), the chat now shows a small inline banner instead of silently erroring: Where were we? Let me skim the conversation so far and pick up right where we left off — or we can start something new. [ Catch me up ] [ Start fresh ] Flow, in one pass: * Frontend stashes the raw backend messages in localStorage on every mount-hydrate and turn_complete. When the backend 404s for the session id, the SSE transport and the mount effect both fire onSessionDead → the session is flagged `expired` in sessionStore; the sidebar marks it "needs a catch-up". * Catch me up → POST /api/session/restore-summary with the cached messages. Backend creates a fresh session, runs the existing summarizer (factored into summarize_messages() and shared with in-session compaction) with a restore-specific prompt that preserves the tool-call trail, and seeds the new session with that summary wrapped in a [SYS…962191f -
Scope model selection per session instead of globally
Sessions now clone the config on creation, so switching model in one tab only affects that tab. SessionInfo carries a `model` field the selector reads on session change; writes go to a new POST /api/session/{id}/model endpoint. The global /api/config/model route still controls the default for new sessions. Unblocks running Claude in one chat and GLM 5.1 in another concurrently.bf564b6
-
Add message edit and regenerate from any point in conversation
Backend: add truncate_to_user_message() on ContextManager, POST /api/truncate/{session_id} endpoint, and session_manager.truncate() helper to slice conversation history to before a given user message. Frontend: add editAndRegenerate callback in useAgentChat that truncates backend + frontend messages then resubmits via existing chat flow. UserMessage gains an inline edit mode with pencil icon on hover, TextField for editing, Enter/Escape to confirm/cancel.0611031 -
Fix session title only updating on the very first user message
2e60856 -
Show cancelled prompt in shimmer status bar instead of chat input placeholder
3b6a2ca
-
feat: render cancelled tool state in UI after user interrupt
Send tool_state_change(cancelled) events for in-flight tools so the frontend can flip spinners to a muted "cancelled" state. Keep SSE stream open (don't call chat.stop()) so backend events arrive. Show "What should the agent do instead?" placeholder after cancel. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>887da19
-
feat: SSE keepalive, reconnection, and is_processing flag
Prevents SSE streams from being killed by reverse proxies during long operations and lets the frontend recover gracefully after sleep/disconnect. Backend: - SSE keepalive pings every 15s via `: keepalive` comments - New GET /api/events/{session_id} subscribe-only endpoint for reconnection - is_processing flag on AgentSession, exposed in session info API Frontend: - reconnectToStream() re-attaches to a running session via /api/events - Visibility change re-hydrates ALL sessions from backend on wake - Background sessions also re-sync (removed isActive guard on listener) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d7f2a7c -
fix: per-session state management for smooth task switching
Background sessions now maintain their own state snapshots in agentStore so streaming, tool calls, and panel updates are not lost when switching tasks or backgrounding the browser tab. - Add sessionStates map + updateSession/switchActiveSession/syncSnapshot - Side-channel callbacks always update per-session state (no isActiveRef guard) - Global setters (setPanel, setPanelView, etc.) sync to active snapshot - Re-sync state on browser tab visibility change - Fix direct state mutation in switchActiveSession Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f56fa2e
-
fix: clear global activity state when switching away from a session
When a session becomes inactive, reset isProcessing, activityStatus, and panel state so the next session doesn't inherit stale UI (e.g. shimmering banner from a background tool execution). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>7554f29
-
fix: protect system prompt in undo, scan backwards for dangling tool calls, gate input on SDK status
a13e8cc -
replace websocket transport with SSE
564aab6
-
sync: org onboarding, model updates, sandbox cleanup, prompt fixes
5af3ab5
-
fix: reconnect WS on session switch instead of deleting dead sessions
838cd50 -
fix: approval UI not updating after approve click
7b34ae7 -
feat: per-session WebSocket architecture for parallel chat sessions
Each session now owns its own useAgentChat + WebSocket transport instead of sharing a single instance. Background sessions process all events (including approval_required) continuously, fixing the bug where approvals from non-active sessions were silently dropped. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>27da720