@keystrokehq/cli 0.0.32 → 0.0.38

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 (148) hide show
  1. package/README.md +25 -4
  2. package/dist/{accept.handler-DNfIXPSP.mjs → accept.handler-CykuBpt6.mjs} +4 -4
  3. package/dist/{admin-CJp8XksD.mjs → admin-gRjPC3eD.mjs} +10 -10
  4. package/dist/{agent-manifest-De5TCxZq.mjs → agent-manifest-DfWD5tvv.mjs} +17 -27
  5. package/dist/{agents-G37PM35Z.mjs → agents-BpyuvM9p.mjs} +9 -9
  6. package/dist/{api-keys-4igNHJ_W.mjs → api-keys-BSKhdD_x.mjs} +6 -6
  7. package/dist/{api-BK3EhPvs.mjs → api-sWkB_Wta.mjs} +1 -1
  8. package/dist/{auth-CIOmmV4x.mjs → auth-DCgToFf5.mjs} +6 -6
  9. package/dist/{auth.handler-CznN_vfz.mjs → auth.handler-QRQAEUJC.mjs} +3 -3
  10. package/dist/authored-workflow-ref-BRCQgyWl.mjs +113 -0
  11. package/dist/{build-agents-DseUtzd4-CSGpNXur.mjs → build-agents-CUzBnlAG-3ePFZiJ6.mjs} +12 -11
  12. package/dist/{build-progress-DLM1Bt4T.mjs → build-progress-D_SQqdHA.mjs} +2 -2
  13. package/dist/{build-tasks-C09SdfjC-BmAVLTtQ.mjs → build-tasks-5eOvI19S-tbN6CRx9.mjs} +4 -4
  14. package/dist/{build-workflows-BZ_m97Pr-BiyptCrn.mjs → build-workflows-C-gQM3l5-_zcBHE3M.mjs} +14 -9
  15. package/dist/{build.handler-zHimoO7c.mjs → build.handler-DGQn_clk.mjs} +12 -9
  16. package/dist/{clear-cache.handler-BP0K1-uN.mjs → clear-cache.handler-gJpwslkK.mjs} +2 -2
  17. package/dist/{clear.handler-PsA5QKHx.mjs → clear.handler-CuXYvUj2.mjs} +2 -2
  18. package/dist/{clear.handler-T27GpgSu.mjs → clear.handler-DnjvgyMj.mjs} +1 -1
  19. package/dist/{commander-BlrSdFcu.mjs → commander-B_8QwPpe.mjs} +22 -3
  20. package/dist/{connect-BbLJhlIA.mjs → connect-DV9lhP6C.mjs} +3 -3
  21. package/dist/{connect.handler-BthE-7Wg.mjs → connect.handler-D6JzuFuT.mjs} +5 -5
  22. package/dist/{context-sgKhRc5v.mjs → context-Brc9VGV9.mjs} +4 -4
  23. package/dist/{create.handler-BovbO_g0.mjs → create.handler-D_tmjANR.mjs} +3 -3
  24. package/dist/{credential-env-map-CRs0llf0.mjs → credential-env-map-5a41jLwM.mjs} +1 -1
  25. package/dist/{credential-requirements-D0mavK8j-CFMf0Xwu.mjs → credential-requirements-B5Alhu1v-DanlSKnT.mjs} +3 -3
  26. package/dist/{credential-schema-mismatch-ClQgEVtO.mjs → credential-schema-mismatch-CStYUB2h.mjs} +1 -1
  27. package/dist/{credentials-DKrSaaLw.mjs → credentials-DtwLbee6.mjs} +1 -1
  28. package/dist/{credentials-CsncZ52a.mjs → credentials-UDrvrKj-.mjs} +10 -10
  29. package/dist/current-deployment-workflow-CknsHF5T.mjs +20 -0
  30. package/dist/current.handler-Cy91EeLU.mjs +19 -0
  31. package/dist/{delete.handler-DkAK396w.mjs → delete.handler-rUDDUrDQ.mjs} +2 -2
  32. package/dist/{deploy-DvPfR9fC.mjs → deploy-DgWPlEKO.mjs} +2 -2
  33. package/dist/{deploy-progress-BsUH7fGE.mjs → deploy-progress-BDOCSm_U.mjs} +2 -2
  34. package/dist/{deploy.handler-BW3f2N2G.mjs → deploy.handler-BDCHCk_A.mjs} +16 -16
  35. package/dist/{diff-utils-Bs--xmoV.mjs → diff-utils-YEUYtSRs.mjs} +1 -1
  36. package/dist/{diff.handler-BwhsoAg0.mjs → diff.handler-CGERP-Qn.mjs} +15 -9
  37. package/dist/{dist-Dw7gCE7y.mjs → dist-B5jy238v.mjs} +37 -11
  38. package/dist/{dist-CTEtWDW4.mjs → dist-BmbFJq8U.mjs} +8 -27
  39. package/dist/{env.handler-Dks6ZQh-.mjs → env.handler--8FRrSlJ.mjs} +52 -29
  40. package/dist/{error-boundary-0veZ_RDS.mjs → error-boundary-D2DiCLAp.mjs} +3 -3
  41. package/dist/{iam-command-utils-CSZj4XlH.mjs → iam-command-utils-D01Gw8-M.mjs} +3 -13
  42. package/dist/{import-module-y0glInUe-DV_3dsU0.mjs → import-module-y0glInUe-EuAWaw9g.mjs} +506 -128
  43. package/dist/{init-BOCDwqKR.mjs → init-Mpe_8lA_.mjs} +3 -3
  44. package/dist/{init.handler-B3T4J6u_.mjs → init.handler-BjLAIAmm.mjs} +5 -5
  45. package/dist/{inspect.handler-v9snxDLi.mjs → inspect.handler-CXCi7fhH.mjs} +24 -13
  46. package/dist/{integration-catalog-CiZ62hb_.mjs → integration-catalog-mZs6EAlN.mjs} +3 -3
  47. package/dist/{integrations-m7_tb3GV.mjs → integrations-D_IH5Ud1.mjs} +7 -7
  48. package/dist/{invites-BuatfJmN.mjs → invites-CWWz4wmY.mjs} +5 -5
  49. package/dist/{invites.list.handler-CK6mL10z.mjs → invites.list.handler-CQLWSoWo.mjs} +6 -5
  50. package/dist/{invites.resend.handler-CKZouK1Z.mjs → invites.resend.handler-CeIGE_qM.mjs} +6 -5
  51. package/dist/{invites.revoke.handler-H0VI-3sp.mjs → invites.revoke.handler-9K6jkym_.mjs} +6 -5
  52. package/dist/keystroke.mjs +139 -82
  53. package/dist/{list-enrichment-DP1wEyBZ.mjs → list-enrichment-dqbkXJzy.mjs} +2 -2
  54. package/dist/list.handler-BvuxTFLe.mjs +64 -0
  55. package/dist/list.handler-CDWPmiMy.mjs +39 -0
  56. package/dist/{list.handler-DVnFrlis.mjs → list.handler-Co32_F3n.mjs} +7 -7
  57. package/dist/{list.handler-CMRQKH4b.mjs → list.handler-Cuw1fWO_.mjs} +41 -12
  58. package/dist/{list.handler-DbYUk6ko.mjs → list.handler-D-rSyrX0.mjs} +5 -5
  59. package/dist/{list.handler-DIMWZx78.mjs → list.handler-DMvq96UA.mjs} +4 -4
  60. package/dist/{list.handler-LxZInip2.mjs → list.handler-DUTNS8du.mjs} +4 -4
  61. package/dist/{list.handler-BiY5NFWd.mjs → list.handler-Dz-Yeijp.mjs} +3 -3
  62. package/dist/list2.handler-BpqKZTZk.mjs +99 -0
  63. package/dist/{listen-C_7Rgwkb.mjs → listen-CeNwufij.mjs} +3 -3
  64. package/dist/{listen.handler-dJgorIzr.mjs → listen.handler-CfRoaOwu.mjs} +4 -4
  65. package/dist/{logs-B9YMhUGt.mjs → logs-B7k2_W1R.mjs} +3 -3
  66. package/dist/{logs.handler-DGGVPMOX.mjs → logs.handler-BIqJ0FED.mjs} +1 -1
  67. package/dist/{logs.handler-BfjCsAyq.mjs → logs.handler-CSqOzxCU.mjs} +26 -29
  68. package/dist/{members.add.handler-DSRCRxsI.mjs → members.add.handler-CBjoA6vG.mjs} +6 -5
  69. package/dist/{members.invite.handler-BNpHn1dY.mjs → members.invite.handler-D8KcKJ9Y.mjs} +6 -5
  70. package/dist/{members.list.handler-Bn9LJEPG.mjs → members.list.handler-CB_qSJK0.mjs} +6 -5
  71. package/dist/{members.remove.handler-Dkr2t_tX.mjs → members.remove.handler-DNhO81mo.mjs} +6 -5
  72. package/dist/{members.update.handler-DBtUYuAY.mjs → members.update.handler-Bjdk_uz4.mjs} +6 -5
  73. package/dist/{operations-CF2nUiBs.mjs → operations-HHwoArwE.mjs} +5 -5
  74. package/dist/org-context-CNh2p2DP.mjs +112 -0
  75. package/dist/{org-DOH7YHk2.mjs → org-f-qo68Em.mjs} +35 -28
  76. package/dist/org-output-BcI17Uan.mjs +64 -0
  77. package/dist/{orgs.create.handler-BO70zIdp.mjs → orgs.create.handler-DOE9ZIed.mjs} +4 -4
  78. package/dist/{orgs.get.handler-BuGg5bc9.mjs → orgs.get.handler-sWErVI7r.mjs} +4 -4
  79. package/dist/{orgs.list.handler--5HutMkl.mjs → orgs.list.handler-Cp-mXsA0.mjs} +4 -4
  80. package/dist/{output-BWcVRt-T.mjs → output-BPydP5tG.mjs} +1 -1
  81. package/dist/{package-manager-CvY4IW7X.mjs → package-manager-BwJ6muas.mjs} +27 -2
  82. package/dist/{paused.handler-DHvxz-cC.mjs → paused.handler-DWdoKYY8.mjs} +20 -33
  83. package/dist/{projects-C5GZ5Jrf.mjs → projects-CCC36zbJ.mjs} +11 -9
  84. package/dist/{register.handler-CKMZ2WmD.mjs → register.handler-Dxae5iq8.mjs} +3 -3
  85. package/dist/{render-credential-Bn15FEUC.mjs → render-credential-D-H1ECDt.mjs} +1 -1
  86. package/dist/{render-operation-DWbMwhfc.mjs → render-operation-iF7Wblv2.mjs} +2 -2
  87. package/dist/{requirements.handler-B5rqCjMu.mjs → requirements.handler-Bg3mRnER.mjs} +7 -7
  88. package/dist/{resolve-cli-credentials-CAOSVMJP.mjs → resolve-cli-credentials-GVOOedoQ.mjs} +1 -1
  89. package/dist/{resolve-project-E9mrh_el.mjs → resolve-project-CoCN9xfi.mjs} +24 -8
  90. package/dist/{run-polling-DawiBus-.mjs → run-polling-htHWhG0T.mjs} +97 -14
  91. package/dist/{run.handler-BG7xitEK.mjs → run.handler-C-CM-xZG.mjs} +42 -30
  92. package/dist/{runs-swYYBT6C.mjs → runs-BRJPNq4B.mjs} +4 -4
  93. package/dist/{schema-display-FvI8QjOQ.mjs → schema-display-sZ6ConJd.mjs} +33 -26
  94. package/dist/schemas-ClAIoIrX.mjs +281 -0
  95. package/dist/{search-CA0J5NOY.mjs → search-CQMgdp51.mjs} +3 -3
  96. package/dist/{search.handler-BVDsYZlJ.mjs → search.handler-Dn5jjyF-.mjs} +6 -6
  97. package/dist/show.handler-CdZF0aao.mjs +79 -0
  98. package/dist/{show.handler-CsidInW8.mjs → show.handler-D3nDc1MJ.mjs} +5 -5
  99. package/dist/{show.handler-CwwnCmbp.mjs → show.handler-DUDxnNiZ.mjs} +6 -6
  100. package/dist/{skill-installer-DG8kTaQR.mjs → skill-installer-DYNH_MJT.mjs} +3 -1
  101. package/dist/{skills-sync.handler-yRmi3OgP.mjs → skills-sync.handler-_LVhIMRH.mjs} +13 -7
  102. package/dist/{skills.command-COYd3k4Z.mjs → skills.command-DSHGwXPX.mjs} +5 -5
  103. package/dist/skills.handler-DqLXJepA.mjs +9 -0
  104. package/dist/{spinner-progress-lrKDs4YF.mjs → spinner-progress-fLaD0sjH.mjs} +1 -1
  105. package/dist/status.handler-1hEzX5oB.mjs +72 -0
  106. package/dist/{switch.handler-BwYndsP-.mjs → switch.handler-D135WwfB.mjs} +17 -4
  107. package/dist/{sync-6fZkIUtn.mjs → sync-CFScllh3.mjs} +2 -2
  108. package/dist/{sync.handler-Ctr-cN9X.mjs → sync.handler-x8v53-TT.mjs} +8 -8
  109. package/dist/{task-BWuIKWh4.mjs → task-DTvLzUkA.mjs} +2 -88
  110. package/dist/{task-target-build-QllcCfoN.mjs → task-target-build-CtvRyVjH.mjs} +5 -5
  111. package/dist/task-target-deploy-runner.mjs +6 -6
  112. package/dist/{test-C8VIZe9V.mjs → test-Dx4RXoLZ.mjs} +5 -5
  113. package/dist/{test.handler-DLaxrJ9V.mjs → test.handler-BmvL5vF8.mjs} +19 -16
  114. package/dist/{test.handler-BCW0YBPd.mjs → test.handler-Mz_XOnJl.mjs} +2 -2
  115. package/dist/{tool.handler-8qNmgdRe.mjs → tool.handler-DsbpocYI.mjs} +12 -12
  116. package/dist/{trigger-artifacts-BcRScRSp-BiD2h6do.mjs → trigger-artifacts-BcRScRSp-BRpU-He5.mjs} +2 -2
  117. package/dist/{trigger-manifest-C07EM-b2.mjs → trigger-manifest-BVqjDhxU.mjs} +1 -1
  118. package/dist/{upgrade-DgOcc8IT.mjs → upgrade-C9G6HksL.mjs} +4 -8
  119. package/dist/upgrade.handler-DsFeAFF4.mjs +99 -0
  120. package/dist/{upload.handler-B7xle1oX.mjs → upload.handler-DscKDQ63.mjs} +9 -9
  121. package/dist/{users.get.handler-C4t1vXwi.mjs → users.get.handler-CaUv_maM.mjs} +4 -4
  122. package/dist/{users.list.handler-Dvl90grq.mjs → users.list.handler-DzsOvAtd.mjs} +4 -4
  123. package/dist/{users.set-role.handler-Djw1_VGf.mjs → users.set-role.handler-koRzA0V9.mjs} +4 -4
  124. package/dist/{validate.handler-Drf_lssw.mjs → validate.handler-BkBsS8BL.mjs} +171 -26
  125. package/dist/{workflow-build-Begvjfq8.mjs → workflow-build-Db6at6IA.mjs} +234 -32
  126. package/dist/{workflow-build-manifest-1sC52TIG.mjs → workflow-build-manifest-CV6bBmDO.mjs} +1 -1
  127. package/dist/{workflow-bundler-BzHk73PM-muPv1yGG.mjs → workflow-bundler-Bs3zQNQv-Dy7lXxy3.mjs} +15 -4
  128. package/dist/{workflows-DjMlxuBX.mjs → workflows-B8VG6nKg.mjs} +34 -37
  129. package/dist/{writer-byNNUjRm-B-on1n6c.mjs → writer-BLg0RuZa-Y6ExdYH9.mjs} +6 -4
  130. package/package.json +10 -10
  131. package/dist/current-deployment-workflow-B1VQCYC-.mjs +0 -94
  132. package/dist/current.handler-BaGaCLzB.mjs +0 -21
  133. package/dist/list.handler-BEMj3FyH.mjs +0 -76
  134. package/dist/list.handler-Cq_oQY5B.mjs +0 -52
  135. package/dist/list.handler-htR9TeiS.mjs +0 -24
  136. package/dist/schemas-D2zfmyC-.mjs +0 -671
  137. package/dist/show.handler-nkK6Erbb.mjs +0 -31
  138. package/dist/skills.handler-DYIQK0Vu.mjs +0 -9
  139. package/dist/status.handler-Ch_DtyBp.mjs +0 -109
  140. package/dist/upgrade.handler-DSZuw7-9.mjs +0 -80
  141. /package/dist/{build-metadata-BB_L45ZS-DSJL7dTy.mjs → build-metadata-BB_L45ZS-DRQsV6JK.mjs} +0 -0
  142. /package/dist/{deploy-DhCbYFc7.mjs → deploy-BiKBH25R.mjs} +0 -0
  143. /package/dist/{detect-env-access-CwkOYeYM-COq4U-4Y.mjs → detect-env-access-CwkOYeYM-r4aynBU0.mjs} +0 -0
  144. /package/dist/{read-credential-keys-77a91T8M-DGK5XTQp.mjs → read-credential-keys-77a91T8M-I07NYwfH.mjs} +0 -0
  145. /package/dist/{run-polling-fBouPjJ2.mjs → run-polling-1c0ckC1A.mjs} +0 -0
  146. /package/dist/{schemas-4Mq_bxob.mjs → schemas-8nhXlXWh.mjs} +0 -0
  147. /package/dist/{task-target-deploy-B_3HPSo2.mjs → task-target-deploy-m9LfE488.mjs} +0 -0
  148. /package/dist/{types-AlA-ifK9.mjs → types-Cb0eWmUU.mjs} +0 -0
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env node
2
-
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-sgKhRc5v.mjs";
6
- import { n as detectPackageManager, r as formatPackageInstallCommand } from "./package-manager-CvY4IW7X.mjs";
7
- //#region src/commands/integrations/show.handler.ts
8
- async function handleIntegrationShow(options, ctx) {
9
- const client = requireClient(ctx);
10
- const [integration, operations] = await Promise.all([client.integrations.get(options.id), client.integrations.listOperations(options.id)]);
11
- if (ctx.jsonMode) {
12
- writeJson({
13
- integration: integration.integration,
14
- operations: operations.operations
15
- });
16
- return;
17
- }
18
- const entry = integration.integration;
19
- const packageManager = detectPackageManager();
20
- const npmPackageName = entry.npmPackageName ?? `@keystrokehq/${entry.publicId}`;
21
- ui.text(entry.publicId);
22
- ui.text(` ${entry.name}`);
23
- if (entry.description) ui.text(` ${entry.description}`);
24
- ui.text(` install: ${formatPackageInstallCommand(npmPackageName, { packageManager })}`);
25
- ui.text(` operations (${operations.operations.length}):`);
26
- for (const op of operations.operations) ui.text(` ${op.id} — ${op.name}`);
27
- ui.br();
28
- ui.hint(`Usage examples are in ${entry.npmPackageName ?? `@keystrokehq/${entry.publicId}`}'s TSDoc — open in your IDE for hover docs.`);
29
- }
30
- //#endregion
31
- export { handleIntegrationShow };
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { a as ui } from "./keystroke.mjs";
4
- //#region src/commands/skills/skills.handler.ts
5
- async function handleSkillsParent(_options, _ctx) {
6
- ui.hint("Run `keystroke skills sync --agent claude-code --method symlink` to install bundled Keystroke skills for selected agents.");
7
- }
8
- //#endregion
9
- export { handleSkillsParent };
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { _ as isAuthError, a as ui, m as REAUTH_HINT, p as AUTH_HINT, v as isNetworkError, y as toErrorMessage } from "./keystroke.mjs";
4
- //#region src/commands/auth/status.handler.ts
5
- async function getValidationStatus(ctx) {
6
- if (!ctx.client) return { kind: "not_authenticated" };
7
- try {
8
- const result = await ctx.client.public.auth.validate();
9
- return {
10
- kind: "valid",
11
- apiKeyId: result.apiKeyId,
12
- organizationId: result.organizationId
13
- };
14
- } catch (error) {
15
- const message = toErrorMessage(error);
16
- if (isAuthError(error)) return {
17
- kind: "invalid",
18
- message
19
- };
20
- return {
21
- kind: "unavailable",
22
- message,
23
- reason: isNetworkError(error) ? "network" : "other"
24
- };
25
- }
26
- }
27
- async function getLiveUser(ctx, validation) {
28
- if (!ctx.client || validation.kind !== "valid") return;
29
- try {
30
- const { user } = await ctx.client.users.getMe();
31
- return user;
32
- } catch {
33
- return;
34
- }
35
- }
36
- function getLocalOrganization(ctx) {
37
- if (!ctx.organizationId) return;
38
- const org = ctx.storedOrgs.find((entry) => entry.organizationId === ctx.organizationId);
39
- if (!org) return { id: ctx.organizationId };
40
- return {
41
- id: org.organizationId,
42
- name: org.organizationName
43
- };
44
- }
45
- function getLiveOrganization(liveUser, organizationId) {
46
- if (!liveUser || !organizationId) return;
47
- const org = liveUser.organizations?.find((entry) => entry.id === organizationId);
48
- if (!org) return;
49
- return {
50
- id: org.id,
51
- name: org.name
52
- };
53
- }
54
- function printOrganization(org) {
55
- if (!org) {
56
- ui.warn("No organization set. Use `keystroke org switch` or `--org` to select one.");
57
- return;
58
- }
59
- if (org.name) {
60
- ui.text(`Current organization: ${org.name}`);
61
- return;
62
- }
63
- ui.text(`Current organization: ${org.id}`);
64
- }
65
- function printValidationStatus(validation) {
66
- switch (validation.kind) {
67
- case "valid":
68
- ui.success("API key is valid.");
69
- ui.hint(`Key ID: ${validation.apiKeyId}`);
70
- return;
71
- case "invalid":
72
- ui.warn("Saved API key is invalid or expired.");
73
- ui.hint(REAUTH_HINT);
74
- ui.hint(`Validation error: ${validation.message}`);
75
- return;
76
- case "unavailable":
77
- ui.warn(validation.reason === "network" ? "Could not reach the API to verify the saved API key." : "Could not verify the saved API key right now.");
78
- ui.hint(`Validation error: ${validation.message}`);
79
- return;
80
- case "not_authenticated":
81
- ui.warn(`Not authenticated. ${AUTH_HINT}`);
82
- return;
83
- }
84
- }
85
- function printCredentialStorage(ctx) {
86
- const info = ctx.credentialStorageInfo;
87
- ui.hint(`Credentials: ${info.credentialsFilePath}`);
88
- if (ctx.credentialReadError) {
89
- ui.warn("Saved credentials exist, but the saved API key could not be read.");
90
- ui.hint(`Credential read error: ${ctx.credentialReadError}`);
91
- }
92
- }
93
- async function handleAuthStatus(_options, ctx) {
94
- const validation = await getValidationStatus(ctx);
95
- const liveUser = await getLiveUser(ctx, validation);
96
- const organization = getLiveOrganization(liveUser, ctx.organizationId ?? (validation.kind === "valid" ? validation.organizationId : void 0)) ?? getLocalOrganization(ctx);
97
- const userEmail = liveUser?.email ?? ctx.storedUser?.email;
98
- ui.header("Keystroke CLI auth status");
99
- if (userEmail) ui.text(`Signed in as: ${userEmail}`);
100
- else if (validation.kind === "not_authenticated") ui.hint("No saved user identity found.");
101
- else ui.warn("Signed-in user could not be determined from saved credentials.");
102
- printOrganization(organization);
103
- if (ctx.orgSource) ui.hint(`Source: ${ctx.orgSource}`);
104
- printValidationStatus(validation);
105
- if (ctx.baseUrl) ui.hint(`API URL: ${ctx.baseUrl}`);
106
- printCredentialStorage(ctx);
107
- }
108
- //#endregion
109
- export { handleAuthStatus };
@@ -1,80 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { a as ui, j as throwReportedCliExit, y as toErrorMessage } from "./keystroke.mjs";
4
- import { spawn } from "node:child_process";
5
- //#region src/commands/upgrade/upgrade.handler.ts
6
- const CLI_PACKAGE_NAME = "@keystrokehq/cli";
7
- function buildUpgradeCommand(options) {
8
- const packageSpec = `${CLI_PACKAGE_NAME}@${options.to}`;
9
- switch (options.packageManager) {
10
- case "npm": return {
11
- command: "npm",
12
- args: [
13
- "install",
14
- "--global",
15
- packageSpec
16
- ]
17
- };
18
- case "pnpm": return {
19
- command: "pnpm",
20
- args: [
21
- "add",
22
- "--global",
23
- packageSpec
24
- ]
25
- };
26
- case "yarn": return {
27
- command: "yarn",
28
- args: [
29
- "global",
30
- "add",
31
- packageSpec
32
- ]
33
- };
34
- case "bun": return {
35
- command: "bun",
36
- args: [
37
- "add",
38
- "--global",
39
- packageSpec
40
- ]
41
- };
42
- default: return assertNever(options.packageManager);
43
- }
44
- }
45
- async function handleUpgrade(options, _ctx) {
46
- const upgradeCommand = buildUpgradeCommand(options);
47
- const renderedCommand = renderCommand(upgradeCommand);
48
- if (options.dryRun) {
49
- ui.text(renderedCommand);
50
- return;
51
- }
52
- ui.header(`Upgrading Keystroke CLI with ${options.packageManager}...`);
53
- ui.hint(renderedCommand);
54
- const exitCode = await runCommand(upgradeCommand);
55
- if (exitCode !== 0) throwReportedCliExit(`CLI upgrade failed with exit code ${exitCode}.`);
56
- ui.success("Keystroke CLI upgrade complete.");
57
- }
58
- function runCommand({ command, args }) {
59
- return new Promise((resolve, reject) => {
60
- const child = spawn(command, args, {
61
- stdio: "inherit",
62
- shell: process.platform === "win32"
63
- });
64
- child.on("error", (error) => {
65
- reject(new Error(`Failed to start upgrade command: ${toErrorMessage(error)}`, { cause: error }));
66
- });
67
- child.on("close", (code) => resolve(code ?? 1));
68
- });
69
- }
70
- function renderCommand({ command, args }) {
71
- return [command, ...args].map(shellToken).join(" ");
72
- }
73
- function shellToken(value) {
74
- return /^[A-Za-z0-9_./:@=-]+$/.test(value) ? value : `'${value.replaceAll("'", "'\\''")}'`;
75
- }
76
- function assertNever(value) {
77
- throw new Error(`Unsupported package manager: ${value}`);
78
- }
79
- //#endregion
80
- export { handleUpgrade };
File without changes