@keystrokehq/cli 0.0.29 → 0.0.31

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.
Files changed (126) hide show
  1. package/README.md +36 -2
  2. package/dist/{accept.handler-tvT9pleH.mjs → accept.handler-DNfIXPSP.mjs} +1 -1
  3. package/dist/{admin-DsAQ0WWj.mjs → admin-CJp8XksD.mjs} +9 -9
  4. package/dist/{agents-Bc3B9_ms.mjs → agents-G37PM35Z.mjs} +5 -5
  5. package/dist/{api-O5tdGdzc.mjs → api-BK3EhPvs.mjs} +77 -3
  6. package/dist/{api-keys-tle_m3kk.mjs → api-keys-4igNHJ_W.mjs} +5 -5
  7. package/dist/{auth-DLaY5yCZ.mjs → auth-CIOmmV4x.mjs} +4 -4
  8. package/dist/{auth.handler-Dq2fXO3S.mjs → auth.handler-CznN_vfz.mjs} +1 -1
  9. package/dist/{build-agents-DseUtzd4-Cmd-kNNO.mjs → build-agents-DseUtzd4-CSGpNXur.mjs} +2 -2
  10. package/dist/{build-tasks-C09SdfjC-B0F7BZZG.mjs → build-tasks-C09SdfjC-BmAVLTtQ.mjs} +2 -2
  11. package/dist/{build-workflows-BZ_m97Pr-HQZY4xBV.mjs → build-workflows-BZ_m97Pr-BiyptCrn.mjs} +3 -3
  12. package/dist/{build.handler-5CpbMuHx.mjs → build.handler-zHimoO7c.mjs} +5 -5
  13. package/dist/{clear-cache.handler-DpP1VlbR.mjs → clear-cache.handler-BP0K1-uN.mjs} +1 -1
  14. package/dist/{clear.handler-FzohTmpU.mjs → clear.handler-PsA5QKHx.mjs} +2 -2
  15. package/dist/{commander-BTMzBiLq.mjs → commander-BlrSdFcu.mjs} +1 -1
  16. package/dist/{connect-zNUiEjbR.mjs → connect-BbLJhlIA.mjs} +2 -2
  17. package/dist/{connect.handler-D1orna55.mjs → connect.handler-BthE-7Wg.mjs} +3 -3
  18. package/dist/{context-DHOTSgPb.mjs → context-sgKhRc5v.mjs} +3 -3
  19. package/dist/{create.handler-BuxP18uj.mjs → create.handler-BovbO_g0.mjs} +1 -1
  20. package/dist/{credential-env-map-CtmzNkwU.mjs → credential-env-map-CRs0llf0.mjs} +2 -2
  21. package/dist/credentials-CsncZ52a.mjs +460 -0
  22. package/dist/{current-deployment-workflow-Cm_aU9rQ.mjs → current-deployment-workflow-B1VQCYC-.mjs} +2 -2
  23. package/dist/{current.handler-BXec-Bhy.mjs → current.handler-BaGaCLzB.mjs} +1 -1
  24. package/dist/{delete.handler-CpYOMtsv.mjs → delete.handler-DkAK396w.mjs} +1 -1
  25. package/dist/{deploy-CDY7Qo5L.mjs → deploy-DvPfR9fC.mjs} +2 -2
  26. package/dist/{deploy.handler-CLoYxHOr.mjs → deploy.handler-BW3f2N2G.mjs} +14 -14
  27. package/dist/{diff.handler-Dcli35A1.mjs → diff.handler-BwhsoAg0.mjs} +4 -4
  28. package/dist/{dist-D_KgdxW5.mjs → dist-Dw7gCE7y.mjs} +132 -15
  29. package/dist/{env.handler-DYOsMM-G.mjs → env.handler-Dks6ZQh-.mjs} +5 -5
  30. package/dist/{error-boundary-DVZipk-A.mjs → error-boundary-0veZ_RDS.mjs} +1 -1
  31. package/dist/{init-DonAqdBg.mjs → init-DX08T87c.mjs} +3 -3
  32. package/dist/{init.handler-C60qFTIV.mjs → init.handler-CzlmkNXi.mjs} +3 -3
  33. package/dist/{inspect.handler-Bd4imZI8.mjs → inspect.handler-v9snxDLi.mjs} +4 -4
  34. package/dist/{integration-catalog-Cub_7xCw.mjs → integration-catalog-CiZ62hb_.mjs} +1 -1
  35. package/dist/{integrations-CMg20Q9z.mjs → integrations-MEExmqcg.mjs} +54 -31
  36. package/dist/{invites-RO4Dy-m6.mjs → invites-BuatfJmN.mjs} +4 -4
  37. package/dist/{invites.list.handler-B2RoiFCu.mjs → invites.list.handler-CK6mL10z.mjs} +1 -1
  38. package/dist/{invites.resend.handler-C4rzRkqX.mjs → invites.resend.handler-CKZouK1Z.mjs} +1 -1
  39. package/dist/{invites.revoke.handler-CMf6PpeL.mjs → invites.revoke.handler-H0VI-3sp.mjs} +1 -1
  40. package/dist/keystroke.mjs +31 -23
  41. package/dist/{list-enrichment-6zUKzSyL.mjs → list-enrichment-DP1wEyBZ.mjs} +1 -1
  42. package/dist/{list.handler-DpdVFRYl.mjs → list.handler-BEMj3FyH.mjs} +1 -1
  43. package/dist/list.handler-BKfGLkFu.mjs +30 -0
  44. package/dist/{list.handler-DrY5bgm1.mjs → list.handler-BiY5NFWd.mjs} +1 -1
  45. package/dist/{list.handler-C78XjR-o.mjs → list.handler-Cq_oQY5B.mjs} +3 -3
  46. package/dist/list.handler-DIMWZx78.mjs +24 -0
  47. package/dist/{list.handler-CYChUdMF.mjs → list.handler-DVnFrlis.mjs} +4 -4
  48. package/dist/{list.handler-BjKZ9-QO.mjs → list.handler-Jk_vK66s.mjs} +2 -2
  49. package/dist/{list.handler-ijBH6Ow_.mjs → list.handler-LxZInip2.mjs} +1 -1
  50. package/dist/{list.handler-wYGZhl1g.mjs → list.handler-htR9TeiS.mjs} +1 -1
  51. package/dist/{listen-CEn4PucV.mjs → listen-C_7Rgwkb.mjs} +2 -2
  52. package/dist/{listen.handler-B7s6mz82.mjs → listen.handler-dJgorIzr.mjs} +2 -2
  53. package/dist/{logs-DiH8JXn1.mjs → logs-B9YMhUGt.mjs} +3 -3
  54. package/dist/{logs.handler-D0sNlOz4.mjs → logs.handler-BfjCsAyq.mjs} +2 -2
  55. package/dist/{members.add.handler-Dr9SCjrS.mjs → members.add.handler-DSRCRxsI.mjs} +1 -1
  56. package/dist/{members.invite.handler-8-pTOtw_.mjs → members.invite.handler-BNpHn1dY.mjs} +1 -1
  57. package/dist/{members.list.handler-CUZGd-3B.mjs → members.list.handler-Bn9LJEPG.mjs} +1 -1
  58. package/dist/{members.remove.handler-BCiLt3pa.mjs → members.remove.handler-Dkr2t_tX.mjs} +1 -1
  59. package/dist/{members.update.handler-BAbB9ssa.mjs → members.update.handler-DBtUYuAY.mjs} +1 -1
  60. package/dist/operations-AWMLs6mE.mjs +81 -0
  61. package/dist/{org-BD4fj8Yh.mjs → org-DOH7YHk2.mjs} +15 -15
  62. package/dist/{orgs.create.handler-B_7WjV3s.mjs → orgs.create.handler-BO70zIdp.mjs} +1 -1
  63. package/dist/{orgs.get.handler-BgjeDmfl.mjs → orgs.get.handler-BuGg5bc9.mjs} +1 -1
  64. package/dist/{orgs.list.handler-ZRdb-yu5.mjs → orgs.list.handler--5HutMkl.mjs} +1 -1
  65. package/dist/package-manager-DT1EhOkS.mjs +61 -0
  66. package/dist/{paths-JzzFkXQA-CEipIeVl.mjs → paths-DpHfoaXN-CdPimpky.mjs} +2 -2
  67. package/dist/{paused.handler-CzQkBKS6.mjs → paused.handler-DHvxz-cC.mjs} +1 -1
  68. package/dist/{projects-CgtfPFGu.mjs → projects-C5GZ5Jrf.mjs} +4 -4
  69. package/dist/render-credential-Bn15FEUC.mjs +23 -0
  70. package/dist/render-operation-Bc7Wu1sP.mjs +36 -0
  71. package/dist/{requirements.handler-C-5PIRvy.mjs → requirements.handler-B5rqCjMu.mjs} +4 -4
  72. package/dist/{resolve-cli-credentials-B4crOe_y.mjs → resolve-cli-credentials-CAOSVMJP.mjs} +1 -1
  73. package/dist/{resolve-project-DJJZIOmu.mjs → resolve-project-E9mrh_el.mjs} +1 -1
  74. package/dist/{run-polling-cylAR4FL.mjs → run-polling-DawiBus-.mjs} +2 -2
  75. package/dist/{run.handler-CUgLQrsQ.mjs → run.handler-BG7xitEK.mjs} +5 -5
  76. package/dist/{runs-CZRwB58H.mjs → runs-swYYBT6C.mjs} +2 -2
  77. package/dist/{schema-display-XrRCdFL0.mjs → schema-display-FvI8QjOQ.mjs} +28 -1
  78. package/dist/schemas-4Mq_bxob.mjs +39 -0
  79. package/dist/search-BEfy2fG9.mjs +53 -0
  80. package/dist/search.handler-V7ObLGjN.mjs +79 -0
  81. package/dist/show.handler-C_VDYU91.mjs +31 -0
  82. package/dist/show.handler-CsidInW8.mjs +21 -0
  83. package/dist/show.handler-Wmv0tkxx.mjs +35 -0
  84. package/dist/{skills-sync.handler-DsJP_-XZ.mjs → skills-sync.handler-BAATdT6N.mjs} +1 -1
  85. package/dist/{skills.command-B6jly3ew.mjs → skills.command-0-E8mcYE.mjs} +4 -4
  86. package/dist/{src-DNhUmpSl.mjs → src-DI-ybNjR.mjs} +166 -25
  87. package/dist/{switch.handler-B3QBoSSl.mjs → switch.handler-BwYndsP-.mjs} +2 -2
  88. package/dist/{sync-BssJv3Fd.mjs → sync-6fZkIUtn.mjs} +2 -2
  89. package/dist/{sync.handler-Ia7cO3xj.mjs → sync.handler-Ctr-cN9X.mjs} +6 -6
  90. package/dist/{task-target-build-CrPLSXnu.mjs → task-target-build-QllcCfoN.mjs} +5 -5
  91. package/dist/task-target-deploy-runner.mjs +7 -7
  92. package/dist/{test-RFvyK7rK.mjs → test-C8VIZe9V.mjs} +2 -2
  93. package/dist/{test.handler-CLqnDqY6.mjs → test.handler-BCW0YBPd.mjs} +1 -1
  94. package/dist/{test.handler-DBXBhJ59.mjs → test.handler-DLaxrJ9V.mjs} +8 -8
  95. package/dist/{tool.handler-BzyxzKK8.mjs → tool.handler-8qNmgdRe.mjs} +8 -8
  96. package/dist/{trigger-artifacts-BcRScRSp-C-JBJ6y8.mjs → trigger-artifacts-BcRScRSp-BiD2h6do.mjs} +2 -2
  97. package/dist/{upgrade-B6Prb1K-.mjs → upgrade-DgOcc8IT.mjs} +2 -2
  98. package/dist/{upload.handler-Capc50yH.mjs → upload.handler-B7xle1oX.mjs} +6 -6
  99. package/dist/{users.get.handler-DoajzImx.mjs → users.get.handler-C4t1vXwi.mjs} +1 -1
  100. package/dist/{users.list.handler-CRk2J8mi.mjs → users.list.handler-Dvl90grq.mjs} +1 -1
  101. package/dist/{users.set-role.handler-CHYjbx5M.mjs → users.set-role.handler-Djw1_VGf.mjs} +1 -1
  102. package/dist/{validate.handler-DmiJmNA0.mjs → validate.handler-Drf_lssw.mjs} +5 -5
  103. package/dist/{workflow-build-DPqt_edf.mjs → workflow-build-Begvjfq8.mjs} +7 -7
  104. package/dist/{workflow-bundler-BzHk73PM-xQwAF08W.mjs → workflow-bundler-BzHk73PM-muPv1yGG.mjs} +1 -1
  105. package/dist/{workflows-Lz8M15i7.mjs → workflows-DjMlxuBX.mjs} +13 -45
  106. package/package.json +12 -12
  107. package/dist/credentials-DzmutsMa.mjs +0 -176
  108. package/dist/{build-metadata-BB_L45ZS-BtGGjHIV.mjs → build-metadata-BB_L45ZS-DSJL7dTy.mjs} +0 -0
  109. package/dist/{build-progress-O9f-4Z4D.mjs → build-progress-DLM1Bt4T.mjs} +0 -0
  110. package/dist/{clear.handler-BdR56Cok.mjs → clear.handler-T27GpgSu.mjs} +0 -0
  111. package/dist/{credential-schema-mismatch-kfGeiSB1.mjs → credential-schema-mismatch-ClQgEVtO.mjs} +0 -0
  112. package/dist/{credentials-N4L3Vaib.mjs → credentials-DKrSaaLw.mjs} +0 -0
  113. package/dist/{deploy-BURTx92e.mjs → deploy-DhCbYFc7.mjs} +0 -0
  114. package/dist/{deploy-progress-C1Y73QVM.mjs → deploy-progress-BsUH7fGE.mjs} +0 -0
  115. package/dist/{detect-env-access-CwkOYeYM-D4aTZv4R.mjs → detect-env-access-CwkOYeYM-COq4U-4Y.mjs} +0 -0
  116. package/dist/{diff-utils-CXKNQUXO.mjs → diff-utils-Bs--xmoV.mjs} +0 -0
  117. package/dist/{import-module-y0glInUe-BwuOxEY3.mjs → import-module-y0glInUe-DV_3dsU0.mjs} +1 -1
  118. /package/dist/{logs.handler-Bs1DVMaO.mjs → logs.handler-DGGVPMOX.mjs} +0 -0
  119. /package/dist/{read-credential-keys-77a91T8M-aLuQvlIq.mjs → read-credential-keys-77a91T8M-DGK5XTQp.mjs} +0 -0
  120. /package/dist/{register.handler-C_NqMLir.mjs → register.handler-CePNU3sP.mjs} +0 -0
  121. /package/dist/{run-polling-DKWPGLyF.mjs → run-polling-fBouPjJ2.mjs} +0 -0
  122. /package/dist/{skill-installer-AX0X-u1J.mjs → skill-installer-D6j9IA3Z.mjs} +0 -0
  123. /package/dist/{skills.handler-KEUkV5NH.mjs → skills.handler-DYIQK0Vu.mjs} +0 -0
  124. /package/dist/{task-target-deploy-DeUyfi9H.mjs → task-target-deploy-B_3HPSo2.mjs} +0 -0
  125. /package/dist/{types-D1cVpE7_.mjs → types-AlA-ifK9.mjs} +0 -0
  126. /package/dist/{upgrade.handler-C7KvNL0x.mjs → upgrade.handler-DSZuw7-9.mjs} +0 -0
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as getKeystrokeBaseDir, t as KEYSTROKE_DIR } from "./paths-JzzFkXQA-CEipIeVl.mjs";
4
- import * as os from "node:os";
3
+ import { n as getKeystrokeBaseDir, t as KEYSTROKE_DIR } from "./paths-DpHfoaXN-CdPimpky.mjs";
5
4
  import * as path$1 from "node:path";
5
+ import * as os from "node:os";
6
6
  import * as fs from "node:fs/promises";
7
7
  import { z } from "zod";
8
8
  //#region ../../packages/local-memory/dist/index.mjs
@@ -252,12 +252,13 @@ const credentialUserSchema = z.object({
252
252
  email: z.email(),
253
253
  name: z.string().optional()
254
254
  });
255
- const storedOrgEntrySchema = z.object({
255
+ const orgEntrySchema = z.object({
256
256
  organizationId: z.uuid(),
257
257
  organizationName: z.string().min(1),
258
258
  apiKeyId: z.uuid().optional(),
259
259
  createdAt: z.string().min(1)
260
- }).strict().extend({ apiKey: z.string().min(1) });
260
+ }).strict();
261
+ const storedOrgEntrySchema = orgEntrySchema.extend({ apiKey: z.string().min(1) });
261
262
  const credentialsMetadataSchema = z.object({
262
263
  version: z.literal(3),
263
264
  serverUrl: z.url(),
@@ -266,8 +267,93 @@ const credentialsMetadataSchema = z.object({
266
267
  activeOrgId: z.uuid().optional(),
267
268
  orgs: z.array(storedOrgEntrySchema)
268
269
  }).strict();
270
+ /**
271
+ * Pre-#372 split credential storage: metadata in credentials.json, API keys in
272
+ * secrets.json or the OS keychain. Used only to detect and upgrade on-disk files.
273
+ */
274
+ const credentialSecretStorageSchema = z.discriminatedUnion("kind", [z.object({
275
+ kind: z.literal("keychain"),
276
+ service: z.string().min(1)
277
+ }).strict(), z.object({
278
+ kind: z.literal("file"),
279
+ reason: z.enum([
280
+ "legacy",
281
+ "insecure-storage",
282
+ "test"
283
+ ]).optional()
284
+ }).strict()]);
285
+ const credentialsMetadataSchemaV3Split = z.object({
286
+ version: z.literal(3),
287
+ serverUrl: z.url(),
288
+ webUrl: z.url(),
289
+ user: z.object({
290
+ id: z.string().min(1),
291
+ email: z.email(),
292
+ name: z.string().optional()
293
+ }).optional(),
294
+ activeOrgId: z.uuid().optional(),
295
+ orgs: z.array(orgEntrySchema),
296
+ secretStorage: credentialSecretStorageSchema
297
+ }).strict();
298
+ const orgSecretsSchema = z.object({
299
+ version: z.literal(1),
300
+ byOrgId: z.record(z.uuid(), z.string().min(1))
301
+ });
302
+ const SECRETS_FILE = "secrets.json";
303
+ const CREDENTIALS_FILE_MODE = 384;
304
+ var SplitCredentialConsolidationError = class extends Error {
305
+ constructor(message) {
306
+ super(message);
307
+ this.name = "SplitCredentialConsolidationError";
308
+ }
309
+ };
310
+ /**
311
+ * Upgrades pre-#372 split credential files (metadata + secrets.json) into the
312
+ * current single-file shape. Returns whether credentials.json was rewritten.
313
+ */
314
+ async function consolidateSplitCredentialsIfNeeded(credentialsFilePath) {
315
+ const raw = await readJsonFile(credentialsFilePath);
316
+ if (raw === null) return false;
317
+ if (credentialsMetadataSchema.safeParse(raw).success) return false;
318
+ const split = credentialsMetadataSchemaV3Split.safeParse(raw);
319
+ if (!split.success) return false;
320
+ const consolidated = await buildConsolidatedCredentials(split.data, credentialsFilePath);
321
+ credentialsMetadataSchema.parse(consolidated);
322
+ await atomicWriteFile(credentialsFilePath, `${JSON.stringify(consolidated, null, 2)}\n`, { mode: CREDENTIALS_FILE_MODE });
323
+ await unlinkFileIfExists(path$1.join(path$1.dirname(credentialsFilePath), SECRETS_FILE));
324
+ return true;
325
+ }
326
+ async function buildConsolidatedCredentials(split, credentialsFilePath) {
327
+ const byOrgId = await readLegacySecretsByOrgId(credentialsFilePath);
328
+ const orgs = split.orgs.map((org) => {
329
+ const apiKey = byOrgId[org.organizationId];
330
+ if (!apiKey) throw new SplitCredentialConsolidationError(`Could not find a stored API key for organization "${org.organizationName}" while upgrading ~/.keystroke credential files. Run \`keystroke auth clear\`, then \`keystroke auth\` to sign in again.`);
331
+ return {
332
+ ...org,
333
+ apiKey
334
+ };
335
+ });
336
+ return {
337
+ version: 3,
338
+ serverUrl: split.serverUrl,
339
+ webUrl: split.webUrl,
340
+ user: split.user,
341
+ activeOrgId: split.activeOrgId,
342
+ orgs
343
+ };
344
+ }
345
+ async function readLegacySecretsByOrgId(credentialsFilePath) {
346
+ const secretsPath = path$1.join(path$1.dirname(credentialsFilePath), SECRETS_FILE);
347
+ const secretsRaw = await readJsonFile(secretsPath);
348
+ if (secretsRaw === null) return {};
349
+ const parsed = orgSecretsSchema.safeParse(secretsRaw);
350
+ if (!parsed.success) throw new SplitCredentialConsolidationError(`Invalid legacy secrets file at ${secretsPath}. Run \`keystroke auth clear\`, then \`keystroke auth\` to sign in again.`);
351
+ return parsed.data.byOrgId;
352
+ }
269
353
  const CREDENTIALS_FILE = "credentials.json";
354
+ const LEGACY_SECRETS_FILE = "secrets.json";
270
355
  const METADATA_VERSION = 3;
356
+ const INVALID_CREDENTIALS_HINT = "Run `keystroke auth clear`, then `keystroke auth` to sign in again.";
271
357
  /**
272
358
  * Domain controller for Keystroke credentials.
273
359
  *
@@ -275,6 +361,7 @@ const METADATA_VERSION = 3;
275
361
  */
276
362
  var Credentials = class {
277
363
  credentials;
364
+ splitConsolidationAttempted = false;
278
365
  constructor(options = {}) {
279
366
  this.credentials = new Store({
280
367
  name: CREDENTIALS_FILE,
@@ -288,7 +375,7 @@ var Credentials = class {
288
375
  return this.credentials.filePath;
289
376
  }
290
377
  async getActiveOrg() {
291
- const meta = await this.credentials.read();
378
+ const meta = await this.readCredentials();
292
379
  if (!meta?.activeOrgId) return null;
293
380
  const org = meta.orgs.find((o) => o.organizationId === meta.activeOrgId);
294
381
  if (!org) return null;
@@ -298,34 +385,34 @@ var Credentials = class {
298
385
  };
299
386
  }
300
387
  async listOrgs() {
301
- return (await this.credentials.read())?.orgs.map(toOrgEntry) ?? [];
388
+ return (await this.readCredentials())?.orgs.map(toOrgEntry) ?? [];
302
389
  }
303
390
  async getApiKey(orgId) {
304
- return (await this.credentials.read())?.orgs.find((org) => org.organizationId === orgId)?.apiKey ?? null;
391
+ return (await this.readCredentials())?.orgs.find((org) => org.organizationId === orgId)?.apiKey ?? null;
305
392
  }
306
393
  async getServerUrls() {
307
- const meta = await this.credentials.read();
394
+ const meta = await this.readCredentials();
308
395
  return meta ? {
309
396
  serverUrl: meta.serverUrl,
310
397
  webUrl: meta.webUrl
311
398
  } : null;
312
399
  }
313
400
  async getUser() {
314
- return (await this.credentials.read())?.user;
401
+ return (await this.readCredentials())?.user;
315
402
  }
316
403
  async getActiveOrgId() {
317
- return (await this.credentials.read())?.activeOrgId;
404
+ return (await this.readCredentials())?.activeOrgId;
318
405
  }
319
406
  async hasStoredCredentials() {
320
- const meta = await this.credentials.read();
407
+ const meta = await this.readCredentials();
321
408
  return meta !== null && meta.orgs.length > 0;
322
409
  }
323
410
  async getStorageInfo() {
324
- await this.credentials.read();
411
+ await this.readCredentials();
325
412
  return { credentialsFilePath: this.credentials.filePath };
326
413
  }
327
414
  async upsertOrg(input) {
328
- const existing = await this.credentials.read();
415
+ const existing = await this.readCredentials();
329
416
  const orgWithApiKey = {
330
417
  ...input.org,
331
418
  apiKey: input.apiKey
@@ -348,7 +435,7 @@ var Credentials = class {
348
435
  await this.credentials.write(newMeta);
349
436
  }
350
437
  async setActiveOrg(orgId) {
351
- const meta = await this.credentials.read();
438
+ const meta = await this.readCredentials();
352
439
  if (!meta) throw new Error("No stored credentials found. Run `keystroke auth` first.");
353
440
  if (!meta.orgs.some((o) => o.organizationId === orgId)) throw new Error(`No stored API key for organization ${orgId}. Run \`keystroke auth\` to add credentials for this org.`);
354
441
  await this.credentials.update((m) => ({
@@ -357,7 +444,7 @@ var Credentials = class {
357
444
  }));
358
445
  }
359
446
  async removeOrg(orgId) {
360
- const meta = await this.credentials.read();
447
+ const meta = await this.readCredentials();
361
448
  if (!meta) return null;
362
449
  const removed = meta.orgs.find((o) => o.organizationId === orgId);
363
450
  if (!removed) return null;
@@ -376,8 +463,38 @@ var Credentials = class {
376
463
  }
377
464
  async clear() {
378
465
  await this.credentials.delete();
466
+ await unlinkFileIfExists(this.legacySecretsFilePath);
467
+ this.splitConsolidationAttempted = false;
468
+ }
469
+ get legacySecretsFilePath() {
470
+ return path$1.join(path$1.dirname(this.credentials.filePath), LEGACY_SECRETS_FILE);
471
+ }
472
+ async readCredentials() {
473
+ await this.consolidateSplitStorageIfNeeded();
474
+ try {
475
+ return await this.credentials.read();
476
+ } catch (error) {
477
+ throw toCredentialsReadError(error, this.credentials.filePath);
478
+ }
479
+ }
480
+ async consolidateSplitStorageIfNeeded() {
481
+ if (this.splitConsolidationAttempted) return;
482
+ this.splitConsolidationAttempted = true;
483
+ try {
484
+ await consolidateSplitCredentialsIfNeeded(this.credentials.filePath);
485
+ } catch (error) {
486
+ if (error instanceof SplitCredentialConsolidationError) throw error;
487
+ throw toCredentialsReadError(error, this.credentials.filePath);
488
+ }
379
489
  }
380
490
  };
491
+ function toCredentialsReadError(error, credentialsFilePath) {
492
+ if (error instanceof SplitCredentialConsolidationError) return error;
493
+ const message = error instanceof Error ? error.message : String(error);
494
+ if (message.includes("no migrations are configured")) return /* @__PURE__ */ new Error(`Stored credentials at ${credentialsFilePath} use an outdated format that could not be upgraded automatically. ${INVALID_CREDENTIALS_HINT}`);
495
+ if (error instanceof Error) return error;
496
+ return new Error(message);
497
+ }
381
498
  /**
382
499
  * Production singleton — the primary public API for credential storage. Tests
383
500
  * should construct `new Credentials({ homeDir })` instead.
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { D as CliExitError, _ as isAuthError, a as ui, j as throwReportedCliExit, m as REAUTH_HINT, n as style, t as ANSI, v as isNetworkError, y as toErrorMessage } from "./keystroke.mjs";
4
- import { i as projects } from "./dist-D_KgdxW5.mjs";
4
+ import { i as projects } from "./dist-Dw7gCE7y.mjs";
5
5
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
6
- import { i as requireClient } from "./context-DHOTSgPb.mjs";
6
+ import { i as requireClient } from "./context-sgKhRc5v.mjs";
7
7
  import { n as CredentialConnectionIdSchema, r as CredentialScopeSchema, t as ConnectionStatusSchema } from "./schema-DFJiNWyd.mjs";
8
8
  import { a as readManifestsFromOutDir } from "./dist-CTEtWDW4.mjs";
9
- import { t as requireWorkflowsDir } from "./resolve-project-DJJZIOmu.mjs";
10
- import { t as getIntegrationCatalog } from "./integration-catalog-Cub_7xCw.mjs";
11
- import { t as groupCredentialRequirements } from "./credentials-N4L3Vaib.mjs";
9
+ import { t as requireWorkflowsDir } from "./resolve-project-E9mrh_el.mjs";
10
+ import { t as getIntegrationCatalog } from "./integration-catalog-CiZ62hb_.mjs";
11
+ import { t as groupCredentialRequirements } from "./credentials-DKrSaaLw.mjs";
12
12
  import { z } from "zod";
13
13
  import Table from "cli-table3";
14
14
  //#region ../../packages/shared-types/src/credentials/api/responses.ts
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { D as CliExitError, P as logger, a as ui, v as isNetworkError, y as toErrorMessage } from "./keystroke.mjs";
4
4
  import { r as isJsonMode } from "./output-BWcVRt-T.mjs";
5
- import { n as renderCredentialSchemaMismatchText, r as writeCredentialSchemaMismatchJson, t as isCredentialSchemaMismatchErrorLike } from "./credential-schema-mismatch-kfGeiSB1.mjs";
5
+ import { n as renderCredentialSchemaMismatchText, r as writeCredentialSchemaMismatchJson, t as isCredentialSchemaMismatchErrorLike } from "./credential-schema-mismatch-ClQgEVtO.mjs";
6
6
  //#region src/lib/error-boundary.ts
7
7
  async function withErrorBoundary(commandName, fn, options = {}) {
8
8
  const jsonMode = options.json ?? isJsonMode({});
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { t as createTypedCommand } from "./commander-BTMzBiLq.mjs";
4
- import { t as SKILL_INSTALL_METHODS } from "./types-D1cVpE7_.mjs";
3
+ import { t as createTypedCommand } from "./commander-BlrSdFcu.mjs";
4
+ import { t as SKILL_INSTALL_METHODS } from "./types-AlA-ifK9.mjs";
5
5
  import { z } from "zod";
6
6
  //#region src/commands/init/init.command.ts
7
7
  const InitOptionsSchema = z.object({
@@ -45,7 +45,7 @@ function createInitCommand() {
45
45
  description: "Initialize a Keystroke project (creates keystroke.config.ts)",
46
46
  schema: InitOptionsSchema,
47
47
  optionsConfig: INIT_OPTIONS_CONFIG,
48
- loadHandler: async () => (await import("./init.handler-C60qFTIV.mjs")).handleInit
48
+ loadHandler: async () => (await import("./init.handler-CzlmkNXi.mjs")).handleInit
49
49
  });
50
50
  }
51
51
  //#endregion
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { D as CliExitError, a as ui, i as fetchLatestNpmPackageVersion } from "./keystroke.mjs";
4
- import { i as projects } from "./dist-D_KgdxW5.mjs";
4
+ import { i as projects } from "./dist-Dw7gCE7y.mjs";
5
5
  import { a as writeProjectConfig, i as readProjectConfig, r as getProjectConfigPath } from "./project-config-DudGRFPO.mjs";
6
- import { i as requireClient } from "./context-DHOTSgPb.mjs";
7
- import { i as UnknownSkillAgentError, n as resolveSkillInstallChoices, r as installKeystrokeAgentSkills, t as summarizeSkillInstall } from "./skill-installer-AX0X-u1J.mjs";
6
+ import { i as requireClient } from "./context-sgKhRc5v.mjs";
7
+ import { i as UnknownSkillAgentError, n as resolveSkillInstallChoices, r as installKeystrokeAgentSkills, t as summarizeSkillInstall } from "./skill-installer-D6j9IA3Z.mjs";
8
8
  import { createRequire } from "node:module";
9
9
  import path from "node:path";
10
10
  import { access, mkdir, readFile, writeFile } from "node:fs/promises";
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as ui, j as throwReportedCliExit, n as style, t as ANSI, y as toErrorMessage } from "./keystroke.mjs";
4
- import { i as projects } from "./dist-D_KgdxW5.mjs";
4
+ import { i as projects } from "./dist-Dw7gCE7y.mjs";
5
5
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
6
- import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-DHOTSgPb.mjs";
7
- import { i as resolveTypeHint } from "./schema-display-XrRCdFL0.mjs";
8
- import { n as resolveLocalWorkflowManifest, r as resolveProjectContext, t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-Cm_aU9rQ.mjs";
6
+ import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-sgKhRc5v.mjs";
7
+ import { a as resolveTypeHint } from "./schema-display-FvI8QjOQ.mjs";
8
+ import { n as resolveLocalWorkflowManifest, r as resolveProjectContext, t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-B1VQCYC-.mjs";
9
9
  import dayjs from "dayjs";
10
10
  //#region src/commands/workflows/inspect/inspect-display.ts
11
11
  function formatBuildTimestamp(iso) {
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { D as CliExitError, _ as isAuthError, a as ui, j as throwReportedCliExit, m as REAUTH_HINT, v as isNetworkError, y as toErrorMessage } from "./keystroke.mjs";
4
4
  import { a as writeJsonError } from "./output-BWcVRt-T.mjs";
5
- import { i as requireClient } from "./context-DHOTSgPb.mjs";
5
+ import { i as requireClient } from "./context-sgKhRc5v.mjs";
6
6
  //#region src/lib/integration-catalog.ts
7
7
  const catalogCache = /* @__PURE__ */ new WeakMap();
8
8
  function buildView(entries) {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-BWcVRt-T.mjs";
4
- import { t as createTypedCommand } from "./commander-BTMzBiLq.mjs";
5
- import { t as ConnectionKindValues } from "./api-O5tdGdzc.mjs";
4
+ import { t as createTypedCommand } from "./commander-BlrSdFcu.mjs";
5
+ import { t as ConnectionKindValues } from "./api-BK3EhPvs.mjs";
6
6
  import { z } from "zod";
7
7
  //#region ../../packages/shared-types/src/official-providers/index.ts
8
8
  const officialProviderRegistry = {
@@ -99,6 +99,14 @@ const IntegrationsListOptionsSchema = JsonOptionSchema.extend({
99
99
  connected: z.boolean().optional(),
100
100
  details: z.boolean().optional()
101
101
  });
102
+ const IntegrationShowOptionsSchema = JsonOptionSchema.extend({ id: z.string().min(1) });
103
+ const INTEGRATION_SHOW_OPTIONS_CONFIG = {
104
+ ...JSON_OPTION_CONFIG,
105
+ id: {
106
+ flag: "",
107
+ description: ""
108
+ }
109
+ };
102
110
  const INTEGRATIONS_LIST_OPTIONS_CONFIG = {
103
111
  ...JSON_OPTION_CONFIG,
104
112
  kind: {
@@ -150,35 +158,50 @@ function createIntegrationsCommand() {
150
158
  description: "List Keystroke integrations available to your organization",
151
159
  schema: IntegrationsListOptionsSchema,
152
160
  optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
153
- loadHandler: async () => (await import("./list.handler-BjKZ9-QO.mjs")).handleIntegrationsList,
154
- subcommands: [createTypedCommand({
155
- name: "list",
156
- description: "List Keystroke integrations available to your organization",
157
- schema: IntegrationsListOptionsSchema,
158
- optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
159
- loadHandler: async () => (await import("./list.handler-BjKZ9-QO.mjs")).handleIntegrationsList
160
- }), createTypedCommand({
161
- name: "register",
162
- description: "Register an org-scoped custom provider app for custom OAuth support",
163
- schema: IntegrationsRegisterOptionsSchema,
164
- optionsConfig: INTEGRATIONS_REGISTER_OPTIONS_CONFIG,
165
- handler: async (opts, ctx) => {
166
- const { handleIntegrationsRegister } = await import("./register.handler-C_NqMLir.mjs");
167
- await handleIntegrationsRegister({
168
- integrationId: opts.integrationId,
169
- clientAppCredentialSetId: opts.clientApp,
170
- provider: opts.provider,
171
- externalAppId: opts.externalAppId,
172
- displayName: opts.displayName,
173
- json: opts.json
174
- }, ctx);
175
- },
176
- argument: {
177
- name: "integrationId",
178
- description: "Workspace integration id to register (e.g., acmeCrm)",
179
- key: "integrationId"
180
- }
181
- })]
161
+ loadHandler: async () => (await import("./list.handler-Jk_vK66s.mjs")).handleIntegrationsList,
162
+ subcommands: [
163
+ createTypedCommand({
164
+ name: "list",
165
+ description: "List Keystroke integrations available to your organization",
166
+ schema: IntegrationsListOptionsSchema,
167
+ optionsConfig: INTEGRATIONS_LIST_OPTIONS_CONFIG,
168
+ loadHandler: async () => (await import("./list.handler-Jk_vK66s.mjs")).handleIntegrationsList
169
+ }),
170
+ createTypedCommand({
171
+ name: "show",
172
+ description: "Show details about an integration, including its operations",
173
+ schema: IntegrationShowOptionsSchema,
174
+ optionsConfig: INTEGRATION_SHOW_OPTIONS_CONFIG,
175
+ argument: {
176
+ name: "id",
177
+ description: "Integration id, e.g. aws-s3",
178
+ key: "id"
179
+ },
180
+ loadHandler: async () => (await import("./show.handler-C_VDYU91.mjs")).handleIntegrationShow
181
+ }),
182
+ createTypedCommand({
183
+ name: "register",
184
+ description: "Register an org-scoped custom provider app for custom OAuth support",
185
+ schema: IntegrationsRegisterOptionsSchema,
186
+ optionsConfig: INTEGRATIONS_REGISTER_OPTIONS_CONFIG,
187
+ handler: async (opts, ctx) => {
188
+ const { handleIntegrationsRegister } = await import("./register.handler-CePNU3sP.mjs");
189
+ await handleIntegrationsRegister({
190
+ integrationId: opts.integrationId,
191
+ clientAppCredentialSetId: opts.clientApp,
192
+ provider: opts.provider,
193
+ externalAppId: opts.externalAppId,
194
+ displayName: opts.displayName,
195
+ json: opts.json
196
+ }, ctx);
197
+ },
198
+ argument: {
199
+ name: "integrationId",
200
+ description: "Workspace integration id to register (e.g., acmeCrm)",
201
+ key: "integrationId"
202
+ }
203
+ })
204
+ ]
182
205
  });
183
206
  }
184
207
  //#endregion
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-BWcVRt-T.mjs";
4
- import { t as createTypedCommand } from "./commander-BTMzBiLq.mjs";
4
+ import { t as createTypedCommand } from "./commander-BlrSdFcu.mjs";
5
5
  import { z } from "zod";
6
6
  //#region src/commands/invites/invites.command.ts
7
7
  const InvitesListOptionsSchema = JsonOptionSchema;
@@ -19,13 +19,13 @@ function createInvitesCommand() {
19
19
  description: "Manage invitations for the current user",
20
20
  schema: InvitesListOptionsSchema,
21
21
  optionsConfig: { ...JSON_OPTION_CONFIG },
22
- loadHandler: async () => (await import("./list.handler-ijBH6Ow_.mjs")).handleInvitesList,
22
+ loadHandler: async () => (await import("./list.handler-LxZInip2.mjs")).handleInvitesList,
23
23
  subcommands: [createTypedCommand({
24
24
  name: "list",
25
25
  description: "List pending invites for the current user",
26
26
  schema: InvitesListOptionsSchema,
27
27
  optionsConfig: { ...JSON_OPTION_CONFIG },
28
- loadHandler: async () => (await import("./list.handler-ijBH6Ow_.mjs")).handleInvitesList
28
+ loadHandler: async () => (await import("./list.handler-LxZInip2.mjs")).handleInvitesList
29
29
  }), createTypedCommand({
30
30
  name: "accept",
31
31
  description: "Accept a pending invite",
@@ -36,7 +36,7 @@ function createInvitesCommand() {
36
36
  description: "Invite ID to accept",
37
37
  key: "inviteId"
38
38
  },
39
- loadHandler: async () => (await import("./accept.handler-tvT9pleH.mjs")).handleInvitesAccept
39
+ loadHandler: async () => (await import("./accept.handler-DNfIXPSP.mjs")).handleInvitesAccept
40
40
  })]
41
41
  });
42
42
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { a as ui } from "./keystroke.mjs";
4
4
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
5
- import { i as requireClient } from "./context-DHOTSgPb.mjs";
5
+ import { i as requireClient } from "./context-sgKhRc5v.mjs";
6
6
  import { i as requireOrganizationId, n as isIamJsonMode, t as handleIamError } from "./iam-command-utils-CSZj4XlH.mjs";
7
7
  import Table from "cli-table3";
8
8
  //#region src/commands/org/invites.list.handler.ts
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { a as ui } from "./keystroke.mjs";
4
4
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
5
- import { i as requireClient } from "./context-DHOTSgPb.mjs";
5
+ import { i as requireClient } from "./context-sgKhRc5v.mjs";
6
6
  import { i as requireOrganizationId, n as isIamJsonMode, t as handleIamError } from "./iam-command-utils-CSZj4XlH.mjs";
7
7
  //#region src/commands/org/invites.resend.handler.ts
8
8
  async function handleOrgInvitesResend(options, ctx) {
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { a as ui } from "./keystroke.mjs";
4
4
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
5
- import { i as requireClient } from "./context-DHOTSgPb.mjs";
5
+ import { i as requireClient } from "./context-sgKhRc5v.mjs";
6
6
  import { i as requireOrganizationId, n as isIamJsonMode, r as requireConfirmation, t as handleIamError } from "./iam-command-utils-CSZj4XlH.mjs";
7
7
  //#region src/commands/org/invites.revoke.handler.ts
8
8
  async function handleOrgInvitesRevoke(options, ctx) {
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as getKeystrokeBaseDir } from "./paths-JzzFkXQA-CEipIeVl.mjs";
3
+ import { n as getKeystrokeBaseDir } from "./paths-DpHfoaXN-CdPimpky.mjs";
4
4
  import { n as DEFAULT_CLI_WEB_URL, t as DEFAULT_CLI_SERVER_URL } from "./default-urls-BoSm4s9C.mjs";
5
- import * as os from "node:os";
6
5
  import * as path$1 from "node:path";
7
6
  import path from "node:path";
7
+ import * as os from "node:os";
8
8
  import * as fsPromises from "node:fs/promises";
9
9
  import * as fs from "node:fs";
10
10
  import { existsSync, writeFileSync } from "node:fs";
@@ -521,7 +521,7 @@ const logger = {
521
521
  };
522
522
  //#endregion
523
523
  //#region package.json
524
- var version = "0.0.29";
524
+ var version = "0.0.31";
525
525
  //#endregion
526
526
  //#region src/command-registry.ts
527
527
  const ROOT_OPTIONS_WITH_VALUES$1 = new Set([
@@ -533,84 +533,92 @@ const ROOT_VERSION_FLAGS = new Set(["-V", "--version"]);
533
533
  const lazyCommandDefinitions = [
534
534
  {
535
535
  name: "agents",
536
- loadCommand: async () => (await import("./agents-Bc3B9_ms.mjs")).createAgentsCommand()
536
+ loadCommand: async () => (await import("./agents-G37PM35Z.mjs")).createAgentsCommand()
537
537
  },
538
538
  {
539
539
  name: "admin",
540
- loadCommand: async () => (await import("./admin-DsAQ0WWj.mjs")).createAdminCommand()
540
+ loadCommand: async () => (await import("./admin-CJp8XksD.mjs")).createAdminCommand()
541
541
  },
542
542
  {
543
543
  name: "api-keys",
544
- loadCommand: async () => (await import("./api-keys-tle_m3kk.mjs")).createApiKeysCommand()
544
+ loadCommand: async () => (await import("./api-keys-4igNHJ_W.mjs")).createApiKeysCommand()
545
545
  },
546
546
  {
547
547
  name: "auth",
548
- loadCommand: async () => (await import("./auth-DLaY5yCZ.mjs")).createAuthCommand()
548
+ loadCommand: async () => (await import("./auth-CIOmmV4x.mjs")).createAuthCommand()
549
549
  },
550
550
  {
551
551
  name: "connect",
552
- loadCommand: async () => (await import("./connect-zNUiEjbR.mjs")).createConnectCommand()
552
+ loadCommand: async () => (await import("./connect-BbLJhlIA.mjs")).createConnectCommand()
553
553
  },
554
554
  {
555
555
  name: "credentials",
556
- loadCommand: async () => (await import("./credentials-DzmutsMa.mjs")).createCredentialsCommand(),
556
+ loadCommand: async () => (await import("./credentials-CsncZ52a.mjs")).createCredentialsCommand(),
557
557
  copyInheritedSettings: true
558
558
  },
559
559
  {
560
560
  name: "org",
561
- loadCommand: async () => (await import("./org-BD4fj8Yh.mjs")).createOrgCommand()
561
+ loadCommand: async () => (await import("./org-DOH7YHk2.mjs")).createOrgCommand()
562
562
  },
563
563
  {
564
564
  name: "deploy",
565
- loadCommand: async () => (await import("./deploy-CDY7Qo5L.mjs")).createDeployCommand()
565
+ loadCommand: async () => (await import("./deploy-DvPfR9fC.mjs")).createDeployCommand()
566
566
  },
567
567
  {
568
568
  name: "init",
569
- loadCommand: async () => (await import("./init-DonAqdBg.mjs")).createInitCommand()
569
+ loadCommand: async () => (await import("./init-DX08T87c.mjs")).createInitCommand()
570
570
  },
571
571
  {
572
572
  name: "integrations",
573
- loadCommand: async () => (await import("./integrations-CMg20Q9z.mjs")).createIntegrationsCommand()
573
+ loadCommand: async () => (await import("./integrations-MEExmqcg.mjs")).createIntegrationsCommand()
574
574
  },
575
575
  {
576
576
  name: "invites",
577
- loadCommand: async () => (await import("./invites-RO4Dy-m6.mjs")).createInvitesCommand()
577
+ loadCommand: async () => (await import("./invites-BuatfJmN.mjs")).createInvitesCommand()
578
578
  },
579
579
  {
580
580
  name: "logs",
581
- loadCommand: async () => (await import("./logs-DiH8JXn1.mjs")).createLogsCommand()
581
+ loadCommand: async () => (await import("./logs-B9YMhUGt.mjs")).createLogsCommand()
582
582
  },
583
583
  {
584
584
  name: "listen",
585
- loadCommand: async () => (await import("./listen-CEn4PucV.mjs")).createListenCommand()
585
+ loadCommand: async () => (await import("./listen-C_7Rgwkb.mjs")).createListenCommand()
586
+ },
587
+ {
588
+ name: "operations",
589
+ loadCommand: async () => (await import("./operations-AWMLs6mE.mjs")).createOperationsCommand()
586
590
  },
587
591
  {
588
592
  name: "projects",
589
- loadCommand: async () => (await import("./projects-CgtfPFGu.mjs")).createProjectsCommand()
593
+ loadCommand: async () => (await import("./projects-C5GZ5Jrf.mjs")).createProjectsCommand()
590
594
  },
591
595
  {
592
596
  name: "runs",
593
- loadCommand: async () => (await import("./runs-CZRwB58H.mjs")).createRunsCommand()
597
+ loadCommand: async () => (await import("./runs-swYYBT6C.mjs")).createRunsCommand()
598
+ },
599
+ {
600
+ name: "search",
601
+ loadCommand: async () => (await import("./search-BEfy2fG9.mjs")).createSearchCommand()
594
602
  },
595
603
  {
596
604
  name: "skills",
597
- loadCommand: async () => (await import("./skills.command-B6jly3ew.mjs")).createSkillsCommand()
605
+ loadCommand: async () => (await import("./skills.command-0-E8mcYE.mjs")).createSkillsCommand()
598
606
  },
599
607
  {
600
608
  name: "sync",
601
- loadCommand: async () => (await import("./sync-BssJv3Fd.mjs")).createSyncCommand()
609
+ loadCommand: async () => (await import("./sync-6fZkIUtn.mjs")).createSyncCommand()
602
610
  },
603
611
  {
604
612
  name: "test",
605
- loadCommand: async () => (await import("./test-RFvyK7rK.mjs")).createTestCommand()
613
+ loadCommand: async () => (await import("./test-C8VIZe9V.mjs")).createTestCommand()
606
614
  },
607
615
  {
608
616
  name: "upgrade",
609
- loadCommand: async () => (await import("./upgrade-B6Prb1K-.mjs")).createUpgradeCommand()
617
+ loadCommand: async () => (await import("./upgrade-DgOcc8IT.mjs")).createUpgradeCommand()
610
618
  },
611
619
  {
612
620
  name: "workflows",
613
- loadCommand: async () => (await import("./workflows-Lz8M15i7.mjs")).createWorkflowsCommand()
621
+ loadCommand: async () => (await import("./workflows-DjMlxuBX.mjs")).createWorkflowsCommand()
614
622
  }
615
623
  ];
616
624
  function selectCommandRegistration(argv, commandNames = new Set(lazyCommandDefinitions.map((definition) => definition.name))) {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as ui, n as style, t as ANSI } from "./keystroke.mjs";
4
- import { n as resolveCredentialValuesFromEnv, t as groupCredentialRequirements } from "./credentials-N4L3Vaib.mjs";
4
+ import { n as resolveCredentialValuesFromEnv, t as groupCredentialRequirements } from "./credentials-DKrSaaLw.mjs";
5
5
  import path from "node:path";
6
6
  import { readFile } from "node:fs/promises";
7
7
  import { parse } from "dotenv";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as ui, n as style, t as ANSI } from "./keystroke.mjs";
4
- import { i as projects } from "./dist-D_KgdxW5.mjs";
4
+ import { i as projects } from "./dist-Dw7gCE7y.mjs";
5
5
  import { i as readProjectConfig } from "./project-config-DudGRFPO.mjs";
6
6
  import { i as writeJson } from "./output-BWcVRt-T.mjs";
7
7
  import { access } from "node:fs/promises";