claudish 10.7.0 → 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 +46 -7
  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.0";
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`);
@@ -68952,7 +68982,9 @@ This server runs inside a session that a claudish MCP server started (CLAUDISH_P
68952
68982
  - run_prompt or compare_models: a one-shot answer from another model.
68953
68983
  - list_models, search_models: find a model.
68954
68984
 
68955
- Do not start a claudish session another way: \`claudish -p\`, an interactive claudish or \`claudish team\` run from this session's shell exits 64 with "nested session refused".`;
68985
+ Do not start a claudish session another way: \`claudish -p\`, an interactive claudish or \`claudish team\` run from this session's shell exits 64 with "nested session refused".
68986
+
68987
+ You are the delegate: do the task with your own tools; a workflow step that says to delegate is satisfied by you running it. The claudish-usage skill's section "Inside a claudish session (child mode)" has the details.`;
68956
68988
  var init_nested_mode = __esm(() => {
68957
68989
  NESTED_MCP_TOOL_NAMES = [
68958
68990
  "run_prompt",
@@ -71346,6 +71378,8 @@ Options (run / run-and-judge):
71346
71378
  json mode runs each model as an interactive pane in a headless
71347
71379
  magmux (>= 0.14.0; darwin and linux).
71348
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)
71349
71383
 
71350
71384
  Options (judge / run-and-judge):
71351
71385
  --judges <a,b,...> Comma-separated judge model IDs (default: same as runners)
@@ -71381,7 +71415,12 @@ async function teamCommand(args) {
71381
71415
  }
71382
71416
  const modelsRaw = getFlag(args, "--models");
71383
71417
  const judgesRaw = getFlag(args, "--judges");
71384
- 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;
71385
71424
  const timeoutStr = getFlag(args, "--timeout");
71386
71425
  const timeout = timeoutStr ? Number.parseInt(timeoutStr, 10) : 300;
71387
71426
  let input = getFlag(args, "--input");
@@ -71420,7 +71459,7 @@ async function teamCommand(args) {
71420
71459
  printStatus(runStatus);
71421
71460
  } else {
71422
71461
  await Promise.resolve().then(() => init_team_grid());
71423
- const gridStatus = await runWithGrid(sessionPath, models, input ?? "", {
71462
+ const gridStatus = await runWithGrid(sessionPath, models, input, {
71424
71463
  timeout,
71425
71464
  mode: effectiveMode === "interactive" ? "interactive" : "default"
71426
71465
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "10.7.0",
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.0",
64
- "@claudish/magmux-darwin-x64": "10.7.0",
65
- "@claudish/magmux-linux-arm64": "10.7.0",
66
- "@claudish/magmux-linux-x64": "10.7.0"
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",