agent-shim 11.5.1 → 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: "agent-shim",
33979
- version: "11.5.1",
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>",
@@ -61821,7 +61821,13 @@ function ensureFrontDoor(params) {
61821
61821
  };
61822
61822
  const stopAndAwaitExit = (supervisorPid, failure2) => {
61823
61823
  ports.stopSupervisor(supervisorPid);
61824
+ const graceEnds = ports.now() + FRONTDOOR_EXIT_GRACE_MS;
61825
+ let killed = false;
61824
61826
  while (ports.isRunning(supervisorPid)) {
61827
+ if (!killed && ports.now() >= graceEnds) {
61828
+ ports.killSupervisor(supervisorPid);
61829
+ killed = true;
61830
+ }
61825
61831
  if (ports.now() >= deadline) {
61826
61832
  throw new FrontDoorStartError(`${failure2}. Daemon log: ${paths.frontdoorLogPath}`);
61827
61833
  }
@@ -61833,6 +61839,11 @@ function ensureFrontDoor(params) {
61833
61839
  const supervisorPid = state?.supervisorPid;
61834
61840
  if (supervisorPid !== void 0 && !distrusted.has(supervisorPid) && ports.isRunning(supervisorPid)) {
61835
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
+ }
61836
61847
  const verdict = verifyWithRetry(state.port);
61837
61848
  if (verdict.ok && !replaced && !spawned && (params.replace === true || (state.protocol ?? 0) < FRONT_DOOR_PROTOCOL)) {
61838
61849
  stopAndAwaitExit(
@@ -61853,6 +61864,11 @@ function ensureFrontDoor(params) {
61853
61864
  }
61854
61865
  if (ports.isFrontDoorSupervisor(supervisorPid)) {
61855
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
+ }
61856
61872
  if (stranded > 0) {
61857
61873
  busyDoor = { pid: supervisorPid, sessions: stranded };
61858
61874
  } else {
@@ -61908,7 +61924,7 @@ function restartFrontDoor(params) {
61908
61924
  }
61909
61925
  return { action: "restarted", previousPid, pid };
61910
61926
  }
61911
- 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;
61912
61928
  var init_ensure2 = __esm({
61913
61929
  "src/frontdoor/ensure.ts"() {
61914
61930
  "use strict";
@@ -61919,6 +61935,7 @@ var init_ensure2 = __esm({
61919
61935
  FRONTDOOR_START_TIMEOUT_MS = 3e4;
61920
61936
  FRONTDOOR_LAUNCHER_POLL_MS = 100;
61921
61937
  FRONTDOOR_PROBE_ATTEMPTS = 3;
61938
+ FRONTDOOR_EXIT_GRACE_MS = 5e3;
61922
61939
  FrontDoorStartError = class extends CliError {
61923
61940
  constructor(message) {
61924
61941
  super(message);
@@ -62048,6 +62065,9 @@ function realEnsurePorts(paths, spawnDaemon) {
62048
62065
  stopSupervisor: (pid) => {
62049
62066
  process.kill(pid, "SIGTERM");
62050
62067
  },
62068
+ killSupervisor: (pid) => {
62069
+ process.kill(pid, "SIGKILL");
62070
+ },
62051
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.
62052
62072
  verifyListener: (port) => probeFrontDoorSync(port, import_node_fs13.default.readFileSync(paths.frontdoorCaCertFile, "utf8"))
62053
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: "agent-shim",
2761
- version: "11.5.1",
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>",
@@ -6772,7 +6772,13 @@ function ensureFrontDoor(params) {
6772
6772
  };
6773
6773
  const stopAndAwaitExit = (supervisorPid, failure) => {
6774
6774
  ports.stopSupervisor(supervisorPid);
6775
+ const graceEnds = ports.now() + FRONTDOOR_EXIT_GRACE_MS;
6776
+ let killed = false;
6775
6777
  while (ports.isRunning(supervisorPid)) {
6778
+ if (!killed && ports.now() >= graceEnds) {
6779
+ ports.killSupervisor(supervisorPid);
6780
+ killed = true;
6781
+ }
6776
6782
  if (ports.now() >= deadline) {
6777
6783
  throw new FrontDoorStartError(`${failure}. Daemon log: ${paths.frontdoorLogPath}`);
6778
6784
  }
@@ -6784,6 +6790,11 @@ function ensureFrontDoor(params) {
6784
6790
  const supervisorPid = state?.supervisorPid;
6785
6791
  if (supervisorPid !== void 0 && !distrusted.has(supervisorPid) && ports.isRunning(supervisorPid)) {
6786
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
+ }
6787
6798
  const verdict = verifyWithRetry(state.port);
6788
6799
  if (verdict.ok && !replaced && !spawned && (params.replace === true || (state.protocol ?? 0) < FRONT_DOOR_PROTOCOL)) {
6789
6800
  stopAndAwaitExit(
@@ -6804,6 +6815,11 @@ function ensureFrontDoor(params) {
6804
6815
  }
6805
6816
  if (ports.isFrontDoorSupervisor(supervisorPid)) {
6806
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
+ }
6807
6823
  if (stranded > 0) {
6808
6824
  busyDoor = { pid: supervisorPid, sessions: stranded };
6809
6825
  } else {
@@ -6842,7 +6858,7 @@ function ensureFrontDoor(params) {
6842
6858
  ports.sleep(FRONTDOOR_LAUNCHER_POLL_MS);
6843
6859
  }
6844
6860
  }
6845
- 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;
6846
6862
  var init_ensure2 = __esm({
6847
6863
  "src/frontdoor/ensure.ts"() {
6848
6864
  "use strict";
@@ -6853,6 +6869,7 @@ var init_ensure2 = __esm({
6853
6869
  FRONTDOOR_START_TIMEOUT_MS = 3e4;
6854
6870
  FRONTDOOR_LAUNCHER_POLL_MS = 100;
6855
6871
  FRONTDOOR_PROBE_ATTEMPTS = 3;
6872
+ FRONTDOOR_EXIT_GRACE_MS = 5e3;
6856
6873
  FrontDoorStartError = class extends CliError {
6857
6874
  constructor(message) {
6858
6875
  super(message);
@@ -8140,6 +8157,9 @@ function realEnsurePorts(paths, spawnDaemon) {
8140
8157
  stopSupervisor: (pid) => {
8141
8158
  process.kill(pid, "SIGTERM");
8142
8159
  },
8160
+ killSupervisor: (pid) => {
8161
+ process.kill(pid, "SIGKILL");
8162
+ },
8143
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.
8144
8164
  verifyListener: (port) => probeFrontDoorSync(port, import_node_fs11.default.readFileSync(paths.frontdoorCaCertFile, "utf8"))
8145
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: "agent-shim",
2737
- version: "11.5.1",
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>",
@@ -6746,7 +6746,13 @@ function ensureFrontDoor(params) {
6746
6746
  };
6747
6747
  const stopAndAwaitExit = (supervisorPid, failure) => {
6748
6748
  ports.stopSupervisor(supervisorPid);
6749
+ const graceEnds = ports.now() + FRONTDOOR_EXIT_GRACE_MS;
6750
+ let killed = false;
6749
6751
  while (ports.isRunning(supervisorPid)) {
6752
+ if (!killed && ports.now() >= graceEnds) {
6753
+ ports.killSupervisor(supervisorPid);
6754
+ killed = true;
6755
+ }
6750
6756
  if (ports.now() >= deadline) {
6751
6757
  throw new FrontDoorStartError(`${failure}. Daemon log: ${paths.frontdoorLogPath}`);
6752
6758
  }
@@ -6758,6 +6764,11 @@ function ensureFrontDoor(params) {
6758
6764
  const supervisorPid = state?.supervisorPid;
6759
6765
  if (supervisorPid !== void 0 && !distrusted.has(supervisorPid) && ports.isRunning(supervisorPid)) {
6760
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
+ }
6761
6772
  const verdict = verifyWithRetry(state.port);
6762
6773
  if (verdict.ok && !replaced && !spawned && (params.replace === true || (state.protocol ?? 0) < FRONT_DOOR_PROTOCOL)) {
6763
6774
  stopAndAwaitExit(
@@ -6778,6 +6789,11 @@ function ensureFrontDoor(params) {
6778
6789
  }
6779
6790
  if (ports.isFrontDoorSupervisor(supervisorPid)) {
6780
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
+ }
6781
6797
  if (stranded > 0) {
6782
6798
  busyDoor = { pid: supervisorPid, sessions: stranded };
6783
6799
  } else {
@@ -6816,7 +6832,7 @@ function ensureFrontDoor(params) {
6816
6832
  ports.sleep(FRONTDOOR_LAUNCHER_POLL_MS);
6817
6833
  }
6818
6834
  }
6819
- 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;
6820
6836
  var init_ensure2 = __esm({
6821
6837
  "src/frontdoor/ensure.ts"() {
6822
6838
  "use strict";
@@ -6826,6 +6842,7 @@ var init_ensure2 = __esm({
6826
6842
  FRONTDOOR_START_TIMEOUT_MS = 3e4;
6827
6843
  FRONTDOOR_LAUNCHER_POLL_MS = 100;
6828
6844
  FRONTDOOR_PROBE_ATTEMPTS = 3;
6845
+ FRONTDOOR_EXIT_GRACE_MS = 5e3;
6829
6846
  FrontDoorStartError = class extends CliError {
6830
6847
  constructor(message) {
6831
6848
  super(message);
@@ -8112,6 +8129,9 @@ function realEnsurePorts(paths, spawnDaemon) {
8112
8129
  stopSupervisor: (pid) => {
8113
8130
  process.kill(pid, "SIGTERM");
8114
8131
  },
8132
+ killSupervisor: (pid) => {
8133
+ process.kill(pid, "SIGKILL");
8134
+ },
8115
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.
8116
8136
  verifyListener: (port) => probeFrontDoorSync(port, fs11.readFileSync(paths.frontdoorCaCertFile, "utf8"))
8117
8137
  };
@@ -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
- lossless: "lossless";
1336
1335
  none: "none";
1336
+ lossless: "lossless";
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
- lossless: "lossless";
1464
1463
  none: "none";
1464
+ lossless: "lossless";
1465
1465
  }>>;
1466
1466
  rolloutChannel: z.ZodOptional<z.ZodEnum<{
1467
1467
  beta: "beta";
@@ -4163,12 +4163,12 @@ declare const CheckReportJsonSchema: z.ZodObject<{
4163
4163
  identity: z.ZodObject<{
4164
4164
  name: z.ZodNullable<z.ZodString>;
4165
4165
  source: z.ZodEnum<{
4166
- env: "env";
4167
- none: "none";
4168
4166
  "config-dir-escape-hatch": "config-dir-escape-hatch";
4169
4167
  argv: "argv";
4168
+ env: "env";
4170
4169
  "directory-pin": "directory-pin";
4171
4170
  "active-identity-file": "active-identity-file";
4171
+ none: "none";
4172
4172
  }>;
4173
4173
  }, z.core.$strict>;
4174
4174
  pool: z.ZodOptional<z.ZodObject<{
@@ -4246,11 +4246,11 @@ declare const CheckReportJsonSchema: z.ZodObject<{
4246
4246
  "category-default": "category-default";
4247
4247
  }>;
4248
4248
  category: z.ZodNullable<z.ZodEnum<{
4249
+ secret: "secret";
4249
4250
  runtime: "runtime";
4250
4251
  history: "history";
4251
4252
  knowledge: "knowledge";
4252
4253
  settings: "settings";
4253
- secret: "secret";
4254
4254
  }>>;
4255
4255
  rule: z.ZodOptional<z.ZodObject<{
4256
4256
  key: z.ZodString;
@@ -6942,9 +6942,9 @@ declare function createLifecycleApiRouter(deps: LifecycleApiDeps): {
6942
6942
  current: zod.ZodString;
6943
6943
  latest: zod.ZodString;
6944
6944
  action: zod.ZodEnum<{
6945
- updated: "updated";
6946
6945
  current: "current";
6947
6946
  available: "available";
6947
+ updated: "updated";
6948
6948
  }>;
6949
6949
  }, zod_v4_core.$strict>, MergedErrorMap<$ErrorMap, TErrorMap>>;
6950
6950
  };
@@ -7191,12 +7191,12 @@ declare function createLaunchApiRouter(deps: LaunchApiDeps): {
7191
7191
  decision: zod.ZodObject<{
7192
7192
  identity: zod.ZodOptional<zod.ZodString>;
7193
7193
  identitySource: zod.ZodEnum<{
7194
- env: "env";
7195
- none: "none";
7196
7194
  "config-dir-escape-hatch": "config-dir-escape-hatch";
7197
7195
  argv: "argv";
7196
+ env: "env";
7198
7197
  "directory-pin": "directory-pin";
7199
7198
  "active-identity-file": "active-identity-file";
7199
+ none: "none";
7200
7200
  }>;
7201
7201
  pool: zod.ZodOptional<zod.ZodObject<{
7202
7202
  name: zod.ZodString;
@@ -7791,12 +7791,12 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
7791
7791
  identity: zod.ZodObject<{
7792
7792
  name: zod.ZodNullable<zod.ZodString>;
7793
7793
  source: zod.ZodEnum<{
7794
- env: "env";
7795
- none: "none";
7796
7794
  "config-dir-escape-hatch": "config-dir-escape-hatch";
7797
7795
  argv: "argv";
7796
+ env: "env";
7798
7797
  "directory-pin": "directory-pin";
7799
7798
  "active-identity-file": "active-identity-file";
7799
+ none: "none";
7800
7800
  }>;
7801
7801
  }, zod_v4_core.$strict>;
7802
7802
  pool: zod.ZodOptional<zod.ZodObject<{
@@ -7874,11 +7874,11 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
7874
7874
  "category-default": "category-default";
7875
7875
  }>;
7876
7876
  category: zod.ZodNullable<zod.ZodEnum<{
7877
+ secret: "secret";
7877
7878
  runtime: "runtime";
7878
7879
  history: "history";
7879
7880
  knowledge: "knowledge";
7880
7881
  settings: "settings";
7881
- secret: "secret";
7882
7882
  }>>;
7883
7883
  rule: zod.ZodOptional<zod.ZodObject<{
7884
7884
  key: zod.ZodString;
@@ -8097,11 +8097,10 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
8097
8097
  "global-config": "global-config";
8098
8098
  "config-profile": "config-profile";
8099
8099
  identity: "identity";
8100
- keychain: "keychain";
8101
8100
  provider: "provider";
8102
- headroom: "headroom";
8103
8101
  frontdoor: "frontdoor";
8104
8102
  pool: "pool";
8103
+ keychain: "keychain";
8105
8104
  "ambient-credential": "ambient-credential";
8106
8105
  "binary-discovery": "binary-discovery";
8107
8106
  "claude-shim": "claude-shim";
@@ -8111,6 +8110,7 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
8111
8110
  "directory-rules": "directory-rules";
8112
8111
  "categories-local": "categories-local";
8113
8112
  "active-identity": "active-identity";
8113
+ headroom: "headroom";
8114
8114
  }>;
8115
8115
  subject: zod.ZodOptional<zod.ZodString>;
8116
8116
  severity: zod.ZodEnum<{
@@ -8303,12 +8303,12 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
8303
8303
  decision: zod.ZodObject<{
8304
8304
  identity: zod.ZodOptional<zod.ZodString>;
8305
8305
  identitySource: zod.ZodEnum<{
8306
- env: "env";
8307
- none: "none";
8308
8306
  "config-dir-escape-hatch": "config-dir-escape-hatch";
8309
8307
  argv: "argv";
8308
+ env: "env";
8310
8309
  "directory-pin": "directory-pin";
8311
8310
  "active-identity-file": "active-identity-file";
8311
+ none: "none";
8312
8312
  }>;
8313
8313
  pool: zod.ZodOptional<zod.ZodObject<{
8314
8314
  name: zod.ZodString;
@@ -9684,9 +9684,9 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
9684
9684
  current: zod.ZodString;
9685
9685
  latest: zod.ZodString;
9686
9686
  action: zod.ZodEnum<{
9687
- updated: "updated";
9688
9687
  current: "current";
9689
9688
  available: "available";
9689
+ updated: "updated";
9690
9690
  }>;
9691
9691
  }, zod_v4_core.$strict>, MergedErrorMap<$ErrorMap, TErrorMap>>;
9692
9692
  };
@@ -9885,12 +9885,12 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
9885
9885
  identity: zod.ZodObject<{
9886
9886
  name: zod.ZodNullable<zod.ZodString>;
9887
9887
  source: zod.ZodEnum<{
9888
- env: "env";
9889
- none: "none";
9890
9888
  "config-dir-escape-hatch": "config-dir-escape-hatch";
9891
9889
  argv: "argv";
9890
+ env: "env";
9892
9891
  "directory-pin": "directory-pin";
9893
9892
  "active-identity-file": "active-identity-file";
9893
+ none: "none";
9894
9894
  }>;
9895
9895
  }, zod_v4_core.$strict>;
9896
9896
  pool: zod.ZodOptional<zod.ZodObject<{
@@ -9968,11 +9968,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
9968
9968
  "category-default": "category-default";
9969
9969
  }>;
9970
9970
  category: zod.ZodNullable<zod.ZodEnum<{
9971
+ secret: "secret";
9971
9972
  runtime: "runtime";
9972
9973
  history: "history";
9973
9974
  knowledge: "knowledge";
9974
9975
  settings: "settings";
9975
- secret: "secret";
9976
9976
  }>>;
9977
9977
  rule: zod.ZodOptional<zod.ZodObject<{
9978
9978
  key: zod.ZodString;
@@ -10191,11 +10191,10 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
10191
10191
  "global-config": "global-config";
10192
10192
  "config-profile": "config-profile";
10193
10193
  identity: "identity";
10194
- keychain: "keychain";
10195
10194
  provider: "provider";
10196
- headroom: "headroom";
10197
10195
  frontdoor: "frontdoor";
10198
10196
  pool: "pool";
10197
+ keychain: "keychain";
10199
10198
  "ambient-credential": "ambient-credential";
10200
10199
  "binary-discovery": "binary-discovery";
10201
10200
  "claude-shim": "claude-shim";
@@ -10205,6 +10204,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
10205
10204
  "directory-rules": "directory-rules";
10206
10205
  "categories-local": "categories-local";
10207
10206
  "active-identity": "active-identity";
10207
+ headroom: "headroom";
10208
10208
  }>;
10209
10209
  subject: zod.ZodOptional<zod.ZodString>;
10210
10210
  severity: zod.ZodEnum<{
@@ -12037,11 +12037,10 @@ declare const DoctorFindingSchema: z.ZodObject<{
12037
12037
  "global-config": "global-config";
12038
12038
  "config-profile": "config-profile";
12039
12039
  identity: "identity";
12040
- keychain: "keychain";
12041
12040
  provider: "provider";
12042
- headroom: "headroom";
12043
12041
  frontdoor: "frontdoor";
12044
12042
  pool: "pool";
12043
+ keychain: "keychain";
12045
12044
  "ambient-credential": "ambient-credential";
12046
12045
  "binary-discovery": "binary-discovery";
12047
12046
  "claude-shim": "claude-shim";
@@ -12051,6 +12050,7 @@ declare const DoctorFindingSchema: z.ZodObject<{
12051
12050
  "directory-rules": "directory-rules";
12052
12051
  "categories-local": "categories-local";
12053
12052
  "active-identity": "active-identity";
12053
+ headroom: "headroom";
12054
12054
  }>;
12055
12055
  subject: z.ZodOptional<z.ZodString>;
12056
12056
  severity: z.ZodEnum<{
@@ -12068,11 +12068,10 @@ declare const DoctorRunOutputSchema: z.ZodObject<{
12068
12068
  "global-config": "global-config";
12069
12069
  "config-profile": "config-profile";
12070
12070
  identity: "identity";
12071
- keychain: "keychain";
12072
12071
  provider: "provider";
12073
- headroom: "headroom";
12074
12072
  frontdoor: "frontdoor";
12075
12073
  pool: "pool";
12074
+ keychain: "keychain";
12076
12075
  "ambient-credential": "ambient-credential";
12077
12076
  "binary-discovery": "binary-discovery";
12078
12077
  "claude-shim": "claude-shim";
@@ -12082,6 +12081,7 @@ declare const DoctorRunOutputSchema: z.ZodObject<{
12082
12081
  "directory-rules": "directory-rules";
12083
12082
  "categories-local": "categories-local";
12084
12083
  "active-identity": "active-identity";
12084
+ headroom: "headroom";
12085
12085
  }>;
12086
12086
  subject: z.ZodOptional<z.ZodString>;
12087
12087
  severity: z.ZodEnum<{
@@ -12102,9 +12102,9 @@ declare const UpdateCheckOutputSchema: z.ZodObject<{
12102
12102
  current: z.ZodString;
12103
12103
  latest: z.ZodString;
12104
12104
  action: z.ZodEnum<{
12105
- updated: "updated";
12106
12105
  current: "current";
12107
12106
  available: "available";
12107
+ updated: "updated";
12108
12108
  }>;
12109
12109
  }, z.core.$strict>;
12110
12110
  /** 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. */
@@ -12154,12 +12154,12 @@ declare const LaunchResolveOutputSchema: z.ZodObject<{
12154
12154
  decision: z.ZodObject<{
12155
12155
  identity: z.ZodOptional<z.ZodString>;
12156
12156
  identitySource: z.ZodEnum<{
12157
- env: "env";
12158
- none: "none";
12159
12157
  "config-dir-escape-hatch": "config-dir-escape-hatch";
12160
12158
  argv: "argv";
12159
+ env: "env";
12161
12160
  "directory-pin": "directory-pin";
12162
12161
  "active-identity-file": "active-identity-file";
12162
+ none: "none";
12163
12163
  }>;
12164
12164
  pool: z.ZodOptional<z.ZodObject<{
12165
12165
  name: z.ZodString;
@@ -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": "agent-shim",
3
- "version": "11.5.1",
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>",