fix(recall): stabilize scheduled callback system and improve UX
Backend fixes:
- stop_session now stops headless recall runs via _busy_sessions dict
- _fire_recall sets user ContextVars so tools work correctly
- MaxIterationsReached treated as success, not failure
- skip_next_recall uses GREATEST(trigger_at, now) for overdue recalls
- schedule_recall rejects past trigger times
- timezone offset double-adjustment fixed for aware datetimes
- _fire_recall registers _AgentRun for reconnect/replay support
- session_sync race with stream_start fixed

Frontend improvements:
- Recall banner moved to ChatHeader with live Cancel/Skip buttons
- Recall messages styled with is_recall flag and badge
- Real-time recall updates via WebSocket (recall_update events)
- Recall filter moved to sessions-header as toggle button
- Session list shows clock icon for sessions with pending recall
- Empty state messages for empty/filtered session lists
- Fixed missing api import in ChatHeader.vue

Tests:
- Updated scheduler_loop tests for _busy_sessions dict change

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent c60e24c commit e4984faa580bc253626c5ca758d8dd32e4938799
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored on 15 May
Showing 25 changed files
View
navi/api/routes/sessions.py
View
navi/api/routes/webhooks.py
View
navi/api/websocket.py
View
navi/core/agent.py
View
navi/core/events.py
View
navi/core/scheduler.py
View
navi/llm/base.py
View
navi/tools/manage_recall.py
View
navi/tools/schedule_recall.py
View
tests/integration/test_scheduler_loop.py
View
tests/unit/tools/test_recall_tools.py
View
webclient/dist/assets/index-BokRfynu.css 0 → 100644
View
webclient/dist/assets/index-C2n90a7h.js 0 → 100644
Not supported
View
webclient/dist/assets/index-C4fiBPi3.css 100644 → 0
View
webclient/dist/assets/index-CTPV0D6r.js 100644 → 0
Not supported
View
webclient/dist/index.html
View
webclient/src/components/chat/ChatHeader.vue
View
webclient/src/components/messages/UserMessage.vue
View
webclient/src/components/sidebar/AppSidebar.vue
View
webclient/src/components/sidebar/SessionItem.vue
View
webclient/src/components/sidebar/SessionList.vue
View
webclient/src/composables/useWebSocket.js
View
webclient/src/stores/chat.js
View
webclient/src/stores/sessions.js
View
webclient/src/styles/app.scss