Skip to content

Commit 90acecb

Browse files
committed
feat(docker): harden session mode + File Viewer button (v1.4.1)
Docker cases: seamless Claude auth (seed ~/.claude.json instead of the corruption-prone single-file mount), full credential-store isolation for claude + codex/gemini/gcloud/opencode (share only transcripts/rollouts, seed the rest), auto-build the base image on first use, C.UTF-8 locale (fixes box-drawing), collapsed/shortened Create-Case UI + short "(docker)" case-menu tags, and w<n>-<case> tab naming for docker/remote sessions. Also: opt-in File Viewer header button; fix a TZ-boundary flaky test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 82825cb commit 90acecb

25 files changed

Lines changed: 2603 additions & 177 deletions

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# aicodeman
22

3+
## 1.4.1
4+
5+
### Patch Changes
6+
7+
- Docker session mode hardening + fixes, plus a File Viewer header button.
8+
9+
Docker cases:
10+
- **Seamless Claude auth in containers**: `~/.claude.json` is no longer bind-mounted as a single file (a mount point that broke Claude's atomic-rename config writes — forcing re-auth and, via failed in-place writes, corrupting the host `~/.claude.json`). It is now seeded as a writable, onboarding-complete copy, so a docker session boots straight to the prompt (no theme picker, login, or folder-trust prompt).
11+
- **Claude-state isolation**: containers no longer bind-mount the whole `~/.claude` directory (which wrote backups/tasks/teams/settings back into the host). Only `~/.claude/projects` transcripts are shared (host watchers + `--resume`); credentials, settings, and stats-cache are seeded as writable copies; everything else stays container-local.
12+
- **Codex/Gemini/gcloud/opencode isolation**: same treatment — codex shares `sessions/` + `history.jsonl` (response-viewer + resume) and seeds `auth.json`/`config.toml`; gemini/gcloud/opencode are whole seed-copies. Containers never write their credential state back into the host dirs.
13+
- **Base image auto-builds on first use**: a missing `codeman/agent:base` no longer blocks case creation or launch; it builds locally on first use (concurrency-safe, with SSE progress toasts).
14+
- **UTF-8 locale**: containers set `LANG`/`LC_ALL=C.UTF-8` so tmux renders Claude's box-drawing correctly (fixes `qqqq` line artifacts).
15+
- **Create Case UI**: larger, collapsed-by-default "Run in Docker" settings with a shorter hint; dockerized cases show a short `(docker)` tag (or the custom host id) in the case menus.
16+
- **Tab naming**: docker/remote (and codex/gemini/opencode) sessions now follow the `w<n>-<case>` convention instead of `codeman-<id>`.
17+
18+
Other:
19+
- **File Viewer header button** (opt-in via App Settings, Header Displays): toggle the file browser panel from the header.
20+
- Fixed a timezone-boundary flaky test in the away-digest route suite.
21+
322
## 1.4.0
423

524
### Minor Changes

CLAUDE.md

Lines changed: 69 additions & 65 deletions
Large diffs are not rendered by default.

docker/agent.Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,20 @@ RUN npm install -g \
4040
# runtime Codeman overrides with `--user <hostUid>:0` on Linux, so the baked uid
4141
# only matters for a hand-run / Docker Desktop container. gid 0 + group-writable
4242
# HOME (OpenShift arbitrary-uid convention) keeps $HOME writable for any uid.
43+
# UTF-8 locale so tmux/Ink render Unicode box-drawing instead of VT100 ACS `q`
44+
# glyphs (C.UTF-8 is built into glibc; no locales package needed). Codeman also
45+
# sets these at run time so containers built before this line still get UTF-8.
46+
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
4347
ENV HOME=/home/agent
48+
# `.claude` (+ `.claude/projects` mount point) and `.codex` (+ `.codex/sessions`) are
49+
# pre-created gid-0 group-writable so the container owns its OWN credential config
50+
# dirs: tokens/settings/config are seeded in as writable copies and each CLI's runtime
51+
# state (backups, tasks, refreshed tokens) stays container-local, while ONLY the shared
52+
# transcript/rollout dirs (`.claude/projects`, `.codex/sessions`) are bind-mounted from
53+
# the host. (gemini/gcloud/opencode are whole seed-copies and need no pre-created dir.)
4454
RUN useradd -g 0 -m -d /home/agent -s /bin/bash agent \
4555
&& mkdir -p /home/agent/.npm /home/agent/.cache /home/agent/.config /home/agent/.codeman \
56+
/home/agent/.claude/projects /home/agent/.codex/sessions \
4657
&& chgrp -R 0 /home/agent \
4758
&& chmod -R g=u /home/agent
4859

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aicodeman",
3-
"version": "1.4.0",
3+
"version": "1.4.1",
44
"description": "Mission control for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence",
55
"type": "module",
66
"main": "dist/index.js",

0 commit comments

Comments
 (0)