webclient: a viewer for every content type, and a message sent mid-turn waits its course
The lightbox is now one dialog for every file the artifacts panel and the
content cards can show: audio and video players on the kit's own controls, a
text/source view with highlight.js, and a three.js viewer that replaced the
standalone stl.html frame with a model one. highlight.js emits .hljs-* classes
and ships no theme, so until now every highlighted block rendered in one flat
colour — app.scss now carries the palette.

While a turn runs, the send button no longer turns into Stop and vanishes the
draft with it: the message goes into the socket and is marked "queued" until
the stream_start of the turn that consumes it, the write-now-run-next model
navi-code uses. Send and Stop sit side by side, and the queue chip takes the
larger of the local and the server's counts.

The socket keeps its own liveness: a ping every 20 s, a watchdog that reopens a
socket silent for 45 s or stuck in CONNECTING, and a reconnect on resume from
background, network return or bfcache. On reopen it drops a half-written
message left by the dead socket, so the session_sync that follows is not hidden
behind a stream that will never finish.
1 parent 8d65765 commit c381aaa615acc3a3766205c72326222795351e30
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 21 hours ago
Showing 36 changed files
View
docs/android-client.md
View
webclient/CLAUDE.md
View
webclient/dist/assets/index-CwAzkKrT.css 100644 → 0
View
webclient/dist/assets/index-DGhWA8Gw.js 100644 → 0
Not supported
View
webclient/dist/assets/index-Dtggp9Eo.js 0 → 100644
Not supported
View
webclient/dist/assets/index-uqZyYvXb.css 0 → 100644
View
webclient/dist/content-viewers/model.html 0 → 100644
View
webclient/dist/content-viewers/stl.html 100644 → 0
View
webclient/dist/index.html
View
webclient/dist/sw.js
View
webclient/public/content-viewers/model.html 0 → 100644
View
webclient/public/content-viewers/stl.html 100644 → 0
View
webclient/src/App.vue
View
webclient/src/components/artifacts/ArtifactsPanel.vue
View
webclient/src/components/chat/InputBar.vue
View
webclient/src/components/chat/QueuedMessagesChip.vue
View
webclient/src/components/messages/ContentCard.vue
View
webclient/src/components/messages/UserMessage.vue
View
webclient/src/components/ui/ContentLightbox.vue 0 → 100644
View
webclient/src/components/ui/ImageLightbox.vue 100644 → 0
View
webclient/src/composables/useLightbox.js
View
webclient/src/composables/useMarkdown.js
View
webclient/src/composables/useWebSocket.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.js
View
webclient/src/styles/app.scss
View
webclient/src/utils/contentTypes.js 0 → 100644
View
webclient/src/utils/sourceHighlight.js
View
webclient/tests/unit/components/chat/inputBar.test.js 0 → 100644
View
webclient/tests/unit/components/ui/contentLightbox.test.js 0 → 100644
View
webclient/tests/unit/composables/useMarkdown.test.js
View
webclient/tests/unit/composables/useWebSocket.test.js
View
webclient/tests/unit/stores/chat.test.js
View
webclient/tests/unit/utils/contentTypes.test.js 0 → 100644