Commit Graph
20 Commits
Author SHA1 Message Date
adrianbonpin 6c9183f7de feat: render LaTeX, custom HTML and diagrams in the transcript
The transcript rendered whatever the model wrote as markdown, and three
things a model writes are not markdown the renderer draws.

LaTeX. Vicinae has no maths block, so `$x^2$` reached the pane as
literal TeX. `latex.ts` converts the subset models actually write into
inline markup the pane can draw: `sup`, `sub`, `b` and `i` are available
because `MdParagraph.qml` is a rich text `TextEdit` and
`markdown-model.cpp` passes `CMARK_NODE_HTML_INLINE` through untouched.
It is a linearisation rather than a typesetter, because the pane is a
launcher-width column: `\frac{a}{b}` becomes `a/b` and `\sqrt{x+1}`
becomes `√(x+1)`, with a Unicode script wherever one exists. A lone `$`
pair only counts when the inside looks like maths, so `$5 and $10` and
`cd $A; echo $B` are left as written.

Custom HTML. Raw HTML is the only route past GFM, and it is also a hole,
so `html.ts` filters it: the tags and style declarations the renderer
acts on are kept, `script` and `style` go with their content, an event
handler, a `url()` in a style value and a `javascript:` destination are
dropped, and a tag that is not on the list is shown as text rather than
swallowed. An `<a href>` becomes a markdown link, the only form Vicinae
makes clickable. A well-formed HTML block is moved into a paragraph,
because the block path keeps only the words of one.

Everything else. `code.ts` now fences a paragraph drawn with box
characters, since a paragraph wraps and a diagram that reflows says
nothing, and renames a fence label KSyntaxHighlighting would print but
never resolve.

The pass lives in `render.ts`, is plain TypeScript with no Vicinae
imports, and the default system prompt now says what the window draws.
2026-10-07 15:26:19 +08:00
adrianbonpin 550a2bbefe fix: name each tool once, and stream the reasoning live (#18) 2026-10-06 14:18:50 +00:00
adrianbonpin ff99778e5d fix: print the running tool once, not twice (#17) 2026-10-05 09:49:39 +00:00
adrianbonpin 26e05dea5b feat: Ollama models command, with load/pull/delete and unload (#16) 2026-10-05 09:43:00 +00:00
adrianbonpin 05fd9ff13b feat: auto-delete old conversations, and stop a tool call that repeats (#15) 2026-10-05 09:05:15 +00:00
adrianbonpin 576c5946f7 feat: snip a region into chat, and make links clickable (#14) 2026-10-05 08:38:50 +00:00
adrianbonpin f5d1ced4d6 chore: sweep em dashes from our own source and README (#13) 2026-10-03 22:03:00 +00:00
adrianbonpin 95edbcd20b fix: fence lone commands and give the prompt some warmth (#12) 2026-10-03 22:00:38 +00:00
adrianbonpin 75fc914eca feat: cmd+shift+delete deletes the highlighted conversation (#11) 2026-10-03 21:45:09 +00:00
adrianbonpin ac2da73669 feat: label code fences so Vicinae can colour them (#10) 2026-10-03 21:37:11 +00:00
adrianbonpin c49ffeb274 feat: strip speaker labels from the transcript, add a plain-prose prompt (#9) 2026-10-03 21:28:38 +00:00
adrianbonpin ee96f1ee61 feat: display toggles, smart session resume, fix stale transcript pane (#8) 2026-10-03 21:22:04 +00:00
adrianbonpin ffe2c6b7ed feat: newest message first, Raycast-style conversation sidebar (#7) 2026-10-03 21:15:44 +00:00
adrianbonpin 9b35fcef11 feat: conversations on the left, the transcript on the right (#6) 2026-10-03 21:09:36 +00:00
adrianbonpin d448a4377b feat: mark each speaker with a role icon in the transcript (#5) 2026-10-03 21:03:26 +00:00
adrianbonpin 31eb688455 feat: message-per-row transcript, session resume, drop the composer (#4) 2026-10-03 20:59:01 +00:00
adrianbonpin af0c75a65d style: strip the multi-line composer down to a bare editor (#3) 2026-10-03 20:45:29 +00:00
adrianbonpin 7afafdaf32 test: cover the Ollama web tools, mark trimmed snippets, new icon (#2) 2026-10-03 20:36:38 +00:00
adrianbonpin 8b507e7953 feat: initial Lam Agent extension (#1) 2026-10-03 20:32:40 +00:00
adrianbonpin 1d39aabb50 Initial commit 2026-10-03 20:11:02 +00:00