summaryrefslogtreecommitdiffstats
path: root/CHANGELOG.md
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md73
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.
+