@keystrokehq/cli 0.0.17 → 0.0.19

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 (152) hide show
  1. package/README.md +1 -1
  2. package/dist/{accept.handler-BPwp_UAE.mjs → accept.handler-BVmNNAgL.mjs} +4 -4
  3. package/dist/{admin-Bb9Hx-gO.mjs → admin-DQlHFuXn.mjs} +11 -11
  4. package/dist/{agents-CbmvvOAx.mjs → agents-Dd7UeQCw.mjs} +10 -10
  5. package/dist/{api-keys-DJlyIf10.mjs → api-keys-BsMBFiD_.mjs} +6 -6
  6. package/dist/{api-jkf0TTgD.mjs → api-nR61stdq.mjs} +4 -5
  7. package/dist/{auth-DpDEkJz7.mjs → auth-ZTuuEoD6.mjs} +12 -7
  8. package/dist/{auth.handler-u3qmoUX0.mjs → auth.handler-C1dZBdaG.mjs} +60 -27
  9. package/dist/{build-agents-DseUtzd4-VYWtIZy9.mjs → build-agents-DseUtzd4-CthuIecx.mjs} +6 -6
  10. package/dist/{build-metadata-C8Ra_Gi--BdoyLQMl.mjs → build-metadata-C8Ra_Gi--L3l8w0rh.mjs} +7 -7
  11. package/dist/{build-progress-BZivcVz4.mjs → build-progress-AR8xow4_.mjs} +2 -2
  12. package/dist/{build-tasks-GVuMLS0h-p08mMOyK.mjs → build-tasks-GVuMLS0h-BaPhhGXO.mjs} +3 -3
  13. package/dist/{build-workflows-CV4tBo6S-knCnBKTc.mjs → build-workflows-CV4tBo6S-szwrAGWT.mjs} +10 -10
  14. package/dist/{build.handler-BNSC_zhQ.mjs → build.handler-DJrEMCBw.mjs} +7 -7
  15. package/dist/{clear-cache.handler-gr5VmEYB.mjs → clear-cache.handler-CTLQ1PIN.mjs} +3 -3
  16. package/dist/clear.handler-BgeAg2de.mjs +68 -0
  17. package/dist/{clear.handler-CtOZ4aRn.mjs → clear.handler-C_pXAeBG.mjs} +3 -2
  18. package/dist/{commander-D15UZVjp.mjs → commander-C5qcOo8m.mjs} +4 -4
  19. package/dist/{connect-DzSNDSmI.mjs → connect-BtBKoXpi.mjs} +3 -3
  20. package/dist/{connect.handler-DRO05ak3.mjs → connect.handler-E8CmLRSF.mjs} +5 -5
  21. package/dist/{context-B1L8pZsH.mjs → context-BydAGTiB.mjs} +49 -17
  22. package/dist/{create.handler-DF1Ye4nr.mjs → create.handler-CBxIPC3r.mjs} +3 -3
  23. package/dist/{credential-env-map-B2nVJXPn.mjs → credential-env-map-BA4LNI7x.mjs} +6 -5
  24. package/dist/{credential-requirements-FtBk5JVB.mjs → credential-requirements-Ob-7H-0F.mjs} +3 -3
  25. package/dist/{credential-schema-mismatch-CfyBUMPS.mjs → credential-schema-mismatch-z74ud-YZ.mjs} +1 -1
  26. package/dist/{credentials-VidBoOd7.mjs → credentials-BGaRMclS.mjs} +7 -7
  27. package/dist/{credentials-CiOwDS5y.mjs → credentials-jRiXEr6P.mjs} +1 -1
  28. package/dist/{current-deployment-workflow-BRUEdPrN.mjs → current-deployment-workflow-BVliROAz.mjs} +6 -6
  29. package/dist/{current.handler-QZQ-l84v.mjs → current.handler-DBl9S67d.mjs} +3 -3
  30. package/dist/{default-urls-BS4twrsS.mjs → default-urls-BoSm4s9C.mjs} +1 -1
  31. package/dist/{delete.handler-Bude0SVP.mjs → delete.handler-Buu7Ip0D.mjs} +2 -2
  32. package/dist/{deploy-CJbVB7e2.mjs → deploy-BPDUTKZD.mjs} +1 -1
  33. package/dist/{deploy-eshEEiP-.mjs → deploy-CzTlgAFj.mjs} +2 -2
  34. package/dist/{deploy-progress-DJHph1Fz.mjs → deploy-progress-DK87VKJ-.mjs} +2 -2
  35. package/dist/{deploy.handler-BxxWI7nV.mjs → deploy.handler-CCcJ7y3A.mjs} +20 -20
  36. package/dist/{detect-env-access-CwkOYeYM-CZIixHeR.mjs → detect-env-access-CwkOYeYM-CNTyUzme.mjs} +1 -1
  37. package/dist/{diff-utils-4OQTpP5s.mjs → diff-utils-B0ED-Igv.mjs} +1 -1
  38. package/dist/{diff.handler-CzrKCj7N.mjs → diff.handler-DUVFixeG.mjs} +7 -7
  39. package/dist/dist-CIInPRGh.mjs +1071 -0
  40. package/dist/{dist-FQYQ2FLm.mjs → dist-Cx0RV8s7.mjs} +15 -15
  41. package/dist/{env.handler-B3YDQIVE.mjs → env.handler-C8kNFz2U.mjs} +10 -10
  42. package/dist/{error-boundary-CyLcinp1.mjs → error-boundary-B8cmSwJH.mjs} +3 -3
  43. package/dist/{file-metadata-DaPPpiTh.mjs → file-metadata-lrX05iRt.mjs} +1 -1
  44. package/dist/{iam-command-utils-ByLX0A-V.mjs → iam-command-utils-CSZj4XlH.mjs} +2 -2
  45. package/dist/{import-module--8x5SLum-DaUNACER.mjs → import-module--8x5SLum-DjPUZr4i.mjs} +12 -11
  46. package/dist/{init-CWFJdKNs.mjs → init-DeeOVc9m.mjs} +3 -3
  47. package/dist/{init.handler-BZSoM76V.mjs → init.handler-BMdhpusQ.mjs} +8 -8
  48. package/dist/{inspect.handler-umc7of-r.mjs → inspect.handler-QyTo8rWO.mjs} +8 -8
  49. package/dist/{integration-catalog-BgT4mLzW.mjs → integration-catalog-CmvYPvI6.mjs} +3 -3
  50. package/dist/integrations-tXZM-84g.mjs +185 -0
  51. package/dist/{invites-Cqi7iyIN.mjs → invites-ClyAatBW.mjs} +5 -5
  52. package/dist/{invites.list.handler-CErgY35S.mjs → invites.list.handler-CPkK_tPM.mjs} +4 -4
  53. package/dist/{invites.resend.handler-DRCRIA4F.mjs → invites.resend.handler-DIRI7tS2.mjs} +4 -4
  54. package/dist/{invites.revoke.handler-C0FZdAR0.mjs → invites.revoke.handler-CcXcDBlU.mjs} +4 -4
  55. package/dist/keystroke.mjs +561 -209
  56. package/dist/{list-enrichment-C6u5eI0j.mjs → list-enrichment-B9238wom.mjs} +3 -3
  57. package/dist/{list.handler-CBEXiTAK.mjs → list.handler-BB-Dcm5B.mjs} +3 -3
  58. package/dist/{list.handler-c-8RpgB9.mjs → list.handler-BLkQKiV1.mjs} +17 -16
  59. package/dist/{list.handler-Cr_DFAae.mjs → list.handler-Cbc9rlBx.mjs} +3 -3
  60. package/dist/{list.handler-DYdNWjgk.mjs → list.handler-ClPAPSWm.mjs} +4 -4
  61. package/dist/{list.handler-D-YFoKLU.mjs → list.handler-DdFGHkqt.mjs} +7 -7
  62. package/dist/{list.handler-FlchXrKz.mjs → list.handler-Xl_F89kq.mjs} +4 -4
  63. package/dist/{list2.handler-T5v4EK20.mjs → list.handler-tnsRn-Rj.mjs} +7 -7
  64. package/dist/{listen-rHLiCWbn.mjs → listen-ksMVpdNa.mjs} +3 -3
  65. package/dist/{listen.handler-B9T58yAj.mjs → listen.handler-DEJSBg8y.mjs} +4 -4
  66. package/dist/logs-C-JxXsgc.mjs +58 -0
  67. package/dist/{logs.handler-DGcGN2qb.mjs → logs.handler-BIegqc2p.mjs} +4 -4
  68. package/dist/logs.handler-DyRoevtO.mjs +53 -0
  69. package/dist/{members.add.handler-DmYI43rZ.mjs → members.add.handler-D4ggN2Xi.mjs} +4 -4
  70. package/dist/{members.invite.handler-B_KVxv5m.mjs → members.invite.handler-BYIt6Oib.mjs} +4 -4
  71. package/dist/{members.list.handler-BtuuIgQS.mjs → members.list.handler-CvpeYKC4.mjs} +4 -4
  72. package/dist/{members.remove.handler-Lvg-CqVv.mjs → members.remove.handler-C4GBUVYE.mjs} +4 -4
  73. package/dist/{members.update.handler-D-8izeso.mjs → members.update.handler-TpM1oi0L.mjs} +4 -4
  74. package/dist/{normalize-path-CojS-CgQ-DFTvyA27.mjs → normalize-path-CojS-CgQ-D4wSBHgG.mjs} +1 -1
  75. package/dist/{org-DUCts2MV.mjs → org-DIGyb7XZ.mjs} +17 -17
  76. package/dist/{orgs.create.handler-vXQgDJZ_.mjs → orgs.create.handler-RIYhse_Q.mjs} +4 -4
  77. package/dist/{orgs.get.handler-D_Jfl18x.mjs → orgs.get.handler-BfOpbSom.mjs} +4 -4
  78. package/dist/{orgs.list.handler-BNjoTJvV.mjs → orgs.list.handler-BMgj9yTD.mjs} +4 -4
  79. package/dist/{output-CGdYhH0p.mjs → output-BWcVRt-T.mjs} +1 -1
  80. package/dist/paths-JzzFkXQA-CEipIeVl.mjs +36 -0
  81. package/dist/{paused.handler-ST9dCe8E.mjs → paused.handler-DAZ1EaLN.mjs} +3 -3
  82. package/dist/{projects-DfaG_3WP.mjs → projects-BndElPAx.mjs} +5 -3
  83. package/dist/{projects-CbquwUlm.mjs → projects-Cy6CH3fI.mjs} +5 -5
  84. package/dist/{register.handler-BAx0IC-u.mjs → register.handler-BXeh5mdb.mjs} +20 -11
  85. package/dist/{requirements.handler-D5dFi7XZ.mjs → requirements.handler-C5vobjdJ.mjs} +7 -7
  86. package/dist/resolve-cli-credentials-DytxgMwn.mjs +47 -0
  87. package/dist/{resolve-project-CURYMjex.mjs → resolve-project-CNQtOWE4.mjs} +7 -7
  88. package/dist/{run-polling-BWcLQvm0.mjs → run-polling-BhOdFyh3.mjs} +5 -5
  89. package/dist/{run.handler-BiBDLoeH.mjs → run.handler-BpLmwF_a.mjs} +9 -9
  90. package/dist/{runs-Bc3zjk7V.mjs → runs-DaSd4eXn.mjs} +4 -4
  91. package/dist/{schemas-DodkHgnS.mjs → schemas-BxFPUGWT.mjs} +3 -2
  92. package/dist/{skill-installer-DkRJ6oLi.mjs → skill-installer-BBgN2tzW.mjs} +2 -2
  93. package/dist/{skills-sync.handler-C4ztv1Vu.mjs → skills-sync.handler-DOxudKmV.mjs} +3 -3
  94. package/dist/{skills.command-DuL4kLUi.mjs → skills.command-DQc_qGAF.mjs} +5 -5
  95. package/dist/{skills.handler-R5KAbioE.mjs → skills.handler-Do9I3dQS.mjs} +1 -1
  96. package/dist/{source-analysis-BBg2E_6G-BQqm16RR.mjs → source-analysis-BBg2E_6G-Ut7kYHOz.mjs} +4 -4
  97. package/dist/{spinner-progress-DfkMzwGx.mjs → spinner-progress-Bx-fYItP.mjs} +1 -1
  98. package/dist/{src-BQdOWkyv.mjs → src-0XVwHXNp.mjs} +1 -1
  99. package/dist/{status.handler-DxCJRm1n.mjs → status.handler-BsVtDW_V.mjs} +19 -4
  100. package/dist/{switch.handler-CTwhIcaQ.mjs → switch.handler-CCjMrRZN.mjs} +5 -5
  101. package/dist/{sync-Pssitj6K.mjs → sync-BdTQDZjP.mjs} +2 -2
  102. package/dist/{sync.handler-Be0U3x-n.mjs → sync.handler-DjY8nqbB.mjs} +9 -9
  103. package/dist/{task-BNXDZU71.mjs → task-BRmL2lmw.mjs} +2 -2
  104. package/dist/{task-target-build-BG6cC3bz.mjs → task-target-build-DCV0UDaz.mjs} +8 -7
  105. package/dist/{task-target-deploy-CZBGNC0H-Ck724yF4.mjs → task-target-deploy-CZBGNC0H-I-tvkGCC.mjs} +1 -1
  106. package/dist/{task-target-deploy-gMQC8kXU.mjs → task-target-deploy-DmpCWE3u.mjs} +1 -1
  107. package/dist/task-target-deploy-runner.mjs +22 -17
  108. package/dist/{test-CKBpp1gg.mjs → test-TTQXrhHm.mjs} +4 -4
  109. package/dist/{test.handler-DkizZhVu.mjs → test.handler-B7Ahe9ta.mjs} +12 -12
  110. package/dist/{test.handler-Dk3CmTa7.mjs → test.handler-CkkplyX6.mjs} +2 -2
  111. package/dist/{tool.handler--IzRGelu.mjs → tool.handler-DMfFZCRg.mjs} +34 -14
  112. package/dist/{trigger-artifacts-RizI57RC-CxHwCkQ_.mjs → trigger-artifacts-RizI57RC-DjhOsdOm.mjs} +4 -4
  113. package/dist/{trigger-manifest-PTjVYL1r.mjs → trigger-manifest-DxdCjGz_.mjs} +1 -1
  114. package/dist/{upgrade-cH9I_pZq.mjs → upgrade-Cx-bUWUc.mjs} +2 -2
  115. package/dist/{upgrade.handler-CXEF4ue0.mjs → upgrade.handler-5qSzPC7D.mjs} +1 -1
  116. package/dist/{upload.handler-CpKuAaQ_.mjs → upload.handler-_d2WZwxd.mjs} +10 -10
  117. package/dist/{users.get.handler-D0WO6D1K.mjs → users.get.handler-DIooG7Wy.mjs} +4 -4
  118. package/dist/{users.list.handler-BSTIniF1.mjs → users.list.handler-DdGW-DSg.mjs} +4 -4
  119. package/dist/{users.set-role.handler-DAKdSkbn.mjs → users.set-role.handler-Ek-kntLp.mjs} +4 -4
  120. package/dist/{utils-VC0Vl_pm.mjs → utils-BMUWnz1P.mjs} +2 -2
  121. package/dist/{validate.handler-I8LY-UkG.mjs → validate.handler-Cq2uJjXY.mjs} +8 -8
  122. package/dist/{workflow-build-C9rQQ4qU.mjs → workflow-build-C8AiYxqp.mjs} +23 -23
  123. package/dist/{workflow-build-manifest-OPFqFD6f.mjs → workflow-build-manifest-BKKW9D05.mjs} +3 -3
  124. package/dist/{workflow-bundler-BzHk73PM-AIB4-u4Y.mjs → workflow-bundler-BzHk73PM-WI31RJjH.mjs} +3 -3
  125. package/dist/{workflows-CL1jYSLR.mjs → workflows-K6zetcqI.mjs} +16 -16
  126. package/dist/{writer-B-SpZ0G2-olEAgSLc.mjs → writer-B-SpZ0G2-CLh7sXRd.mjs} +6 -6
  127. package/package.json +5 -5
  128. package/dist/clear.handler-Dpe05eTq.mjs +0 -42
  129. package/dist/dist-BF6r1hfv.mjs +0 -308
  130. package/dist/integrations-DKtl_aES.mjs +0 -85
  131. package/dist/logs-DUwdYZB-.mjs +0 -28
  132. package/dist/logs.handler-dcRq-zoc.mjs +0 -35
  133. package/dist/{agent-bundle-package-DWV6B_5q-rRTPU13L.mjs → agent-bundle-package-DWV6B_5q-FPT0bJaA.mjs} +0 -0
  134. package/dist/{agent-manifest-CZdlCTFs.mjs → agent-manifest-tIsqF2OP.mjs} +0 -0
  135. package/dist/{browser-3cUiPlk2.mjs → browser-BpJ8ut9z.mjs} +0 -0
  136. package/dist/{common-BaGFkj3n.mjs → common-AK0q0Oz0.mjs} +0 -0
  137. package/dist/{concurrency-gXn9Rw8x-BI6HQNfC.mjs → concurrency-gXn9Rw8x-BTlfau8D.mjs} +0 -0
  138. package/dist/{cron-parser-C2eJD0yD.mjs → cron-parser-Dw_cWzFu.mjs} +0 -0
  139. package/dist/{declared-credential-requirements-B6h4WRv4.mjs → declared-credential-requirements-D6KT-r-e.mjs} +0 -0
  140. package/dist/{layout-CXkZEsXI.mjs → layout-P1v-Gssz.mjs} +0 -0
  141. package/dist/{metadata-layout-Bv-B0nHj-CqlcZz_g.mjs → metadata-layout-Bv-B0nHj-B1c5giJ7.mjs} +1 -1
  142. package/dist/{oxc-B3KI3rf_-DdiZWqe2.mjs → oxc-B3KI3rf_-Cvx4Z-4H.mjs} +0 -0
  143. package/dist/{project-config-CsBMT4TL.mjs → project-config-DudGRFPO.mjs} +1 -1
  144. package/dist/{read-credential-keys-77a91T8M-DMmY6oDW.mjs → read-credential-keys-77a91T8M-B0eiobOd.mjs} +0 -0
  145. package/dist/{rolldown-runtime-twds-ZHy-CO5ir_za.mjs → rolldown-runtime-twds-ZHy-8uqgIurC.mjs} +0 -0
  146. package/dist/{run-polling-CwlzB5-9.mjs → run-polling-DARidqo-.mjs} +0 -0
  147. package/dist/{schema-O9xTWad_.mjs → schema-BjH_e4Fo.mjs} +0 -0
  148. package/dist/{schema-_FQrHcIS.mjs → schema-Lbp5lGJu.mjs} +0 -0
  149. package/dist/{schema-display-CNqiYBIb.mjs → schema-display-NVEl_DFY.mjs} +0 -0
  150. package/dist/{source-analysis-CJPymdaA.mjs → source-analysis-Cs0CTBQk.mjs} +0 -0
  151. package/dist/{types-D04ah3uY.mjs → types-BMBuhHhW.mjs} +0 -0
  152. package/dist/{upload-wwSPAC5_.mjs → upload-BbcMkyVl.mjs} +1 -1
package/README.md CHANGED
@@ -152,7 +152,7 @@ keystroke test tool <tool-name> --agent <agent-id-or-name> --input-file ./input.
152
152
  `keystroke auth` works out of the box against the hosted Keystroke service:
153
153
 
154
154
  - Web URL: `https://keystroke.ai`
155
- - API URL: `https://api.kestroke.ai`
155
+ - API URL: `https://api.keystroke.ai`
156
156
 
157
157
  Use `WEB_URL` / `SERVER_URL` or the `--web-url` / `--server-url` flags when pointing the CLI at a local, staging, or preview environment.
158
158
 
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as ui } from "./keystroke.mjs";
4
- import { i as writeJson } from "./output-CGdYhH0p.mjs";
5
- import { i as requireClient } from "./context-B1L8pZsH.mjs";
6
- import { n as isIamJsonMode, t as handleIamError } from "./iam-command-utils-ByLX0A-V.mjs";
3
+ import { a as ui } from "./keystroke.mjs";
4
+ import { i as writeJson } from "./output-BWcVRt-T.mjs";
5
+ import { i as requireClient } from "./context-BydAGTiB.mjs";
6
+ import { n as isIamJsonMode, t as handleIamError } from "./iam-command-utils-CSZj4XlH.mjs";
7
7
  //#region src/commands/invites/accept.handler.ts
8
8
  async function handleInvitesAccept(options, ctx) {
9
9
  const client = requireClient(ctx);
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
4
- import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
5
- import { t as OrgRoleSchema } from "./schema-_FQrHcIS.mjs";
3
+ import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-BWcVRt-T.mjs";
4
+ import { t as createTypedCommand } from "./commander-C5qcOo8m.mjs";
5
+ import { t as OrgRoleSchema } from "./schema-Lbp5lGJu.mjs";
6
6
  import { z } from "zod";
7
7
  //#region src/commands/admin/orgs.command.ts
8
8
  const AdminOrgsCreateOptionsSchema = JsonOptionSchema.extend({ name: z.string().min(1) });
@@ -28,21 +28,21 @@ function createAdminOrgsCommand() {
28
28
  description: "Manage organizations as a platform admin",
29
29
  schema: AdminOrgsListOptionsSchema,
30
30
  optionsConfig: { ...JSON_OPTION_CONFIG },
31
- loadHandler: async () => (await import("./orgs.list.handler-BNjoTJvV.mjs")).handleAdminOrgsList,
31
+ loadHandler: async () => (await import("./orgs.list.handler-BMgj9yTD.mjs")).handleAdminOrgsList,
32
32
  subcommands: [
33
33
  createTypedCommand({
34
34
  name: "create",
35
35
  description: "Create an organization (requires system.create_org)",
36
36
  schema: AdminOrgsCreateOptionsSchema,
37
37
  optionsConfig: CREATE_OPTIONS_CONFIG,
38
- loadHandler: async () => (await import("./orgs.create.handler-vXQgDJZ_.mjs")).handleAdminOrgsCreate
38
+ loadHandler: async () => (await import("./orgs.create.handler-RIYhse_Q.mjs")).handleAdminOrgsCreate
39
39
  }),
40
40
  createTypedCommand({
41
41
  name: "list",
42
42
  description: "List organizations (requires system.view_orgs)",
43
43
  schema: AdminOrgsListOptionsSchema,
44
44
  optionsConfig: { ...JSON_OPTION_CONFIG },
45
- loadHandler: async () => (await import("./orgs.list.handler-BNjoTJvV.mjs")).handleAdminOrgsList
45
+ loadHandler: async () => (await import("./orgs.list.handler-BMgj9yTD.mjs")).handleAdminOrgsList
46
46
  }),
47
47
  createTypedCommand({
48
48
  name: "get",
@@ -54,7 +54,7 @@ function createAdminOrgsCommand() {
54
54
  description: "Organization ID",
55
55
  key: "orgId"
56
56
  },
57
- loadHandler: async () => (await import("./orgs.get.handler-D_Jfl18x.mjs")).handleAdminOrgsGet
57
+ loadHandler: async () => (await import("./orgs.get.handler-BfOpbSom.mjs")).handleAdminOrgsGet
58
58
  })
59
59
  ]
60
60
  });
@@ -157,14 +157,14 @@ function createAdminUsersCommand() {
157
157
  description: "Manage platform users",
158
158
  schema: AdminUsersListOptionsSchema,
159
159
  optionsConfig: { ...JSON_OPTION_CONFIG },
160
- loadHandler: async () => (await import("./users.list.handler-BSTIniF1.mjs")).handleAdminUsersList,
160
+ loadHandler: async () => (await import("./users.list.handler-DdGW-DSg.mjs")).handleAdminUsersList,
161
161
  subcommands: [
162
162
  createTypedCommand({
163
163
  name: "list",
164
164
  description: "List platform users",
165
165
  schema: AdminUsersListOptionsSchema,
166
166
  optionsConfig: { ...JSON_OPTION_CONFIG },
167
- loadHandler: async () => (await import("./users.list.handler-BSTIniF1.mjs")).handleAdminUsersList
167
+ loadHandler: async () => (await import("./users.list.handler-DdGW-DSg.mjs")).handleAdminUsersList
168
168
  }),
169
169
  createTypedCommand({
170
170
  name: "get",
@@ -176,7 +176,7 @@ function createAdminUsersCommand() {
176
176
  description: "User ID",
177
177
  key: "userId"
178
178
  },
179
- loadHandler: async () => (await import("./users.get.handler-D0WO6D1K.mjs")).handleAdminUsersGet
179
+ loadHandler: async () => (await import("./users.get.handler-DIooG7Wy.mjs")).handleAdminUsersGet
180
180
  }),
181
181
  createTypedCommand({
182
182
  name: "set-role",
@@ -188,7 +188,7 @@ function createAdminUsersCommand() {
188
188
  description: "User ID",
189
189
  key: "userId"
190
190
  },
191
- loadHandler: async () => (await import("./users.set-role.handler-DAKdSkbn.mjs")).handleAdminUsersSetRole
191
+ loadHandler: async () => (await import("./users.set-role.handler-Ek-kntLp.mjs")).handleAdminUsersSetRole
192
192
  })
193
193
  ]
194
194
  });
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { N as throwReportedCliExit, f as ANSI, n as ui, p as style, x as toErrorMessage } from "./keystroke.mjs";
4
- import { d as trackProject } from "./dist-BF6r1hfv.mjs";
5
- import { i as writeJson, n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
6
- import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
7
- import { i as readAgentManifestsFromOutDir } from "./dist-FQYQ2FLm.mjs";
8
- import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
9
- import { t as createSpinnerProgress } from "./spinner-progress-DfkMzwGx.mjs";
10
- import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-C9rQQ4qU.mjs";
11
- import { i as resolveTypeHint } from "./schema-display-CNqiYBIb.mjs";
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-CIInPRGh.mjs";
5
+ import { i as writeJson, n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-BWcVRt-T.mjs";
6
+ import { t as createTypedCommand } from "./commander-C5qcOo8m.mjs";
7
+ import { i as readAgentManifestsFromOutDir } from "./dist-Cx0RV8s7.mjs";
8
+ import { t as requireWorkflowsDir } from "./resolve-project-CNQtOWE4.mjs";
9
+ import { t as createSpinnerProgress } from "./spinner-progress-Bx-fYItP.mjs";
10
+ import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-C8AiYxqp.mjs";
11
+ import { i as resolveTypeHint } from "./schema-display-NVEl_DFY.mjs";
12
12
  import { z } from "zod";
13
13
  //#region src/commands/agents/inspect-display.ts
14
14
  function renderAgentManifestInspect(manifest, options = {}) {
@@ -114,7 +114,7 @@ const agentInspectDependencies = {
114
114
  };
115
115
  async function handleAgentsInspect(options, ctx) {
116
116
  const resolved = await resolveAgentManifest(options.agent, options.path, { jsonMode: ctx.jsonMode });
117
- trackProject(resolved.workflowsDir);
117
+ projects.track(resolved.workflowsDir);
118
118
  if (ctx.jsonMode) {
119
119
  writeJson({
120
120
  manifest: resolved.manifest,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
4
- import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
3
+ import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-BWcVRt-T.mjs";
4
+ import { t as createTypedCommand } from "./commander-C5qcOo8m.mjs";
5
5
  import { z } from "zod";
6
6
  //#region src/commands/api-keys/api-keys.command.ts
7
7
  const ApiKeysCreateOptionsSchema = JsonOptionSchema.extend({ name: z.string().optional() });
@@ -23,21 +23,21 @@ function createApiKeysCommand() {
23
23
  description: "Manage API keys for your organization",
24
24
  schema: JsonOptionSchema,
25
25
  optionsConfig: { ...JSON_OPTION_CONFIG },
26
- loadHandler: async () => (await import("./list.handler-CBEXiTAK.mjs")).handleApiKeysList,
26
+ loadHandler: async () => (await import("./list.handler-BB-Dcm5B.mjs")).handleApiKeysList,
27
27
  subcommands: [
28
28
  createTypedCommand({
29
29
  name: "list",
30
30
  description: "List all API keys for your organization",
31
31
  schema: JsonOptionSchema,
32
32
  optionsConfig: { ...JSON_OPTION_CONFIG },
33
- loadHandler: async () => (await import("./list.handler-CBEXiTAK.mjs")).handleApiKeysList
33
+ loadHandler: async () => (await import("./list.handler-BB-Dcm5B.mjs")).handleApiKeysList
34
34
  }),
35
35
  createTypedCommand({
36
36
  name: "create",
37
37
  description: "Create a new API key (raw key shown once)",
38
38
  schema: ApiKeysCreateOptionsSchema,
39
39
  optionsConfig: CREATE_OPTIONS_CONFIG,
40
- loadHandler: async () => (await import("./create.handler-DF1Ye4nr.mjs")).handleApiKeysCreate
40
+ loadHandler: async () => (await import("./create.handler-CBxIPC3r.mjs")).handleApiKeysCreate
41
41
  }),
42
42
  createTypedCommand({
43
43
  name: "delete",
@@ -49,7 +49,7 @@ function createApiKeysCommand() {
49
49
  description: "API key ID to delete",
50
50
  key: "apiKeyId"
51
51
  },
52
- loadHandler: async () => (await import("./delete.handler-Bude0SVP.mjs")).handleApiKeysDelete
52
+ loadHandler: async () => (await import("./delete.handler-Buu7Ip0D.mjs")).handleApiKeysDelete
53
53
  })
54
54
  ]
55
55
  });
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as CredentialConnectionIdSchema, r as CredentialScopeSchema, t as ConnectionStatusSchema } from "./schema-O9xTWad_.mjs";
3
+ import { n as CredentialConnectionIdSchema, r as CredentialScopeSchema, t as ConnectionStatusSchema } from "./schema-BjH_e4Fo.mjs";
4
4
  import { z } from "zod";
5
5
  //#region ../../packages/shared-types/src/connections/api.ts
6
6
  /**
@@ -113,10 +113,9 @@ const CredentialConnectionCatalogEntrySchema = z.object({
113
113
  const IntegrationCatalogEntryBaseSchema = z.object({
114
114
  publicId: z.string(),
115
115
  /**
116
- * Public-facing aliases that resolve to this canonical `publicId`
117
- * (e.g., `"github"` aliases `"github-account"`). Includes the canonical
118
- * ID itself callers can key a lookup table by every entry in this
119
- * list and get the same catalog record back.
116
+ * Lookup IDs for this catalog entry. The canonical credential definition
117
+ * ID is always included; servers may add aliases later if they reintroduce
118
+ * alternate names outside the database schema.
120
119
  */
121
120
  aliases: z.array(z.string()),
122
121
  name: z.string(),
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as DEFAULT_CLI_WEB_URL } from "./default-urls-BS4twrsS.mjs";
4
- import { S as AUTH_TIMEOUT_SECONDS } from "./keystroke.mjs";
5
- import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
3
+ import { n as DEFAULT_CLI_WEB_URL } from "./default-urls-BoSm4s9C.mjs";
4
+ import { b as AUTH_TIMEOUT_SECONDS } from "./keystroke.mjs";
5
+ import { t as createTypedCommand } from "./commander-C5qcOo8m.mjs";
6
6
  import { z } from "zod";
7
7
  //#region src/commands/auth/auth.command.ts
8
8
  const AuthOptionsSchema = z.object({
9
9
  webUrl: z.url().optional().describe("Keystroke web URL"),
10
+ insecureStorage: z.boolean().default(false).describe("Store API keys in plaintext file storage instead of the OS credential store"),
10
11
  timeout: z.coerce.number().int().min(AUTH_TIMEOUT_SECONDS.min).max(AUTH_TIMEOUT_SECONDS.max).default(AUTH_TIMEOUT_SECONDS.default).describe("Timeout in seconds")
11
12
  });
12
13
  const AUTH_OPTIONS_CONFIG = {
@@ -14,6 +15,10 @@ const AUTH_OPTIONS_CONFIG = {
14
15
  flag: "--web-url <url>",
15
16
  description: `Keystroke web URL (default: saved credentials, WEB_URL env, or ${DEFAULT_CLI_WEB_URL})`
16
17
  },
18
+ insecureStorage: {
19
+ flag: "--insecure-storage",
20
+ description: "Store the API key in plaintext file storage instead of the OS credential store"
21
+ },
17
22
  timeout: {
18
23
  flag: "--timeout <seconds>",
19
24
  description: `Authentication timeout in seconds (default: ${AUTH_TIMEOUT_SECONDS.default})`
@@ -25,28 +30,28 @@ function createAuthCommand() {
25
30
  description: "Authenticate Keystroke CLI via device flow",
26
31
  schema: AuthOptionsSchema,
27
32
  optionsConfig: AUTH_OPTIONS_CONFIG,
28
- loadHandler: async () => (await import("./auth.handler-u3qmoUX0.mjs")).handleAuth,
33
+ loadHandler: async () => (await import("./auth.handler-C1dZBdaG.mjs")).handleAuth,
29
34
  subcommands: [
30
35
  createTypedCommand({
31
36
  name: "clear",
32
37
  description: "Revoke the saved API key and remove local credentials",
33
38
  schema: z.object({}),
34
39
  optionsConfig: {},
35
- loadHandler: async () => (await import("./clear.handler-Dpe05eTq.mjs")).handleAuthClear
40
+ loadHandler: async () => (await import("./clear.handler-BgeAg2de.mjs")).handleAuthClear
36
41
  }),
37
42
  createTypedCommand({
38
43
  name: "test",
39
44
  description: "Verify that the saved API key is valid",
40
45
  schema: z.object({}),
41
46
  optionsConfig: {},
42
- loadHandler: async () => (await import("./test.handler-Dk3CmTa7.mjs")).handleAuthTest
47
+ loadHandler: async () => (await import("./test.handler-CkkplyX6.mjs")).handleAuthTest
43
48
  }),
44
49
  createTypedCommand({
45
50
  name: "status",
46
51
  description: "Show the current signed-in identity and organization context",
47
52
  schema: z.object({}),
48
53
  optionsConfig: {},
49
- loadHandler: async () => (await import("./status.handler-DxCJRm1n.mjs")).handleAuthStatus
54
+ loadHandler: async () => (await import("./status.handler-BsVtDW_V.mjs")).handleAuthStatus
50
55
  })
51
56
  ]
52
57
  });
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as DEFAULT_CLI_WEB_URL, t as DEFAULT_CLI_SERVER_URL } from "./default-urls-BS4twrsS.mjs";
4
- import { C as AUTH_URL_PATH, D as CLI_AUTH_COMMAND, E as CALLBACK_PATH, T as CALLBACK_LOOPBACK_ORIGIN, c as resolveCliWebUrl, k as CliExitError, n as ui, s as resolveCliServerUrl, u as logger, w as CALLBACK_LOOPBACK_HOST, x as toErrorMessage } from "./keystroke.mjs";
5
- import { f as upsertOrgCredentials, i as getCredentialsFilePath } from "./dist-BF6r1hfv.mjs";
6
- import { t as openBrowser } from "./browser-3cUiPlk2.mjs";
3
+ import { n as DEFAULT_CLI_WEB_URL, t as DEFAULT_CLI_SERVER_URL } from "./default-urls-BoSm4s9C.mjs";
4
+ import { C as CALLBACK_LOOPBACK_ORIGIN, D as CliExitError, P as logger, S as CALLBACK_LOOPBACK_HOST, T as CLI_AUTH_COMMAND, a as ui, d as resolveCliWebUrl, u as resolveCliServerUrl, w as CALLBACK_PATH, x as AUTH_URL_PATH, y as toErrorMessage } from "./keystroke.mjs";
5
+ import { n as credentials } from "./dist-CIInPRGh.mjs";
6
+ import { t as openBrowser } from "./browser-BpJ8ut9z.mjs";
7
7
  import { hostname } from "node:os";
8
8
  import { z } from "zod";
9
9
  import { confirm, isCancel } from "@clack/prompts";
@@ -253,8 +253,8 @@ function isLoopbackUrl(rawUrl) {
253
253
  }
254
254
  }
255
255
  function resolveAuthHosts(options, ctx) {
256
- const savedWeb = ctx.storedCredentials?.webUrl;
257
- const savedServer = ctx.storedCredentials?.serverUrl;
256
+ const savedWeb = ctx.storedServerUrls?.webUrl;
257
+ const savedServer = ctx.storedServerUrls?.serverUrl;
258
258
  const webUrl = resolveCliWebUrl(options.webUrl, savedWeb);
259
259
  const serverUrl = resolveCliServerUrl(ctx.baseUrl);
260
260
  return {
@@ -266,7 +266,7 @@ function resolveAuthHosts(options, ctx) {
266
266
  };
267
267
  }
268
268
  function shouldConfirmLoopback(hosts) {
269
- if (isLoopbackUrl("https://keystroke.ai") && isLoopbackUrl("https://api.kestroke.ai")) return false;
269
+ if (isLoopbackUrl("https://keystroke.ai") && isLoopbackUrl("https://api.keystroke.ai")) return false;
270
270
  const webNeedsConfirm = !hosts.webFromFlag && isLoopbackUrl(hosts.webUrl);
271
271
  const serverNeedsConfirm = isLoopbackUrl(hosts.serverUrl);
272
272
  return webNeedsConfirm || serverNeedsConfirm;
@@ -283,7 +283,7 @@ function printResolvedHosts(hosts) {
283
283
  async function confirmLoopbackHostsOrExit(hosts) {
284
284
  ui.br();
285
285
  ui.warn("About to authenticate against a local development environment");
286
- if (hosts.webMatchesSaved || hosts.serverMatchesSaved) ui.hint(`Saved at: ${getCredentialsFilePath()} (from a previous keystroke auth run)`);
286
+ if (hosts.webMatchesSaved || hosts.serverMatchesSaved) ui.hint(`Saved at: ${credentials.metadataFilePath} (from a previous keystroke auth run)`);
287
287
  else ui.hint("Resolved from your environment (WEB_URL / SERVER_URL).");
288
288
  ui.hint(`CLI default is ${DEFAULT_CLI_WEB_URL} / ${DEFAULT_CLI_SERVER_URL}.`);
289
289
  ui.hint("To switch hosts:");
@@ -322,11 +322,30 @@ function printAuthIntro(params) {
322
322
  ui.hint(`Opening browser: ${params.authUrl}`);
323
323
  ui.br();
324
324
  }
325
- function printAuthSuccess(email, organizationName) {
325
+ function printAuthSuccess(params) {
326
326
  ui.success("Authentication successful.");
327
- if (email) ui.hint(`Connected as: ${email}`);
328
- if (organizationName) ui.hint(`Organization: ${organizationName}`);
329
- ui.hint(`Credentials saved to ${getCredentialsFilePath()}`);
327
+ if (params.email) ui.hint(`Connected as: ${params.email}`);
328
+ if (params.organizationName) ui.hint(`Organization: ${params.organizationName}`);
329
+ ui.hint(`Credentials metadata saved to ${credentials.metadataFilePath}`);
330
+ if (params.insecureStorage) {
331
+ ui.warn(`API key saved to plaintext file storage at ${credentials.secretsFilePath}`);
332
+ return;
333
+ }
334
+ ui.hint("Secret saved to OS credential store.");
335
+ }
336
+ function isCredentialStoreError(message) {
337
+ const normalized = message.toLowerCase();
338
+ return normalized.includes("credential store") || normalized.includes("keychain");
339
+ }
340
+ function exitCredentialStoreSaveFailed(error) {
341
+ const message = toErrorMessage(error);
342
+ ui.error("Could not save the API key to the OS credential store.");
343
+ ui.hint("Unlock your keychain or credential store, then rerun `keystroke auth`.");
344
+ ui.hint("For intentional plaintext file storage, rerun `keystroke auth --insecure-storage`.");
345
+ throw new CliExitError(message, {
346
+ cause: error,
347
+ reported: true
348
+ });
330
349
  }
331
350
  async function warnIfAlreadyAuthenticated(ctx) {
332
351
  if (!ctx.client) return;
@@ -335,9 +354,8 @@ async function warnIfAlreadyAuthenticated(ctx) {
335
354
  } catch {
336
355
  return;
337
356
  }
338
- const stored = ctx.storedCredentials;
339
- const identity = stored?.user?.email ?? "unknown user";
340
- const activeOrg = stored?.orgs.find((o) => o.organizationId === stored?.activeOrgId);
357
+ const identity = ctx.storedUser?.email ?? "unknown user";
358
+ const activeOrg = ctx.storedOrgs.find((o) => o.organizationId === ctx.storedActiveOrgId);
341
359
  ui.br();
342
360
  ui.warn("Already authenticated");
343
361
  ui.hint(`Signed in as ${identity}${activeOrg ? ` (${activeOrg.organizationName})` : ""}`);
@@ -348,6 +366,10 @@ async function handleAuth(options, ctx, overrides) {
348
366
  await warnIfAlreadyAuthenticated(ctx);
349
367
  const hosts = resolveAuthHosts(options, ctx);
350
368
  printResolvedHosts(hosts);
369
+ if (options.insecureStorage) {
370
+ ui.warn("Using insecure plaintext file storage for this API key.");
371
+ ui.hint("For CI/headless usage, prefer KEYSTROKE_API_KEY.");
372
+ }
351
373
  if (shouldConfirmLoopback(hosts)) await confirmLoopbackHostsOrExit(hosts);
352
374
  const { webUrl, serverUrl } = hosts;
353
375
  const timeoutMs = options.timeout * 1e3;
@@ -385,23 +407,34 @@ async function handleAuth(options, ctx, overrides) {
385
407
  email: callbackPayload.userEmail,
386
408
  name: callbackPayload.userName
387
409
  } : void 0;
388
- if (callbackPayload.organizationId) await upsertOrgCredentials({
389
- orgEntry: {
390
- organizationId: callbackPayload.organizationId,
391
- organizationName: callbackPayload.organizationName ?? "Unknown",
410
+ if (callbackPayload.organizationId) try {
411
+ await credentials.upsertOrg({
412
+ org: {
413
+ organizationId: callbackPayload.organizationId,
414
+ organizationName: callbackPayload.organizationName ?? "Unknown",
415
+ apiKeyId: callbackPayload.apiKeyId,
416
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
417
+ },
392
418
  apiKey: callbackPayload.apiKey,
393
- apiKeyId: callbackPayload.apiKeyId,
394
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
395
- },
396
- serverUrl: callbackPayload.serverUrl,
397
- webUrl,
398
- user
399
- });
419
+ serverUrl: callbackPayload.serverUrl,
420
+ webUrl,
421
+ user,
422
+ secretStorage: options.insecureStorage ? "file" : "keychain"
423
+ });
424
+ } catch (error) {
425
+ const message = toErrorMessage(error);
426
+ if (!options.insecureStorage && isCredentialStoreError(message)) exitCredentialStoreSaveFailed(error);
427
+ throw error;
428
+ }
400
429
  logger.info("Auth successful", {
401
430
  email: callbackPayload.userEmail,
402
431
  organizationId: callbackPayload.organizationId
403
432
  });
404
- printAuthSuccess(callbackPayload.userEmail, callbackPayload.organizationName);
433
+ printAuthSuccess({
434
+ email: callbackPayload.userEmail,
435
+ organizationName: callbackPayload.organizationName,
436
+ insecureStorage: options.insecureStorage
437
+ });
405
438
  } catch (error) {
406
439
  if (toErrorMessage(error).includes("Timed out waiting for device authentication")) ui.error(`Authentication timed out after ${options.timeout}s. Re-run ${CLI_AUTH_COMMAND} and complete the browser prompt before timeout.`);
407
440
  throw error;
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as readOptionalJsonSchemaKeys, t as manifestToDeclaredCredentialRequirement } from "./declared-credential-requirements-B6h4WRv4.mjs";
4
- import { t as AgentVersionManifestSchema } from "./agent-manifest-CZdlCTFs.mjs";
5
- import { i as createAgentSandboxPackage, n as AGENT_VM_PI_SKILLS_ROOT, r as AGENT_VM_TOOLS_RUNTIME_RELATIVE_PATH, t as AGENT_VM_HOST_CALL_RELATIVE_PATH } from "./agent-bundle-package-DWV6B_5q-rRTPU13L.mjs";
6
- import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-DMmY6oDW.mjs";
7
- import { t as bundleSandboxAgentTarget } from "./workflow-bundler-BzHk73PM-AIB4-u4Y.mjs";
3
+ import { n as readOptionalJsonSchemaKeys, t as manifestToDeclaredCredentialRequirement } from "./declared-credential-requirements-D6KT-r-e.mjs";
4
+ import { t as AgentVersionManifestSchema } from "./agent-manifest-tIsqF2OP.mjs";
5
+ import { i as createAgentSandboxPackage, n as AGENT_VM_PI_SKILLS_ROOT, r as AGENT_VM_TOOLS_RUNTIME_RELATIVE_PATH, t as AGENT_VM_HOST_CALL_RELATIVE_PATH } from "./agent-bundle-package-DWV6B_5q-FPT0bJaA.mjs";
6
+ import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-B0eiobOd.mjs";
7
+ import { t as bundleSandboxAgentTarget } from "./workflow-bundler-BzHk73PM-WI31RJjH.mjs";
8
8
  import { builtinModules } from "node:module";
9
- import { lstat, readFile, readdir, realpath } from "node:fs/promises";
10
9
  import path from "node:path";
10
+ import { lstat, readFile, readdir, realpath } from "node:fs/promises";
11
11
  import * as crypto from "node:crypto";
12
12
  import { createHash } from "node:crypto";
13
13
  import { performance } from "node:perf_hooks";
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { i as __toESM } from "./chunk-CH6r78ws.mjs";
4
- import { n as FileMetadataSchema, t as FILE_METADATA_SCHEMA_VERSION } from "./file-metadata-DaPPpiTh.mjs";
5
- import { d as getMetadataRoot, l as createMetadataOutputFile, n as BUILD_OUTPUT_DIR_NAME, u as getFileMetadataPath } from "./layout-CXkZEsXI.mjs";
6
- import { l as require_out, s as sha256String, t as BASE_IGNORE_PATTERNS } from "./metadata-layout-Bv-B0nHj-CqlcZz_g.mjs";
7
- import { a as literalString, c as readStringProperty, i as literalNumber, l as unwrapExpression, n as identifierName, o as parseSourceFile, r as isNode, s as readPropertyValue, t as getFirstObjectArgument, u as visitNode } from "./oxc-B3KI3rf_-DdiZWqe2.mjs";
8
- import { a as getLocalModuleSpecifier, f as resolveLocalModulePath, l as removeEmptyMetadataDirectories, o as getVariableDeclarators, s as isExportedVariableStatement } from "./source-analysis-BBg2E_6G-BQqm16RR.mjs";
9
- import { n as parseRelativeFilePath, r as toRelativeFilePath, t as normalizeRelativeFilePath } from "./normalize-path-CojS-CgQ-DFTvyA27.mjs";
10
- import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
4
+ import { n as FileMetadataSchema, t as FILE_METADATA_SCHEMA_VERSION } from "./file-metadata-lrX05iRt.mjs";
5
+ import { d as getMetadataRoot, l as createMetadataOutputFile, n as BUILD_OUTPUT_DIR_NAME, u as getFileMetadataPath } from "./layout-P1v-Gssz.mjs";
6
+ import { l as require_out, s as sha256String, t as BASE_IGNORE_PATTERNS } from "./metadata-layout-Bv-B0nHj-B1c5giJ7.mjs";
7
+ import { a as literalString, c as readStringProperty, i as literalNumber, l as unwrapExpression, n as identifierName, o as parseSourceFile, r as isNode, s as readPropertyValue, t as getFirstObjectArgument, u as visitNode } from "./oxc-B3KI3rf_-Cvx4Z-4H.mjs";
8
+ import { a as getLocalModuleSpecifier, f as resolveLocalModulePath, l as removeEmptyMetadataDirectories, o as getVariableDeclarators, s as isExportedVariableStatement } from "./source-analysis-BBg2E_6G-Ut7kYHOz.mjs";
9
+ import { n as parseRelativeFilePath, r as toRelativeFilePath, t as normalizeRelativeFilePath } from "./normalize-path-CojS-CgQ-D4wSBHgG.mjs";
11
10
  import path from "node:path";
11
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
12
12
  import { performance } from "node:perf_hooks";
13
13
  //#region ../../packages/workflow-builder/dist/build-metadata-C8Ra_Gi-.mjs
14
14
  var import_out = /* @__PURE__ */ __toESM(require_out(), 1);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { u as logger } from "./keystroke.mjs";
4
- import { n as formatProgressDuration, t as createSpinnerProgress } from "./spinner-progress-DfkMzwGx.mjs";
3
+ import { P as logger } from "./keystroke.mjs";
4
+ import { n as formatProgressDuration, t as createSpinnerProgress } from "./spinner-progress-Bx-fYItP.mjs";
5
5
  //#region src/lib/build-progress.ts
6
6
  const NEW_STAGE_LABELS = {
7
7
  start: "Starting build",
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as TaskBuildManifestSchema } from "./task-BNXDZU71.mjs";
4
- import { n as bundleWorkflowTarget } from "./workflow-bundler-BzHk73PM-AIB4-u4Y.mjs";
5
- import { t as buildTriggerArtifacts } from "./trigger-artifacts-RizI57RC-CxHwCkQ_.mjs";
3
+ import { n as TaskBuildManifestSchema } from "./task-BRmL2lmw.mjs";
4
+ import { n as bundleWorkflowTarget } from "./workflow-bundler-BzHk73PM-WI31RJjH.mjs";
5
+ import { t as buildTriggerArtifacts } from "./trigger-artifacts-RizI57RC-DjhOsdOm.mjs";
6
6
  import { performance } from "node:perf_hooks";
7
7
  //#region ../../packages/workflow-builder/dist/build-tasks-GVuMLS0h.mjs
8
8
  async function buildTaskArtifact(options) {
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { f as deduplicateCredentialRequirementEntries } from "./credential-requirements-FtBk5JVB.mjs";
4
- import { r as WorkflowBuildManifestSchema, t as WORKFLOW_MANIFEST_GENERATOR } from "./workflow-build-manifest-OPFqFD6f.mjs";
5
- import { a as MANIFEST_FILE_NAME, i as FLOW_FILE_NAME, r as BUNDLE_FILE_NAME, s as SOURCE_MAP_FILE_NAME, t as BUILD_DIR_NAME } from "./layout-CXkZEsXI.mjs";
6
- import { t as runWithConcurrency } from "./concurrency-gXn9Rw8x-BI6HQNfC.mjs";
7
- import { n as WorkflowLoaderProtocolError, r as WorkflowMetadataLoadError, s as createLoaderProtocolFailure } from "./import-module--8x5SLum-DaUNACER.mjs";
8
- import { r as toRelativeFilePath } from "./normalize-path-CojS-CgQ-DFTvyA27.mjs";
9
- import { n as bundleWorkflowTarget } from "./workflow-bundler-BzHk73PM-AIB4-u4Y.mjs";
10
- import { t as buildTriggerArtifacts } from "./trigger-artifacts-RizI57RC-CxHwCkQ_.mjs";
11
- import { realpathSync } from "node:fs";
12
- import { readFile } from "node:fs/promises";
3
+ import { f as deduplicateCredentialRequirementEntries } from "./credential-requirements-Ob-7H-0F.mjs";
4
+ import { r as WorkflowBuildManifestSchema, t as WORKFLOW_MANIFEST_GENERATOR } from "./workflow-build-manifest-BKKW9D05.mjs";
5
+ import { a as MANIFEST_FILE_NAME, i as FLOW_FILE_NAME, r as BUNDLE_FILE_NAME, s as SOURCE_MAP_FILE_NAME, t as BUILD_DIR_NAME } from "./layout-P1v-Gssz.mjs";
6
+ import { t as runWithConcurrency } from "./concurrency-gXn9Rw8x-BTlfau8D.mjs";
7
+ import { n as WorkflowLoaderProtocolError, r as WorkflowMetadataLoadError, s as createLoaderProtocolFailure } from "./import-module--8x5SLum-DjPUZr4i.mjs";
8
+ import { r as toRelativeFilePath } from "./normalize-path-CojS-CgQ-D4wSBHgG.mjs";
9
+ import { n as bundleWorkflowTarget } from "./workflow-bundler-BzHk73PM-WI31RJjH.mjs";
10
+ import { t as buildTriggerArtifacts } from "./trigger-artifacts-RizI57RC-DjhOsdOm.mjs";
13
11
  import * as path$1 from "node:path";
12
+ import { readFile } from "node:fs/promises";
13
+ import { realpathSync } from "node:fs";
14
14
  import { createHash } from "node:crypto";
15
15
  import { performance } from "node:perf_hooks";
16
16
  //#region ../../packages/workflow-builder/dist/build-workflows-CV4tBo6S.mjs
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { k as CliExitError } from "./keystroke.mjs";
4
- import { d as trackProject } from "./dist-BF6r1hfv.mjs";
5
- import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
6
- import { a as runWorkflowBuild, i as renderBuildSummary, n as renderBuildFailure, r as renderBuildHeader } from "./workflow-build-C9rQQ4qU.mjs";
7
- import { t as createBuildProgress } from "./build-progress-BZivcVz4.mjs";
8
- import { t as withErrorBoundary } from "./error-boundary-CyLcinp1.mjs";
3
+ import { D as CliExitError } from "./keystroke.mjs";
4
+ import { i as projects } from "./dist-CIInPRGh.mjs";
5
+ import { t as requireWorkflowsDir } from "./resolve-project-CNQtOWE4.mjs";
6
+ import { a as runWorkflowBuild, i as renderBuildSummary, n as renderBuildFailure, r as renderBuildHeader } from "./workflow-build-C8AiYxqp.mjs";
7
+ import { t as createBuildProgress } from "./build-progress-AR8xow4_.mjs";
8
+ import { t as withErrorBoundary } from "./error-boundary-B8cmSwJH.mjs";
9
9
  //#region src/commands/workflows/build.handler.ts
10
10
  async function handleWorkflowsBuild(options, _ctx) {
11
11
  return withErrorBoundary("Build", async () => {
12
12
  const workflowsDir = await requireWorkflowsDir(options.path);
13
- trackProject(workflowsDir);
13
+ projects.track(workflowsDir);
14
14
  renderBuildHeader(options.name);
15
15
  const progress = createBuildProgress(options.name ?? "workflow");
16
16
  try {
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as ui } from "./keystroke.mjs";
4
- import { n as clearStoredProjects } from "./dist-BF6r1hfv.mjs";
3
+ import { a as ui } from "./keystroke.mjs";
4
+ import { i as projects } from "./dist-CIInPRGh.mjs";
5
5
  //#region src/commands/projects/clear-cache.handler.ts
6
6
  async function handleProjectsClearCache(_options, _ctx) {
7
- if (await clearStoredProjects()) ui.success("Projects cache cleared.");
7
+ if (await projects.clear()) ui.success("Projects cache cleared.");
8
8
  else ui.text("No projects cache found. Nothing to clear.");
9
9
  }
10
10
  //#endregion
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { P as logger, a as ui, p as AUTH_HINT, y as toErrorMessage } from "./keystroke.mjs";
4
+ import { n as credentials } from "./dist-CIInPRGh.mjs";
5
+ import { createClient } from "./src-0XVwHXNp.mjs";
6
+ //#region src/commands/auth/clear.handler.ts
7
+ async function tryRevokeKey(apiKey, apiKeyId, baseUrl, organizationId) {
8
+ try {
9
+ await createClient({
10
+ apiKey,
11
+ baseUrl,
12
+ organizationId
13
+ }).public.auth.revoke({ apiKeyId });
14
+ logger.info("API key revoked on server", { apiKeyId });
15
+ } catch (error) {
16
+ logger.error("Failed to revoke API key on server", { error: toErrorMessage(error) });
17
+ ui.warn(`Could not revoke API key on server: ${toErrorMessage(error)}`);
18
+ }
19
+ }
20
+ async function readApiKeyForRevocation(organizationId) {
21
+ try {
22
+ return await credentials.getApiKey(organizationId);
23
+ } catch (error) {
24
+ logger.warn("Could not read saved API key for server revocation", {
25
+ error: toErrorMessage(error),
26
+ organizationId
27
+ });
28
+ ui.warn(`Could not read the saved API key for organization ${organizationId}; skipping server revocation and removing local credentials.`);
29
+ return null;
30
+ }
31
+ }
32
+ async function handleAuthClear(_options, ctx) {
33
+ const storedOrgs = ctx.storedOrgs;
34
+ const serverUrl = ctx.storedServerUrls?.serverUrl;
35
+ if (storedOrgs.length === 0) {
36
+ const hadFiles = await credentials.hasStoredCredentials();
37
+ await credentials.clear();
38
+ if (hadFiles) ui.success("Local credentials removed.");
39
+ else ui.text(`No credentials found. ${AUTH_HINT}`);
40
+ return;
41
+ }
42
+ if (ctx.organizationId && ctx.orgSource === "flag") {
43
+ const apiKey = await readApiKeyForRevocation(ctx.organizationId);
44
+ const removed = await credentials.removeOrg(ctx.organizationId);
45
+ if (!removed) {
46
+ ui.warn(`No stored credentials for organization ${ctx.organizationId}.`);
47
+ return;
48
+ }
49
+ if (removed.apiKeyId && serverUrl && apiKey) await tryRevokeKey(apiKey, removed.apiKeyId, serverUrl, removed.organizationId);
50
+ ui.success(`Credentials removed for ${removed.organizationName}.`);
51
+ return;
52
+ }
53
+ const revokeInputs = [];
54
+ for (const org of storedOrgs) if (org.apiKeyId && serverUrl) {
55
+ const apiKey = await readApiKeyForRevocation(org.organizationId);
56
+ if (apiKey) revokeInputs.push({
57
+ apiKey,
58
+ apiKeyId: org.apiKeyId,
59
+ baseUrl: serverUrl,
60
+ organizationId: org.organizationId
61
+ });
62
+ }
63
+ await credentials.clear();
64
+ for (const revokeInput of revokeInputs) await tryRevokeKey(revokeInput.apiKey, revokeInput.apiKeyId, revokeInput.baseUrl, revokeInput.organizationId);
65
+ ui.success("All local credentials removed.");
66
+ }
67
+ //#endregion
68
+ export { handleAuthClear };
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { t as clearLogFile } from "./dist-BF6r1hfv.mjs";
3
+ import { M as clearLog, N as closeLogger } from "./keystroke.mjs";
4
4
  import { log } from "@clack/prompts";
5
5
  //#region src/commands/logs/clear.handler.ts
6
6
  async function handleLogsClear(_options, _ctx) {
7
- if (await clearLogFile()) log.success("Log file cleared.");
7
+ await closeLogger();
8
+ if (await clearLog()) log.success("Log file cleared.");
8
9
  else log.message("No log file found. Nothing to clear.");
9
10
  }
10
11
  //#endregion