@runcofactor/cli 0.15.1 → 0.16.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 (123) hide show
  1. package/dist/{account-62I7FG5G.js → account-ZMV7NEFM.js} +4 -4
  2. package/dist/account-ZMV7NEFM.js.map +1 -0
  3. package/dist/{api-catalog-CAJUASVC.js → api-catalog-6HNOGVPA.js} +3 -3
  4. package/dist/{attachment-RL4AZUJE.js → attachment-QAHR54HQ.js} +3 -3
  5. package/dist/{augmentor-GAF3MFY6.js → augmentor-7T3L6ZR4.js} +3 -3
  6. package/dist/{chunk-26U3DGUM.js → chunk-7YJTQCPX.js} +3 -5
  7. package/dist/chunk-7YJTQCPX.js.map +1 -0
  8. package/dist/{chunk-PXFDH6YL.js → chunk-A4ISG3VX.js} +55 -15
  9. package/dist/{chunk-PXFDH6YL.js.map → chunk-A4ISG3VX.js.map} +1 -1
  10. package/dist/{chunk-5R4HMSNX.js → chunk-AI3Y3AZH.js} +24834 -24813
  11. package/dist/chunk-AI3Y3AZH.js.map +1 -0
  12. package/dist/{chunk-HKQ5XQAQ.js → chunk-CEXV3MOC.js} +3 -3
  13. package/dist/{chunk-VKBTI5EF.js → chunk-D6AVOPOS.js} +2 -2
  14. package/dist/{chunk-ZXRVFFCY.js → chunk-DT2CEH2V.js} +2 -2
  15. package/dist/{chunk-IWKJQZJQ.js → chunk-GZVCNYR4.js} +55 -55
  16. package/dist/chunk-GZVCNYR4.js.map +1 -0
  17. package/dist/{chunk-CJEKEW7R.js → chunk-LFFWD5JZ.js} +2 -2
  18. package/dist/{chunk-UZ2ZA5A6.js → chunk-RGDIVW3O.js} +2 -2
  19. package/dist/{chunk-CFJXYPTF.js → chunk-UAJUZLDE.js} +11 -3
  20. package/dist/chunk-UAJUZLDE.js.map +1 -0
  21. package/dist/{credential-JGVSEGVH.js → credential-X6QKX473.js} +3 -3
  22. package/dist/{credential-template-CWWMOKB2.js → credential-template-GD3D4MBI.js} +3 -3
  23. package/dist/{debug-workflow-BXRU72YZ.js → debug-workflow-AAEOAME2.js} +6 -6
  24. package/dist/{src-CV57ZD6I.js → dist-QLTVBUMD.js} +7 -9
  25. package/dist/{docs-PVBXPTGR.js → docs-BVUEXBY3.js} +3 -3
  26. package/dist/{environment-WZKIO3R3.js → environment-WE7VVE6I.js} +3 -3
  27. package/dist/{feature-flag-K5REGGDY.js → feature-flag-VJO2TJFT.js} +9 -8
  28. package/dist/feature-flag-VJO2TJFT.js.map +1 -0
  29. package/dist/index.js +129 -44
  30. package/dist/index.js.map +1 -1
  31. package/dist/{init-FFUZO5D7.js → init-RQHHKJJD.js} +8 -8
  32. package/dist/{install-XRKEQAFZ.js → install-CQLHNZ6U.js} +3 -3
  33. package/dist/{issues-I3V6GEXU.js → issues-HK2JA5JS.js} +3 -3
  34. package/dist/{knobs-6WLJMB44.js → knobs-ETJAV6YM.js} +3 -3
  35. package/dist/{list-PHC7VYNS.js → list-F6DGGW3Z.js} +3 -3
  36. package/dist/{local-VGYRSW22.js → local-CMAY54I5.js} +5 -5
  37. package/dist/{login-QPU2BKG2.js → login-6CKG664C.js} +8 -8
  38. package/dist/{mcp-LA452TOA.js → mcp-GC2WOOZO.js} +5 -6
  39. package/dist/{mcp-LA452TOA.js.map → mcp-GC2WOOZO.js.map} +1 -1
  40. package/dist/metrics-IXICURAA.js +367 -0
  41. package/dist/metrics-IXICURAA.js.map +1 -0
  42. package/dist/{product-RSZV5HMB.js → product-BUJWPYKB.js} +4 -3
  43. package/dist/product-BUJWPYKB.js.map +1 -0
  44. package/dist/{property-YP4GHQAR.js → property-4EXPWRNT.js} +3 -3
  45. package/dist/{record-KWKHP2ZY.js → record-HL4QA7OX.js} +4 -4
  46. package/dist/{record-KWKHP2ZY.js.map → record-HL4QA7OX.js.map} +1 -1
  47. package/dist/{release-NDRHPW6V.js → release-2SMK5Y3V.js} +3 -3
  48. package/dist/{sandbox-OOCANWOG.js → sandbox-ORAPKOH3.js} +3 -3
  49. package/dist/{scenarios-2HRLCGFY.js → scenarios-DM5FDCAF.js} +3 -3
  50. package/dist/{session-M4ULYDYP.js → session-X6IYGWYG.js} +14 -16
  51. package/dist/{session-M4ULYDYP.js.map → session-X6IYGWYG.js.map} +1 -1
  52. package/dist/{skill-4DGPRDUC.js → skill-ZU5V2EE5.js} +24 -14
  53. package/dist/skill-ZU5V2EE5.js.map +1 -0
  54. package/dist/skills/optimize-cache/SKILL.md +9 -3
  55. package/dist/{spec-XZ2TKUFZ.js → spec-KO5QD6AY.js} +3 -3
  56. package/dist/{src-HL7HEJIW.js → src-DSD34JIX.js} +2 -2
  57. package/dist/{src-2FK3JHGW.js → src-HTGNKBUF.js} +15 -7
  58. package/dist/{src-2FK3JHGW.js.map → src-HTGNKBUF.js.map} +1 -1
  59. package/dist/{src-OU7544PM.js → src-PDYXACRP.js} +2 -2
  60. package/dist/{start-IYKF3C3X.js → start-2ECN4LX5.js} +6 -6
  61. package/dist/{tag-T45MMSCH.js → tag-R5I72HJ6.js} +4 -4
  62. package/dist/{task-MCUHAVTD.js → task-V3JMSJIM.js} +3 -3
  63. package/dist/{test-suite-BICBRSBP.js → test-suite-NOYVK6YX.js} +5 -5
  64. package/dist/{trace-2BAPMYAS.js → trace-NOYEKNO4.js} +4 -5
  65. package/dist/{triage-M3RZ2ASB.js → triage-4RFATHBE.js} +4 -4
  66. package/dist/utilities-3WMXE743.js +441 -0
  67. package/dist/utilities-3WMXE743.js.map +1 -0
  68. package/dist/{workflow-4J23FV7K.js → workflow-DC7WOTTW.js} +13 -17
  69. package/dist/workflow-DC7WOTTW.js.map +1 -0
  70. package/dist/{workflow-cache-XPSK6KC7.js → workflow-cache-SDSI6SMF.js} +6 -6
  71. package/dist/{workflow-cache-XPSK6KC7.js.map → workflow-cache-SDSI6SMF.js.map} +1 -1
  72. package/dist/{workflow-debug-W4USZH35.js → workflow-debug-6UQYP67Q.js} +6 -7
  73. package/dist/{workflow-debug-W4USZH35.js.map → workflow-debug-6UQYP67Q.js.map} +1 -1
  74. package/dist/{workflow-proposals-5E3DTYZB.js → workflow-proposals-67AVGMHX.js} +6 -6
  75. package/package.json +1 -1
  76. package/dist/account-62I7FG5G.js.map +0 -1
  77. package/dist/chunk-26U3DGUM.js.map +0 -1
  78. package/dist/chunk-5R4HMSNX.js.map +0 -1
  79. package/dist/chunk-CFJXYPTF.js.map +0 -1
  80. package/dist/chunk-IWKJQZJQ.js.map +0 -1
  81. package/dist/chunk-KRWRUU6R.js +0 -114
  82. package/dist/chunk-KRWRUU6R.js.map +0 -1
  83. package/dist/feature-flag-K5REGGDY.js.map +0 -1
  84. package/dist/pdf-extract-YHE54XU4.js +0 -13
  85. package/dist/product-RSZV5HMB.js.map +0 -1
  86. package/dist/skill-4DGPRDUC.js.map +0 -1
  87. package/dist/triage-M3RZ2ASB.js.map +0 -1
  88. package/dist/workflow-4J23FV7K.js.map +0 -1
  89. /package/dist/{api-catalog-CAJUASVC.js.map → api-catalog-6HNOGVPA.js.map} +0 -0
  90. /package/dist/{attachment-RL4AZUJE.js.map → attachment-QAHR54HQ.js.map} +0 -0
  91. /package/dist/{augmentor-GAF3MFY6.js.map → augmentor-7T3L6ZR4.js.map} +0 -0
  92. /package/dist/{chunk-HKQ5XQAQ.js.map → chunk-CEXV3MOC.js.map} +0 -0
  93. /package/dist/{chunk-VKBTI5EF.js.map → chunk-D6AVOPOS.js.map} +0 -0
  94. /package/dist/{chunk-ZXRVFFCY.js.map → chunk-DT2CEH2V.js.map} +0 -0
  95. /package/dist/{chunk-CJEKEW7R.js.map → chunk-LFFWD5JZ.js.map} +0 -0
  96. /package/dist/{chunk-UZ2ZA5A6.js.map → chunk-RGDIVW3O.js.map} +0 -0
  97. /package/dist/{credential-JGVSEGVH.js.map → credential-X6QKX473.js.map} +0 -0
  98. /package/dist/{credential-template-CWWMOKB2.js.map → credential-template-GD3D4MBI.js.map} +0 -0
  99. /package/dist/{debug-workflow-BXRU72YZ.js.map → debug-workflow-AAEOAME2.js.map} +0 -0
  100. /package/dist/{pdf-extract-YHE54XU4.js.map → dist-QLTVBUMD.js.map} +0 -0
  101. /package/dist/{docs-PVBXPTGR.js.map → docs-BVUEXBY3.js.map} +0 -0
  102. /package/dist/{environment-WZKIO3R3.js.map → environment-WE7VVE6I.js.map} +0 -0
  103. /package/dist/{init-FFUZO5D7.js.map → init-RQHHKJJD.js.map} +0 -0
  104. /package/dist/{install-XRKEQAFZ.js.map → install-CQLHNZ6U.js.map} +0 -0
  105. /package/dist/{issues-I3V6GEXU.js.map → issues-HK2JA5JS.js.map} +0 -0
  106. /package/dist/{knobs-6WLJMB44.js.map → knobs-ETJAV6YM.js.map} +0 -0
  107. /package/dist/{list-PHC7VYNS.js.map → list-F6DGGW3Z.js.map} +0 -0
  108. /package/dist/{local-VGYRSW22.js.map → local-CMAY54I5.js.map} +0 -0
  109. /package/dist/{login-QPU2BKG2.js.map → login-6CKG664C.js.map} +0 -0
  110. /package/dist/{property-YP4GHQAR.js.map → property-4EXPWRNT.js.map} +0 -0
  111. /package/dist/{release-NDRHPW6V.js.map → release-2SMK5Y3V.js.map} +0 -0
  112. /package/dist/{sandbox-OOCANWOG.js.map → sandbox-ORAPKOH3.js.map} +0 -0
  113. /package/dist/{scenarios-2HRLCGFY.js.map → scenarios-DM5FDCAF.js.map} +0 -0
  114. /package/dist/{spec-XZ2TKUFZ.js.map → spec-KO5QD6AY.js.map} +0 -0
  115. /package/dist/{src-HL7HEJIW.js.map → src-DSD34JIX.js.map} +0 -0
  116. /package/dist/{src-CV57ZD6I.js.map → src-PDYXACRP.js.map} +0 -0
  117. /package/dist/{start-IYKF3C3X.js.map → start-2ECN4LX5.js.map} +0 -0
  118. /package/dist/{src-OU7544PM.js.map → tag-R5I72HJ6.js.map} +0 -0
  119. /package/dist/{task-MCUHAVTD.js.map → task-V3JMSJIM.js.map} +0 -0
  120. /package/dist/{test-suite-BICBRSBP.js.map → test-suite-NOYVK6YX.js.map} +0 -0
  121. /package/dist/{tag-T45MMSCH.js.map → trace-NOYEKNO4.js.map} +0 -0
  122. /package/dist/{trace-2BAPMYAS.js.map → triage-4RFATHBE.js.map} +0 -0
  123. /package/dist/{workflow-proposals-5E3DTYZB.js.map → workflow-proposals-67AVGMHX.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  runRemoteTest
4
- } from "./chunk-CJEKEW7R.js";
4
+ } from "./chunk-LFFWD5JZ.js";
5
+ import "./chunk-DT2CEH2V.js";
6
+ import "./chunk-UAJUZLDE.js";
7
+ import {
8
+ fetchOrExit,
9
+ isSuperadminToken
10
+ } from "./chunk-3CZU7XCS.js";
5
11
  import {
6
12
  runLogin
7
13
  } from "./chunk-G5SXUXSU.js";
8
14
  import {
9
15
  checkForUpdate
10
16
  } from "./chunk-AQPJQ5AE.js";
11
- import "./chunk-ZXRVFFCY.js";
12
- import "./chunk-CFJXYPTF.js";
13
- import {
14
- fetchOrExit,
15
- isSuperadminToken
16
- } from "./chunk-3CZU7XCS.js";
17
17
  import {
18
18
  envToProfile,
19
19
  getArgValue,
@@ -30,7 +30,7 @@ import {
30
30
  version
31
31
  } from "./chunk-32P26BZT.js";
32
32
  import "./chunk-JWHYXEA2.js";
33
- import "./chunk-IWKJQZJQ.js";
33
+ import "./chunk-GZVCNYR4.js";
34
34
  import "./chunk-VKVL7WBN.js";
35
35
 
36
36
  // src/index.ts
@@ -39,7 +39,41 @@ import { pathToFileURL } from "url";
39
39
 
40
40
  // src/orgs.ts
41
41
  import process from "process";
42
+ async function runOrgMembers(argv) {
43
+ const { apiUrl, token } = await resolveConfig(argv);
44
+ const res = await fetch(`${apiUrl}/org/members`, {
45
+ headers: { Authorization: `Bearer ${token}` }
46
+ });
47
+ if (!res.ok) {
48
+ console.error("Failed to fetch members. You may need to re-login: cofactor login");
49
+ process.exit(1);
50
+ }
51
+ const data = await res.json();
52
+ if (!data.ok || !data.items) {
53
+ console.error("Failed to fetch members:", data.error ?? "Unknown error");
54
+ process.exit(1);
55
+ }
56
+ if (hasFlag(argv, "--json")) {
57
+ console.log(JSON.stringify(data.items, null, 2));
58
+ return;
59
+ }
60
+ if (data.items.length === 0) {
61
+ console.log("No members.");
62
+ return;
63
+ }
64
+ console.log("Members (\u2713 = Slack-linked, can receive utilities slack DMs):\n");
65
+ for (const m of data.items) {
66
+ const slack = m.slackLinked ? "\u2713" : " ";
67
+ const name = m.displayName ?? "(no name)";
68
+ const email = m.primaryEmail ?? "(no email)";
69
+ console.log(` ${slack} ${name} <${email}> [${m.role}]`);
70
+ }
71
+ }
42
72
  async function runOrgs(argv) {
73
+ const sub = argv.find((a) => !a.startsWith("-"));
74
+ if (sub === "members") {
75
+ return runOrgMembers(argv.filter((a) => a !== "members"));
76
+ }
43
77
  const { apiUrl, token } = await resolveConfig(argv);
44
78
  const env = getArgValue(argv, "--env");
45
79
  const auth = await readStoredAuth(env ? envToProfile(env) : void 0);
@@ -442,15 +476,18 @@ async function recordCliInstrumentationFailure(argv, cliVersion, stage, error) {
442
476
  }
443
477
 
444
478
  // src/index.ts
445
- var loadMcp = () => import("./mcp-LA452TOA.js").then((m) => m.runMcp);
446
- var loadDebugWorkflow = () => import("./debug-workflow-BXRU72YZ.js").then((m) => m.runDebugWorkflow);
447
- var loadRecord = () => import("./record-KWKHP2ZY.js").then((m) => m.runRecord);
448
- var loadSession = () => import("./session-M4ULYDYP.js").then((m) => m.runSession);
449
- var loadLocal = () => import("./local-VGYRSW22.js").then((m) => m.runLocal);
479
+ var loadMcp = () => import("./mcp-GC2WOOZO.js").then((m) => m.runMcp);
480
+ var loadDebugWorkflow = () => import("./debug-workflow-AAEOAME2.js").then((m) => m.runDebugWorkflow);
481
+ var loadRecord = () => import("./record-HL4QA7OX.js").then((m) => m.runRecord);
482
+ var loadSession = () => import("./session-X6IYGWYG.js").then((m) => m.runSession);
483
+ var loadLocal = () => import("./local-CMAY54I5.js").then((m) => m.runLocal);
450
484
  function printVersion() {
451
485
  console.log(`canary v${version}`);
452
486
  }
453
- function printHelp({ isSuperadmin }) {
487
+ function printHelp({
488
+ isSuperadmin,
489
+ features = {}
490
+ }) {
454
491
  const lines = [
455
492
  `canary v${version}: Testing and QA CLI`,
456
493
  "",
@@ -459,7 +496,7 @@ function printHelp({ isSuperadmin }) {
459
496
  " canary mcp Start MCP server (stdio)",
460
497
  " canary install [--target <id>] Install MCP server into Claude, Cursor, etc.",
461
498
  " canary login [--org <name>] [--app-url https://app.trycanary.ai] [--no-open]",
462
- " canary orgs List organizations",
499
+ " canary orgs [members] List organizations (or org members)",
463
500
  " canary debug <workflowId> [options] Debug workflow in local headed browser",
464
501
  " canary record [options] Record browser interactions",
465
502
  " canary local <sub-command> Set up and manage local testing",
@@ -476,12 +513,19 @@ function printHelp({ isSuperadmin }) {
476
513
  lines.push(
477
514
  " canary application <sub-command> List and create applications, view linked repos (alias: property)",
478
515
  " canary environment <sub-command> List, create, and default environments (alias: env)",
479
- " canary task <sub-command> Manage agent tasks (requires feature flag)",
480
516
  " canary sandbox <sub-command> Manage sandbox templates and instances",
481
517
  " canary attachment <sub-command> List, upload, and manage attachments",
482
518
  " canary tag <sub-command> List, create, and assign tags",
483
519
  " canary triage <sub-command> Read AI triage results for a test suite execution"
484
520
  );
521
+ if (features.agentTasks) {
522
+ lines.push(" canary task <sub-command> Manage agent tasks");
523
+ }
524
+ if (features.utilities) {
525
+ lines.push(
526
+ " canary utilities <group> <sub> Object storage, gists, email/slack (agent toolkit)"
527
+ );
528
+ }
485
529
  if (isSuperadmin) {
486
530
  lines.push(
487
531
  " canary debug-session [--env dev|local] [--json] Create browser debug session",
@@ -491,6 +535,7 @@ function printHelp({ isSuperadmin }) {
491
535
  " canary feature-flag <sub-command> Manage feature flags",
492
536
  " canary knobs <sub-command> Manage knobs (global config)",
493
537
  " canary product <sub-command> Manage the Product board (cards, fields, flag links)",
538
+ " canary metrics <sub-command> Manage product metrics (pull/review health metrics)",
494
539
  " canary account <sub-command> Manage the Accounts board (accounts, org links)"
495
540
  );
496
541
  }
@@ -660,6 +705,7 @@ var COMMANDS_WITH_UPDATE_CHECK = /* @__PURE__ */ new Set([
660
705
  "sandbox",
661
706
  "attachment",
662
707
  "attachments",
708
+ "utilities",
663
709
  "tag",
664
710
  "tags",
665
711
  "api-catalog"
@@ -680,6 +726,7 @@ var COMMANDS_WITH_HELP = /* @__PURE__ */ new Set([
680
726
  "sandbox",
681
727
  "attachment",
682
728
  "attachments",
729
+ "utilities",
683
730
  "tag",
684
731
  "tags",
685
732
  "api-catalog"
@@ -690,6 +737,34 @@ async function resolveIsSuperadmin() {
690
737
  const tokens = await readAllStoredTokens();
691
738
  return tokens.some((t) => isSuperadminToken(t));
692
739
  }
740
+ async function resolveOrgFeatures() {
741
+ try {
742
+ const config = await resolveOptionalConfig([]);
743
+ if (!config) return {};
744
+ const controller = new AbortController();
745
+ const timer = setTimeout(() => controller.abort(), 3e3);
746
+ try {
747
+ const res = await fetch(`${config.apiUrl}/me`, {
748
+ headers: { Authorization: `Bearer ${config.token}` },
749
+ signal: controller.signal
750
+ });
751
+ if (!res.ok) return {};
752
+ const body = await res.json();
753
+ return body.user?.features ?? {};
754
+ } finally {
755
+ clearTimeout(timer);
756
+ }
757
+ } catch {
758
+ return {};
759
+ }
760
+ }
761
+ async function showGlobalHelp() {
762
+ const [isSuperadmin, features] = await Promise.all([
763
+ resolveIsSuperadmin(),
764
+ resolveOrgFeatures()
765
+ ]);
766
+ printHelp({ isSuperadmin, features });
767
+ }
693
768
  function normalizeExitCode(value) {
694
769
  if (typeof value === "number") return value;
695
770
  if (typeof value === "string") {
@@ -729,7 +804,7 @@ async function executeCommand(command, rest) {
729
804
  return;
730
805
  }
731
806
  if (command === "install") {
732
- const { runInstall } = await import("./install-XRKEQAFZ.js");
807
+ const { runInstall } = await import("./install-CQLHNZ6U.js");
733
808
  await runInstall(rest);
734
809
  return;
735
810
  }
@@ -776,64 +851,69 @@ async function executeCommand(command, rest) {
776
851
  return;
777
852
  }
778
853
  if (command === "release") {
779
- const { runRelease } = await import("./release-NDRHPW6V.js");
854
+ const { runRelease } = await import("./release-2SMK5Y3V.js");
780
855
  await runRelease(rest);
781
856
  return;
782
857
  }
783
858
  if (command === "docs") {
784
- const { runDocs } = await import("./docs-PVBXPTGR.js");
859
+ const { runDocs } = await import("./docs-BVUEXBY3.js");
785
860
  await runDocs(rest);
786
861
  return;
787
862
  }
788
863
  if (command === "feature-flag") {
789
- const { runFeatureFlag } = await import("./feature-flag-K5REGGDY.js");
864
+ const { runFeatureFlag } = await import("./feature-flag-VJO2TJFT.js");
790
865
  await runFeatureFlag(rest);
791
866
  return;
792
867
  }
793
868
  if (command === "product") {
794
- const { runProduct } = await import("./product-RSZV5HMB.js");
869
+ const { runProduct } = await import("./product-BUJWPYKB.js");
795
870
  await runProduct(rest);
796
871
  return;
797
872
  }
873
+ if (command === "metrics") {
874
+ const { runMetrics } = await import("./metrics-IXICURAA.js");
875
+ await runMetrics(rest);
876
+ return;
877
+ }
798
878
  if (command === "account") {
799
- const { runAccount } = await import("./account-62I7FG5G.js");
879
+ const { runAccount } = await import("./account-ZMV7NEFM.js");
800
880
  await runAccount(rest);
801
881
  return;
802
882
  }
803
883
  if (command === "scenarios" || command === "scenario") {
804
- const { runScenarios } = await import("./scenarios-2HRLCGFY.js");
884
+ const { runScenarios } = await import("./scenarios-DM5FDCAF.js");
805
885
  await runScenarios(rest);
806
886
  return;
807
887
  }
808
888
  if (command === "knobs") {
809
- const { runKnobs } = await import("./knobs-6WLJMB44.js");
889
+ const { runKnobs } = await import("./knobs-ETJAV6YM.js");
810
890
  await runKnobs(rest);
811
891
  return;
812
892
  }
813
893
  if (command === "issues") {
814
- const { runIssues } = await import("./issues-I3V6GEXU.js");
894
+ const { runIssues } = await import("./issues-HK2JA5JS.js");
815
895
  await runIssues(rest);
816
896
  return;
817
897
  }
818
898
  if (command === "credential") {
819
- const { runCredential } = await import("./credential-JGVSEGVH.js");
899
+ const { runCredential } = await import("./credential-X6QKX473.js");
820
900
  await runCredential(rest);
821
901
  return;
822
902
  }
823
903
  if (command === "persona" || command === "personas" || // Backwards-compat aliases for the former "credential template" name.
824
904
  command === "credential-template" || command === "credential-templates") {
825
- const { runCredentialTemplate } = await import("./credential-template-CWWMOKB2.js");
905
+ const { runCredentialTemplate } = await import("./credential-template-GD3D4MBI.js");
826
906
  await runCredentialTemplate(rest);
827
907
  return;
828
908
  }
829
909
  if (command === "workflow") {
830
- const { runWorkflow } = await import("./workflow-4J23FV7K.js");
910
+ const { runWorkflow } = await import("./workflow-DC7WOTTW.js");
831
911
  await runWorkflow(rest);
832
912
  return;
833
913
  }
834
914
  if (command === "spec") {
835
915
  const { resolveConfig: resolveConfig2 } = await import("./auth-DURHUZDW.js");
836
- const { handleSpec } = await import("./spec-XZ2TKUFZ.js");
916
+ const { handleSpec } = await import("./spec-KO5QD6AY.js");
837
917
  const wantsAuth = rest[0] === "compile" || rest[0] === "pull" || rest[0] === "diff";
838
918
  if (wantsAuth) {
839
919
  const { apiUrl, token } = await resolveConfig2(rest);
@@ -845,7 +925,7 @@ async function executeCommand(command, rest) {
845
925
  }
846
926
  if (command === "augmentor" || command === "augmentors") {
847
927
  const { resolveConfig: resolveConfig2 } = await import("./auth-DURHUZDW.js");
848
- const { runAugmentor } = await import("./augmentor-GAF3MFY6.js");
928
+ const { runAugmentor } = await import("./augmentor-7T3L6ZR4.js");
849
929
  if (rest[0] === void 0 || rest[0] === "help" || rest[0] === "--help") {
850
930
  await runAugmentor(rest, "", "");
851
931
  } else {
@@ -856,58 +936,63 @@ async function executeCommand(command, rest) {
856
936
  }
857
937
  if (command === "api-catalog") {
858
938
  const { resolveConfig: resolveConfig2 } = await import("./auth-DURHUZDW.js");
859
- const { runApiCatalog } = await import("./api-catalog-CAJUASVC.js");
939
+ const { runApiCatalog } = await import("./api-catalog-6HNOGVPA.js");
860
940
  const { apiUrl, token } = await resolveConfig2(rest);
861
941
  await runApiCatalog(rest, apiUrl, token);
862
942
  return;
863
943
  }
864
944
  if (command === "skill" || command === "skills") {
865
- const { runSkill } = await import("./skill-4DGPRDUC.js");
945
+ const { runSkill } = await import("./skill-ZU5V2EE5.js");
866
946
  await runSkill(rest);
867
947
  return;
868
948
  }
869
949
  if (command === "task") {
870
- const { runTask } = await import("./task-MCUHAVTD.js");
950
+ const { runTask } = await import("./task-V3JMSJIM.js");
871
951
  await runTask(rest);
872
952
  return;
873
953
  }
874
954
  if (command === "test-suite") {
875
- const { runTestSuite } = await import("./test-suite-BICBRSBP.js");
955
+ const { runTestSuite } = await import("./test-suite-NOYVK6YX.js");
876
956
  await runTestSuite(rest);
877
957
  return;
878
958
  }
879
959
  if (command === "triage") {
880
- const { runTriage } = await import("./triage-M3RZ2ASB.js");
960
+ const { runTriage } = await import("./triage-4RFATHBE.js");
881
961
  await runTriage(rest);
882
962
  return;
883
963
  }
884
964
  if (command === "application" || command === "applications" || command === "property" || command === "properties") {
885
- const { runProperty } = await import("./property-YP4GHQAR.js");
965
+ const { runProperty } = await import("./property-4EXPWRNT.js");
886
966
  await runProperty(rest);
887
967
  return;
888
968
  }
889
969
  if (command === "environment" || command === "env") {
890
- const { runEnvironment } = await import("./environment-WZKIO3R3.js");
970
+ const { runEnvironment } = await import("./environment-WE7VVE6I.js");
891
971
  await runEnvironment(rest);
892
972
  return;
893
973
  }
894
974
  if (command === "sandbox") {
895
- const { runSandbox } = await import("./sandbox-OOCANWOG.js");
975
+ const { runSandbox } = await import("./sandbox-ORAPKOH3.js");
896
976
  await runSandbox(rest);
897
977
  return;
898
978
  }
899
979
  if (command === "attachment" || command === "attachments") {
900
- const { runAttachment } = await import("./attachment-RL4AZUJE.js");
980
+ const { runAttachment } = await import("./attachment-QAHR54HQ.js");
901
981
  await runAttachment(rest);
902
982
  return;
903
983
  }
984
+ if (command === "utilities") {
985
+ const { runUtilities } = await import("./utilities-3WMXE743.js");
986
+ await runUtilities(rest);
987
+ return;
988
+ }
904
989
  if (command === "tag" || command === "tags") {
905
- const { runTag } = await import("./tag-T45MMSCH.js");
990
+ const { runTag } = await import("./tag-R5I72HJ6.js");
906
991
  await runTag(rest);
907
992
  return;
908
993
  }
909
994
  if (command === "trace") {
910
- const { runTrace } = await import("./trace-2BAPMYAS.js");
995
+ const { runTrace } = await import("./trace-NOYEKNO4.js");
911
996
  await runTrace(rest);
912
997
  return;
913
998
  }
@@ -922,7 +1007,7 @@ async function executeCommand(command, rest) {
922
1007
  process4.exit(1);
923
1008
  }
924
1009
  console.log(`Unknown command "${command}".`);
925
- printHelp({ isSuperadmin: await resolveIsSuperadmin() });
1010
+ await showGlobalHelp();
926
1011
  process4.exit(1);
927
1012
  }
928
1013
  async function main(argv) {
@@ -937,11 +1022,11 @@ async function main(argv) {
937
1022
  const [command, ...rest] = argv;
938
1023
  const hasHelpFlag = argv.includes("--help") || argv.includes("-h");
939
1024
  if (hasHelpFlag && (!command || !COMMANDS_WITH_HELP.has(command))) {
940
- printHelp({ isSuperadmin: await resolveIsSuperadmin() });
1025
+ await showGlobalHelp();
941
1026
  return;
942
1027
  }
943
1028
  if (!command || command === "help") {
944
- printHelp({ isSuperadmin: await resolveIsSuperadmin() });
1029
+ await showGlobalHelp();
945
1030
  return;
946
1031
  }
947
1032
  if (command === "version") {