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.mjs
CHANGED
|
@@ -34,7 +34,10 @@ var init_categories_default = __esm({
|
|
|
34
34
|
"usage-data",
|
|
35
35
|
"ide",
|
|
36
36
|
"cache",
|
|
37
|
-
"scheduled_tasks.lock"
|
|
37
|
+
"scheduled_tasks.lock",
|
|
38
|
+
"policy-limits.json*",
|
|
39
|
+
"remote-settings.json*",
|
|
40
|
+
"state"
|
|
38
41
|
],
|
|
39
42
|
history: [
|
|
40
43
|
"projects",
|
|
@@ -260,7 +263,11 @@ var init_schema = __esm({
|
|
|
260
263
|
headroom: z.boolean().optional(),
|
|
261
264
|
trackUsage: z.boolean().optional(),
|
|
262
265
|
/** 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. */
|
|
263
|
-
claudeVersion: z.string().regex(NUMERIC_DOTTED_VERSION_RE, "must be an exact dotted-numeric Claude Code version such as 2.1.220").optional()
|
|
266
|
+
claudeVersion: z.string().regex(NUMERIC_DOTTED_VERSION_RE, "must be an exact dotted-numeric Claude Code version such as 2.1.220").optional(),
|
|
267
|
+
/** 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. */
|
|
268
|
+
delay: z.string().regex(DURATION_RE, "must be a duration such as 5s or 500ms").optional(),
|
|
269
|
+
/** 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. */
|
|
270
|
+
pause: z.boolean().optional()
|
|
264
271
|
});
|
|
265
272
|
CREDENTIAL_TARGETS = ["bearer", "apiKey", "oauthToken"];
|
|
266
273
|
PROVIDER_CREDENTIAL_TARGETS = ["bearer", "apiKey"];
|
|
@@ -1363,6 +1370,12 @@ function flattenLayers(layers, options) {
|
|
|
1363
1370
|
if (layer.launch.claudeVersion !== void 0) {
|
|
1364
1371
|
launch.claudeVersion = layer.launch.claudeVersion;
|
|
1365
1372
|
}
|
|
1373
|
+
if (layer.launch.delay !== void 0) {
|
|
1374
|
+
launch.delay = layer.launch.delay;
|
|
1375
|
+
}
|
|
1376
|
+
if (layer.launch.pause !== void 0) {
|
|
1377
|
+
launch.pause = layer.launch.pause;
|
|
1378
|
+
}
|
|
1366
1379
|
}
|
|
1367
1380
|
if (layer.entries === void 0) {
|
|
1368
1381
|
continue;
|
|
@@ -1461,6 +1474,12 @@ var init_flatten = __esm({
|
|
|
1461
1474
|
});
|
|
1462
1475
|
|
|
1463
1476
|
// src/resolve/decide.ts
|
|
1477
|
+
function unclassifiedEntryMessage(names) {
|
|
1478
|
+
const quoted = names.map((name) => `"${name}"`).join(", ");
|
|
1479
|
+
const subject = names.length === 1 ? `${quoted} is not` : `${String(names.length)} entries are not`;
|
|
1480
|
+
const excluded = names.length === 1 ? "it is excluded" : `they are excluded: ${quoted}`;
|
|
1481
|
+
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.`;
|
|
1482
|
+
}
|
|
1464
1483
|
function selectRule(relPath, flattened, context) {
|
|
1465
1484
|
const eliminated = [];
|
|
1466
1485
|
for (const rule of matchingRules(flattened, relPath)) {
|
|
@@ -1498,7 +1517,7 @@ function resolveEntry(relPath, params) {
|
|
|
1498
1517
|
diagnostics.push({
|
|
1499
1518
|
code: "UNCLASSIFIED_ENTRY",
|
|
1500
1519
|
severity: "warning",
|
|
1501
|
-
message:
|
|
1520
|
+
message: unclassifiedEntryMessage([head]),
|
|
1502
1521
|
subject: head
|
|
1503
1522
|
});
|
|
1504
1523
|
return { decision: { relPath, shared: false, via: "unclassified", category }, diagnostics };
|
|
@@ -2931,7 +2950,7 @@ var init_package = __esm({
|
|
|
2931
2950
|
"package.json"() {
|
|
2932
2951
|
package_default = {
|
|
2933
2952
|
name: "claude-use",
|
|
2934
|
-
version: "11.
|
|
2953
|
+
version: "11.28.0",
|
|
2935
2954
|
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.",
|
|
2936
2955
|
license: "MIT",
|
|
2937
2956
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -4096,6 +4115,40 @@ var init_supervisor = __esm({
|
|
|
4096
4115
|
}
|
|
4097
4116
|
});
|
|
4098
4117
|
|
|
4118
|
+
// src/logStyle.ts
|
|
4119
|
+
import { styleText } from "node:util";
|
|
4120
|
+
function styledDiagnostic(style, colour, line) {
|
|
4121
|
+
const lead = DIAGNOSTIC_LEAD.exec(line);
|
|
4122
|
+
if (lead === null) {
|
|
4123
|
+
return style([colour], line);
|
|
4124
|
+
}
|
|
4125
|
+
const [whole, prefix = "", code = "", separator = ""] = lead;
|
|
4126
|
+
return `${style([colour], prefix)}${style([colour, "bold"], code)}${style([colour], `${separator}${line.slice(whole.length)}`)}`;
|
|
4127
|
+
}
|
|
4128
|
+
function createLogPort(sinks, styleFor) {
|
|
4129
|
+
return {
|
|
4130
|
+
info: (message) => {
|
|
4131
|
+
sinks.out(styleFor.out(["dim"], message));
|
|
4132
|
+
},
|
|
4133
|
+
warn: (message) => {
|
|
4134
|
+
sinks.warn(styledDiagnostic(styleFor.err, "yellow", message));
|
|
4135
|
+
},
|
|
4136
|
+
error: (message) => {
|
|
4137
|
+
sinks.err(styledDiagnostic(styleFor.err, "red", message));
|
|
4138
|
+
}
|
|
4139
|
+
};
|
|
4140
|
+
}
|
|
4141
|
+
function styleTextFor(stream) {
|
|
4142
|
+
return (formats, text) => styleText([...formats], text, { stream });
|
|
4143
|
+
}
|
|
4144
|
+
var DIAGNOSTIC_LEAD;
|
|
4145
|
+
var init_logStyle = __esm({
|
|
4146
|
+
"src/logStyle.ts"() {
|
|
4147
|
+
"use strict";
|
|
4148
|
+
DIAGNOSTIC_LEAD = /^(agent-shim: )([A-Z][A-Z0-9_]*)(: )/;
|
|
4149
|
+
}
|
|
4150
|
+
});
|
|
4151
|
+
|
|
4099
4152
|
// src/realPorts.ts
|
|
4100
4153
|
import { spawn as spawn2, spawnSync } from "node:child_process";
|
|
4101
4154
|
import { createHash as createHash5 } from "node:crypto";
|
|
@@ -4340,7 +4393,7 @@ function realResolveClaudeBinary(isOwnBinary) {
|
|
|
4340
4393
|
function realInstalledClaudeVersions() {
|
|
4341
4394
|
return installedVersions(listVersionsDir(defaultVersionsDir()));
|
|
4342
4395
|
}
|
|
4343
|
-
var 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;
|
|
4396
|
+
var 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;
|
|
4344
4397
|
var init_realPorts = __esm({
|
|
4345
4398
|
"src/realPorts.ts"() {
|
|
4346
4399
|
"use strict";
|
|
@@ -4351,6 +4404,7 @@ var init_realPorts = __esm({
|
|
|
4351
4404
|
init_ensure();
|
|
4352
4405
|
init_supervisor();
|
|
4353
4406
|
init_state2();
|
|
4407
|
+
init_logStyle();
|
|
4354
4408
|
realFsPort = {
|
|
4355
4409
|
readFileUtf8(filePath) {
|
|
4356
4410
|
try {
|
|
@@ -4482,6 +4536,31 @@ var init_realPorts = __esm({
|
|
|
4482
4536
|
}
|
|
4483
4537
|
};
|
|
4484
4538
|
INT32_BYTE_LENGTH = 4;
|
|
4539
|
+
KEY_POLL_MS = 25;
|
|
4540
|
+
CTRL_C_BYTE = 3;
|
|
4541
|
+
realHoldPort = {
|
|
4542
|
+
attended: () => process.stdin.isTTY && process.stdout.isTTY,
|
|
4543
|
+
sleep: realSleepSync,
|
|
4544
|
+
waitForKey: () => {
|
|
4545
|
+
process.stdin.setRawMode(true);
|
|
4546
|
+
try {
|
|
4547
|
+
const buffer = Buffer.alloc(1);
|
|
4548
|
+
for (; ; ) {
|
|
4549
|
+
try {
|
|
4550
|
+
const read = fs3.readSync(process.stdin.fd, buffer, 0, buffer.length, null);
|
|
4551
|
+
return read > 0 && buffer[0] === CTRL_C_BYTE ? "interrupt" : "key";
|
|
4552
|
+
} catch (error) {
|
|
4553
|
+
if (!(error instanceof Error && "code" in error && error.code === "EAGAIN")) {
|
|
4554
|
+
throw error;
|
|
4555
|
+
}
|
|
4556
|
+
realSleepSync(KEY_POLL_MS);
|
|
4557
|
+
}
|
|
4558
|
+
}
|
|
4559
|
+
} finally {
|
|
4560
|
+
process.stdin.setRawMode(false);
|
|
4561
|
+
}
|
|
4562
|
+
}
|
|
4563
|
+
};
|
|
4485
4564
|
PS_TIMEOUT_MS = 2e3;
|
|
4486
4565
|
realRunPort = {
|
|
4487
4566
|
run(command, args) {
|
|
@@ -4556,6 +4635,16 @@ var init_realPorts = __esm({
|
|
|
4556
4635
|
argv: process.argv.slice(2),
|
|
4557
4636
|
exit: (code) => process.exit(code)
|
|
4558
4637
|
};
|
|
4638
|
+
realLogPort = createLogPort(
|
|
4639
|
+
{ out: (line) => {
|
|
4640
|
+
console.log(line);
|
|
4641
|
+
}, warn: (line) => {
|
|
4642
|
+
console.warn(line);
|
|
4643
|
+
}, err: (line) => {
|
|
4644
|
+
console.error(line);
|
|
4645
|
+
} },
|
|
4646
|
+
{ out: styleTextFor(process.stdout), err: styleTextFor(process.stderr) }
|
|
4647
|
+
);
|
|
4559
4648
|
EXECUTE_BITS_MASK = 73;
|
|
4560
4649
|
WINDOWS_DEFAULT_PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PS1";
|
|
4561
4650
|
}
|
|
@@ -7310,6 +7399,7 @@ function parseLauncherArgv(argv) {
|
|
|
7310
7399
|
let configProfile;
|
|
7311
7400
|
let provider;
|
|
7312
7401
|
let claudeVersion;
|
|
7402
|
+
let delay;
|
|
7313
7403
|
const booleans = {};
|
|
7314
7404
|
const categoryFlags = [];
|
|
7315
7405
|
const shareFlags = [];
|
|
@@ -7367,6 +7457,9 @@ function parseLauncherArgv(argv) {
|
|
|
7367
7457
|
case "--claude-version":
|
|
7368
7458
|
claudeVersion = value;
|
|
7369
7459
|
break;
|
|
7460
|
+
case "--delay":
|
|
7461
|
+
delay = value;
|
|
7462
|
+
break;
|
|
7370
7463
|
case "--category":
|
|
7371
7464
|
categoryFlags.push(value);
|
|
7372
7465
|
break;
|
|
@@ -7389,6 +7482,7 @@ function parseLauncherArgv(argv) {
|
|
|
7389
7482
|
...configProfile === void 0 ? {} : { configProfile },
|
|
7390
7483
|
...provider === void 0 ? {} : { provider },
|
|
7391
7484
|
...claudeVersion === void 0 ? {} : { claudeVersion },
|
|
7485
|
+
...delay === void 0 ? {} : { delay },
|
|
7392
7486
|
...native ? { native: true } : {},
|
|
7393
7487
|
...booleans,
|
|
7394
7488
|
categoryFlags,
|
|
@@ -7412,13 +7506,14 @@ var init_argv = __esm({
|
|
|
7412
7506
|
positional;
|
|
7413
7507
|
flag;
|
|
7414
7508
|
};
|
|
7415
|
-
VALUED_FLAGS = ["--identity", "--config-profile", "--provider", "--claude-version", "--category", "--share", "--hide"];
|
|
7509
|
+
VALUED_FLAGS = ["--identity", "--config-profile", "--provider", "--claude-version", "--delay", "--category", "--share", "--hide"];
|
|
7416
7510
|
BOOLEAN_FLAGS = [
|
|
7417
7511
|
{ flag: "--headroom", key: "headroom" },
|
|
7418
7512
|
{ flag: "--track-usage", key: "trackUsage" },
|
|
7419
7513
|
{ flag: "--skip-permissions", key: "skipPermissions" },
|
|
7420
7514
|
{ flag: "--remote-control", key: "remoteControl" },
|
|
7421
|
-
{ flag: "--wait", key: "wait" }
|
|
7515
|
+
{ flag: "--wait", key: "wait" },
|
|
7516
|
+
{ flag: "--pause", key: "pause" }
|
|
7422
7517
|
];
|
|
7423
7518
|
LAUNCHER_FLAG_NAMES = [
|
|
7424
7519
|
...VALUED_FLAGS,
|
|
@@ -7606,9 +7701,23 @@ function resolveLaunchFlags(params) {
|
|
|
7606
7701
|
skipPermissions: params.flags?.skipPermissions ?? parseEnvBool("AGENT_SHIM_SKIP_PERMISSIONS", params.env.AGENT_SHIM_SKIP_PERMISSIONS) ?? params.cascade?.skipPermissions ?? false,
|
|
7607
7702
|
remoteControl: params.flags?.remoteControl ?? parseEnvBool("AGENT_SHIM_REMOTE_CONTROL", params.env.AGENT_SHIM_REMOTE_CONTROL) ?? params.cascade?.remoteControl ?? false,
|
|
7608
7703
|
headroom: params.flags?.headroom ?? parseEnvBool("AGENT_SHIM_HEADROOM", params.env.AGENT_SHIM_HEADROOM) ?? params.cascade?.headroom ?? false,
|
|
7609
|
-
trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true
|
|
7704
|
+
trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true,
|
|
7705
|
+
pause: params.flags?.pause ?? parseEnvBool("AGENT_SHIM_PAUSE", params.env.AGENT_SHIM_PAUSE) ?? params.cascade?.pause ?? false,
|
|
7706
|
+
delayMs: resolveDelayMs(params)
|
|
7610
7707
|
};
|
|
7611
7708
|
}
|
|
7709
|
+
function resolveDelayMs(params) {
|
|
7710
|
+
const fromEnv = params.env.AGENT_SHIM_DELAY === "" ? void 0 : params.env.AGENT_SHIM_DELAY;
|
|
7711
|
+
const [literal, source] = params.flags?.delay !== void 0 ? [params.flags.delay, "--delay"] : fromEnv !== void 0 ? [fromEnv, "AGENT_SHIM_DELAY"] : [params.cascade?.delay, "launch.delay"];
|
|
7712
|
+
if (literal === void 0) {
|
|
7713
|
+
return 0;
|
|
7714
|
+
}
|
|
7715
|
+
try {
|
|
7716
|
+
return parseDuration(literal);
|
|
7717
|
+
} catch (error) {
|
|
7718
|
+
throw new UsageError(`${source}: ${error instanceof Error ? error.message : String(error)}`);
|
|
7719
|
+
}
|
|
7720
|
+
}
|
|
7612
7721
|
function buildFlagArgs(flags) {
|
|
7613
7722
|
const args = [];
|
|
7614
7723
|
if (flags.skipPermissions) {
|
|
@@ -7680,6 +7789,8 @@ var init_flags = __esm({
|
|
|
7680
7789
|
"src/launcher/flags.ts"() {
|
|
7681
7790
|
"use strict";
|
|
7682
7791
|
init_envBool();
|
|
7792
|
+
init_cliError();
|
|
7793
|
+
init_conditions();
|
|
7683
7794
|
init_credential();
|
|
7684
7795
|
init_headers();
|
|
7685
7796
|
init_capability();
|
|
@@ -7863,6 +7974,67 @@ var init_claudeSession = __esm({
|
|
|
7863
7974
|
}
|
|
7864
7975
|
});
|
|
7865
7976
|
|
|
7977
|
+
// src/launcher/diagnostics.ts
|
|
7978
|
+
function diagnosticLines(diagnostics) {
|
|
7979
|
+
const unclassified = [...new Set(diagnostics.filter((diagnostic) => diagnostic.code === "UNCLASSIFIED_ENTRY").map((diagnostic) => diagnostic.subject))];
|
|
7980
|
+
const lines = [];
|
|
7981
|
+
let unclassifiedReported = false;
|
|
7982
|
+
for (const diagnostic of diagnostics) {
|
|
7983
|
+
if (diagnostic.severity === "info") {
|
|
7984
|
+
continue;
|
|
7985
|
+
}
|
|
7986
|
+
if (diagnostic.code === "UNCLASSIFIED_ENTRY") {
|
|
7987
|
+
if (!unclassifiedReported) {
|
|
7988
|
+
unclassifiedReported = true;
|
|
7989
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${unclassifiedEntryMessage(unclassified.filter((name) => name !== void 0))}` });
|
|
7990
|
+
}
|
|
7991
|
+
continue;
|
|
7992
|
+
}
|
|
7993
|
+
lines.push({ severity: diagnostic.severity, text: `agent-shim: ${diagnostic.code}: ${diagnostic.message}` });
|
|
7994
|
+
}
|
|
7995
|
+
return lines;
|
|
7996
|
+
}
|
|
7997
|
+
function reportDiagnostics(log, diagnostics, options) {
|
|
7998
|
+
for (const line of diagnosticLines(diagnostics)) {
|
|
7999
|
+
if (line.severity === "error" && !options.errorsAsWarnings) {
|
|
8000
|
+
log.error(line.text);
|
|
8001
|
+
} else {
|
|
8002
|
+
log.warn(line.text);
|
|
8003
|
+
}
|
|
8004
|
+
}
|
|
8005
|
+
}
|
|
8006
|
+
var init_diagnostics = __esm({
|
|
8007
|
+
"src/launcher/diagnostics.ts"() {
|
|
8008
|
+
"use strict";
|
|
8009
|
+
init_decide();
|
|
8010
|
+
}
|
|
8011
|
+
});
|
|
8012
|
+
|
|
8013
|
+
// src/launcher/hold.ts
|
|
8014
|
+
function describeDelay(ms) {
|
|
8015
|
+
return ms % MS_PER_SECOND7 === 0 ? `${String(ms / MS_PER_SECOND7)}s` : `${String(ms)}ms`;
|
|
8016
|
+
}
|
|
8017
|
+
function holdBeforeLaunch(hold, port, log) {
|
|
8018
|
+
if (port === void 0 || !port.attended() || !hold.pause && hold.delayMs <= 0) {
|
|
8019
|
+
return "go";
|
|
8020
|
+
}
|
|
8021
|
+
if (hold.pause) {
|
|
8022
|
+
log.info("agent-shim: paused before launch; press any key to start, or Ctrl-C to cancel");
|
|
8023
|
+
return port.waitForKey() === "interrupt" ? "cancelled" : "go";
|
|
8024
|
+
}
|
|
8025
|
+
log.info(`agent-shim: starting in ${describeDelay(hold.delayMs)}`);
|
|
8026
|
+
port.sleep(hold.delayMs);
|
|
8027
|
+
return "go";
|
|
8028
|
+
}
|
|
8029
|
+
var LAUNCH_CANCELLED_EXIT, MS_PER_SECOND7;
|
|
8030
|
+
var init_hold = __esm({
|
|
8031
|
+
"src/launcher/hold.ts"() {
|
|
8032
|
+
"use strict";
|
|
8033
|
+
LAUNCH_CANCELLED_EXIT = 130;
|
|
8034
|
+
MS_PER_SECOND7 = 1e3;
|
|
8035
|
+
}
|
|
8036
|
+
});
|
|
8037
|
+
|
|
7866
8038
|
// src/antigravity/cloudUpstream.ts
|
|
7867
8039
|
var init_cloudUpstream = __esm({
|
|
7868
8040
|
"src/antigravity/cloudUpstream.ts"() {
|
|
@@ -8046,20 +8218,20 @@ function filterCatalogue(models, catalogue) {
|
|
|
8046
8218
|
const excluded = catalogue.exclude === void 0 ? void 0 : picomatch4(catalogue.exclude, { dot: true });
|
|
8047
8219
|
return models.filter((model) => included?.(model.id) !== false && excluded?.(model.id) !== true);
|
|
8048
8220
|
}
|
|
8049
|
-
var DEFAULT_CANDIDATE_URLS,
|
|
8221
|
+
var 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;
|
|
8050
8222
|
var init_providerCatalogue = __esm({
|
|
8051
8223
|
"src/providerCatalogue.ts"() {
|
|
8052
8224
|
"use strict";
|
|
8053
8225
|
DEFAULT_CANDIDATE_URLS = 2;
|
|
8054
|
-
|
|
8226
|
+
MS_PER_SECOND8 = 1e3;
|
|
8055
8227
|
SECONDS_PER_HOUR2 = 3600;
|
|
8056
8228
|
HOURS_PER_DAY5 = 24;
|
|
8057
|
-
MS_PER_HOUR5 = SECONDS_PER_HOUR2 *
|
|
8229
|
+
MS_PER_HOUR5 = SECONDS_PER_HOUR2 * MS_PER_SECOND8;
|
|
8058
8230
|
HOURS_BETWEEN_RETRIES = 1;
|
|
8059
8231
|
CATALOGUE_MAX_AGE_MS = HOURS_PER_DAY5 * MS_PER_HOUR5;
|
|
8060
8232
|
CATALOGUE_RETRY_MS = HOURS_BETWEEN_RETRIES * MS_PER_HOUR5;
|
|
8061
8233
|
CATALOGUE_REQUEST_SECONDS = 10;
|
|
8062
|
-
CATALOGUE_REQUEST_TIMEOUT_MS = CATALOGUE_REQUEST_SECONDS *
|
|
8234
|
+
CATALOGUE_REQUEST_TIMEOUT_MS = CATALOGUE_REQUEST_SECONDS * MS_PER_SECOND8;
|
|
8063
8235
|
CATALOGUE_REFRESH_TIMEOUT_MS = DEFAULT_CANDIDATE_URLS * CATALOGUE_REQUEST_TIMEOUT_MS;
|
|
8064
8236
|
CatalogueModelSchema = z30.strictObject({ id: z30.string().min(1), name: z30.string().min(1).optional() });
|
|
8065
8237
|
CatalogueCacheSchema = z30.strictObject({ fetchedAt: z30.number(), url: z30.string().min(1), models: z30.array(CatalogueModelSchema) });
|
|
@@ -8571,17 +8743,7 @@ function decideLaunch(params, readOnly) {
|
|
|
8571
8743
|
const flattened = flattenLayers(assembled.layers, { home: params.farm.home });
|
|
8572
8744
|
cascadeLaunch = flattened.launch;
|
|
8573
8745
|
if (readOnly || farmContext === void 0) {
|
|
8574
|
-
|
|
8575
|
-
if (diagnostic.severity === "info") {
|
|
8576
|
-
continue;
|
|
8577
|
-
}
|
|
8578
|
-
const message = `agent-shim: ${diagnostic.code}: ${diagnostic.message}`;
|
|
8579
|
-
if (diagnostic.severity === "error" && !readOnly) {
|
|
8580
|
-
log.error(message);
|
|
8581
|
-
} else {
|
|
8582
|
-
log.warn(message);
|
|
8583
|
-
}
|
|
8584
|
-
}
|
|
8746
|
+
reportDiagnostics(log, [...assembled.diagnostics, ...flattened.diagnostics], { errorsAsWarnings: readOnly });
|
|
8585
8747
|
}
|
|
8586
8748
|
}
|
|
8587
8749
|
const pinnedVersion = resolveClaudeVersion({ env, ...parsedArgv.claudeVersion === void 0 ? {} : { flag: parsedArgv.claudeVersion }, ...cascadeLaunch?.claudeVersion === void 0 ? {} : { cascade: cascadeLaunch.claudeVersion } });
|
|
@@ -8593,7 +8755,9 @@ function decideLaunch(params, readOnly) {
|
|
|
8593
8755
|
...parsedArgv.skipPermissions === void 0 ? {} : { skipPermissions: parsedArgv.skipPermissions },
|
|
8594
8756
|
...parsedArgv.remoteControl === void 0 ? {} : { remoteControl: parsedArgv.remoteControl },
|
|
8595
8757
|
...parsedArgv.headroom === void 0 ? {} : { headroom: parsedArgv.headroom },
|
|
8596
|
-
...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage }
|
|
8758
|
+
...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage },
|
|
8759
|
+
...parsedArgv.pause === void 0 ? {} : { pause: parsedArgv.pause },
|
|
8760
|
+
...parsedArgv.delay === void 0 ? {} : { delay: parsedArgv.delay }
|
|
8597
8761
|
}
|
|
8598
8762
|
});
|
|
8599
8763
|
const loginlessProvider = requestedFlags.remoteControl && selectedProvider !== void 0 && farmIdentity !== void 0 && params.hasStoredLogin?.(farmIdentity) === false ? { identity: farmIdentity, provider: selectedProvider.name } : void 0;
|
|
@@ -8686,16 +8850,12 @@ function prepareLaunch(params) {
|
|
|
8686
8850
|
}
|
|
8687
8851
|
throw error;
|
|
8688
8852
|
}
|
|
8689
|
-
|
|
8690
|
-
|
|
8691
|
-
|
|
8692
|
-
|
|
8693
|
-
|
|
8694
|
-
}
|
|
8853
|
+
reportDiagnostics(log, result.diagnostics, { errorsAsWarnings: false });
|
|
8854
|
+
if (!result.noOp) {
|
|
8855
|
+
log.info(
|
|
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
|
+
);
|
|
8695
8858
|
}
|
|
8696
|
-
log.info(
|
|
8697
|
-
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}`})`
|
|
8698
|
-
);
|
|
8699
8859
|
}
|
|
8700
8860
|
if (decided.pinnedVersion !== void 0) {
|
|
8701
8861
|
log.info(`agent-shim: Claude Code ${decided.pinnedVersion.version} (pinned by ${decided.pinnedVersion.source})`);
|
|
@@ -8742,7 +8902,8 @@ function prepareLaunch(params) {
|
|
|
8742
8902
|
registered();
|
|
8743
8903
|
}
|
|
8744
8904
|
};
|
|
8745
|
-
|
|
8905
|
+
const hold = () => holdBeforeLaunch({ delayMs: resolvedFlags.delayMs, pause: resolvedFlags.pause }, params.hold, log);
|
|
8906
|
+
return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, hold, decision };
|
|
8746
8907
|
}
|
|
8747
8908
|
function resolveLaunch(params) {
|
|
8748
8909
|
const decided = decideLaunch(params, true);
|
|
@@ -8775,6 +8936,9 @@ function resolveLaunch(params) {
|
|
|
8775
8936
|
}
|
|
8776
8937
|
function runLaunchPlan(plan, spawn3) {
|
|
8777
8938
|
try {
|
|
8939
|
+
if (plan.hold() === "cancelled") {
|
|
8940
|
+
return LAUNCH_CANCELLED_EXIT;
|
|
8941
|
+
}
|
|
8778
8942
|
plan.markChildStarted();
|
|
8779
8943
|
const result = spawn3.spawnSync(plan.bin, plan.args, { stdio: "inherit", env: plan.env });
|
|
8780
8944
|
if (result.error !== void 0) {
|
|
@@ -8801,6 +8965,8 @@ var init_launcher = __esm({
|
|
|
8801
8965
|
init_flags();
|
|
8802
8966
|
init_extraFlags();
|
|
8803
8967
|
init_claudeSession();
|
|
8968
|
+
init_diagnostics();
|
|
8969
|
+
init_hold();
|
|
8804
8970
|
init_modelPicker();
|
|
8805
8971
|
init_providerCatalogue();
|
|
8806
8972
|
init_pool();
|
|
@@ -9009,6 +9175,7 @@ function realPrepareLaunchParams(paths, options) {
|
|
|
9009
9175
|
headroom: realHeadroomPort(paths, { spawnDaemon: options.spawnDaemon, cwd: farm.runtime.cwd }),
|
|
9010
9176
|
frontdoor: realFrontDoorPort(paths, options.spawnDaemon),
|
|
9011
9177
|
credentials: { ...realCredentialPort, cache: realCredentialCacheEnv(paths) },
|
|
9178
|
+
hold: realHoldPort,
|
|
9012
9179
|
hasStoredLogin: (identity) => identitySignIn(realFarmFs, { platform: process.platform, run: realRunPort }, { farmRoot: path42.join(paths.identitiesDir, identity), hasCredentialBlock: false }).state !== "signed-out",
|
|
9013
9180
|
...farm.directoryIdentity === void 0 ? {} : { directoryPinnedIdentity: farm.directoryIdentity },
|
|
9014
9181
|
...farm.directoryConfigProfile === void 0 ? {} : { directoryRuleConfigProfile: farm.directoryConfigProfile },
|
|
@@ -9285,13 +9452,13 @@ var init_identityClaude = __esm({
|
|
|
9285
9452
|
|
|
9286
9453
|
// src/usage/providerQuota.ts
|
|
9287
9454
|
import { z as z31 } from "zod";
|
|
9288
|
-
var
|
|
9455
|
+
var 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;
|
|
9289
9456
|
var init_providerQuota = __esm({
|
|
9290
9457
|
"src/usage/providerQuota.ts"() {
|
|
9291
9458
|
"use strict";
|
|
9292
9459
|
init_cloudUpstream();
|
|
9293
9460
|
init_schema2();
|
|
9294
|
-
|
|
9461
|
+
MS_PER_SECOND9 = 1e3;
|
|
9295
9462
|
SECONDS_PER_HOUR3 = 3600;
|
|
9296
9463
|
HOURS_PER_DAY6 = 24;
|
|
9297
9464
|
DAYS_PER_MONTH = 30;
|
|
@@ -9300,8 +9467,8 @@ var init_providerQuota = __esm({
|
|
|
9300
9467
|
ZAI_UNIT_HOURS = 3;
|
|
9301
9468
|
ZAI_UNIT_MONTHS = 5;
|
|
9302
9469
|
ZAI_UNIT_MS = /* @__PURE__ */ new Map([
|
|
9303
|
-
[ZAI_UNIT_HOURS, SECONDS_PER_HOUR3 *
|
|
9304
|
-
[ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 *
|
|
9470
|
+
[ZAI_UNIT_HOURS, SECONDS_PER_HOUR3 * MS_PER_SECOND9],
|
|
9471
|
+
[ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9]
|
|
9305
9472
|
]);
|
|
9306
9473
|
ZaiLimitSchema = z31.object({
|
|
9307
9474
|
type: z31.string(),
|
|
@@ -9321,7 +9488,7 @@ var init_providerQuota = __esm({
|
|
|
9321
9488
|
OPENROUTER_HOST = "openrouter.ai";
|
|
9322
9489
|
OPENROUTER_KEY_URL = `https://${OPENROUTER_HOST}/api/v1/key`;
|
|
9323
9490
|
OPENROUTER_CREDITS_URL = `https://${OPENROUTER_HOST}/api/v1/credits`;
|
|
9324
|
-
MS_PER_DAY3 = HOURS_PER_DAY6 * SECONDS_PER_HOUR3 *
|
|
9491
|
+
MS_PER_DAY3 = HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
|
|
9325
9492
|
OpenRouterKeySchema = z31.object({
|
|
9326
9493
|
data: z31.object({
|
|
9327
9494
|
limit: z31.number().nonnegative().nullable(),
|
|
@@ -9337,8 +9504,8 @@ var init_providerQuota = __esm({
|
|
|
9337
9504
|
ANTIGRAVITY_USER_URL = `https://${ANTIGRAVITY_HOST}/v1internal:loadCodeAssist`;
|
|
9338
9505
|
FIVE_HOURS2 = 5;
|
|
9339
9506
|
DAYS_PER_WEEK2 = 7;
|
|
9340
|
-
FIVE_HOURS_MS = FIVE_HOURS2 * SECONDS_PER_HOUR3 *
|
|
9341
|
-
WEEK_MS = DAYS_PER_WEEK2 * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 *
|
|
9507
|
+
FIVE_HOURS_MS = FIVE_HOURS2 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
|
|
9508
|
+
WEEK_MS = DAYS_PER_WEEK2 * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
|
|
9342
9509
|
AntigravityBucketSchema = z31.object({
|
|
9343
9510
|
bucketId: z31.string(),
|
|
9344
9511
|
remainingFraction: z31.number().optional(),
|
|
@@ -13257,6 +13424,12 @@ function applyProfileChange(paths, name, change) {
|
|
|
13257
13424
|
if (change.launchClaudeVersion !== void 0) {
|
|
13258
13425
|
launchPatch.claudeVersion = change.launchClaudeVersion === false ? void 0 : change.launchClaudeVersion;
|
|
13259
13426
|
}
|
|
13427
|
+
if (change.launchDelay !== void 0) {
|
|
13428
|
+
launchPatch.delay = change.launchDelay === false ? void 0 : change.launchDelay;
|
|
13429
|
+
}
|
|
13430
|
+
if (change.launchPause !== void 0) {
|
|
13431
|
+
launchPatch.pause = change.launchPause;
|
|
13432
|
+
}
|
|
13260
13433
|
if (Object.keys(launchPatch).length > 0) {
|
|
13261
13434
|
setProfileLaunchFlags(paths, name, launchPatch);
|
|
13262
13435
|
touched = true;
|
|
@@ -15472,7 +15645,9 @@ var ConfigProfileSetInputSchema = z24.strictObject({
|
|
|
15472
15645
|
headroom: z24.boolean().optional(),
|
|
15473
15646
|
trackUsage: z24.boolean().optional(),
|
|
15474
15647
|
provider: z24.union([z24.string().min(1), z24.literal(false)]).optional(),
|
|
15475
|
-
claudeVersion: z24.union([z24.string().min(1), z24.literal(false)]).optional()
|
|
15648
|
+
claudeVersion: z24.union([z24.string().min(1), z24.literal(false)]).optional(),
|
|
15649
|
+
delay: z24.union([z24.string().regex(DURATION_RE), z24.literal(false)]).optional(),
|
|
15650
|
+
pause: z24.boolean().optional()
|
|
15476
15651
|
}).optional()
|
|
15477
15652
|
});
|
|
15478
15653
|
var ConfigProfileSetOutputSchema = storedMutationOutput("profile", "updated", ProfileValueSchema);
|
|
@@ -15682,7 +15857,9 @@ function createConfigApiRouter(deps) {
|
|
|
15682
15857
|
...launch?.headroom === void 0 ? {} : { launchHeadroom: launch.headroom },
|
|
15683
15858
|
...launch?.trackUsage === void 0 ? {} : { launchTrackUsage: launch.trackUsage },
|
|
15684
15859
|
...launch?.provider === void 0 ? {} : { launchProvider: launch.provider },
|
|
15685
|
-
...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion }
|
|
15860
|
+
...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion },
|
|
15861
|
+
...launch?.delay === void 0 ? {} : { launchDelay: launch.delay },
|
|
15862
|
+
...launch?.pause === void 0 ? {} : { launchPause: launch.pause }
|
|
15686
15863
|
});
|
|
15687
15864
|
return { action: "updated", kind: "profile", name: input.name, value: profileValue(input.name, paths) };
|
|
15688
15865
|
})
|
|
@@ -15990,7 +16167,10 @@ var LaunchFlagsSchema = z26.strictObject({
|
|
|
15990
16167
|
skipPermissions: z26.boolean(),
|
|
15991
16168
|
remoteControl: z26.boolean(),
|
|
15992
16169
|
headroom: z26.boolean(),
|
|
15993
|
-
trackUsage: z26.boolean()
|
|
16170
|
+
trackUsage: z26.boolean(),
|
|
16171
|
+
pause: z26.boolean(),
|
|
16172
|
+
/** How long the launch waits after its own output before it starts claude, in milliseconds. */
|
|
16173
|
+
delayMs: z26.number()
|
|
15994
16174
|
});
|
|
15995
16175
|
var LaunchResolveOutputSchema = z26.strictObject({
|
|
15996
16176
|
decision: LaunchDecisionSchema,
|