| Age | Commit message (Collapse) | Author | Files | Lines |
|
The card has three states: an entry line, a file state for staged files with Chat about it, and the chat. SUPER+Home resumes a conversation active in the last 10 minutes and otherwise starts a new one. The paperclip opens a picker drawn in the card, since a system dialog would open beneath the overlay that holds the keyboard. Button gains a font alias for the paperclip glyph, and the canvas a socketPath property so a check can point it at a scratch daemon.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
Files.js decides what the card offers for a staged file; the daemon decides what chat accepts, so the text and image lists match its own. Dropped URLs become paths only for file:// ones.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
From review of the canvas. Escape stopped working in three ways, each
leaving the keyboard grabbed with nothing to receive it: the history
field hiding took focus with it, a disabled input could not hold focus
while the daemon was down, and a click in a streaming reply focused text
the next flush destroyed. The card now gives focus back to the input
whenever it falls out, and the input is read-only rather than disabled.
Only an error the daemon marks as ending the reply (turn) closes the live
row; a command error, possibly another client's, used to freeze the reply
mid-stream. The running tool comes from state events, hello included.
Scrolling up during a stream no longer snaps back, since following stops
when a movement starts. History snippets go through Notify.sanitize like
any model output, links open only for http, https and mailto, and a line
opening with inline triple-backtick code is no longer taken as a fence.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The socket, the turn model and the window live in Assistant.qml, outside
the window's loader, so closing the card loses nothing and a reply keeps
streaming while it is closed. Tokens reach the model on a 50 ms tick
rather than per token. Prose goes through Notify.sanitize, because model
output can quote a search result and a remote image in it would be
fetched on render. Code blocks get a copy button once their fence closes.
The history panel lists conversations and searches them through the
daemon's full-text index.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
Qt's markdown renders a fence but gives no per-block hook, so a copy
button per code block needs the fences found first. An unclosed fence is
open code, which is every fence while a reply streams; a fence inside a
list item keeps its indent out of the copied text.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|