claude-use 11.28.0 → 11.29.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/cli.cjs +141 -36
- package/dist/index.cjs +142 -36
- package/dist/index.mjs +142 -36
- package/dist/types/index.d.ts +20 -7
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -28687,20 +28687,53 @@ var init_supervisor = __esm({
|
|
|
28687
28687
|
}
|
|
28688
28688
|
});
|
|
28689
28689
|
|
|
28690
|
-
// src/
|
|
28691
|
-
function
|
|
28692
|
-
|
|
28693
|
-
|
|
28694
|
-
|
|
28690
|
+
// src/launcher/report.ts
|
|
28691
|
+
function renderReport(rows, style) {
|
|
28692
|
+
if (rows.length === 0) {
|
|
28693
|
+
return [];
|
|
28694
|
+
}
|
|
28695
|
+
const labelWidth = Math.max(...rows.map((row) => row.label.length));
|
|
28696
|
+
const indent = " ".repeat(COLUMN_GAP.length);
|
|
28697
|
+
const lines = [style(["bold"], REPORT_HEADING)];
|
|
28698
|
+
for (const row of rows) {
|
|
28699
|
+
const detail = row.detail === void 0 ? "" : ` ${style(["dim"], `(${row.detail})`)}`;
|
|
28700
|
+
lines.push(`${indent}${style(["dim"], row.label.padEnd(labelWidth))}${COLUMN_GAP}${row.value}${detail}`);
|
|
28701
|
+
for (const note of row.notes ?? []) {
|
|
28702
|
+
lines.push(`${indent}${" ".repeat(labelWidth)}${COLUMN_GAP}${style(["dim"], note)}`);
|
|
28703
|
+
}
|
|
28704
|
+
}
|
|
28705
|
+
return lines;
|
|
28706
|
+
}
|
|
28707
|
+
var REPORT_HEADING, COLUMN_GAP;
|
|
28708
|
+
var init_report = __esm({
|
|
28709
|
+
"src/launcher/report.ts"() {
|
|
28710
|
+
"use strict";
|
|
28711
|
+
REPORT_HEADING = "agent-shim";
|
|
28712
|
+
COLUMN_GAP = " ";
|
|
28695
28713
|
}
|
|
28696
|
-
|
|
28697
|
-
|
|
28714
|
+
});
|
|
28715
|
+
|
|
28716
|
+
// src/logStyle.ts
|
|
28717
|
+
function styledDiagnostic(style, colour, text2) {
|
|
28718
|
+
return text2.split("\n").map((line, index) => {
|
|
28719
|
+
const lead = index === 0 ? DIAGNOSTIC_LEAD.exec(line) : null;
|
|
28720
|
+
if (lead === null) {
|
|
28721
|
+
return style([colour], line);
|
|
28722
|
+
}
|
|
28723
|
+
const [whole, prefix = "", code = "", separator = ""] = lead;
|
|
28724
|
+
return `${style([colour], prefix)}${style([colour, "bold"], code)}${style([colour], `${separator}${line.slice(whole.length)}`)}`;
|
|
28725
|
+
}).join("\n");
|
|
28698
28726
|
}
|
|
28699
28727
|
function createLogPort(sinks, styleFor) {
|
|
28700
28728
|
return {
|
|
28701
28729
|
info: (message) => {
|
|
28702
28730
|
sinks.out(styleFor.out(["dim"], message));
|
|
28703
28731
|
},
|
|
28732
|
+
report: (rows) => {
|
|
28733
|
+
for (const line of renderReport(rows, styleFor.out)) {
|
|
28734
|
+
sinks.out(line);
|
|
28735
|
+
}
|
|
28736
|
+
},
|
|
28704
28737
|
warn: (message) => {
|
|
28705
28738
|
sinks.warn(styledDiagnostic(styleFor.err, "yellow", message));
|
|
28706
28739
|
},
|
|
@@ -28717,6 +28750,7 @@ var init_logStyle = __esm({
|
|
|
28717
28750
|
"src/logStyle.ts"() {
|
|
28718
28751
|
"use strict";
|
|
28719
28752
|
import_node_util3 = require("node:util");
|
|
28753
|
+
init_report();
|
|
28720
28754
|
DIAGNOSTIC_LEAD = /^(agent-shim: )([A-Z][A-Z0-9_]*)(: )/;
|
|
28721
28755
|
}
|
|
28722
28756
|
});
|
|
@@ -32635,11 +32669,15 @@ var init_flatten = __esm({
|
|
|
32635
32669
|
});
|
|
32636
32670
|
|
|
32637
32671
|
// src/resolve/decide.ts
|
|
32638
|
-
function
|
|
32672
|
+
function unclassifiedEntrySummary(names) {
|
|
32639
32673
|
const quoted = names.map((name) => `"${name}"`).join(", ");
|
|
32640
|
-
|
|
32641
|
-
|
|
32642
|
-
|
|
32674
|
+
return names.length === 1 ? `${quoted} is not in the category map, so it is excluded` : `${String(names.length)} entries are not in the category map, so they are excluded: ${quoted}`;
|
|
32675
|
+
}
|
|
32676
|
+
function unclassifiedEntryFix(names) {
|
|
32677
|
+
return `Run \`agent-shim configure\` to classify ${names.length === 1 ? "it" : "them"}`;
|
|
32678
|
+
}
|
|
32679
|
+
function unclassifiedEntryMessage(names) {
|
|
32680
|
+
return `${unclassifiedEntrySummary(names)}. ${unclassifiedEntryFix(names)}.`;
|
|
32643
32681
|
}
|
|
32644
32682
|
function selectRule(relPath, flattened, context) {
|
|
32645
32683
|
const eliminated = [];
|
|
@@ -34280,7 +34318,7 @@ var init_package = __esm({
|
|
|
34280
34318
|
"package.json"() {
|
|
34281
34319
|
package_default = {
|
|
34282
34320
|
name: "claude-use",
|
|
34283
|
-
version: "11.
|
|
34321
|
+
version: "11.29.0",
|
|
34284
34322
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
34285
34323
|
license: "MIT",
|
|
34286
34324
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -63595,7 +63633,9 @@ function diagnosticLines(diagnostics) {
|
|
|
63595
63633
|
if (diagnostic.code === "UNCLASSIFIED_ENTRY") {
|
|
63596
63634
|
if (!unclassifiedReported) {
|
|
63597
63635
|
unclassifiedReported = true;
|
|
63598
|
-
|
|
63636
|
+
const names = unclassified.filter((name) => name !== void 0);
|
|
63637
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${unclassifiedEntrySummary(names)}
|
|
63638
|
+
${unclassifiedEntryFix(names)}.` });
|
|
63599
63639
|
}
|
|
63600
63640
|
continue;
|
|
63601
63641
|
}
|
|
@@ -63603,8 +63643,8 @@ function diagnosticLines(diagnostics) {
|
|
|
63603
63643
|
}
|
|
63604
63644
|
return lines;
|
|
63605
63645
|
}
|
|
63606
|
-
function
|
|
63607
|
-
for (const line of
|
|
63646
|
+
function printDiagnosticLines(log, lines, options) {
|
|
63647
|
+
for (const line of lines) {
|
|
63608
63648
|
if (line.severity === "error" && !options.errorsAsWarnings) {
|
|
63609
63649
|
log.error(line.text);
|
|
63610
63650
|
} else {
|
|
@@ -63612,6 +63652,9 @@ function reportDiagnostics(log, diagnostics, options) {
|
|
|
63612
63652
|
}
|
|
63613
63653
|
}
|
|
63614
63654
|
}
|
|
63655
|
+
function reportDiagnostics(log, diagnostics, options) {
|
|
63656
|
+
printDiagnosticLines(log, diagnosticLines(diagnostics), options);
|
|
63657
|
+
}
|
|
63615
63658
|
var init_diagnostics = __esm({
|
|
63616
63659
|
"src/launcher/diagnostics.ts"() {
|
|
63617
63660
|
"use strict";
|
|
@@ -63644,6 +63687,59 @@ var init_hold = __esm({
|
|
|
63644
63687
|
}
|
|
63645
63688
|
});
|
|
63646
63689
|
|
|
63690
|
+
// src/launcher/launchReport.ts
|
|
63691
|
+
function poolDetail(pool) {
|
|
63692
|
+
const [reason] = pool.reasons;
|
|
63693
|
+
if (pool.movedOff !== void 0) {
|
|
63694
|
+
return { detail: `moved off ${pool.movedOff.identity}: ${pool.movedOff.reason}`, ...reason === void 0 ? {} : { notes: [reason] } };
|
|
63695
|
+
}
|
|
63696
|
+
return reason === void 0 ? {} : { detail: reason };
|
|
63697
|
+
}
|
|
63698
|
+
function decisionRows(facts) {
|
|
63699
|
+
return [
|
|
63700
|
+
{ label: "identity", value: facts.identity ?? "(none)", detail: facts.identitySource },
|
|
63701
|
+
...facts.pool === void 0 ? [] : [
|
|
63702
|
+
{
|
|
63703
|
+
label: "pool",
|
|
63704
|
+
value: facts.pool.name,
|
|
63705
|
+
...poolDetail(facts.pool)
|
|
63706
|
+
}
|
|
63707
|
+
],
|
|
63708
|
+
...facts.profile === void 0 ? [] : [{ label: "profile", value: facts.profile.name, detail: facts.profile.source }],
|
|
63709
|
+
...facts.provider === void 0 ? [] : [{ label: "provider", value: facts.provider.name, detail: `credential ${facts.provider.credential}` }],
|
|
63710
|
+
...facts.identityCredential === void 0 ? [] : [{ label: "credential", value: facts.identityCredential, detail: "the identity's own" }]
|
|
63711
|
+
];
|
|
63712
|
+
}
|
|
63713
|
+
function pinnedVersionRow(version2, source) {
|
|
63714
|
+
return { label: "claude", value: version2, detail: `pinned by ${source}` };
|
|
63715
|
+
}
|
|
63716
|
+
function routingRows(facts) {
|
|
63717
|
+
if (facts.frontDoor === void 0) {
|
|
63718
|
+
return [];
|
|
63719
|
+
}
|
|
63720
|
+
return [
|
|
63721
|
+
{
|
|
63722
|
+
label: "routing",
|
|
63723
|
+
value: `front door 127.0.0.1:${String(facts.frontDoor.port)}`,
|
|
63724
|
+
...facts.provider ? {} : { detail: `OAuth via CONNECT 127.0.0.1:${String(facts.frontDoor.connectPort)}` }
|
|
63725
|
+
},
|
|
63726
|
+
...facts.headroom === void 0 ? [] : [{ label: "headroom", value: "on", detail: `project ${facts.headroom.projectId}` }]
|
|
63727
|
+
];
|
|
63728
|
+
}
|
|
63729
|
+
function farmRow(links, builtDirectories, adopted) {
|
|
63730
|
+
const counted = (count, singular, plural2) => `${String(count)} ${count === 1 ? singular : plural2}`;
|
|
63731
|
+
const parts = [counted(links, "link", "links"), counted(builtDirectories, "built directory", "built directories"), ...adopted === 0 ? [] : [`${String(adopted)} adopted`]];
|
|
63732
|
+
return { label: "farm", value: "resynced", detail: parts.join(", ") };
|
|
63733
|
+
}
|
|
63734
|
+
function noteRow(text2) {
|
|
63735
|
+
return { label: "note", value: text2 };
|
|
63736
|
+
}
|
|
63737
|
+
var init_launchReport = __esm({
|
|
63738
|
+
"src/launcher/launchReport.ts"() {
|
|
63739
|
+
"use strict";
|
|
63740
|
+
}
|
|
63741
|
+
});
|
|
63742
|
+
|
|
63647
63743
|
// src/antigravity/cloudUpstream.ts
|
|
63648
63744
|
function isCcpaEndpoint(endpoint) {
|
|
63649
63745
|
return endpoint.includes("cloudcode-pa.googleapis.com");
|
|
@@ -65038,7 +65134,7 @@ function pickFromPool(decided, params, parsedArgv, readOnly) {
|
|
|
65038
65134
|
}
|
|
65039
65135
|
if (params.supervised?.member !== void 0) {
|
|
65040
65136
|
const reasons = ["resumed here by the supervising launcher after the previous member ran out of quota"];
|
|
65041
|
-
return { identityDecision: { ...decided, name: params.supervised.member },
|
|
65137
|
+
return { identityDecision: { ...decided, name: params.supervised.member }, poolPick: { name: decided.pool, reasons } };
|
|
65042
65138
|
}
|
|
65043
65139
|
const farmRuntime = params.farm;
|
|
65044
65140
|
if (farmRuntime === void 0) {
|
|
@@ -65069,7 +65165,6 @@ function pickFromPool(decided, params, parsedArgv, readOnly) {
|
|
|
65069
65165
|
}
|
|
65070
65166
|
return {
|
|
65071
65167
|
identityDecision: { ...decided, name: resolution.identity },
|
|
65072
|
-
poolExplanation: resolution.explanation,
|
|
65073
65168
|
poolPick: { name: decided.pool, reasons: resolution.reasons, ...resolution.movedOff === void 0 ? {} : { movedOff: resolution.movedOff } }
|
|
65074
65169
|
};
|
|
65075
65170
|
}
|
|
@@ -65097,7 +65192,7 @@ function decideLaunch(params, readOnly) {
|
|
|
65097
65192
|
return trimmed === "" ? void 0 : trimmed;
|
|
65098
65193
|
}
|
|
65099
65194
|
});
|
|
65100
|
-
const { identityDecision,
|
|
65195
|
+
const { identityDecision, poolPick } = pickFromPool(decidedIdentity, params, parsedArgv, readOnly);
|
|
65101
65196
|
const farmIdentity = configDirEscapeHatchApplies ? void 0 : identityDecision.name;
|
|
65102
65197
|
const farm = farmIdentity === void 0 ? void 0 : params.farm;
|
|
65103
65198
|
if (!readOnly && farm !== void 0 && farmIdentity !== void 0) {
|
|
@@ -65237,15 +65332,16 @@ function decideLaunch(params, readOnly) {
|
|
|
65237
65332
|
}
|
|
65238
65333
|
});
|
|
65239
65334
|
const loginlessProvider = requestedFlags.remoteControl && selectedProvider !== void 0 && farmIdentity !== void 0 && params.hasStoredLogin?.(farmIdentity) === false ? { identity: farmIdentity, provider: selectedProvider.name } : void 0;
|
|
65240
|
-
|
|
65241
|
-
|
|
65335
|
+
const notes = [];
|
|
65336
|
+
if (loginlessProvider !== void 0) {
|
|
65337
|
+
notes.push(`${loginlessProvider.identity} has no stored login, so Remote Control is off; provider ${loginlessProvider.provider} runs without it`);
|
|
65242
65338
|
}
|
|
65243
65339
|
const flags = loginlessProvider === void 0 ? requestedFlags : { ...requestedFlags, remoteControl: false };
|
|
65244
65340
|
const catalogue = selectedProvider === void 0 ? void 0 : parseCatalogueCache(params.fs.readFileUtf8(catalogueCachePath(paths, selectedProvider.name)));
|
|
65245
65341
|
const pickerSettings = selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
|
|
65246
65342
|
const callerSettings = hasSettingsArgument(parsedArgv.rest);
|
|
65247
|
-
if (pickerSettings !== void 0 && callerSettings
|
|
65248
|
-
|
|
65343
|
+
if (pickerSettings !== void 0 && callerSettings) {
|
|
65344
|
+
notes.push("--settings was passed, so /model keeps Claude Code's own model names");
|
|
65249
65345
|
}
|
|
65250
65346
|
const launcherSettings = mergeSettings([params.supervised?.settings, callerSettings ? void 0 : pickerSettings]);
|
|
65251
65347
|
const args = buildArgv({
|
|
@@ -65267,8 +65363,8 @@ function decideLaunch(params, readOnly) {
|
|
|
65267
65363
|
return {
|
|
65268
65364
|
parsedArgv,
|
|
65269
65365
|
identityDecision,
|
|
65270
|
-
poolExplanation,
|
|
65271
65366
|
poolPick,
|
|
65367
|
+
notes,
|
|
65272
65368
|
configDirEscapeHatch: configDirEscapeHatchApplies,
|
|
65273
65369
|
farmIdentity,
|
|
65274
65370
|
farmContext,
|
|
@@ -65288,10 +65384,18 @@ function prepareLaunch(params) {
|
|
|
65288
65384
|
const { paths, proc, log } = params;
|
|
65289
65385
|
const { env } = proc;
|
|
65290
65386
|
const decided = decideLaunch(params, false);
|
|
65291
|
-
const { identityDecision, configProfileDecision, resolvedProvider, identityCredential,
|
|
65292
|
-
|
|
65293
|
-
|
|
65294
|
-
|
|
65387
|
+
const { identityDecision, configProfileDecision, resolvedProvider, identityCredential, poolPick, notes, flags: resolvedFlags, args: finalArgv, configDirEscapeHatch: configDirEscapeHatchApplies, decision } = decided;
|
|
65388
|
+
const rows = [
|
|
65389
|
+
...decisionRows({
|
|
65390
|
+
identity: identityDecision.name,
|
|
65391
|
+
identitySource: identityDecision.source,
|
|
65392
|
+
pool: poolPick,
|
|
65393
|
+
profile: configProfileDecision.name === void 0 ? void 0 : { name: configProfileDecision.name, source: configProfileDecision.source },
|
|
65394
|
+
provider: resolvedProvider === void 0 ? void 0 : { name: resolvedProvider.name, credential: `${resolvedProvider.credential.target} from ${describeSource(resolvedProvider.credential.source)}` },
|
|
65395
|
+
identityCredential: identityCredential === void 0 ? void 0 : `${identityCredential.target} from ${describeSource(identityCredential.source)}`
|
|
65396
|
+
})
|
|
65397
|
+
];
|
|
65398
|
+
let warnings = [];
|
|
65295
65399
|
const updateCheck = runLaunchUpdateCheck({
|
|
65296
65400
|
mode: params.updateMode ?? "off",
|
|
65297
65401
|
checkPath: import_node_path43.default.join(paths.root, "update.check"),
|
|
@@ -65326,15 +65430,13 @@ function prepareLaunch(params) {
|
|
|
65326
65430
|
}
|
|
65327
65431
|
throw error63;
|
|
65328
65432
|
}
|
|
65329
|
-
|
|
65433
|
+
warnings = diagnosticLines(result.diagnostics);
|
|
65330
65434
|
if (!result.noOp) {
|
|
65331
|
-
|
|
65332
|
-
`agent-shim: farm at ${result.farmRoot} resynced (${String(result.manifest.links.length)} link(s), ${String(result.manifest.materialised.length)} built director(ies)${result.adopted.length === 0 ? "" : `, ${String(result.adopted.length)} adopted into ${resyncFarmRuntime.claudeHome}`})`
|
|
65333
|
-
);
|
|
65435
|
+
rows.push(farmRow(result.manifest.links.length, result.manifest.materialised.length, result.adopted.length));
|
|
65334
65436
|
}
|
|
65335
65437
|
}
|
|
65336
65438
|
if (decided.pinnedVersion !== void 0) {
|
|
65337
|
-
|
|
65439
|
+
rows.push(pinnedVersionRow(decided.pinnedVersion.version, decided.pinnedVersion.source));
|
|
65338
65440
|
}
|
|
65339
65441
|
const frontDoorPort = params.frontdoor;
|
|
65340
65442
|
const frontDoorEngaged = resolvedProvider !== void 0 || resolvedFlags.headroom || resolvedFlags.trackUsage;
|
|
@@ -65350,14 +65452,11 @@ function prepareLaunch(params) {
|
|
|
65350
65452
|
const headroomPort = params.headroom;
|
|
65351
65453
|
if (resolvedFlags.headroom && headroomPort !== void 0) {
|
|
65352
65454
|
headroom = headroomPort.ensure({ routesProvider: resolvedProvider !== void 0 });
|
|
65353
|
-
const via = resolvedProvider === void 0 ? `OAuth via the door's CONNECT surface on 127.0.0.1:${String(frontDoor?.connectPort ?? 0)}` : `provider ${resolvedProvider.name}`;
|
|
65354
|
-
log.info(`agent-shim: routing through the front door on 127.0.0.1:${String(frontDoor?.port ?? 0)} with headroom on unix socket ${headroom.socketPath} (${via}, project ${headroom.projectId})`);
|
|
65355
65455
|
} else if (resolvedFlags.headroom) {
|
|
65356
65456
|
log.error("agent-shim: headroom routing was requested but this launcher has no headroom port wired; refusing to launch without it.");
|
|
65357
65457
|
proc.exit(1);
|
|
65358
|
-
} else if (frontDoor !== void 0) {
|
|
65359
|
-
log.info(`agent-shim: routing through the front door on 127.0.0.1:${String(frontDoor.port)}${resolvedProvider === void 0 ? ` (OAuth via the door's CONNECT surface on 127.0.0.1:${String(frontDoor.connectPort)}, usage recorded)` : ` (provider ${resolvedProvider.name})`}`);
|
|
65360
65458
|
}
|
|
65459
|
+
rows.push(...routingRows({ frontDoor, headroom, provider: resolvedProvider !== void 0 }));
|
|
65361
65460
|
const frontDoorRelease = frontDoor === void 0 ? void 0 : frontDoorPort?.release;
|
|
65362
65461
|
const sessionId = params.supervised?.sessionId ?? (0, import_node_crypto18.randomUUID)();
|
|
65363
65462
|
const finalEnv = buildEnv({
|
|
@@ -65378,6 +65477,9 @@ function prepareLaunch(params) {
|
|
|
65378
65477
|
registered();
|
|
65379
65478
|
}
|
|
65380
65479
|
};
|
|
65480
|
+
rows.push(...notes.map(noteRow));
|
|
65481
|
+
log.report(rows);
|
|
65482
|
+
printDiagnosticLines(log, warnings, { errorsAsWarnings: false });
|
|
65381
65483
|
const hold = () => holdBeforeLaunch({ delayMs: resolvedFlags.delayMs, pause: resolvedFlags.pause }, params.hold, log);
|
|
65382
65484
|
return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, hold, decision };
|
|
65383
65485
|
}
|
|
@@ -65446,6 +65548,7 @@ var init_launcher = __esm({
|
|
|
65446
65548
|
init_claudeSession();
|
|
65447
65549
|
init_diagnostics();
|
|
65448
65550
|
init_hold();
|
|
65551
|
+
init_launchReport();
|
|
65449
65552
|
init_modelPicker();
|
|
65450
65553
|
init_providerCatalogue();
|
|
65451
65554
|
init_pool();
|
|
@@ -65537,6 +65640,7 @@ function resolveClaudeLaunch(options) {
|
|
|
65537
65640
|
const warnings = [];
|
|
65538
65641
|
const log = {
|
|
65539
65642
|
info: () => void 0,
|
|
65643
|
+
report: () => void 0,
|
|
65540
65644
|
warn: (message) => {
|
|
65541
65645
|
warnings.push(message);
|
|
65542
65646
|
},
|
|
@@ -65607,6 +65711,7 @@ async function withIdentityClaude(params, identity, flags, use2) {
|
|
|
65607
65711
|
},
|
|
65608
65712
|
log: {
|
|
65609
65713
|
info: () => void 0,
|
|
65714
|
+
report: () => void 0,
|
|
65610
65715
|
warn: () => void 0,
|
|
65611
65716
|
error: (message) => {
|
|
65612
65717
|
refusals.push(message);
|
package/dist/index.cjs
CHANGED
|
@@ -1496,11 +1496,15 @@ var init_flatten = __esm({
|
|
|
1496
1496
|
});
|
|
1497
1497
|
|
|
1498
1498
|
// src/resolve/decide.ts
|
|
1499
|
-
function
|
|
1499
|
+
function unclassifiedEntrySummary(names) {
|
|
1500
1500
|
const quoted = names.map((name) => `"${name}"`).join(", ");
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1501
|
+
return names.length === 1 ? `${quoted} is not in the category map, so it is excluded` : `${String(names.length)} entries are not in the category map, so they are excluded: ${quoted}`;
|
|
1502
|
+
}
|
|
1503
|
+
function unclassifiedEntryFix(names) {
|
|
1504
|
+
return `Run \`agent-shim configure\` to classify ${names.length === 1 ? "it" : "them"}`;
|
|
1505
|
+
}
|
|
1506
|
+
function unclassifiedEntryMessage(names) {
|
|
1507
|
+
return `${unclassifiedEntrySummary(names)}. ${unclassifiedEntryFix(names)}.`;
|
|
1504
1508
|
}
|
|
1505
1509
|
function selectRule(relPath, flattened, context) {
|
|
1506
1510
|
const eliminated = [];
|
|
@@ -2974,7 +2978,7 @@ var init_package = __esm({
|
|
|
2974
2978
|
"package.json"() {
|
|
2975
2979
|
package_default = {
|
|
2976
2980
|
name: "claude-use",
|
|
2977
|
-
version: "11.
|
|
2981
|
+
version: "11.29.0",
|
|
2978
2982
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
2979
2983
|
license: "MIT",
|
|
2980
2984
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -4140,20 +4144,53 @@ var init_supervisor = __esm({
|
|
|
4140
4144
|
}
|
|
4141
4145
|
});
|
|
4142
4146
|
|
|
4143
|
-
// src/
|
|
4144
|
-
function
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4147
|
+
// src/launcher/report.ts
|
|
4148
|
+
function renderReport(rows, style) {
|
|
4149
|
+
if (rows.length === 0) {
|
|
4150
|
+
return [];
|
|
4151
|
+
}
|
|
4152
|
+
const labelWidth = Math.max(...rows.map((row) => row.label.length));
|
|
4153
|
+
const indent = " ".repeat(COLUMN_GAP.length);
|
|
4154
|
+
const lines = [style(["bold"], REPORT_HEADING)];
|
|
4155
|
+
for (const row of rows) {
|
|
4156
|
+
const detail = row.detail === void 0 ? "" : ` ${style(["dim"], `(${row.detail})`)}`;
|
|
4157
|
+
lines.push(`${indent}${style(["dim"], row.label.padEnd(labelWidth))}${COLUMN_GAP}${row.value}${detail}`);
|
|
4158
|
+
for (const note of row.notes ?? []) {
|
|
4159
|
+
lines.push(`${indent}${" ".repeat(labelWidth)}${COLUMN_GAP}${style(["dim"], note)}`);
|
|
4160
|
+
}
|
|
4161
|
+
}
|
|
4162
|
+
return lines;
|
|
4163
|
+
}
|
|
4164
|
+
var REPORT_HEADING, COLUMN_GAP;
|
|
4165
|
+
var init_report = __esm({
|
|
4166
|
+
"src/launcher/report.ts"() {
|
|
4167
|
+
"use strict";
|
|
4168
|
+
REPORT_HEADING = "agent-shim";
|
|
4169
|
+
COLUMN_GAP = " ";
|
|
4148
4170
|
}
|
|
4149
|
-
|
|
4150
|
-
|
|
4171
|
+
});
|
|
4172
|
+
|
|
4173
|
+
// src/logStyle.ts
|
|
4174
|
+
function styledDiagnostic(style, colour, text) {
|
|
4175
|
+
return text.split("\n").map((line, index) => {
|
|
4176
|
+
const lead = index === 0 ? DIAGNOSTIC_LEAD.exec(line) : null;
|
|
4177
|
+
if (lead === null) {
|
|
4178
|
+
return style([colour], line);
|
|
4179
|
+
}
|
|
4180
|
+
const [whole, prefix = "", code = "", separator = ""] = lead;
|
|
4181
|
+
return `${style([colour], prefix)}${style([colour, "bold"], code)}${style([colour], `${separator}${line.slice(whole.length)}`)}`;
|
|
4182
|
+
}).join("\n");
|
|
4151
4183
|
}
|
|
4152
4184
|
function createLogPort(sinks, styleFor) {
|
|
4153
4185
|
return {
|
|
4154
4186
|
info: (message) => {
|
|
4155
4187
|
sinks.out(styleFor.out(["dim"], message));
|
|
4156
4188
|
},
|
|
4189
|
+
report: (rows) => {
|
|
4190
|
+
for (const line of renderReport(rows, styleFor.out)) {
|
|
4191
|
+
sinks.out(line);
|
|
4192
|
+
}
|
|
4193
|
+
},
|
|
4157
4194
|
warn: (message) => {
|
|
4158
4195
|
sinks.warn(styledDiagnostic(styleFor.err, "yellow", message));
|
|
4159
4196
|
},
|
|
@@ -4170,6 +4207,7 @@ var init_logStyle = __esm({
|
|
|
4170
4207
|
"src/logStyle.ts"() {
|
|
4171
4208
|
"use strict";
|
|
4172
4209
|
import_node_util = require("node:util");
|
|
4210
|
+
init_report();
|
|
4173
4211
|
DIAGNOSTIC_LEAD = /^(agent-shim: )([A-Z][A-Z0-9_]*)(: )/;
|
|
4174
4212
|
}
|
|
4175
4213
|
});
|
|
@@ -8014,7 +8052,9 @@ function diagnosticLines(diagnostics) {
|
|
|
8014
8052
|
if (diagnostic.code === "UNCLASSIFIED_ENTRY") {
|
|
8015
8053
|
if (!unclassifiedReported) {
|
|
8016
8054
|
unclassifiedReported = true;
|
|
8017
|
-
|
|
8055
|
+
const names = unclassified.filter((name) => name !== void 0);
|
|
8056
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${unclassifiedEntrySummary(names)}
|
|
8057
|
+
${unclassifiedEntryFix(names)}.` });
|
|
8018
8058
|
}
|
|
8019
8059
|
continue;
|
|
8020
8060
|
}
|
|
@@ -8022,8 +8062,8 @@ function diagnosticLines(diagnostics) {
|
|
|
8022
8062
|
}
|
|
8023
8063
|
return lines;
|
|
8024
8064
|
}
|
|
8025
|
-
function
|
|
8026
|
-
for (const line of
|
|
8065
|
+
function printDiagnosticLines(log, lines, options) {
|
|
8066
|
+
for (const line of lines) {
|
|
8027
8067
|
if (line.severity === "error" && !options.errorsAsWarnings) {
|
|
8028
8068
|
log.error(line.text);
|
|
8029
8069
|
} else {
|
|
@@ -8031,6 +8071,9 @@ function reportDiagnostics(log, diagnostics, options) {
|
|
|
8031
8071
|
}
|
|
8032
8072
|
}
|
|
8033
8073
|
}
|
|
8074
|
+
function reportDiagnostics(log, diagnostics, options) {
|
|
8075
|
+
printDiagnosticLines(log, diagnosticLines(diagnostics), options);
|
|
8076
|
+
}
|
|
8034
8077
|
var init_diagnostics = __esm({
|
|
8035
8078
|
"src/launcher/diagnostics.ts"() {
|
|
8036
8079
|
"use strict";
|
|
@@ -8063,6 +8106,59 @@ var init_hold = __esm({
|
|
|
8063
8106
|
}
|
|
8064
8107
|
});
|
|
8065
8108
|
|
|
8109
|
+
// src/launcher/launchReport.ts
|
|
8110
|
+
function poolDetail(pool) {
|
|
8111
|
+
const [reason] = pool.reasons;
|
|
8112
|
+
if (pool.movedOff !== void 0) {
|
|
8113
|
+
return { detail: `moved off ${pool.movedOff.identity}: ${pool.movedOff.reason}`, ...reason === void 0 ? {} : { notes: [reason] } };
|
|
8114
|
+
}
|
|
8115
|
+
return reason === void 0 ? {} : { detail: reason };
|
|
8116
|
+
}
|
|
8117
|
+
function decisionRows(facts) {
|
|
8118
|
+
return [
|
|
8119
|
+
{ label: "identity", value: facts.identity ?? "(none)", detail: facts.identitySource },
|
|
8120
|
+
...facts.pool === void 0 ? [] : [
|
|
8121
|
+
{
|
|
8122
|
+
label: "pool",
|
|
8123
|
+
value: facts.pool.name,
|
|
8124
|
+
...poolDetail(facts.pool)
|
|
8125
|
+
}
|
|
8126
|
+
],
|
|
8127
|
+
...facts.profile === void 0 ? [] : [{ label: "profile", value: facts.profile.name, detail: facts.profile.source }],
|
|
8128
|
+
...facts.provider === void 0 ? [] : [{ label: "provider", value: facts.provider.name, detail: `credential ${facts.provider.credential}` }],
|
|
8129
|
+
...facts.identityCredential === void 0 ? [] : [{ label: "credential", value: facts.identityCredential, detail: "the identity's own" }]
|
|
8130
|
+
];
|
|
8131
|
+
}
|
|
8132
|
+
function pinnedVersionRow(version, source) {
|
|
8133
|
+
return { label: "claude", value: version, detail: `pinned by ${source}` };
|
|
8134
|
+
}
|
|
8135
|
+
function routingRows(facts) {
|
|
8136
|
+
if (facts.frontDoor === void 0) {
|
|
8137
|
+
return [];
|
|
8138
|
+
}
|
|
8139
|
+
return [
|
|
8140
|
+
{
|
|
8141
|
+
label: "routing",
|
|
8142
|
+
value: `front door 127.0.0.1:${String(facts.frontDoor.port)}`,
|
|
8143
|
+
...facts.provider ? {} : { detail: `OAuth via CONNECT 127.0.0.1:${String(facts.frontDoor.connectPort)}` }
|
|
8144
|
+
},
|
|
8145
|
+
...facts.headroom === void 0 ? [] : [{ label: "headroom", value: "on", detail: `project ${facts.headroom.projectId}` }]
|
|
8146
|
+
];
|
|
8147
|
+
}
|
|
8148
|
+
function farmRow(links, builtDirectories, adopted) {
|
|
8149
|
+
const counted = (count, singular, plural) => `${String(count)} ${count === 1 ? singular : plural}`;
|
|
8150
|
+
const parts = [counted(links, "link", "links"), counted(builtDirectories, "built directory", "built directories"), ...adopted === 0 ? [] : [`${String(adopted)} adopted`]];
|
|
8151
|
+
return { label: "farm", value: "resynced", detail: parts.join(", ") };
|
|
8152
|
+
}
|
|
8153
|
+
function noteRow(text) {
|
|
8154
|
+
return { label: "note", value: text };
|
|
8155
|
+
}
|
|
8156
|
+
var init_launchReport = __esm({
|
|
8157
|
+
"src/launcher/launchReport.ts"() {
|
|
8158
|
+
"use strict";
|
|
8159
|
+
}
|
|
8160
|
+
});
|
|
8161
|
+
|
|
8066
8162
|
// src/antigravity/cloudUpstream.ts
|
|
8067
8163
|
var init_cloudUpstream = __esm({
|
|
8068
8164
|
"src/antigravity/cloudUpstream.ts"() {
|
|
@@ -8588,7 +8684,7 @@ function pickFromPool(decided, params, parsedArgv, readOnly) {
|
|
|
8588
8684
|
}
|
|
8589
8685
|
if (params.supervised?.member !== void 0) {
|
|
8590
8686
|
const reasons = ["resumed here by the supervising launcher after the previous member ran out of quota"];
|
|
8591
|
-
return { identityDecision: { ...decided, name: params.supervised.member },
|
|
8687
|
+
return { identityDecision: { ...decided, name: params.supervised.member }, poolPick: { name: decided.pool, reasons } };
|
|
8592
8688
|
}
|
|
8593
8689
|
const farmRuntime = params.farm;
|
|
8594
8690
|
if (farmRuntime === void 0) {
|
|
@@ -8619,7 +8715,6 @@ function pickFromPool(decided, params, parsedArgv, readOnly) {
|
|
|
8619
8715
|
}
|
|
8620
8716
|
return {
|
|
8621
8717
|
identityDecision: { ...decided, name: resolution.identity },
|
|
8622
|
-
poolExplanation: resolution.explanation,
|
|
8623
8718
|
poolPick: { name: decided.pool, reasons: resolution.reasons, ...resolution.movedOff === void 0 ? {} : { movedOff: resolution.movedOff } }
|
|
8624
8719
|
};
|
|
8625
8720
|
}
|
|
@@ -8647,7 +8742,7 @@ function decideLaunch(params, readOnly) {
|
|
|
8647
8742
|
return trimmed === "" ? void 0 : trimmed;
|
|
8648
8743
|
}
|
|
8649
8744
|
});
|
|
8650
|
-
const { identityDecision,
|
|
8745
|
+
const { identityDecision, poolPick } = pickFromPool(decidedIdentity, params, parsedArgv, readOnly);
|
|
8651
8746
|
const farmIdentity = configDirEscapeHatchApplies ? void 0 : identityDecision.name;
|
|
8652
8747
|
const farm = farmIdentity === void 0 ? void 0 : params.farm;
|
|
8653
8748
|
if (!readOnly && farm !== void 0 && farmIdentity !== void 0) {
|
|
@@ -8787,15 +8882,16 @@ function decideLaunch(params, readOnly) {
|
|
|
8787
8882
|
}
|
|
8788
8883
|
});
|
|
8789
8884
|
const loginlessProvider = requestedFlags.remoteControl && selectedProvider !== void 0 && farmIdentity !== void 0 && params.hasStoredLogin?.(farmIdentity) === false ? { identity: farmIdentity, provider: selectedProvider.name } : void 0;
|
|
8790
|
-
|
|
8791
|
-
|
|
8885
|
+
const notes = [];
|
|
8886
|
+
if (loginlessProvider !== void 0) {
|
|
8887
|
+
notes.push(`${loginlessProvider.identity} has no stored login, so Remote Control is off; provider ${loginlessProvider.provider} runs without it`);
|
|
8792
8888
|
}
|
|
8793
8889
|
const flags = loginlessProvider === void 0 ? requestedFlags : { ...requestedFlags, remoteControl: false };
|
|
8794
8890
|
const catalogue = selectedProvider === void 0 ? void 0 : parseCatalogueCache(params.fs.readFileUtf8(catalogueCachePath(paths, selectedProvider.name)));
|
|
8795
8891
|
const pickerSettings = selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
|
|
8796
8892
|
const callerSettings = hasSettingsArgument(parsedArgv.rest);
|
|
8797
|
-
if (pickerSettings !== void 0 && callerSettings
|
|
8798
|
-
|
|
8893
|
+
if (pickerSettings !== void 0 && callerSettings) {
|
|
8894
|
+
notes.push("--settings was passed, so /model keeps Claude Code's own model names");
|
|
8799
8895
|
}
|
|
8800
8896
|
const launcherSettings = mergeSettings([params.supervised?.settings, callerSettings ? void 0 : pickerSettings]);
|
|
8801
8897
|
const args = buildArgv({
|
|
@@ -8817,8 +8913,8 @@ function decideLaunch(params, readOnly) {
|
|
|
8817
8913
|
return {
|
|
8818
8914
|
parsedArgv,
|
|
8819
8915
|
identityDecision,
|
|
8820
|
-
poolExplanation,
|
|
8821
8916
|
poolPick,
|
|
8917
|
+
notes,
|
|
8822
8918
|
configDirEscapeHatch: configDirEscapeHatchApplies,
|
|
8823
8919
|
farmIdentity,
|
|
8824
8920
|
farmContext,
|
|
@@ -8838,10 +8934,18 @@ function prepareLaunch(params) {
|
|
|
8838
8934
|
const { paths, proc, log } = params;
|
|
8839
8935
|
const { env } = proc;
|
|
8840
8936
|
const decided = decideLaunch(params, false);
|
|
8841
|
-
const { identityDecision, configProfileDecision, resolvedProvider, identityCredential,
|
|
8842
|
-
|
|
8843
|
-
|
|
8844
|
-
|
|
8937
|
+
const { identityDecision, configProfileDecision, resolvedProvider, identityCredential, poolPick, notes, flags: resolvedFlags, args: finalArgv, configDirEscapeHatch: configDirEscapeHatchApplies, decision } = decided;
|
|
8938
|
+
const rows = [
|
|
8939
|
+
...decisionRows({
|
|
8940
|
+
identity: identityDecision.name,
|
|
8941
|
+
identitySource: identityDecision.source,
|
|
8942
|
+
pool: poolPick,
|
|
8943
|
+
profile: configProfileDecision.name === void 0 ? void 0 : { name: configProfileDecision.name, source: configProfileDecision.source },
|
|
8944
|
+
provider: resolvedProvider === void 0 ? void 0 : { name: resolvedProvider.name, credential: `${resolvedProvider.credential.target} from ${describeSource(resolvedProvider.credential.source)}` },
|
|
8945
|
+
identityCredential: identityCredential === void 0 ? void 0 : `${identityCredential.target} from ${describeSource(identityCredential.source)}`
|
|
8946
|
+
})
|
|
8947
|
+
];
|
|
8948
|
+
let warnings = [];
|
|
8845
8949
|
const updateCheck = runLaunchUpdateCheck({
|
|
8846
8950
|
mode: params.updateMode ?? "off",
|
|
8847
8951
|
checkPath: import_node_path39.default.join(paths.root, "update.check"),
|
|
@@ -8876,15 +8980,13 @@ function prepareLaunch(params) {
|
|
|
8876
8980
|
}
|
|
8877
8981
|
throw error;
|
|
8878
8982
|
}
|
|
8879
|
-
|
|
8983
|
+
warnings = diagnosticLines(result.diagnostics);
|
|
8880
8984
|
if (!result.noOp) {
|
|
8881
|
-
|
|
8882
|
-
`agent-shim: farm at ${result.farmRoot} resynced (${String(result.manifest.links.length)} link(s), ${String(result.manifest.materialised.length)} built director(ies)${result.adopted.length === 0 ? "" : `, ${String(result.adopted.length)} adopted into ${resyncFarmRuntime.claudeHome}`})`
|
|
8883
|
-
);
|
|
8985
|
+
rows.push(farmRow(result.manifest.links.length, result.manifest.materialised.length, result.adopted.length));
|
|
8884
8986
|
}
|
|
8885
8987
|
}
|
|
8886
8988
|
if (decided.pinnedVersion !== void 0) {
|
|
8887
|
-
|
|
8989
|
+
rows.push(pinnedVersionRow(decided.pinnedVersion.version, decided.pinnedVersion.source));
|
|
8888
8990
|
}
|
|
8889
8991
|
const frontDoorPort = params.frontdoor;
|
|
8890
8992
|
const frontDoorEngaged = resolvedProvider !== void 0 || resolvedFlags.headroom || resolvedFlags.trackUsage;
|
|
@@ -8900,14 +9002,11 @@ function prepareLaunch(params) {
|
|
|
8900
9002
|
const headroomPort = params.headroom;
|
|
8901
9003
|
if (resolvedFlags.headroom && headroomPort !== void 0) {
|
|
8902
9004
|
headroom = headroomPort.ensure({ routesProvider: resolvedProvider !== void 0 });
|
|
8903
|
-
const via = resolvedProvider === void 0 ? `OAuth via the door's CONNECT surface on 127.0.0.1:${String(frontDoor?.connectPort ?? 0)}` : `provider ${resolvedProvider.name}`;
|
|
8904
|
-
log.info(`agent-shim: routing through the front door on 127.0.0.1:${String(frontDoor?.port ?? 0)} with headroom on unix socket ${headroom.socketPath} (${via}, project ${headroom.projectId})`);
|
|
8905
9005
|
} else if (resolvedFlags.headroom) {
|
|
8906
9006
|
log.error("agent-shim: headroom routing was requested but this launcher has no headroom port wired; refusing to launch without it.");
|
|
8907
9007
|
proc.exit(1);
|
|
8908
|
-
} else if (frontDoor !== void 0) {
|
|
8909
|
-
log.info(`agent-shim: routing through the front door on 127.0.0.1:${String(frontDoor.port)}${resolvedProvider === void 0 ? ` (OAuth via the door's CONNECT surface on 127.0.0.1:${String(frontDoor.connectPort)}, usage recorded)` : ` (provider ${resolvedProvider.name})`}`);
|
|
8910
9008
|
}
|
|
9009
|
+
rows.push(...routingRows({ frontDoor, headroom, provider: resolvedProvider !== void 0 }));
|
|
8911
9010
|
const frontDoorRelease = frontDoor === void 0 ? void 0 : frontDoorPort?.release;
|
|
8912
9011
|
const sessionId = params.supervised?.sessionId ?? (0, import_node_crypto11.randomUUID)();
|
|
8913
9012
|
const finalEnv = buildEnv({
|
|
@@ -8928,6 +9027,9 @@ function prepareLaunch(params) {
|
|
|
8928
9027
|
registered();
|
|
8929
9028
|
}
|
|
8930
9029
|
};
|
|
9030
|
+
rows.push(...notes.map(noteRow));
|
|
9031
|
+
log.report(rows);
|
|
9032
|
+
printDiagnosticLines(log, warnings, { errorsAsWarnings: false });
|
|
8931
9033
|
const hold = () => holdBeforeLaunch({ delayMs: resolvedFlags.delayMs, pause: resolvedFlags.pause }, params.hold, log);
|
|
8932
9034
|
return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, hold, decision };
|
|
8933
9035
|
}
|
|
@@ -8996,6 +9098,7 @@ var init_launcher = __esm({
|
|
|
8996
9098
|
init_claudeSession();
|
|
8997
9099
|
init_diagnostics();
|
|
8998
9100
|
init_hold();
|
|
9101
|
+
init_launchReport();
|
|
8999
9102
|
init_modelPicker();
|
|
9000
9103
|
init_providerCatalogue();
|
|
9001
9104
|
init_pool();
|
|
@@ -9219,6 +9322,7 @@ function prepareClaudeLaunch(options) {
|
|
|
9219
9322
|
const refusals = [];
|
|
9220
9323
|
const log = {
|
|
9221
9324
|
info: () => void 0,
|
|
9325
|
+
report: () => void 0,
|
|
9222
9326
|
warn: () => void 0,
|
|
9223
9327
|
error: (message) => {
|
|
9224
9328
|
refusals.push(message);
|
|
@@ -9240,6 +9344,7 @@ function resolveClaudeLaunch(options) {
|
|
|
9240
9344
|
const warnings = [];
|
|
9241
9345
|
const log = {
|
|
9242
9346
|
info: () => void 0,
|
|
9347
|
+
report: () => void 0,
|
|
9243
9348
|
warn: (message) => {
|
|
9244
9349
|
warnings.push(message);
|
|
9245
9350
|
},
|
|
@@ -9448,6 +9553,7 @@ async function withIdentityClaude(params, identity, flags, use) {
|
|
|
9448
9553
|
},
|
|
9449
9554
|
log: {
|
|
9450
9555
|
info: () => void 0,
|
|
9556
|
+
report: () => void 0,
|
|
9451
9557
|
warn: () => void 0,
|
|
9452
9558
|
error: (message) => {
|
|
9453
9559
|
refusals.push(message);
|
package/dist/index.mjs
CHANGED
|
@@ -1474,11 +1474,15 @@ var init_flatten = __esm({
|
|
|
1474
1474
|
});
|
|
1475
1475
|
|
|
1476
1476
|
// src/resolve/decide.ts
|
|
1477
|
-
function
|
|
1477
|
+
function unclassifiedEntrySummary(names) {
|
|
1478
1478
|
const quoted = names.map((name) => `"${name}"`).join(", ");
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1479
|
+
return names.length === 1 ? `${quoted} is not in the category map, so it is excluded` : `${String(names.length)} entries are not in the category map, so they are excluded: ${quoted}`;
|
|
1480
|
+
}
|
|
1481
|
+
function unclassifiedEntryFix(names) {
|
|
1482
|
+
return `Run \`agent-shim configure\` to classify ${names.length === 1 ? "it" : "them"}`;
|
|
1483
|
+
}
|
|
1484
|
+
function unclassifiedEntryMessage(names) {
|
|
1485
|
+
return `${unclassifiedEntrySummary(names)}. ${unclassifiedEntryFix(names)}.`;
|
|
1482
1486
|
}
|
|
1483
1487
|
function selectRule(relPath, flattened, context) {
|
|
1484
1488
|
const eliminated = [];
|
|
@@ -2950,7 +2954,7 @@ var init_package = __esm({
|
|
|
2950
2954
|
"package.json"() {
|
|
2951
2955
|
package_default = {
|
|
2952
2956
|
name: "claude-use",
|
|
2953
|
-
version: "11.
|
|
2957
|
+
version: "11.29.0",
|
|
2954
2958
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
2955
2959
|
license: "MIT",
|
|
2956
2960
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -4115,21 +4119,54 @@ var init_supervisor = __esm({
|
|
|
4115
4119
|
}
|
|
4116
4120
|
});
|
|
4117
4121
|
|
|
4122
|
+
// src/launcher/report.ts
|
|
4123
|
+
function renderReport(rows, style) {
|
|
4124
|
+
if (rows.length === 0) {
|
|
4125
|
+
return [];
|
|
4126
|
+
}
|
|
4127
|
+
const labelWidth = Math.max(...rows.map((row) => row.label.length));
|
|
4128
|
+
const indent = " ".repeat(COLUMN_GAP.length);
|
|
4129
|
+
const lines = [style(["bold"], REPORT_HEADING)];
|
|
4130
|
+
for (const row of rows) {
|
|
4131
|
+
const detail = row.detail === void 0 ? "" : ` ${style(["dim"], `(${row.detail})`)}`;
|
|
4132
|
+
lines.push(`${indent}${style(["dim"], row.label.padEnd(labelWidth))}${COLUMN_GAP}${row.value}${detail}`);
|
|
4133
|
+
for (const note of row.notes ?? []) {
|
|
4134
|
+
lines.push(`${indent}${" ".repeat(labelWidth)}${COLUMN_GAP}${style(["dim"], note)}`);
|
|
4135
|
+
}
|
|
4136
|
+
}
|
|
4137
|
+
return lines;
|
|
4138
|
+
}
|
|
4139
|
+
var REPORT_HEADING, COLUMN_GAP;
|
|
4140
|
+
var init_report = __esm({
|
|
4141
|
+
"src/launcher/report.ts"() {
|
|
4142
|
+
"use strict";
|
|
4143
|
+
REPORT_HEADING = "agent-shim";
|
|
4144
|
+
COLUMN_GAP = " ";
|
|
4145
|
+
}
|
|
4146
|
+
});
|
|
4147
|
+
|
|
4118
4148
|
// src/logStyle.ts
|
|
4119
4149
|
import { styleText } from "node:util";
|
|
4120
|
-
function styledDiagnostic(style, colour,
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
|
|
4150
|
+
function styledDiagnostic(style, colour, text) {
|
|
4151
|
+
return text.split("\n").map((line, index) => {
|
|
4152
|
+
const lead = index === 0 ? DIAGNOSTIC_LEAD.exec(line) : null;
|
|
4153
|
+
if (lead === null) {
|
|
4154
|
+
return style([colour], line);
|
|
4155
|
+
}
|
|
4156
|
+
const [whole, prefix = "", code = "", separator = ""] = lead;
|
|
4157
|
+
return `${style([colour], prefix)}${style([colour, "bold"], code)}${style([colour], `${separator}${line.slice(whole.length)}`)}`;
|
|
4158
|
+
}).join("\n");
|
|
4127
4159
|
}
|
|
4128
4160
|
function createLogPort(sinks, styleFor) {
|
|
4129
4161
|
return {
|
|
4130
4162
|
info: (message) => {
|
|
4131
4163
|
sinks.out(styleFor.out(["dim"], message));
|
|
4132
4164
|
},
|
|
4165
|
+
report: (rows) => {
|
|
4166
|
+
for (const line of renderReport(rows, styleFor.out)) {
|
|
4167
|
+
sinks.out(line);
|
|
4168
|
+
}
|
|
4169
|
+
},
|
|
4133
4170
|
warn: (message) => {
|
|
4134
4171
|
sinks.warn(styledDiagnostic(styleFor.err, "yellow", message));
|
|
4135
4172
|
},
|
|
@@ -4145,6 +4182,7 @@ var DIAGNOSTIC_LEAD;
|
|
|
4145
4182
|
var init_logStyle = __esm({
|
|
4146
4183
|
"src/logStyle.ts"() {
|
|
4147
4184
|
"use strict";
|
|
4185
|
+
init_report();
|
|
4148
4186
|
DIAGNOSTIC_LEAD = /^(agent-shim: )([A-Z][A-Z0-9_]*)(: )/;
|
|
4149
4187
|
}
|
|
4150
4188
|
});
|
|
@@ -7986,7 +8024,9 @@ function diagnosticLines(diagnostics) {
|
|
|
7986
8024
|
if (diagnostic.code === "UNCLASSIFIED_ENTRY") {
|
|
7987
8025
|
if (!unclassifiedReported) {
|
|
7988
8026
|
unclassifiedReported = true;
|
|
7989
|
-
|
|
8027
|
+
const names = unclassified.filter((name) => name !== void 0);
|
|
8028
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${unclassifiedEntrySummary(names)}
|
|
8029
|
+
${unclassifiedEntryFix(names)}.` });
|
|
7990
8030
|
}
|
|
7991
8031
|
continue;
|
|
7992
8032
|
}
|
|
@@ -7994,8 +8034,8 @@ function diagnosticLines(diagnostics) {
|
|
|
7994
8034
|
}
|
|
7995
8035
|
return lines;
|
|
7996
8036
|
}
|
|
7997
|
-
function
|
|
7998
|
-
for (const line of
|
|
8037
|
+
function printDiagnosticLines(log, lines, options) {
|
|
8038
|
+
for (const line of lines) {
|
|
7999
8039
|
if (line.severity === "error" && !options.errorsAsWarnings) {
|
|
8000
8040
|
log.error(line.text);
|
|
8001
8041
|
} else {
|
|
@@ -8003,6 +8043,9 @@ function reportDiagnostics(log, diagnostics, options) {
|
|
|
8003
8043
|
}
|
|
8004
8044
|
}
|
|
8005
8045
|
}
|
|
8046
|
+
function reportDiagnostics(log, diagnostics, options) {
|
|
8047
|
+
printDiagnosticLines(log, diagnosticLines(diagnostics), options);
|
|
8048
|
+
}
|
|
8006
8049
|
var init_diagnostics = __esm({
|
|
8007
8050
|
"src/launcher/diagnostics.ts"() {
|
|
8008
8051
|
"use strict";
|
|
@@ -8035,6 +8078,59 @@ var init_hold = __esm({
|
|
|
8035
8078
|
}
|
|
8036
8079
|
});
|
|
8037
8080
|
|
|
8081
|
+
// src/launcher/launchReport.ts
|
|
8082
|
+
function poolDetail(pool) {
|
|
8083
|
+
const [reason] = pool.reasons;
|
|
8084
|
+
if (pool.movedOff !== void 0) {
|
|
8085
|
+
return { detail: `moved off ${pool.movedOff.identity}: ${pool.movedOff.reason}`, ...reason === void 0 ? {} : { notes: [reason] } };
|
|
8086
|
+
}
|
|
8087
|
+
return reason === void 0 ? {} : { detail: reason };
|
|
8088
|
+
}
|
|
8089
|
+
function decisionRows(facts) {
|
|
8090
|
+
return [
|
|
8091
|
+
{ label: "identity", value: facts.identity ?? "(none)", detail: facts.identitySource },
|
|
8092
|
+
...facts.pool === void 0 ? [] : [
|
|
8093
|
+
{
|
|
8094
|
+
label: "pool",
|
|
8095
|
+
value: facts.pool.name,
|
|
8096
|
+
...poolDetail(facts.pool)
|
|
8097
|
+
}
|
|
8098
|
+
],
|
|
8099
|
+
...facts.profile === void 0 ? [] : [{ label: "profile", value: facts.profile.name, detail: facts.profile.source }],
|
|
8100
|
+
...facts.provider === void 0 ? [] : [{ label: "provider", value: facts.provider.name, detail: `credential ${facts.provider.credential}` }],
|
|
8101
|
+
...facts.identityCredential === void 0 ? [] : [{ label: "credential", value: facts.identityCredential, detail: "the identity's own" }]
|
|
8102
|
+
];
|
|
8103
|
+
}
|
|
8104
|
+
function pinnedVersionRow(version, source) {
|
|
8105
|
+
return { label: "claude", value: version, detail: `pinned by ${source}` };
|
|
8106
|
+
}
|
|
8107
|
+
function routingRows(facts) {
|
|
8108
|
+
if (facts.frontDoor === void 0) {
|
|
8109
|
+
return [];
|
|
8110
|
+
}
|
|
8111
|
+
return [
|
|
8112
|
+
{
|
|
8113
|
+
label: "routing",
|
|
8114
|
+
value: `front door 127.0.0.1:${String(facts.frontDoor.port)}`,
|
|
8115
|
+
...facts.provider ? {} : { detail: `OAuth via CONNECT 127.0.0.1:${String(facts.frontDoor.connectPort)}` }
|
|
8116
|
+
},
|
|
8117
|
+
...facts.headroom === void 0 ? [] : [{ label: "headroom", value: "on", detail: `project ${facts.headroom.projectId}` }]
|
|
8118
|
+
];
|
|
8119
|
+
}
|
|
8120
|
+
function farmRow(links, builtDirectories, adopted) {
|
|
8121
|
+
const counted = (count, singular, plural) => `${String(count)} ${count === 1 ? singular : plural}`;
|
|
8122
|
+
const parts = [counted(links, "link", "links"), counted(builtDirectories, "built directory", "built directories"), ...adopted === 0 ? [] : [`${String(adopted)} adopted`]];
|
|
8123
|
+
return { label: "farm", value: "resynced", detail: parts.join(", ") };
|
|
8124
|
+
}
|
|
8125
|
+
function noteRow(text) {
|
|
8126
|
+
return { label: "note", value: text };
|
|
8127
|
+
}
|
|
8128
|
+
var init_launchReport = __esm({
|
|
8129
|
+
"src/launcher/launchReport.ts"() {
|
|
8130
|
+
"use strict";
|
|
8131
|
+
}
|
|
8132
|
+
});
|
|
8133
|
+
|
|
8038
8134
|
// src/antigravity/cloudUpstream.ts
|
|
8039
8135
|
var init_cloudUpstream = __esm({
|
|
8040
8136
|
"src/antigravity/cloudUpstream.ts"() {
|
|
@@ -8562,7 +8658,7 @@ function pickFromPool(decided, params, parsedArgv, readOnly) {
|
|
|
8562
8658
|
}
|
|
8563
8659
|
if (params.supervised?.member !== void 0) {
|
|
8564
8660
|
const reasons = ["resumed here by the supervising launcher after the previous member ran out of quota"];
|
|
8565
|
-
return { identityDecision: { ...decided, name: params.supervised.member },
|
|
8661
|
+
return { identityDecision: { ...decided, name: params.supervised.member }, poolPick: { name: decided.pool, reasons } };
|
|
8566
8662
|
}
|
|
8567
8663
|
const farmRuntime = params.farm;
|
|
8568
8664
|
if (farmRuntime === void 0) {
|
|
@@ -8593,7 +8689,6 @@ function pickFromPool(decided, params, parsedArgv, readOnly) {
|
|
|
8593
8689
|
}
|
|
8594
8690
|
return {
|
|
8595
8691
|
identityDecision: { ...decided, name: resolution.identity },
|
|
8596
|
-
poolExplanation: resolution.explanation,
|
|
8597
8692
|
poolPick: { name: decided.pool, reasons: resolution.reasons, ...resolution.movedOff === void 0 ? {} : { movedOff: resolution.movedOff } }
|
|
8598
8693
|
};
|
|
8599
8694
|
}
|
|
@@ -8621,7 +8716,7 @@ function decideLaunch(params, readOnly) {
|
|
|
8621
8716
|
return trimmed === "" ? void 0 : trimmed;
|
|
8622
8717
|
}
|
|
8623
8718
|
});
|
|
8624
|
-
const { identityDecision,
|
|
8719
|
+
const { identityDecision, poolPick } = pickFromPool(decidedIdentity, params, parsedArgv, readOnly);
|
|
8625
8720
|
const farmIdentity = configDirEscapeHatchApplies ? void 0 : identityDecision.name;
|
|
8626
8721
|
const farm = farmIdentity === void 0 ? void 0 : params.farm;
|
|
8627
8722
|
if (!readOnly && farm !== void 0 && farmIdentity !== void 0) {
|
|
@@ -8761,15 +8856,16 @@ function decideLaunch(params, readOnly) {
|
|
|
8761
8856
|
}
|
|
8762
8857
|
});
|
|
8763
8858
|
const loginlessProvider = requestedFlags.remoteControl && selectedProvider !== void 0 && farmIdentity !== void 0 && params.hasStoredLogin?.(farmIdentity) === false ? { identity: farmIdentity, provider: selectedProvider.name } : void 0;
|
|
8764
|
-
|
|
8765
|
-
|
|
8859
|
+
const notes = [];
|
|
8860
|
+
if (loginlessProvider !== void 0) {
|
|
8861
|
+
notes.push(`${loginlessProvider.identity} has no stored login, so Remote Control is off; provider ${loginlessProvider.provider} runs without it`);
|
|
8766
8862
|
}
|
|
8767
8863
|
const flags = loginlessProvider === void 0 ? requestedFlags : { ...requestedFlags, remoteControl: false };
|
|
8768
8864
|
const catalogue = selectedProvider === void 0 ? void 0 : parseCatalogueCache(params.fs.readFileUtf8(catalogueCachePath(paths, selectedProvider.name)));
|
|
8769
8865
|
const pickerSettings = selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
|
|
8770
8866
|
const callerSettings = hasSettingsArgument(parsedArgv.rest);
|
|
8771
|
-
if (pickerSettings !== void 0 && callerSettings
|
|
8772
|
-
|
|
8867
|
+
if (pickerSettings !== void 0 && callerSettings) {
|
|
8868
|
+
notes.push("--settings was passed, so /model keeps Claude Code's own model names");
|
|
8773
8869
|
}
|
|
8774
8870
|
const launcherSettings = mergeSettings([params.supervised?.settings, callerSettings ? void 0 : pickerSettings]);
|
|
8775
8871
|
const args = buildArgv({
|
|
@@ -8791,8 +8887,8 @@ function decideLaunch(params, readOnly) {
|
|
|
8791
8887
|
return {
|
|
8792
8888
|
parsedArgv,
|
|
8793
8889
|
identityDecision,
|
|
8794
|
-
poolExplanation,
|
|
8795
8890
|
poolPick,
|
|
8891
|
+
notes,
|
|
8796
8892
|
configDirEscapeHatch: configDirEscapeHatchApplies,
|
|
8797
8893
|
farmIdentity,
|
|
8798
8894
|
farmContext,
|
|
@@ -8812,10 +8908,18 @@ function prepareLaunch(params) {
|
|
|
8812
8908
|
const { paths, proc, log } = params;
|
|
8813
8909
|
const { env } = proc;
|
|
8814
8910
|
const decided = decideLaunch(params, false);
|
|
8815
|
-
const { identityDecision, configProfileDecision, resolvedProvider, identityCredential,
|
|
8816
|
-
|
|
8817
|
-
|
|
8818
|
-
|
|
8911
|
+
const { identityDecision, configProfileDecision, resolvedProvider, identityCredential, poolPick, notes, flags: resolvedFlags, args: finalArgv, configDirEscapeHatch: configDirEscapeHatchApplies, decision } = decided;
|
|
8912
|
+
const rows = [
|
|
8913
|
+
...decisionRows({
|
|
8914
|
+
identity: identityDecision.name,
|
|
8915
|
+
identitySource: identityDecision.source,
|
|
8916
|
+
pool: poolPick,
|
|
8917
|
+
profile: configProfileDecision.name === void 0 ? void 0 : { name: configProfileDecision.name, source: configProfileDecision.source },
|
|
8918
|
+
provider: resolvedProvider === void 0 ? void 0 : { name: resolvedProvider.name, credential: `${resolvedProvider.credential.target} from ${describeSource(resolvedProvider.credential.source)}` },
|
|
8919
|
+
identityCredential: identityCredential === void 0 ? void 0 : `${identityCredential.target} from ${describeSource(identityCredential.source)}`
|
|
8920
|
+
})
|
|
8921
|
+
];
|
|
8922
|
+
let warnings = [];
|
|
8819
8923
|
const updateCheck = runLaunchUpdateCheck({
|
|
8820
8924
|
mode: params.updateMode ?? "off",
|
|
8821
8925
|
checkPath: path39.join(paths.root, "update.check"),
|
|
@@ -8850,15 +8954,13 @@ function prepareLaunch(params) {
|
|
|
8850
8954
|
}
|
|
8851
8955
|
throw error;
|
|
8852
8956
|
}
|
|
8853
|
-
|
|
8957
|
+
warnings = diagnosticLines(result.diagnostics);
|
|
8854
8958
|
if (!result.noOp) {
|
|
8855
|
-
|
|
8856
|
-
`agent-shim: farm at ${result.farmRoot} resynced (${String(result.manifest.links.length)} link(s), ${String(result.manifest.materialised.length)} built director(ies)${result.adopted.length === 0 ? "" : `, ${String(result.adopted.length)} adopted into ${resyncFarmRuntime.claudeHome}`})`
|
|
8857
|
-
);
|
|
8959
|
+
rows.push(farmRow(result.manifest.links.length, result.manifest.materialised.length, result.adopted.length));
|
|
8858
8960
|
}
|
|
8859
8961
|
}
|
|
8860
8962
|
if (decided.pinnedVersion !== void 0) {
|
|
8861
|
-
|
|
8963
|
+
rows.push(pinnedVersionRow(decided.pinnedVersion.version, decided.pinnedVersion.source));
|
|
8862
8964
|
}
|
|
8863
8965
|
const frontDoorPort = params.frontdoor;
|
|
8864
8966
|
const frontDoorEngaged = resolvedProvider !== void 0 || resolvedFlags.headroom || resolvedFlags.trackUsage;
|
|
@@ -8874,14 +8976,11 @@ function prepareLaunch(params) {
|
|
|
8874
8976
|
const headroomPort = params.headroom;
|
|
8875
8977
|
if (resolvedFlags.headroom && headroomPort !== void 0) {
|
|
8876
8978
|
headroom = headroomPort.ensure({ routesProvider: resolvedProvider !== void 0 });
|
|
8877
|
-
const via = resolvedProvider === void 0 ? `OAuth via the door's CONNECT surface on 127.0.0.1:${String(frontDoor?.connectPort ?? 0)}` : `provider ${resolvedProvider.name}`;
|
|
8878
|
-
log.info(`agent-shim: routing through the front door on 127.0.0.1:${String(frontDoor?.port ?? 0)} with headroom on unix socket ${headroom.socketPath} (${via}, project ${headroom.projectId})`);
|
|
8879
8979
|
} else if (resolvedFlags.headroom) {
|
|
8880
8980
|
log.error("agent-shim: headroom routing was requested but this launcher has no headroom port wired; refusing to launch without it.");
|
|
8881
8981
|
proc.exit(1);
|
|
8882
|
-
} else if (frontDoor !== void 0) {
|
|
8883
|
-
log.info(`agent-shim: routing through the front door on 127.0.0.1:${String(frontDoor.port)}${resolvedProvider === void 0 ? ` (OAuth via the door's CONNECT surface on 127.0.0.1:${String(frontDoor.connectPort)}, usage recorded)` : ` (provider ${resolvedProvider.name})`}`);
|
|
8884
8982
|
}
|
|
8983
|
+
rows.push(...routingRows({ frontDoor, headroom, provider: resolvedProvider !== void 0 }));
|
|
8885
8984
|
const frontDoorRelease = frontDoor === void 0 ? void 0 : frontDoorPort?.release;
|
|
8886
8985
|
const sessionId = params.supervised?.sessionId ?? randomUUID4();
|
|
8887
8986
|
const finalEnv = buildEnv({
|
|
@@ -8902,6 +9001,9 @@ function prepareLaunch(params) {
|
|
|
8902
9001
|
registered();
|
|
8903
9002
|
}
|
|
8904
9003
|
};
|
|
9004
|
+
rows.push(...notes.map(noteRow));
|
|
9005
|
+
log.report(rows);
|
|
9006
|
+
printDiagnosticLines(log, warnings, { errorsAsWarnings: false });
|
|
8905
9007
|
const hold = () => holdBeforeLaunch({ delayMs: resolvedFlags.delayMs, pause: resolvedFlags.pause }, params.hold, log);
|
|
8906
9008
|
return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, hold, decision };
|
|
8907
9009
|
}
|
|
@@ -8967,6 +9069,7 @@ var init_launcher = __esm({
|
|
|
8967
9069
|
init_claudeSession();
|
|
8968
9070
|
init_diagnostics();
|
|
8969
9071
|
init_hold();
|
|
9072
|
+
init_launchReport();
|
|
8970
9073
|
init_modelPicker();
|
|
8971
9074
|
init_providerCatalogue();
|
|
8972
9075
|
init_pool();
|
|
@@ -9193,6 +9296,7 @@ function prepareClaudeLaunch(options) {
|
|
|
9193
9296
|
const refusals = [];
|
|
9194
9297
|
const log = {
|
|
9195
9298
|
info: () => void 0,
|
|
9299
|
+
report: () => void 0,
|
|
9196
9300
|
warn: () => void 0,
|
|
9197
9301
|
error: (message) => {
|
|
9198
9302
|
refusals.push(message);
|
|
@@ -9214,6 +9318,7 @@ function resolveClaudeLaunch(options) {
|
|
|
9214
9318
|
const warnings = [];
|
|
9215
9319
|
const log = {
|
|
9216
9320
|
info: () => void 0,
|
|
9321
|
+
report: () => void 0,
|
|
9217
9322
|
warn: (message) => {
|
|
9218
9323
|
warnings.push(message);
|
|
9219
9324
|
},
|
|
@@ -9419,6 +9524,7 @@ async function withIdentityClaude(params, identity, flags, use) {
|
|
|
9419
9524
|
},
|
|
9420
9525
|
log: {
|
|
9421
9526
|
info: () => void 0,
|
|
9527
|
+
report: () => void 0,
|
|
9422
9528
|
warn: () => void 0,
|
|
9423
9529
|
error: (message) => {
|
|
9424
9530
|
refusals.push(message);
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2390,9 +2390,22 @@ interface ProcPort {
|
|
|
2390
2390
|
readonly argv: readonly string[];
|
|
2391
2391
|
readonly exit: (code: number) => never;
|
|
2392
2392
|
}
|
|
2393
|
+
/** One fact the launcher reports about the launch it is about to start. */
|
|
2394
|
+
interface ReportRow {
|
|
2395
|
+
/** What the fact is about (`identity`, `routing`), in a column of its own. */
|
|
2396
|
+
readonly label: string;
|
|
2397
|
+
/** The fact itself. */
|
|
2398
|
+
readonly value: string;
|
|
2399
|
+
/** What qualifies the value, after it and dimmed: where it came from, or how it was reached. */
|
|
2400
|
+
readonly detail?: string;
|
|
2401
|
+
/** Further lines under the row, lined up under its value and dimmed. */
|
|
2402
|
+
readonly notes?: readonly string[];
|
|
2403
|
+
}
|
|
2393
2404
|
/** Where the launcher reports what it decided and why — refusals, warnings about an identity that could not be loaded, and (per the "strictly-better than the legacy script" goal) which identity/profile ended up selected. */
|
|
2394
2405
|
interface LogPort {
|
|
2395
2406
|
readonly info: (message: string) => void;
|
|
2407
|
+
/** Prints the facts a launch reports about itself as one block, with the formatting the output takes. */
|
|
2408
|
+
readonly report: (rows: readonly ReportRow[]) => void;
|
|
2396
2409
|
readonly warn: (message: string) => void;
|
|
2397
2410
|
readonly error: (message: string) => void;
|
|
2398
2411
|
}
|
|
@@ -5878,7 +5891,6 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
5878
5891
|
kind: zod.ZodLiteral<"profile">;
|
|
5879
5892
|
name: zod.ZodString;
|
|
5880
5893
|
value: zod.ZodObject<{
|
|
5881
|
-
description: zod.ZodOptional<zod.ZodString>;
|
|
5882
5894
|
entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
|
|
5883
5895
|
value: zod.ZodBoolean;
|
|
5884
5896
|
when: zod.ZodUnion<readonly [zod.ZodObject<{
|
|
@@ -5954,6 +5966,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
5954
5966
|
key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
|
|
5955
5967
|
}, zod_v4_core.$strip>], "kind">]>;
|
|
5956
5968
|
}, zod_v4_core.$strict>]>>>;
|
|
5969
|
+
description: zod.ZodOptional<zod.ZodString>;
|
|
5957
5970
|
extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
|
|
5958
5971
|
categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
|
|
5959
5972
|
all: zod.ZodOptional<zod.ZodBoolean>;
|
|
@@ -6001,7 +6014,6 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
6001
6014
|
kind: zod.ZodLiteral<"profile">;
|
|
6002
6015
|
name: zod.ZodString;
|
|
6003
6016
|
value: zod.ZodObject<{
|
|
6004
|
-
description: zod.ZodOptional<zod.ZodString>;
|
|
6005
6017
|
entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
|
|
6006
6018
|
value: zod.ZodBoolean;
|
|
6007
6019
|
when: zod.ZodUnion<readonly [zod.ZodObject<{
|
|
@@ -6077,6 +6089,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
6077
6089
|
key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
|
|
6078
6090
|
}, zod_v4_core.$strip>], "kind">]>;
|
|
6079
6091
|
}, zod_v4_core.$strict>]>>>;
|
|
6092
|
+
description: zod.ZodOptional<zod.ZodString>;
|
|
6080
6093
|
extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
|
|
6081
6094
|
categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
|
|
6082
6095
|
all: zod.ZodOptional<zod.ZodBoolean>;
|
|
@@ -7385,7 +7398,7 @@ interface LaunchPlan {
|
|
|
7385
7398
|
readonly sessionId: string;
|
|
7386
7399
|
/** Releases the daemon session registrations this launch holds. Call it when the child has exited; it is safe to call more than once. */
|
|
7387
7400
|
readonly release: () => void;
|
|
7388
|
-
/** What the launch resolved to, as data: the facts the launcher's
|
|
7401
|
+
/** What the launch resolved to, as data: the facts the launcher's report states. */
|
|
7389
7402
|
readonly decision: LaunchDecision;
|
|
7390
7403
|
/** Marks the moment this plan's child is spawned: the launch-time update check suppresses its notify line from then on, since a line printed after the child took over the terminal would land mid-session. Call it immediately before spawning; it is safe to call more than once. */
|
|
7391
7404
|
readonly markChildStarted: () => void;
|
|
@@ -8900,7 +8913,6 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
8900
8913
|
kind: zod.ZodLiteral<"profile">;
|
|
8901
8914
|
name: zod.ZodString;
|
|
8902
8915
|
value: zod.ZodObject<{
|
|
8903
|
-
description: zod.ZodOptional<zod.ZodString>;
|
|
8904
8916
|
entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
|
|
8905
8917
|
value: zod.ZodBoolean;
|
|
8906
8918
|
when: zod.ZodUnion<readonly [zod.ZodObject<{
|
|
@@ -8976,6 +8988,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
8976
8988
|
key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
|
|
8977
8989
|
}, zod_v4_core.$strip>], "kind">]>;
|
|
8978
8990
|
}, zod_v4_core.$strict>]>>>;
|
|
8991
|
+
description: zod.ZodOptional<zod.ZodString>;
|
|
8979
8992
|
extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
|
|
8980
8993
|
categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
|
|
8981
8994
|
all: zod.ZodOptional<zod.ZodBoolean>;
|
|
@@ -9023,7 +9036,6 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
9023
9036
|
kind: zod.ZodLiteral<"profile">;
|
|
9024
9037
|
name: zod.ZodString;
|
|
9025
9038
|
value: zod.ZodObject<{
|
|
9026
|
-
description: zod.ZodOptional<zod.ZodString>;
|
|
9027
9039
|
entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
|
|
9028
9040
|
value: zod.ZodBoolean;
|
|
9029
9041
|
when: zod.ZodUnion<readonly [zod.ZodObject<{
|
|
@@ -9099,6 +9111,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
9099
9111
|
key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
|
|
9100
9112
|
}, zod_v4_core.$strip>], "kind">]>;
|
|
9101
9113
|
}, zod_v4_core.$strict>]>>>;
|
|
9114
|
+
description: zod.ZodOptional<zod.ZodString>;
|
|
9102
9115
|
extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
|
|
9103
9116
|
categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
|
|
9104
9117
|
all: zod.ZodOptional<zod.ZodBoolean>;
|
|
@@ -11037,7 +11050,6 @@ declare const ConfigProfileAddOutputSchema: z.ZodObject<{
|
|
|
11037
11050
|
kind: z.ZodLiteral<"profile">;
|
|
11038
11051
|
name: z.ZodString;
|
|
11039
11052
|
value: z.ZodObject<{
|
|
11040
|
-
description: z.ZodOptional<z.ZodString>;
|
|
11041
11053
|
entries: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
11042
11054
|
value: z.ZodBoolean;
|
|
11043
11055
|
when: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -11113,6 +11125,7 @@ declare const ConfigProfileAddOutputSchema: z.ZodObject<{
|
|
|
11113
11125
|
key: z.ZodType<trilean.JsonValue, unknown, z.core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
|
|
11114
11126
|
}, z.core.$strip>], "kind">]>;
|
|
11115
11127
|
}, z.core.$strict>]>>>;
|
|
11128
|
+
description: z.ZodOptional<z.ZodString>;
|
|
11116
11129
|
extends: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
11117
11130
|
categories: z.ZodOptional<z.ZodPipe<z.ZodObject<{
|
|
11118
11131
|
all: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -11162,7 +11175,6 @@ declare const ConfigProfileSetOutputSchema: z.ZodObject<{
|
|
|
11162
11175
|
kind: z.ZodLiteral<"profile">;
|
|
11163
11176
|
name: z.ZodString;
|
|
11164
11177
|
value: z.ZodObject<{
|
|
11165
|
-
description: z.ZodOptional<z.ZodString>;
|
|
11166
11178
|
entries: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
11167
11179
|
value: z.ZodBoolean;
|
|
11168
11180
|
when: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -11238,6 +11250,7 @@ declare const ConfigProfileSetOutputSchema: z.ZodObject<{
|
|
|
11238
11250
|
key: z.ZodType<trilean.JsonValue, unknown, z.core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
|
|
11239
11251
|
}, z.core.$strip>], "kind">]>;
|
|
11240
11252
|
}, z.core.$strict>]>>>;
|
|
11253
|
+
description: z.ZodOptional<z.ZodString>;
|
|
11241
11254
|
extends: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
11242
11255
|
categories: z.ZodOptional<z.ZodPipe<z.ZodObject<{
|
|
11243
11256
|
all: z.ZodOptional<z.ZodBoolean>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-use",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.29.0",
|
|
4
4
|
"description": "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Joseph Mearman <joseph@mearman.co.uk>",
|