claude-use 11.26.0 → 11.28.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/README.md +3 -1
- package/dist/cli.cjs +320 -142
- package/dist/index.cjs +224 -44
- package/dist/index.mjs +224 -44
- package/dist/types/index.d.ts +74 -6
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -56,7 +56,10 @@ var init_categories_default = __esm({
|
|
|
56
56
|
"usage-data",
|
|
57
57
|
"ide",
|
|
58
58
|
"cache",
|
|
59
|
-
"scheduled_tasks.lock"
|
|
59
|
+
"scheduled_tasks.lock",
|
|
60
|
+
"policy-limits.json*",
|
|
61
|
+
"remote-settings.json*",
|
|
62
|
+
"state"
|
|
60
63
|
],
|
|
61
64
|
history: [
|
|
62
65
|
"projects",
|
|
@@ -282,7 +285,11 @@ var init_schema = __esm({
|
|
|
282
285
|
headroom: import_zod.z.boolean().optional(),
|
|
283
286
|
trackUsage: import_zod.z.boolean().optional(),
|
|
284
287
|
/** The exact Claude Code version to run, as it is named in Claude Code's versions directory (`2.1.220`). A pin that is not installed fails the launch; it never falls back to the highest version. */
|
|
285
|
-
claudeVersion: import_zod.z.string().regex(NUMERIC_DOTTED_VERSION_RE, "must be an exact dotted-numeric Claude Code version such as 2.1.220").optional()
|
|
288
|
+
claudeVersion: import_zod.z.string().regex(NUMERIC_DOTTED_VERSION_RE, "must be an exact dotted-numeric Claude Code version such as 2.1.220").optional(),
|
|
289
|
+
/** How long the launcher waits after its own output before it starts claude, so that output can be read before Claude Code takes over the terminal (`5s`, `500ms`). Applies only when a terminal is watching. */
|
|
290
|
+
delay: import_zod.z.string().regex(DURATION_RE, "must be a duration such as 5s or 500ms").optional(),
|
|
291
|
+
/** Whether the launcher waits for a key press after its own output before it starts claude. Takes the place of `delay` when both are set. Applies only when a terminal is watching. */
|
|
292
|
+
pause: import_zod.z.boolean().optional()
|
|
286
293
|
});
|
|
287
294
|
CREDENTIAL_TARGETS = ["bearer", "apiKey", "oauthToken"];
|
|
288
295
|
PROVIDER_CREDENTIAL_TARGETS = ["bearer", "apiKey"];
|
|
@@ -1385,6 +1392,12 @@ function flattenLayers(layers, options) {
|
|
|
1385
1392
|
if (layer.launch.claudeVersion !== void 0) {
|
|
1386
1393
|
launch.claudeVersion = layer.launch.claudeVersion;
|
|
1387
1394
|
}
|
|
1395
|
+
if (layer.launch.delay !== void 0) {
|
|
1396
|
+
launch.delay = layer.launch.delay;
|
|
1397
|
+
}
|
|
1398
|
+
if (layer.launch.pause !== void 0) {
|
|
1399
|
+
launch.pause = layer.launch.pause;
|
|
1400
|
+
}
|
|
1388
1401
|
}
|
|
1389
1402
|
if (layer.entries === void 0) {
|
|
1390
1403
|
continue;
|
|
@@ -1483,6 +1496,12 @@ var init_flatten = __esm({
|
|
|
1483
1496
|
});
|
|
1484
1497
|
|
|
1485
1498
|
// src/resolve/decide.ts
|
|
1499
|
+
function unclassifiedEntryMessage(names) {
|
|
1500
|
+
const quoted = names.map((name) => `"${name}"`).join(", ");
|
|
1501
|
+
const subject = names.length === 1 ? `${quoted} is not` : `${String(names.length)} entries are not`;
|
|
1502
|
+
const excluded = names.length === 1 ? "it is excluded" : `they are excluded: ${quoted}`;
|
|
1503
|
+
return `${subject} in the category map, so ${excluded}. Run \`agent-shim configure\` to classify ${names.length === 1 ? "it" : "them"}, which records the answer in the local overlay without touching the shipped default map.`;
|
|
1504
|
+
}
|
|
1486
1505
|
function selectRule(relPath, flattened, context) {
|
|
1487
1506
|
const eliminated = [];
|
|
1488
1507
|
for (const rule of matchingRules(flattened, relPath)) {
|
|
@@ -1520,7 +1539,7 @@ function resolveEntry(relPath, params) {
|
|
|
1520
1539
|
diagnostics.push({
|
|
1521
1540
|
code: "UNCLASSIFIED_ENTRY",
|
|
1522
1541
|
severity: "warning",
|
|
1523
|
-
message:
|
|
1542
|
+
message: unclassifiedEntryMessage([head]),
|
|
1524
1543
|
subject: head
|
|
1525
1544
|
});
|
|
1526
1545
|
return { decision: { relPath, shared: false, via: "unclassified", category }, diagnostics };
|
|
@@ -2955,7 +2974,7 @@ var init_package = __esm({
|
|
|
2955
2974
|
"package.json"() {
|
|
2956
2975
|
package_default = {
|
|
2957
2976
|
name: "claude-use",
|
|
2958
|
-
version: "11.
|
|
2977
|
+
version: "11.28.0",
|
|
2959
2978
|
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.",
|
|
2960
2979
|
license: "MIT",
|
|
2961
2980
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -4121,6 +4140,40 @@ var init_supervisor = __esm({
|
|
|
4121
4140
|
}
|
|
4122
4141
|
});
|
|
4123
4142
|
|
|
4143
|
+
// src/logStyle.ts
|
|
4144
|
+
function styledDiagnostic(style, colour, line) {
|
|
4145
|
+
const lead = DIAGNOSTIC_LEAD.exec(line);
|
|
4146
|
+
if (lead === null) {
|
|
4147
|
+
return style([colour], line);
|
|
4148
|
+
}
|
|
4149
|
+
const [whole, prefix = "", code = "", separator = ""] = lead;
|
|
4150
|
+
return `${style([colour], prefix)}${style([colour, "bold"], code)}${style([colour], `${separator}${line.slice(whole.length)}`)}`;
|
|
4151
|
+
}
|
|
4152
|
+
function createLogPort(sinks, styleFor) {
|
|
4153
|
+
return {
|
|
4154
|
+
info: (message) => {
|
|
4155
|
+
sinks.out(styleFor.out(["dim"], message));
|
|
4156
|
+
},
|
|
4157
|
+
warn: (message) => {
|
|
4158
|
+
sinks.warn(styledDiagnostic(styleFor.err, "yellow", message));
|
|
4159
|
+
},
|
|
4160
|
+
error: (message) => {
|
|
4161
|
+
sinks.err(styledDiagnostic(styleFor.err, "red", message));
|
|
4162
|
+
}
|
|
4163
|
+
};
|
|
4164
|
+
}
|
|
4165
|
+
function styleTextFor(stream) {
|
|
4166
|
+
return (formats, text) => (0, import_node_util.styleText)([...formats], text, { stream });
|
|
4167
|
+
}
|
|
4168
|
+
var import_node_util, DIAGNOSTIC_LEAD;
|
|
4169
|
+
var init_logStyle = __esm({
|
|
4170
|
+
"src/logStyle.ts"() {
|
|
4171
|
+
"use strict";
|
|
4172
|
+
import_node_util = require("node:util");
|
|
4173
|
+
DIAGNOSTIC_LEAD = /^(agent-shim: )([A-Z][A-Z0-9_]*)(: )/;
|
|
4174
|
+
}
|
|
4175
|
+
});
|
|
4176
|
+
|
|
4124
4177
|
// src/realPorts.ts
|
|
4125
4178
|
function isEnoent3(error) {
|
|
4126
4179
|
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
@@ -4359,7 +4412,7 @@ function realResolveClaudeBinary(isOwnBinary) {
|
|
|
4359
4412
|
function realInstalledClaudeVersions() {
|
|
4360
4413
|
return installedVersions(listVersionsDir(defaultVersionsDir()));
|
|
4361
4414
|
}
|
|
4362
|
-
var import_node_child_process2, import_node_crypto8, import_node_fs2, import_node_os2, import_node_path14, import_node_sea, realFsPort, OWNER_ONLY_DIR_MODE, OWNER_ONLY_FILE_MODE, PERMISSION_BITS, realFarmFs, INT32_BYTE_LENGTH, PS_TIMEOUT_MS, realRunPort, MACOS_GUI_SESSION_MANAGER, realCredentialPort, SOCKET_PERMISSION_BITS, realHeadroomSocketTrust, realSpawnPort, realProcPort, EXECUTE_BITS_MASK, WINDOWS_DEFAULT_PATHEXT;
|
|
4415
|
+
var import_node_child_process2, import_node_crypto8, import_node_fs2, import_node_os2, import_node_path14, import_node_sea, realFsPort, OWNER_ONLY_DIR_MODE, OWNER_ONLY_FILE_MODE, PERMISSION_BITS, realFarmFs, INT32_BYTE_LENGTH, KEY_POLL_MS, CTRL_C_BYTE, realHoldPort, PS_TIMEOUT_MS, realRunPort, MACOS_GUI_SESSION_MANAGER, realCredentialPort, SOCKET_PERMISSION_BITS, realHeadroomSocketTrust, realSpawnPort, realProcPort, realLogPort, EXECUTE_BITS_MASK, WINDOWS_DEFAULT_PATHEXT;
|
|
4363
4416
|
var init_realPorts = __esm({
|
|
4364
4417
|
"src/realPorts.ts"() {
|
|
4365
4418
|
"use strict";
|
|
@@ -4376,6 +4429,7 @@ var init_realPorts = __esm({
|
|
|
4376
4429
|
init_ensure();
|
|
4377
4430
|
init_supervisor();
|
|
4378
4431
|
init_state2();
|
|
4432
|
+
init_logStyle();
|
|
4379
4433
|
realFsPort = {
|
|
4380
4434
|
readFileUtf8(filePath) {
|
|
4381
4435
|
try {
|
|
@@ -4507,6 +4561,31 @@ var init_realPorts = __esm({
|
|
|
4507
4561
|
}
|
|
4508
4562
|
};
|
|
4509
4563
|
INT32_BYTE_LENGTH = 4;
|
|
4564
|
+
KEY_POLL_MS = 25;
|
|
4565
|
+
CTRL_C_BYTE = 3;
|
|
4566
|
+
realHoldPort = {
|
|
4567
|
+
attended: () => process.stdin.isTTY && process.stdout.isTTY,
|
|
4568
|
+
sleep: realSleepSync,
|
|
4569
|
+
waitForKey: () => {
|
|
4570
|
+
process.stdin.setRawMode(true);
|
|
4571
|
+
try {
|
|
4572
|
+
const buffer = Buffer.alloc(1);
|
|
4573
|
+
for (; ; ) {
|
|
4574
|
+
try {
|
|
4575
|
+
const read = import_node_fs2.default.readSync(process.stdin.fd, buffer, 0, buffer.length, null);
|
|
4576
|
+
return read > 0 && buffer[0] === CTRL_C_BYTE ? "interrupt" : "key";
|
|
4577
|
+
} catch (error) {
|
|
4578
|
+
if (!(error instanceof Error && "code" in error && error.code === "EAGAIN")) {
|
|
4579
|
+
throw error;
|
|
4580
|
+
}
|
|
4581
|
+
realSleepSync(KEY_POLL_MS);
|
|
4582
|
+
}
|
|
4583
|
+
}
|
|
4584
|
+
} finally {
|
|
4585
|
+
process.stdin.setRawMode(false);
|
|
4586
|
+
}
|
|
4587
|
+
}
|
|
4588
|
+
};
|
|
4510
4589
|
PS_TIMEOUT_MS = 2e3;
|
|
4511
4590
|
realRunPort = {
|
|
4512
4591
|
run(command, args) {
|
|
@@ -4581,6 +4660,16 @@ var init_realPorts = __esm({
|
|
|
4581
4660
|
argv: process.argv.slice(2),
|
|
4582
4661
|
exit: (code) => process.exit(code)
|
|
4583
4662
|
};
|
|
4663
|
+
realLogPort = createLogPort(
|
|
4664
|
+
{ out: (line) => {
|
|
4665
|
+
console.log(line);
|
|
4666
|
+
}, warn: (line) => {
|
|
4667
|
+
console.warn(line);
|
|
4668
|
+
}, err: (line) => {
|
|
4669
|
+
console.error(line);
|
|
4670
|
+
} },
|
|
4671
|
+
{ out: styleTextFor(process.stdout), err: styleTextFor(process.stderr) }
|
|
4672
|
+
);
|
|
4584
4673
|
EXECUTE_BITS_MASK = 73;
|
|
4585
4674
|
WINDOWS_DEFAULT_PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PS1";
|
|
4586
4675
|
}
|
|
@@ -7337,6 +7426,7 @@ function parseLauncherArgv(argv) {
|
|
|
7337
7426
|
let configProfile;
|
|
7338
7427
|
let provider;
|
|
7339
7428
|
let claudeVersion;
|
|
7429
|
+
let delay;
|
|
7340
7430
|
const booleans = {};
|
|
7341
7431
|
const categoryFlags = [];
|
|
7342
7432
|
const shareFlags = [];
|
|
@@ -7394,6 +7484,9 @@ function parseLauncherArgv(argv) {
|
|
|
7394
7484
|
case "--claude-version":
|
|
7395
7485
|
claudeVersion = value;
|
|
7396
7486
|
break;
|
|
7487
|
+
case "--delay":
|
|
7488
|
+
delay = value;
|
|
7489
|
+
break;
|
|
7397
7490
|
case "--category":
|
|
7398
7491
|
categoryFlags.push(value);
|
|
7399
7492
|
break;
|
|
@@ -7416,6 +7509,7 @@ function parseLauncherArgv(argv) {
|
|
|
7416
7509
|
...configProfile === void 0 ? {} : { configProfile },
|
|
7417
7510
|
...provider === void 0 ? {} : { provider },
|
|
7418
7511
|
...claudeVersion === void 0 ? {} : { claudeVersion },
|
|
7512
|
+
...delay === void 0 ? {} : { delay },
|
|
7419
7513
|
...native ? { native: true } : {},
|
|
7420
7514
|
...booleans,
|
|
7421
7515
|
categoryFlags,
|
|
@@ -7439,13 +7533,14 @@ var init_argv = __esm({
|
|
|
7439
7533
|
positional;
|
|
7440
7534
|
flag;
|
|
7441
7535
|
};
|
|
7442
|
-
VALUED_FLAGS = ["--identity", "--config-profile", "--provider", "--claude-version", "--category", "--share", "--hide"];
|
|
7536
|
+
VALUED_FLAGS = ["--identity", "--config-profile", "--provider", "--claude-version", "--delay", "--category", "--share", "--hide"];
|
|
7443
7537
|
BOOLEAN_FLAGS = [
|
|
7444
7538
|
{ flag: "--headroom", key: "headroom" },
|
|
7445
7539
|
{ flag: "--track-usage", key: "trackUsage" },
|
|
7446
7540
|
{ flag: "--skip-permissions", key: "skipPermissions" },
|
|
7447
7541
|
{ flag: "--remote-control", key: "remoteControl" },
|
|
7448
|
-
{ flag: "--wait", key: "wait" }
|
|
7542
|
+
{ flag: "--wait", key: "wait" },
|
|
7543
|
+
{ flag: "--pause", key: "pause" }
|
|
7449
7544
|
];
|
|
7450
7545
|
LAUNCHER_FLAG_NAMES = [
|
|
7451
7546
|
...VALUED_FLAGS,
|
|
@@ -7632,9 +7727,23 @@ function resolveLaunchFlags(params) {
|
|
|
7632
7727
|
skipPermissions: params.flags?.skipPermissions ?? parseEnvBool("AGENT_SHIM_SKIP_PERMISSIONS", params.env.AGENT_SHIM_SKIP_PERMISSIONS) ?? params.cascade?.skipPermissions ?? false,
|
|
7633
7728
|
remoteControl: params.flags?.remoteControl ?? parseEnvBool("AGENT_SHIM_REMOTE_CONTROL", params.env.AGENT_SHIM_REMOTE_CONTROL) ?? params.cascade?.remoteControl ?? false,
|
|
7634
7729
|
headroom: params.flags?.headroom ?? parseEnvBool("AGENT_SHIM_HEADROOM", params.env.AGENT_SHIM_HEADROOM) ?? params.cascade?.headroom ?? false,
|
|
7635
|
-
trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true
|
|
7730
|
+
trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true,
|
|
7731
|
+
pause: params.flags?.pause ?? parseEnvBool("AGENT_SHIM_PAUSE", params.env.AGENT_SHIM_PAUSE) ?? params.cascade?.pause ?? false,
|
|
7732
|
+
delayMs: resolveDelayMs(params)
|
|
7636
7733
|
};
|
|
7637
7734
|
}
|
|
7735
|
+
function resolveDelayMs(params) {
|
|
7736
|
+
const fromEnv = params.env.AGENT_SHIM_DELAY === "" ? void 0 : params.env.AGENT_SHIM_DELAY;
|
|
7737
|
+
const [literal, source] = params.flags?.delay !== void 0 ? [params.flags.delay, "--delay"] : fromEnv !== void 0 ? [fromEnv, "AGENT_SHIM_DELAY"] : [params.cascade?.delay, "launch.delay"];
|
|
7738
|
+
if (literal === void 0) {
|
|
7739
|
+
return 0;
|
|
7740
|
+
}
|
|
7741
|
+
try {
|
|
7742
|
+
return parseDuration(literal);
|
|
7743
|
+
} catch (error) {
|
|
7744
|
+
throw new UsageError(`${source}: ${error instanceof Error ? error.message : String(error)}`);
|
|
7745
|
+
}
|
|
7746
|
+
}
|
|
7638
7747
|
function buildFlagArgs(flags) {
|
|
7639
7748
|
const args = [];
|
|
7640
7749
|
if (flags.skipPermissions) {
|
|
@@ -7707,6 +7816,8 @@ var init_flags = __esm({
|
|
|
7707
7816
|
"use strict";
|
|
7708
7817
|
import_node_path36 = __toESM(require("node:path"), 1);
|
|
7709
7818
|
init_envBool();
|
|
7819
|
+
init_cliError();
|
|
7820
|
+
init_conditions();
|
|
7710
7821
|
init_credential();
|
|
7711
7822
|
init_headers();
|
|
7712
7823
|
init_capability();
|
|
@@ -7891,6 +8002,67 @@ var init_claudeSession = __esm({
|
|
|
7891
8002
|
}
|
|
7892
8003
|
});
|
|
7893
8004
|
|
|
8005
|
+
// src/launcher/diagnostics.ts
|
|
8006
|
+
function diagnosticLines(diagnostics) {
|
|
8007
|
+
const unclassified = [...new Set(diagnostics.filter((diagnostic) => diagnostic.code === "UNCLASSIFIED_ENTRY").map((diagnostic) => diagnostic.subject))];
|
|
8008
|
+
const lines = [];
|
|
8009
|
+
let unclassifiedReported = false;
|
|
8010
|
+
for (const diagnostic of diagnostics) {
|
|
8011
|
+
if (diagnostic.severity === "info") {
|
|
8012
|
+
continue;
|
|
8013
|
+
}
|
|
8014
|
+
if (diagnostic.code === "UNCLASSIFIED_ENTRY") {
|
|
8015
|
+
if (!unclassifiedReported) {
|
|
8016
|
+
unclassifiedReported = true;
|
|
8017
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${unclassifiedEntryMessage(unclassified.filter((name) => name !== void 0))}` });
|
|
8018
|
+
}
|
|
8019
|
+
continue;
|
|
8020
|
+
}
|
|
8021
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${diagnostic.message}` });
|
|
8022
|
+
}
|
|
8023
|
+
return lines;
|
|
8024
|
+
}
|
|
8025
|
+
function reportDiagnostics(log, diagnostics, options) {
|
|
8026
|
+
for (const line of diagnosticLines(diagnostics)) {
|
|
8027
|
+
if (line.severity === "error" && !options.errorsAsWarnings) {
|
|
8028
|
+
log.error(line.text);
|
|
8029
|
+
} else {
|
|
8030
|
+
log.warn(line.text);
|
|
8031
|
+
}
|
|
8032
|
+
}
|
|
8033
|
+
}
|
|
8034
|
+
var init_diagnostics = __esm({
|
|
8035
|
+
"src/launcher/diagnostics.ts"() {
|
|
8036
|
+
"use strict";
|
|
8037
|
+
init_decide();
|
|
8038
|
+
}
|
|
8039
|
+
});
|
|
8040
|
+
|
|
8041
|
+
// src/launcher/hold.ts
|
|
8042
|
+
function describeDelay(ms) {
|
|
8043
|
+
return ms % MS_PER_SECOND7 === 0 ? `${String(ms / MS_PER_SECOND7)}s` : `${String(ms)}ms`;
|
|
8044
|
+
}
|
|
8045
|
+
function holdBeforeLaunch(hold, port, log) {
|
|
8046
|
+
if (port === void 0 || !port.attended() || !hold.pause && hold.delayMs <= 0) {
|
|
8047
|
+
return "go";
|
|
8048
|
+
}
|
|
8049
|
+
if (hold.pause) {
|
|
8050
|
+
log.info("agent-shim: paused before launch; press any key to start, or Ctrl-C to cancel");
|
|
8051
|
+
return port.waitForKey() === "interrupt" ? "cancelled" : "go";
|
|
8052
|
+
}
|
|
8053
|
+
log.info(`agent-shim: starting in ${describeDelay(hold.delayMs)}`);
|
|
8054
|
+
port.sleep(hold.delayMs);
|
|
8055
|
+
return "go";
|
|
8056
|
+
}
|
|
8057
|
+
var LAUNCH_CANCELLED_EXIT, MS_PER_SECOND7;
|
|
8058
|
+
var init_hold = __esm({
|
|
8059
|
+
"src/launcher/hold.ts"() {
|
|
8060
|
+
"use strict";
|
|
8061
|
+
LAUNCH_CANCELLED_EXIT = 130;
|
|
8062
|
+
MS_PER_SECOND7 = 1e3;
|
|
8063
|
+
}
|
|
8064
|
+
});
|
|
8065
|
+
|
|
7894
8066
|
// src/antigravity/cloudUpstream.ts
|
|
7895
8067
|
var init_cloudUpstream = __esm({
|
|
7896
8068
|
"src/antigravity/cloudUpstream.ts"() {
|
|
@@ -8071,7 +8243,7 @@ function filterCatalogue(models, catalogue) {
|
|
|
8071
8243
|
const excluded = catalogue.exclude === void 0 ? void 0 : (0, import_picomatch4.default)(catalogue.exclude, { dot: true });
|
|
8072
8244
|
return models.filter((model) => included?.(model.id) !== false && excluded?.(model.id) !== true);
|
|
8073
8245
|
}
|
|
8074
|
-
var import_node_path38, import_picomatch4, import_zod30, DEFAULT_CANDIDATE_URLS,
|
|
8246
|
+
var import_node_path38, import_picomatch4, import_zod30, DEFAULT_CANDIDATE_URLS, MS_PER_SECOND8, SECONDS_PER_HOUR2, HOURS_PER_DAY5, MS_PER_HOUR5, HOURS_BETWEEN_RETRIES, CATALOGUE_MAX_AGE_MS, CATALOGUE_RETRY_MS, CATALOGUE_REQUEST_SECONDS, CATALOGUE_REQUEST_TIMEOUT_MS, CATALOGUE_REFRESH_TIMEOUT_MS, CatalogueModelSchema, CatalogueCacheSchema;
|
|
8075
8247
|
var init_providerCatalogue = __esm({
|
|
8076
8248
|
"src/providerCatalogue.ts"() {
|
|
8077
8249
|
"use strict";
|
|
@@ -8079,15 +8251,15 @@ var init_providerCatalogue = __esm({
|
|
|
8079
8251
|
import_picomatch4 = __toESM(require("picomatch"), 1);
|
|
8080
8252
|
import_zod30 = require("zod");
|
|
8081
8253
|
DEFAULT_CANDIDATE_URLS = 2;
|
|
8082
|
-
|
|
8254
|
+
MS_PER_SECOND8 = 1e3;
|
|
8083
8255
|
SECONDS_PER_HOUR2 = 3600;
|
|
8084
8256
|
HOURS_PER_DAY5 = 24;
|
|
8085
|
-
MS_PER_HOUR5 = SECONDS_PER_HOUR2 *
|
|
8257
|
+
MS_PER_HOUR5 = SECONDS_PER_HOUR2 * MS_PER_SECOND8;
|
|
8086
8258
|
HOURS_BETWEEN_RETRIES = 1;
|
|
8087
8259
|
CATALOGUE_MAX_AGE_MS = HOURS_PER_DAY5 * MS_PER_HOUR5;
|
|
8088
8260
|
CATALOGUE_RETRY_MS = HOURS_BETWEEN_RETRIES * MS_PER_HOUR5;
|
|
8089
8261
|
CATALOGUE_REQUEST_SECONDS = 10;
|
|
8090
|
-
CATALOGUE_REQUEST_TIMEOUT_MS = CATALOGUE_REQUEST_SECONDS *
|
|
8262
|
+
CATALOGUE_REQUEST_TIMEOUT_MS = CATALOGUE_REQUEST_SECONDS * MS_PER_SECOND8;
|
|
8091
8263
|
CATALOGUE_REFRESH_TIMEOUT_MS = DEFAULT_CANDIDATE_URLS * CATALOGUE_REQUEST_TIMEOUT_MS;
|
|
8092
8264
|
CatalogueModelSchema = import_zod30.z.strictObject({ id: import_zod30.z.string().min(1), name: import_zod30.z.string().min(1).optional() });
|
|
8093
8265
|
CatalogueCacheSchema = import_zod30.z.strictObject({ fetchedAt: import_zod30.z.number(), url: import_zod30.z.string().min(1), models: import_zod30.z.array(CatalogueModelSchema) });
|
|
@@ -8597,17 +8769,7 @@ function decideLaunch(params, readOnly) {
|
|
|
8597
8769
|
const flattened = flattenLayers(assembled.layers, { home: params.farm.home });
|
|
8598
8770
|
cascadeLaunch = flattened.launch;
|
|
8599
8771
|
if (readOnly || farmContext === void 0) {
|
|
8600
|
-
|
|
8601
|
-
if (diagnostic.severity === "info") {
|
|
8602
|
-
continue;
|
|
8603
|
-
}
|
|
8604
|
-
const message = `agent-shim: ${diagnostic.code}: ${diagnostic.message}`;
|
|
8605
|
-
if (diagnostic.severity === "error" && !readOnly) {
|
|
8606
|
-
log.error(message);
|
|
8607
|
-
} else {
|
|
8608
|
-
log.warn(message);
|
|
8609
|
-
}
|
|
8610
|
-
}
|
|
8772
|
+
reportDiagnostics(log, [...assembled.diagnostics, ...flattened.diagnostics], { errorsAsWarnings: readOnly });
|
|
8611
8773
|
}
|
|
8612
8774
|
}
|
|
8613
8775
|
const pinnedVersion = resolveClaudeVersion({ env, ...parsedArgv.claudeVersion === void 0 ? {} : { flag: parsedArgv.claudeVersion }, ...cascadeLaunch?.claudeVersion === void 0 ? {} : { cascade: cascadeLaunch.claudeVersion } });
|
|
@@ -8619,7 +8781,9 @@ function decideLaunch(params, readOnly) {
|
|
|
8619
8781
|
...parsedArgv.skipPermissions === void 0 ? {} : { skipPermissions: parsedArgv.skipPermissions },
|
|
8620
8782
|
...parsedArgv.remoteControl === void 0 ? {} : { remoteControl: parsedArgv.remoteControl },
|
|
8621
8783
|
...parsedArgv.headroom === void 0 ? {} : { headroom: parsedArgv.headroom },
|
|
8622
|
-
...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage }
|
|
8784
|
+
...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage },
|
|
8785
|
+
...parsedArgv.pause === void 0 ? {} : { pause: parsedArgv.pause },
|
|
8786
|
+
...parsedArgv.delay === void 0 ? {} : { delay: parsedArgv.delay }
|
|
8623
8787
|
}
|
|
8624
8788
|
});
|
|
8625
8789
|
const loginlessProvider = requestedFlags.remoteControl && selectedProvider !== void 0 && farmIdentity !== void 0 && params.hasStoredLogin?.(farmIdentity) === false ? { identity: farmIdentity, provider: selectedProvider.name } : void 0;
|
|
@@ -8712,16 +8876,12 @@ function prepareLaunch(params) {
|
|
|
8712
8876
|
}
|
|
8713
8877
|
throw error;
|
|
8714
8878
|
}
|
|
8715
|
-
|
|
8716
|
-
|
|
8717
|
-
|
|
8718
|
-
|
|
8719
|
-
|
|
8720
|
-
}
|
|
8879
|
+
reportDiagnostics(log, result.diagnostics, { errorsAsWarnings: false });
|
|
8880
|
+
if (!result.noOp) {
|
|
8881
|
+
log.info(
|
|
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
|
+
);
|
|
8721
8884
|
}
|
|
8722
|
-
log.info(
|
|
8723
|
-
result.noOp ? `agent-shim: farm at ${result.farmRoot} already matches the resolved cascade` : `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}`})`
|
|
8724
|
-
);
|
|
8725
8885
|
}
|
|
8726
8886
|
if (decided.pinnedVersion !== void 0) {
|
|
8727
8887
|
log.info(`agent-shim: Claude Code ${decided.pinnedVersion.version} (pinned by ${decided.pinnedVersion.source})`);
|
|
@@ -8768,7 +8928,8 @@ function prepareLaunch(params) {
|
|
|
8768
8928
|
registered();
|
|
8769
8929
|
}
|
|
8770
8930
|
};
|
|
8771
|
-
|
|
8931
|
+
const hold = () => holdBeforeLaunch({ delayMs: resolvedFlags.delayMs, pause: resolvedFlags.pause }, params.hold, log);
|
|
8932
|
+
return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, hold, decision };
|
|
8772
8933
|
}
|
|
8773
8934
|
function resolveLaunch(params) {
|
|
8774
8935
|
const decided = decideLaunch(params, true);
|
|
@@ -8801,6 +8962,9 @@ function resolveLaunch(params) {
|
|
|
8801
8962
|
}
|
|
8802
8963
|
function runLaunchPlan(plan, spawn3) {
|
|
8803
8964
|
try {
|
|
8965
|
+
if (plan.hold() === "cancelled") {
|
|
8966
|
+
return LAUNCH_CANCELLED_EXIT;
|
|
8967
|
+
}
|
|
8804
8968
|
plan.markChildStarted();
|
|
8805
8969
|
const result = spawn3.spawnSync(plan.bin, plan.args, { stdio: "inherit", env: plan.env });
|
|
8806
8970
|
if (result.error !== void 0) {
|
|
@@ -8830,6 +8994,8 @@ var init_launcher = __esm({
|
|
|
8830
8994
|
init_flags();
|
|
8831
8995
|
init_extraFlags();
|
|
8832
8996
|
init_claudeSession();
|
|
8997
|
+
init_diagnostics();
|
|
8998
|
+
init_hold();
|
|
8833
8999
|
init_modelPicker();
|
|
8834
9000
|
init_providerCatalogue();
|
|
8835
9001
|
init_pool();
|
|
@@ -9035,6 +9201,7 @@ function realPrepareLaunchParams(paths, options) {
|
|
|
9035
9201
|
headroom: realHeadroomPort(paths, { spawnDaemon: options.spawnDaemon, cwd: farm.runtime.cwd }),
|
|
9036
9202
|
frontdoor: realFrontDoorPort(paths, options.spawnDaemon),
|
|
9037
9203
|
credentials: { ...realCredentialPort, cache: realCredentialCacheEnv(paths) },
|
|
9204
|
+
hold: realHoldPort,
|
|
9038
9205
|
hasStoredLogin: (identity) => identitySignIn(realFarmFs, { platform: process.platform, run: realRunPort }, { farmRoot: import_node_path42.default.join(paths.identitiesDir, identity), hasCredentialBlock: false }).state !== "signed-out",
|
|
9039
9206
|
...farm.directoryIdentity === void 0 ? {} : { directoryPinnedIdentity: farm.directoryIdentity },
|
|
9040
9207
|
...farm.directoryConfigProfile === void 0 ? {} : { directoryRuleConfigProfile: farm.directoryConfigProfile },
|
|
@@ -9313,14 +9480,14 @@ var init_identityClaude = __esm({
|
|
|
9313
9480
|
});
|
|
9314
9481
|
|
|
9315
9482
|
// src/usage/providerQuota.ts
|
|
9316
|
-
var import_zod31,
|
|
9483
|
+
var import_zod31, MS_PER_SECOND9, SECONDS_PER_HOUR3, HOURS_PER_DAY6, DAYS_PER_MONTH, ZAI_HOST, ZAI_QUOTA_URL, ZAI_UNIT_HOURS, ZAI_UNIT_MONTHS, ZAI_UNIT_MS, ZaiLimitSchema, ZaiResponseSchema, OPENROUTER_HOST, OPENROUTER_KEY_URL, OPENROUTER_CREDITS_URL, MS_PER_DAY3, OpenRouterKeySchema, OpenRouterCreditsSchema, ANTIGRAVITY_HOST, ANTIGRAVITY_QUOTA_URL, ANTIGRAVITY_USER_URL, FIVE_HOURS2, DAYS_PER_WEEK2, FIVE_HOURS_MS, WEEK_MS, AntigravityBucketSchema, AntigravitySummarySchema, GoogleTokenInfoSchema, AntigravityUserSchema;
|
|
9317
9484
|
var init_providerQuota = __esm({
|
|
9318
9485
|
"src/usage/providerQuota.ts"() {
|
|
9319
9486
|
"use strict";
|
|
9320
9487
|
import_zod31 = require("zod");
|
|
9321
9488
|
init_cloudUpstream();
|
|
9322
9489
|
init_schema2();
|
|
9323
|
-
|
|
9490
|
+
MS_PER_SECOND9 = 1e3;
|
|
9324
9491
|
SECONDS_PER_HOUR3 = 3600;
|
|
9325
9492
|
HOURS_PER_DAY6 = 24;
|
|
9326
9493
|
DAYS_PER_MONTH = 30;
|
|
@@ -9329,8 +9496,8 @@ var init_providerQuota = __esm({
|
|
|
9329
9496
|
ZAI_UNIT_HOURS = 3;
|
|
9330
9497
|
ZAI_UNIT_MONTHS = 5;
|
|
9331
9498
|
ZAI_UNIT_MS = /* @__PURE__ */ new Map([
|
|
9332
|
-
[ZAI_UNIT_HOURS, SECONDS_PER_HOUR3 *
|
|
9333
|
-
[ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 *
|
|
9499
|
+
[ZAI_UNIT_HOURS, SECONDS_PER_HOUR3 * MS_PER_SECOND9],
|
|
9500
|
+
[ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9]
|
|
9334
9501
|
]);
|
|
9335
9502
|
ZaiLimitSchema = import_zod31.z.object({
|
|
9336
9503
|
type: import_zod31.z.string(),
|
|
@@ -9350,7 +9517,7 @@ var init_providerQuota = __esm({
|
|
|
9350
9517
|
OPENROUTER_HOST = "openrouter.ai";
|
|
9351
9518
|
OPENROUTER_KEY_URL = `https://${OPENROUTER_HOST}/api/v1/key`;
|
|
9352
9519
|
OPENROUTER_CREDITS_URL = `https://${OPENROUTER_HOST}/api/v1/credits`;
|
|
9353
|
-
MS_PER_DAY3 = HOURS_PER_DAY6 * SECONDS_PER_HOUR3 *
|
|
9520
|
+
MS_PER_DAY3 = HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
|
|
9354
9521
|
OpenRouterKeySchema = import_zod31.z.object({
|
|
9355
9522
|
data: import_zod31.z.object({
|
|
9356
9523
|
limit: import_zod31.z.number().nonnegative().nullable(),
|
|
@@ -9366,8 +9533,8 @@ var init_providerQuota = __esm({
|
|
|
9366
9533
|
ANTIGRAVITY_USER_URL = `https://${ANTIGRAVITY_HOST}/v1internal:loadCodeAssist`;
|
|
9367
9534
|
FIVE_HOURS2 = 5;
|
|
9368
9535
|
DAYS_PER_WEEK2 = 7;
|
|
9369
|
-
FIVE_HOURS_MS = FIVE_HOURS2 * SECONDS_PER_HOUR3 *
|
|
9370
|
-
WEEK_MS = DAYS_PER_WEEK2 * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 *
|
|
9536
|
+
FIVE_HOURS_MS = FIVE_HOURS2 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
|
|
9537
|
+
WEEK_MS = DAYS_PER_WEEK2 * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
|
|
9371
9538
|
AntigravityBucketSchema = import_zod31.z.object({
|
|
9372
9539
|
bucketId: import_zod31.z.string(),
|
|
9373
9540
|
remainingFraction: import_zod31.z.number().optional(),
|
|
@@ -13670,6 +13837,12 @@ function applyProfileChange(paths, name, change) {
|
|
|
13670
13837
|
if (change.launchClaudeVersion !== void 0) {
|
|
13671
13838
|
launchPatch.claudeVersion = change.launchClaudeVersion === false ? void 0 : change.launchClaudeVersion;
|
|
13672
13839
|
}
|
|
13840
|
+
if (change.launchDelay !== void 0) {
|
|
13841
|
+
launchPatch.delay = change.launchDelay === false ? void 0 : change.launchDelay;
|
|
13842
|
+
}
|
|
13843
|
+
if (change.launchPause !== void 0) {
|
|
13844
|
+
launchPatch.pause = change.launchPause;
|
|
13845
|
+
}
|
|
13673
13846
|
if (Object.keys(launchPatch).length > 0) {
|
|
13674
13847
|
setProfileLaunchFlags(paths, name, launchPatch);
|
|
13675
13848
|
touched = true;
|
|
@@ -15885,7 +16058,9 @@ var ConfigProfileSetInputSchema = import_zod24.z.strictObject({
|
|
|
15885
16058
|
headroom: import_zod24.z.boolean().optional(),
|
|
15886
16059
|
trackUsage: import_zod24.z.boolean().optional(),
|
|
15887
16060
|
provider: import_zod24.z.union([import_zod24.z.string().min(1), import_zod24.z.literal(false)]).optional(),
|
|
15888
|
-
claudeVersion: import_zod24.z.union([import_zod24.z.string().min(1), import_zod24.z.literal(false)]).optional()
|
|
16061
|
+
claudeVersion: import_zod24.z.union([import_zod24.z.string().min(1), import_zod24.z.literal(false)]).optional(),
|
|
16062
|
+
delay: import_zod24.z.union([import_zod24.z.string().regex(DURATION_RE), import_zod24.z.literal(false)]).optional(),
|
|
16063
|
+
pause: import_zod24.z.boolean().optional()
|
|
15889
16064
|
}).optional()
|
|
15890
16065
|
});
|
|
15891
16066
|
var ConfigProfileSetOutputSchema = storedMutationOutput("profile", "updated", ProfileValueSchema);
|
|
@@ -16095,7 +16270,9 @@ function createConfigApiRouter(deps) {
|
|
|
16095
16270
|
...launch?.headroom === void 0 ? {} : { launchHeadroom: launch.headroom },
|
|
16096
16271
|
...launch?.trackUsage === void 0 ? {} : { launchTrackUsage: launch.trackUsage },
|
|
16097
16272
|
...launch?.provider === void 0 ? {} : { launchProvider: launch.provider },
|
|
16098
|
-
...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion }
|
|
16273
|
+
...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion },
|
|
16274
|
+
...launch?.delay === void 0 ? {} : { launchDelay: launch.delay },
|
|
16275
|
+
...launch?.pause === void 0 ? {} : { launchPause: launch.pause }
|
|
16099
16276
|
});
|
|
16100
16277
|
return { action: "updated", kind: "profile", name: input.name, value: profileValue(input.name, paths) };
|
|
16101
16278
|
})
|
|
@@ -16403,7 +16580,10 @@ var LaunchFlagsSchema = import_zod26.z.strictObject({
|
|
|
16403
16580
|
skipPermissions: import_zod26.z.boolean(),
|
|
16404
16581
|
remoteControl: import_zod26.z.boolean(),
|
|
16405
16582
|
headroom: import_zod26.z.boolean(),
|
|
16406
|
-
trackUsage: import_zod26.z.boolean()
|
|
16583
|
+
trackUsage: import_zod26.z.boolean(),
|
|
16584
|
+
pause: import_zod26.z.boolean(),
|
|
16585
|
+
/** How long the launch waits after its own output before it starts claude, in milliseconds. */
|
|
16586
|
+
delayMs: import_zod26.z.number()
|
|
16407
16587
|
});
|
|
16408
16588
|
var LaunchResolveOutputSchema = import_zod26.z.strictObject({
|
|
16409
16589
|
decision: LaunchDecisionSchema,
|