webclient: make session loads cheap, cancellable and honest
Opening a session moved ~1 MB of history JSON and a 1.5 MB bundle
uncompressed, then reloaded the whole transcript on every WebSocket
reconnect; a failed request wiped what was on screen.

Server: GZipMiddleware(1 KB) - one history page shrinks 5.1x, the SPA
bundle 3.2x.

Client:
- session_sync asks /meta instead of reloading history, and only when
  the view is idle;
- session loading keeps the previous transcript until the new data
  arrives, aborts the request it replaced, ignores stale responses and
  surfaces a retryable error banner;
- search-jump pagination no longer pages through the previous session's
  history;
- REST calls get a 30 s timeout and caller abort support;
- WS queue overflow rejects the message and marks the bubble "not sent"
  instead of silently dropping the oldest;
- tool card bodies mount on first open (a 38-card session drops ~1 MB of
  markup and ~25k elements);
- identical /sessions requests coalesce, the streaming watch is a cheap
  signature, the content-tool key is one store computed, useTime shares
  one 30 s ticker, connect() clears the retry timer.

e2e opens result cards explicitly now that bodies are lazy.
1 parent d2ef984 commit 2bc9b121d4334593cbad2916d30a9d63d043e56a
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 16 hours ago
Showing 35 changed files
View
e2e/support.py
View
navi/main.py
View
tests/unit/api/test_gzip.py 0 → 100644
View
webclient/dist/assets/index-BSZcALTY.js 100644 → 0
Not supported
View
webclient/dist/assets/index-ChEtY4ga.css 100644 → 0
View
webclient/dist/assets/index-D-jo88O-.js 0 → 100644
Not supported
View
webclient/dist/assets/index-eA-1HZAI.css 0 → 100644
View
webclient/dist/index.html
View
webclient/dist/sw.js
View
webclient/src/App.vue
View
webclient/src/api/index.js
View
webclient/src/components/chat/InputBar.vue
View
webclient/src/components/chat/MessageList.vue
View
webclient/src/components/messages/AssistantMessage.vue
View
webclient/src/components/messages/ToolCard.vue
View
webclient/src/components/messages/UserMessage.vue
View
webclient/src/composables/useTime.js
View
webclient/src/composables/useWebSocket.js
View
webclient/src/composables/wsBridge.js
View
webclient/src/i18n/messages/en.js
View
webclient/src/i18n/messages/ru.js
View
webclient/src/i18n/messages/uk.js
View
webclient/src/stores/chat/content.js
View
webclient/src/stores/chat/index.js
View
webclient/src/stores/chat/messages.js
View
webclient/src/stores/chat/recall.js
View
webclient/src/stores/chat/session.js
View
webclient/src/stores/chat/state.js
View
webclient/src/stores/sessions.js
View
webclient/src/styles/partials/_chat.scss
View
webclient/tests/unit/api/index.test.js
View
webclient/tests/unit/components/messages/toolCardRenderers.test.js
View
webclient/tests/unit/composables/useWebSocket.test.js
View
webclient/tests/unit/stores/chat.test.js
View
webclient/tests/unit/stores/sessions.test.js