Installed apps checked their service worker at /sw-<old build>.js. That file no longer exists after an update and the static fallback answered with index.html, so the update check failed and the old worker kept serving the previous app shell. The old frontend crashed on the new image references (base64Size of a missing `data`), leaving a blank page on phones. Old service worker URLs now get the clean-up worker (/sw.js), which unregisters and reloads; missing scripts and styles answer 404 instead of HTML. - Task list above the composer folds to one line (progress, current task), remembered per device. - max-height: 560px layout (square phones such as the Clicks Communicator, landscape): tighter top bar, composer and new-chat wizard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
267 lines
13 KiB
Markdown
267 lines
13 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to CodeCraft. Versions follow [Semantic Versioning](https://semver.org/);
|
||
until 1.0, minor versions may contain breaking changes.
|
||
|
||
## [Unreleased]
|
||
|
||
### Added
|
||
|
||
- **Collapsible task list:** the model's task list above the composer folds to one line
|
||
(progress and current task) with a click on its heading; the choice is kept per device.
|
||
- **Square and short screens** (e.g. Clicks Communicator, phones in landscape): tighter top bar,
|
||
composer and new-chat wizard, so the chat keeps most of the height.
|
||
|
||
### Fixed
|
||
|
||
- **Blank page on phones after the update:** installed apps (PWA) checked their service worker
|
||
at its old URL, got the web page instead of a script and therefore kept the previous app
|
||
version forever. With the new image format of v202611-00010 that old version crashed after
|
||
showing the chat for a moment. Old service worker URLs now get the clean-up worker, which
|
||
removes the stale worker and reloads the current version. Missing scripts/styles answer
|
||
404 instead of the web page.
|
||
|
||
## [v202611-00010] – 2026-11-09
|
||
|
||
### Changed
|
||
|
||
- **Chats with many images load much faster:** images (screenshots, generated images, pasted
|
||
images) are stored separately instead of inside the messages and load on demand when they
|
||
scroll into view, cached by the browser. Large PNGs without transparency are stored as JPEG.
|
||
Older chats are converted once on the first start; the database usually shrinks a lot.
|
||
Example: a chat with 120 screenshots loads 1.5 MB instead of 66 MB.
|
||
- **Compressed responses:** the API and the web UI are sent with gzip/brotli (not images,
|
||
downloads or live streams).
|
||
|
||
## [v202611-00009] – 2026-11-09
|
||
|
||
### Fixed
|
||
|
||
- **Sandbox on x86_64:** the start-up check of bubblewrap did not mount `/lib64`, so it failed
|
||
on amd64 hosts and shell commands of non-admin users were disabled.
|
||
|
||
## [v202611-00008] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- **Instructions per chat:** *⋯ → Instructions for this chat* (Telegram: `/prompt`) sets rules
|
||
that apply to every message of that chat on top of the mode – language, tone, the part of the
|
||
project to work on. A chip in the header shows when a chat has them; forks keep them.
|
||
|
||
### Fixed
|
||
|
||
- OpenAI-compatible providers: tool results no longer carry a `name` field. Gateways that
|
||
translate to Anthropic (opencode) rejected the request with "anthropic-messages cannot
|
||
preserve named conversation participants".
|
||
- Telegram: the token field is no longer filled in by the browser's password manager, the bot
|
||
token is found in whatever is pasted (also the whole BotFather message), and a wrong format
|
||
gets a clear message instead of "HTTP 404".
|
||
|
||
## [v202611-00007] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- **Telegram bot as a chat interface:** every user can connect their own bot (*Settings →
|
||
Account → Telegram*: token from @BotFather, then `/start <code>` pairs it with their Telegram
|
||
account – other chats are ignored). Messages, photos and files go to the current session; the
|
||
agent's steps show live, the answer comes formatted, images from tools come as photos, and
|
||
approvals and questions have buttons. Commands like the terminal client: `/sessions`,
|
||
`/session`, `/new`, `/clear`, `/mode`, `/model`, `/permissions`, `/effort`, `/stop`, `/status`,
|
||
`/costs`, `/memory`, `/jobs`, `/compact`, `/help`. The server polls Telegram – no public
|
||
webhook needed.
|
||
|
||
## [v202611-00006] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- The image contains the Docker CLI (static client). With the host's `/var/run/docker.sock`
|
||
mounted (and its group), admins' agents and terminals can use the host's Docker;
|
||
`scripts/move-server.sh --docker-sock` sets this up on a new host.
|
||
- `scripts/move-server.sh --tools-dir DIR`: agent home, users' homes and `/tmp` on a separate disk.
|
||
|
||
## [v202611-00005] – 2026-11-09
|
||
|
||
### Fixed
|
||
|
||
- Commits by agents, terminals and the git panel always use the name and e-mail from
|
||
*Settings → Account → Git* – also in repositories that have their own `user.name`/`user.email`
|
||
(agents had set those as a workaround while no identity was configured). Agents are told not
|
||
to change the git identity.
|
||
|
||
## [v202611-00004] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- **Chats side by side:** *Open beside* in a chat's sidebar menu shows up to three chats as
|
||
columns, each with its own tabs and composer (desktop).
|
||
- **My modes:** every user can create personal modes under *Settings → My modes* (kind, tools,
|
||
read-only, prompt, model); they appear only for that user.
|
||
- **Budget warnings** as push notifications for admins (warning share and 100 %) for the total,
|
||
provider and image budgets and the opencode Go windows; the status overlay shows all budgets.
|
||
- `scripts/move-server.sh` moves an installation to another Docker host with bind mounts
|
||
(e.g. Unraid), `scripts/smoke-test.sh` checks a running instance.
|
||
|
||
### Changed
|
||
|
||
- File manager tabs of a chat are stored on the server, so they are the same on every device.
|
||
|
||
## [v202611-00003] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- The Docker image ships the terminal client again (static Linux x86_64 and aarch64 binaries):
|
||
`curl -fsSL https://<your-server>/cli/install.sh | sh`, download links in the settings and
|
||
`codecraft update` work without building from source.
|
||
- File manager: *Open chat here* in a folder's menu starts a chat in that folder.
|
||
- **Tabs in a chat:** open terminals and file managers next to the chat (topbar buttons or
|
||
"+" in the tab strip), as many as needed. Terminals of a chat keep running on the server until
|
||
they are closed, so they are there again after a reload or on another device (output is
|
||
replayed); they end when the chat is deleted or the server restarts.
|
||
- **Chat mode:** *New session → Just chat* (and mode `chat`) for plain conversation – a lean
|
||
prompt with date and personal memory, web search and fetch only, no project or files.
|
||
- **Own modes:** *Settings → Agents & commands → New mode* with kind (coding or conversation),
|
||
read-only switch, tool checkboxes, prompt, model and review loop; custom modes show up in
|
||
*New session* and the mode selector.
|
||
- The chat shows when the conversation is being compacted – automatically because the context
|
||
is nearly full (with tokens and share of the limit) or on request – and labels the summary.
|
||
|
||
### Changed
|
||
|
||
- The mode selector in the composer is a dropdown.
|
||
|
||
### Removed
|
||
|
||
- *Settings → Config file* no longer offers to move `${NAME}` values into the configuration (a
|
||
one-time migration); `${NAME}` references keep working.
|
||
|
||
### Fixed
|
||
|
||
- Session updates from background tasks (title, token usage, phase, todos) and from the UI
|
||
no longer overwrite each other. Often the first answer's token usage was lost, so automatic
|
||
compaction and the context display started one turn late.
|
||
|
||
## [v202611-00002] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- **opencode prices:** *Fetch prices* reads prices, context and output limits, image input and
|
||
reasoning from opencode's model list (Zen and Go), including long-context tiers and
|
||
peak-hour or date-based factors. Costs apply them per request (`price_tiers`,
|
||
`price_multipliers` on a model).
|
||
- **opencode costs and Go limits:** the cost opencode reports per response is recorded instead
|
||
of an estimate, and with a *plan limit* on the provider the Go allowance is tracked in the
|
||
5-hour, 7-day and monthly windows (budget table and status overlay; usage through CodeCraft
|
||
only).
|
||
- **Settings → Config file** lists `${NAME}` references and moves the values of set variables
|
||
into the configuration, so `.env` only needs deployment settings.
|
||
|
||
### Changed
|
||
|
||
- Examples and forms no longer suggest environment variables for keys; `.env.example` holds
|
||
deployment settings only.
|
||
|
||
## [v202611-00001] – 2026-11-09
|
||
|
||
### Added
|
||
|
||
- **Image generation picks the model:** the agent drafts cheap previews, asks which one to
|
||
refine (with the price of the final model), then creates the final image with the best model
|
||
for the purpose (photo, illustration, text, design). Models that take a reference image
|
||
(Nano Banana Pro edit) refine the chosen draft. Known fal.ai models come with sensible
|
||
defaults; `stage`, `good_for` and `reference_param` in `[images].models` override them.
|
||
- **Restore a backup** in *Settings → Audit*: a stored backup or an uploaded zip. The current
|
||
state is backed up first (`…-before-restore.zip`), then CodeCraft restarts with the restored
|
||
database and configuration.
|
||
- **Test connection** in the provider form checks URL and key before saving.
|
||
- **Status LEDs** in the sidebar for server connection, models and MCP servers (green, yellow,
|
||
red in vivid variants of the theme colors); a click opens an overview of every provider and
|
||
MCP server with its state, latency and tool count.
|
||
- `scripts/release.sh`: tag, multi-arch image and Gitea release in one step.
|
||
|
||
### Changed
|
||
|
||
- Saving a provider (or reloading providers) checks its status right away instead of at the
|
||
next five-minute check.
|
||
|
||
### Fixed
|
||
|
||
- opencode Zen/Go: requests carry the session in `x-opencode-session`; opencode Go rejected
|
||
them without it ("Request is missing x-opencode-session").
|
||
- Two backups in the same second no longer overwrite each other.
|
||
|
||
## [0.1.0] – 2026-11-09
|
||
|
||
First public release.
|
||
|
||
### Agents and chat
|
||
|
||
- Agent loop with streaming, task lists, subagents (parallel and in the background, on other
|
||
models), skills, slash commands, `AGENTS.md` / `CLAUDE.md`, automatic context compaction.
|
||
- Modes: **build**, **plan** (read-only) and **craft** (study a website, app, game or old
|
||
program and build your own version, with visual comparison, clean room or deep mode),
|
||
plus custom modes and subagents. Review loops per mode.
|
||
- Tools: files, shell with background processes, web fetch and search, LSP diagnostics after
|
||
edits, OpenSCAD for 3D printing, Ghidra for old binaries, image generation (fal.ai), and an
|
||
interactive **browser** (click, type, run JavaScript, screenshots, console errors; private
|
||
network addresses are blocked).
|
||
- MCP servers (stdio and Streamable HTTP, elicitation, tools loaded on demand).
|
||
- Permissions per tool and per shell command pattern, modes *ask*, *auto*, *accept edits* and
|
||
*bypass*; permission cards with diffs; questions from agents and MCP servers.
|
||
- Checkpoints and rewind, fork, regenerate, accept changes hunk by hunk, git worktrees per
|
||
session, reasoning effort per message, voice input, `@file` mentions, attachments.
|
||
- Project memory (`.codecraft/memory.md`, written by the agent) and personal memory.
|
||
- Hooks before and after tool calls, on prompts and at the end of a turn.
|
||
|
||
### Models
|
||
|
||
- Anthropic natively and every OpenAI-compatible API (Gemini, OpenRouter, opencode,
|
||
fal.ai, Ollama, vLLM, llama.cpp, LM Studio).
|
||
- Prices per model, concurrency limits per host and model, monthly budgets.
|
||
- **Model fallback** when a host is unreachable or a budget is used up.
|
||
- **Provider status**: every 5 minutes each provider's model list is checked (no tokens).
|
||
|
||
### Web app
|
||
|
||
- Installable PWA with push notifications (permissions, questions, finished turns) and a
|
||
**share target**: text and links shared from other apps start a chat or go into a recent one.
|
||
- Guided start screen, file manager with previews (PDF, Office, 3D models, images), web
|
||
terminal, image gallery, git panel.
|
||
- **Command palette** (Ctrl/Cmd+K) and keyboard shortcuts; **prompt templates** with
|
||
placeholders (personal and global); sessions can be **pinned, archived and filed into
|
||
folders**, grouped by date or project.
|
||
- Statistics: tokens, cache hits, time to first token, prefill and output speed and cost per
|
||
request; cost and tokens per day, an activity heatmap of the last 14 days, tables per model,
|
||
provider, mode, user and session. Optional **daily cost summary** as a push at 20:00.
|
||
- 15 colour themes, each light and dark; English and German.
|
||
- "What's new" after updates; admins see when a new release is available.
|
||
|
||
### Automations and integrations
|
||
|
||
- **Automations**: agents on a cron schedule from a Markdown job file, created by an agent,
|
||
from a **template** or by hand; **incoming webhooks** start them (shared secret or
|
||
Gitea/GitHub HMAC signature; the payload is passed to the agent).
|
||
- **API tokens** with full or read-only scope.
|
||
- **Prometheus metrics** at `/metrics` (own bearer token) and JSON logs
|
||
(`CODECRAFT_LOG_FORMAT=json`).
|
||
- **Backups**: daily zip of database and config, keep 30, optional copy to any S3-compatible
|
||
bucket; download from the settings.
|
||
|
||
### Terminal client
|
||
|
||
- `codecraft`: a full-screen terminal client like Claude Code or opencode. The agent loop,
|
||
tools and history stay on your machine; models, modes, rules, skills and the theme come
|
||
from the server, which counts usage and costs. Also runs **without a server**: a guided
|
||
setup connects Anthropic, OpenAI, Gemini, OpenRouter, opencode or local servers (Ollama,
|
||
LM Studio, llama.cpp/vLLM, detected automatically).
|
||
- No prebuilt binaries in this release: install it from source with
|
||
`cargo install --locked --git https://git.familie-zink.org/zink/codecraft codecraft-cli`.
|
||
|
||
### Users and security
|
||
|
||
- Local accounts (Argon2) and single sign-on via OpenID Connect; admins and users, private
|
||
folders per user, shared folders, read-only session sharing, audit log.
|
||
- Shell commands of non-admin users run in a bubblewrap sandbox.
|
||
- Multi-arch Docker image (amd64, arm64).
|
||
|
||
[0.1.0]: https://git.familie-zink.org/zink/codecraft/releases/tag/v0.1.0
|