Skip to content

Commit 34df3eb

Browse files
committed
add changelog
1 parent c9a12c4 commit 34df3eb

1 file changed

Lines changed: 394 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 394 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,394 @@
1+
# Changelog
2+
3+
All notable changes to **claudebox** (formerly `docker-claude-code`).
4+
5+
Format roughly follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions before `v1.0.0` are pre-release; the rename to `claudebox` at `v1.0.0` is the only breaking change in the project's history.
6+
7+
## [v1.11.0] — 2026-04-30
8+
9+
### Added
10+
- **Telegram per-chat overrides** stored in `~/.claude/telegram_overrides.json`, persisting across bot restarts and trumping the YAML config:
11+
- `/model` — inline keyboard or `/model <name>`; choices: `haiku`, `sonnet`, `opus`, `opusplan`, `reset`.
12+
- `/effort` — same UX; choices: `low`, `medium`, `high`, `xhigh`, `max`, `reset` (verified against the official Claude CLI docs).
13+
- `/system_prompt [text|reset]` — show/set/clear system-prompt override per chat.
14+
- `/append_system_prompt [text|reset]` — same for the appended system prompt.
15+
- `opusplan` model alias surfaced everywhere: telegram bot, OpenAI `/openai/v1/models`, MCP tool docstring, docs.
16+
- `tests/test_cron_telegram.sh` — unit + integration tests for the cron/telegram bridge: round-trip message tracking, prune to 200 entries, no-`--continue` on cron replies, `CRON_SYSTEM_HINT` content, combined-entrypoint smoke test.
17+
- `run-e2e-cron-telegram.sh` — end-to-end script (sources `tests/.env` for credentials) for the cron+telegram reply-context flow.
18+
19+
### Changed
20+
- `get_chat_config()` merges in-memory + on-disk overrides on top of YAML defaults.
21+
- `_apply_choice` / `_send_choice_keyboard` / `_BUTTON_HANDLERS` shared plumbing for keyboard-driven overrides.
22+
23+
### Security
24+
- `run-e2e-cron-telegram.sh` now sources `tests/.env` instead of carrying hardcoded OAuth/bot tokens. (A previously-committed token in `v1.10.0`'s `run-test.sh` was auto-revoked by Anthropic's secret scanning; new token issued and stored only in gitignored `tests/.env`.)
25+
26+
## [v1.10.0] — 2026-04-29
27+
28+
### Added
29+
- **Combined cron + telegram mode**: when both `CLAUDEBOX_MODE_CRON=1` and `CLAUDEBOX_MODE_TELEGRAM=1` are set, the entrypoint runs the cron scheduler in the background and the telegram bot in the foreground (trap kills cron when the bot exits).
30+
- Cron yaml supports `telegram_chat_id` (root-level default + per-job override) — finished jobs post their result to Telegram.
31+
- **Cron-reply context injection**: when a user replies to a cron notification in Telegram, the bot looks up the original job (name, fired_at, instruction, result) in `~/.claude/cron/telegram_messages.json` and prepends it to the prompt. Cron replies always run in a fresh session (no `--continue`); regular messages keep `--continue`.
32+
- Chat-wide cron awareness: the most recent 10 cron runs are injected into every prompt's `--append-system-prompt` so Claude can answer questions about them without an explicit reply.
33+
- `telegram_utils.py` shared module (`BOT_TOKEN`, `make_bot()`, `send_long()`); `send_long()` now returns the list of sent `Message` objects so the caller can capture `message_id`.
34+
- `wrapper.sh` gained a named `_cron` container with start/stop/restart parity to `_prog`, plus an auth file.
35+
36+
## [v1.9.0] — 2026-04-29
37+
38+
### Added
39+
- Cron jobs support `system_prompt` / `append_system_prompt` (root-level + per-job override).
40+
- Template variables expanded at fire time: `{system_datetime}`, `{job_name}`.
41+
42+
## [v1.8.0] — 2026-04-29
43+
44+
### Added
45+
- `claudebox mcp ...` wrapper passthrough (`list`, `add`, `remove`, …) so MCP server management works the same as bare `claude mcp`.
46+
- Documentation covering MCP server scopes (project `.mcp.json`, user, local) with CLI examples.
47+
48+
## [v1.7.0] — 2026-04-29
49+
50+
### Added
51+
- **Cron mode** (`CLAUDEBOX_MODE_CRON=1`): yaml-scheduled Claude jobs with sub-minute resolution, per-job history under `~/.claude/cron/history/<workspace-slug>/<ts>-<job>/`, overlap protection, and foreground logging.
52+
53+
### Changed
54+
- Environment variable namespace renamed `CLAUDE_*``CLAUDEBOX_*`. Legacy `CLAUDE_*` names are still accepted as fallbacks for backwards compatibility.
55+
56+
## [v1.6.0] — 2026-04-29
57+
58+
### Added
59+
- Proper standalone installer (`install.sh`) that drops in a working setup with one command.
60+
61+
## [v1.5.0] — 2026-04-29
62+
63+
### Fixed
64+
- Misc release-blocking bugs.
65+
66+
## [v1.4.1] — 2026-04-29
67+
68+
### Fixed
69+
- Installer script regressions; bumped pinned Claude CLI version.
70+
71+
## [v1.4.0] — 2026-04-16
72+
73+
### Changed
74+
- Base image upgraded to **Ubuntu 24.04** (CVE reduction).
75+
- Adopted DEB822 apt sources; dropped `apt-transport-https` (no longer needed).
76+
- `pip3 --break-system-packages --ignore-installed` to work around PEP 668 + PyJWT conflict.
77+
- `userdel ubuntu` before `useradd claude` to free UID 1000.
78+
- `exa``eza` (exa is unmaintained); `mysql-client``default-mysql-client`.
79+
- Dropped `python3-venv`.
80+
81+
## [v1.3.0] — 2026-04-16
82+
83+
### Added
84+
- **Async run mode** in API: `POST /run` with `async: true`, `GET /run/result` for polling. Run IDs included on every response. Read-once result cache with 6-hour TTL. Cancel by `runId`. `/status` now lists active runs.
85+
86+
### Changed
87+
- All API responses include `workspace`.
88+
- Switched build apt mirror to Cloudflare for faster Docker builds.
89+
- README updated with full response schemas.
90+
91+
### Fixed
92+
- `asyncio.Lock` around run state to eliminate races.
93+
94+
## [v1.2.0] — 2026-04-11
95+
96+
### Security
97+
- Telegram **path traversal** fix on file operations.
98+
- Auth file mode hardened to `chmod 600`.
99+
- Entrypoint **command-injection** fix via `printf %q` quoting.
100+
- `jq` failure protection.
101+
- Port number validation.
102+
- Install script fail-safe.
103+
104+
### Changed
105+
- `/status` response normalized to camelCase.
106+
- Test isolation via `mktemp`.
107+
108+
## [v1.1.0] — 2026-04-11
109+
110+
### Added
111+
- `make test` target.
112+
- `.dockerignore` (faster, smaller build context).
113+
- Test for entrypoint always-skills wiring.
114+
115+
### Changed
116+
- Tests refactored to a table-driven layout with workspace-relative test dirs.
117+
- README revamp.
118+
119+
## [v1.0.0] — 2026-04-11
120+
121+
### BREAKING
122+
Project renamed from `docker-claude-code`**`claudebox`**:
123+
- Docker image: `psyb0t/docker-claude-code``psyb0t/claudebox`.
124+
- Binary: `claude-code``claudebox`.
125+
- SSH dir: `~/.ssh/claude-code``~/.ssh/claudebox`.
126+
- GitHub repo: `psyb0t/docker-claudebox`.
127+
128+
## [v0.39.0] — 2026-04-11
129+
130+
### Added
131+
- **Always-skills**: scan `~/.claude/.always-skills` for `SKILL.md` files and inject them (with file-path prefix) into every Claude invocation across interactive, programmatic, API, and OpenAI modes.
132+
133+
## [v0.38.0] — 2026-04-10
134+
135+
### Added
136+
- Structured JSON logging (`ts`, `level`, `logger`, `func`, `line`, `file`, `msg`) across auth, `/run`, OpenAI, MCP, and image handling. `DEBUG=1` enables debug level.
137+
138+
## [v0.37.0] — 2026-04-10
139+
140+
### Added
141+
- **OpenAI multimodal**: base64 + URL images saved to the workspace and forwarded to Claude.
142+
- Real usage-token reporting on OpenAI responses.
143+
- Multi-turn via conversation JSON file.
144+
- `X-Claude-Append-System-Prompt` request header.
145+
146+
### Changed
147+
- Extra/unknown OpenAI fields silently ignored.
148+
149+
## [v0.36.0] — 2026-04-10
150+
151+
### Changed
152+
- All 24 tests in `ALL_TESTS`; every assertion now checks the response body, not just status codes.
153+
154+
## [v0.35.0] — 2026-04-10
155+
156+
### Fixed
157+
- `streamable_http_app` for MCP.
158+
- MCP lifespan registered via FastAPI.
159+
- `stream-json` assistant-event parsing.
160+
- `--continue` flag logic.
161+
- MCP tests with proper session init.
162+
163+
## [v0.34.0] — 2026-04-10
164+
165+
### Changed
166+
- OpenAI `/v1/models` returns bare aliases (`haiku`, `sonnet`, `opus`).
167+
- Provider prefix (`openai/`, `claudebox/`) stripped from inbound model names.
168+
- Tests use `$TEST_MODEL` instead of hardcoded values.
169+
170+
## [v0.33.0] — 2026-04-10
171+
172+
### Added
173+
- **OpenAI-compatible adapter** at `/openai/v1` (streaming, custom headers, `reasoning_effort`).
174+
- **MCP server** at `/mcp` exposing `claude_run`, file operations, and auth tools.
175+
- Shared `_run_claude_text` helper.
176+
177+
## [v0.32.0] — 2026-04-07
178+
179+
### Changed
180+
- camelCase response normalization across the board: `jsonpipe.py` normalizes `json` / `stream-json` / `json-verbose`, wrapper pipes all formats. Tests assert recursively against snake_case.
181+
182+
## [v0.31.0] — 2026-04-07
183+
184+
### Fixed
185+
- `asyncio.StreamReader` 64KB-line crash in API.
186+
- Truncate `json-verbose` tool results > 2K with sha256 hash.
187+
188+
## [v0.30.0 – v0.29.0] — 2026-04-07
189+
190+
### Added
191+
- `outputFormat: json-verbose` — assembles `stream-json` into a single JSON document with a `turns` array showing all tool calls.
192+
193+
## [v0.28.0] — 2026-04-03
194+
195+
### Added
196+
- `clear-session` wrapper command.
197+
198+
### Fixed
199+
- `--no-continue` without prompt.
200+
201+
### Changed
202+
- README env-var section restructured.
203+
204+
## [v0.27.0] — 2026-04-03
205+
206+
### Changed
207+
- camelCase normalization rolled out further.
208+
209+
## [v0.26.0] — 2026-04-03
210+
211+
### Removed
212+
- Claude Code Router (CCR) integration.
213+
214+
### Changed
215+
- Bumped Claude CLI to 2.1.90.
216+
217+
## [v0.25.0] — 2026-04-03
218+
219+
### Changed
220+
- API moved to camelCase.
221+
- Auto-updates now opt-in.
222+
- Bumped CLI to 2.1.89.
223+
224+
## [v0.24.0] — 2026-04-01
225+
226+
### Added
227+
- `claudebox stop` wrapper command.
228+
229+
## [v0.23.1 – v0.23.0] — 2026-03-31
230+
231+
### Added
232+
- Wrapper passthrough for utility commands: `--version`, `doctor`, `auth`.
233+
234+
### Changed
235+
- Go bumped 1.25.5 → 1.26.1.
236+
237+
## [v0.22.0] — 2026-03-31
238+
239+
### Added
240+
- System hint appended to all modes — informs Claude about container info, image variant, sudo access, bin path, and host-path mapping.
241+
242+
## [v0.21.x] — 2026-03-30/31
243+
244+
### Added
245+
- `CLAUDE.md` template seeded into all workspaces (telegram, API, interactive).
246+
- Makefile build targets.
247+
248+
### Fixed
249+
- Telegram cancel-retry bug; better logging.
250+
- API kills the Claude process on client disconnect (opt out via `fire_and_forget`).
251+
252+
## [v0.20.x] — 2026-03-30
253+
254+
### Added
255+
- **Telegram bot mode** (`CLAUDE_MODE_TELEGRAM=1`): per-chat workspaces, file/photo/video/voice handling, command menu, HTML formatting with plain-text fallback.
256+
257+
### Fixed
258+
- Empty-file crash; httpx polling-spam silenced; proper logging.
259+
- Filters, media handlers, command menu wiring.
260+
261+
## [v0.19.0] — 2026-03-30
262+
263+
### Added
264+
- `--no-continue` and `--resume` wrapper flags.
265+
266+
### Changed
267+
- Bumped Claude CLI to 2.1.87.
268+
269+
## [v0.18.x] — 2026-03-28
270+
271+
### Changed
272+
- Hardcoded `/workspaces` as the API root; removed `CLAUDE_MODE_API_ROOT_WORKSPACE` env var.
273+
274+
### Fixed
275+
- Workspace permissions.
276+
277+
## [v0.17.0] — 2026-03-28
278+
279+
### Added
280+
- `--effort` (reasoning effort) flag in wrapper and API.
281+
282+
### Removed
283+
- `claude-code-router` support.
284+
285+
## [v0.16.x] — 2026-03-28
286+
287+
### Added
288+
- API expansion: `/files` with path params (`GET`/`PUT`/`DELETE`), `/health`, `/status`, `/run/cancel`.
289+
- `--system-prompt`, `--append-system-prompt`, `--json-schema` flags in wrapper + API.
290+
- Graceful API shutdown.
291+
- `--continue` automatic fallback when no prior session.
292+
293+
### Changed
294+
- API output is now JSON-only.
295+
296+
## [v0.15.0] — 2026-03-28
297+
298+
### Added
299+
- **API mode** (`CLAUDE_MODE_API=1`) — FastAPI server.
300+
- Multi-stage Dockerfile: `minimal` and `full` variants; `CLAUDE_MINIMAL` runtime flag.
301+
- `CLAUDE_MOUNT_*` extra volume mounts.
302+
- Per-workspace `409` locking.
303+
304+
### Changed
305+
- `wrapper.sh` extracted from `install.sh` for clarity.
306+
307+
## [v0.14.x] — 2026-03-09/19
308+
309+
### Added
310+
- `CLAUDE_MOUNT_*` extra volume mounts (same-path default, or explicit `src:dest`).
311+
- Container env notes + overwrite warning baked into `CLAUDE.md`.
312+
313+
### Fixed
314+
- Permissions / `chown` cleanup.
315+
316+
## [v0.13.x] — 2026-03-01/03
317+
318+
### Added
319+
- `~/.claude/bin` in `PATH` for custom user scripts.
320+
- `~/.claude/init.d/` hooks fired on first container creation.
321+
- `CLAUDE_ENV_*` passthrough.
322+
- `CLAUDE_INSTALL_DIR`, `CLAUDE_SSH_DIR`, `DEBUG` env-var docs.
323+
324+
### Removed
325+
- Ephemeral mode (programmatic uses its own container — ephemeral was redundant).
326+
327+
## [v0.12.0] — 2026-02-27
328+
329+
### Added
330+
- `--model` flag for programmatic / ephemeral runs.
331+
- All available models documented.
332+
333+
## [v0.11.x – v0.10.x] — 2026-02-27
334+
335+
### Added
336+
- **Programmatic** and **ephemeral** modes.
337+
- `--no-update` flag (file-signal based).
338+
- Argument whitelist + container lock.
339+
- `--continue` automatic fallback.
340+
341+
### Changed
342+
- Background auto-updates disabled by default.
343+
- Restart instead of attach to existing containers.
344+
- Trust pre-accept on first run.
345+
- Bumped Claude CLI to 2.1.62.
346+
347+
### Fixed
348+
- Silenced output for programmatic / ephemeral runs.
349+
350+
## [v0.9.x] — 2026-01-08 → 2026-02-03
351+
352+
### Added
353+
- Native Claude installer (no more npm).
354+
355+
### Fixed
356+
- Runtime permission fixes.
357+
- Misc bug fixes; README updates.
358+
359+
## [v0.8.0] — 2025-12-10
360+
361+
### Added
362+
- pyenv with Python 3.12.
363+
- Auto-generated `CLAUDE.md` so Claude knows what tools are available in the container.
364+
365+
## [v0.7.x – v0.6.0] — 2025-11-23 → 2025-12-08
366+
367+
### Added
368+
- Pinned Claude CLI version for reproducible builds.
369+
370+
## [v0.5.x] — 2025-10-10/13
371+
372+
### Fixed
373+
- DNS resolution issue.
374+
375+
### Changed
376+
- Image rebuild.
377+
378+
## [v0.4.0 – v0.1.0] — 2025-06-14 → 2025-08-25
379+
380+
Initial development: base image, more bundled tooling, project bootstrap.
381+
382+
[v1.11.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.11.0
383+
[v1.10.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.10.0
384+
[v1.9.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.9.0
385+
[v1.8.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.8.0
386+
[v1.7.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.7.0
387+
[v1.6.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.6.0
388+
[v1.5.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.5.0
389+
[v1.4.1]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.4.1
390+
[v1.4.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.4.0
391+
[v1.3.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.3.0
392+
[v1.2.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.2.0
393+
[v1.1.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.1.0
394+
[v1.0.0]: https://github.com/psyb0t/docker-claudebox/releases/tag/v1.0.0

0 commit comments

Comments
 (0)