| Age | Commit message (Collapse) | Author | Files | Lines |
|
The history panel now hides, on the ☰ button in the top bar and on Ctrl+\.
Its width is captured before hiding and reapplied on show, so toggling does
not snap the panel back to a default. Both the width and whether it was
hidden persist between runs.
Layout state lives in state.ini beside the config rather than at QSettings'
default path, which keeps it obvious where it is and lets the checks point
it somewhere temporary instead of writing to the real one.
The button's checked state, not isVisible(), is the authority for whether
the panel is shown: isVisible() is False for every child of a window that
has not been mapped yet, so consulting it during startup would disagree
with what the user sees.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
Two additions to the chat window.
A context meter in the top bar shows how much of the active model's window
the next request will occupy: system prompt, prior turns, attachments and
the current draft. The router does not report a usable context size in
router mode (/props returns n_ctx 0), so the limit comes from ctx-size in
presets.ini. Streaming requests now ask for usage statistics, which makes
the figure exact after each reply at no extra round trip; before that it is
an estimate marked with a leading ~.
The estimate reads low on models with a reasoning budget, since thinking
tokens cannot be known before the reply arrives. The tooltip says so.
System prompts are markdown files in the prompts/ directory beside the
config, one per file, so they can be edited in an editor and kept in
version control. default.md is global, any other file is a named preset
that replaces it rather than adding to it, and a conversation may instead
carry one-off text or opt out entirely. The choice is stored per session so
reopening a chat restores the prompt it was built with.
Prompt names are reduced to safe filenames, so a name like ../../etc/passwd
cannot write outside the prompts directory, and a name that reduces to
nothing is rejected rather than creating a dotfile.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
A native PySide6 chat client for a local llama.cpp server in router mode.
Runs as a single persistent process with a Unix-socket control channel, so
a Hyprland keybind toggles the window with a socket round trip rather than
a process start. The control commands do not import Qt and answer in under
a tenth of a second.
Features: one-shot and multi-turn chat modes, runtime model discovery from
/v1/models, streaming replies rendered as markdown, collapsible reasoning
for models with a thinking budget, drag-and-drop file and image attachment
with context-aware truncation, and SQLite history with FTS5 search.
Markdown is parsed with MarkdownNoHTML so markup in a reply is displayed
rather than interpreted, and links a reply produces cannot drive the
interface.
Includes the Hyprland Lua snippets for autostart, keybind and window rules,
and a self-check suite covering everything except the GUI.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|