Agents tidy up folders after generating images (sort into subfolders, rename
revisions); the image records kept the old path, so /api/images/<id>/file
answered 404 and only the requesting device still showed them from its cache.
- Generated images get a copy in the image store (images.blob, kept by the
blob GC); existing ones are copied once on start-up.
- Records follow: after bash commands with mv/rename (missing images of the
owner from the last two weeks, found by name or by content hash), when moved
with the file manager (file or folder), and on access (served from the copy,
relocated in the background; without a copy found by file name).
- Chat gallery falls back to the preview the model saw when the file is gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Images of messages (pasted images, screenshots, generated images) were base64
inside the message JSON, so opening a chat downloaded all of them at once
(66 MB for a chat with 120 screenshots). They now live in a `blobs` table,
addressed by SHA-256; messages keep a reference (blob, size). The UI loads
them from /api/blobs/<hash> lazily with an immutable cache header, the runner
fills the bytes in before model requests, JSON exports stay self-contained.
- Store::add_message moves inline images out; large opaque PNGs become JPEG
(q85) when smaller. Older chats are converted once at start-up in the
background, unused images are removed (also after deleting a chat) and the
database is vacuumed when that frees 32 MB or more.
- Responses are compressed with gzip/brotli (not images, SSE streams or
binary downloads).
Example (copy of production): chat load 66 MB -> 1.5 MB (370 KB brotli),
database 90 MB -> 27 MB.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Terminals and file managers as tabs of a chat; chat terminals keep running on
the server (no idle timeout) and re-attach from any device
- "Just chat" in New session and a built-in chat mode with a lean prompt and only
web tools; custom modes with kind (coding/conversation), read-only and tool picker
- Mode selector as a dropdown
- The chat shows running compactions (automatic: tokens and share of the limit)
and labels summaries
- Docker image builds and serves the terminal client binaries again
- Fix: atomic session updates; background title/usage writes no longer undo each
other (auto compaction triggered one turn late)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Sidebar: three status LEDs (server, models, MCP) with an overview popover (/api/status)
- Images: preview stage, purpose-based model choice and reference images
(Nano Banana Pro edit refines the chosen preview)
- Settings: restore a stored or uploaded backup (staged, applied on restart)
- Provider form: test connection; saving or reloading re-checks the status at once
- opencode Zen/Go: send x-opencode-session with a stable id per conversation
- Releases are named vYYYYMM-NNNNN; scripts/release.sh numbers, tags, builds and publishes
- Fix: backups made in the same second no longer overwrite each other
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Daily backups (database + config) into <data_dir>/backups, keep N,
optional upload to any S3-compatible bucket (SigV4, bucket pruning);
settings panel with run-now, list and download
- Daily cost summary push at 20:00 (opt-in per user, preview button)
- Automations from templates (dependency check, security review, test
health, daily summary, TODO report, docs freshness) via POST /jobs/create
- browser tool: headless Chromium over CDP – click, type, keys, waits,
JavaScript, navigation, screenshots, console errors; requests to private
network addresses are blocked (sub-resources and redirects included)
- Secrets masked in the config view: S3 secret key, metrics token
- Replace the remaining text arrows/refresh glyphs with SVG icons
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GET /metrics (bearer server.metrics_token): build info, users, sessions,
pending requests, per-model request/token/cost counters, provider_up
- CODECRAFT_LOG_FORMAT=json for one JSON object per log line
- Providers are probed every 5 minutes via their model list; status shown
in the provider settings with a manual re-check
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- codecraft: full-screen terminal client (ratatui) – local tools and files,
models via the CodeCraft server gateway or own providers (standalone with a
guided setup), slash commands, @files, permission dialogs, resume, update
- Static Linux CLI builds (x86_64/aarch64, cargo-zigbuild) served by the
server: /cli/install.sh and /cli/download/<target>
- Project memory (remember tool, .codecraft/memory.md) and personal memory
- Model fallback when a host is unreachable or a budget is used up
- Version/commit in UI and health, daily release check, "What's new" dialog
- PWA: install button, maskable icon, manifest id and screenshots
- Case-insensitive detection of connection errors for retries
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Isolated git worktree per session (create, status, merge, discard)
- Permission card: accept file-edit hunks individually; agent learns what was rejected
- Reasoning effort per message; regenerate the last answer with another model/effort
- Voice input via the Web Speech API
- Folder-up button in the file browser; ssh, rsync and mc in the image
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Web terminal (PTY over WebSocket, xterm.js, sandboxed, reattach with replay)
- Per-user git credentials and commit identity (credential store in the user's home)
- OpenSCAD tool (STL/3MF + preview renders, bounding box) and cad skill; 3D model card
- Craft phase inferred from tool activity when the agent does not report it
- Configurable review loop per mode (rounds, reviewer model, criteria)
- Delete config and Markdown agents from the agent editor
- Automations: cron-scheduled agents from Markdown job files, schedule tool, page
- change_directory tool (only on the user's request)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Web Push (VAPID + RFC 8291, pure Rust): permission/question/finished
notifications while no app window is visible; settings with test button
- Guided new-session flow: task, craft target (website/app/game/old
software/fresh), clean room or deep, description, model, folder
(new, existing or cloned git repository); originals upload to original/
- Craft phase bar (craft_phase tool) for study/specify/build/check/ready
- Chunked uploads (8 MB) up to server.max_upload_mb (default 500 MB)
- All UI glyphs and emojis replaced by themeable SVG icons
- Rename dialog with manual name or model-generated suggestion
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Files in chat: preview with type/size badges and file name; attachment chips
- Menu and settings tabs with icons
- Heatmap: distinct colour for empty hours, hourly labels
- Context chip shows used/total tokens (e.g. 221k/240k) plus percent
- LSP client: diagnostics appended to edit/write results and a diagnostics tool
(typescript-language-server, pyright, rust-analyzer, gopls, clangd; sandboxed)
- Compaction summarizes a plain transcript and retries once on empty output
- files/stat endpoint
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Sandbox (bubblewrap) for non-admin shell/git, MCP per-user rights, hard budgets and quotas,
login rate limiting, audit log and backups
- Ghidra headless decompilation (ARM64 natives built from source), binary_info tool,
clean room / deep workflow per session
- Recreate skill and commands for analysing and re-building old software
- File checkpoints with rewind/restore, background shells (bash_output, kill_shell)
- web_search tool (DuckDuckGo, SearXNG, Brave, Tavily)
- In-app dialogs and toasts instead of browser dialogs
- 15 base themes (trilium-themes palettes plus Nord, VS Code, GitHub, Catppuccin, One,
Dracula, Rose Pine, Everforest, Kanagawa) with light/dark/auto switcher and license notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>