Web companion channel - the gateway's /ui chat instrument.
Chat-first anatomy (the ChatGPT/Claude shape): the conversation is a centered document column - user messages as compact right-aligned pills, vis answers as flat typeset prose behind a small accent avatar, the execution trace folded into a 'Work' disclosure, a floating pill composer pinned to the bottom (Enter sends, Shift+Enter breaks, auto-grows), a thin blurred sticky header, and CONTEXT - the same ctx mirror the model reads - as a quiet right rail.
Pure Clojure SSR: hiccup renders HTML, HTMX does declarative swaps,
the live feed is the htmx SSE extension consuming
/ui/session/:sid/stream - a gateway SSE stream of named HTML
fragments (activity/thinking/context) rendered server-side. Every
script is VENDORED on the classpath and served from memory
(htmx 2.0.10 + its SSE extension + ui.js) - a page
never loads anything from outside vis.
This namespace is the THIRD canonical-IR walker: the TUI walks IR
into ANSI cells, Telegram walks it into its HTML subset, and
ir->hiccup walks the same IR into DOM (GATEWAY.md §4.1 ALWAYS IR).
AUTO-MOUNT: the extension declares a :gateway.slot/http-routes
contribution; the gateway pulls it whenever it builds its handler
(whiteboard pattern - no ordering requirement, see GATEWAY.md §10.1).
Auth: none on the loopback default (gateway-auth-required? false);
when the gate is on, POST /ui/auth exchanges the bearer token for an
HttpOnly vis_token cookie that EventSource carries on SSE connect.
Theme: vis-light - white surfaces, slate neutrals, one indigo accent -
CSS variables lifted 1:1 from internal/theme.clj light-palette.
Web companion channel - the gateway's `/ui` chat instrument. Chat-first anatomy (the ChatGPT/Claude shape): the conversation is a centered document column - user messages as compact right-aligned pills, vis answers as flat typeset prose behind a small accent avatar, the execution trace folded into a 'Work' disclosure, a floating pill composer pinned to the bottom (Enter sends, Shift+Enter breaks, auto-grows), a thin blurred sticky header, and CONTEXT - the same ctx mirror the model reads - as a quiet right rail. Pure Clojure SSR: hiccup renders HTML, HTMX does declarative swaps, the live feed is the htmx SSE extension consuming `/ui/session/:sid/stream` - a gateway SSE stream of named HTML fragments (activity/thinking/context) rendered server-side. Every script is VENDORED on the classpath and served from memory (htmx 2.0.10 + its SSE extension + ui.js) - a page never loads anything from outside vis. This namespace is the THIRD canonical-IR walker: the TUI walks IR into ANSI cells, Telegram walks it into its HTML subset, and `ir->hiccup` walks the same IR into DOM (GATEWAY.md §4.1 ALWAYS IR). AUTO-MOUNT: the extension declares a `:gateway.slot/http-routes` contribution; the gateway pulls it whenever it builds its handler (whiteboard pattern - no ordering requirement, see GATEWAY.md §10.1). Auth: none on the loopback default (`gateway-auth-required?` false); when the gate is on, POST /ui/auth exchanges the bearer token for an HttpOnly `vis_token` cookie that EventSource carries on SSE connect. Theme: vis-light - white surfaces, slate neutrals, one indigo accent - CSS variables lifted 1:1 from `internal/theme.clj` light-palette.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |