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.
- package/dist/index.js +43 -6
- 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 = "
|
|
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
|
|
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": "
|
|
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": "
|
|
64
|
-
"@claudish/magmux-darwin-x64": "
|
|
65
|
-
"@claudish/magmux-linux-arm64": "
|
|
66
|
-
"@claudish/magmux-linux-x64": "
|
|
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",
|