@keystrokehq/cli 0.0.14 → 0.0.16

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 (101) hide show
  1. package/README.md +14 -4
  2. package/dist/{admin-CXQezpQA.mjs → admin-Bb9Hx-gO.mjs} +1 -1
  3. package/dist/{agents-BdzwXAI1.mjs → agents-CbmvvOAx.mjs} +6 -6
  4. package/dist/{api-Sf7A0I5T.mjs → api-jkf0TTgD.mjs} +1 -1
  5. package/dist/{api-keys-BZmUiIEr.mjs → api-keys-DJlyIf10.mjs} +1 -1
  6. package/dist/{auth-CGBgi6PG.mjs → auth-DpDEkJz7.mjs} +1 -1
  7. package/dist/{build-agents-DseUtzd4-DBQ82ErJ.mjs → build-agents-DseUtzd4-VYWtIZy9.mjs} +2 -2
  8. package/dist/{build-metadata-qebrtraZ-BL-fo8HW.mjs → build-metadata-C8Ra_Gi--BdoyLQMl.mjs} +4 -4
  9. package/dist/{build-progress-BataNqG-.mjs → build-progress-BZivcVz4.mjs} +1 -1
  10. package/dist/{build-tasks-GVuMLS0h-CWrrj8SF.mjs → build-tasks-GVuMLS0h-p08mMOyK.mjs} +2 -2
  11. package/dist/{build-workflows-Dmzay1vP-CAhb0BSk.mjs → build-workflows-CV4tBo6S-knCnBKTc.mjs} +5 -5
  12. package/dist/{build.handler-DTKBdDzF.mjs → build.handler-BNSC_zhQ.mjs} +3 -3
  13. package/dist/{commander-i-7LgOyc.mjs → commander-D15UZVjp.mjs} +1 -1
  14. package/dist/{connect-BcTkRZ10.mjs → connect-DzSNDSmI.mjs} +2 -2
  15. package/dist/{connect.handler-DilOwhlW.mjs → connect.handler-DRO05ak3.mjs} +1 -1
  16. package/dist/{credentials-BsEHWMBh.mjs → credentials-VidBoOd7.mjs} +6 -6
  17. package/dist/{current-deployment-workflow-Biw1zV7S.mjs → current-deployment-workflow-BRUEdPrN.mjs} +5 -5
  18. package/dist/{deploy-DVE7Mx_X.mjs → deploy-eshEEiP-.mjs} +2 -2
  19. package/dist/{deploy-progress-7qj5ek8b.mjs → deploy-progress-DJHph1Fz.mjs} +1 -1
  20. package/dist/{deploy.handler-B3E7uX-x.mjs → deploy.handler-BxxWI7nV.mjs} +12 -12
  21. package/dist/{diff.handler-BMNZ_3J_.mjs → diff.handler-CzrKCj7N.mjs} +1 -1
  22. package/dist/{dist-BVD3Ga_l.mjs → dist-FQYQ2FLm.mjs} +3 -3
  23. package/dist/{env.handler-BUBsjm1k.mjs → env.handler-B3YDQIVE.mjs} +3 -3
  24. package/dist/{import-module-DEI7R8Yh-L32hhSoh.mjs → import-module--8x5SLum-DaUNACER.mjs} +2 -2
  25. package/dist/{init-CxMQ2ysa.mjs → init-PTwX63_P.mjs} +15 -3
  26. package/dist/{init.handler-BPKxeGZS.mjs → init.handler-CdytFiFt.mjs} +61 -67
  27. package/dist/{inspect.handler-CJ7e6iFB.mjs → inspect.handler-umc7of-r.mjs} +2 -2
  28. package/dist/{integrations-DUlJhGUS.mjs → integrations-B0Gv-L0s.mjs} +5 -5
  29. package/dist/{invites-BlB-hKUE.mjs → invites-Cqi7iyIN.mjs} +4 -4
  30. package/dist/keystroke.mjs +21 -21
  31. package/dist/{list.handler-DhFni3rk.mjs → list.handler-D-YFoKLU.mjs} +2 -2
  32. package/dist/{list.handler-VGPaJzl-.mjs → list.handler-c-8RpgB9.mjs} +1 -1
  33. package/dist/{list.handler-K3x71Y4Z.mjs → list2.handler-T5v4EK20.mjs} +4 -4
  34. package/dist/{listen-drcHFcKq.mjs → listen-rHLiCWbn.mjs} +2 -2
  35. package/dist/{listen.handler-DjK6RlLf.mjs → listen.handler-B9T58yAj.mjs} +1 -1
  36. package/dist/{logs-NI-DyeFY.mjs → logs-DUwdYZB-.mjs} +3 -3
  37. package/dist/{logs.handler-PRYGI57p.mjs → logs.handler-DGcGN2qb.mjs} +1 -1
  38. package/dist/{metadata-layout-C6ed-9dl-DCTTsjiG.mjs → metadata-layout-Bv-B0nHj-CqlcZz_g.mjs} +1 -1
  39. package/dist/{org-8bkIZAJ4.mjs → org-DUCts2MV.mjs} +15 -15
  40. package/dist/{project-config-CJGSh2RQ.mjs → project-config-CsBMT4TL.mjs} +1 -13
  41. package/dist/{projects-Pp5ENoyh.mjs → projects-CbquwUlm.mjs} +4 -4
  42. package/dist/{requirements.handler-CZ53jJ_5.mjs → requirements.handler-D5dFi7XZ.mjs} +2 -2
  43. package/dist/{resolve-project-CI_PxRXi.mjs → resolve-project-CURYMjex.mjs} +1 -1
  44. package/dist/{run-polling-7YWCL6c-.mjs → run-polling-BWcLQvm0.mjs} +3 -3
  45. package/dist/{run-polling-BPmB5N5A.mjs → run-polling-CwlzB5-9.mjs} +1 -1
  46. package/dist/{run.handler-BNrAIXDG.mjs → run.handler-BiBDLoeH.mjs} +4 -4
  47. package/dist/{runs-Bs8VzL8P.mjs → runs-Bc3zjk7V.mjs} +1 -1
  48. package/dist/{schema-display-B0LmISCe.mjs → schema-display-CNqiYBIb.mjs} +4 -4
  49. package/dist/skill-installer-DkRJ6oLi.mjs +506 -0
  50. package/dist/{skills-sync.handler-DXF6IgEX.mjs → skills-sync.handler-C4ztv1Vu.mjs} +20 -7
  51. package/dist/skills.command-DuL4kLUi.mjs +49 -0
  52. package/dist/{skills.handler-CPKCf9ZK.mjs → skills.handler-R5KAbioE.mjs} +1 -1
  53. package/dist/{source-analysis-DTnwNwKq-BqHdBGtw.mjs → source-analysis-BBg2E_6G-BQqm16RR.mjs} +3 -3
  54. package/dist/{spinner-progress-DpL68vYK.mjs → spinner-progress-DfkMzwGx.mjs} +1 -1
  55. package/dist/spinner-worker.d.mts +3 -0
  56. package/dist/spinner-worker.mjs +203 -0
  57. package/dist/{sync-BSL1s6PR.mjs → sync-Pssitj6K.mjs} +2 -2
  58. package/dist/{sync.handler-BN9oDWVx.mjs → sync.handler-Be0U3x-n.mjs} +5 -5
  59. package/dist/{task-target-build-Du0ObGbb.mjs → task-target-build-BG6cC3bz.mjs} +3 -3
  60. package/dist/task-target-deploy-runner.mjs +5 -5
  61. package/dist/test-BISghlKg.mjs +74 -0
  62. package/dist/{try-deploy.handler-A16ahnCF.mjs → test.handler-DkizZhVu.mjs} +13 -15
  63. package/dist/{test-BIz-oBxy.mjs → tool.handler-Bu130Vcz.mjs} +8 -90
  64. package/dist/{trigger-artifacts-RizI57RC-abdkW8-z.mjs → trigger-artifacts-RizI57RC-CxHwCkQ_.mjs} +2 -2
  65. package/dist/types-D04ah3uY.mjs +6 -0
  66. package/dist/{upgrade-f97U8Rll.mjs → upgrade-cH9I_pZq.mjs} +1 -1
  67. package/dist/{upload.handler-CUtfr3hY.mjs → upload.handler-CpKuAaQ_.mjs} +3 -3
  68. package/dist/{utils-LlH3l_yT.mjs → utils-VC0Vl_pm.mjs} +2 -2
  69. package/dist/{validate.handler-CUP3SjzC.mjs → validate.handler-I8LY-UkG.mjs} +3 -3
  70. package/dist/{workflow-build-C_qkq7jk.mjs → workflow-build-C9rQQ4qU.mjs} +14 -14
  71. package/dist/{workflow-bundler-BzHk73PM-CRcJvu9a.mjs → workflow-bundler-BzHk73PM-AIB4-u4Y.mjs} +1 -1
  72. package/dist/{workflows-ixllXKLo.mjs → workflows-CL1jYSLR.mjs} +55 -17
  73. package/dist/{writer-CtvttJdP-BEJHbiLs.mjs → writer-B-SpZ0G2-olEAgSLc.mjs} +5 -5
  74. package/package.json +7 -7
  75. package/dist/options-BsIkm0Bb.mjs +0 -43
  76. package/dist/skills.command-B8yExFCn.mjs +0 -35
  77. package/dist/sync-keystroke-agent-skills-ChUj1LnK.mjs +0 -66
  78. /package/dist/{accept.handler-BsZQqmzU.mjs → accept.handler-BPwp_UAE.mjs} +0 -0
  79. /package/dist/{clear-cache.handler-Bkt6GKnF.mjs → clear-cache.handler-gr5VmEYB.mjs} +0 -0
  80. /package/dist/{clear.handler-BieI9Oix.mjs → clear.handler-CtOZ4aRn.mjs} +0 -0
  81. /package/dist/{current.handler-C48q2mBd.mjs → current.handler-QZQ-l84v.mjs} +0 -0
  82. /package/dist/{deploy-D4ILrWpx.mjs → deploy-CJbVB7e2.mjs} +0 -0
  83. /package/dist/{detect-env-access-CwkOYeYM-BLtKepjx.mjs → detect-env-access-CwkOYeYM-CZIixHeR.mjs} +0 -0
  84. /package/dist/{invites.list.handler-DmeMcezN.mjs → invites.list.handler-CErgY35S.mjs} +0 -0
  85. /package/dist/{invites.resend.handler-pJTPtKHE.mjs → invites.resend.handler-DRCRIA4F.mjs} +0 -0
  86. /package/dist/{invites.revoke.handler-4NgnnfiU.mjs → invites.revoke.handler-C0FZdAR0.mjs} +0 -0
  87. /package/dist/{layout-DaoP8bcD.mjs → layout-CXkZEsXI.mjs} +0 -0
  88. /package/dist/{list.handler-C7AChEPW.mjs → list.handler-BjutlIkE.mjs} +0 -0
  89. /package/dist/{list.handler-BuX-bb2y.mjs → list.handler-Cr_DFAae.mjs} +0 -0
  90. /package/dist/{list.handler-BSyrxCma.mjs → list.handler-FlchXrKz.mjs} +0 -0
  91. /package/dist/{logs.handler-BqmZ4eLx.mjs → logs.handler-dcRq-zoc.mjs} +0 -0
  92. /package/dist/{members.add.handler-B4H8Hn6x.mjs → members.add.handler-DmYI43rZ.mjs} +0 -0
  93. /package/dist/{members.invite.handler-D8ONlt4Y.mjs → members.invite.handler-B_KVxv5m.mjs} +0 -0
  94. /package/dist/{members.list.handler-BHJTMMiA.mjs → members.list.handler-BtuuIgQS.mjs} +0 -0
  95. /package/dist/{members.remove.handler-_hKd_sFd.mjs → members.remove.handler-Lvg-CqVv.mjs} +0 -0
  96. /package/dist/{members.update.handler-CC7J0k8n.mjs → members.update.handler-D-8izeso.mjs} +0 -0
  97. /package/dist/{read-credential-keys-77a91T8M-COvwpok_.mjs → read-credential-keys-77a91T8M-DMmY6oDW.mjs} +0 -0
  98. /package/dist/{register.handler-CttgzybN.mjs → register.handler-BAx0IC-u.mjs} +0 -0
  99. /package/dist/{schema-BjH_e4Fo.mjs → schema-O9xTWad_.mjs} +0 -0
  100. /package/dist/{switch.handler-BFBM8rSi.mjs → switch.handler-CTwhIcaQ.mjs} +0 -0
  101. /package/dist/{task-target-deploy-OyxLvh3a.mjs → task-target-deploy-gMQC8kXU.mjs} +0 -0
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { writeSync } from "node:fs";
4
+ import { parentPort } from "node:worker_threads";
5
+ //#region src/lib/spinner-worker.ts
6
+ /** Use stdout so cursor position matches `@clack/prompts` `log` (stdout). Mixing stderr here desyncs multi-line ANSI redraws. */
7
+ const OUTPUT_FD = 1;
8
+ const SPINNER_INTERVAL_MS = 79;
9
+ /** Reserve space for prefix, spinner glyph, padding, and elapsed time so lines do not wrap. */
10
+ const LINE_RESERVE_SPINNING = 28;
11
+ /** Completed lines only need room for checkmark + dim duration at end (label carries timing breakdown). */
12
+ const LINE_RESERVE_COMPLETED = 14;
13
+ const BOLD = "\x1B[1m";
14
+ const DIM = "\x1B[2m";
15
+ const CYAN = "\x1B[36m";
16
+ const GREEN = "\x1B[32m";
17
+ const RED = "\x1B[31m";
18
+ const RESET = "\x1B[0m";
19
+ const CURSOR_UP = "\x1B[A";
20
+ const CLEAR_LINE = "\r\x1B[2K";
21
+ let phases = [];
22
+ let linesRendered = 0;
23
+ let intervalId = null;
24
+ function formatDuration(ms) {
25
+ if (ms < 1e3) return `${Math.round(ms)}ms`;
26
+ return `${(ms / 1e3).toFixed(1)}s`;
27
+ }
28
+ function moveUp(n) {
29
+ if (n <= 0) return "";
30
+ return CURSOR_UP.repeat(n);
31
+ }
32
+ function terminalColumns() {
33
+ const c = process.stdout.columns;
34
+ return typeof c === "number" && c > 0 ? c : 80;
35
+ }
36
+ function truncatePlainLabel(label, maxLen) {
37
+ if (label.length <= maxLen) return label;
38
+ if (maxLen <= 3) return "...";
39
+ return `${label.slice(0, maxLen - 3)}...`;
40
+ }
41
+ function maxLabelLength() {
42
+ return Math.max(16, terminalColumns() - LINE_RESERVE_SPINNING);
43
+ }
44
+ function maxCompletedLabelLength() {
45
+ /** Detail lines are split; allow longer segments per line than old single-line budget. */
46
+ return Math.max(72, terminalColumns() - LINE_RESERVE_COMPLETED);
47
+ }
48
+ function clearRenderedArea() {
49
+ if (linesRendered <= 0) return;
50
+ let output = "";
51
+ if (linesRendered > 1) output += moveUp(linesRendered - 1);
52
+ for (let i = 0; i < linesRendered; i++) {
53
+ output += CLEAR_LINE;
54
+ if (i < linesRendered - 1) output += "\n";
55
+ }
56
+ if (linesRendered > 1) output += moveUp(linesRendered - 1);
57
+ writeSync(OUTPUT_FD, output);
58
+ linesRendered = 0;
59
+ }
60
+ function renderPhases() {
61
+ if (phases.length === 0) {
62
+ linesRendered = 0;
63
+ return;
64
+ }
65
+ const maxLabel = maxLabelLength();
66
+ let output = "";
67
+ for (const [i, phase] of phases.entries()) {
68
+ const label = truncatePlainLabel(phase.label, maxLabel);
69
+ if (phase.status === "spinning") {
70
+ const spinnerChar = `${BOLD}${CYAN}●${RESET}`;
71
+ if (phase.showElapsed) {
72
+ const timeStr = `${DIM}${formatDuration(Date.now() - phase.startTime)}${RESET}`;
73
+ output += `${CLEAR_LINE} ${spinnerChar} ${label} ${timeStr}`;
74
+ } else output += `${CLEAR_LINE} ${spinnerChar} ${label}`;
75
+ } else output += `${CLEAR_LINE} ${DIM}○ ${label}${RESET}`;
76
+ if (i < phases.length - 1) output += "\n";
77
+ }
78
+ writeSync(OUTPUT_FD, output);
79
+ linesRendered = phases.length;
80
+ }
81
+ function tick() {
82
+ if (phases.length === 0) return;
83
+ if (linesRendered > 0) writeSync(OUTPUT_FD, moveUp(linesRendered - 1));
84
+ renderPhases();
85
+ }
86
+ function ensureInterval() {
87
+ if (!intervalId && phases.some((phase) => phase.status === "spinning")) intervalId = setInterval(tick, SPINNER_INTERVAL_MS);
88
+ }
89
+ function stopIntervalIfIdle() {
90
+ if (intervalId && !phases.some((phase) => phase.status === "spinning")) {
91
+ clearInterval(intervalId);
92
+ intervalId = null;
93
+ }
94
+ }
95
+ function writeCompletedLine(label, elapsed) {
96
+ const check = `${BOLD}${GREEN}✓${RESET}`;
97
+ const segments = label.split("\n").map((s) => s.trim()).filter((s) => s.length > 0);
98
+ if (segments.length === 0) {
99
+ if (elapsed) writeSync(OUTPUT_FD, `${CLEAR_LINE} ${check} ${`${DIM}${elapsed}${RESET}`}\n`);
100
+ else writeSync(OUTPUT_FD, `${CLEAR_LINE} ${check}\n`);
101
+ return;
102
+ }
103
+ const maxW = maxCompletedLabelLength();
104
+ const first = truncatePlainLabel(segments[0] ?? "", maxW);
105
+ if (elapsed) writeSync(OUTPUT_FD, `${CLEAR_LINE} ${check} ${first} ${`${DIM}${elapsed}${RESET}`}\n`);
106
+ else writeSync(OUTPUT_FD, `${CLEAR_LINE} ${check} ${first}\n`);
107
+ for (const segment of segments.slice(1)) writeSync(OUTPUT_FD, `${CLEAR_LINE} ${DIM}${truncatePlainLabel(segment, maxW)}${RESET}\n`);
108
+ }
109
+ function writeFailedLine(label, elapsed, error) {
110
+ const cross = `${BOLD}${RED}✗${RESET}`;
111
+ const truncated = truncatePlainLabel(error ? `${label}: ${error}` : label, maxCompletedLabelLength());
112
+ if (elapsed) writeSync(OUTPUT_FD, `${CLEAR_LINE} ${cross} ${truncated} ${`${DIM}${elapsed}${RESET}`}\n`);
113
+ else writeSync(OUTPUT_FD, `${CLEAR_LINE} ${cross} ${truncated}\n`);
114
+ }
115
+ function writeSkippedLine(label) {
116
+ writeSync(OUTPUT_FD, `${CLEAR_LINE} ${`${DIM}-${RESET}`} ${truncatePlainLabel(label, maxCompletedLabelLength())}\n`);
117
+ }
118
+ function finalizePhase(id, writeLine) {
119
+ clearRenderedArea();
120
+ writeLine();
121
+ phases = phases.filter((p) => p.id !== id);
122
+ if (phases.length > 0) renderPhases();
123
+ stopIntervalIfIdle();
124
+ }
125
+ parentPort?.on("message", (msg) => {
126
+ switch (msg.type) {
127
+ case "addPendingPhase": {
128
+ const phaseId = msg.id ?? "";
129
+ if (!phases.find((p) => p.id === phaseId)) phases.push({
130
+ id: phaseId,
131
+ label: msg.label ?? "",
132
+ startTime: 0,
133
+ status: "pending",
134
+ showElapsed: msg.showElapsed ?? true
135
+ });
136
+ if (linesRendered > 0) writeSync(OUTPUT_FD, moveUp(linesRendered - 1));
137
+ renderPhases();
138
+ ensureInterval();
139
+ break;
140
+ }
141
+ case "addPhase": {
142
+ const phaseId = msg.id ?? "";
143
+ const existing = phases.find((p) => p.id === phaseId);
144
+ if (existing) {
145
+ existing.label = msg.label ?? "";
146
+ existing.startTime = Date.now();
147
+ existing.status = "spinning";
148
+ existing.showElapsed = msg.showElapsed ?? existing.showElapsed;
149
+ } else phases.push({
150
+ id: phaseId,
151
+ label: msg.label ?? "",
152
+ startTime: Date.now(),
153
+ status: "spinning",
154
+ showElapsed: msg.showElapsed ?? true
155
+ });
156
+ if (linesRendered > 0) writeSync(OUTPUT_FD, moveUp(linesRendered - 1));
157
+ renderPhases();
158
+ ensureInterval();
159
+ break;
160
+ }
161
+ case "updateLabel": {
162
+ const phase = phases.find((p) => p.id === msg.id);
163
+ if (phase) {
164
+ phase.label = msg.label ?? "";
165
+ if (linesRendered > 0) writeSync(OUTPUT_FD, moveUp(linesRendered - 1));
166
+ renderPhases();
167
+ }
168
+ break;
169
+ }
170
+ case "completePhase":
171
+ finalizePhase(msg.id ?? "", () => {
172
+ writeCompletedLine(msg.label ?? "", msg.showElapsed ? msg.elapsed ?? "" : void 0);
173
+ });
174
+ break;
175
+ case "failPhase":
176
+ finalizePhase(msg.id ?? "", () => {
177
+ writeFailedLine(msg.label ?? "", msg.showElapsed ? msg.elapsed ?? "" : void 0, msg.error);
178
+ });
179
+ break;
180
+ case "skipPhase":
181
+ finalizePhase(msg.id ?? "", () => {
182
+ writeSkippedLine(msg.label ?? "");
183
+ });
184
+ break;
185
+ case "stopAll":
186
+ clearRenderedArea();
187
+ phases = [];
188
+ if (intervalId) {
189
+ clearInterval(intervalId);
190
+ intervalId = null;
191
+ }
192
+ break;
193
+ case "exit":
194
+ if (intervalId) {
195
+ clearInterval(intervalId);
196
+ intervalId = null;
197
+ }
198
+ process.exit(0);
199
+ break;
200
+ }
201
+ });
202
+ //#endregion
203
+ export {};
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { t as createTypedCommand } from "./commander-i-7LgOyc.mjs";
3
+ import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
4
4
  import { z } from "zod";
5
5
  //#region src/commands/sync/sync.command.ts
6
6
  /**
@@ -32,7 +32,7 @@ function createSyncCommand() {
32
32
  description: "Sync local workflows with Keystroke",
33
33
  schema: SyncOptionsSchema,
34
34
  optionsConfig: SYNC_OPTIONS_CONFIG,
35
- loadHandler: async () => (await import("./sync.handler-BN9oDWVx.mjs")).handleSync
35
+ loadHandler: async () => (await import("./sync.handler-Be0U3x-n.mjs")).handleSync
36
36
  });
37
37
  }
38
38
  //#endregion
@@ -3,11 +3,11 @@
3
3
  import { N as throwReportedCliExit, n as ui, o as isLocalMode, u as logger, x as toErrorMessage } from "./keystroke.mjs";
4
4
  import { d as trackProject } from "./dist-BF6r1hfv.mjs";
5
5
  import { a as validateApiKey, i as requireClient } from "./context-B1L8pZsH.mjs";
6
- import { n as deployFromDir } from "./dist-BVD3Ga_l.mjs";
7
- import { t as requireWorkflowsDir } from "./resolve-project-CI_PxRXi.mjs";
8
- import { a as runWorkflowBuild, n as renderBuildFailure, r as renderBuildHeader } from "./workflow-build-C_qkq7jk.mjs";
9
- import { t as createBuildProgress } from "./build-progress-BataNqG-.mjs";
10
- import { t as createDeployProgress } from "./deploy-progress-7qj5ek8b.mjs";
6
+ import { n as deployFromDir } from "./dist-FQYQ2FLm.mjs";
7
+ import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
8
+ import { a as runWorkflowBuild, n as renderBuildFailure, r as renderBuildHeader } from "./workflow-build-C9rQQ4qU.mjs";
9
+ import { t as createBuildProgress } from "./build-progress-BZivcVz4.mjs";
10
+ import { t as createDeployProgress } from "./deploy-progress-DJHph1Fz.mjs";
11
11
  //#region src/commands/sync/sync.handler.ts
12
12
  async function handleSync(options, ctx) {
13
13
  try {
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-COvwpok_.mjs";
3
+ import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-DMmY6oDW.mjs";
4
4
  import { mkdir, writeFile } from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  import { pathToFileURL } from "node:url";
@@ -109,7 +109,7 @@ async function buildTaskTargetFile(options) {
109
109
  return builtTasks;
110
110
  }
111
111
  async function bundleTaskTargetModule(options) {
112
- const [{ rolldown }, { createEnvAccessPlugin, formatEnvAccessError }] = await Promise.all([import("rolldown"), import("./detect-env-access-CwkOYeYM-BLtKepjx.mjs").then((n) => n.n).then((n) => n.n)]);
112
+ const [{ rolldown }, { createEnvAccessPlugin, formatEnvAccessError }] = await Promise.all([import("rolldown"), import("./detect-env-access-CwkOYeYM-CZIixHeR.mjs").then((n) => n.n).then((n) => n.n)]);
113
113
  const entryId = "\0virtual:task-target-entry";
114
114
  const trackedDependencies = /* @__PURE__ */ new Set();
115
115
  const envViolations = [];
@@ -216,7 +216,7 @@ async function attachTaskTargetTriggers(options) {
216
216
  options.artifact.triggers.push(...buildTaskTriggerArtifactsWithoutBundles(options.entry.taskMetadata.triggers, options.artifact.task.taskId, options.artifact.task.taskName));
217
217
  return [];
218
218
  }
219
- const { buildTriggerArtifacts } = await import("./trigger-artifacts-RizI57RC-abdkW8-z.mjs").then((n) => n.n);
219
+ const { buildTriggerArtifacts } = await import("./trigger-artifacts-RizI57RC-CxHwCkQ_.mjs").then((n) => n.n);
220
220
  const triggerResult = await buildTriggerArtifacts(options.entry.taskMetadata.triggers, options.artifact.task.taskId, options.artifact.task.taskName, options.projectRoot, {
221
221
  workflowExportName: options.entry.source.localExportName,
222
222
  workflowFilePath: options.entry.runtimeBundlePath
@@ -2,7 +2,7 @@
2
2
 
3
3
  import "./default-urls-BS4twrsS.mjs";
4
4
  import { l as resolveAuthOptions } from "./dist-BF6r1hfv.mjs";
5
- import { n as findProjectRoot, t as assertWorkflowProjectRoot } from "./project-config-CJGSh2RQ.mjs";
5
+ import { n as findProjectRoot, t as assertWorkflowProjectRoot } from "./project-config-CsBMT4TL.mjs";
6
6
  import { mkdir, readFile, writeFile } from "node:fs/promises";
7
7
  import path from "node:path";
8
8
  import { spawnSync } from "node:child_process";
@@ -116,7 +116,7 @@ function restartStage(options, projectRoot, stage) {
116
116
  }
117
117
  async function runBuildPhase(options, projectRoot) {
118
118
  const projectConfig = await assertWorkflowProjectRoot(projectRoot);
119
- const { buildTaskTargetEntries } = await import("./task-target-build-Du0ObGbb.mjs");
119
+ const { buildTaskTargetEntries } = await import("./task-target-build-BG6cC3bz.mjs");
120
120
  await writeBuildDescriptor(projectRoot, {
121
121
  projectRoot,
122
122
  projectConfig,
@@ -129,7 +129,7 @@ async function runBuildPhase(options, projectRoot) {
129
129
  }
130
130
  async function runPreparePhase(projectRoot) {
131
131
  const buildDescriptor = await readBuildDescriptor(projectRoot);
132
- const { prepareTaskTargetBuiltTasks } = await import("./task-target-build-Du0ObGbb.mjs");
132
+ const { prepareTaskTargetBuiltTasks } = await import("./task-target-build-BG6cC3bz.mjs");
133
133
  const prepareResult = await prepareTaskTargetBuiltTasks({
134
134
  builtTasks: buildDescriptor.builtTasks,
135
135
  projectRoot
@@ -158,11 +158,11 @@ async function resolveDeployAuthOptions(options) {
158
158
  }
159
159
  async function runDeployPhase(options, projectRoot) {
160
160
  const descriptor = await readDescriptor(projectRoot);
161
- const { createDeployClient } = await import("./deploy-D4ILrWpx.mjs");
161
+ const { createDeployClient } = await import("./deploy-CJbVB7e2.mjs");
162
162
  const client = createDeployClient(await resolveDeployAuthOptions(options));
163
163
  const auth = await client.public.auth.validate();
164
164
  if (auth.organizationId !== descriptor.projectConfig.organizationId) throw new Error(`Project organization mismatch: config=${descriptor.projectConfig.organizationId} auth=${auth.organizationId}`);
165
- const { deployTaskTargets } = await import("./task-target-deploy-OyxLvh3a.mjs");
165
+ const { deployTaskTargets } = await import("./task-target-deploy-gMQC8kXU.mjs");
166
166
  const result = await deployTaskTargets({
167
167
  preparedTasks: descriptor.preparedTasks,
168
168
  client,
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { n as ui } from "./keystroke.mjs";
4
+ import { n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
5
+ import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
6
+ import { z } from "zod";
7
+ //#region src/commands/test/test.command.ts
8
+ const TestOptionsSchema = JsonOptionSchema;
9
+ const TestToolOptionsSchema = JsonOptionSchema.extend({
10
+ toolName: z.string().min(1),
11
+ agent: z.string().min(1).optional(),
12
+ input: z.string().optional(),
13
+ inputFile: z.string().optional(),
14
+ path: z.string().optional(),
15
+ timeout: z.coerce.number().int().min(1).default(120),
16
+ verbose: z.boolean().default(false)
17
+ });
18
+ const TEST_OPTIONS_CONFIG = { ...JSON_OPTION_CONFIG };
19
+ const TEST_TOOL_OPTIONS_CONFIG = {
20
+ ...JSON_OPTION_CONFIG,
21
+ agent: {
22
+ flag: "--agent <agentId>",
23
+ description: "Authored agent id, agent id, or agent name containing the tool"
24
+ },
25
+ input: {
26
+ flag: "--input <json>",
27
+ description: "Tool input as inline JSON string"
28
+ },
29
+ inputFile: {
30
+ flag: "--input-file <path>",
31
+ description: "Path to a JSON file containing tool input"
32
+ },
33
+ path: {
34
+ flag: "--path <dir>",
35
+ description: "Path to project root (directory containing keystroke.config.ts); auto-discovered from CWD if omitted"
36
+ },
37
+ timeout: {
38
+ flag: "--timeout <seconds>",
39
+ description: "Max seconds to wait for workflow completion (default: 120)"
40
+ },
41
+ verbose: {
42
+ flag: "--verbose",
43
+ description: "Show detailed execution logs while polling workflow tools"
44
+ }
45
+ };
46
+ function handleTestHelp() {
47
+ ui.hint("Use `keystroke test tool <toolName> --input='{...}'`. To test workflows, use `keystroke workflows test <workflow>`.");
48
+ }
49
+ function createTestCommand() {
50
+ const cmd = createTypedCommand({
51
+ name: "test",
52
+ description: "Test agent-callable tools",
53
+ schema: TestOptionsSchema,
54
+ optionsConfig: TEST_OPTIONS_CONFIG,
55
+ handler: handleTestHelp,
56
+ subcommands: [createTypedCommand({
57
+ name: "tool",
58
+ description: "Test an agent-callable tool from a built agent manifest",
59
+ schema: TestToolOptionsSchema,
60
+ optionsConfig: TEST_TOOL_OPTIONS_CONFIG,
61
+ argument: {
62
+ name: "toolName",
63
+ description: "Agent tool name from the built manifest",
64
+ key: "toolName"
65
+ },
66
+ loadHandler: async () => (await import("./tool.handler-Bu130Vcz.mjs")).handleTestTool
67
+ })]
68
+ });
69
+ cmd.enablePositionalOptions();
70
+ cmd.passThroughOptions();
71
+ return cmd;
72
+ }
73
+ //#endregion
74
+ export { createTestCommand };
@@ -1,17 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as __exportAll } from "./chunk-CH6r78ws.mjs";
4
3
  import { k as CliExitError, n as ui, o as isLocalMode, x as toErrorMessage } from "./keystroke.mjs";
5
4
  import { d as trackProject } from "./dist-BF6r1hfv.mjs";
6
- import { t as assertWorkflowProjectRoot } from "./project-config-CJGSh2RQ.mjs";
5
+ import { t as assertWorkflowProjectRoot } from "./project-config-CsBMT4TL.mjs";
7
6
  import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-B1L8pZsH.mjs";
8
- import { o as readWorkflowsFromDisk, s as uploadTestBundle } from "./dist-BVD3Ga_l.mjs";
9
- import { t as requireWorkflowsDir } from "./resolve-project-CI_PxRXi.mjs";
10
- import { a as runWorkflowBuild, t as WorkflowNotFoundError } from "./workflow-build-C_qkq7jk.mjs";
11
- import { r as isUnknownSchema } from "./schema-display-B0LmISCe.mjs";
12
- import { t as createBuildProgress } from "./build-progress-BataNqG-.mjs";
7
+ import { o as readWorkflowsFromDisk, s as uploadTestBundle } from "./dist-FQYQ2FLm.mjs";
8
+ import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
9
+ import { a as runWorkflowBuild, t as WorkflowNotFoundError } from "./workflow-build-C9rQQ4qU.mjs";
10
+ import { r as isUnknownSchema } from "./schema-display-CNqiYBIb.mjs";
11
+ import { t as createBuildProgress } from "./build-progress-BZivcVz4.mjs";
13
12
  import { t as withErrorBoundary } from "./error-boundary-CyLcinp1.mjs";
14
- import { a as tryReadExistingInputSchema, n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-7YWCL6c-.mjs";
13
+ import { a as tryReadExistingInputSchema, n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-BWcLQvm0.mjs";
15
14
  //#region src/lib/format.ts
16
15
  function formatBytes(bytes) {
17
16
  if (bytes < 1024) return `${bytes} B`;
@@ -83,10 +82,9 @@ function renderRunCompletionSuccessMessage(builds, elapsedSeconds) {
83
82
  else ui.success(`Workflow completed in ${elapsedSeconds}s`);
84
83
  }
85
84
  //#endregion
86
- //#region src/commands/workflows/try-deploy.handler/index.ts
87
- var try_deploy_handler_exports = /* @__PURE__ */ __exportAll({ handleWorkflowsTryDeploy: () => handleWorkflowsTryDeploy });
88
- async function handleWorkflowsTryDeploy(options, ctx) {
89
- return withErrorBoundary("Try-deploy", async () => {
85
+ //#region src/commands/workflows/test.handler.ts
86
+ async function handleWorkflowsTest(options, ctx) {
87
+ return withErrorBoundary("Workflow test", async () => {
90
88
  const client = requireClient(ctx);
91
89
  const startTime = Date.now();
92
90
  const local = isLocalMode();
@@ -103,7 +101,7 @@ async function handleWorkflowsTryDeploy(options, ctx) {
103
101
  const projectConfig = await assertWorkflowProjectRoot(workflowsDir);
104
102
  await assertProjectConfigMatchesAuthenticatedOrg(client, projectConfig);
105
103
  for (const [i, build] of builds.entries()) {
106
- if (builds.length > 1) ui.header(`Running "${build.name}" (${i + 1}/${builds.length})...`);
104
+ if (builds.length > 1) ui.header(`Testing "${build.name}" (${i + 1}/${builds.length})...`);
107
105
  let storagePath;
108
106
  if (local) {
109
107
  storagePath = build.bundlePath;
@@ -114,7 +112,7 @@ async function handleWorkflowsTryDeploy(options, ctx) {
114
112
  storagePaths.push(storagePath);
115
113
  ui.success("Upload complete");
116
114
  }
117
- ui.header("Executing workflow...");
115
+ ui.header("Testing workflow...");
118
116
  const { runId } = await client.workflows.testById({
119
117
  workflowName: build.name,
120
118
  storagePath,
@@ -166,4 +164,4 @@ async function handleWorkflowsTryDeploy(options, ctx) {
166
164
  }, { json: ctx.jsonMode });
167
165
  }
168
166
  //#endregion
169
- export { try_deploy_handler_exports as n, handleWorkflowsTryDeploy as t };
167
+ export { handleWorkflowsTest };
@@ -2,22 +2,18 @@
2
2
 
3
3
  import { N as throwReportedCliExit, a as getProcessEnv, k as CliExitError, n as ui, x as toErrorMessage } from "./keystroke.mjs";
4
4
  import { l as resolveAuthOptions } from "./dist-BF6r1hfv.mjs";
5
- import { t as assertWorkflowProjectRoot } from "./project-config-CJGSh2RQ.mjs";
6
- import { i as writeJson, n as JsonOptionSchema, t as JSON_OPTION_CONFIG } from "./output-CGdYhH0p.mjs";
7
- import { t as createTypedCommand } from "./commander-i-7LgOyc.mjs";
5
+ import { t as assertWorkflowProjectRoot } from "./project-config-CsBMT4TL.mjs";
6
+ import { i as writeJson } from "./output-CGdYhH0p.mjs";
8
7
  import { i as requireClient, t as assertProjectConfigMatchesAuthenticatedOrg } from "./context-B1L8pZsH.mjs";
9
- import { a as readManifestsFromOutDir } from "./dist-BVD3Ga_l.mjs";
10
- import { t as requireWorkflowsDir } from "./resolve-project-CI_PxRXi.mjs";
11
- import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-C_qkq7jk.mjs";
12
- import { t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-Biw1zV7S.mjs";
13
- import { n as WorkflowsRunOptionsSchema, t as RUN_OPTIONS_CONFIG } from "./options-BsIkm0Bb.mjs";
14
- import { t as handleWorkflowsTryDeploy } from "./try-deploy.handler-A16ahnCF.mjs";
15
- import { n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-7YWCL6c-.mjs";
8
+ import { a as readManifestsFromOutDir } from "./dist-FQYQ2FLm.mjs";
9
+ import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
10
+ import { a as runWorkflowBuild, n as renderBuildFailure } from "./workflow-build-C9rQQ4qU.mjs";
11
+ import { t as lookupCurrentDeploymentWorkflow } from "./current-deployment-workflow-BRUEdPrN.mjs";
12
+ import { n as resolveInput, o as validateInputOrExit, t as pollForCompletion } from "./run-polling-BWcLQvm0.mjs";
16
13
  import { mkdtemp, rm, writeFile } from "node:fs/promises";
17
14
  import { tmpdir } from "node:os";
18
15
  import path from "node:path";
19
16
  import { pathToFileURL } from "node:url";
20
- import { z } from "zod";
21
17
  //#region ../../packages/testing/src/test-runtime/credentials/env-resolver.ts
22
18
  /**
23
19
  * Computes the env var name for a credential key.
@@ -559,82 +555,4 @@ function redactString(value, knownSecretValues) {
559
555
  };
560
556
  }
561
557
  //#endregion
562
- //#region src/commands/test/test.command.ts
563
- const TestOptionsSchema = JsonOptionSchema;
564
- const TestToolOptionsSchema = JsonOptionSchema.extend({
565
- toolName: z.string().min(1),
566
- agent: z.string().min(1).optional(),
567
- input: z.string().optional(),
568
- inputFile: z.string().optional(),
569
- path: z.string().optional(),
570
- timeout: z.coerce.number().int().min(1).default(120),
571
- verbose: z.boolean().default(false)
572
- });
573
- const TEST_OPTIONS_CONFIG = { ...JSON_OPTION_CONFIG };
574
- const TEST_TOOL_OPTIONS_CONFIG = {
575
- ...JSON_OPTION_CONFIG,
576
- agent: {
577
- flag: "--agent <agentId>",
578
- description: "Authored agent id, agent id, or agent name containing the tool"
579
- },
580
- input: {
581
- flag: "--input <json>",
582
- description: "Tool input as inline JSON string"
583
- },
584
- inputFile: {
585
- flag: "--input-file <path>",
586
- description: "Path to a JSON file containing tool input"
587
- },
588
- path: {
589
- flag: "--path <dir>",
590
- description: "Path to project root (directory containing keystroke.config.ts); auto-discovered from CWD if omitted"
591
- },
592
- timeout: {
593
- flag: "--timeout <seconds>",
594
- description: "Max seconds to wait for workflow completion (default: 120)"
595
- },
596
- verbose: {
597
- flag: "--verbose",
598
- description: "Show detailed execution logs while polling workflow tools"
599
- }
600
- };
601
- function handleTestHelp() {
602
- ui.hint("Use `keystroke test tool <toolName> --input='{...}'` or `keystroke test workflow <workflow>`.");
603
- }
604
- function createTestCommand() {
605
- const cmd = createTypedCommand({
606
- name: "test",
607
- description: "Test workflows and agent-callable tools",
608
- schema: TestOptionsSchema,
609
- optionsConfig: TEST_OPTIONS_CONFIG,
610
- handler: handleTestHelp,
611
- subcommands: [createTypedCommand({
612
- name: "tool",
613
- description: "Test an agent-callable tool from a built agent manifest",
614
- schema: TestToolOptionsSchema,
615
- optionsConfig: TEST_TOOL_OPTIONS_CONFIG,
616
- argument: {
617
- name: "toolName",
618
- description: "Agent tool name from the built manifest",
619
- key: "toolName"
620
- },
621
- handler: handleTestTool
622
- }), createTypedCommand({
623
- name: "workflow",
624
- description: "Build, upload, and run a workflow on the server",
625
- schema: WorkflowsRunOptionsSchema,
626
- optionsConfig: RUN_OPTIONS_CONFIG,
627
- argument: {
628
- name: "workflow",
629
- description: "Authored workflow id (preferred) or workflow name. Multiple workflows with the same name run sequentially.",
630
- key: "workflow"
631
- },
632
- handler: handleWorkflowsTryDeploy
633
- })]
634
- });
635
- cmd.enablePositionalOptions();
636
- cmd.passThroughOptions();
637
- return cmd;
638
- }
639
- //#endregion
640
- export { createTestCommand };
558
+ export { handleTestTool };
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { n as readOptionalJsonSchemaKeys } from "./declared-credential-requirements-B6h4WRv4.mjs";
4
4
  import { t as __exportAll } from "./rolldown-runtime-twds-ZHy-CO5ir_za.mjs";
5
- import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-COvwpok_.mjs";
6
- import { r as formatEnvAccessError, t as createEnvAccessPlugin } from "./detect-env-access-CwkOYeYM-BLtKepjx.mjs";
5
+ import { t as readCredentialKeysFromSchemaObject } from "./read-credential-keys-77a91T8M-DMmY6oDW.mjs";
6
+ import { r as formatEnvAccessError, t as createEnvAccessPlugin } from "./detect-env-access-CwkOYeYM-CZIixHeR.mjs";
7
7
  import { createHash } from "node:crypto";
8
8
  import { rolldown } from "rolldown";
9
9
  //#region ../../packages/workflow-builder/dist/trigger-artifacts-RizI57RC.mjs
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+
3
+ //#region src/lib/skill-installer/types.ts
4
+ const SKILL_INSTALL_METHODS = ["symlink", "copy"];
5
+ //#endregion
6
+ export { SKILL_INSTALL_METHODS as t };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { t as createTypedCommand } from "./commander-i-7LgOyc.mjs";
3
+ import { t as createTypedCommand } from "./commander-D15UZVjp.mjs";
4
4
  import { z } from "zod";
5
5
  //#region src/commands/upgrade/upgrade.command.ts
6
6
  const PackageManagerSchema = z.enum([
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { N as throwReportedCliExit, a as getProcessEnv, n as ui, x as toErrorMessage } from "./keystroke.mjs";
4
- import { t as assertWorkflowProjectRoot } from "./project-config-CJGSh2RQ.mjs";
4
+ import { t as assertWorkflowProjectRoot } from "./project-config-CsBMT4TL.mjs";
5
5
  import { a as writeJsonError, i as writeJson } from "./output-CGdYhH0p.mjs";
6
6
  import { i as requireClient } from "./context-B1L8pZsH.mjs";
7
- import { a as readManifestsFromOutDir, t as collectCredentialFingerprintMapFromProjectDist } from "./dist-BVD3Ga_l.mjs";
8
- import { t as requireWorkflowsDir } from "./resolve-project-CI_PxRXi.mjs";
7
+ import { a as readManifestsFromOutDir, t as collectCredentialFingerprintMapFromProjectDist } from "./dist-FQYQ2FLm.mjs";
8
+ import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
9
9
  import { t as getIntegrationCatalog } from "./integration-catalog-BgT4mLzW.mjs";
10
10
  import { t as readCredentialEnvMap } from "./credential-env-map-B2nVJXPn.mjs";
11
11
  import { a as verifyCredentialResolvable, i as validateManualCredentialWithHook, n as resolveCredentialValuesFromEnv, r as uploadCredential, t as groupCredentialRequirements } from "./credentials-CiOwDS5y.mjs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { i as readProjectConfig } from "./project-config-CJGSh2RQ.mjs";
4
- import { h as resolveBuildOutputDir } from "./layout-DaoP8bcD.mjs";
3
+ import { i as readProjectConfig } from "./project-config-CsBMT4TL.mjs";
4
+ import { h as resolveBuildOutputDir } from "./layout-CXkZEsXI.mjs";
5
5
  import path from "node:path";
6
6
  //#region ../../packages/project-config/src/utils.ts
7
7
  function resolveConfiguredBuildOutputDir(projectRoot, buildConfig) {
@@ -3,9 +3,9 @@
3
3
  import { N as throwReportedCliExit, n as ui, x as toErrorMessage } from "./keystroke.mjs";
4
4
  import { d as trackProject } from "./dist-BF6r1hfv.mjs";
5
5
  import { i as writeJson } from "./output-CGdYhH0p.mjs";
6
- import { t as requireWorkflowsDir } from "./resolve-project-CI_PxRXi.mjs";
7
- import { s as build, t as WorkflowNotFoundError } from "./workflow-build-C_qkq7jk.mjs";
8
- import { t as createBuildProgress } from "./build-progress-BataNqG-.mjs";
6
+ import { t as requireWorkflowsDir } from "./resolve-project-CURYMjex.mjs";
7
+ import { s as build, t as WorkflowNotFoundError } from "./workflow-build-C9rQQ4qU.mjs";
8
+ import { t as createBuildProgress } from "./build-progress-BZivcVz4.mjs";
9
9
  import { mkdtemp, rm } from "node:fs/promises";
10
10
  import * as os from "node:os";
11
11
  import * as path$1 from "node:path";