claude-use 11.5.0 → 11.5.2

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 CHANGED
@@ -33976,7 +33976,7 @@ var init_package = __esm({
33976
33976
  "package.json"() {
33977
33977
  package_default = {
33978
33978
  name: "claude-use",
33979
- version: "11.5.0",
33979
+ version: "11.5.2",
33980
33980
  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.",
33981
33981
  license: "MIT",
33982
33982
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -61807,6 +61807,10 @@ function ensureFrontDoor(params) {
61807
61807
  let replaced = false;
61808
61808
  const distrusted = /* @__PURE__ */ new Set();
61809
61809
  let lastRejection;
61810
+ let busyDoor;
61811
+ const liveSessionsOn = (doorPid) => listFrontDoorSessions(ports.fs, paths.frontdoorSessionsDir).filter(
61812
+ (session) => session.pid !== params.launcherPid && ports.isRunning(session.pid) && (session.supervisorPid === void 0 || session.supervisorPid === doorPid)
61813
+ ).length;
61810
61814
  const verifyWithRetry = (port) => {
61811
61815
  let verdict = ports.verifyListener(port);
61812
61816
  for (let attempt = 1; !verdict.ok && attempt < FRONTDOOR_PROBE_ATTEMPTS; attempt += 1) {
@@ -61817,7 +61821,13 @@ function ensureFrontDoor(params) {
61817
61821
  };
61818
61822
  const stopAndAwaitExit = (supervisorPid, failure2) => {
61819
61823
  ports.stopSupervisor(supervisorPid);
61824
+ const graceEnds = ports.now() + FRONTDOOR_EXIT_GRACE_MS;
61825
+ let killed = false;
61820
61826
  while (ports.isRunning(supervisorPid)) {
61827
+ if (!killed && ports.now() >= graceEnds) {
61828
+ ports.killSupervisor(supervisorPid);
61829
+ killed = true;
61830
+ }
61821
61831
  if (ports.now() >= deadline) {
61822
61832
  throw new FrontDoorStartError(`${failure2}. Daemon log: ${paths.frontdoorLogPath}`);
61823
61833
  }
@@ -61829,6 +61839,11 @@ function ensureFrontDoor(params) {
61829
61839
  const supervisorPid = state?.supervisorPid;
61830
61840
  if (supervisorPid !== void 0 && !distrusted.has(supervisorPid) && ports.isRunning(supervisorPid)) {
61831
61841
  if (state?.port !== void 0 && state.connectPort !== void 0) {
61842
+ if (supervisorPid === params.launcherPid && params.replace !== true && ports.isFrontDoorSupervisor(supervisorPid)) {
61843
+ const token = (0, import_node_crypto10.randomUUID)();
61844
+ writeFrontDoorSession(ports.fs, paths.frontdoorSessionsDir, { pid: params.launcherPid, startedAt: ports.now(), token, supervisorPid });
61845
+ return { port: state.port, connectPort: state.connectPort, token };
61846
+ }
61832
61847
  const verdict = verifyWithRetry(state.port);
61833
61848
  if (verdict.ok && !replaced && !spawned && (params.replace === true || (state.protocol ?? 0) < FRONT_DOOR_PROTOCOL)) {
61834
61849
  stopAndAwaitExit(
@@ -61848,11 +61863,22 @@ function ensureFrontDoor(params) {
61848
61863
  throw new FrontDoorStartError(`${lastRejection}; refusing to send this session's credentials to it. Daemon log: ${paths.frontdoorLogPath}`);
61849
61864
  }
61850
61865
  if (ports.isFrontDoorSupervisor(supervisorPid)) {
61851
- stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
61866
+ const stranded = liveSessionsOn(supervisorPid);
61867
+ if (params.replace === true && !replaced) {
61868
+ stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
61869
+ replaced = true;
61870
+ continue;
61871
+ }
61872
+ if (stranded > 0) {
61873
+ busyDoor = { pid: supervisorPid, sessions: stranded };
61874
+ } else {
61875
+ stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
61876
+ continue;
61877
+ }
61878
+ } else {
61879
+ distrusted.add(supervisorPid);
61852
61880
  continue;
61853
61881
  }
61854
- distrusted.add(supervisorPid);
61855
- continue;
61856
61882
  }
61857
61883
  if (state?.lastError !== void 0) {
61858
61884
  throw new FrontDoorStartError(`the front door reported a fatal error and is not serving: ${state.lastError} (daemon log: ${paths.frontdoorLogPath})`);
@@ -61875,7 +61901,7 @@ function ensureFrontDoor(params) {
61875
61901
  if (ports.now() >= deadline) {
61876
61902
  const lastError = state?.lastError;
61877
61903
  throw new FrontDoorStartError(
61878
- `the front door did not become ready within ${String(FRONTDOOR_START_TIMEOUT_MS)}ms` + (lastError === void 0 ? "" : ` (last error: ${lastError})`) + (lastRejection === void 0 ? "" : ` (${lastRejection})`) + `. Daemon log: ${paths.frontdoorLogPath}`
61904
+ `the front door did not become ready within ${String(FRONTDOOR_START_TIMEOUT_MS)}ms` + (lastError === void 0 ? "" : ` (last error: ${lastError})`) + (lastRejection === void 0 ? "" : ` (${lastRejection})`) + (busyDoor === void 0 ? "" : `. It was not replaced because ${String(busyDoor.sessions)} live session(s) are using it and would lose their connections; run \`agent-shim frontdoor restart\` to replace it deliberately`) + `. Daemon log: ${paths.frontdoorLogPath}`
61879
61905
  );
61880
61906
  }
61881
61907
  ports.sleep(FRONTDOOR_LAUNCHER_POLL_MS);
@@ -61898,7 +61924,7 @@ function restartFrontDoor(params) {
61898
61924
  }
61899
61925
  return { action: "restarted", previousPid, pid };
61900
61926
  }
61901
- var import_node_crypto10, FRONTDOOR_START_TIMEOUT_MS, FRONTDOOR_LAUNCHER_POLL_MS, FRONTDOOR_PROBE_ATTEMPTS, FrontDoorStartError;
61927
+ var import_node_crypto10, FRONTDOOR_START_TIMEOUT_MS, FRONTDOOR_LAUNCHER_POLL_MS, FRONTDOOR_PROBE_ATTEMPTS, FRONTDOOR_EXIT_GRACE_MS, FrontDoorStartError;
61902
61928
  var init_ensure2 = __esm({
61903
61929
  "src/frontdoor/ensure.ts"() {
61904
61930
  "use strict";
@@ -61909,6 +61935,7 @@ var init_ensure2 = __esm({
61909
61935
  FRONTDOOR_START_TIMEOUT_MS = 3e4;
61910
61936
  FRONTDOOR_LAUNCHER_POLL_MS = 100;
61911
61937
  FRONTDOOR_PROBE_ATTEMPTS = 3;
61938
+ FRONTDOOR_EXIT_GRACE_MS = 5e3;
61912
61939
  FrontDoorStartError = class extends CliError {
61913
61940
  constructor(message) {
61914
61941
  super(message);
@@ -62038,6 +62065,9 @@ function realEnsurePorts(paths, spawnDaemon) {
62038
62065
  stopSupervisor: (pid) => {
62039
62066
  process.kill(pid, "SIGTERM");
62040
62067
  },
62068
+ killSupervisor: (pid) => {
62069
+ process.kill(pid, "SIGKILL");
62070
+ },
62041
62071
  // Read fresh for each probe: a replacement supervisor may have regenerated an unparseable CA, and the probe must trust exactly what the serving door's leaf chains to.
62042
62072
  verifyListener: (port) => probeFrontDoorSync(port, import_node_fs13.default.readFileSync(paths.frontdoorCaCertFile, "utf8"))
62043
62073
  };
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: "11.5.0",
2761
+ version: "11.5.2",
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>",
@@ -6758,6 +6758,10 @@ function ensureFrontDoor(params) {
6758
6758
  let replaced = false;
6759
6759
  const distrusted = /* @__PURE__ */ new Set();
6760
6760
  let lastRejection;
6761
+ let busyDoor;
6762
+ const liveSessionsOn = (doorPid) => listFrontDoorSessions(ports.fs, paths.frontdoorSessionsDir).filter(
6763
+ (session) => session.pid !== params.launcherPid && ports.isRunning(session.pid) && (session.supervisorPid === void 0 || session.supervisorPid === doorPid)
6764
+ ).length;
6761
6765
  const verifyWithRetry = (port) => {
6762
6766
  let verdict = ports.verifyListener(port);
6763
6767
  for (let attempt = 1; !verdict.ok && attempt < FRONTDOOR_PROBE_ATTEMPTS; attempt += 1) {
@@ -6768,7 +6772,13 @@ function ensureFrontDoor(params) {
6768
6772
  };
6769
6773
  const stopAndAwaitExit = (supervisorPid, failure) => {
6770
6774
  ports.stopSupervisor(supervisorPid);
6775
+ const graceEnds = ports.now() + FRONTDOOR_EXIT_GRACE_MS;
6776
+ let killed = false;
6771
6777
  while (ports.isRunning(supervisorPid)) {
6778
+ if (!killed && ports.now() >= graceEnds) {
6779
+ ports.killSupervisor(supervisorPid);
6780
+ killed = true;
6781
+ }
6772
6782
  if (ports.now() >= deadline) {
6773
6783
  throw new FrontDoorStartError(`${failure}. Daemon log: ${paths.frontdoorLogPath}`);
6774
6784
  }
@@ -6780,6 +6790,11 @@ function ensureFrontDoor(params) {
6780
6790
  const supervisorPid = state?.supervisorPid;
6781
6791
  if (supervisorPid !== void 0 && !distrusted.has(supervisorPid) && ports.isRunning(supervisorPid)) {
6782
6792
  if (state?.port !== void 0 && state.connectPort !== void 0) {
6793
+ if (supervisorPid === params.launcherPid && params.replace !== true && ports.isFrontDoorSupervisor(supervisorPid)) {
6794
+ const token = (0, import_node_crypto9.randomUUID)();
6795
+ writeFrontDoorSession(ports.fs, paths.frontdoorSessionsDir, { pid: params.launcherPid, startedAt: ports.now(), token, supervisorPid });
6796
+ return { port: state.port, connectPort: state.connectPort, token };
6797
+ }
6783
6798
  const verdict = verifyWithRetry(state.port);
6784
6799
  if (verdict.ok && !replaced && !spawned && (params.replace === true || (state.protocol ?? 0) < FRONT_DOOR_PROTOCOL)) {
6785
6800
  stopAndAwaitExit(
@@ -6799,11 +6814,22 @@ function ensureFrontDoor(params) {
6799
6814
  throw new FrontDoorStartError(`${lastRejection}; refusing to send this session's credentials to it. Daemon log: ${paths.frontdoorLogPath}`);
6800
6815
  }
6801
6816
  if (ports.isFrontDoorSupervisor(supervisorPid)) {
6802
- stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
6817
+ const stranded = liveSessionsOn(supervisorPid);
6818
+ if (params.replace === true && !replaced) {
6819
+ stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
6820
+ replaced = true;
6821
+ continue;
6822
+ }
6823
+ if (stranded > 0) {
6824
+ busyDoor = { pid: supervisorPid, sessions: stranded };
6825
+ } else {
6826
+ stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
6827
+ continue;
6828
+ }
6829
+ } else {
6830
+ distrusted.add(supervisorPid);
6803
6831
  continue;
6804
6832
  }
6805
- distrusted.add(supervisorPid);
6806
- continue;
6807
6833
  }
6808
6834
  if (state?.lastError !== void 0) {
6809
6835
  throw new FrontDoorStartError(`the front door reported a fatal error and is not serving: ${state.lastError} (daemon log: ${paths.frontdoorLogPath})`);
@@ -6826,13 +6852,13 @@ function ensureFrontDoor(params) {
6826
6852
  if (ports.now() >= deadline) {
6827
6853
  const lastError = state?.lastError;
6828
6854
  throw new FrontDoorStartError(
6829
- `the front door did not become ready within ${String(FRONTDOOR_START_TIMEOUT_MS)}ms` + (lastError === void 0 ? "" : ` (last error: ${lastError})`) + (lastRejection === void 0 ? "" : ` (${lastRejection})`) + `. Daemon log: ${paths.frontdoorLogPath}`
6855
+ `the front door did not become ready within ${String(FRONTDOOR_START_TIMEOUT_MS)}ms` + (lastError === void 0 ? "" : ` (last error: ${lastError})`) + (lastRejection === void 0 ? "" : ` (${lastRejection})`) + (busyDoor === void 0 ? "" : `. It was not replaced because ${String(busyDoor.sessions)} live session(s) are using it and would lose their connections; run \`agent-shim frontdoor restart\` to replace it deliberately`) + `. Daemon log: ${paths.frontdoorLogPath}`
6830
6856
  );
6831
6857
  }
6832
6858
  ports.sleep(FRONTDOOR_LAUNCHER_POLL_MS);
6833
6859
  }
6834
6860
  }
6835
- var import_node_crypto9, FRONTDOOR_START_TIMEOUT_MS, FRONTDOOR_LAUNCHER_POLL_MS, FRONTDOOR_PROBE_ATTEMPTS, FrontDoorStartError;
6861
+ var import_node_crypto9, FRONTDOOR_START_TIMEOUT_MS, FRONTDOOR_LAUNCHER_POLL_MS, FRONTDOOR_PROBE_ATTEMPTS, FRONTDOOR_EXIT_GRACE_MS, FrontDoorStartError;
6836
6862
  var init_ensure2 = __esm({
6837
6863
  "src/frontdoor/ensure.ts"() {
6838
6864
  "use strict";
@@ -6843,6 +6869,7 @@ var init_ensure2 = __esm({
6843
6869
  FRONTDOOR_START_TIMEOUT_MS = 3e4;
6844
6870
  FRONTDOOR_LAUNCHER_POLL_MS = 100;
6845
6871
  FRONTDOOR_PROBE_ATTEMPTS = 3;
6872
+ FRONTDOOR_EXIT_GRACE_MS = 5e3;
6846
6873
  FrontDoorStartError = class extends CliError {
6847
6874
  constructor(message) {
6848
6875
  super(message);
@@ -8130,6 +8157,9 @@ function realEnsurePorts(paths, spawnDaemon) {
8130
8157
  stopSupervisor: (pid) => {
8131
8158
  process.kill(pid, "SIGTERM");
8132
8159
  },
8160
+ killSupervisor: (pid) => {
8161
+ process.kill(pid, "SIGKILL");
8162
+ },
8133
8163
  // Read fresh for each probe: a replacement supervisor may have regenerated an unparseable CA, and the probe must trust exactly what the serving door's leaf chains to.
8134
8164
  verifyListener: (port) => probeFrontDoorSync(port, import_node_fs11.default.readFileSync(paths.frontdoorCaCertFile, "utf8"))
8135
8165
  };
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: "11.5.0",
2737
+ version: "11.5.2",
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>",
@@ -6732,6 +6732,10 @@ function ensureFrontDoor(params) {
6732
6732
  let replaced = false;
6733
6733
  const distrusted = /* @__PURE__ */ new Set();
6734
6734
  let lastRejection;
6735
+ let busyDoor;
6736
+ const liveSessionsOn = (doorPid) => listFrontDoorSessions(ports.fs, paths.frontdoorSessionsDir).filter(
6737
+ (session) => session.pid !== params.launcherPid && ports.isRunning(session.pid) && (session.supervisorPid === void 0 || session.supervisorPid === doorPid)
6738
+ ).length;
6735
6739
  const verifyWithRetry = (port) => {
6736
6740
  let verdict = ports.verifyListener(port);
6737
6741
  for (let attempt = 1; !verdict.ok && attempt < FRONTDOOR_PROBE_ATTEMPTS; attempt += 1) {
@@ -6742,7 +6746,13 @@ function ensureFrontDoor(params) {
6742
6746
  };
6743
6747
  const stopAndAwaitExit = (supervisorPid, failure) => {
6744
6748
  ports.stopSupervisor(supervisorPid);
6749
+ const graceEnds = ports.now() + FRONTDOOR_EXIT_GRACE_MS;
6750
+ let killed = false;
6745
6751
  while (ports.isRunning(supervisorPid)) {
6752
+ if (!killed && ports.now() >= graceEnds) {
6753
+ ports.killSupervisor(supervisorPid);
6754
+ killed = true;
6755
+ }
6746
6756
  if (ports.now() >= deadline) {
6747
6757
  throw new FrontDoorStartError(`${failure}. Daemon log: ${paths.frontdoorLogPath}`);
6748
6758
  }
@@ -6754,6 +6764,11 @@ function ensureFrontDoor(params) {
6754
6764
  const supervisorPid = state?.supervisorPid;
6755
6765
  if (supervisorPid !== void 0 && !distrusted.has(supervisorPid) && ports.isRunning(supervisorPid)) {
6756
6766
  if (state?.port !== void 0 && state.connectPort !== void 0) {
6767
+ if (supervisorPid === params.launcherPid && params.replace !== true && ports.isFrontDoorSupervisor(supervisorPid)) {
6768
+ const token = randomUUID3();
6769
+ writeFrontDoorSession(ports.fs, paths.frontdoorSessionsDir, { pid: params.launcherPid, startedAt: ports.now(), token, supervisorPid });
6770
+ return { port: state.port, connectPort: state.connectPort, token };
6771
+ }
6757
6772
  const verdict = verifyWithRetry(state.port);
6758
6773
  if (verdict.ok && !replaced && !spawned && (params.replace === true || (state.protocol ?? 0) < FRONT_DOOR_PROTOCOL)) {
6759
6774
  stopAndAwaitExit(
@@ -6773,11 +6788,22 @@ function ensureFrontDoor(params) {
6773
6788
  throw new FrontDoorStartError(`${lastRejection}; refusing to send this session's credentials to it. Daemon log: ${paths.frontdoorLogPath}`);
6774
6789
  }
6775
6790
  if (ports.isFrontDoorSupervisor(supervisorPid)) {
6776
- stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
6791
+ const stranded = liveSessionsOn(supervisorPid);
6792
+ if (params.replace === true && !replaced) {
6793
+ stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
6794
+ replaced = true;
6795
+ continue;
6796
+ }
6797
+ if (stranded > 0) {
6798
+ busyDoor = { pid: supervisorPid, sessions: stranded };
6799
+ } else {
6800
+ stopAndAwaitExit(supervisorPid, `the front door (pid ${String(supervisorPid)}) stopped answering and did not exit when asked to`);
6801
+ continue;
6802
+ }
6803
+ } else {
6804
+ distrusted.add(supervisorPid);
6777
6805
  continue;
6778
6806
  }
6779
- distrusted.add(supervisorPid);
6780
- continue;
6781
6807
  }
6782
6808
  if (state?.lastError !== void 0) {
6783
6809
  throw new FrontDoorStartError(`the front door reported a fatal error and is not serving: ${state.lastError} (daemon log: ${paths.frontdoorLogPath})`);
@@ -6800,13 +6826,13 @@ function ensureFrontDoor(params) {
6800
6826
  if (ports.now() >= deadline) {
6801
6827
  const lastError = state?.lastError;
6802
6828
  throw new FrontDoorStartError(
6803
- `the front door did not become ready within ${String(FRONTDOOR_START_TIMEOUT_MS)}ms` + (lastError === void 0 ? "" : ` (last error: ${lastError})`) + (lastRejection === void 0 ? "" : ` (${lastRejection})`) + `. Daemon log: ${paths.frontdoorLogPath}`
6829
+ `the front door did not become ready within ${String(FRONTDOOR_START_TIMEOUT_MS)}ms` + (lastError === void 0 ? "" : ` (last error: ${lastError})`) + (lastRejection === void 0 ? "" : ` (${lastRejection})`) + (busyDoor === void 0 ? "" : `. It was not replaced because ${String(busyDoor.sessions)} live session(s) are using it and would lose their connections; run \`agent-shim frontdoor restart\` to replace it deliberately`) + `. Daemon log: ${paths.frontdoorLogPath}`
6804
6830
  );
6805
6831
  }
6806
6832
  ports.sleep(FRONTDOOR_LAUNCHER_POLL_MS);
6807
6833
  }
6808
6834
  }
6809
- var FRONTDOOR_START_TIMEOUT_MS, FRONTDOOR_LAUNCHER_POLL_MS, FRONTDOOR_PROBE_ATTEMPTS, FrontDoorStartError;
6835
+ var FRONTDOOR_START_TIMEOUT_MS, FRONTDOOR_LAUNCHER_POLL_MS, FRONTDOOR_PROBE_ATTEMPTS, FRONTDOOR_EXIT_GRACE_MS, FrontDoorStartError;
6810
6836
  var init_ensure2 = __esm({
6811
6837
  "src/frontdoor/ensure.ts"() {
6812
6838
  "use strict";
@@ -6816,6 +6842,7 @@ var init_ensure2 = __esm({
6816
6842
  FRONTDOOR_START_TIMEOUT_MS = 3e4;
6817
6843
  FRONTDOOR_LAUNCHER_POLL_MS = 100;
6818
6844
  FRONTDOOR_PROBE_ATTEMPTS = 3;
6845
+ FRONTDOOR_EXIT_GRACE_MS = 5e3;
6819
6846
  FrontDoorStartError = class extends CliError {
6820
6847
  constructor(message) {
6821
6848
  super(message);
@@ -8102,6 +8129,9 @@ function realEnsurePorts(paths, spawnDaemon) {
8102
8129
  stopSupervisor: (pid) => {
8103
8130
  process.kill(pid, "SIGTERM");
8104
8131
  },
8132
+ killSupervisor: (pid) => {
8133
+ process.kill(pid, "SIGKILL");
8134
+ },
8105
8135
  // Read fresh for each probe: a replacement supervisor may have regenerated an unparseable CA, and the probe must trust exactly what the serving door's leaf chains to.
8106
8136
  verifyListener: (port) => probeFrontDoorSync(port, fs11.readFileSync(paths.frontdoorCaCertFile, "utf8"))
8107
8137
  };
@@ -5656,7 +5656,6 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
5656
5656
  kind: zod.ZodLiteral<"profile">;
5657
5657
  name: zod.ZodString;
5658
5658
  value: zod.ZodObject<{
5659
- description: zod.ZodOptional<zod.ZodString>;
5660
5659
  entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
5661
5660
  value: zod.ZodBoolean;
5662
5661
  when: zod.ZodUnion<readonly [zod.ZodObject<{
@@ -5732,6 +5731,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
5732
5731
  key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
5733
5732
  }, zod_v4_core.$strip>], "kind">]>;
5734
5733
  }, zod_v4_core.$strict>]>>>;
5734
+ description: zod.ZodOptional<zod.ZodString>;
5735
5735
  extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
5736
5736
  categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
5737
5737
  all: zod.ZodOptional<zod.ZodBoolean>;
@@ -5775,7 +5775,6 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
5775
5775
  kind: zod.ZodLiteral<"profile">;
5776
5776
  name: zod.ZodString;
5777
5777
  value: zod.ZodObject<{
5778
- description: zod.ZodOptional<zod.ZodString>;
5779
5778
  entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
5780
5779
  value: zod.ZodBoolean;
5781
5780
  when: zod.ZodUnion<readonly [zod.ZodObject<{
@@ -5851,6 +5850,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
5851
5850
  key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
5852
5851
  }, zod_v4_core.$strip>], "kind">]>;
5853
5852
  }, zod_v4_core.$strict>]>>>;
5853
+ description: zod.ZodOptional<zod.ZodString>;
5854
5854
  extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
5855
5855
  categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
5856
5856
  all: zod.ZodOptional<zod.ZodBoolean>;
@@ -8606,7 +8606,6 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
8606
8606
  kind: zod.ZodLiteral<"profile">;
8607
8607
  name: zod.ZodString;
8608
8608
  value: zod.ZodObject<{
8609
- description: zod.ZodOptional<zod.ZodString>;
8610
8609
  entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
8611
8610
  value: zod.ZodBoolean;
8612
8611
  when: zod.ZodUnion<readonly [zod.ZodObject<{
@@ -8682,6 +8681,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
8682
8681
  key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
8683
8682
  }, zod_v4_core.$strip>], "kind">]>;
8684
8683
  }, zod_v4_core.$strict>]>>>;
8684
+ description: zod.ZodOptional<zod.ZodString>;
8685
8685
  extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
8686
8686
  categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
8687
8687
  all: zod.ZodOptional<zod.ZodBoolean>;
@@ -8725,7 +8725,6 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
8725
8725
  kind: zod.ZodLiteral<"profile">;
8726
8726
  name: zod.ZodString;
8727
8727
  value: zod.ZodObject<{
8728
- description: zod.ZodOptional<zod.ZodString>;
8729
8728
  entries: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<readonly [zod.ZodBoolean, zod.ZodObject<{
8730
8729
  value: zod.ZodBoolean;
8731
8730
  when: zod.ZodUnion<readonly [zod.ZodObject<{
@@ -8801,6 +8800,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
8801
8800
  key: zod.ZodType<trilean.JsonValue, unknown, zod_v4_core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
8802
8801
  }, zod_v4_core.$strip>], "kind">]>;
8803
8802
  }, zod_v4_core.$strict>]>>>;
8803
+ description: zod.ZodOptional<zod.ZodString>;
8804
8804
  extends: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
8805
8805
  categories: zod.ZodOptional<zod.ZodPipe<zod.ZodObject<{
8806
8806
  all: zod.ZodOptional<zod.ZodBoolean>;
@@ -10714,7 +10714,6 @@ declare const ConfigProfileAddOutputSchema: z.ZodObject<{
10714
10714
  kind: z.ZodLiteral<"profile">;
10715
10715
  name: z.ZodString;
10716
10716
  value: z.ZodObject<{
10717
- description: z.ZodOptional<z.ZodString>;
10718
10717
  entries: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
10719
10718
  value: z.ZodBoolean;
10720
10719
  when: z.ZodUnion<readonly [z.ZodObject<{
@@ -10790,6 +10789,7 @@ declare const ConfigProfileAddOutputSchema: z.ZodObject<{
10790
10789
  key: z.ZodType<trilean.JsonValue, unknown, z.core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
10791
10790
  }, z.core.$strip>], "kind">]>;
10792
10791
  }, z.core.$strict>]>>>;
10792
+ description: z.ZodOptional<z.ZodString>;
10793
10793
  extends: z.ZodOptional<z.ZodArray<z.ZodString>>;
10794
10794
  categories: z.ZodOptional<z.ZodPipe<z.ZodObject<{
10795
10795
  all: z.ZodOptional<z.ZodBoolean>;
@@ -10835,7 +10835,6 @@ declare const ConfigProfileSetOutputSchema: z.ZodObject<{
10835
10835
  kind: z.ZodLiteral<"profile">;
10836
10836
  name: z.ZodString;
10837
10837
  value: z.ZodObject<{
10838
- description: z.ZodOptional<z.ZodString>;
10839
10838
  entries: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
10840
10839
  value: z.ZodBoolean;
10841
10840
  when: z.ZodUnion<readonly [z.ZodObject<{
@@ -10911,6 +10910,7 @@ declare const ConfigProfileSetOutputSchema: z.ZodObject<{
10911
10910
  key: z.ZodType<trilean.JsonValue, unknown, z.core.$ZodTypeInternals<trilean.JsonValue, unknown>>;
10912
10911
  }, z.core.$strip>], "kind">]>;
10913
10912
  }, z.core.$strict>]>>>;
10913
+ description: z.ZodOptional<z.ZodString>;
10914
10914
  extends: z.ZodOptional<z.ZodArray<z.ZodString>>;
10915
10915
  categories: z.ZodOptional<z.ZodPipe<z.ZodObject<{
10916
10916
  all: z.ZodOptional<z.ZodBoolean>;
@@ -12533,6 +12533,8 @@ interface EnsureFrontDoorPorts {
12533
12533
  readonly verifyListener: (port: number) => ListenerVerdict;
12534
12534
  /** Asks a running front-door supervisor to exit, without waiting for it to: the caller polls `isRunning`. Only ever called for a pid whose recorded listener has just authenticated as agent-shim's own, or whose process is agent-shim's front-door supervisor (`isFrontDoorSupervisor`). */
12535
12535
  readonly stopSupervisor: (pid: number) => void;
12536
+ /** Ends a supervisor that did not exit when asked to, without giving it the chance to refuse: a door whose event loop is blocked never runs its signal handler. Called only for a pid `isFrontDoorSupervisor` has just confirmed, after `stopSupervisor` and a grace period. */
12537
+ readonly killSupervisor: (pid: number) => void;
12536
12538
  /** Whether `pid` is a live agent-shim front-door supervisor process, read from the process's own command line. This is what separates a wedged door of this tool, which a replacement must retire so the two never coexist, from an unrelated process that reuses the recorded pid, which must never be signalled. */
12537
12539
  readonly isFrontDoorSupervisor: (pid: number) => boolean;
12538
12540
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-use",
3
- "version": "11.5.0",
3
+ "version": "11.5.2",
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>",