diff options
| author | Danilo M. <danix@danix.xyz> | 2026-07-31 10:35:56 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-07-31 10:35:56 +0200 |
| commit | 325a6a7c12832d8b9fb9b67567e8a1c496dc1330 (patch) | |
| tree | e2128aa71ca2f739f1ddc78060a980fbe06eacbc /CHANGELOG.md | |
| download | llamachat-325a6a7c12832d8b9fb9b67567e8a1c496dc1330.tar.gz llamachat-325a6a7c12832d8b9fb9b67567e8a1c496dc1330.zip | |
feat: initial release of llamachat 0.1.0v0.1.0
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>
Diffstat (limited to 'CHANGELOG.md')
| -rw-r--r-- | CHANGELOG.md | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a7435e3 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,73 @@ +# Changelog + +All notable changes to this project are documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.1.0] - 2026-07-31 + +First working version. + +### Added + +- Persistent background process with a Unix-socket control channel, so a + window toggle costs a socket round trip instead of a process start. The + control commands (`--toggle`, `--show`, `--hide`, `--ping`, `--quit`) do + not import Qt and answer in well under a tenth of a second. +- Two chat modes. One-shot asks a single question with no context carried + over; Chat keeps a resumable multi-turn conversation. +- Model picker populated at runtime from the router's `/v1/models`, with + vision-capable models marked. +- Streaming replies rendered token by token. +- Markdown rendering for replies: headings, emphasis, lists, tables, inline + code and tinted fenced code blocks, via `QTextDocument` with no markdown + dependency. User input is shown literally so attached file contents are + never reflowed. +- Collapsed reasoning. Models with a reasoning budget return their thinking + in a separate field; it shows as a one-line summary that expands on click, + tracked per reply. +- File attachment by drag-and-drop or file dialog. Text and code files are + inlined into the prompt and truncated to fit the model's context with a + warning. Images require a vision model, and dropping one on a text model + offers to switch. +- SQLite history with FTS5 full-text search. Chat sessions reopen and + continue with context intact; one-shot entries reopen read-only. +- Attachment provenance: original path, size, SHA-256, and a thumbnail for + images, so a reopened conversation still shows what was sent even if the + file has since moved. +- System tray icon for show/hide/quit. +- Configuration in `~/.config/llamachat/config.toml`, written with defaults + on first run. +- `presets.ini` parsing for the two things the API does not report: which + models have an mmproj file, and each model's context size. +- Hyprland Lua snippets for autostart, keybind and floating window rules. + +### Fixed + +- `presets.ini` opens with a bare `version = 1` before any section, which + made `configparser` reject the whole file. +- Sessions sharing a one-second timestamp sorted unpredictably in the + history list and in search results. +- A venv PySide6 bundles almost no Qt plugins, so `QT_QPA_PLATFORMTHEME` + found nothing and every window fell back to Fusion, ignoring qt6ct and + Kvantum. The system plugin directory is now used when its Qt version + matches the bundled one exactly. +- A reply containing a markdown link to the internal reasoning scheme + produced a working toggle, letting model output drive the interface. + The scheme is namespaced, forged anchors are rewritten before display, + and only `http`, `https` and `mailto` links reach the desktop opener. +- Venv discovery compared resolved interpreter paths, so a venv created + with `--system-site-packages`, whose `bin/python3` symlinks to the system + interpreter, was discarded as "already running". + +### Security + +- Markdown is parsed with the `MarkdownNoHTML` flag, so markup in a reply is + displayed rather than interpreted. +- The control socket is created mode 0600. +- Search input is tokenised and quoted before reaching FTS5, so punctuation + cannot be read as query syntax. + |
