claudekit-cli 3.38.0-dev.5 → 3.38.0-dev.7

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/bin/ck.js CHANGED
@@ -84,6 +84,29 @@ const isExpectedBunOnlyRelease = () => {
84
84
  };
85
85
 
86
86
  const shouldWarnForBunFallback = () => !isExpectedBunOnlyRelease();
87
+ const RUNTIME_FATAL_SIGNALS = new Set(["SIGABRT", "SIGBUS", "SIGILL", "SIGSEGV", "SIGTRAP"]);
88
+
89
+ const handleRuntimeSignalExit = (signal, sourceLabel) => {
90
+ if (!signal) return;
91
+ if (!RUNTIME_FATAL_SIGNALS.has(signal)) {
92
+ process.kill(process.pid, signal);
93
+ return;
94
+ }
95
+
96
+ console.error(`❌ ${sourceLabel} crashed with ${signal}`);
97
+ if (signal === "SIGILL") {
98
+ console.error(
99
+ "This usually means the bundled executable requires newer CPU instructions than this machine provides.",
100
+ );
101
+ console.error(
102
+ "On Linux x64, install a release that includes the baseline-compatible binary build.",
103
+ );
104
+ } else {
105
+ console.error("The bundled executable crashed before ClaudeKit could finish starting.");
106
+ }
107
+ console.error("If this persists, report it at: https://github.com/mrgoonie/claudekit-cli/issues");
108
+ process.exit(1);
109
+ };
87
110
 
88
111
  /**
89
112
  * Run CLI via bun runtime. Preferred over Node.js when dist/index.js contains
@@ -111,7 +134,7 @@ const runWithBun = (showWarning = false) => {
111
134
  return false;
112
135
  }
113
136
  if (result.signal) {
114
- process.kill(process.pid, result.signal);
137
+ handleRuntimeSignalExit(result.signal, "Bun runtime");
115
138
  }
116
139
  process.exit(result.status || 0);
117
140
  };
@@ -216,7 +239,7 @@ const runBinary = (binaryPath) => {
216
239
  if (errorOccurred) return;
217
240
 
218
241
  if (signal) {
219
- process.kill(process.pid, signal);
242
+ handleRuntimeSignalExit(signal, "Native binary");
220
243
  return;
221
244
  }
222
245
  // Use exitCode instead of exit() for proper handle cleanup on Windows
package/dist/index.js CHANGED
@@ -12214,18 +12214,6 @@ function isUnknownChecksum(checksum) {
12214
12214
  var UNKNOWN_CHECKSUM = "unknown";
12215
12215
 
12216
12216
  // src/commands/portable/portable-registry.ts
12217
- var exports_portable_registry = {};
12218
- __export(exports_portable_registry, {
12219
- writePortableRegistry: () => writePortableRegistry,
12220
- updateAppliedManifestVersion: () => updateAppliedManifestVersion,
12221
- syncPortableRegistry: () => syncPortableRegistry,
12222
- removePortableInstallation: () => removePortableInstallation,
12223
- removeInstallationsByFilter: () => removeInstallationsByFilter,
12224
- readPortableRegistry: () => readPortableRegistry,
12225
- getInstallationsByType: () => getInstallationsByType,
12226
- findPortableInstallations: () => findPortableInstallations,
12227
- addPortableInstallation: () => addPortableInstallation
12228
- });
12229
12217
  import { existsSync as existsSync2 } from "node:fs";
12230
12218
  import { mkdir, readFile as readFile2, rename, unlink, writeFile } from "node:fs/promises";
12231
12219
  import { homedir as homedir3 } from "node:os";
@@ -12485,9 +12473,6 @@ function findPortableInstallations(registry, item, type, provider, global2) {
12485
12473
  return true;
12486
12474
  });
12487
12475
  }
12488
- function getInstallationsByType(registry, type) {
12489
- return registry.installations.filter((i) => i.type === type);
12490
- }
12491
12476
  async function updateAppliedManifestVersion(version) {
12492
12477
  await withRegistryLock(async () => {
12493
12478
  const registry = await readPortableRegistry();
@@ -42433,7 +42418,7 @@ var init_ck_config = __esm(() => {
42433
42418
  }).passthrough();
42434
42419
  UpdatePipelineSchema = exports_external.object({
42435
42420
  autoInitAfterUpdate: exports_external.boolean().default(false),
42436
- autoMigrateAfterInit: exports_external.boolean().default(false),
42421
+ autoMigrateAfterUpdate: exports_external.boolean().default(false),
42437
42422
  migrateProviders: exports_external.union([exports_external.literal("auto"), exports_external.array(exports_external.string())]).default("auto")
42438
42423
  });
42439
42424
  ResolvedModelConfigSchema = exports_external.object({
@@ -42544,7 +42529,7 @@ var init_ck_config = __esm(() => {
42544
42529
  },
42545
42530
  updatePipeline: {
42546
42531
  autoInitAfterUpdate: false,
42547
- autoMigrateAfterInit: false,
42532
+ autoMigrateAfterUpdate: false,
42548
42533
  migrateProviders: "auto"
42549
42534
  }
42550
42535
  };
@@ -48552,17 +48537,17 @@ var init_ck_config_schema = __esm(() => {
48552
48537
  },
48553
48538
  updatePipeline: {
48554
48539
  type: "object",
48555
- description: "Auto-chaining behavior for update -> init -> migrate pipeline",
48540
+ description: "3-step update pipeline: CLI update -> kit init -> provider migrate (each independent)",
48556
48541
  properties: {
48557
48542
  autoInitAfterUpdate: {
48558
48543
  type: "boolean",
48559
48544
  default: false,
48560
48545
  description: "Automatically run ck init after ck update when kit has new version"
48561
48546
  },
48562
- autoMigrateAfterInit: {
48547
+ autoMigrateAfterUpdate: {
48563
48548
  type: "boolean",
48564
48549
  default: false,
48565
- description: "Automatically run ck migrate after ck init for detected providers"
48550
+ description: "Automatically run ck migrate after ck update for detected providers (independent of init)"
48566
48551
  },
48567
48552
  migrateProviders: {
48568
48553
  oneOf: [
@@ -57259,7 +57244,7 @@ var package_default;
57259
57244
  var init_package = __esm(() => {
57260
57245
  package_default = {
57261
57246
  name: "claudekit-cli",
57262
- version: "3.38.0-dev.5",
57247
+ version: "3.38.0-dev.7",
57263
57248
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
57264
57249
  type: "module",
57265
57250
  repository: {
@@ -58554,7 +58539,8 @@ function getDefaultUpdateCliCommandDeps() {
58554
58539
  execAsyncFn: execAsync2,
58555
58540
  packageManagerDetector: PackageManagerDetector,
58556
58541
  npmRegistryClient: NpmRegistryClient,
58557
- promptKitUpdateFn: promptKitUpdate
58542
+ promptKitUpdateFn: promptKitUpdate,
58543
+ promptMigrateUpdateFn: promptMigrateUpdate
58558
58544
  };
58559
58545
  }
58560
58546
  function extractCommandStdout(result) {
@@ -58679,14 +58665,14 @@ async function promptKitUpdate(beta, yes, deps) {
58679
58665
  if (selection.kit && kitVersion) {
58680
58666
  logger.info(`Current kit version: ${selection.kit}@${kitVersion}`);
58681
58667
  }
58668
+ let alreadyAtLatest = false;
58682
58669
  if (yes && selection.kit && kitVersion) {
58683
58670
  const getTagFn = deps?.getLatestReleaseTagFn ?? fetchLatestReleaseTag;
58684
58671
  const latestTag = await getTagFn(selection.kit, beta || isBetaInstalled);
58685
58672
  if (latestTag && versionsMatch(kitVersion, latestTag)) {
58686
58673
  logger.success(`Already at latest version (${selection.kit}@${kitVersion}), skipping reinstall`);
58687
- return;
58688
- }
58689
- if (latestTag) {
58674
+ alreadyAtLatest = true;
58675
+ } else if (latestTag) {
58690
58676
  logger.info(`Kit update available: ${kitVersion} -> ${latestTag}`);
58691
58677
  }
58692
58678
  }
@@ -58695,6 +58681,9 @@ async function promptKitUpdate(beta, yes, deps) {
58695
58681
  const ckConfig = await loadFullConfigFn(null);
58696
58682
  autoInit = ckConfig.config.updatePipeline?.autoInitAfterUpdate ?? false;
58697
58683
  } catch {}
58684
+ if (alreadyAtLatest && !autoInit) {
58685
+ return;
58686
+ }
58698
58687
  if (!yes && !autoInit) {
58699
58688
  logger.info("");
58700
58689
  const shouldUpdate = await confirmFn({
@@ -58743,6 +58732,77 @@ async function promptKitUpdate(beta, yes, deps) {
58743
58732
  logger.verbose(`Failed to prompt for kit update: ${error instanceof Error ? error.message : "unknown error"}`);
58744
58733
  }
58745
58734
  }
58735
+ async function promptMigrateUpdate(deps) {
58736
+ try {
58737
+ const providerRegistry = deps?.detectInstalledProvidersFn && deps?.getProviderConfigFn ? null : await Promise.resolve().then(() => (init_provider_registry(), exports_provider_registry));
58738
+ const detectFn = deps?.detectInstalledProvidersFn ?? providerRegistry?.detectInstalledProviders;
58739
+ const getConfigFn = deps?.getProviderConfigFn ?? providerRegistry?.getProviderConfig;
58740
+ const getSetupFn = deps?.getSetupFn ?? getClaudeKitSetup;
58741
+ const loadFullConfigFn = deps?.loadFullConfigFn ?? CkConfigManager.loadFull;
58742
+ const execFn = deps?.execAsyncFn ?? execAsync2;
58743
+ if (!detectFn || !getConfigFn)
58744
+ return;
58745
+ const allProviders = await detectFn();
58746
+ const targets = allProviders.filter((p) => p !== "claude-code");
58747
+ if (targets.length === 0) {
58748
+ logger.verbose("No migration targets detected, skipping migrate step");
58749
+ return;
58750
+ }
58751
+ let autoMigrate = false;
58752
+ let migrateProviders = "auto";
58753
+ try {
58754
+ const ckConfig = await loadFullConfigFn(null);
58755
+ const pipeline = ckConfig.config.updatePipeline;
58756
+ autoMigrate = pipeline?.autoMigrateAfterUpdate ?? false;
58757
+ migrateProviders = pipeline?.migrateProviders ?? "auto";
58758
+ } catch {}
58759
+ if (!autoMigrate)
58760
+ return;
58761
+ let providers2;
58762
+ if (migrateProviders === "auto") {
58763
+ providers2 = targets;
58764
+ } else if (Array.isArray(migrateProviders)) {
58765
+ const invalid = migrateProviders.filter((p) => !targets.includes(p));
58766
+ if (invalid.length > 0) {
58767
+ logger.warning(`Unknown/uninstalled providers in migrateProviders: ${invalid.join(", ")}`);
58768
+ }
58769
+ providers2 = migrateProviders.filter((p) => targets.includes(p));
58770
+ } else {
58771
+ return;
58772
+ }
58773
+ if (providers2.length === 0)
58774
+ return;
58775
+ const safeProviders = providers2.filter((p) => SAFE_PROVIDER_NAME.test(p));
58776
+ if (safeProviders.length !== providers2.length) {
58777
+ logger.warning("Some provider names contain invalid characters and were skipped");
58778
+ }
58779
+ if (safeProviders.length === 0)
58780
+ return;
58781
+ let isGlobal = false;
58782
+ try {
58783
+ const setup = await getSetupFn();
58784
+ isGlobal = !!setup.global.metadata && !setup.project.metadata;
58785
+ } catch {}
58786
+ const providerNames = safeProviders.map((p) => getConfigFn(p).displayName).join(", ");
58787
+ const parts = ["ck", "migrate"];
58788
+ if (isGlobal)
58789
+ parts.push("-g");
58790
+ for (const p of safeProviders) {
58791
+ parts.push("--agent", p);
58792
+ }
58793
+ parts.push("--yes");
58794
+ const cmd = parts.join(" ");
58795
+ logger.info(`Auto-migrating to: ${providerNames}`);
58796
+ try {
58797
+ await execFn(cmd, { timeout: 300000 });
58798
+ logger.success("Auto-migration complete");
58799
+ } catch (error) {
58800
+ logger.warning(`Auto-migration failed: ${error instanceof Error ? error.message : "unknown"}. Run \`ck migrate\` manually to retry.`);
58801
+ }
58802
+ } catch (error) {
58803
+ logger.verbose(`Migrate step skipped: ${error instanceof Error ? error.message : "unknown"}`);
58804
+ }
58805
+ }
58746
58806
  async function updateCliCommand(options2, deps = getDefaultUpdateCliCommandDeps()) {
58747
58807
  const s = de();
58748
58808
  intro("[>] ClaudeKit CLI - Update");
@@ -58752,7 +58812,8 @@ async function updateCliCommand(options2, deps = getDefaultUpdateCliCommandDeps(
58752
58812
  execAsyncFn,
58753
58813
  packageManagerDetector,
58754
58814
  npmRegistryClient,
58755
- promptKitUpdateFn
58815
+ promptKitUpdateFn,
58816
+ promptMigrateUpdateFn
58756
58817
  } = deps;
58757
58818
  const opts = UpdateCliOptionsSchema.parse(options2);
58758
58819
  logger.info(`Current CLI version: ${currentVersion}`);
@@ -58813,12 +58874,14 @@ async function updateCliCommand(options2, deps = getDefaultUpdateCliCommandDeps(
58813
58874
  if (comparison === 0) {
58814
58875
  outro(`[+] Already on the latest CLI version (${currentVersion})`);
58815
58876
  await promptKitUpdateFn(targetIsPrerelease, opts.yes);
58877
+ await promptMigrateUpdateFn();
58816
58878
  return;
58817
58879
  }
58818
58880
  const isDevChannelSwitch = (opts.dev || opts.beta) && isBetaVersion(targetVersion) && !isBetaVersion(currentVersion);
58819
58881
  if (comparison > 0 && !opts.release && !isDevChannelSwitch) {
58820
58882
  outro(`[+] Current version (${currentVersion}) is newer than latest (${targetVersion})`);
58821
58883
  await promptKitUpdateFn(targetIsPrerelease, opts.yes);
58884
+ await promptMigrateUpdateFn();
58822
58885
  return;
58823
58886
  }
58824
58887
  const isUpgrade = comparison < 0 || isDevChannelSwitch;
@@ -58829,6 +58892,7 @@ async function updateCliCommand(options2, deps = getDefaultUpdateCliCommandDeps(
58829
58892
 
58830
58893
  Run 'ck update' to install`, "Update Check");
58831
58894
  await promptKitUpdateFn(targetIsPrerelease, opts.yes);
58895
+ await promptMigrateUpdateFn();
58832
58896
  outro("Check complete");
58833
58897
  return;
58834
58898
  }
@@ -58895,6 +58959,7 @@ Run '${redactCommandForLog(updateCmd)}' manually, restart terminal, then check c
58895
58959
  }
58896
58960
  outro(`[+] Successfully updated ClaudeKit CLI to ${activeVersion}`);
58897
58961
  await promptKitUpdateFn(targetIsPrerelease, opts.yes);
58962
+ await promptMigrateUpdateFn();
58898
58963
  } catch (error) {
58899
58964
  if (error instanceof CliUpdateError) {
58900
58965
  throw error;
@@ -58916,7 +58981,7 @@ Manual update: ${redactCommandForLog(updateCmd)}`;
58916
58981
  throw new CliUpdateError(errorMessage);
58917
58982
  }
58918
58983
  }
58919
- var import_compare_versions3, import_fs_extra5, execAsync2, CliUpdateError;
58984
+ var import_compare_versions3, import_fs_extra5, execAsync2, CliUpdateError, SAFE_PROVIDER_NAME;
58920
58985
  var init_update_cli = __esm(() => {
58921
58986
  init_ck_config_manager();
58922
58987
  init_npm_registry();
@@ -58939,6 +59004,7 @@ var init_update_cli = __esm(() => {
58939
59004
  this.name = "CliUpdateError";
58940
59005
  }
58941
59006
  };
59007
+ SAFE_PROVIDER_NAME = /^[a-z0-9-]+$/;
58942
59008
  });
58943
59009
 
58944
59010
  // src/domains/versioning/version-cache.ts
@@ -96121,116 +96187,6 @@ import { join as join109 } from "node:path";
96121
96187
  init_logger();
96122
96188
  init_path_resolver();
96123
96189
  var import_fs_extra30 = __toESM(require_lib3(), 1);
96124
-
96125
- // src/commands/init/phases/post-init-migrate-nudge.ts
96126
- init_ck_config_manager();
96127
- init_logger();
96128
- init_safe_prompts();
96129
- import { exec as exec8 } from "node:child_process";
96130
- import { promisify as promisify14 } from "node:util";
96131
- var execAsync8 = promisify14(exec8);
96132
- var SAFE_PROVIDER_NAME = /^[a-z0-9-]+$/;
96133
- async function maybePostInitMigrate(ctx, deps) {
96134
- if (ctx.cancelled || !ctx.resolvedDir)
96135
- return;
96136
- try {
96137
- const providerRegistry = deps?.detectInstalledProvidersFn && deps?.getProviderConfigFn ? null : await Promise.resolve().then(() => (init_provider_registry(), exports_provider_registry));
96138
- const portableRegistry = deps?.readPortableRegistryFn ? null : await Promise.resolve().then(() => (init_portable_registry(), exports_portable_registry));
96139
- const detectInstalledProvidersFn = deps?.detectInstalledProvidersFn ?? providerRegistry?.detectInstalledProviders;
96140
- const getProviderConfigFn = deps?.getProviderConfigFn ?? providerRegistry?.getProviderConfig;
96141
- const readPortableRegistryFn = deps?.readPortableRegistryFn ?? portableRegistry?.readPortableRegistry;
96142
- const loadFullConfigFn = deps?.loadFullConfigFn ?? CkConfigManager.loadFull;
96143
- if (!detectInstalledProvidersFn || !getProviderConfigFn || !readPortableRegistryFn) {
96144
- return;
96145
- }
96146
- const allProviders = await detectInstalledProvidersFn();
96147
- const targets = allProviders.filter((p) => p !== "claude-code");
96148
- if (targets.length === 0)
96149
- return;
96150
- const providerNames = targets.map((p) => getProviderConfigFn(p).displayName).join(", ");
96151
- const registry = await readPortableRegistryFn();
96152
- const hasHistory = registry.installations.some((i) => i.provider !== "claude-code");
96153
- const ckConfig = await loadFullConfigFn(ctx.options.global ? null : ctx.resolvedDir);
96154
- const pipeline = ckConfig.config.updatePipeline;
96155
- const autoMigrate = pipeline?.autoMigrateAfterInit ?? false;
96156
- if (autoMigrate) {
96157
- await runAutoMigrate(ctx, pipeline, targets, providerNames, deps);
96158
- } else if (!hasHistory && !ctx.isNonInteractive) {
96159
- await showNudge(ctx, providerNames, deps);
96160
- }
96161
- } catch (error) {
96162
- logger.debug(`Post-init migrate check skipped: ${error instanceof Error ? error.message : "unknown"}`);
96163
- }
96164
- }
96165
- async function showNudge(ctx, providerNames, deps) {
96166
- const noteFn = deps?.noteFn ?? note;
96167
- const confirmFn = deps?.confirmFn ?? se;
96168
- const isCancelFn = deps?.isCancelFn ?? lD;
96169
- const execAsyncFn = deps?.execAsyncFn ?? execAsync8;
96170
- noteFn([
96171
- `Detected providers: ${providerNames}`,
96172
- "Run `ck migrate` to sync your kit to these providers.",
96173
- "Set `autoMigrateAfterInit: true` in .ck.json to auto-sync on future updates."
96174
- ].join(`
96175
- `), "[i] Provider Sync Available");
96176
- const shouldMigrate = await confirmFn({
96177
- message: "Run ck migrate now?"
96178
- });
96179
- if (isCancelFn(shouldMigrate) || !shouldMigrate)
96180
- return;
96181
- const parts = ["ck", "migrate"];
96182
- if (ctx.options.global)
96183
- parts.push("-g");
96184
- parts.push("--yes");
96185
- const cmd = parts.join(" ");
96186
- try {
96187
- logger.info(`Running: ${cmd}`);
96188
- await execAsyncFn(cmd, { timeout: 300000 });
96189
- logger.success("Migration complete");
96190
- } catch (error) {
96191
- logger.warning(`Migration failed: ${error instanceof Error ? error.message : "unknown"}. Run \`ck migrate\` manually to retry.`);
96192
- }
96193
- }
96194
- async function runAutoMigrate(ctx, pipeline, detectedTargets, providerNames, deps) {
96195
- const execAsyncFn = deps?.execAsyncFn ?? execAsync8;
96196
- let providers2;
96197
- if (!pipeline?.migrateProviders || pipeline.migrateProviders === "auto") {
96198
- providers2 = detectedTargets;
96199
- } else if (Array.isArray(pipeline.migrateProviders)) {
96200
- const invalid = pipeline.migrateProviders.filter((p) => !detectedTargets.includes(p));
96201
- if (invalid.length > 0) {
96202
- logger.warning(`Unknown/uninstalled providers in migrateProviders: ${invalid.join(", ")}`);
96203
- }
96204
- providers2 = pipeline.migrateProviders.filter((p) => detectedTargets.includes(p));
96205
- } else {
96206
- return;
96207
- }
96208
- if (providers2.length === 0)
96209
- return;
96210
- const safeProviders = providers2.filter((p) => SAFE_PROVIDER_NAME.test(p));
96211
- if (safeProviders.length !== providers2.length) {
96212
- logger.warning("Some provider names contain invalid characters and were skipped");
96213
- }
96214
- if (safeProviders.length === 0)
96215
- return;
96216
- const parts = ["ck", "migrate"];
96217
- if (ctx.options.global)
96218
- parts.push("-g");
96219
- for (const p of safeProviders) {
96220
- parts.push("--agent", p);
96221
- }
96222
- parts.push("--yes");
96223
- const cmd = parts.join(" ");
96224
- logger.info(`Auto-migrating to: ${providerNames}`);
96225
- try {
96226
- await execAsyncFn(cmd, { timeout: 300000 });
96227
- logger.success("Auto-migration complete");
96228
- } catch (error) {
96229
- logger.warning(`Auto-migration failed: ${error instanceof Error ? error.message : "unknown"}. Run \`ck migrate\` manually to retry.`);
96230
- }
96231
- }
96232
-
96233
- // src/commands/init/phases/post-install-handler.ts
96234
96190
  async function handlePostInstall(ctx) {
96235
96191
  if (ctx.cancelled || !ctx.extractDir || !ctx.resolvedDir || !ctx.claudeDir) {
96236
96192
  return ctx;
@@ -96300,7 +96256,6 @@ async function handlePostInstall(ctx) {
96300
96256
  logger.debug(`Project auto-registration skipped: ${error instanceof Error ? error.message : "Unknown error"}`);
96301
96257
  }
96302
96258
  }
96303
- await maybePostInitMigrate(ctx);
96304
96259
  return {
96305
96260
  ...ctx,
96306
96261
  installSkills
@@ -96341,9 +96296,9 @@ async function detectAccessibleKits() {
96341
96296
 
96342
96297
  // src/domains/github/preflight-checker.ts
96343
96298
  init_logger();
96344
- import { exec as exec9 } from "node:child_process";
96345
- import { promisify as promisify15 } from "node:util";
96346
- var execAsync9 = promisify15(exec9);
96299
+ import { exec as exec8 } from "node:child_process";
96300
+ import { promisify as promisify14 } from "node:util";
96301
+ var execAsync8 = promisify14(exec8);
96347
96302
  function createSuccessfulPreflightResult() {
96348
96303
  return {
96349
96304
  success: true,
@@ -96376,7 +96331,7 @@ async function runPreflightChecks() {
96376
96331
  errorLines: []
96377
96332
  };
96378
96333
  try {
96379
- const { stdout: stdout2 } = await execAsync9("gh --version", { timeout: GH_COMMAND_TIMEOUT_MS });
96334
+ const { stdout: stdout2 } = await execAsync8("gh --version", { timeout: GH_COMMAND_TIMEOUT_MS });
96380
96335
  const match2 = stdout2.match(/(\d+\.\d+\.\d+)/);
96381
96336
  if (!match2) {
96382
96337
  logger.debug(`GitHub CLI version not detected from output: ${stdout2.trim()}`);
@@ -96414,7 +96369,7 @@ async function runPreflightChecks() {
96414
96369
  }
96415
96370
  }
96416
96371
  try {
96417
- await execAsync9("gh auth status -h github.com", {
96372
+ await execAsync8("gh auth status -h github.com", {
96418
96373
  timeout: GH_COMMAND_TIMEOUT_MS,
96419
96374
  env: { ...process.env, GH_NO_UPDATE_NOTIFIER: "1" }
96420
96375
  });