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.
|
||
|
||
## [v202611-00011] – 2026-11-09
|
||
|
||
### 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
|