@inetafrica/open-claudia 3.4.0 → 3.4.1

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## v3.4.1 — Fable 5.1, and the CLI floor it quietly needs
4
+
5
+ - **`claude-fable-5-1` joins the Claude model picker.** The identifier is dash-form; `claude-fable-5.1` does not exist and fails as an unknown model.
6
+ - **It carries a CLI floor: Claude Code >= 2.1.251.** An older CLI does not degrade gracefully — it returns an API 400 naming the required version. The local install was taken 2.1.150 -> 2.1.258 before the model was listed, and the picker offering a button the local binary cannot serve is the failure mode to avoid. Pod images install Claude Code unpinned, so a rebuild clears the floor by itself, but pods still on older images will 400 on this model until they are rolled.
7
+ - Verified by building the real main invocation through the provider and spawning it, rather than by a hand-written CLI probe: the API reported `claude-fable-5-1` as the serving model, and `claude-opus-4-8` was re-run through the same harness to prove the incumbent path was untouched. Full suite 135/135.
8
+
3
9
  ## v3.4.0 — Who you are, where you are, and what you may do there are three different questions
4
10
 
5
11
  - **The bug that started it: a wakeup scheduled in a Codex room kept running on Claude.** `getActiveProvider` resolves the room's overlay from `state.roomKey`, but that key was stamped from `currentConversationKey()` — and a scheduled job resumes its own saved thread, whose conversation key is the job's *project name*, not a room. The overlay never resolved, so every job silently fell back to the creator's personal default. The thread and the room are now separate values (`roomKey`, defaulting to the conversation key so every inbound path is unchanged); the scheduler passes the room the job was created in. The same fusion is why a group answered as Codex to one person and Claude to another. Relatedly, a run that reverts to the provider it was scheduled under because the room's current choice is not runnable now **says so** — in the prompt and in a ⚠️ line on the advisory — instead of leaving a Codex room reporting a Claude quota error with nothing to explain where Claude came from.
@@ -6,7 +6,10 @@ const { createJsonlDecoder } = require("./events");
6
6
  const { createClaudeParserState, normalizeClaudeEvent } = require("./claude-events");
7
7
  const { createClaudeHookTransport } = require("./claude-hook");
8
8
 
9
+ // claude-fable-5-1 requires Claude Code >= 2.1.251; older CLIs reject it with an
10
+ // API 400 rather than falling back, so a pod on a stale image will error on it.
9
11
  const CLAUDE_MODELS = Object.freeze([
12
+ "claude-fable-5-1",
10
13
  "claude-fable-5",
11
14
  "claude-opus-5",
12
15
  "claude-opus-4-8",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inetafrica/open-claudia",
3
- "version": "3.4.0",
3
+ "version": "3.4.1",
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": {
@@ -45,6 +45,7 @@ assert.strictEqual(provider.label, "Claude Code");
45
45
  assert.strictEqual(provider.isAvailable(), true);
46
46
  assert.strictEqual(provider.executable(), "/fixture/claude");
47
47
  assert.strictEqual(provider.defaultModel(), "claude-default-fixture");
48
+ assert.ok(provider.modelChoices().includes("claude-fable-5-1"));
48
49
  assert.ok(provider.modelChoices().includes("claude-fable-5"));
49
50
  assert.ok(provider.modelChoices().includes("claude-sonnet-4-6"));
50
51
  assert.deepStrictEqual(provider.compatibilityStatus(), {
@@ -404,7 +404,16 @@ assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
404
404
  // anything), and the people/auth stores got atomic backed-up writes plus
405
405
  // cross-process locking, with hasOwner() failing CLOSED so a corrupt
406
406
  // auth.json can no longer read as an unclaimed pod.
407
- assert.strictEqual(pkg.version, "3.4.0", "release version must remain unchanged without explicit approval");
407
+ // 3.4.1 approved by Sumeet 2026-09-02 ("yes, but you tested it works?"):
408
+ // add claude-fable-5-1 to the Claude model picker. The ID is dash-form
409
+ // (claude-fable-5.1 does not exist) and it requires Claude Code >= 2.1.251 —
410
+ // an older CLI returns an API 400 rather than degrading, so the local CLI was
411
+ // taken 2.1.150 -> 2.1.258 first and the pod images (which install Claude Code
412
+ // unpinned) need a rebuild before the button is safe to tap there. Verified by
413
+ // building the real main invocation through the provider and spawning it: the
414
+ // API reported claude-fable-5-1 as the serving model, with claude-opus-4-8
415
+ // re-run through the same harness as a regression.
416
+ assert.strictEqual(pkg.version, "3.4.1", "release version must remain unchanged without explicit approval");
408
417
  for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
409
418
  assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
410
419
  }