@inetafrica/open-claudia 3.0.7 → 3.0.8

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/Dockerfile CHANGED
@@ -1,21 +1,8 @@
1
- FROM node:20-slim
2
-
3
- # Install system dependencies
4
- # chromium is the browser engine driven by agent-browser (apt pulls its headless libs).
5
- RUN apt-get update && apt-get install -y --no-install-recommends \
6
- curl \
7
- ffmpeg \
8
- ca-certificates \
9
- git \
10
- jq \
11
- python3 \
12
- python3-pip \
13
- build-essential \
14
- sudo \
15
- openssh-client \
16
- rsync \
17
- chromium \
18
- && rm -rf /var/lib/apt/lists/*
1
+ # Release image. The slow system layer (apt + chromium, ~250 packages) lives
2
+ # in Dockerfile.base, published as the `:base` tag — rebuilt only when that
3
+ # file changes. This build is minutes: fresh agent CLIs + app source.
4
+ ARG BASE_IMAGE=git.coders.africa:5050/kazee/agent-space/open-claudia:base
5
+ FROM ${BASE_IMAGE}
19
6
 
20
7
  # Install Claude Code CLI
21
8
  RUN curl -fsSL https://claude.ai/install.sh | sh || \
@@ -31,14 +18,6 @@ RUN npm install -g @openai/codex
31
18
  RUN npm install -g agent-browser
32
19
  ENV AGENT_BROWSER_EXECUTABLE_PATH=/usr/bin/chromium
33
20
 
34
- # Create non-root user (Claude Code refuses --dangerously-skip-permissions as root)
35
- # node:20-slim already has uid/gid 1000 (node user). Create claudia with different IDs.
36
- RUN groupadd -g 1001 claudia && useradd -u 1001 -g 1001 -m -d /data claudia
37
-
38
- # Allow claudia to install packages at runtime without a password
39
- RUN echo "claudia ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /usr/bin/apt" > /etc/sudoers.d/claudia-apt && \
40
- chmod 0440 /etc/sudoers.d/claudia-apt
41
-
42
21
  # Create app directory
43
22
  WORKDIR /app
44
23
 
@@ -6,8 +6,10 @@ const { createJsonlDecoder } = require("./events");
6
6
  const { createCodexParserState, normalizeCodexEvent } = require("./codex-events");
7
7
  const { createCodexHookTransport } = require("./codex-hook");
8
8
 
9
- const CODEX_MODELS = Object.freeze(["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"]);
10
- const CODEX_EFFORT_VALUES = Object.freeze(["minimal", "low", "medium", "high", "xhigh"]);
9
+ // gpt-5.6-sol-pro is rejected on ChatGPT-plan auth (400 from the API); it needs API-key billing.
10
+ const CODEX_MODELS = Object.freeze(["gpt-5.6-sol", "gpt-5.6-sol-pro", "gpt-5.6-terra", "gpt-5.6-luna"]);
11
+ // max + ultra verified live against codex 0.144 (ultra = proactive multi-agent behavior).
12
+ const CODEX_EFFORT_VALUES = Object.freeze(["minimal", "low", "medium", "high", "xhigh", "max", "ultra"]);
11
13
  const REQUIRED_EXEC_HELP_FLAGS = Object.freeze(["--config", "--json", "--sandbox", "--image", "--model", "--skip-git-repo-check"]);
12
14
  const REQUIRED_RESUME_HELP_FLAGS = Object.freeze(["--config", "--json", "--image", "--model", "--skip-git-repo-check"]);
13
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inetafrica/open-claudia",
3
- "version": "3.0.7",
3
+ "version": "3.0.8",
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": {
@@ -46,7 +46,7 @@ assert.strictEqual(provider.label, "OpenAI Codex");
46
46
  assert.strictEqual(provider.isAvailable(), true);
47
47
  assert.strictEqual(provider.executable(), "/fixture/codex");
48
48
  assert.strictEqual(provider.defaultModel(), "gpt-5-codex");
49
- assert.deepStrictEqual(provider.modelChoices(), ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"]);
49
+ assert.deepStrictEqual(provider.modelChoices(), ["gpt-5.6-sol", "gpt-5.6-sol-pro", "gpt-5.6-terra", "gpt-5.6-luna"]);
50
50
  assert.ok(!provider.modelChoices().includes("o4-mini"));
51
51
  assert.deepStrictEqual(provider.compatibilityStatus(), {
52
52
  state: "compatible",
@@ -164,7 +164,7 @@ assert.throws(
164
164
  (error) => error && error.code === "UNSUPPORTED_PROVIDER_CAPABILITY",
165
165
  );
166
166
  assert.throws(
167
- () => provider.buildMainInvocation(simpleContext({ providerSettings: { effort: "max", budget: null, worktree: false } })),
167
+ () => provider.buildMainInvocation(simpleContext({ providerSettings: { effort: "bogus", budget: null, worktree: false } })),
168
168
  (error) => error && error.code === "UNSUPPORTED_PROVIDER_SETTING",
169
169
  );
170
170
  assert.throws(
@@ -243,7 +243,7 @@ async function providerProbe(kind) {
243
243
  assert.ok(record.argv.includes("max"), "Claude retains maximum dream effort");
244
244
  } else {
245
245
  assert.ok(record.argv.includes("--output-schema"));
246
- assert.ok(record.argv.some((arg) => /model_reasoning_effort=.*xhigh/.test(arg)), "generic max effort maps to Codex's strongest supported value");
246
+ assert.ok(record.argv.some((arg) => /model_reasoning_effort=.*max/.test(arg)), "max effort passes through natively since codex 0.144 supports it");
247
247
  }
248
248
  }
249
249
 
@@ -32,12 +32,11 @@ assert.doesNotMatch(setup, /Your Claude Code bot is connected|Description=Claude
32
32
 
33
33
  const pkg = JSON.parse(read("package.json"));
34
34
  assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
35
- // 3.0.7 approved by Sumeet 2026-07-12 ("Do the full fix and I'll upgrade" —
36
- // plain-stop + agent-destroy kills the zombie poll loop behind the recurring
37
- // "another poller" 409 storms, and the v2.15 turn-observer trace layer is
38
- // restored so /tooltrace and /recall work again and the recall/tool graphs
39
- // are fed).
40
- assert.strictEqual(pkg.version, "3.0.7", "release version must remain unchanged without explicit approval");
35
+ // 3.0.8 approved by Sumeet 2026-07-12 (fast-path release after the v3.0.7
36
+ // docker image was cancelled mid-build: same code as 3.0.7 zombie-poll-loop
37
+ // fix + turn-observer restore plus the pre-baked :base CI image and codex
38
+ // gpt-5.6-sol-pro / max / ultra support).
39
+ assert.strictEqual(pkg.version, "3.0.8", "release version must remain unchanged without explicit approval");
41
40
  for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
42
41
  assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
43
42
  }