@inetafrica/open-claudia 3.5.72 → 3.5.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.5.73
4
+
5
+ 3.5.72 with a smaller bot image, from Sumeet's bot resource plan of 31 Oct. No code changes.
6
+
7
+ - **One copy of the app in the image** (`Dockerfile`): files are copied in already owned by the bot user instead of being re-written by recursive chmod/chown, which stored /app three times.
8
+ - **No leftover download caches**: each npm install clears its cache in the same step.
9
+ - **One Claude install** that the bot user can run (npm into /usr/local), checked at build time; agent-browser keeps only its linux-x64 binary.
10
+
3
11
  ## 3.5.72
4
12
 
5
13
  3.5.71 plus the memory fixes tested on Sumeet's Mac from 22 to 28 Oct, released to every bot on his card of 31 Oct ("Release to all bots now, without the Maia rename"). The Maia rename stays on the Mac.
package/Dockerfile CHANGED
@@ -1,15 +1,30 @@
1
1
  # Release image. The slow system layer (apt + chromium, ~250 packages) lives
2
2
  # in Dockerfile.base, published as the `:base` tag — rebuilt only when that
3
3
  # file changes. This build is minutes: fresh agent CLIs + app source.
4
+ #
5
+ # Size rules (each RUN's leftovers are baked into the image forever):
6
+ # - every npm install cleans its download cache in the SAME RUN;
7
+ # - /app is written once, already owned by claudia (COPY --chown, npm ci as
8
+ # claudia) — no recursive chmod/chown, which would store a second and
9
+ # third copy of every file in /app as new layers.
4
10
  ARG BASE_IMAGE=git.coders.africa:5050/kazee/agent-space/open-claudia:base
5
11
  FROM ${BASE_IMAGE}
6
12
 
7
- # Install Claude Code CLI
8
- RUN curl -fsSL https://claude.ai/install.sh | sh || \
9
- npm install -g @anthropic-ai/claude-code
13
+ # Claude Code CLI, one install: the npm global in /usr/local, which is on PATH
14
+ # and readable for the runtime user (1001, HOME=/data). This is the copy pods
15
+ # were already running (/usr/local/bin/claude -> /usr/local/lib/node_modules/
16
+ # @anthropic-ai/claude-code/bin/claude.exe). The old `claude.ai/install.sh | sh`
17
+ # step ran as root and installs into /root/.local, which user 1001 can neither
18
+ # see on PATH nor read — whenever it succeeded, `claude` would be missing in the
19
+ # pod. The postinstall hardlinks the native binary over the bin/claude.exe stub;
20
+ # the size check fails the build if only the stub is left.
21
+ RUN npm install -g @anthropic-ai/claude-code \
22
+ && test "$(stat -c %s "$(readlink -f /usr/local/bin/claude)")" -gt 1000000 \
23
+ && npm cache clean --force && rm -rf /root/.npm /tmp/*
10
24
 
11
25
  # Install OpenAI Codex CLI for the codex backend (unpinned: each image build bakes the then-latest CLI)
12
- RUN npm install -g @openai/codex
26
+ RUN npm install -g @openai/codex \
27
+ && npm cache clean --force && rm -rf /root/.npm /tmp/*
13
28
 
14
29
  # Browser automation for the agent: vercel-labs agent-browser (Rust CLI, token-efficient,
15
30
  # replaces Playwright MCP). Installed at build time as root so the non-root runtime user
@@ -17,31 +32,44 @@ RUN npm install -g @openai/codex
17
32
  # lives outside the /data VOLUME (build-time writes to /data are discarded at runtime).
18
33
  # Pinned: the live Browser view (core/browser-view.js) reads its session files and its
19
34
  # screen-stream protocol, which 0.38.x has (built-in stream per session, .stream port files).
20
- RUN npm install -g agent-browser@0.38.2
35
+ # The package ships a prebuilt binary for every platform (~15-18 MB each); its postinstall
36
+ # points /usr/local/bin/agent-browser at the one for this machine (glibc Linux), so the
37
+ # other six are deleted here.
38
+ RUN npm install -g agent-browser@0.38.2 \
39
+ && cd "$(npm root -g)/agent-browser/bin" \
40
+ && keep="agent-browser-linux-$(node -p process.arch)" \
41
+ && test -x "$keep" \
42
+ && find . -maxdepth 1 -type f -name 'agent-browser-*' ! -name "$keep" -delete \
43
+ && case "$(readlink -f /usr/local/bin/agent-browser)" in \
44
+ "$(pwd -P)/$keep"|"$(pwd -P)/agent-browser.js") ;; \
45
+ *) echo "agent-browser on PATH points somewhere unexpected" >&2; exit 1 ;; \
46
+ esac \
47
+ && npm cache clean --force && rm -rf /root/.npm /tmp/*
21
48
  ENV AGENT_BROWSER_EXECUTABLE_PATH=/usr/bin/chromium
22
49
 
23
- # Create app directory
50
+ # Create app directory, owned by the runtime user so it can overlay new source
51
+ # into /app for in-place /upgrade (core/handlers.js inPlaceTarballUpgrade).
24
52
  WORKDIR /app
53
+ RUN chown claudia:claudia /app
25
54
 
26
- # Copy package files and install
27
- COPY package*.json ./
28
- RUN npm ci --production
55
+ # Copy package files and install as claudia, so node_modules is claudia's
56
+ # without a chown pass. The npm cache goes to a scratch dir removed in the same
57
+ # RUN (nothing lands in /root/.npm or /data/.npm).
58
+ COPY --chown=claudia:claudia package*.json ./
59
+ USER claudia
60
+ RUN npm ci --omit=dev --no-audit --no-fund --cache /tmp/oc-npm-cache \
61
+ && rm -rf /tmp/oc-npm-cache
29
62
 
30
- # Copy app source
31
- COPY . .
32
-
33
- # Ensure app files are readable regardless of host file perms
34
- RUN chmod -R a+rX /app
63
+ # Copy app source (already claudia's: in-place /upgrade overlays it)
64
+ COPY --chown=claudia:claudia . .
65
+ USER root
35
66
 
36
67
  # Expose the open-claudia CLI on PATH so spawned agents can send files, manage tasks, etc.
37
- RUN chmod +x /app/bin/cli.js && ln -s /app/bin/cli.js /usr/local/bin/open-claudia
38
-
39
- # Let the runtime user overlay new source into /app for in-place /upgrade.
40
- RUN chown -R claudia:claudia /app
41
-
42
- # Entrypoint auto-configures from env vars on first run
68
+ # Only the two scripts that must be executable are chmod'ed (git tracks both as 755;
69
+ # this keeps it true for checkouts that lost the bit) — not a recursive pass over /app.
43
70
  COPY docker-entrypoint.sh /usr/local/bin/
44
- RUN chmod +x /usr/local/bin/docker-entrypoint.sh
71
+ RUN chmod 755 /app/bin/cli.js /usr/local/bin/docker-entrypoint.sh \
72
+ && ln -s /app/bin/cli.js /usr/local/bin/open-claudia
45
73
 
46
74
  # Set up data directory ownership
47
75
  RUN mkdir -p /data/Workspace /data/.open-claudia /data/.claude && \
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inetafrica/open-claudia",
3
- "version": "3.5.72",
3
+ "version": "3.5.73",
4
4
  "description": "An always-on, provider-agnostic coding-agent harness for Claude Code and OpenAI Codex via chat",
5
5
  "main": "bot.js",
6
6
  "bin": {
@@ -664,10 +664,11 @@ assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
664
664
  // reset file up and the bot saved the old max/xhigh back. Same approved
665
665
  // rollout (Sumeet, 20 Oct: "set high on all the bots"), now working.
666
666
  // Sumeet, 31 Oct 08:02 EAT card 6ae574c5: "Release to all bots now, without
667
- // the Maia rename". 3.5.72 = 3.5.71 + the Mac memory fixes of 22-28 Oct:
667
+ // the Maia rename". 3.5.73 = 3.5.72 + a smaller image (Sumeet 31 Oct 15:06, bot resource plan: "proceed ... roll out the others").
668
+ // 3.5.72 = 3.5.71 + the Mac memory fixes of 22-28 Oct:
668
669
  // topic lessons ride with their pack, .env recall pins, prompt fixes, past
669
670
  // chats reach recall, settled decisions, /engine x|mem0, nightly retry.
670
- assert.strictEqual(pkg.version, "3.5.72", "release version must remain unchanged without explicit approval");
671
+ assert.strictEqual(pkg.version, "3.5.73", "release version must remain unchanged without explicit approval");
671
672
  for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
672
673
  assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
673
674
  }