claude-use 10.0.1 → 10.1.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 +32 -15
- package/dist/index.cjs +19 -9
- package/dist/index.mjs +19 -9
- package/dist/types/index.d.ts +29 -28
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -27535,6 +27535,8 @@ var init_state2 = __esm({
|
|
|
27535
27535
|
settingsHash: external_exports.string().optional(),
|
|
27536
27536
|
/** The install spec the running install was last installed from, so a `source` config change is detected as drift. */
|
|
27537
27537
|
installedSource: external_exports.string().optional(),
|
|
27538
|
+
/** The install spec the supervisor is installing right now, present only while `uv tool install` runs, so a launcher that finds a live supervisor with no daemon yet keeps waiting for the install instead of counting it against its start bound. Cleared by the write that follows the install, whatever its outcome. */
|
|
27539
|
+
installing: external_exports.string().optional(),
|
|
27538
27540
|
/** The last fatal error, kept across shutdowns so `headroom status` can explain a daemon that is not running. */
|
|
27539
27541
|
lastError: external_exports.string().optional()
|
|
27540
27542
|
});
|
|
@@ -27634,7 +27636,7 @@ function daemonAdmits(fs22, allowlistFile, recordedHash, required2) {
|
|
|
27634
27636
|
}
|
|
27635
27637
|
function ensureHeadroom(params) {
|
|
27636
27638
|
const { paths, ports } = params;
|
|
27637
|
-
|
|
27639
|
+
let deadline = ports.now() + HEADROOM_START_TIMEOUT_MS;
|
|
27638
27640
|
let spawnedSupervisor = false;
|
|
27639
27641
|
migrateHeadroomState(ports.fs, { stateFile: paths.headroomStateFile, legacyStateFile: paths.headroomLegacyStateFile }, ports.isRunning);
|
|
27640
27642
|
const commandLines = /* @__PURE__ */ new Map();
|
|
@@ -27648,6 +27650,9 @@ function ensureHeadroom(params) {
|
|
|
27648
27650
|
let awaiting;
|
|
27649
27651
|
const state = resolveServingHeadroomState(ports.fs, { stateFile: paths.headroomStateFile, legacyStateFile: paths.headroomLegacyStateFile }, ports.isRunning)?.state;
|
|
27650
27652
|
if (state?.supervisorPid !== void 0 && ports.isRunning(state.supervisorPid)) {
|
|
27653
|
+
if (state.installing !== void 0) {
|
|
27654
|
+
deadline = ports.now() + HEADROOM_START_TIMEOUT_MS;
|
|
27655
|
+
}
|
|
27651
27656
|
const daemonUp = state.socketPath !== void 0 && state.headroomPid !== void 0 && ports.isRunning(state.headroomPid);
|
|
27652
27657
|
if (daemonUp && state.socketPath !== void 0 && state.headroomPid !== void 0) {
|
|
27653
27658
|
const required2 = params.requiredUpstreams?.();
|
|
@@ -28249,15 +28254,16 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
28249
28254
|
const commitOk = pinned === void 0 || ports.installedCommit() === pinned;
|
|
28250
28255
|
if (versionOk && commitOk && (installedSource === void 0 || installedSource === config2.source)) {
|
|
28251
28256
|
installedSource = config2.source;
|
|
28252
|
-
return
|
|
28257
|
+
return void 0;
|
|
28253
28258
|
}
|
|
28254
28259
|
ports.log(`agent-shim headroom supervisor: installing headroom from ${config2.source}`);
|
|
28260
|
+
writeOwnState({ supervisorPid: ports.ownPid, installedSource, installing: config2.source });
|
|
28255
28261
|
const result = ports.install(config2.source);
|
|
28256
28262
|
if (!result.ok) {
|
|
28257
|
-
return
|
|
28263
|
+
return `could not install headroom from ${config2.source}: ${result.error ?? "install failed"}`;
|
|
28258
28264
|
}
|
|
28259
28265
|
installedSource = config2.source;
|
|
28260
|
-
return
|
|
28266
|
+
return void 0;
|
|
28261
28267
|
};
|
|
28262
28268
|
const socket = prepareHeadroomSocket(fs22, ports.socketTrust, paths, ports.ownPid);
|
|
28263
28269
|
if (socket.refused !== void 0) {
|
|
@@ -28266,8 +28272,9 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
28266
28272
|
const { socketPath } = socket;
|
|
28267
28273
|
pruneStaleHeadroomSockets(fs22, paths, ports.isRunning);
|
|
28268
28274
|
pruneStaleAllowlistTemporaries(fs22, paths.headroomAllowlistFile, ports.isRunning);
|
|
28269
|
-
|
|
28270
|
-
|
|
28275
|
+
const installFailure = ensureInstalled();
|
|
28276
|
+
if (installFailure !== void 0) {
|
|
28277
|
+
return fail(installFailure);
|
|
28271
28278
|
}
|
|
28272
28279
|
const version2 = ports.headroomVersion() ?? "unknown";
|
|
28273
28280
|
writeOwnState({ supervisorPid: ports.ownPid, version: version2, installedSource });
|
|
@@ -28342,8 +28349,9 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
28342
28349
|
`headroom failed to become ready ${String(consecutiveFailures)} times in a row; giving up` + (lastExitOutput === void 0 ? "" : `; the last attempt exited before it was ready, and its log ends: ${lastExitOutput}`)
|
|
28343
28350
|
);
|
|
28344
28351
|
}
|
|
28345
|
-
|
|
28346
|
-
|
|
28352
|
+
const restartInstallFailure = installedSource !== config2.source ? ensureInstalled() : void 0;
|
|
28353
|
+
if (restartInstallFailure !== void 0) {
|
|
28354
|
+
return fail(restartInstallFailure);
|
|
28347
28355
|
}
|
|
28348
28356
|
const logOffset = ports.daemonLogSize();
|
|
28349
28357
|
const pid = ports.spawnHeadroom(socketPath, paths.headroomAllowlistFile, config2.settings);
|
|
@@ -33355,6 +33363,8 @@ var init_schema2 = __esm({
|
|
|
33355
33363
|
sessionId: external_exports.string().optional(),
|
|
33356
33364
|
/** The project the launch ran in (its git repository root), when the launch sent one: headroom launches do. */
|
|
33357
33365
|
project: external_exports.string().optional(),
|
|
33366
|
+
/** Whether the request crossed headroom on its way upstream. Absent on a record written before the door recorded it, and false when the request went direct. */
|
|
33367
|
+
viaHeadroom: external_exports.boolean().optional(),
|
|
33358
33368
|
/** The front-door route that served the request. */
|
|
33359
33369
|
route: external_exports.string(),
|
|
33360
33370
|
method: external_exports.string(),
|
|
@@ -33959,7 +33969,7 @@ var init_package = __esm({
|
|
|
33959
33969
|
"package.json"() {
|
|
33960
33970
|
package_default = {
|
|
33961
33971
|
name: "claude-use",
|
|
33962
|
-
version: "10.0
|
|
33972
|
+
version: "10.1.0",
|
|
33963
33973
|
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.",
|
|
33964
33974
|
license: "MIT",
|
|
33965
33975
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -34578,6 +34588,7 @@ function buildRecord(event, context) {
|
|
|
34578
34588
|
provider,
|
|
34579
34589
|
...sessionId === void 0 ? {} : { sessionId },
|
|
34580
34590
|
...projectId === void 0 ? {} : { project: projectId },
|
|
34591
|
+
viaHeadroom: event.viaHeadroom,
|
|
34581
34592
|
route: event.route,
|
|
34582
34593
|
method: event.method,
|
|
34583
34594
|
endpoint,
|
|
@@ -126375,7 +126386,7 @@ function createRoutedResponse(response, context) {
|
|
|
126375
126386
|
start: (status, headers) => {
|
|
126376
126387
|
for (const observe of deps.responseObservers) {
|
|
126377
126388
|
try {
|
|
126378
|
-
const body = observe({ session, route, method: request7.method, path: request7.path, receivedAt: request7.receivedAt, status, headers });
|
|
126389
|
+
const body = observe({ session, route, method: request7.method, path: request7.path, receivedAt: request7.receivedAt, viaHeadroom: request7.viaHeadroom, status, headers });
|
|
126379
126390
|
if (body !== void 0) {
|
|
126380
126391
|
bodyObservers.push(body);
|
|
126381
126392
|
}
|
|
@@ -126416,7 +126427,7 @@ function createRoutedResponse(response, context) {
|
|
|
126416
126427
|
};
|
|
126417
126428
|
}
|
|
126418
126429
|
async function serveRouted(request7, deps) {
|
|
126419
|
-
const observed = { method: request7.method, path: pathOf(request7.url), receivedAt: deps.now() };
|
|
126430
|
+
const observed = { method: request7.method, path: pathOf(request7.url), receivedAt: deps.now(), viaHeadroom: false };
|
|
126420
126431
|
const identified = identifyRequest(request7.headers);
|
|
126421
126432
|
const admission = deps.admit({ url: request7.url, headers: request7.headers, forwardable: identified.forwardableHeaders });
|
|
126422
126433
|
if (!admission.ok) {
|
|
@@ -126442,9 +126453,10 @@ async function serveRouted(request7, deps) {
|
|
|
126442
126453
|
response2.end();
|
|
126443
126454
|
return;
|
|
126444
126455
|
}
|
|
126445
|
-
const
|
|
126456
|
+
const viaHeadroom = identified.session.headroom && resolution.route.headroomEligible && deps.headroom !== void 0;
|
|
126457
|
+
const response = createRoutedResponse(request7.response, { deps, session: identified.session, route: resolution.route.name, request: { ...observed, viaHeadroom } });
|
|
126446
126458
|
try {
|
|
126447
|
-
if (
|
|
126459
|
+
if (viaHeadroom) {
|
|
126448
126460
|
await applyHeadroomHop(routed, response, resolution.route.headroomUpstream, deps.headroom);
|
|
126449
126461
|
} else {
|
|
126450
126462
|
await resolution.route.serve(routed, response);
|
|
@@ -141247,6 +141259,7 @@ function formatHeadroomStatus(status) {
|
|
|
141247
141259
|
}
|
|
141248
141260
|
var ownedHeadroom = /* @__PURE__ */ new Map();
|
|
141249
141261
|
var exitedHeadroom = /* @__PURE__ */ new Set();
|
|
141262
|
+
var HEADROOM_INSTALL_TIMEOUT_MS = 6e5;
|
|
141250
141263
|
var READY_FETCH_TIMEOUT_MS = 2e3;
|
|
141251
141264
|
function headroomPidRunning(pid) {
|
|
141252
141265
|
return !exitedHeadroom.has(pid) && realIsProcessRunning(pid);
|
|
@@ -141375,9 +141388,13 @@ function realSupervisorPorts(paths) {
|
|
|
141375
141388
|
},
|
|
141376
141389
|
ready: readyOverSocket,
|
|
141377
141390
|
install: (spec) => {
|
|
141378
|
-
const result = (0, import_node_child_process7.spawnSync)("uv", ["tool", "install", spec], { encoding: "utf8" });
|
|
141391
|
+
const result = (0, import_node_child_process7.spawnSync)("uv", ["tool", "install", spec], { encoding: "utf8", timeout: HEADROOM_INSTALL_TIMEOUT_MS });
|
|
141379
141392
|
if (result.error !== void 0) {
|
|
141380
|
-
|
|
141393
|
+
const timedOut = "code" in result.error && result.error.code === "ETIMEDOUT";
|
|
141394
|
+
return {
|
|
141395
|
+
ok: false,
|
|
141396
|
+
error: timedOut ? `uv tool install did not finish within ${String(HEADROOM_INSTALL_TIMEOUT_MS)}ms and was stopped` : `uv is not installed or not on PATH (${result.error.message})`
|
|
141397
|
+
};
|
|
141381
141398
|
}
|
|
141382
141399
|
if (result.stdout !== "") {
|
|
141383
141400
|
import_node_fs20.default.appendFileSync(paths.headroomLogPath, result.stdout);
|
package/dist/index.cjs
CHANGED
|
@@ -2758,7 +2758,7 @@ var init_package = __esm({
|
|
|
2758
2758
|
"package.json"() {
|
|
2759
2759
|
package_default = {
|
|
2760
2760
|
name: "claude-use",
|
|
2761
|
-
version: "10.0
|
|
2761
|
+
version: "10.1.0",
|
|
2762
2762
|
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.",
|
|
2763
2763
|
license: "MIT",
|
|
2764
2764
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -3134,6 +3134,8 @@ var init_state2 = __esm({
|
|
|
3134
3134
|
settingsHash: import_zod8.z.string().optional(),
|
|
3135
3135
|
/** The install spec the running install was last installed from, so a `source` config change is detected as drift. */
|
|
3136
3136
|
installedSource: import_zod8.z.string().optional(),
|
|
3137
|
+
/** The install spec the supervisor is installing right now, present only while `uv tool install` runs, so a launcher that finds a live supervisor with no daemon yet keeps waiting for the install instead of counting it against its start bound. Cleared by the write that follows the install, whatever its outcome. */
|
|
3138
|
+
installing: import_zod8.z.string().optional(),
|
|
3137
3139
|
/** The last fatal error, kept across shutdowns so `headroom status` can explain a daemon that is not running. */
|
|
3138
3140
|
lastError: import_zod8.z.string().optional()
|
|
3139
3141
|
});
|
|
@@ -3233,7 +3235,7 @@ function daemonAdmits(fs12, allowlistFile, recordedHash, required) {
|
|
|
3233
3235
|
}
|
|
3234
3236
|
function ensureHeadroom(params) {
|
|
3235
3237
|
const { paths, ports } = params;
|
|
3236
|
-
|
|
3238
|
+
let deadline = ports.now() + HEADROOM_START_TIMEOUT_MS;
|
|
3237
3239
|
let spawnedSupervisor = false;
|
|
3238
3240
|
migrateHeadroomState(ports.fs, { stateFile: paths.headroomStateFile, legacyStateFile: paths.headroomLegacyStateFile }, ports.isRunning);
|
|
3239
3241
|
const commandLines = /* @__PURE__ */ new Map();
|
|
@@ -3247,6 +3249,9 @@ function ensureHeadroom(params) {
|
|
|
3247
3249
|
let awaiting;
|
|
3248
3250
|
const state = resolveServingHeadroomState(ports.fs, { stateFile: paths.headroomStateFile, legacyStateFile: paths.headroomLegacyStateFile }, ports.isRunning)?.state;
|
|
3249
3251
|
if (state?.supervisorPid !== void 0 && ports.isRunning(state.supervisorPid)) {
|
|
3252
|
+
if (state.installing !== void 0) {
|
|
3253
|
+
deadline = ports.now() + HEADROOM_START_TIMEOUT_MS;
|
|
3254
|
+
}
|
|
3250
3255
|
const daemonUp = state.socketPath !== void 0 && state.headroomPid !== void 0 && ports.isRunning(state.headroomPid);
|
|
3251
3256
|
if (daemonUp && state.socketPath !== void 0 && state.headroomPid !== void 0) {
|
|
3252
3257
|
const required = params.requiredUpstreams?.();
|
|
@@ -3686,15 +3691,16 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
3686
3691
|
const commitOk = pinned === void 0 || ports.installedCommit() === pinned;
|
|
3687
3692
|
if (versionOk && commitOk && (installedSource === void 0 || installedSource === config.source)) {
|
|
3688
3693
|
installedSource = config.source;
|
|
3689
|
-
return
|
|
3694
|
+
return void 0;
|
|
3690
3695
|
}
|
|
3691
3696
|
ports.log(`agent-shim headroom supervisor: installing headroom from ${config.source}`);
|
|
3697
|
+
writeOwnState({ supervisorPid: ports.ownPid, installedSource, installing: config.source });
|
|
3692
3698
|
const result = ports.install(config.source);
|
|
3693
3699
|
if (!result.ok) {
|
|
3694
|
-
return
|
|
3700
|
+
return `could not install headroom from ${config.source}: ${result.error ?? "install failed"}`;
|
|
3695
3701
|
}
|
|
3696
3702
|
installedSource = config.source;
|
|
3697
|
-
return
|
|
3703
|
+
return void 0;
|
|
3698
3704
|
};
|
|
3699
3705
|
const socket = prepareHeadroomSocket(fs12, ports.socketTrust, paths, ports.ownPid);
|
|
3700
3706
|
if (socket.refused !== void 0) {
|
|
@@ -3703,8 +3709,9 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
3703
3709
|
const { socketPath } = socket;
|
|
3704
3710
|
pruneStaleHeadroomSockets(fs12, paths, ports.isRunning);
|
|
3705
3711
|
pruneStaleAllowlistTemporaries(fs12, paths.headroomAllowlistFile, ports.isRunning);
|
|
3706
|
-
|
|
3707
|
-
|
|
3712
|
+
const installFailure = ensureInstalled();
|
|
3713
|
+
if (installFailure !== void 0) {
|
|
3714
|
+
return fail(installFailure);
|
|
3708
3715
|
}
|
|
3709
3716
|
const version = ports.headroomVersion() ?? "unknown";
|
|
3710
3717
|
writeOwnState({ supervisorPid: ports.ownPid, version, installedSource });
|
|
@@ -3779,8 +3786,9 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
3779
3786
|
`headroom failed to become ready ${String(consecutiveFailures)} times in a row; giving up` + (lastExitOutput === void 0 ? "" : `; the last attempt exited before it was ready, and its log ends: ${lastExitOutput}`)
|
|
3780
3787
|
);
|
|
3781
3788
|
}
|
|
3782
|
-
|
|
3783
|
-
|
|
3789
|
+
const restartInstallFailure = installedSource !== config.source ? ensureInstalled() : void 0;
|
|
3790
|
+
if (restartInstallFailure !== void 0) {
|
|
3791
|
+
return fail(restartInstallFailure);
|
|
3784
3792
|
}
|
|
3785
3793
|
const logOffset = ports.daemonLogSize();
|
|
3786
3794
|
const pid = ports.spawnHeadroom(socketPath, paths.headroomAllowlistFile, config.settings);
|
|
@@ -4616,6 +4624,8 @@ var init_schema2 = __esm({
|
|
|
4616
4624
|
sessionId: import_zod10.z.string().optional(),
|
|
4617
4625
|
/** The project the launch ran in (its git repository root), when the launch sent one: headroom launches do. */
|
|
4618
4626
|
project: import_zod10.z.string().optional(),
|
|
4627
|
+
/** Whether the request crossed headroom on its way upstream. Absent on a record written before the door recorded it, and false when the request went direct. */
|
|
4628
|
+
viaHeadroom: import_zod10.z.boolean().optional(),
|
|
4619
4629
|
/** The front-door route that served the request. */
|
|
4620
4630
|
route: import_zod10.z.string(),
|
|
4621
4631
|
method: import_zod10.z.string(),
|
package/dist/index.mjs
CHANGED
|
@@ -2734,7 +2734,7 @@ var init_package = __esm({
|
|
|
2734
2734
|
"package.json"() {
|
|
2735
2735
|
package_default = {
|
|
2736
2736
|
name: "claude-use",
|
|
2737
|
-
version: "10.0
|
|
2737
|
+
version: "10.1.0",
|
|
2738
2738
|
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.",
|
|
2739
2739
|
license: "MIT",
|
|
2740
2740
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -3110,6 +3110,8 @@ var init_state2 = __esm({
|
|
|
3110
3110
|
settingsHash: z8.string().optional(),
|
|
3111
3111
|
/** The install spec the running install was last installed from, so a `source` config change is detected as drift. */
|
|
3112
3112
|
installedSource: z8.string().optional(),
|
|
3113
|
+
/** The install spec the supervisor is installing right now, present only while `uv tool install` runs, so a launcher that finds a live supervisor with no daemon yet keeps waiting for the install instead of counting it against its start bound. Cleared by the write that follows the install, whatever its outcome. */
|
|
3114
|
+
installing: z8.string().optional(),
|
|
3113
3115
|
/** The last fatal error, kept across shutdowns so `headroom status` can explain a daemon that is not running. */
|
|
3114
3116
|
lastError: z8.string().optional()
|
|
3115
3117
|
});
|
|
@@ -3209,7 +3211,7 @@ function daemonAdmits(fs12, allowlistFile, recordedHash, required) {
|
|
|
3209
3211
|
}
|
|
3210
3212
|
function ensureHeadroom(params) {
|
|
3211
3213
|
const { paths, ports } = params;
|
|
3212
|
-
|
|
3214
|
+
let deadline = ports.now() + HEADROOM_START_TIMEOUT_MS;
|
|
3213
3215
|
let spawnedSupervisor = false;
|
|
3214
3216
|
migrateHeadroomState(ports.fs, { stateFile: paths.headroomStateFile, legacyStateFile: paths.headroomLegacyStateFile }, ports.isRunning);
|
|
3215
3217
|
const commandLines = /* @__PURE__ */ new Map();
|
|
@@ -3223,6 +3225,9 @@ function ensureHeadroom(params) {
|
|
|
3223
3225
|
let awaiting;
|
|
3224
3226
|
const state = resolveServingHeadroomState(ports.fs, { stateFile: paths.headroomStateFile, legacyStateFile: paths.headroomLegacyStateFile }, ports.isRunning)?.state;
|
|
3225
3227
|
if (state?.supervisorPid !== void 0 && ports.isRunning(state.supervisorPid)) {
|
|
3228
|
+
if (state.installing !== void 0) {
|
|
3229
|
+
deadline = ports.now() + HEADROOM_START_TIMEOUT_MS;
|
|
3230
|
+
}
|
|
3226
3231
|
const daemonUp = state.socketPath !== void 0 && state.headroomPid !== void 0 && ports.isRunning(state.headroomPid);
|
|
3227
3232
|
if (daemonUp && state.socketPath !== void 0 && state.headroomPid !== void 0) {
|
|
3228
3233
|
const required = params.requiredUpstreams?.();
|
|
@@ -3662,15 +3667,16 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
3662
3667
|
const commitOk = pinned === void 0 || ports.installedCommit() === pinned;
|
|
3663
3668
|
if (versionOk && commitOk && (installedSource === void 0 || installedSource === config.source)) {
|
|
3664
3669
|
installedSource = config.source;
|
|
3665
|
-
return
|
|
3670
|
+
return void 0;
|
|
3666
3671
|
}
|
|
3667
3672
|
ports.log(`agent-shim headroom supervisor: installing headroom from ${config.source}`);
|
|
3673
|
+
writeOwnState({ supervisorPid: ports.ownPid, installedSource, installing: config.source });
|
|
3668
3674
|
const result = ports.install(config.source);
|
|
3669
3675
|
if (!result.ok) {
|
|
3670
|
-
return
|
|
3676
|
+
return `could not install headroom from ${config.source}: ${result.error ?? "install failed"}`;
|
|
3671
3677
|
}
|
|
3672
3678
|
installedSource = config.source;
|
|
3673
|
-
return
|
|
3679
|
+
return void 0;
|
|
3674
3680
|
};
|
|
3675
3681
|
const socket = prepareHeadroomSocket(fs12, ports.socketTrust, paths, ports.ownPid);
|
|
3676
3682
|
if (socket.refused !== void 0) {
|
|
@@ -3679,8 +3685,9 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
3679
3685
|
const { socketPath } = socket;
|
|
3680
3686
|
pruneStaleHeadroomSockets(fs12, paths, ports.isRunning);
|
|
3681
3687
|
pruneStaleAllowlistTemporaries(fs12, paths.headroomAllowlistFile, ports.isRunning);
|
|
3682
|
-
|
|
3683
|
-
|
|
3688
|
+
const installFailure = ensureInstalled();
|
|
3689
|
+
if (installFailure !== void 0) {
|
|
3690
|
+
return fail(installFailure);
|
|
3684
3691
|
}
|
|
3685
3692
|
const version = ports.headroomVersion() ?? "unknown";
|
|
3686
3693
|
writeOwnState({ supervisorPid: ports.ownPid, version, installedSource });
|
|
@@ -3755,8 +3762,9 @@ async function runSupervisor(initialConfig, ports, options = {}) {
|
|
|
3755
3762
|
`headroom failed to become ready ${String(consecutiveFailures)} times in a row; giving up` + (lastExitOutput === void 0 ? "" : `; the last attempt exited before it was ready, and its log ends: ${lastExitOutput}`)
|
|
3756
3763
|
);
|
|
3757
3764
|
}
|
|
3758
|
-
|
|
3759
|
-
|
|
3765
|
+
const restartInstallFailure = installedSource !== config.source ? ensureInstalled() : void 0;
|
|
3766
|
+
if (restartInstallFailure !== void 0) {
|
|
3767
|
+
return fail(restartInstallFailure);
|
|
3760
3768
|
}
|
|
3761
3769
|
const logOffset = ports.daemonLogSize();
|
|
3762
3770
|
const pid = ports.spawnHeadroom(socketPath, paths.headroomAllowlistFile, config.settings);
|
|
@@ -4590,6 +4598,8 @@ var init_schema2 = __esm({
|
|
|
4590
4598
|
sessionId: z10.string().optional(),
|
|
4591
4599
|
/** The project the launch ran in (its git repository root), when the launch sent one: headroom launches do. */
|
|
4592
4600
|
project: z10.string().optional(),
|
|
4601
|
+
/** Whether the request crossed headroom on its way upstream. Absent on a record written before the door recorded it, and false when the request went direct. */
|
|
4602
|
+
viaHeadroom: z10.boolean().optional(),
|
|
4593
4603
|
/** The front-door route that served the request. */
|
|
4594
4604
|
route: z10.string(),
|
|
4595
4605
|
method: z10.string(),
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1332,8 +1332,8 @@ declare const HeadroomGlobalConfigSchema: z.ZodObject<{
|
|
|
1332
1332
|
targetRatio: z.ZodOptional<z.ZodNumber>;
|
|
1333
1333
|
ccr: z.ZodOptional<z.ZodEnum<{
|
|
1334
1334
|
default: "default";
|
|
1335
|
-
none: "none";
|
|
1336
1335
|
lossless: "lossless";
|
|
1336
|
+
none: "none";
|
|
1337
1337
|
}>>;
|
|
1338
1338
|
rolloutChannel: z.ZodOptional<z.ZodEnum<{
|
|
1339
1339
|
beta: "beta";
|
|
@@ -1460,8 +1460,8 @@ declare const GlobalConfigSchema: z.ZodObject<{
|
|
|
1460
1460
|
targetRatio: z.ZodOptional<z.ZodNumber>;
|
|
1461
1461
|
ccr: z.ZodOptional<z.ZodEnum<{
|
|
1462
1462
|
default: "default";
|
|
1463
|
-
none: "none";
|
|
1464
1463
|
lossless: "lossless";
|
|
1464
|
+
none: "none";
|
|
1465
1465
|
}>>;
|
|
1466
1466
|
rolloutChannel: z.ZodOptional<z.ZodEnum<{
|
|
1467
1467
|
beta: "beta";
|
|
@@ -4161,12 +4161,12 @@ declare const CheckReportJsonSchema: z.ZodObject<{
|
|
|
4161
4161
|
identity: z.ZodObject<{
|
|
4162
4162
|
name: z.ZodNullable<z.ZodString>;
|
|
4163
4163
|
source: z.ZodEnum<{
|
|
4164
|
+
env: "env";
|
|
4165
|
+
none: "none";
|
|
4164
4166
|
"config-dir-escape-hatch": "config-dir-escape-hatch";
|
|
4165
4167
|
argv: "argv";
|
|
4166
|
-
env: "env";
|
|
4167
4168
|
"directory-pin": "directory-pin";
|
|
4168
4169
|
"active-identity-file": "active-identity-file";
|
|
4169
|
-
none: "none";
|
|
4170
4170
|
}>;
|
|
4171
4171
|
}, z.core.$strict>;
|
|
4172
4172
|
pool: z.ZodOptional<z.ZodObject<{
|
|
@@ -4244,11 +4244,11 @@ declare const CheckReportJsonSchema: z.ZodObject<{
|
|
|
4244
4244
|
"category-default": "category-default";
|
|
4245
4245
|
}>;
|
|
4246
4246
|
category: z.ZodNullable<z.ZodEnum<{
|
|
4247
|
-
secret: "secret";
|
|
4248
4247
|
runtime: "runtime";
|
|
4249
4248
|
history: "history";
|
|
4250
4249
|
knowledge: "knowledge";
|
|
4251
4250
|
settings: "settings";
|
|
4251
|
+
secret: "secret";
|
|
4252
4252
|
}>>;
|
|
4253
4253
|
rule: z.ZodOptional<z.ZodObject<{
|
|
4254
4254
|
key: z.ZodString;
|
|
@@ -5206,6 +5206,7 @@ declare const UsageRecordSchema: z.ZodObject<{
|
|
|
5206
5206
|
provider: z.ZodString;
|
|
5207
5207
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
5208
5208
|
project: z.ZodOptional<z.ZodString>;
|
|
5209
|
+
viaHeadroom: z.ZodOptional<z.ZodBoolean>;
|
|
5209
5210
|
route: z.ZodString;
|
|
5210
5211
|
method: z.ZodString;
|
|
5211
5212
|
endpoint: z.ZodString;
|
|
@@ -6939,9 +6940,9 @@ declare function createLifecycleApiRouter(deps: LifecycleApiDeps): {
|
|
|
6939
6940
|
current: zod.ZodString;
|
|
6940
6941
|
latest: zod.ZodString;
|
|
6941
6942
|
action: zod.ZodEnum<{
|
|
6943
|
+
updated: "updated";
|
|
6942
6944
|
current: "current";
|
|
6943
6945
|
available: "available";
|
|
6944
|
-
updated: "updated";
|
|
6945
6946
|
}>;
|
|
6946
6947
|
}, zod_v4_core.$strict>, MergedErrorMap<$ErrorMap, TErrorMap>>;
|
|
6947
6948
|
};
|
|
@@ -7188,12 +7189,12 @@ declare function createLaunchApiRouter(deps: LaunchApiDeps): {
|
|
|
7188
7189
|
decision: zod.ZodObject<{
|
|
7189
7190
|
identity: zod.ZodOptional<zod.ZodString>;
|
|
7190
7191
|
identitySource: zod.ZodEnum<{
|
|
7192
|
+
env: "env";
|
|
7193
|
+
none: "none";
|
|
7191
7194
|
"config-dir-escape-hatch": "config-dir-escape-hatch";
|
|
7192
7195
|
argv: "argv";
|
|
7193
|
-
env: "env";
|
|
7194
7196
|
"directory-pin": "directory-pin";
|
|
7195
7197
|
"active-identity-file": "active-identity-file";
|
|
7196
|
-
none: "none";
|
|
7197
7198
|
}>;
|
|
7198
7199
|
pool: zod.ZodOptional<zod.ZodObject<{
|
|
7199
7200
|
name: zod.ZodString;
|
|
@@ -7788,12 +7789,12 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
7788
7789
|
identity: zod.ZodObject<{
|
|
7789
7790
|
name: zod.ZodNullable<zod.ZodString>;
|
|
7790
7791
|
source: zod.ZodEnum<{
|
|
7792
|
+
env: "env";
|
|
7793
|
+
none: "none";
|
|
7791
7794
|
"config-dir-escape-hatch": "config-dir-escape-hatch";
|
|
7792
7795
|
argv: "argv";
|
|
7793
|
-
env: "env";
|
|
7794
7796
|
"directory-pin": "directory-pin";
|
|
7795
7797
|
"active-identity-file": "active-identity-file";
|
|
7796
|
-
none: "none";
|
|
7797
7798
|
}>;
|
|
7798
7799
|
}, zod_v4_core.$strict>;
|
|
7799
7800
|
pool: zod.ZodOptional<zod.ZodObject<{
|
|
@@ -7871,11 +7872,11 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
7871
7872
|
"category-default": "category-default";
|
|
7872
7873
|
}>;
|
|
7873
7874
|
category: zod.ZodNullable<zod.ZodEnum<{
|
|
7874
|
-
secret: "secret";
|
|
7875
7875
|
runtime: "runtime";
|
|
7876
7876
|
history: "history";
|
|
7877
7877
|
knowledge: "knowledge";
|
|
7878
7878
|
settings: "settings";
|
|
7879
|
+
secret: "secret";
|
|
7879
7880
|
}>>;
|
|
7880
7881
|
rule: zod.ZodOptional<zod.ZodObject<{
|
|
7881
7882
|
key: zod.ZodString;
|
|
@@ -8094,10 +8095,11 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
8094
8095
|
"global-config": "global-config";
|
|
8095
8096
|
"config-profile": "config-profile";
|
|
8096
8097
|
identity: "identity";
|
|
8098
|
+
keychain: "keychain";
|
|
8097
8099
|
provider: "provider";
|
|
8100
|
+
headroom: "headroom";
|
|
8098
8101
|
frontdoor: "frontdoor";
|
|
8099
8102
|
pool: "pool";
|
|
8100
|
-
keychain: "keychain";
|
|
8101
8103
|
"ambient-credential": "ambient-credential";
|
|
8102
8104
|
"binary-discovery": "binary-discovery";
|
|
8103
8105
|
"claude-shim": "claude-shim";
|
|
@@ -8107,7 +8109,6 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
8107
8109
|
"directory-rules": "directory-rules";
|
|
8108
8110
|
"categories-local": "categories-local";
|
|
8109
8111
|
"active-identity": "active-identity";
|
|
8110
|
-
headroom: "headroom";
|
|
8111
8112
|
}>;
|
|
8112
8113
|
subject: zod.ZodOptional<zod.ZodString>;
|
|
8113
8114
|
severity: zod.ZodEnum<{
|
|
@@ -8300,12 +8301,12 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
8300
8301
|
decision: zod.ZodObject<{
|
|
8301
8302
|
identity: zod.ZodOptional<zod.ZodString>;
|
|
8302
8303
|
identitySource: zod.ZodEnum<{
|
|
8304
|
+
env: "env";
|
|
8305
|
+
none: "none";
|
|
8303
8306
|
"config-dir-escape-hatch": "config-dir-escape-hatch";
|
|
8304
8307
|
argv: "argv";
|
|
8305
|
-
env: "env";
|
|
8306
8308
|
"directory-pin": "directory-pin";
|
|
8307
8309
|
"active-identity-file": "active-identity-file";
|
|
8308
|
-
none: "none";
|
|
8309
8310
|
}>;
|
|
8310
8311
|
pool: zod.ZodOptional<zod.ZodObject<{
|
|
8311
8312
|
name: zod.ZodString;
|
|
@@ -9681,9 +9682,9 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
9681
9682
|
current: zod.ZodString;
|
|
9682
9683
|
latest: zod.ZodString;
|
|
9683
9684
|
action: zod.ZodEnum<{
|
|
9685
|
+
updated: "updated";
|
|
9684
9686
|
current: "current";
|
|
9685
9687
|
available: "available";
|
|
9686
|
-
updated: "updated";
|
|
9687
9688
|
}>;
|
|
9688
9689
|
}, zod_v4_core.$strict>, MergedErrorMap<$ErrorMap, TErrorMap>>;
|
|
9689
9690
|
};
|
|
@@ -9882,12 +9883,12 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
9882
9883
|
identity: zod.ZodObject<{
|
|
9883
9884
|
name: zod.ZodNullable<zod.ZodString>;
|
|
9884
9885
|
source: zod.ZodEnum<{
|
|
9886
|
+
env: "env";
|
|
9887
|
+
none: "none";
|
|
9885
9888
|
"config-dir-escape-hatch": "config-dir-escape-hatch";
|
|
9886
9889
|
argv: "argv";
|
|
9887
|
-
env: "env";
|
|
9888
9890
|
"directory-pin": "directory-pin";
|
|
9889
9891
|
"active-identity-file": "active-identity-file";
|
|
9890
|
-
none: "none";
|
|
9891
9892
|
}>;
|
|
9892
9893
|
}, zod_v4_core.$strict>;
|
|
9893
9894
|
pool: zod.ZodOptional<zod.ZodObject<{
|
|
@@ -9965,11 +9966,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
9965
9966
|
"category-default": "category-default";
|
|
9966
9967
|
}>;
|
|
9967
9968
|
category: zod.ZodNullable<zod.ZodEnum<{
|
|
9968
|
-
secret: "secret";
|
|
9969
9969
|
runtime: "runtime";
|
|
9970
9970
|
history: "history";
|
|
9971
9971
|
knowledge: "knowledge";
|
|
9972
9972
|
settings: "settings";
|
|
9973
|
+
secret: "secret";
|
|
9973
9974
|
}>>;
|
|
9974
9975
|
rule: zod.ZodOptional<zod.ZodObject<{
|
|
9975
9976
|
key: zod.ZodString;
|
|
@@ -10188,10 +10189,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
10188
10189
|
"global-config": "global-config";
|
|
10189
10190
|
"config-profile": "config-profile";
|
|
10190
10191
|
identity: "identity";
|
|
10192
|
+
keychain: "keychain";
|
|
10191
10193
|
provider: "provider";
|
|
10194
|
+
headroom: "headroom";
|
|
10192
10195
|
frontdoor: "frontdoor";
|
|
10193
10196
|
pool: "pool";
|
|
10194
|
-
keychain: "keychain";
|
|
10195
10197
|
"ambient-credential": "ambient-credential";
|
|
10196
10198
|
"binary-discovery": "binary-discovery";
|
|
10197
10199
|
"claude-shim": "claude-shim";
|
|
@@ -10201,7 +10203,6 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
10201
10203
|
"directory-rules": "directory-rules";
|
|
10202
10204
|
"categories-local": "categories-local";
|
|
10203
10205
|
"active-identity": "active-identity";
|
|
10204
|
-
headroom: "headroom";
|
|
10205
10206
|
}>;
|
|
10206
10207
|
subject: zod.ZodOptional<zod.ZodString>;
|
|
10207
10208
|
severity: zod.ZodEnum<{
|
|
@@ -12034,10 +12035,11 @@ declare const DoctorFindingSchema: z.ZodObject<{
|
|
|
12034
12035
|
"global-config": "global-config";
|
|
12035
12036
|
"config-profile": "config-profile";
|
|
12036
12037
|
identity: "identity";
|
|
12038
|
+
keychain: "keychain";
|
|
12037
12039
|
provider: "provider";
|
|
12040
|
+
headroom: "headroom";
|
|
12038
12041
|
frontdoor: "frontdoor";
|
|
12039
12042
|
pool: "pool";
|
|
12040
|
-
keychain: "keychain";
|
|
12041
12043
|
"ambient-credential": "ambient-credential";
|
|
12042
12044
|
"binary-discovery": "binary-discovery";
|
|
12043
12045
|
"claude-shim": "claude-shim";
|
|
@@ -12047,7 +12049,6 @@ declare const DoctorFindingSchema: z.ZodObject<{
|
|
|
12047
12049
|
"directory-rules": "directory-rules";
|
|
12048
12050
|
"categories-local": "categories-local";
|
|
12049
12051
|
"active-identity": "active-identity";
|
|
12050
|
-
headroom: "headroom";
|
|
12051
12052
|
}>;
|
|
12052
12053
|
subject: z.ZodOptional<z.ZodString>;
|
|
12053
12054
|
severity: z.ZodEnum<{
|
|
@@ -12065,10 +12066,11 @@ declare const DoctorRunOutputSchema: z.ZodObject<{
|
|
|
12065
12066
|
"global-config": "global-config";
|
|
12066
12067
|
"config-profile": "config-profile";
|
|
12067
12068
|
identity: "identity";
|
|
12069
|
+
keychain: "keychain";
|
|
12068
12070
|
provider: "provider";
|
|
12071
|
+
headroom: "headroom";
|
|
12069
12072
|
frontdoor: "frontdoor";
|
|
12070
12073
|
pool: "pool";
|
|
12071
|
-
keychain: "keychain";
|
|
12072
12074
|
"ambient-credential": "ambient-credential";
|
|
12073
12075
|
"binary-discovery": "binary-discovery";
|
|
12074
12076
|
"claude-shim": "claude-shim";
|
|
@@ -12078,7 +12080,6 @@ declare const DoctorRunOutputSchema: z.ZodObject<{
|
|
|
12078
12080
|
"directory-rules": "directory-rules";
|
|
12079
12081
|
"categories-local": "categories-local";
|
|
12080
12082
|
"active-identity": "active-identity";
|
|
12081
|
-
headroom: "headroom";
|
|
12082
12083
|
}>;
|
|
12083
12084
|
subject: z.ZodOptional<z.ZodString>;
|
|
12084
12085
|
severity: z.ZodEnum<{
|
|
@@ -12099,9 +12100,9 @@ declare const UpdateCheckOutputSchema: z.ZodObject<{
|
|
|
12099
12100
|
current: z.ZodString;
|
|
12100
12101
|
latest: z.ZodString;
|
|
12101
12102
|
action: z.ZodEnum<{
|
|
12103
|
+
updated: "updated";
|
|
12102
12104
|
current: "current";
|
|
12103
12105
|
available: "available";
|
|
12104
|
-
updated: "updated";
|
|
12105
12106
|
}>;
|
|
12106
12107
|
}, z.core.$strict>;
|
|
12107
12108
|
/** The Sign in with ChatGPT login's state as `codex status` reports it: no sign-in yet, signed in (with who, whether the plan scope was granted, and when the access token lapses), or a file that cannot be read. */
|
|
@@ -12151,12 +12152,12 @@ declare const LaunchResolveOutputSchema: z.ZodObject<{
|
|
|
12151
12152
|
decision: z.ZodObject<{
|
|
12152
12153
|
identity: z.ZodOptional<z.ZodString>;
|
|
12153
12154
|
identitySource: z.ZodEnum<{
|
|
12155
|
+
env: "env";
|
|
12156
|
+
none: "none";
|
|
12154
12157
|
"config-dir-escape-hatch": "config-dir-escape-hatch";
|
|
12155
12158
|
argv: "argv";
|
|
12156
|
-
env: "env";
|
|
12157
12159
|
"directory-pin": "directory-pin";
|
|
12158
12160
|
"active-identity-file": "active-identity-file";
|
|
12159
|
-
none: "none";
|
|
12160
12161
|
}>;
|
|
12161
12162
|
pool: z.ZodOptional<z.ZodObject<{
|
|
12162
12163
|
name: z.ZodString;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-use",
|
|
3
|
-
"version": "10.0
|
|
3
|
+
"version": "10.1.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>",
|