claude-use 11.27.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/dist/index.cjs CHANGED
@@ -285,7 +285,11 @@ var init_schema = __esm({
285
285
  headroom: import_zod.z.boolean().optional(),
286
286
  trackUsage: import_zod.z.boolean().optional(),
287
287
  /** The exact Claude Code version to run, as it is named in Claude Code's versions directory (`2.1.220`). A pin that is not installed fails the launch; it never falls back to the highest version. */
288
- claudeVersion: import_zod.z.string().regex(NUMERIC_DOTTED_VERSION_RE, "must be an exact dotted-numeric Claude Code version such as 2.1.220").optional()
288
+ claudeVersion: import_zod.z.string().regex(NUMERIC_DOTTED_VERSION_RE, "must be an exact dotted-numeric Claude Code version such as 2.1.220").optional(),
289
+ /** How long the launcher waits after its own output before it starts claude, so that output can be read before Claude Code takes over the terminal (`5s`, `500ms`). Applies only when a terminal is watching. */
290
+ delay: import_zod.z.string().regex(DURATION_RE, "must be a duration such as 5s or 500ms").optional(),
291
+ /** Whether the launcher waits for a key press after its own output before it starts claude. Takes the place of `delay` when both are set. Applies only when a terminal is watching. */
292
+ pause: import_zod.z.boolean().optional()
289
293
  });
290
294
  CREDENTIAL_TARGETS = ["bearer", "apiKey", "oauthToken"];
291
295
  PROVIDER_CREDENTIAL_TARGETS = ["bearer", "apiKey"];
@@ -1388,6 +1392,12 @@ function flattenLayers(layers, options) {
1388
1392
  if (layer.launch.claudeVersion !== void 0) {
1389
1393
  launch.claudeVersion = layer.launch.claudeVersion;
1390
1394
  }
1395
+ if (layer.launch.delay !== void 0) {
1396
+ launch.delay = layer.launch.delay;
1397
+ }
1398
+ if (layer.launch.pause !== void 0) {
1399
+ launch.pause = layer.launch.pause;
1400
+ }
1391
1401
  }
1392
1402
  if (layer.entries === void 0) {
1393
1403
  continue;
@@ -2964,7 +2974,7 @@ var init_package = __esm({
2964
2974
  "package.json"() {
2965
2975
  package_default = {
2966
2976
  name: "claude-use",
2967
- version: "11.27.0",
2977
+ version: "11.28.0",
2968
2978
  description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
2969
2979
  license: "MIT",
2970
2980
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -4402,7 +4412,7 @@ function realResolveClaudeBinary(isOwnBinary) {
4402
4412
  function realInstalledClaudeVersions() {
4403
4413
  return installedVersions(listVersionsDir(defaultVersionsDir()));
4404
4414
  }
4405
- var import_node_child_process2, import_node_crypto8, import_node_fs2, import_node_os2, import_node_path14, import_node_sea, realFsPort, OWNER_ONLY_DIR_MODE, OWNER_ONLY_FILE_MODE, PERMISSION_BITS, realFarmFs, INT32_BYTE_LENGTH, PS_TIMEOUT_MS, realRunPort, MACOS_GUI_SESSION_MANAGER, realCredentialPort, SOCKET_PERMISSION_BITS, realHeadroomSocketTrust, realSpawnPort, realProcPort, realLogPort, EXECUTE_BITS_MASK, WINDOWS_DEFAULT_PATHEXT;
4415
+ var import_node_child_process2, import_node_crypto8, import_node_fs2, import_node_os2, import_node_path14, import_node_sea, realFsPort, OWNER_ONLY_DIR_MODE, OWNER_ONLY_FILE_MODE, PERMISSION_BITS, realFarmFs, INT32_BYTE_LENGTH, KEY_POLL_MS, CTRL_C_BYTE, realHoldPort, PS_TIMEOUT_MS, realRunPort, MACOS_GUI_SESSION_MANAGER, realCredentialPort, SOCKET_PERMISSION_BITS, realHeadroomSocketTrust, realSpawnPort, realProcPort, realLogPort, EXECUTE_BITS_MASK, WINDOWS_DEFAULT_PATHEXT;
4406
4416
  var init_realPorts = __esm({
4407
4417
  "src/realPorts.ts"() {
4408
4418
  "use strict";
@@ -4551,6 +4561,31 @@ var init_realPorts = __esm({
4551
4561
  }
4552
4562
  };
4553
4563
  INT32_BYTE_LENGTH = 4;
4564
+ KEY_POLL_MS = 25;
4565
+ CTRL_C_BYTE = 3;
4566
+ realHoldPort = {
4567
+ attended: () => process.stdin.isTTY && process.stdout.isTTY,
4568
+ sleep: realSleepSync,
4569
+ waitForKey: () => {
4570
+ process.stdin.setRawMode(true);
4571
+ try {
4572
+ const buffer = Buffer.alloc(1);
4573
+ for (; ; ) {
4574
+ try {
4575
+ const read = import_node_fs2.default.readSync(process.stdin.fd, buffer, 0, buffer.length, null);
4576
+ return read > 0 && buffer[0] === CTRL_C_BYTE ? "interrupt" : "key";
4577
+ } catch (error) {
4578
+ if (!(error instanceof Error && "code" in error && error.code === "EAGAIN")) {
4579
+ throw error;
4580
+ }
4581
+ realSleepSync(KEY_POLL_MS);
4582
+ }
4583
+ }
4584
+ } finally {
4585
+ process.stdin.setRawMode(false);
4586
+ }
4587
+ }
4588
+ };
4554
4589
  PS_TIMEOUT_MS = 2e3;
4555
4590
  realRunPort = {
4556
4591
  run(command, args) {
@@ -7391,6 +7426,7 @@ function parseLauncherArgv(argv) {
7391
7426
  let configProfile;
7392
7427
  let provider;
7393
7428
  let claudeVersion;
7429
+ let delay;
7394
7430
  const booleans = {};
7395
7431
  const categoryFlags = [];
7396
7432
  const shareFlags = [];
@@ -7448,6 +7484,9 @@ function parseLauncherArgv(argv) {
7448
7484
  case "--claude-version":
7449
7485
  claudeVersion = value;
7450
7486
  break;
7487
+ case "--delay":
7488
+ delay = value;
7489
+ break;
7451
7490
  case "--category":
7452
7491
  categoryFlags.push(value);
7453
7492
  break;
@@ -7470,6 +7509,7 @@ function parseLauncherArgv(argv) {
7470
7509
  ...configProfile === void 0 ? {} : { configProfile },
7471
7510
  ...provider === void 0 ? {} : { provider },
7472
7511
  ...claudeVersion === void 0 ? {} : { claudeVersion },
7512
+ ...delay === void 0 ? {} : { delay },
7473
7513
  ...native ? { native: true } : {},
7474
7514
  ...booleans,
7475
7515
  categoryFlags,
@@ -7493,13 +7533,14 @@ var init_argv = __esm({
7493
7533
  positional;
7494
7534
  flag;
7495
7535
  };
7496
- VALUED_FLAGS = ["--identity", "--config-profile", "--provider", "--claude-version", "--category", "--share", "--hide"];
7536
+ VALUED_FLAGS = ["--identity", "--config-profile", "--provider", "--claude-version", "--delay", "--category", "--share", "--hide"];
7497
7537
  BOOLEAN_FLAGS = [
7498
7538
  { flag: "--headroom", key: "headroom" },
7499
7539
  { flag: "--track-usage", key: "trackUsage" },
7500
7540
  { flag: "--skip-permissions", key: "skipPermissions" },
7501
7541
  { flag: "--remote-control", key: "remoteControl" },
7502
- { flag: "--wait", key: "wait" }
7542
+ { flag: "--wait", key: "wait" },
7543
+ { flag: "--pause", key: "pause" }
7503
7544
  ];
7504
7545
  LAUNCHER_FLAG_NAMES = [
7505
7546
  ...VALUED_FLAGS,
@@ -7686,9 +7727,23 @@ function resolveLaunchFlags(params) {
7686
7727
  skipPermissions: params.flags?.skipPermissions ?? parseEnvBool("AGENT_SHIM_SKIP_PERMISSIONS", params.env.AGENT_SHIM_SKIP_PERMISSIONS) ?? params.cascade?.skipPermissions ?? false,
7687
7728
  remoteControl: params.flags?.remoteControl ?? parseEnvBool("AGENT_SHIM_REMOTE_CONTROL", params.env.AGENT_SHIM_REMOTE_CONTROL) ?? params.cascade?.remoteControl ?? false,
7688
7729
  headroom: params.flags?.headroom ?? parseEnvBool("AGENT_SHIM_HEADROOM", params.env.AGENT_SHIM_HEADROOM) ?? params.cascade?.headroom ?? false,
7689
- trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true
7730
+ trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true,
7731
+ pause: params.flags?.pause ?? parseEnvBool("AGENT_SHIM_PAUSE", params.env.AGENT_SHIM_PAUSE) ?? params.cascade?.pause ?? false,
7732
+ delayMs: resolveDelayMs(params)
7690
7733
  };
7691
7734
  }
7735
+ function resolveDelayMs(params) {
7736
+ const fromEnv = params.env.AGENT_SHIM_DELAY === "" ? void 0 : params.env.AGENT_SHIM_DELAY;
7737
+ const [literal, source] = params.flags?.delay !== void 0 ? [params.flags.delay, "--delay"] : fromEnv !== void 0 ? [fromEnv, "AGENT_SHIM_DELAY"] : [params.cascade?.delay, "launch.delay"];
7738
+ if (literal === void 0) {
7739
+ return 0;
7740
+ }
7741
+ try {
7742
+ return parseDuration(literal);
7743
+ } catch (error) {
7744
+ throw new UsageError(`${source}: ${error instanceof Error ? error.message : String(error)}`);
7745
+ }
7746
+ }
7692
7747
  function buildFlagArgs(flags) {
7693
7748
  const args = [];
7694
7749
  if (flags.skipPermissions) {
@@ -7761,6 +7816,8 @@ var init_flags = __esm({
7761
7816
  "use strict";
7762
7817
  import_node_path36 = __toESM(require("node:path"), 1);
7763
7818
  init_envBool();
7819
+ init_cliError();
7820
+ init_conditions();
7764
7821
  init_credential();
7765
7822
  init_headers();
7766
7823
  init_capability();
@@ -7981,6 +8038,31 @@ var init_diagnostics = __esm({
7981
8038
  }
7982
8039
  });
7983
8040
 
8041
+ // src/launcher/hold.ts
8042
+ function describeDelay(ms) {
8043
+ return ms % MS_PER_SECOND7 === 0 ? `${String(ms / MS_PER_SECOND7)}s` : `${String(ms)}ms`;
8044
+ }
8045
+ function holdBeforeLaunch(hold, port, log) {
8046
+ if (port === void 0 || !port.attended() || !hold.pause && hold.delayMs <= 0) {
8047
+ return "go";
8048
+ }
8049
+ if (hold.pause) {
8050
+ log.info("agent-shim: paused before launch; press any key to start, or Ctrl-C to cancel");
8051
+ return port.waitForKey() === "interrupt" ? "cancelled" : "go";
8052
+ }
8053
+ log.info(`agent-shim: starting in ${describeDelay(hold.delayMs)}`);
8054
+ port.sleep(hold.delayMs);
8055
+ return "go";
8056
+ }
8057
+ var LAUNCH_CANCELLED_EXIT, MS_PER_SECOND7;
8058
+ var init_hold = __esm({
8059
+ "src/launcher/hold.ts"() {
8060
+ "use strict";
8061
+ LAUNCH_CANCELLED_EXIT = 130;
8062
+ MS_PER_SECOND7 = 1e3;
8063
+ }
8064
+ });
8065
+
7984
8066
  // src/antigravity/cloudUpstream.ts
7985
8067
  var init_cloudUpstream = __esm({
7986
8068
  "src/antigravity/cloudUpstream.ts"() {
@@ -8161,7 +8243,7 @@ function filterCatalogue(models, catalogue) {
8161
8243
  const excluded = catalogue.exclude === void 0 ? void 0 : (0, import_picomatch4.default)(catalogue.exclude, { dot: true });
8162
8244
  return models.filter((model) => included?.(model.id) !== false && excluded?.(model.id) !== true);
8163
8245
  }
8164
- var import_node_path38, import_picomatch4, import_zod30, DEFAULT_CANDIDATE_URLS, MS_PER_SECOND7, 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;
8246
+ var import_node_path38, import_picomatch4, import_zod30, DEFAULT_CANDIDATE_URLS, MS_PER_SECOND8, SECONDS_PER_HOUR2, HOURS_PER_DAY5, MS_PER_HOUR5, HOURS_BETWEEN_RETRIES, CATALOGUE_MAX_AGE_MS, CATALOGUE_RETRY_MS, CATALOGUE_REQUEST_SECONDS, CATALOGUE_REQUEST_TIMEOUT_MS, CATALOGUE_REFRESH_TIMEOUT_MS, CatalogueModelSchema, CatalogueCacheSchema;
8165
8247
  var init_providerCatalogue = __esm({
8166
8248
  "src/providerCatalogue.ts"() {
8167
8249
  "use strict";
@@ -8169,15 +8251,15 @@ var init_providerCatalogue = __esm({
8169
8251
  import_picomatch4 = __toESM(require("picomatch"), 1);
8170
8252
  import_zod30 = require("zod");
8171
8253
  DEFAULT_CANDIDATE_URLS = 2;
8172
- MS_PER_SECOND7 = 1e3;
8254
+ MS_PER_SECOND8 = 1e3;
8173
8255
  SECONDS_PER_HOUR2 = 3600;
8174
8256
  HOURS_PER_DAY5 = 24;
8175
- MS_PER_HOUR5 = SECONDS_PER_HOUR2 * MS_PER_SECOND7;
8257
+ MS_PER_HOUR5 = SECONDS_PER_HOUR2 * MS_PER_SECOND8;
8176
8258
  HOURS_BETWEEN_RETRIES = 1;
8177
8259
  CATALOGUE_MAX_AGE_MS = HOURS_PER_DAY5 * MS_PER_HOUR5;
8178
8260
  CATALOGUE_RETRY_MS = HOURS_BETWEEN_RETRIES * MS_PER_HOUR5;
8179
8261
  CATALOGUE_REQUEST_SECONDS = 10;
8180
- CATALOGUE_REQUEST_TIMEOUT_MS = CATALOGUE_REQUEST_SECONDS * MS_PER_SECOND7;
8262
+ CATALOGUE_REQUEST_TIMEOUT_MS = CATALOGUE_REQUEST_SECONDS * MS_PER_SECOND8;
8181
8263
  CATALOGUE_REFRESH_TIMEOUT_MS = DEFAULT_CANDIDATE_URLS * CATALOGUE_REQUEST_TIMEOUT_MS;
8182
8264
  CatalogueModelSchema = import_zod30.z.strictObject({ id: import_zod30.z.string().min(1), name: import_zod30.z.string().min(1).optional() });
8183
8265
  CatalogueCacheSchema = import_zod30.z.strictObject({ fetchedAt: import_zod30.z.number(), url: import_zod30.z.string().min(1), models: import_zod30.z.array(CatalogueModelSchema) });
@@ -8699,7 +8781,9 @@ function decideLaunch(params, readOnly) {
8699
8781
  ...parsedArgv.skipPermissions === void 0 ? {} : { skipPermissions: parsedArgv.skipPermissions },
8700
8782
  ...parsedArgv.remoteControl === void 0 ? {} : { remoteControl: parsedArgv.remoteControl },
8701
8783
  ...parsedArgv.headroom === void 0 ? {} : { headroom: parsedArgv.headroom },
8702
- ...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage }
8784
+ ...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage },
8785
+ ...parsedArgv.pause === void 0 ? {} : { pause: parsedArgv.pause },
8786
+ ...parsedArgv.delay === void 0 ? {} : { delay: parsedArgv.delay }
8703
8787
  }
8704
8788
  });
8705
8789
  const loginlessProvider = requestedFlags.remoteControl && selectedProvider !== void 0 && farmIdentity !== void 0 && params.hasStoredLogin?.(farmIdentity) === false ? { identity: farmIdentity, provider: selectedProvider.name } : void 0;
@@ -8844,7 +8928,8 @@ function prepareLaunch(params) {
8844
8928
  registered();
8845
8929
  }
8846
8930
  };
8847
- return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, decision };
8931
+ const hold = () => holdBeforeLaunch({ delayMs: resolvedFlags.delayMs, pause: resolvedFlags.pause }, params.hold, log);
8932
+ return { bin: decided.bin, args: finalArgv, env: finalEnv, sessionId, release, markChildStarted: updateCheck.markChildStarted, hold, decision };
8848
8933
  }
8849
8934
  function resolveLaunch(params) {
8850
8935
  const decided = decideLaunch(params, true);
@@ -8877,6 +8962,9 @@ function resolveLaunch(params) {
8877
8962
  }
8878
8963
  function runLaunchPlan(plan, spawn3) {
8879
8964
  try {
8965
+ if (plan.hold() === "cancelled") {
8966
+ return LAUNCH_CANCELLED_EXIT;
8967
+ }
8880
8968
  plan.markChildStarted();
8881
8969
  const result = spawn3.spawnSync(plan.bin, plan.args, { stdio: "inherit", env: plan.env });
8882
8970
  if (result.error !== void 0) {
@@ -8907,6 +8995,7 @@ var init_launcher = __esm({
8907
8995
  init_extraFlags();
8908
8996
  init_claudeSession();
8909
8997
  init_diagnostics();
8998
+ init_hold();
8910
8999
  init_modelPicker();
8911
9000
  init_providerCatalogue();
8912
9001
  init_pool();
@@ -9112,6 +9201,7 @@ function realPrepareLaunchParams(paths, options) {
9112
9201
  headroom: realHeadroomPort(paths, { spawnDaemon: options.spawnDaemon, cwd: farm.runtime.cwd }),
9113
9202
  frontdoor: realFrontDoorPort(paths, options.spawnDaemon),
9114
9203
  credentials: { ...realCredentialPort, cache: realCredentialCacheEnv(paths) },
9204
+ hold: realHoldPort,
9115
9205
  hasStoredLogin: (identity) => identitySignIn(realFarmFs, { platform: process.platform, run: realRunPort }, { farmRoot: import_node_path42.default.join(paths.identitiesDir, identity), hasCredentialBlock: false }).state !== "signed-out",
9116
9206
  ...farm.directoryIdentity === void 0 ? {} : { directoryPinnedIdentity: farm.directoryIdentity },
9117
9207
  ...farm.directoryConfigProfile === void 0 ? {} : { directoryRuleConfigProfile: farm.directoryConfigProfile },
@@ -9390,14 +9480,14 @@ var init_identityClaude = __esm({
9390
9480
  });
9391
9481
 
9392
9482
  // src/usage/providerQuota.ts
9393
- var import_zod31, MS_PER_SECOND8, 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;
9483
+ var import_zod31, MS_PER_SECOND9, SECONDS_PER_HOUR3, HOURS_PER_DAY6, DAYS_PER_MONTH, ZAI_HOST, ZAI_QUOTA_URL, ZAI_UNIT_HOURS, ZAI_UNIT_MONTHS, ZAI_UNIT_MS, ZaiLimitSchema, ZaiResponseSchema, OPENROUTER_HOST, OPENROUTER_KEY_URL, OPENROUTER_CREDITS_URL, MS_PER_DAY3, OpenRouterKeySchema, OpenRouterCreditsSchema, ANTIGRAVITY_HOST, ANTIGRAVITY_QUOTA_URL, ANTIGRAVITY_USER_URL, FIVE_HOURS2, DAYS_PER_WEEK2, FIVE_HOURS_MS, WEEK_MS, AntigravityBucketSchema, AntigravitySummarySchema, GoogleTokenInfoSchema, AntigravityUserSchema;
9394
9484
  var init_providerQuota = __esm({
9395
9485
  "src/usage/providerQuota.ts"() {
9396
9486
  "use strict";
9397
9487
  import_zod31 = require("zod");
9398
9488
  init_cloudUpstream();
9399
9489
  init_schema2();
9400
- MS_PER_SECOND8 = 1e3;
9490
+ MS_PER_SECOND9 = 1e3;
9401
9491
  SECONDS_PER_HOUR3 = 3600;
9402
9492
  HOURS_PER_DAY6 = 24;
9403
9493
  DAYS_PER_MONTH = 30;
@@ -9406,8 +9496,8 @@ var init_providerQuota = __esm({
9406
9496
  ZAI_UNIT_HOURS = 3;
9407
9497
  ZAI_UNIT_MONTHS = 5;
9408
9498
  ZAI_UNIT_MS = /* @__PURE__ */ new Map([
9409
- [ZAI_UNIT_HOURS, SECONDS_PER_HOUR3 * MS_PER_SECOND8],
9410
- [ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND8]
9499
+ [ZAI_UNIT_HOURS, SECONDS_PER_HOUR3 * MS_PER_SECOND9],
9500
+ [ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9]
9411
9501
  ]);
9412
9502
  ZaiLimitSchema = import_zod31.z.object({
9413
9503
  type: import_zod31.z.string(),
@@ -9427,7 +9517,7 @@ var init_providerQuota = __esm({
9427
9517
  OPENROUTER_HOST = "openrouter.ai";
9428
9518
  OPENROUTER_KEY_URL = `https://${OPENROUTER_HOST}/api/v1/key`;
9429
9519
  OPENROUTER_CREDITS_URL = `https://${OPENROUTER_HOST}/api/v1/credits`;
9430
- MS_PER_DAY3 = HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND8;
9520
+ MS_PER_DAY3 = HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
9431
9521
  OpenRouterKeySchema = import_zod31.z.object({
9432
9522
  data: import_zod31.z.object({
9433
9523
  limit: import_zod31.z.number().nonnegative().nullable(),
@@ -9443,8 +9533,8 @@ var init_providerQuota = __esm({
9443
9533
  ANTIGRAVITY_USER_URL = `https://${ANTIGRAVITY_HOST}/v1internal:loadCodeAssist`;
9444
9534
  FIVE_HOURS2 = 5;
9445
9535
  DAYS_PER_WEEK2 = 7;
9446
- FIVE_HOURS_MS = FIVE_HOURS2 * SECONDS_PER_HOUR3 * MS_PER_SECOND8;
9447
- WEEK_MS = DAYS_PER_WEEK2 * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND8;
9536
+ FIVE_HOURS_MS = FIVE_HOURS2 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
9537
+ WEEK_MS = DAYS_PER_WEEK2 * HOURS_PER_DAY6 * SECONDS_PER_HOUR3 * MS_PER_SECOND9;
9448
9538
  AntigravityBucketSchema = import_zod31.z.object({
9449
9539
  bucketId: import_zod31.z.string(),
9450
9540
  remainingFraction: import_zod31.z.number().optional(),
@@ -13747,6 +13837,12 @@ function applyProfileChange(paths, name, change) {
13747
13837
  if (change.launchClaudeVersion !== void 0) {
13748
13838
  launchPatch.claudeVersion = change.launchClaudeVersion === false ? void 0 : change.launchClaudeVersion;
13749
13839
  }
13840
+ if (change.launchDelay !== void 0) {
13841
+ launchPatch.delay = change.launchDelay === false ? void 0 : change.launchDelay;
13842
+ }
13843
+ if (change.launchPause !== void 0) {
13844
+ launchPatch.pause = change.launchPause;
13845
+ }
13750
13846
  if (Object.keys(launchPatch).length > 0) {
13751
13847
  setProfileLaunchFlags(paths, name, launchPatch);
13752
13848
  touched = true;
@@ -15962,7 +16058,9 @@ var ConfigProfileSetInputSchema = import_zod24.z.strictObject({
15962
16058
  headroom: import_zod24.z.boolean().optional(),
15963
16059
  trackUsage: import_zod24.z.boolean().optional(),
15964
16060
  provider: import_zod24.z.union([import_zod24.z.string().min(1), import_zod24.z.literal(false)]).optional(),
15965
- claudeVersion: import_zod24.z.union([import_zod24.z.string().min(1), import_zod24.z.literal(false)]).optional()
16061
+ claudeVersion: import_zod24.z.union([import_zod24.z.string().min(1), import_zod24.z.literal(false)]).optional(),
16062
+ delay: import_zod24.z.union([import_zod24.z.string().regex(DURATION_RE), import_zod24.z.literal(false)]).optional(),
16063
+ pause: import_zod24.z.boolean().optional()
15966
16064
  }).optional()
15967
16065
  });
15968
16066
  var ConfigProfileSetOutputSchema = storedMutationOutput("profile", "updated", ProfileValueSchema);
@@ -16172,7 +16270,9 @@ function createConfigApiRouter(deps) {
16172
16270
  ...launch?.headroom === void 0 ? {} : { launchHeadroom: launch.headroom },
16173
16271
  ...launch?.trackUsage === void 0 ? {} : { launchTrackUsage: launch.trackUsage },
16174
16272
  ...launch?.provider === void 0 ? {} : { launchProvider: launch.provider },
16175
- ...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion }
16273
+ ...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion },
16274
+ ...launch?.delay === void 0 ? {} : { launchDelay: launch.delay },
16275
+ ...launch?.pause === void 0 ? {} : { launchPause: launch.pause }
16176
16276
  });
16177
16277
  return { action: "updated", kind: "profile", name: input.name, value: profileValue(input.name, paths) };
16178
16278
  })
@@ -16480,7 +16580,10 @@ var LaunchFlagsSchema = import_zod26.z.strictObject({
16480
16580
  skipPermissions: import_zod26.z.boolean(),
16481
16581
  remoteControl: import_zod26.z.boolean(),
16482
16582
  headroom: import_zod26.z.boolean(),
16483
- trackUsage: import_zod26.z.boolean()
16583
+ trackUsage: import_zod26.z.boolean(),
16584
+ pause: import_zod26.z.boolean(),
16585
+ /** How long the launch waits after its own output before it starts claude, in milliseconds. */
16586
+ delayMs: import_zod26.z.number()
16484
16587
  });
16485
16588
  var LaunchResolveOutputSchema = import_zod26.z.strictObject({
16486
16589
  decision: LaunchDecisionSchema,