@runcofactor/cli 0.28.0 → 0.29.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 (115) hide show
  1. package/dist/{account-6FPITX2M.js → account-QWQP6YCY.js} +3 -3
  2. package/dist/{alert-PWERXHCP.js → alert-65FH7P74.js} +4 -4
  3. package/dist/{api-catalog-HCSSHOFY.js → api-catalog-WM6R37CA.js} +3 -3
  4. package/dist/{attachment-A7JAZWWH.js → attachment-FTQTZUTA.js} +3 -3
  5. package/dist/{augmentor-MIEBKJUK.js → augmentor-IQMT6NFX.js} +3 -3
  6. package/dist/{chunk-3VHY375S.js → chunk-3VIBXXNX.js} +2 -2
  7. package/dist/{chunk-IFZ72FZV.js → chunk-3X3TSH2B.js} +2 -2
  8. package/dist/{chunk-ZP3RP4IK.js → chunk-6AJLNMHB.js} +2 -2
  9. package/dist/{chunk-44NI5IDC.js → chunk-6QGUAITE.js} +15 -1
  10. package/dist/{chunk-44NI5IDC.js.map → chunk-6QGUAITE.js.map} +1 -1
  11. package/dist/{chunk-5N4OZPFQ.js → chunk-DECTGV4O.js} +2 -2
  12. package/dist/{chunk-6BAMC77N.js → chunk-E22PSTUP.js} +2 -2
  13. package/dist/{chunk-4ZNTGBJR.js → chunk-EHKHZ5UR.js} +23 -23
  14. package/dist/chunk-EHKHZ5UR.js.map +1 -0
  15. package/dist/{chunk-DHL4O7MG.js → chunk-MBMFYGKN.js} +2 -2
  16. package/dist/{chunk-YBX5BIKL.js → chunk-PK5UICGR.js} +2 -2
  17. package/dist/{chunk-4SV3CGNM.js → chunk-SFRUUIIC.js} +2 -2
  18. package/dist/{chunk-LSL2M7O6.js → chunk-WTMSRIDK.js} +2 -2
  19. package/dist/{credential-KSLGCJU7.js → credential-CKO4ZBMU.js} +3 -3
  20. package/dist/{credential-template-WECUNR4X.js → credential-template-XOZ2FJ6Z.js} +3 -3
  21. package/dist/{dist-5PKCAL5N.js → dist-YPK2RMUK.js} +3 -3
  22. package/dist/{docs-PRUI4LAD.js → docs-WZCQ6GP7.js} +3 -3
  23. package/dist/{environment-ATT4UQCY.js → environment-KO3JUX3V.js} +3 -3
  24. package/dist/{feature-flag-MWIHVJER.js → feature-flag-4YPPF27F.js} +63 -5
  25. package/dist/feature-flag-4YPPF27F.js.map +1 -0
  26. package/dist/index.js +38 -38
  27. package/dist/{init-QBMKWGHZ.js → init-RXWDJV5I.js} +3 -3
  28. package/dist/{install-BHYIXK6G.js → install-Z7EGAEEW.js} +3 -3
  29. package/dist/{issues-JO3OVOV7.js → issues-XOU54YKP.js} +3 -3
  30. package/dist/{knobs-4LLJ4LCU.js → knobs-7MB2O5SW.js} +3 -3
  31. package/dist/{list-JVJSIK52.js → list-5CJZY5BC.js} +3 -3
  32. package/dist/{local-VCZGHODB.js → local-XLBE4JIT.js} +5 -5
  33. package/dist/{login-UBNUPK2H.js → login-6GDATX4X.js} +3 -3
  34. package/dist/{mcp-2BBNDVZI.js → mcp-52UNMEF3.js} +4 -4
  35. package/dist/{metrics-4YOSDGIG.js → metrics-4Z5IJZ7U.js} +3 -3
  36. package/dist/{product-T2PVBVZ4.js → product-N2R3MWZS.js} +3 -3
  37. package/dist/{prompts-MI4QK2ZM.js → prompts-X6FNI6NZ.js} +3 -3
  38. package/dist/{property-EKASZCO7.js → property-VUKL5IFR.js} +3 -3
  39. package/dist/{record-Z4NY75FM.js → record-AVGKVJK7.js} +4 -4
  40. package/dist/{release-Z7WKFMBS.js → release-4QOZ4IP6.js} +3 -3
  41. package/dist/{sandbox-YOODBA5Q.js → sandbox-4ZR6XRIQ.js} +14 -3
  42. package/dist/sandbox-4ZR6XRIQ.js.map +1 -0
  43. package/dist/{scenarios-ABYCUJ4O.js → scenarios-UZBDO3XR.js} +3 -3
  44. package/dist/{schedule-ZRHOCT5Q.js → schedule-XCSZ6NLT.js} +4 -4
  45. package/dist/{session-T7BV73AC.js → session-QXHDS5GP.js} +5 -5
  46. package/dist/{skill-VLCWQJHG.js → skill-FXNE77RE.js} +166 -159
  47. package/dist/skill-FXNE77RE.js.map +1 -0
  48. package/dist/{spec-QPWXRPAG.js → spec-TOUOP4TC.js} +3 -3
  49. package/dist/{src-BH5O6Z3E.js → src-YZGG5ZSL.js} +3 -3
  50. package/dist/{start-5BADZ65B.js → start-JDLIIBPC.js} +3 -3
  51. package/dist/{tag-CIR6U5LL.js → tag-LSS3IOUA.js} +4 -4
  52. package/dist/{task-4YKONXJI.js → task-KCNDIT4A.js} +3 -3
  53. package/dist/{test-suite-PRJ2PGMN.js → test-suite-MOVN2XL5.js} +5 -5
  54. package/dist/{trace-XVB47RLY.js → trace-7OZNMAKV.js} +4 -4
  55. package/dist/{triage-L5WR65KW.js → triage-BRSUW4Z7.js} +4 -4
  56. package/dist/{utilities-LBKWREPU.js → utilities-TXQGGH37.js} +3 -3
  57. package/dist/{workflow-GCZCXPGA.js → workflow-2TVSFQXK.js} +310 -302
  58. package/dist/workflow-2TVSFQXK.js.map +1 -0
  59. package/dist/{workflow-cache-XWTLXIHE.js → workflow-cache-LRH5CAPS.js} +6 -6
  60. package/dist/{workflow-debug-XHR4552F.js → workflow-debug-IWXZXSL2.js} +5 -5
  61. package/dist/{workflow-proposals-VWLKW352.js → workflow-proposals-76D2MM6G.js} +3 -3
  62. package/package.json +1 -1
  63. package/dist/chunk-4ZNTGBJR.js.map +0 -1
  64. package/dist/feature-flag-MWIHVJER.js.map +0 -1
  65. package/dist/sandbox-YOODBA5Q.js.map +0 -1
  66. package/dist/skill-VLCWQJHG.js.map +0 -1
  67. package/dist/workflow-GCZCXPGA.js.map +0 -1
  68. /package/dist/{account-6FPITX2M.js.map → account-QWQP6YCY.js.map} +0 -0
  69. /package/dist/{alert-PWERXHCP.js.map → alert-65FH7P74.js.map} +0 -0
  70. /package/dist/{api-catalog-HCSSHOFY.js.map → api-catalog-WM6R37CA.js.map} +0 -0
  71. /package/dist/{attachment-A7JAZWWH.js.map → attachment-FTQTZUTA.js.map} +0 -0
  72. /package/dist/{augmentor-MIEBKJUK.js.map → augmentor-IQMT6NFX.js.map} +0 -0
  73. /package/dist/{chunk-3VHY375S.js.map → chunk-3VIBXXNX.js.map} +0 -0
  74. /package/dist/{chunk-IFZ72FZV.js.map → chunk-3X3TSH2B.js.map} +0 -0
  75. /package/dist/{chunk-ZP3RP4IK.js.map → chunk-6AJLNMHB.js.map} +0 -0
  76. /package/dist/{chunk-5N4OZPFQ.js.map → chunk-DECTGV4O.js.map} +0 -0
  77. /package/dist/{chunk-6BAMC77N.js.map → chunk-E22PSTUP.js.map} +0 -0
  78. /package/dist/{chunk-DHL4O7MG.js.map → chunk-MBMFYGKN.js.map} +0 -0
  79. /package/dist/{chunk-YBX5BIKL.js.map → chunk-PK5UICGR.js.map} +0 -0
  80. /package/dist/{chunk-4SV3CGNM.js.map → chunk-SFRUUIIC.js.map} +0 -0
  81. /package/dist/{chunk-LSL2M7O6.js.map → chunk-WTMSRIDK.js.map} +0 -0
  82. /package/dist/{credential-KSLGCJU7.js.map → credential-CKO4ZBMU.js.map} +0 -0
  83. /package/dist/{credential-template-WECUNR4X.js.map → credential-template-XOZ2FJ6Z.js.map} +0 -0
  84. /package/dist/{dist-5PKCAL5N.js.map → dist-YPK2RMUK.js.map} +0 -0
  85. /package/dist/{docs-PRUI4LAD.js.map → docs-WZCQ6GP7.js.map} +0 -0
  86. /package/dist/{environment-ATT4UQCY.js.map → environment-KO3JUX3V.js.map} +0 -0
  87. /package/dist/{init-QBMKWGHZ.js.map → init-RXWDJV5I.js.map} +0 -0
  88. /package/dist/{install-BHYIXK6G.js.map → install-Z7EGAEEW.js.map} +0 -0
  89. /package/dist/{issues-JO3OVOV7.js.map → issues-XOU54YKP.js.map} +0 -0
  90. /package/dist/{knobs-4LLJ4LCU.js.map → knobs-7MB2O5SW.js.map} +0 -0
  91. /package/dist/{list-JVJSIK52.js.map → list-5CJZY5BC.js.map} +0 -0
  92. /package/dist/{local-VCZGHODB.js.map → local-XLBE4JIT.js.map} +0 -0
  93. /package/dist/{login-UBNUPK2H.js.map → login-6GDATX4X.js.map} +0 -0
  94. /package/dist/{mcp-2BBNDVZI.js.map → mcp-52UNMEF3.js.map} +0 -0
  95. /package/dist/{metrics-4YOSDGIG.js.map → metrics-4Z5IJZ7U.js.map} +0 -0
  96. /package/dist/{product-T2PVBVZ4.js.map → product-N2R3MWZS.js.map} +0 -0
  97. /package/dist/{prompts-MI4QK2ZM.js.map → prompts-X6FNI6NZ.js.map} +0 -0
  98. /package/dist/{property-EKASZCO7.js.map → property-VUKL5IFR.js.map} +0 -0
  99. /package/dist/{record-Z4NY75FM.js.map → record-AVGKVJK7.js.map} +0 -0
  100. /package/dist/{release-Z7WKFMBS.js.map → release-4QOZ4IP6.js.map} +0 -0
  101. /package/dist/{scenarios-ABYCUJ4O.js.map → scenarios-UZBDO3XR.js.map} +0 -0
  102. /package/dist/{schedule-ZRHOCT5Q.js.map → schedule-XCSZ6NLT.js.map} +0 -0
  103. /package/dist/{session-T7BV73AC.js.map → session-QXHDS5GP.js.map} +0 -0
  104. /package/dist/{spec-QPWXRPAG.js.map → spec-TOUOP4TC.js.map} +0 -0
  105. /package/dist/{src-BH5O6Z3E.js.map → src-YZGG5ZSL.js.map} +0 -0
  106. /package/dist/{start-5BADZ65B.js.map → start-JDLIIBPC.js.map} +0 -0
  107. /package/dist/{tag-CIR6U5LL.js.map → tag-LSS3IOUA.js.map} +0 -0
  108. /package/dist/{task-4YKONXJI.js.map → task-KCNDIT4A.js.map} +0 -0
  109. /package/dist/{test-suite-PRJ2PGMN.js.map → test-suite-MOVN2XL5.js.map} +0 -0
  110. /package/dist/{trace-XVB47RLY.js.map → trace-7OZNMAKV.js.map} +0 -0
  111. /package/dist/{triage-L5WR65KW.js.map → triage-BRSUW4Z7.js.map} +0 -0
  112. /package/dist/{utilities-LBKWREPU.js.map → utilities-TXQGGH37.js.map} +0 -0
  113. /package/dist/{workflow-cache-XWTLXIHE.js.map → workflow-cache-LRH5CAPS.js.map} +0 -0
  114. /package/dist/{workflow-debug-XHR4552F.js.map → workflow-debug-IWXZXSL2.js.map} +0 -0
  115. /package/dist/{workflow-proposals-VWLKW352.js.map → workflow-proposals-76D2MM6G.js.map} +0 -0
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-EGTH6R6R.js";
5
5
  import {
6
6
  WORKFLOW_GUIDE_SECTIONS
7
- } from "./chunk-44NI5IDC.js";
7
+ } from "./chunk-6QGUAITE.js";
8
8
  import {
9
9
  applyWorkflowTagFlags
10
- } from "./chunk-YBX5BIKL.js";
10
+ } from "./chunk-PK5UICGR.js";
11
11
  import {
12
12
  workflowToSpec
13
- } from "./chunk-5N4OZPFQ.js";
13
+ } from "./chunk-DECTGV4O.js";
14
14
  import {
15
15
  alignSnapshotNodeIds,
16
16
  topoOrderNodes
@@ -20,7 +20,7 @@ import {
20
20
  fetchWorkflowEnvironments,
21
21
  renderWorkflowUserError,
22
22
  resolveEnvironmentByNameOrId
23
- } from "./chunk-LSL2M7O6.js";
23
+ } from "./chunk-WTMSRIDK.js";
24
24
  import {
25
25
  apiFetch,
26
26
  exitOnFailure,
@@ -37,15 +37,15 @@ import {
37
37
  NODE_TYPE_LABEL,
38
38
  USER_SETTABLE_WORKFLOW_STATUSES,
39
39
  normalizeNodeType
40
- } from "./chunk-4ZNTGBJR.js";
40
+ } from "./chunk-EHKHZ5UR.js";
41
41
  import {
42
42
  specExtension
43
43
  } from "./chunk-ZSOAFMES.js";
44
44
  import "./chunk-ICKB3EOT.js";
45
45
 
46
46
  // src/workflow.ts
47
- import fs5 from "fs/promises";
48
- import process9 from "process";
47
+ import fs6 from "fs/promises";
48
+ import process10 from "process";
49
49
 
50
50
  // src/workflow-create.ts
51
51
  import fs from "fs/promises";
@@ -348,9 +348,198 @@ ${err instanceof Error ? err.message : String(err)}`);
348
348
  );
349
349
  }
350
350
 
351
- // src/workflow-run.ts
351
+ // src/workflow-get.ts
352
+ import fs2 from "fs/promises";
352
353
  import process3 from "process";
353
354
 
355
+ // src/workflow-format.ts
356
+ function truncate(text, max) {
357
+ if (text.length <= max) return text;
358
+ return text.slice(0, max - 1) + "\u2026";
359
+ }
360
+ function getNodeTitle(node) {
361
+ const c = node.configJson ?? {};
362
+ switch (node.nodeType) {
363
+ case "login":
364
+ return c.credentialName || NODE_TYPE_LABEL.login;
365
+ case "navigate":
366
+ return c.pageTitle || truncate(c.pageUrl || "Navigate", 40);
367
+ case "action":
368
+ return c.customActionTitle || truncate(c.actionDescription || "Action", 50);
369
+ case "assertion":
370
+ return truncate(c.condition || "Assertion", 50);
371
+ case "setup":
372
+ return c.setupFlowName || "Setup";
373
+ case "seed":
374
+ return c.seedWorkflowName || "Seed";
375
+ case "wait":
376
+ return "Wait";
377
+ case "condition":
378
+ return truncate(c.conditionDescription || "Condition", 50);
379
+ case "end":
380
+ return "End";
381
+ case "api_sequence":
382
+ return "API Sequence";
383
+ default:
384
+ return node.nodeType;
385
+ }
386
+ }
387
+ function getCleanConfig(node) {
388
+ const c = node.configJson ?? {};
389
+ switch (node.nodeType) {
390
+ case "login":
391
+ return pick(c, [
392
+ "credentialName",
393
+ "performLogin",
394
+ "credentialSource",
395
+ "credentialTemplateId",
396
+ "credentialTemplateName",
397
+ "credentialId",
398
+ "seedCredentialRef"
399
+ ]);
400
+ case "navigate":
401
+ return {
402
+ ...pick(c, ["pageUrl", "pageTitle"]),
403
+ ...c.openInNewTab ? { openInNewTab: true } : {}
404
+ };
405
+ case "action":
406
+ return pick(c, [
407
+ "actionDescription",
408
+ "playbookSteps",
409
+ "inputValues",
410
+ "declaredOutputs",
411
+ "capturedVariableKeys",
412
+ "dataRequirements",
413
+ "alwaysUseAgent"
414
+ ]);
415
+ case "assertion":
416
+ return pick(c, ["condition", "expectedOutcome", "strict", "alwaysUseAgent"]);
417
+ case "setup":
418
+ return pick(c, ["setupFlowId", "setupFlowName"]);
419
+ case "seed":
420
+ return pick(c, ["seedWorkflowId", "seedWorkflowName", "snapshotVersion"]);
421
+ case "end":
422
+ return pick(c, ["outcome"]);
423
+ case "wait":
424
+ case "condition":
425
+ case "api_sequence":
426
+ return c;
427
+ default:
428
+ return c;
429
+ }
430
+ }
431
+ function pick(obj, keys) {
432
+ const result = {};
433
+ for (const key of keys) {
434
+ if (obj[key] !== void 0 && obj[key] !== null) {
435
+ result[key] = obj[key];
436
+ }
437
+ }
438
+ return result;
439
+ }
440
+ function formatWorkflowMarkdown(workflow) {
441
+ const seedOutputs = workflow.seedOutputsJson ?? workflow.seedOutputs;
442
+ return workflowToSpec({ ...workflow, seedOutputs });
443
+ }
444
+ function formatWorkflowJson(workflow) {
445
+ const sorted = topoOrderNodes(workflow.nodes, workflow.edges ?? []);
446
+ const seedOutputs = workflow.seedOutputsJson;
447
+ const env = workflow;
448
+ return {
449
+ workflow: {
450
+ id: workflow.id,
451
+ name: workflow.name,
452
+ description: workflow.description,
453
+ status: workflow.status,
454
+ flowType: workflow.flowType,
455
+ ...seedOutputs && seedOutputs.length > 0 ? { seedOutputs } : {},
456
+ ...env.defaultEnvironmentId !== void 0 ? { defaultEnvironmentId: env.defaultEnvironmentId } : {},
457
+ ...env.eligibleEnvironmentIds ? { eligibleEnvironmentIds: env.eligibleEnvironmentIds } : {},
458
+ ...env.passByEnvironment && env.passByEnvironment.length > 0 ? {
459
+ passByEnvironment: env.passByEnvironment.map((p) => ({
460
+ environment: `${p.environmentName} (${p.environmentType})`,
461
+ everPassed: p.everPassed,
462
+ passed: p.passed,
463
+ total: p.total,
464
+ health: p.health
465
+ }))
466
+ } : {}
467
+ },
468
+ steps: sorted.map((node, i) => ({
469
+ index: i + 1,
470
+ nodeId: node.id,
471
+ nodeType: node.nodeType,
472
+ title: getNodeTitle(node),
473
+ config: getCleanConfig(node)
474
+ }))
475
+ };
476
+ }
477
+
478
+ // src/workflow-get.ts
479
+ function shouldPrintWorkflowUrlTrailer(argv) {
480
+ const jsonOutput = hasFlag(argv, "--json") || getArgValue(argv, "--format") === "json";
481
+ const markdownOutput = hasFlag(argv, "--markdown") || getArgValue(argv, "--format") === "markdown" || getArgValue(argv, "--format") === "spec";
482
+ return !jsonOutput && !markdownOutput;
483
+ }
484
+ async function handleWorkflowGet(argv, apiUrl, token) {
485
+ const workflowId = argv[0];
486
+ if (!workflowId || workflowId.startsWith("--")) {
487
+ console.error("Error: Missing workflow ID.");
488
+ console.error("Usage: canary workflow get <workflowId>");
489
+ process3.exit(1);
490
+ }
491
+ const markdownOutput = hasFlag(argv, "--markdown") || getArgValue(argv, "--format") === "markdown" || getArgValue(argv, "--format") === "spec";
492
+ const outputFile = getArgValue(argv, "--output");
493
+ const apiRes = await apiFetch(`${apiUrl}/workflows/${workflowId}`, {
494
+ headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
495
+ token
496
+ });
497
+ if (!apiRes.ok) exitOnFailure(apiRes.failure);
498
+ const result = await apiRes.response.json();
499
+ if (result.error === "WORKFLOW_NOT_FOUND") {
500
+ console.error("Error: Workflow not found.");
501
+ process3.exit(1);
502
+ }
503
+ if (result.error === "WORKFLOW_WRONG_ORG") {
504
+ console.error(
505
+ `Error: Workflow belongs to another org: ${result.targetOrgName ?? result.targetOrgId}`
506
+ );
507
+ process3.exit(1);
508
+ }
509
+ if (!result.workflow) {
510
+ console.error(`Error: ${result.error ?? "Unexpected response"}`);
511
+ process3.exit(1);
512
+ }
513
+ const workflow = result.workflow;
514
+ let output;
515
+ if (markdownOutput) {
516
+ output = formatWorkflowMarkdown(workflow);
517
+ } else {
518
+ output = JSON.stringify(formatWorkflowJson(workflow), null, 2);
519
+ }
520
+ if (outputFile) {
521
+ try {
522
+ await fs2.writeFile(outputFile, output, "utf-8");
523
+ console.log(`Written to ${outputFile}`);
524
+ } catch (err) {
525
+ console.error(
526
+ `Error writing to ${outputFile}: ${err instanceof Error ? err.message : String(err)}`
527
+ );
528
+ process3.exit(1);
529
+ }
530
+ return;
531
+ }
532
+ console.log(output);
533
+ if (shouldPrintWorkflowUrlTrailer(argv)) {
534
+ const appUrl = resolveAppUrl(apiUrl);
535
+ console.log(`
536
+ URL: ${appUrl}/flows/${workflowId}`);
537
+ }
538
+ }
539
+
540
+ // src/workflow-run.ts
541
+ import process4 from "process";
542
+
354
543
  // src/cli-format.ts
355
544
  var STATUS_ICONS = {
356
545
  completed: "\u2705",
@@ -428,7 +617,7 @@ async function handleWorkflowRun(argv, apiUrl, token) {
428
617
  console.error(
429
618
  "Usage: canary workflow run <workflowId> [--environment <name|id>] [--stream] [--json] [--validation | --no-validation]"
430
619
  );
431
- process3.exit(1);
620
+ process4.exit(1);
432
621
  }
433
622
  const jsonOutput = hasFlag(argv, "--json");
434
623
  const stream = hasFlag(argv, "--stream");
@@ -461,7 +650,7 @@ async function handleWorkflowRun(argv, apiUrl, token) {
461
650
  const rendered = renderWorkflowUserError(result);
462
651
  console.error(rendered ?? `Error: ${result.error ?? "Unknown error"}`);
463
652
  }
464
- process3.exit(1);
653
+ process4.exit(1);
465
654
  }
466
655
  const { runId } = result;
467
656
  if (jsonOutput && !stream) {
@@ -499,7 +688,7 @@ Check status: canary workflow runs get ${workflowId} ${runId}`);
499
688
  );
500
689
  if (!status.ok) {
501
690
  console.error(`Error polling status: ${status.error ?? "Unknown error"}`);
502
- process3.exit(1);
691
+ process4.exit(1);
503
692
  }
504
693
  const run = status.data.run;
505
694
  if (run.status !== lastStatus) {
@@ -515,7 +704,7 @@ Error: ${run.errorMessage}`);
515
704
  Run finished: ${run.status}`);
516
705
  console.log(`Details: canary workflow runs get ${workflowId} ${runId}`);
517
706
  if (run.status === "failed" || run.status === "timeout" || run.status === "canceled") {
518
- process3.exit(1);
707
+ process4.exit(1);
519
708
  }
520
709
  return;
521
710
  }
@@ -523,7 +712,7 @@ Run finished: ${run.status}`);
523
712
  }
524
713
 
525
714
  // src/workflow-runs.ts
526
- import process4 from "process";
715
+ import process5 from "process";
527
716
  async function fetchBrowserRuns(apiUrl, token, workflowId, page, pageSize) {
528
717
  const params = new URLSearchParams({ page, pageSize });
529
718
  const result = await apiRequest(
@@ -574,7 +763,7 @@ async function handleRunsList(argv, apiUrl, token) {
574
763
  const workflowId = argv.find((a) => !a.startsWith("-"));
575
764
  if (!workflowId) {
576
765
  console.error("Error: Missing workflow ID. Usage: canary workflow runs list <workflowId>");
577
- process4.exit(1);
766
+ process5.exit(1);
578
767
  }
579
768
  const jsonOutput = hasFlag(argv, "--json");
580
769
  const page = getArgValue(argv, "--page") ?? "1";
@@ -583,7 +772,7 @@ async function handleRunsList(argv, apiUrl, token) {
583
772
  const sideArg = (explicitSide ?? "all").toLowerCase();
584
773
  if (!["all", "api", "browser"].includes(sideArg)) {
585
774
  console.error(`Error: --side must be one of: all, api, browser (got "${sideArg}")`);
586
- process4.exit(1);
775
+ process5.exit(1);
587
776
  }
588
777
  const annotated = [];
589
778
  let browserPagination = null;
@@ -592,7 +781,7 @@ async function handleRunsList(argv, apiUrl, token) {
592
781
  const browser = await fetchBrowserRuns(apiUrl, token, workflowId, page, pageSize);
593
782
  if ("error" in browser) {
594
783
  console.error(`Error: ${browser.error}`);
595
- process4.exit(1);
784
+ process5.exit(1);
596
785
  }
597
786
  browserPagination = browser.pagination;
598
787
  for (const r of browser.runs) annotated.push({ ...r, side: "browser" });
@@ -607,7 +796,7 @@ async function handleRunsList(argv, apiUrl, token) {
607
796
  }
608
797
  } else {
609
798
  console.error(`Error: ${api.error}`);
610
- process4.exit(1);
799
+ process5.exit(1);
611
800
  }
612
801
  } else {
613
802
  apiPagination = api.pagination;
@@ -674,7 +863,7 @@ async function handleRunsGet(argv, apiUrl, token) {
674
863
  console.error(
675
864
  "Error: Missing arguments. Usage: canary workflow runs get <workflowId> <runId>"
676
865
  );
677
- process4.exit(1);
866
+ process5.exit(1);
678
867
  }
679
868
  const [workflowId, runId] = positional;
680
869
  const jsonOutput = hasFlag(argv, "--json");
@@ -686,7 +875,7 @@ async function handleRunsGet(argv, apiUrl, token) {
686
875
  );
687
876
  if (!result.ok) {
688
877
  console.error(`Error: ${result.error ?? "Unknown error"}`);
689
- process4.exit(1);
878
+ process5.exit(1);
690
879
  }
691
880
  if (jsonOutput) {
692
881
  console.log(JSON.stringify(result, null, 2));
@@ -728,7 +917,7 @@ async function handleRunsDiagnostics(argv, apiUrl, token) {
728
917
  console.error(
729
918
  "Error: Missing arguments. Usage: canary workflow runs diagnostics <workflowId> <runId>"
730
919
  );
731
- process4.exit(1);
920
+ process5.exit(1);
732
921
  }
733
922
  const [workflowId, runId] = positional;
734
923
  const jsonOutput = hasFlag(argv, "--json");
@@ -740,7 +929,7 @@ async function handleRunsDiagnostics(argv, apiUrl, token) {
740
929
  );
741
930
  if (!result.ok) {
742
931
  console.error(`Error: ${result.error ?? "Unknown error"}`);
743
- process4.exit(1);
932
+ process5.exit(1);
744
933
  }
745
934
  if (jsonOutput && result.data) {
746
935
  console.log(JSON.stringify(result, null, 2));
@@ -874,14 +1063,14 @@ async function runWorkflowRuns(argv, apiUrl, token) {
874
1063
  default:
875
1064
  console.error(`Unknown sub-command: ${subCommand}`);
876
1065
  printRunsHelp();
877
- process4.exit(1);
1066
+ process5.exit(1);
878
1067
  }
879
1068
  }
880
1069
 
881
1070
  // src/workflow-sync.ts
882
1071
  import crypto from "crypto";
883
- import fs2 from "fs/promises";
884
- import process5 from "process";
1072
+ import fs3 from "fs/promises";
1073
+ import process6 from "process";
885
1074
  function normalizeNodesAndEdges(rawNodes, rawEdges) {
886
1075
  const nodes = rawNodes.map((node, i) => ({
887
1076
  ...node,
@@ -913,28 +1102,28 @@ async function readSyncInput(argv) {
913
1102
  let raw;
914
1103
  if (filePath) {
915
1104
  try {
916
- raw = await fs2.readFile(filePath, "utf-8");
1105
+ raw = await fs3.readFile(filePath, "utf-8");
917
1106
  } catch (err) {
918
1107
  console.error(`Error reading file: ${err instanceof Error ? err.message : String(err)}`);
919
- process5.exit(1);
1108
+ process6.exit(1);
920
1109
  }
921
1110
  } else if (fromStdin) {
922
1111
  try {
923
1112
  raw = await readFromStdin2();
924
1113
  } catch (err) {
925
1114
  console.error(err instanceof Error ? err.message : String(err));
926
- process5.exit(1);
1115
+ process6.exit(1);
927
1116
  }
928
1117
  } else {
929
1118
  console.error("Error: Must provide --from-file <path> or --from-stdin");
930
- process5.exit(1);
1119
+ process6.exit(1);
931
1120
  }
932
1121
  let parsed;
933
1122
  try {
934
1123
  parsed = JSON.parse(raw);
935
1124
  } catch {
936
1125
  console.error("Error: Invalid JSON input");
937
- process5.exit(1);
1126
+ process6.exit(1);
938
1127
  }
939
1128
  const obj = parsed;
940
1129
  const normalizeNodes = (raw2) => {
@@ -968,7 +1157,7 @@ async function readSyncInput(argv) {
968
1157
  console.error(' { "workflow": { "nodes": [...], "edges": [...] } }');
969
1158
  console.error("");
970
1159
  console.error("Edges, IDs, positions, and ordering are auto-generated when omitted.");
971
- process5.exit(1);
1160
+ process6.exit(1);
972
1161
  }
973
1162
  async function alignWithCurrentWorkflow(apiUrl, token, workflowId, nodes, edges) {
974
1163
  let currentNodes = [];
@@ -1023,7 +1212,7 @@ async function handleWorkflowSync(argv, apiUrl, token) {
1023
1212
  if (!workflowId) {
1024
1213
  console.error("Error: Missing workflow ID.");
1025
1214
  console.error("Usage: canary workflow sync <workflowId> --from-file <path>");
1026
- process5.exit(1);
1215
+ process6.exit(1);
1027
1216
  }
1028
1217
  const jsonOutput = hasFlag(argv, "--json");
1029
1218
  const noSnapshot = hasFlag(argv, "--no-snapshot");
@@ -1053,7 +1242,7 @@ async function handleWorkflowSync(argv, apiUrl, token) {
1053
1242
  } else {
1054
1243
  console.error(`Error: ${result2.error ?? "Unknown error"}`);
1055
1244
  }
1056
- process5.exit(1);
1245
+ process6.exit(1);
1057
1246
  }
1058
1247
  if (jsonOutput) {
1059
1248
  console.log(JSON.stringify(result2, null, 2));
@@ -1078,7 +1267,7 @@ async function handleWorkflowSync(argv, apiUrl, token) {
1078
1267
  } else {
1079
1268
  console.error(`Error: ${result.error ?? "Unknown error"}`);
1080
1269
  }
1081
- process5.exit(1);
1270
+ process6.exit(1);
1082
1271
  }
1083
1272
  if (jsonOutput) {
1084
1273
  console.log(JSON.stringify(result, null, 2));
@@ -1091,7 +1280,7 @@ async function handleWorkflowSync(argv, apiUrl, token) {
1091
1280
  }
1092
1281
 
1093
1282
  // src/workflow-api-sequence.ts
1094
- import process6 from "process";
1283
+ import process7 from "process";
1095
1284
  import { createParser } from "eventsource-parser";
1096
1285
  async function handleWorkflowGenerateApiSequence(argv, apiUrl, token) {
1097
1286
  const workflowId = argv.find((a) => !a.startsWith("-"));
@@ -1106,7 +1295,7 @@ async function handleWorkflowGenerateApiSequence(argv, apiUrl, token) {
1106
1295
  console.error("Usage:");
1107
1296
  console.error(' canary workflow generate-api-sequence <workflowId> [--guidance "text"]');
1108
1297
  console.error(' canary workflow generate-api-sequence --prompt "Create user" [--property <id>]');
1109
- process6.exit(1);
1298
+ process7.exit(1);
1110
1299
  }
1111
1300
  let endpoint;
1112
1301
  let body;
@@ -1138,22 +1327,22 @@ async function handleWorkflowGenerateApiSequence(argv, apiUrl, token) {
1138
1327
  });
1139
1328
  } catch (err) {
1140
1329
  console.error(`Failed to connect to API: ${err}`);
1141
- process6.exit(1);
1330
+ process7.exit(1);
1142
1331
  }
1143
1332
  if (triggerRes.status === 403) {
1144
1333
  const data = await triggerRes.json().catch(() => ({}));
1145
1334
  console.error(`Error: ${data.error ?? "This feature is not enabled for your organization."}`);
1146
- process6.exit(1);
1335
+ process7.exit(1);
1147
1336
  }
1148
1337
  if (!triggerRes.ok) {
1149
1338
  const data = await triggerRes.json().catch(() => ({}));
1150
1339
  console.error(`Error: ${data.error ?? `${triggerRes.status} ${triggerRes.statusText}`}`);
1151
- process6.exit(1);
1340
+ process7.exit(1);
1152
1341
  }
1153
1342
  const triggerData = await triggerRes.json();
1154
1343
  if (!triggerData.ok || !triggerData.generationId) {
1155
1344
  console.error(`Error: ${triggerData.error ?? "Failed to start generation"}`);
1156
- process6.exit(1);
1345
+ process7.exit(1);
1157
1346
  }
1158
1347
  const { generationId } = triggerData;
1159
1348
  const streamUrl = `${apiUrl}/api-sequence-agent/stream?generationId=${generationId}`;
@@ -1167,11 +1356,11 @@ async function handleWorkflowGenerateApiSequence(argv, apiUrl, token) {
1167
1356
  });
1168
1357
  } catch (err) {
1169
1358
  console.error(`Failed to connect to event stream: ${err}`);
1170
- process6.exit(1);
1359
+ process7.exit(1);
1171
1360
  }
1172
1361
  if (!streamRes.ok || !streamRes.body) {
1173
1362
  console.error(`Failed to connect to event stream: ${streamRes.status}`);
1174
- process6.exit(1);
1363
+ process7.exit(1);
1175
1364
  }
1176
1365
  let resultConfig = null;
1177
1366
  let resultSummary = "";
@@ -1196,7 +1385,7 @@ async function handleWorkflowGenerateApiSequence(argv, apiUrl, token) {
1196
1385
  }
1197
1386
  break;
1198
1387
  case "text":
1199
- if (verbose) process6.stderr.write(data.delta);
1388
+ if (verbose) process7.stderr.write(data.delta);
1200
1389
  break;
1201
1390
  case "complete":
1202
1391
  resultConfig = data.config;
@@ -1226,11 +1415,11 @@ Error: ${data.message}`);
1226
1415
  reader.releaseLock();
1227
1416
  }
1228
1417
  if (exitCode !== 0) {
1229
- process6.exit(exitCode);
1418
+ process7.exit(exitCode);
1230
1419
  }
1231
1420
  if (!resultConfig) {
1232
1421
  console.error("Generation completed but no config was returned.");
1233
- process6.exit(1);
1422
+ process7.exit(1);
1234
1423
  }
1235
1424
  if (jsonOutput) {
1236
1425
  console.log(JSON.stringify({ ok: true, config: resultConfig, summary: resultSummary }, null, 2));
@@ -1245,8 +1434,8 @@ Error: ${data.message}`);
1245
1434
  }
1246
1435
 
1247
1436
  // src/workflow-api-sequence-cmds.ts
1248
- import fs3 from "fs/promises";
1249
- import process7 from "process";
1437
+ import fs4 from "fs/promises";
1438
+ import process8 from "process";
1250
1439
  function getArg(argv, key) {
1251
1440
  const prefix = `${key}=`;
1252
1441
  const eq = argv.find((a) => a.startsWith(prefix));
@@ -1256,7 +1445,7 @@ function getArg(argv, key) {
1256
1445
  function wantsJson(argv) {
1257
1446
  if (hasFlag(argv, "--json")) return true;
1258
1447
  if (hasFlag(argv, "--text")) return false;
1259
- return !process7.stdout.isTTY;
1448
+ return !process8.stdout.isTTY;
1260
1449
  }
1261
1450
  function emit(argv, textFallback, json) {
1262
1451
  if (wantsJson(argv)) {
@@ -1269,8 +1458,8 @@ async function readJsonInput(argv) {
1269
1458
  const fromFile = getArg(argv, "--from-file");
1270
1459
  let raw;
1271
1460
  if (fromFile) {
1272
- raw = await fs3.readFile(fromFile, "utf-8");
1273
- } else if (hasFlag(argv, "--from-stdin") || !process7.stdin.isTTY) {
1461
+ raw = await fs4.readFile(fromFile, "utf-8");
1462
+ } else if (hasFlag(argv, "--from-stdin") || !process8.stdin.isTTY) {
1274
1463
  raw = await readStdin();
1275
1464
  } else {
1276
1465
  throw new Error("Provide --from-file <path> or pipe JSON on stdin.");
@@ -1284,11 +1473,11 @@ async function readJsonInput(argv) {
1284
1473
  function readStdin() {
1285
1474
  return new Promise((resolve, reject) => {
1286
1475
  const chunks = [];
1287
- process7.stdin.on("data", (chunk) => {
1476
+ process8.stdin.on("data", (chunk) => {
1288
1477
  chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
1289
1478
  });
1290
- process7.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
1291
- process7.stdin.on("error", reject);
1479
+ process8.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
1480
+ process8.stdin.on("error", reject);
1292
1481
  });
1293
1482
  }
1294
1483
  function reportAndMaybeExit(argv, result) {
@@ -1323,7 +1512,7 @@ function reportAndMaybeExit(argv, result) {
1323
1512
  "Re-run with --json for machine-readable output, or fix the listed fields and retry."
1324
1513
  );
1325
1514
  }
1326
- process7.exit(1);
1515
+ process8.exit(1);
1327
1516
  }
1328
1517
  return;
1329
1518
  }
@@ -1351,7 +1540,7 @@ async function handleWorkflowApiSequence(argv, apiUrl, token) {
1351
1540
  break;
1352
1541
  default:
1353
1542
  printHelp();
1354
- process7.exit(verb ? 1 : 0);
1543
+ process8.exit(verb ? 1 : 0);
1355
1544
  }
1356
1545
  }
1357
1546
  function printHelp() {
@@ -1386,12 +1575,12 @@ async function fetchSequenceByWorkflow(apiUrl, token, workflowId) {
1386
1575
  );
1387
1576
  if (!res.ok) {
1388
1577
  console.error(`Error: ${res.error ?? "Failed to fetch sequence"}`);
1389
- process7.exit(1);
1578
+ process8.exit(1);
1390
1579
  }
1391
1580
  if (!res.data) {
1392
1581
  console.error(`Error: Workflow ${workflowId} has no attached API sequence.`);
1393
1582
  console.error("Create one with: canary workflow create --api-only --name <n> --sequence-from-file seq.json");
1394
- process7.exit(1);
1583
+ process8.exit(1);
1395
1584
  }
1396
1585
  return res.data;
1397
1586
  }
@@ -1400,7 +1589,7 @@ async function handleGet(argv, apiUrl, token) {
1400
1589
  if (!workflowId) {
1401
1590
  console.error("Error: Missing workflow ID.");
1402
1591
  printHelp();
1403
- process7.exit(1);
1592
+ process8.exit(1);
1404
1593
  }
1405
1594
  const seq = await fetchSequenceByWorkflow(apiUrl, token, workflowId);
1406
1595
  emit(argv, renderSequence(seq), seq);
@@ -1410,19 +1599,19 @@ async function handleUpdate(argv, apiUrl, token) {
1410
1599
  if (!workflowId) {
1411
1600
  console.error("Error: Missing workflow ID.");
1412
1601
  printHelp();
1413
- process7.exit(1);
1602
+ process8.exit(1);
1414
1603
  }
1415
1604
  let parsed;
1416
1605
  try {
1417
1606
  parsed = await readJsonInput(argv);
1418
1607
  } catch (err) {
1419
1608
  console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
1420
- process7.exit(1);
1609
+ process8.exit(1);
1421
1610
  }
1422
1611
  const config = parsed;
1423
1612
  if (!config || !Array.isArray(config.steps)) {
1424
1613
  console.error('Error: Input must have a "steps" array. Got: ' + JSON.stringify(config));
1425
- process7.exit(1);
1614
+ process8.exit(1);
1426
1615
  }
1427
1616
  const seq = await fetchSequenceByWorkflow(apiUrl, token, workflowId);
1428
1617
  const result = await apiRequest(
@@ -1435,7 +1624,7 @@ async function handleUpdate(argv, apiUrl, token) {
1435
1624
  reportAndMaybeExit(argv, result);
1436
1625
  if (!result.ok) {
1437
1626
  console.error(`Error: ${result.error ?? "Update failed"}`);
1438
- process7.exit(1);
1627
+ process8.exit(1);
1439
1628
  }
1440
1629
  emit(
1441
1630
  argv,
@@ -1448,7 +1637,7 @@ async function handleExecute(argv, apiUrl, token) {
1448
1637
  if (!workflowId) {
1449
1638
  console.error("Error: Missing workflow ID.");
1450
1639
  printHelp();
1451
- process7.exit(1);
1640
+ process8.exit(1);
1452
1641
  }
1453
1642
  const seq = await fetchSequenceByWorkflow(apiUrl, token, workflowId);
1454
1643
  const result = await apiRequest(
@@ -1459,7 +1648,7 @@ async function handleExecute(argv, apiUrl, token) {
1459
1648
  );
1460
1649
  if (!result.ok || !result.data) {
1461
1650
  console.error(`Error: ${result.error ?? "Execute failed"}`);
1462
- process7.exit(1);
1651
+ process8.exit(1);
1463
1652
  }
1464
1653
  emit(
1465
1654
  argv,
@@ -1473,7 +1662,7 @@ async function handleDelete(argv, apiUrl, token) {
1473
1662
  if (!workflowId) {
1474
1663
  console.error("Error: Missing workflow ID.");
1475
1664
  printHelp();
1476
- process7.exit(1);
1665
+ process8.exit(1);
1477
1666
  }
1478
1667
  const seq = await fetchSequenceByWorkflow(apiUrl, token, workflowId);
1479
1668
  const result = await apiRequest(
@@ -1484,7 +1673,7 @@ async function handleDelete(argv, apiUrl, token) {
1484
1673
  );
1485
1674
  if (!result.ok) {
1486
1675
  console.error(`Error: ${result.error ?? "Delete failed"}`);
1487
- process7.exit(1);
1676
+ process8.exit(1);
1488
1677
  }
1489
1678
  emit(argv, `Deleted api-sequence ${seq.id} (workflow ${workflowId}).`, result);
1490
1679
  }
@@ -1493,7 +1682,7 @@ async function handleSetApiOnly(argv, apiUrl, token) {
1493
1682
  if (!workflowId) {
1494
1683
  console.error("Error: Missing workflow ID.");
1495
1684
  printHelp();
1496
- process7.exit(1);
1685
+ process8.exit(1);
1497
1686
  }
1498
1687
  const apiOnly = !hasFlag(argv, "--off");
1499
1688
  const result = await apiRequest(
@@ -1505,7 +1694,7 @@ async function handleSetApiOnly(argv, apiUrl, token) {
1505
1694
  );
1506
1695
  if (!result.ok) {
1507
1696
  console.error(`Error: ${result.error ?? "Update failed"}`);
1508
- process7.exit(1);
1697
+ process8.exit(1);
1509
1698
  }
1510
1699
  emit(argv, `Workflow ${workflowId} apiOnly=${apiOnly}.`, result);
1511
1700
  }
@@ -1540,8 +1729,8 @@ function renderSequence(seq) {
1540
1729
  }
1541
1730
 
1542
1731
  // src/workflow-seed-create.ts
1543
- import fs4 from "fs/promises";
1544
- import process8 from "process";
1732
+ import fs5 from "fs/promises";
1733
+ import process9 from "process";
1545
1734
  function getAllArgValues(argv, flag) {
1546
1735
  const values = [];
1547
1736
  for (let i = 0; i < argv.length; i++) {
@@ -1570,7 +1759,7 @@ function parseOutputFlag(value) {
1570
1759
  }
1571
1760
  async function readFromStdin3() {
1572
1761
  const chunks = [];
1573
- const stdin = process8.stdin;
1762
+ const stdin = process9.stdin;
1574
1763
  if (stdin.isTTY) {
1575
1764
  throw new Error("No input on stdin. Pipe JSON or use --from-file.");
1576
1765
  }
@@ -1587,7 +1776,7 @@ async function readJsonInput2(argv) {
1587
1776
  const fromFile = getArgValue(argv, "--from-file");
1588
1777
  if (fromFile) {
1589
1778
  try {
1590
- raw = await fs4.readFile(fromFile, "utf-8");
1779
+ raw = await fs5.readFile(fromFile, "utf-8");
1591
1780
  } catch (err) {
1592
1781
  throw new Error(`Failed to read file ${fromFile}: ${err instanceof Error ? err.message : String(err)}`);
1593
1782
  }
@@ -1626,7 +1815,7 @@ function resolveInput(argv) {
1626
1815
  if (!name) {
1627
1816
  console.error("Error: --name is required (or use --from-stdin / --from-file for JSON input).");
1628
1817
  console.error("Usage: canary workflow seed create --name <name> [--output key:name[:desc]] ...");
1629
- process8.exit(1);
1818
+ process9.exit(1);
1630
1819
  }
1631
1820
  const description = getArgValue(argv, "--description");
1632
1821
  const status = getArgValue(argv, "--status");
@@ -1646,7 +1835,7 @@ function resolveInput(argv) {
1646
1835
  outputs.push(...parsed);
1647
1836
  } catch (err) {
1648
1837
  console.error(`Error: Invalid --outputs-json: ${err instanceof Error ? err.message : String(err)}`);
1649
- process8.exit(1);
1838
+ process9.exit(1);
1650
1839
  }
1651
1840
  }
1652
1841
  return { name, description: description || void 0, status, outputs };
@@ -1663,7 +1852,7 @@ async function handleWorkflowSeedCreate(argv, apiUrl, token) {
1663
1852
  input = await resolveInput(argv);
1664
1853
  } catch (err) {
1665
1854
  console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
1666
- process8.exit(1);
1855
+ process9.exit(1);
1667
1856
  }
1668
1857
  const seedResult = await apiRequest(
1669
1858
  apiUrl,
@@ -1684,7 +1873,7 @@ async function handleWorkflowSeedCreate(argv, apiUrl, token) {
1684
1873
  } else {
1685
1874
  console.error(`Error: ${seedResult.error ?? "Failed to create seed workflow"}`);
1686
1875
  }
1687
- process8.exit(1);
1876
+ process9.exit(1);
1688
1877
  }
1689
1878
  const seedId = seedResult.workflow.id;
1690
1879
  const appUrl = resolveAppUrl(apiUrl);
@@ -1826,127 +2015,6 @@ var WORKFLOW_STATUS_DESCRIPTIONS = {
1826
2015
  var formatWorkflowStatusList = () => USER_SETTABLE_WORKFLOW_STATUSES.map(
1827
2016
  (s) => `${s} (${WORKFLOW_STATUS_DESCRIPTIONS[s]})`
1828
2017
  ).join(", ");
1829
- function truncate(text, max) {
1830
- if (text.length <= max) return text;
1831
- return text.slice(0, max - 1) + "\u2026";
1832
- }
1833
- function getNodeTitle(node) {
1834
- const c = node.configJson ?? {};
1835
- switch (node.nodeType) {
1836
- case "login":
1837
- return c.credentialName || NODE_TYPE_LABEL.login;
1838
- case "navigate":
1839
- return c.pageTitle || truncate(c.pageUrl || "Navigate", 40);
1840
- case "action":
1841
- return c.customActionTitle || truncate(c.actionDescription || "Action", 50);
1842
- case "assertion":
1843
- return truncate(c.condition || "Assertion", 50);
1844
- case "setup":
1845
- return c.setupFlowName || "Setup";
1846
- case "seed":
1847
- return c.seedWorkflowName || "Seed";
1848
- case "wait":
1849
- return "Wait";
1850
- case "condition":
1851
- return truncate(c.conditionDescription || "Condition", 50);
1852
- case "end":
1853
- return "End";
1854
- case "api_sequence":
1855
- return "API Sequence";
1856
- default:
1857
- return node.nodeType;
1858
- }
1859
- }
1860
- function getCleanConfig(node) {
1861
- const c = node.configJson ?? {};
1862
- switch (node.nodeType) {
1863
- case "login":
1864
- return pick(c, [
1865
- "credentialName",
1866
- "performLogin",
1867
- "credentialSource",
1868
- "credentialTemplateId",
1869
- "credentialTemplateName",
1870
- "credentialId",
1871
- "seedCredentialRef"
1872
- ]);
1873
- case "navigate":
1874
- return {
1875
- ...pick(c, ["pageUrl", "pageTitle"]),
1876
- ...c.openInNewTab ? { openInNewTab: true } : {}
1877
- };
1878
- case "action":
1879
- return pick(c, [
1880
- "actionDescription",
1881
- "playbookSteps",
1882
- "inputValues",
1883
- "declaredOutputs",
1884
- "capturedVariableKeys",
1885
- "dataRequirements",
1886
- "alwaysUseAgent"
1887
- ]);
1888
- case "assertion":
1889
- return pick(c, ["condition", "expectedOutcome", "strict", "alwaysUseAgent"]);
1890
- case "setup":
1891
- return pick(c, ["setupFlowId", "setupFlowName"]);
1892
- case "seed":
1893
- return pick(c, ["seedWorkflowId", "seedWorkflowName", "snapshotVersion"]);
1894
- case "end":
1895
- return pick(c, ["outcome"]);
1896
- case "wait":
1897
- case "condition":
1898
- case "api_sequence":
1899
- return c;
1900
- default:
1901
- return c;
1902
- }
1903
- }
1904
- function pick(obj, keys) {
1905
- const result = {};
1906
- for (const key of keys) {
1907
- if (obj[key] !== void 0 && obj[key] !== null) {
1908
- result[key] = obj[key];
1909
- }
1910
- }
1911
- return result;
1912
- }
1913
- function formatWorkflowMarkdown(workflow) {
1914
- const seedOutputs = workflow.seedOutputsJson ?? workflow.seedOutputs;
1915
- return workflowToSpec({ ...workflow, seedOutputs });
1916
- }
1917
- function formatWorkflowJson(workflow) {
1918
- const sorted = topoOrderNodes(workflow.nodes, workflow.edges ?? []);
1919
- const seedOutputs = workflow.seedOutputsJson;
1920
- const env = workflow;
1921
- return {
1922
- workflow: {
1923
- id: workflow.id,
1924
- name: workflow.name,
1925
- description: workflow.description,
1926
- status: workflow.status,
1927
- flowType: workflow.flowType,
1928
- ...seedOutputs && seedOutputs.length > 0 ? { seedOutputs } : {},
1929
- ...env.defaultEnvironmentId !== void 0 ? { defaultEnvironmentId: env.defaultEnvironmentId } : {},
1930
- ...env.eligibleEnvironmentIds ? { eligibleEnvironmentIds: env.eligibleEnvironmentIds } : {},
1931
- ...env.passByEnvironment && env.passByEnvironment.length > 0 ? {
1932
- passByEnvironment: env.passByEnvironment.map((p) => ({
1933
- environment: `${p.environmentName} (${p.environmentType})`,
1934
- everPassed: p.everPassed,
1935
- passed: p.passed,
1936
- total: p.total,
1937
- health: p.health
1938
- }))
1939
- } : {}
1940
- },
1941
- steps: sorted.map((node, i) => ({
1942
- index: i + 1,
1943
- nodeId: node.id,
1944
- nodeType: node.nodeType,
1945
- title: getNodeTitle(node),
1946
- config: getCleanConfig(node)
1947
- }))
1948
- };
1949
- }
1950
2018
  async function handleList(argv, apiUrl, token) {
1951
2019
  const jsonOutput = hasFlag(argv, "--json");
1952
2020
  const params = new URLSearchParams();
@@ -1965,7 +2033,7 @@ async function handleList(argv, apiUrl, token) {
1965
2033
  const result = await apiRequest(apiUrl, token, "GET", path);
1966
2034
  if (!result.ok) {
1967
2035
  console.error(`Error: ${result.error}`);
1968
- process9.exit(1);
2036
+ process10.exit(1);
1969
2037
  }
1970
2038
  if (jsonOutput) {
1971
2039
  console.log(JSON.stringify({ data: result.data, pagination: result.pagination }, null, 2));
@@ -2001,72 +2069,12 @@ async function handleList(argv, apiUrl, token) {
2001
2069
  console.log(row);
2002
2070
  }
2003
2071
  }
2004
- function shouldPrintWorkflowUrlTrailer(argv) {
2005
- const jsonOutput = hasFlag(argv, "--json") || getArgValue(argv, "--format") === "json";
2006
- const markdownOutput = hasFlag(argv, "--markdown") || getArgValue(argv, "--format") === "markdown" || getArgValue(argv, "--format") === "spec";
2007
- return !jsonOutput && !markdownOutput;
2008
- }
2009
- async function handleGet2(argv, apiUrl, token) {
2010
- const workflowId = argv[0];
2011
- if (!workflowId || workflowId.startsWith("--")) {
2012
- console.error("Error: Missing workflow ID.");
2013
- console.error("Usage: canary workflow get <workflowId>");
2014
- process9.exit(1);
2015
- }
2016
- const markdownOutput = hasFlag(argv, "--markdown") || getArgValue(argv, "--format") === "markdown" || getArgValue(argv, "--format") === "spec";
2017
- const outputFile = getArgValue(argv, "--output");
2018
- const apiRes = await apiFetch(`${apiUrl}/workflows/${workflowId}`, {
2019
- headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
2020
- token
2021
- });
2022
- if (!apiRes.ok) exitOnFailure(apiRes.failure);
2023
- const result = await apiRes.response.json();
2024
- if (result.error === "WORKFLOW_NOT_FOUND") {
2025
- console.error("Error: Workflow not found.");
2026
- process9.exit(1);
2027
- }
2028
- if (result.error === "WORKFLOW_WRONG_ORG") {
2029
- console.error(
2030
- `Error: Workflow belongs to another org: ${result.targetOrgName ?? result.targetOrgId}`
2031
- );
2032
- process9.exit(1);
2033
- }
2034
- if (!result.workflow) {
2035
- console.error(`Error: ${result.error ?? "Unexpected response"}`);
2036
- process9.exit(1);
2037
- }
2038
- const workflow = result.workflow;
2039
- let output;
2040
- if (markdownOutput) {
2041
- output = formatWorkflowMarkdown(workflow);
2042
- } else {
2043
- output = JSON.stringify(formatWorkflowJson(workflow), null, 2);
2044
- }
2045
- if (outputFile) {
2046
- try {
2047
- await fs5.writeFile(outputFile, output, "utf-8");
2048
- console.log(`Written to ${outputFile}`);
2049
- } catch (err) {
2050
- console.error(
2051
- `Error writing to ${outputFile}: ${err instanceof Error ? err.message : String(err)}`
2052
- );
2053
- process9.exit(1);
2054
- }
2055
- return;
2056
- }
2057
- console.log(output);
2058
- if (shouldPrintWorkflowUrlTrailer(argv)) {
2059
- const appUrl = resolveAppUrl(apiUrl);
2060
- console.log(`
2061
- URL: ${appUrl}/flows/${workflowId}`);
2062
- }
2063
- }
2064
2072
  async function handlePatch(argv, apiUrl, token) {
2065
2073
  const workflowId = argv.find((a) => !a.startsWith("-"));
2066
2074
  if (!workflowId) {
2067
2075
  console.error("Error: Missing workflow ID.");
2068
2076
  console.error("Usage: canary workflow patch <workflowId> [--name ...] [--description ...] [--status ...] [--flow-type ...] [--default-environment <name|id>] [--clear-default-environment] [--any-environment] [--eligible-env-types permanent,sandbox] [--eligible-environments <names|ids>]");
2069
- process9.exit(1);
2077
+ process10.exit(1);
2070
2078
  }
2071
2079
  const name = getArgValue(argv, "--name");
2072
2080
  const description = getArgValue(argv, "--description");
@@ -2086,28 +2094,28 @@ async function handlePatch(argv, apiUrl, token) {
2086
2094
  console.error(
2087
2095
  "Error: No fields to update. Provide at least one of: --name, --description, --status, --flow-type, --seed-outputs-json, --seed-outputs-file, --tags, --tags-add, --tags-remove, --tag-id, --default-environment, --clear-default-environment, --any-environment, --eligible-env-types, --eligible-environments"
2088
2096
  );
2089
- process9.exit(1);
2097
+ process10.exit(1);
2090
2098
  }
2091
2099
  if (anyEnvironment && (eligibleEnvTypes !== void 0 || eligibleEnvironments !== void 0)) {
2092
2100
  console.error(
2093
2101
  "Error: --any-environment is mutually exclusive with --eligible-env-types / --eligible-environments."
2094
2102
  );
2095
- process9.exit(1);
2103
+ process10.exit(1);
2096
2104
  }
2097
2105
  if (clearDefaultEnvironment && defaultEnvironment !== void 0) {
2098
2106
  console.error(
2099
2107
  "Error: --clear-default-environment is mutually exclusive with --default-environment."
2100
2108
  );
2101
- process9.exit(1);
2109
+ process10.exit(1);
2102
2110
  }
2103
2111
  if (status && !USER_SETTABLE_WORKFLOW_STATUSES.includes(status)) {
2104
2112
  console.error(`Error: Invalid status "${status}". Valid: ${formatWorkflowStatusList()}`);
2105
- process9.exit(1);
2113
+ process10.exit(1);
2106
2114
  }
2107
2115
  const validFlowTypes = ["standard", "setup", "seed", "teardown"];
2108
2116
  if (flowType && !validFlowTypes.includes(flowType)) {
2109
2117
  console.error(`Error: Invalid flow type "${flowType}". Must be one of: ${validFlowTypes.join(", ")}`);
2110
- process9.exit(1);
2118
+ process10.exit(1);
2111
2119
  }
2112
2120
  const body = {};
2113
2121
  if (name) body.name = name;
@@ -2118,12 +2126,12 @@ async function handlePatch(argv, apiUrl, token) {
2118
2126
  let raw;
2119
2127
  if (seedOutputsFile) {
2120
2128
  try {
2121
- raw = await fs5.readFile(seedOutputsFile, "utf-8");
2129
+ raw = await fs6.readFile(seedOutputsFile, "utf-8");
2122
2130
  } catch (err) {
2123
2131
  console.error(
2124
2132
  `Error reading ${seedOutputsFile}: ${err instanceof Error ? err.message : String(err)}`
2125
2133
  );
2126
- process9.exit(1);
2134
+ process10.exit(1);
2127
2135
  }
2128
2136
  } else {
2129
2137
  raw = seedOutputsJsonRaw;
@@ -2138,7 +2146,7 @@ async function handlePatch(argv, apiUrl, token) {
2138
2146
  console.error(
2139
2147
  `Error: Invalid --seed-outputs-json: ${err instanceof Error ? err.message : String(err)}`
2140
2148
  );
2141
- process9.exit(1);
2149
+ process10.exit(1);
2142
2150
  }
2143
2151
  }
2144
2152
  if (hasEnvFlag) {
@@ -2149,7 +2157,7 @@ async function handlePatch(argv, apiUrl, token) {
2149
2157
  const bad = types.filter((t) => !valid.includes(t));
2150
2158
  if (bad.length > 0) {
2151
2159
  console.error(`Error: invalid env type(s): ${bad.join(", ")}. Valid: ${valid.join(", ")}`);
2152
- process9.exit(1);
2160
+ process10.exit(1);
2153
2161
  }
2154
2162
  body.environmentConstraints = { mode: "envTypes", types };
2155
2163
  }
@@ -2181,7 +2189,7 @@ async function handlePatch(argv, apiUrl, token) {
2181
2189
  } else {
2182
2190
  console.error(`Error: ${result.error ?? "Unknown error"}`);
2183
2191
  }
2184
- process9.exit(1);
2192
+ process10.exit(1);
2185
2193
  }
2186
2194
  }
2187
2195
  if (hasTagFlag) {
@@ -2200,7 +2208,7 @@ async function handlePatch(argv, apiUrl, token) {
2200
2208
  console.error(`Error applying tags:
2201
2209
  ${err instanceof Error ? err.message : String(err)}`);
2202
2210
  }
2203
- process9.exit(1);
2211
+ process10.exit(1);
2204
2212
  }
2205
2213
  }
2206
2214
  if (jsonOutput) {
@@ -2226,27 +2234,27 @@ async function handleArchive(argv, apiUrl, token) {
2226
2234
  if (!workflowId) {
2227
2235
  console.error("Error: Missing workflow ID.");
2228
2236
  console.error("Usage: canary workflow archive <workflowId> [--yes] [--json]");
2229
- process9.exit(1);
2237
+ process10.exit(1);
2230
2238
  }
2231
2239
  const jsonOutput = hasFlag(argv, "--json");
2232
2240
  const skipConfirm = hasFlag(argv, "--yes", "-y");
2233
2241
  if (!skipConfirm) {
2234
- if (!process9.stdin.isTTY) {
2242
+ if (!process10.stdin.isTTY) {
2235
2243
  console.error(
2236
2244
  "Error: Archiving requires confirmation. Pass --yes (or -y) for non-interactive use."
2237
2245
  );
2238
- process9.exit(1);
2246
+ process10.exit(1);
2239
2247
  }
2240
- process9.stdout.write(
2248
+ process10.stdout.write(
2241
2249
  `Archive workflow ${workflowId}? It will be hidden from lists and skipped by test suites. [y/N] `
2242
2250
  );
2243
2251
  const answer = await new Promise((resolve) => {
2244
- process9.stdin.setEncoding("utf-8");
2245
- process9.stdin.once("data", (chunk) => resolve(String(chunk).trim().toLowerCase()));
2252
+ process10.stdin.setEncoding("utf-8");
2253
+ process10.stdin.once("data", (chunk) => resolve(String(chunk).trim().toLowerCase()));
2246
2254
  });
2247
2255
  if (answer !== "y" && answer !== "yes") {
2248
2256
  console.error("Aborted.");
2249
- process9.exit(1);
2257
+ process10.exit(1);
2250
2258
  }
2251
2259
  }
2252
2260
  const result = await apiRequest(
@@ -2261,7 +2269,7 @@ async function handleArchive(argv, apiUrl, token) {
2261
2269
  } else {
2262
2270
  renderWorkflowUserError(result);
2263
2271
  }
2264
- process9.exit(1);
2272
+ process10.exit(1);
2265
2273
  }
2266
2274
  if (jsonOutput) {
2267
2275
  console.log(JSON.stringify(result, null, 2));
@@ -2274,7 +2282,7 @@ async function handleUnarchive(argv, apiUrl, token) {
2274
2282
  if (!workflowId) {
2275
2283
  console.error("Error: Missing workflow ID.");
2276
2284
  console.error("Usage: canary workflow unarchive <workflowId> [--json]");
2277
- process9.exit(1);
2285
+ process10.exit(1);
2278
2286
  }
2279
2287
  const jsonOutput = hasFlag(argv, "--json");
2280
2288
  const result = await apiRequest(
@@ -2290,7 +2298,7 @@ async function handleUnarchive(argv, apiUrl, token) {
2290
2298
  } else {
2291
2299
  renderWorkflowUserError(result);
2292
2300
  }
2293
- process9.exit(1);
2301
+ process10.exit(1);
2294
2302
  }
2295
2303
  if (jsonOutput) {
2296
2304
  console.log(JSON.stringify(result, null, 2));
@@ -2313,14 +2321,14 @@ async function handleApprove(argv, apiUrl, token) {
2313
2321
  if (!workflowId) {
2314
2322
  console.error("Error: Missing workflow ID.");
2315
2323
  console.error("Usage: canary workflow approve <workflowId> [--yes] [--json]");
2316
- process9.exit(1);
2324
+ process10.exit(1);
2317
2325
  }
2318
2326
  const jsonOutput = hasFlag(argv, "--json");
2319
2327
  if (!hasFlag(argv, "--yes")) {
2320
2328
  console.error(APPROVAL_GUIDANCE);
2321
2329
  console.error(`
2322
2330
  Re-run with --yes to approve: canary workflow approve ${workflowId} --yes`);
2323
- process9.exit(1);
2331
+ process10.exit(1);
2324
2332
  }
2325
2333
  const result = await apiRequest(
2326
2334
  apiUrl,
@@ -2335,7 +2343,7 @@ Re-run with --yes to approve: canary workflow approve ${workflowId} --yes`);
2335
2343
  } else {
2336
2344
  console.error(`Error: ${result.error}`);
2337
2345
  }
2338
- process9.exit(1);
2346
+ process10.exit(1);
2339
2347
  }
2340
2348
  if (jsonOutput) {
2341
2349
  console.log(
@@ -2351,7 +2359,7 @@ async function handlePromote(argv, apiUrl, token, options) {
2351
2359
  if (!workflowId) {
2352
2360
  console.error("Error: Missing workflow ID.");
2353
2361
  console.error("Usage: canary workflow promote <workflowId> [--force] [--json]");
2354
- process9.exit(1);
2362
+ process10.exit(1);
2355
2363
  }
2356
2364
  const force = hasFlag(argv, "--force");
2357
2365
  const jsonOutput = hasFlag(argv, "--json");
@@ -2376,7 +2384,7 @@ async function handlePromote(argv, apiUrl, token, options) {
2376
2384
  (Approval asserts a human verified the test checks the right thing \u2014 it cannot be forced.)` : "";
2377
2385
  console.error(`Error: ${result.error}${hint}`);
2378
2386
  }
2379
- process9.exit(1);
2387
+ process10.exit(1);
2380
2388
  }
2381
2389
  if (jsonOutput) {
2382
2390
  console.log(
@@ -2391,7 +2399,7 @@ async function handlePause(argv, apiUrl, token) {
2391
2399
  if (!workflowId) {
2392
2400
  console.error("Error: Missing workflow ID.");
2393
2401
  console.error("Usage: canary workflow pause <workflowId> [--json]");
2394
- process9.exit(1);
2402
+ process10.exit(1);
2395
2403
  }
2396
2404
  const jsonOutput = hasFlag(argv, "--json");
2397
2405
  const result = await apiRequest(
@@ -2407,7 +2415,7 @@ async function handlePause(argv, apiUrl, token) {
2407
2415
  } else {
2408
2416
  console.error(`Error: ${result.error}`);
2409
2417
  }
2410
- process9.exit(1);
2418
+ process10.exit(1);
2411
2419
  }
2412
2420
  if (jsonOutput) {
2413
2421
  console.log(
@@ -2441,14 +2449,14 @@ async function handleNodePatch(argv, apiUrl, token) {
2441
2449
  console.error(
2442
2450
  `Usage: canary workflow node patch <workflowId> <nodeId> --set-input key=value [--config '{"..."}'] [--json]`
2443
2451
  );
2444
- process9.exit(1);
2452
+ process10.exit(1);
2445
2453
  }
2446
2454
  const configArg = getArgValue(argv, "--config");
2447
2455
  const setInputArgs = getAllArgValues2(argv, "--set-input");
2448
2456
  const jsonOutput = hasFlag(argv, "--json");
2449
2457
  if (!configArg && setInputArgs.length === 0) {
2450
2458
  console.error(`Error: No changes specified. Provide --set-input key=value and/or --config '{"..."}'`);
2451
- process9.exit(1);
2459
+ process10.exit(1);
2452
2460
  }
2453
2461
  let configJson = {};
2454
2462
  if (configArg) {
@@ -2456,7 +2464,7 @@ async function handleNodePatch(argv, apiUrl, token) {
2456
2464
  configJson = JSON.parse(configArg);
2457
2465
  } catch (e) {
2458
2466
  console.error(`Error: Invalid JSON in --config: ${e instanceof Error ? e.message : String(e)}`);
2459
- process9.exit(1);
2467
+ process10.exit(1);
2460
2468
  }
2461
2469
  }
2462
2470
  if (setInputArgs.length > 0) {
@@ -2465,7 +2473,7 @@ async function handleNodePatch(argv, apiUrl, token) {
2465
2473
  const eqIdx = arg.indexOf("=");
2466
2474
  if (eqIdx === -1) {
2467
2475
  console.error(`Error: --set-input must be key=value, got: "${arg}"`);
2468
- process9.exit(1);
2476
+ process10.exit(1);
2469
2477
  }
2470
2478
  inputValues[arg.slice(0, eqIdx)] = arg.slice(eqIdx + 1);
2471
2479
  }
@@ -2478,7 +2486,7 @@ async function handleNodePatch(argv, apiUrl, token) {
2478
2486
  const getResult = await getRes.json();
2479
2487
  if (!getResult.workflow) {
2480
2488
  console.error(`Error: Workflow not found.`);
2481
- process9.exit(1);
2489
+ process10.exit(1);
2482
2490
  }
2483
2491
  const existingNode = getResult.workflow.nodes.find((n) => n.id === nodeId);
2484
2492
  if (!existingNode) {
@@ -2487,7 +2495,7 @@ async function handleNodePatch(argv, apiUrl, token) {
2487
2495
  for (const n of topoOrderNodes(getResult.workflow.nodes, getResult.workflow.edges ?? [])) {
2488
2496
  console.error(` ${n.id} [${n.nodeType}] ${getNodeTitle(n)}`);
2489
2497
  }
2490
- process9.exit(1);
2498
+ process10.exit(1);
2491
2499
  }
2492
2500
  const patchRes = await fetchOrExit(`${apiUrl}/workflows/${workflowId}/nodes/${nodeId}`, {
2493
2501
  method: "PUT",
@@ -2509,7 +2517,7 @@ async function handleNodePatch(argv, apiUrl, token) {
2509
2517
  }
2510
2518
  console.error(rendered ?? `Error (${patchRes.status}): ${errBody.slice(0, 500)}`);
2511
2519
  }
2512
- process9.exit(1);
2520
+ process10.exit(1);
2513
2521
  }
2514
2522
  const patchResult = await patchRes.json();
2515
2523
  if (jsonOutput) {
@@ -2711,7 +2719,7 @@ async function runWorkflow(argv) {
2711
2719
  return;
2712
2720
  }
2713
2721
  if (subCommand === "debug" && hasFlag(rest, "--help", "-h")) {
2714
- const { handleWorkflowDebug } = await import("./workflow-debug-XHR4552F.js");
2722
+ const { handleWorkflowDebug } = await import("./workflow-debug-IWXZXSL2.js");
2715
2723
  await handleWorkflowDebug(rest, "", "");
2716
2724
  return;
2717
2725
  }
@@ -2731,7 +2739,7 @@ async function runWorkflow(argv) {
2731
2739
  await handleList(rest, apiUrl, token);
2732
2740
  break;
2733
2741
  case "get":
2734
- await handleGet2(rest, apiUrl, token);
2742
+ await handleWorkflowGet(rest, apiUrl, token);
2735
2743
  break;
2736
2744
  case "create":
2737
2745
  await handleWorkflowCreate(rest, apiUrl, token);
@@ -2767,7 +2775,7 @@ async function runWorkflow(argv) {
2767
2775
  } else {
2768
2776
  console.error(`Unknown node sub-command: ${nodeSub ?? "(none)"}`);
2769
2777
  printWorkflowHelp();
2770
- process9.exit(1);
2778
+ process10.exit(1);
2771
2779
  }
2772
2780
  break;
2773
2781
  }
@@ -2778,7 +2786,7 @@ async function runWorkflow(argv) {
2778
2786
  } else {
2779
2787
  console.error(`Unknown seed sub-command: ${seedSub ?? "(none)"}`);
2780
2788
  printWorkflowHelp();
2781
- process9.exit(1);
2789
+ process10.exit(1);
2782
2790
  }
2783
2791
  break;
2784
2792
  }
@@ -2786,7 +2794,7 @@ async function runWorkflow(argv) {
2786
2794
  await handleWorkflowSync(rest, apiUrl, token);
2787
2795
  break;
2788
2796
  case "proposals": {
2789
- const { handleWorkflowProposals } = await import("./workflow-proposals-VWLKW352.js");
2797
+ const { handleWorkflowProposals } = await import("./workflow-proposals-76D2MM6G.js");
2790
2798
  await handleWorkflowProposals(rest, apiUrl, token);
2791
2799
  break;
2792
2800
  }
@@ -2797,23 +2805,23 @@ async function runWorkflow(argv) {
2797
2805
  await handleWorkflowApiSequence(rest, apiUrl, token);
2798
2806
  break;
2799
2807
  case "cache": {
2800
- const { handleWorkflowCache } = await import("./workflow-cache-XWTLXIHE.js");
2808
+ const { handleWorkflowCache } = await import("./workflow-cache-LRH5CAPS.js");
2801
2809
  await handleWorkflowCache(rest, apiUrl, token);
2802
2810
  break;
2803
2811
  }
2804
2812
  case "debug": {
2805
- const { handleWorkflowDebug } = await import("./workflow-debug-XHR4552F.js");
2813
+ const { handleWorkflowDebug } = await import("./workflow-debug-IWXZXSL2.js");
2806
2814
  await handleWorkflowDebug(rest, apiUrl, token);
2807
2815
  break;
2808
2816
  }
2809
2817
  default:
2810
2818
  console.error(`Unknown sub-command: ${subCommand}`);
2811
2819
  printWorkflowHelp();
2812
- process9.exit(1);
2820
+ process10.exit(1);
2813
2821
  }
2814
2822
  }
2815
2823
  export {
2816
2824
  runWorkflow,
2817
2825
  shouldPrintWorkflowUrlTrailer
2818
2826
  };
2819
- //# sourceMappingURL=workflow-GCZCXPGA.js.map
2827
+ //# sourceMappingURL=workflow-2TVSFQXK.js.map