@mokronos/wfkit 0.1.0

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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/authoring.d.ts +7 -0
  4. package/dist/authoring.d.ts.map +1 -0
  5. package/dist/authoring.js +8 -0
  6. package/dist/authoring.js.map +1 -0
  7. package/dist/cli/integrations.d.ts +3 -0
  8. package/dist/cli/integrations.d.ts.map +1 -0
  9. package/dist/cli/integrations.js +40 -0
  10. package/dist/cli/integrations.js.map +1 -0
  11. package/dist/cli/main.d.ts +3 -0
  12. package/dist/cli/main.d.ts.map +1 -0
  13. package/dist/cli/main.js +591 -0
  14. package/dist/cli/main.js.map +1 -0
  15. package/dist/core.d.ts +198 -0
  16. package/dist/core.d.ts.map +1 -0
  17. package/dist/core.js +1061 -0
  18. package/dist/core.js.map +1 -0
  19. package/dist/errors.d.ts +3 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +13 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/events.d.ts +154 -0
  24. package/dist/events.d.ts.map +1 -0
  25. package/dist/events.js +24 -0
  26. package/dist/events.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +11 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/replay.d.ts +3 -0
  32. package/dist/replay.d.ts.map +1 -0
  33. package/dist/replay.js +28 -0
  34. package/dist/replay.js.map +1 -0
  35. package/dist/runtime.d.ts +70 -0
  36. package/dist/runtime.d.ts.map +1 -0
  37. package/dist/runtime.js +183 -0
  38. package/dist/runtime.js.map +1 -0
  39. package/dist/schema.d.ts +18 -0
  40. package/dist/schema.d.ts.map +1 -0
  41. package/dist/schema.js +19 -0
  42. package/dist/schema.js.map +1 -0
  43. package/dist/schemas.d.ts +1198 -0
  44. package/dist/schemas.d.ts.map +1 -0
  45. package/dist/schemas.js +383 -0
  46. package/dist/schemas.js.map +1 -0
  47. package/dist/sdk/artifact.d.ts +41 -0
  48. package/dist/sdk/artifact.d.ts.map +1 -0
  49. package/dist/sdk/artifact.js +94 -0
  50. package/dist/sdk/artifact.js.map +1 -0
  51. package/dist/sdk/graph.d.ts +15 -0
  52. package/dist/sdk/graph.d.ts.map +1 -0
  53. package/dist/sdk/graph.js +388 -0
  54. package/dist/sdk/graph.js.map +1 -0
  55. package/dist/sdk/index.d.ts +14 -0
  56. package/dist/sdk/index.d.ts.map +1 -0
  57. package/dist/sdk/index.js +8 -0
  58. package/dist/sdk/index.js.map +1 -0
  59. package/dist/sdk/integrations.d.ts +18 -0
  60. package/dist/sdk/integrations.d.ts.map +1 -0
  61. package/dist/sdk/integrations.js +20 -0
  62. package/dist/sdk/integrations.js.map +1 -0
  63. package/dist/sdk/json.d.ts +4 -0
  64. package/dist/sdk/json.d.ts.map +1 -0
  65. package/dist/sdk/json.js +31 -0
  66. package/dist/sdk/json.js.map +1 -0
  67. package/dist/sdk/loader.d.ts +10 -0
  68. package/dist/sdk/loader.d.ts.map +1 -0
  69. package/dist/sdk/loader.js +75 -0
  70. package/dist/sdk/loader.js.map +1 -0
  71. package/dist/sdk/sdk.d.ts +102 -0
  72. package/dist/sdk/sdk.d.ts.map +1 -0
  73. package/dist/sdk/sdk.js +669 -0
  74. package/dist/sdk/sdk.js.map +1 -0
  75. package/dist/sdk/sqlite.d.ts +8 -0
  76. package/dist/sdk/sqlite.d.ts.map +1 -0
  77. package/dist/sdk/sqlite.js +288 -0
  78. package/dist/sdk/sqlite.js.map +1 -0
  79. package/dist/signal.d.ts +17 -0
  80. package/dist/signal.d.ts.map +1 -0
  81. package/dist/signal.js +78 -0
  82. package/dist/signal.js.map +1 -0
  83. package/dist/testing/index.d.ts +35 -0
  84. package/dist/testing/index.d.ts.map +1 -0
  85. package/dist/testing/index.js +244 -0
  86. package/dist/testing/index.js.map +1 -0
  87. package/package.json +67 -0
  88. package/src/authoring.ts +32 -0
  89. package/src/cli/integrations.ts +75 -0
  90. package/src/cli/main.ts +793 -0
  91. package/src/core.ts +1515 -0
  92. package/src/errors.ts +19 -0
  93. package/src/events.ts +37 -0
  94. package/src/index.ts +109 -0
  95. package/src/replay.ts +29 -0
  96. package/src/runtime.ts +314 -0
  97. package/src/schema.ts +34 -0
  98. package/src/schemas.ts +473 -0
  99. package/src/sdk/artifact.ts +176 -0
  100. package/src/sdk/graph.ts +486 -0
  101. package/src/sdk/index.ts +64 -0
  102. package/src/sdk/integrations.ts +49 -0
  103. package/src/sdk/json.ts +40 -0
  104. package/src/sdk/loader.ts +99 -0
  105. package/src/sdk/sdk.ts +911 -0
  106. package/src/sdk/sqlite.ts +405 -0
  107. package/src/signal.ts +116 -0
  108. package/src/testing/index.ts +341 -0
@@ -0,0 +1,591 @@
1
+ #!/usr/bin/env bun
2
+ import { readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { createWorkflowClient, createWorkflowRuntime, createSqliteWorkflowRepository, loadWorkflowArtifact, sampleValueForJsonSchema, toJsonText } from "../index.js";
5
+ const help = `Usage:
6
+ wf create <workflow-id> [--name <workflow-name>] [--source <typescript>] [--file <path>] [--version <version>] [--force]
7
+ wf list
8
+ wf runs
9
+ wf history <execution-id>
10
+ wf run <workflow-id> [json-input]
11
+ wf signal <run-id> <signal-name> [json-payload] [--actor <actor>]
12
+
13
+ Examples:
14
+ wf create welcome-email
15
+ wf create email --file examples/email/email.ts
16
+ wf list
17
+ wf runs
18
+ wf run welcome-email '{"message":"hello"}'
19
+ wf signal 018f6c7c-4c3b-7f12-91c8-88560b4b21a9 approval '{"approved":true}'
20
+ `;
21
+ const formatError = (error) => {
22
+ if (error instanceof Error) {
23
+ return error.message;
24
+ }
25
+ // Typed workflow errors are plain objects; String() would print
26
+ // "[object Object]".
27
+ return typeof error === "object" && error !== null ? toJsonText(error) : String(error);
28
+ };
29
+ const parseJsonInput = (input) => {
30
+ if (input === undefined) {
31
+ return {};
32
+ }
33
+ try {
34
+ return JSON.parse(input);
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Invalid JSON input: ${formatError(error)}`);
38
+ }
39
+ };
40
+ const parseSignalCommandOptions = (args) => {
41
+ const [runId, signalName, ...rest] = args;
42
+ if (runId === undefined || signalName === undefined) {
43
+ throw new Error("wf signal requires a run id and signal name");
44
+ }
45
+ let payloadText;
46
+ let actor;
47
+ for (let index = 0; index < rest.length; index++) {
48
+ const arg = rest[index];
49
+ switch (arg) {
50
+ case "--actor":
51
+ actor = readFlagValue(rest, ++index, "--actor");
52
+ break;
53
+ default:
54
+ if (arg.startsWith("--")) {
55
+ throw new Error(`Unknown wf signal option: ${arg}`);
56
+ }
57
+ if (payloadText !== undefined) {
58
+ throw new Error("wf signal accepts only one JSON payload");
59
+ }
60
+ payloadText = arg;
61
+ break;
62
+ }
63
+ }
64
+ return {
65
+ runId,
66
+ signalName,
67
+ payload: parseJsonInput(payloadText),
68
+ ...(actor === undefined ? {} : { actor })
69
+ };
70
+ };
71
+ const parseCreateWorkflowOptions = (id, args) => {
72
+ if (id === undefined) {
73
+ throw new Error("wf create requires a workflow id");
74
+ }
75
+ assertWorkflowId(id);
76
+ let name = `${toPascalCase(id)}Workflow`;
77
+ let nameProvided = false;
78
+ let source;
79
+ let sourceFile;
80
+ let version = "dev";
81
+ let force = false;
82
+ for (let index = 0; index < args.length; index++) {
83
+ const arg = args[index];
84
+ switch (arg) {
85
+ case "--name":
86
+ name = readFlagValue(args, ++index, "--name");
87
+ assertWorkflowName(name);
88
+ nameProvided = true;
89
+ break;
90
+ case "--source":
91
+ source = readFlagValue(args, ++index, "--source");
92
+ break;
93
+ case "--file":
94
+ sourceFile = readFlagValue(args, ++index, "--file");
95
+ break;
96
+ case "--version":
97
+ version = readFlagValue(args, ++index, "--version");
98
+ break;
99
+ case "--force":
100
+ force = true;
101
+ break;
102
+ default:
103
+ throw new Error(`Unknown wf create option: ${arg}`);
104
+ }
105
+ }
106
+ if (source !== undefined && sourceFile !== undefined) {
107
+ throw new Error("Use either --source or --file, not both");
108
+ }
109
+ return {
110
+ id,
111
+ name,
112
+ nameProvided,
113
+ ...(source === undefined ? {} : { source }),
114
+ ...(sourceFile === undefined ? {} : { sourceFile }),
115
+ version,
116
+ force
117
+ };
118
+ };
119
+ const parseCreateWorkflowOptionsWithSource = async (id, args) => {
120
+ const options = parseCreateWorkflowOptions(id, args);
121
+ const source = options.source ??
122
+ (options.sourceFile === undefined
123
+ ? workflowTemplate({ ...options, source: "" })
124
+ : await readFile(options.sourceFile, "utf8"));
125
+ return {
126
+ id: options.id,
127
+ name: options.name,
128
+ nameProvided: options.nameProvided,
129
+ source,
130
+ version: options.version,
131
+ force: options.force
132
+ };
133
+ };
134
+ const readFlagValue = (args, index, flag) => {
135
+ const value = args[index];
136
+ if (value === undefined || value.startsWith("--")) {
137
+ throw new Error(`${flag} requires a value`);
138
+ }
139
+ return value;
140
+ };
141
+ const assertWorkflowId = (id) => {
142
+ if (!/^[a-z][a-z0-9-]*$/.test(id)) {
143
+ throw new Error("Workflow id must start with a lowercase letter and contain only lowercase letters, numbers, and dashes");
144
+ }
145
+ };
146
+ const assertWorkflowName = (name) => {
147
+ if (!/^[A-Z][A-Za-z0-9]*$/.test(name)) {
148
+ throw new Error("Workflow name must be a valid PascalCase TypeScript identifier");
149
+ }
150
+ };
151
+ const toPascalCase = (value) => value
152
+ .split("-")
153
+ .filter((part) => part.length > 0)
154
+ .map((part) => `${part[0].toUpperCase()}${part.slice(1)}`)
155
+ .join("");
156
+ const workflowTemplate = (options) => `import { defineStep, defineWorkflow, t } from "@mokronos/wfkit"
157
+
158
+ const printMessage = defineStep({
159
+ name: "PrintMessage",
160
+ input: t.struct({ message: t.string }),
161
+ output: t.void,
162
+ execute: async (input) => {
163
+ console.log(input.message)
164
+ }
165
+ })
166
+
167
+ export const ${options.name} = defineWorkflow({
168
+ name: "${options.name}",
169
+ version: 1,
170
+ input: t.struct({
171
+ message: t.string
172
+ }),
173
+ output: t.void,
174
+ run: function* (input, ctx) {
175
+ yield* ctx.run(printMessage, {
176
+ message: input.message.trim()
177
+ })
178
+ }
179
+ })
180
+ `;
181
+ const printWorkflows = (workflows) => {
182
+ if (workflows.length === 0) {
183
+ console.log("No workflows found.");
184
+ return;
185
+ }
186
+ for (const workflow of workflows) {
187
+ const exported = workflow.exportName === undefined ? "" : `#${workflow.exportName}`;
188
+ console.log(`${workflow.id}\t${workflow.version}\t${workflow.name}${exported}\t${workflow.source.length} bytes`);
189
+ }
190
+ };
191
+ const printCreatedWorkflow = (workflow) => {
192
+ const exported = workflow.exportName === undefined ? "" : `#${workflow.exportName}`;
193
+ console.log(`Created ${workflow.id}\t${workflow.version}\t${workflow.name}${exported}\t${workflow.source.length} bytes`);
194
+ };
195
+ const printRuns = (runs) => {
196
+ if (runs.length === 0) {
197
+ console.log("No workflow runs found.");
198
+ return;
199
+ }
200
+ for (const run of runs) {
201
+ const finishedAt = run.finishedAt ?? "-";
202
+ console.log(`${run.id}\t${run.status}\t${run.workflowId}@${run.workflowVersion}\t${run.startedAt}\t${finishedAt}`);
203
+ }
204
+ };
205
+ const printRunEvents = (events) => {
206
+ if (events.length === 0) {
207
+ console.log("No workflow run events found.");
208
+ return;
209
+ }
210
+ for (const event of events) {
211
+ console.log(`${event.sequence}\t${event.createdAt}\t${event.type}\t${stringifyEventValue(event.event)}`);
212
+ }
213
+ };
214
+ const printRunResult = (result) => {
215
+ if (result === undefined) {
216
+ console.log("Workflow completed.");
217
+ return;
218
+ }
219
+ console.log(JSON.stringify(result, null, 2));
220
+ };
221
+ const samplePayloadFor = (signal) => signal.payloadSchema === undefined ? {} : sampleValueForJsonSchema(signal.payloadSchema);
222
+ const describePendingSignal = (runId, signal) => {
223
+ const schemaLine = signal.payloadSchema === undefined
224
+ ? ""
225
+ : `\n expected payload schema: ${toJsonText(signal.payloadSchema)}`;
226
+ return `Currently waiting for signal "${signal.name}".${schemaLine}\n deliver with: wf signal ${runId} ${signal.name} '${toJsonText(samplePayloadFor(signal))}'`;
227
+ };
228
+ const printPendingSignalHint = (runId, pendingSignals) => {
229
+ const names = pendingSignals
230
+ .map((signal) => signal.timeout === undefined
231
+ ? signal.name
232
+ : `${signal.name} timeout=${stringifyEventValue(signal.timeout)}`)
233
+ .join(", ");
234
+ console.error(`${eventTag("signal")} ${yellow("waiting")} for ${bold(names)}`);
235
+ const signal = pendingSignals[0];
236
+ if (signal !== undefined) {
237
+ if (signal.payloadSchema !== undefined) {
238
+ console.error(`${eventTag("signal")} ${bold(signal.name)} expects payload schema: ${dim(toJsonText(signal.payloadSchema))}`);
239
+ }
240
+ console.error(`${bold("Resume with:")} wf signal ${runId} ${signal.name} '${toJsonText(samplePayloadFor(signal))}'`);
241
+ }
242
+ };
243
+ const isPrintableWorkflowEvent = (event) => {
244
+ switch (event.type) {
245
+ case "workflow.started":
246
+ case "workflow.completed":
247
+ case "workflow.failed":
248
+ case "step.started":
249
+ case "step.completed":
250
+ case "step.failed":
251
+ case "compensation.started":
252
+ case "compensation.completed":
253
+ case "compensation.failed":
254
+ case "sleep.started":
255
+ case "sleep.completed":
256
+ case "signal.waiting":
257
+ case "signal.received":
258
+ case "signal.timeout":
259
+ case "code.started":
260
+ case "code.completed":
261
+ case "code.failed":
262
+ case "all.started":
263
+ case "all.completed":
264
+ case "all.failed":
265
+ return true;
266
+ default:
267
+ return false;
268
+ }
269
+ };
270
+ const stringifyEventValue = (value) => {
271
+ if (value === undefined) {
272
+ return "undefined";
273
+ }
274
+ if (typeof value === "string") {
275
+ return JSON.stringify(value);
276
+ }
277
+ try {
278
+ return toJsonText(value);
279
+ }
280
+ catch {
281
+ return String(value);
282
+ }
283
+ };
284
+ // --- colored event output ---------------------------------------------------
285
+ // Category tints the [tag], the verb carries the outcome (green/red/yellow),
286
+ // detail keys are dimmed. Colors turn off for non-TTY stderr, NO_COLOR, or
287
+ // TERM=dumb, so piped output stays plain text.
288
+ const colorEnabled = process.stderr.isTTY === true &&
289
+ process.env["NO_COLOR"] === undefined &&
290
+ process.env["TERM"] !== "dumb";
291
+ const paint = (code) => (text) => colorEnabled ? `\u001B[${code}m${text}\u001B[0m` : text;
292
+ const dim = paint("2");
293
+ const bold = paint("1");
294
+ const red = paint("31");
295
+ const green = paint("32");
296
+ const yellow = paint("33");
297
+ const categoryPaint = {
298
+ run: paint("1;32"),
299
+ workflow: paint("1;35"),
300
+ step: paint("1;34"),
301
+ code: paint("1;36"),
302
+ sleep: paint("1;90"),
303
+ signal: paint("1;33"),
304
+ compensation: paint("1;31"),
305
+ all: paint("1;94")
306
+ };
307
+ const eventTag = (category) => categoryPaint[category](`[${category}]`);
308
+ const paintVerb = (verb) => {
309
+ switch (verb) {
310
+ case "completed":
311
+ case "received":
312
+ return green(verb);
313
+ case "failed":
314
+ case "timeout":
315
+ return red(verb);
316
+ case "waiting":
317
+ return yellow(verb);
318
+ default:
319
+ return verb;
320
+ }
321
+ };
322
+ const printEventLine = (category, verb, subject, details = []) => {
323
+ const detailText = details.map(([key, value]) => ` ${dim(`${key}=`)}${value}`).join("");
324
+ console.error(`${eventTag(category)} ${paintVerb(verb)} ${bold(subject)}${detailText}`);
325
+ };
326
+ const errorDetail = (error) => ["error", red(stringifyEventValue(error))];
327
+ const reasonDetails = (reason) => reason === undefined ? [] : [["reason", stringifyEventValue(reason)]];
328
+ const printWorkflowEvent = (event) => {
329
+ switch (event.type) {
330
+ case "workflow.started":
331
+ printEventLine("workflow", "started", event.workflowName, [
332
+ ["input", stringifyEventValue(event.payload)]
333
+ ]);
334
+ return;
335
+ case "workflow.completed":
336
+ printEventLine("workflow", "completed", event.workflowName, [
337
+ ["result", stringifyEventValue(event.result)]
338
+ ]);
339
+ return;
340
+ case "workflow.failed":
341
+ printEventLine("workflow", "failed", event.workflowName, [errorDetail(event.error)]);
342
+ return;
343
+ case "step.started":
344
+ printEventLine("step", "started", event.activityName, [["attempt", String(event.attempt)]]);
345
+ return;
346
+ case "step.completed":
347
+ printEventLine("step", "completed", event.activityName, [
348
+ ["attempt", String(event.attempt)],
349
+ ["result", stringifyEventValue(event.result)]
350
+ ]);
351
+ return;
352
+ case "step.failed":
353
+ printEventLine("step", "failed", event.activityName, [errorDetail(event.error)]);
354
+ return;
355
+ case "compensation.started":
356
+ printEventLine("compensation", "started", event.activityName, [
357
+ ["reason", stringifyEventValue(event.reason)]
358
+ ]);
359
+ return;
360
+ case "compensation.completed":
361
+ printEventLine("compensation", "completed", event.activityName);
362
+ return;
363
+ case "compensation.failed":
364
+ printEventLine("compensation", "failed", event.activityName, [errorDetail(event.error)]);
365
+ return;
366
+ case "sleep.started":
367
+ printEventLine("sleep", "started", event.activityName, [
368
+ ["duration", stringifyEventValue(event.duration)]
369
+ ]);
370
+ return;
371
+ case "sleep.completed":
372
+ printEventLine("sleep", "completed", event.activityName);
373
+ return;
374
+ case "signal.waiting":
375
+ printEventLine("signal", "waiting", event.activityName);
376
+ return;
377
+ case "signal.received":
378
+ printEventLine("signal", "received", event.activityName, [
379
+ ["payload", stringifyEventValue(event.payload)]
380
+ ]);
381
+ return;
382
+ case "signal.timeout":
383
+ printEventLine("signal", "timeout", event.activityName, [
384
+ ["timeout", stringifyEventValue(event.timeout)]
385
+ ]);
386
+ return;
387
+ case "code.started":
388
+ printEventLine("code", "started", event.activityName, reasonDetails(event.reason));
389
+ return;
390
+ case "code.completed":
391
+ printEventLine("code", "completed", event.activityName, [
392
+ ...reasonDetails(event.reason),
393
+ ["result", stringifyEventValue(event.result)]
394
+ ]);
395
+ return;
396
+ case "code.failed":
397
+ printEventLine("code", "failed", event.activityName, [
398
+ ...reasonDetails(event.reason),
399
+ errorDetail(event.error)
400
+ ]);
401
+ return;
402
+ case "all.started":
403
+ printEventLine("all", "started", event.activityName, [["branches", String(event.branches)]]);
404
+ return;
405
+ case "all.completed":
406
+ printEventLine("all", "completed", event.activityName, [["branches", String(event.branches)]]);
407
+ return;
408
+ case "all.failed":
409
+ printEventLine("all", "failed", event.activityName, [
410
+ ["branches", String(event.branches)],
411
+ errorDetail(event.error)
412
+ ]);
413
+ return;
414
+ }
415
+ };
416
+ const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
417
+ const waitForSignalSuspension = async (client, executionId) => {
418
+ while (true) {
419
+ const status = await client.status(executionId);
420
+ if (status === "suspended") {
421
+ const pendingSignals = await client.pendingSignals(executionId);
422
+ if (pendingSignals.length > 0) {
423
+ return pendingSignals;
424
+ }
425
+ }
426
+ await sleep(100);
427
+ }
428
+ };
429
+ const awaitWorkflowOutcome = async (client, executionId) => Promise.race([
430
+ client.result(executionId).then((result) => ({ type: "terminal", result })),
431
+ waitForSignalSuspension(client, executionId).then((pendingSignals) => ({
432
+ type: "signal-suspended",
433
+ pendingSignals
434
+ }))
435
+ ]);
436
+ const syncRunEvents = async (repository, client, runId) => {
437
+ const existingCount = (await repository.listRunEvents(runId)).length;
438
+ const records = (await client.history(runId)).filter((record) => record.sequence > existingCount);
439
+ for (const record of records) {
440
+ await repository.appendRunEvent({
441
+ runId,
442
+ type: record.event.type,
443
+ event: record.event
444
+ });
445
+ if (isPrintableWorkflowEvent(record.event)) {
446
+ printWorkflowEvent(record.event);
447
+ }
448
+ }
449
+ };
450
+ const awaitSyncAndPersistRun = async (options) => {
451
+ const outcome = await awaitWorkflowOutcome(options.client, options.runId);
452
+ await syncRunEvents(options.repository, options.client, options.runId);
453
+ if (outcome.type === "signal-suspended") {
454
+ printPendingSignalHint(options.runId, outcome.pendingSignals);
455
+ return;
456
+ }
457
+ if (outcome.result.type === "completed") {
458
+ await options.repository.completeRun({ runId: options.runId, result: outcome.result.value });
459
+ printRunResult(outcome.result.value);
460
+ return;
461
+ }
462
+ await options.repository.failRun({ runId: options.runId, error: outcome.result.error });
463
+ throw outcome.result.error;
464
+ };
465
+ const engineDatabasePath = (rootDir) => path.join(rootDir, ".wf", "engine.sqlite");
466
+ const createEngineBackedClient = (rootDir) => {
467
+ const runtime = createWorkflowRuntime({
468
+ backend: "sqlite",
469
+ databasePath: engineDatabasePath(rootDir)
470
+ });
471
+ const client = createWorkflowClient(runtime);
472
+ return { runtime, client };
473
+ };
474
+ const main = async () => {
475
+ const [command, ...args] = process.argv.slice(2);
476
+ const rootDir = process.cwd();
477
+ const repository = createSqliteWorkflowRepository({ rootDir });
478
+ switch (command) {
479
+ case "create": {
480
+ const [id, ...createArgs] = args;
481
+ const options = await parseCreateWorkflowOptionsWithSource(id, createArgs);
482
+ const existingWorkflow = await repository.get(options.id);
483
+ if (existingWorkflow !== undefined && !options.force) {
484
+ throw new Error(`Workflow id already exists: ${options.id}. Use --force to update it.`);
485
+ }
486
+ // Resolve the actual workflow export from the source instead of
487
+ // assuming the id-derived name — imported files usually export a
488
+ // differently named workflow. --name still pins the export explicitly
489
+ // (needed when a file exports several workflows). This also validates
490
+ // the source at create time instead of on first run.
491
+ const loaded = await loadWorkflowArtifact({
492
+ id: options.id,
493
+ name: options.name,
494
+ version: options.version,
495
+ source: options.source,
496
+ ...(options.nameProvided ? { exportName: options.name } : {})
497
+ });
498
+ const workflow = {
499
+ id: options.id,
500
+ name: options.nameProvided ? options.name : loaded.workflow.name,
501
+ version: options.version,
502
+ source: options.source,
503
+ exportName: loaded.exportName,
504
+ createdAt: new Date().toISOString()
505
+ };
506
+ if (existingWorkflow !== undefined) {
507
+ // The catalog is keyed by (name, version); replacing an id whose
508
+ // detected name changed must not leave the old row behind.
509
+ await repository.deleteWorkflow(options.id);
510
+ }
511
+ await repository.upsertWorkflow(workflow);
512
+ printCreatedWorkflow(workflow);
513
+ return;
514
+ }
515
+ case "list": {
516
+ printWorkflows(await repository.list());
517
+ return;
518
+ }
519
+ case "runs": {
520
+ printRuns(await repository.listRuns());
521
+ return;
522
+ }
523
+ case "history":
524
+ case "events": {
525
+ const [runId] = args;
526
+ if (runId === undefined) {
527
+ throw new Error("wf history requires an execution id");
528
+ }
529
+ printRunEvents(await repository.listRunEvents(runId));
530
+ return;
531
+ }
532
+ case "run": {
533
+ const [id, rawInput] = args;
534
+ if (id === undefined) {
535
+ throw new Error("wf run requires a workflow id");
536
+ }
537
+ const artifact = await repository.get(id);
538
+ if (artifact === undefined) {
539
+ throw new Error(`Unknown workflow id: ${id}`);
540
+ }
541
+ const loaded = await loadWorkflowArtifact(artifact);
542
+ const input = parseJsonInput(rawInput);
543
+ const { client } = createEngineBackedClient(rootDir);
544
+ const handle = await client.start(loaded.workflow, input);
545
+ console.error(`${eventTag("run")} id ${bold(handle.executionId)}`);
546
+ await repository.startRun({ id: handle.executionId, workflow: artifact, input });
547
+ await awaitSyncAndPersistRun({ repository, client, runId: handle.executionId });
548
+ return;
549
+ }
550
+ case "signal": {
551
+ const options = parseSignalCommandOptions(args);
552
+ const run = await repository.getRun(options.runId);
553
+ if (run === undefined) {
554
+ throw new Error(`Unknown workflow run: ${options.runId}`);
555
+ }
556
+ const artifact = await repository.get(run.workflowId);
557
+ if (artifact === undefined) {
558
+ throw new Error(`Workflow artifact was deleted for run ${options.runId}: ${run.workflowId}`);
559
+ }
560
+ const loaded = await loadWorkflowArtifact(artifact);
561
+ const { runtime, client } = createEngineBackedClient(rootDir);
562
+ runtime.register([loaded.workflow]);
563
+ try {
564
+ await client.signal(options.runId, options.signalName, options.payload, options.actor === undefined ? {} : { actor: options.actor });
565
+ }
566
+ catch (error) {
567
+ const pendingSignals = await client.pendingSignals(options.runId).catch(() => []);
568
+ if (pendingSignals.length === 0) {
569
+ throw error;
570
+ }
571
+ const lines = pendingSignals.map((signal) => describePendingSignal(options.runId, signal));
572
+ throw new Error(`${formatError(error)}\n${lines.join("\n")}`);
573
+ }
574
+ await awaitSyncAndPersistRun({ repository, client, runId: options.runId });
575
+ return;
576
+ }
577
+ case "-h":
578
+ case "--help":
579
+ case "help":
580
+ case undefined:
581
+ console.log(help);
582
+ return;
583
+ default:
584
+ throw new Error(`Unknown command: ${command}\n\n${help}`);
585
+ }
586
+ };
587
+ main().then(() => process.exit(0), (error) => {
588
+ console.error(formatError(error));
589
+ process.exit(1);
590
+ });
591
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}