claudish 10.7.1 → 11.0.0

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.
Files changed (2) hide show
  1. package/dist/index.js +43 -6
  2. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -901,7 +901,7 @@ var init_onepassword_config = __esm(() => {
901
901
  });
902
902
 
903
903
  // src/version.ts
904
- var VERSION = "10.7.1";
904
+ var VERSION = "11.0.0";
905
905
 
906
906
  // src/logger.ts
907
907
  import { appendFile, existsSync as existsSync2, mkdirSync, readdirSync, unlinkSync, writeFileSync as writeFileSync2 } from "fs";
@@ -44201,7 +44201,7 @@ function toSlotRow(id, snap, acct, now = Date.now(), upstreamRecords = []) {
44201
44201
  turns_completed: snap.turnsCompleted,
44202
44202
  last_activity_at: snap.lastActivityAt,
44203
44203
  idle_seconds: idle,
44204
- activity: terminal ? null : snap.turnEndRecordMissing && snap.activity ? `${snap.activity}: turn_end_record_missing` : snap.activity,
44204
+ activity: terminal ? null : snap.turnEndRecordMissing && snap.activity ? `${snap.activity}: turn_end_record_missing` : snap.agentCountMismatch && snap.activity ? `${snap.activity}: agent_count_mismatch` : snap.activity,
44205
44205
  pane: snap.paneId || null
44206
44206
  };
44207
44207
  }
@@ -63994,6 +63994,13 @@ function pathSecondary(t, input) {
63994
63994
  const c = corroborated(input);
63995
63995
  return c.ok ? settledAs("quiet", t.lastAssistant?.stopReason ?? null, c, ["settled_without_turn_duration"]) : null;
63996
63996
  }
63997
+ function agentCountMismatch(t) {
63998
+ if (!t || !t.turnDurationAfterLast || t.wakingAfterLast)
63999
+ return null;
64000
+ const counted = t.agentsLaunched - t.agentsCompleted;
64001
+ const reported = t.turnDurationAfterLast.pendingBackgroundAgentCount ?? 0;
64002
+ return counted === reported ? null : { counted, reported };
64003
+ }
63997
64004
  function decideSettle(input) {
63998
64005
  const t = input.turn;
63999
64006
  const notYet = { settled: false, activity: activityOf(t) };
@@ -64148,6 +64155,12 @@ function isLocalCommandText(text) {
64148
64155
  function isTaskNotification(r) {
64149
64156
  return r.origin?.kind === "task-notification" || userText(r).includes("<task-notification>");
64150
64157
  }
64158
+ function queuedTaskNotification(r) {
64159
+ const a = r.type === "attachment" ? r.attachment : null;
64160
+ if (a?.type !== "queued_command" || typeof a.prompt !== "string")
64161
+ return null;
64162
+ return a.prompt.startsWith("<task-notification>") ? a.prompt : null;
64163
+ }
64151
64164
  function taskIdOf(text) {
64152
64165
  const m = text.match(/<task-id>([^<]+)<\/task-id>/);
64153
64166
  return m ? (m[1] ?? "").trim() : null;
@@ -64351,6 +64364,11 @@ function applyNotification(t, text) {
64351
64364
  t.agentsDone.add(id);
64352
64365
  t.shells.delete(id);
64353
64366
  }
64367
+ function applyQueuedNotification(t, r) {
64368
+ const text = queuedTaskNotification(r);
64369
+ if (text)
64370
+ applyNotification(t, text);
64371
+ }
64354
64372
  function applyUser(t, r, offset) {
64355
64373
  const c = contentOf(r);
64356
64374
  if (Array.isArray(c) && c.some((b) => b?.type === "tool_result")) {
@@ -64424,6 +64442,7 @@ function applyRecord(state, record, offset) {
64424
64442
  t.stopHookAfterLast = true;
64425
64443
  } else if (r.type === "system" && r.subtype === "turn_duration")
64426
64444
  applyTurnDuration(state, t, r);
64445
+ applyQueuedNotification(t, r);
64427
64446
  return state;
64428
64447
  }
64429
64448
  function applyTurnDuration(state, t, r) {
@@ -64756,6 +64775,7 @@ class PaneSessionImpl {
64756
64775
  claudeCodeVersion = null;
64757
64776
  anomalies = new Map;
64758
64777
  turnEndMissing = false;
64778
+ agentMismatch = null;
64759
64779
  registry;
64760
64780
  registryRec = null;
64761
64781
  registryEverSeen = false;
@@ -65532,6 +65552,7 @@ class PaneSessionImpl {
65532
65552
  }
65533
65553
  this.activity = decision.activity;
65534
65554
  this.checkTurnEndMissing();
65555
+ this.checkAgentCountMismatch(t);
65535
65556
  }
65536
65557
  checkEscape() {
65537
65558
  if (this.escapeSentAt === null)
@@ -65554,6 +65575,13 @@ class PaneSessionImpl {
65554
65575
  this.anomaly("turn_end_record_missing");
65555
65576
  this.turnEndMissing = missing;
65556
65577
  }
65578
+ checkAgentCountMismatch(t) {
65579
+ const m = agentCountMismatch(t);
65580
+ const key = m ? `${m.counted}/${m.reported}` : null;
65581
+ if (m && key !== this.agentMismatch)
65582
+ this.anomaly(`agent_count_mismatch: claudish ${m.counted} pending, Claude Code ${m.reported}`);
65583
+ this.agentMismatch = key;
65584
+ }
65557
65585
  detectBlocked(t) {
65558
65586
  const pending = t.pendingTool;
65559
65587
  if (!pending || this.phase !== "RUNNING")
@@ -65622,6 +65650,7 @@ class PaneSessionImpl {
65622
65650
  }
65623
65651
  finishTurn(turn, chatOffset, exitCode) {
65624
65652
  this.turnEndMissing = false;
65653
+ this.agentMismatch = null;
65625
65654
  this.answers.set(turn.index, turn.answer);
65626
65655
  for (const k of this.answers.keys())
65627
65656
  if (k <= turn.index - KEPT_ANSWERS)
@@ -65822,7 +65851,8 @@ ${screenTailOf(this.screen)}`
65822
65851
  anomalies: [...this.anomalies].map(([k, n]) => n > 1 ? `${k} \xD7${n}` : k),
65823
65852
  claudeCodeVersion: this.claudeCodeVersion,
65824
65853
  shape: this.shape,
65825
- turnEndRecordMissing: !terminal && this.phase === "RUNNING" && this.activity === "finishing" && this.turnEndMissing
65854
+ turnEndRecordMissing: !terminal && this.phase === "RUNNING" && this.activity === "finishing" && this.turnEndMissing,
65855
+ agentCountMismatch: !terminal && this.phase === "RUNNING" && this.agentMismatch !== null
65826
65856
  };
65827
65857
  }
65828
65858
  phaseActivity() {
@@ -66737,7 +66767,7 @@ function refreshAccounting(e, snap) {
66737
66767
  return e.acct;
66738
66768
  }
66739
66769
  function notableAnomalies(snap) {
66740
- return snap.anomalies.filter((a) => a.startsWith("background_shell_open") || a.startsWith("turn_end_record_missing") || a.startsWith("prompt_not_read"));
66770
+ return snap.anomalies.filter((a) => a.startsWith("background_shell_open") || a.startsWith("turn_end_record_missing") || a.startsWith("agent_count_mismatch") || a.startsWith("prompt_not_read"));
66741
66771
  }
66742
66772
  function upstreamLogPath(path, id) {
66743
66773
  return join47(path, "errors", `${id}-upstream.jsonl`);
@@ -71348,6 +71378,8 @@ Options (run / run-and-judge):
71348
71378
  json mode runs each model as an interactive pane in a headless
71349
71379
  magmux (>= 0.14.0; darwin and linux).
71350
71380
  --grid Show all models in a magmux grid with live output + status bar
71381
+ --mode <m> run only: json (default, panes), default (the grid, as --grid)
71382
+ or interactive (as --interactive)
71351
71383
 
71352
71384
  Options (judge / run-and-judge):
71353
71385
  --judges <a,b,...> Comma-separated judge model IDs (default: same as runners)
@@ -71383,7 +71415,12 @@ async function teamCommand(args) {
71383
71415
  }
71384
71416
  const modelsRaw = getFlag(args, "--models");
71385
71417
  const judgesRaw = getFlag(args, "--judges");
71386
- const mode = getFlag(args, "--mode") ?? "default";
71418
+ const modeRaw = getFlag(args, "--mode") ?? "json";
71419
+ if (modeRaw !== "default" && modeRaw !== "interactive" && modeRaw !== "json") {
71420
+ console.error(`Error: invalid --mode "${modeRaw}" (expected default, interactive or json)`);
71421
+ process.exit(2);
71422
+ }
71423
+ const mode = modeRaw;
71387
71424
  const timeoutStr = getFlag(args, "--timeout");
71388
71425
  const timeout = timeoutStr ? Number.parseInt(timeoutStr, 10) : 300;
71389
71426
  let input = getFlag(args, "--input");
@@ -71422,7 +71459,7 @@ async function teamCommand(args) {
71422
71459
  printStatus(runStatus);
71423
71460
  } else {
71424
71461
  await Promise.resolve().then(() => init_team_grid());
71425
- const gridStatus = await runWithGrid(sessionPath, models, input ?? "", {
71462
+ const gridStatus = await runWithGrid(sessionPath, models, input, {
71426
71463
  timeout,
71427
71464
  mode: effectiveMode === "interactive" ? "interactive" : "default"
71428
71465
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "10.7.1",
3
+ "version": "11.0.0",
4
4
  "description": "Run Claude Code with any model - OpenRouter, Ollama, LM Studio & local models",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -60,10 +60,10 @@
60
60
  "ai"
61
61
  ],
62
62
  "optionalDependencies": {
63
- "@claudish/magmux-darwin-arm64": "10.7.1",
64
- "@claudish/magmux-darwin-x64": "10.7.1",
65
- "@claudish/magmux-linux-arm64": "10.7.1",
66
- "@claudish/magmux-linux-x64": "10.7.1"
63
+ "@claudish/magmux-darwin-arm64": "11.0.0",
64
+ "@claudish/magmux-darwin-x64": "11.0.0",
65
+ "@claudish/magmux-linux-arm64": "11.0.0",
66
+ "@claudish/magmux-linux-x64": "11.0.0"
67
67
  },
68
68
  "author": "Jack Rudenko <i@madappgang.com>",
69
69
  "license": "MIT",