@iowarp/clio-coder 0.3.6 → 0.3.7

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 (258) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +16 -5
  3. package/dist/{acp-2BEHC4DL.js → acp-SK4MD6MM.js} +10 -10
  4. package/dist/{agents-LNNFTM53.js → agents-2FN2K6ME.js} +30 -25
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-KXXFI2VS.js → auth-QIYZWM5I.js} +13 -13
  7. package/dist/{chunk-KHSFENX2.js → chunk-3HAPLH5M.js} +10 -10
  8. package/dist/{chunk-24I7BN55.js → chunk-465YSENW.js} +2 -2
  9. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  10. package/dist/{chunk-CYQKWTG3.js → chunk-4DWFMQDR.js} +4 -4
  11. package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
  12. package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
  13. package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
  14. package/dist/{chunk-K7T3E2SR.js → chunk-5UJ6ECTS.js} +10 -9
  15. package/dist/{chunk-6US73PDB.js → chunk-6M7VS3J3.js} +5 -5
  16. package/dist/{chunk-CJUB2JJ2.js → chunk-6TUKSZVF.js} +5 -5
  17. package/dist/{chunk-5JGRAMKL.js → chunk-AB4XIIVB.js} +8 -6
  18. package/dist/{chunk-R46L2BIR.js → chunk-BMWK7ZIZ.js} +14 -20
  19. package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
  20. package/dist/{chunk-XXQNGV4M.js → chunk-CEYBNUGC.js} +243 -63
  21. package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
  22. package/dist/chunk-DJNLUABN.js +843 -0
  23. package/dist/{chunk-RY3LY4J5.js → chunk-DMD2AGVS.js} +5 -4
  24. package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
  25. package/dist/chunk-DQA7QLMD.js +123 -0
  26. package/dist/chunk-DR52UMZW.js +21 -0
  27. package/dist/{chunk-XF5N4U5A.js → chunk-EBEFWSGL.js} +6 -5
  28. package/dist/{chunk-EYPA3EGJ.js → chunk-EELBMBT6.js} +120 -13
  29. package/dist/{chunk-CKXWIANG.js → chunk-EOOQZZDE.js} +16 -14
  30. package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
  31. package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
  32. package/dist/chunk-GWS3VEIW.js +195 -0
  33. package/dist/{chunk-LYF7OHWH.js → chunk-J7PIKKWC.js} +8 -463
  34. package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
  35. package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
  36. package/dist/{chunk-6XXKFVSN.js → chunk-JTSEDYVQ.js} +7 -7
  37. package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
  38. package/dist/chunk-KZ2H5X4G.js +1026 -0
  39. package/dist/{chunk-QNQHSOLF.js → chunk-LADCF22A.js} +12 -12
  40. package/dist/chunk-M4AKACEO.js +382 -0
  41. package/dist/{chunk-XYDYPRZI.js → chunk-MXI6J5JF.js} +7 -7
  42. package/dist/{chunk-G7MUEIGA.js → chunk-OB5HIGJY.js} +1 -1
  43. package/dist/{chunk-EKY57CSP.js → chunk-OBMAI2DP.js} +61 -767
  44. package/dist/chunk-PD3MESLB.js +242 -0
  45. package/dist/{chunk-ZRGEBJ4T.js → chunk-QCTRSGHQ.js} +21 -21
  46. package/dist/chunk-RVG5JXAL.js +41 -0
  47. package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
  48. package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
  49. package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
  50. package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
  51. package/dist/chunk-UND3GU2L.js +103 -0
  52. package/dist/{chunk-QM3F2GKX.js → chunk-UUANF5CR.js} +2247 -2096
  53. package/dist/chunk-UVDSQ6LW.js +472 -0
  54. package/dist/{chunk-DJVECN66.js → chunk-VQNODYQ4.js} +14 -14
  55. package/dist/{chunk-3BPUFZDL.js → chunk-VREKEFLL.js} +3 -3
  56. package/dist/{chunk-PBTHKCPN.js → chunk-WJHBC77E.js} +6 -6
  57. package/dist/{chunk-XE2VEJHX.js → chunk-X2KV5FXT.js} +2 -2
  58. package/dist/{chunk-ZXF4XRKW.js → chunk-XEGB6BCN.js} +157 -7
  59. package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
  60. package/dist/{verifiers-NCBTHHN2.js → chunk-YTYFXUI3.js} +65 -322
  61. package/dist/{chunk-OH3TOQTB.js → chunk-ZGH7FGS5.js} +13 -7
  62. package/dist/cli/index.js +32 -30
  63. package/dist/{clio-M2KGYUFZ.js → clio-WBVQEBKO.js} +7 -7
  64. package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +3 -3
  65. package/dist/{components-5TTYYX6G.js → components-F7OEATSO.js} +4 -4
  66. package/dist/{config-XUUYQIWO.js → config-TRBL3RCF.js} +34 -29
  67. package/dist/{configure-IHJ7YOMV.js → configure-OLCVPHNM.js} +15 -15
  68. package/dist/{context-74JLXAWD.js → context-MJIJ6GOX.js} +11 -11
  69. package/dist/{context-ZQ7SIFJV.js → context-WFPKQSM6.js} +19 -3
  70. package/dist/{context-75MIWW3U.js → context-XEWE3MOJ.js} +31 -26
  71. package/dist/{context-clear-GYKWNUML.js → context-clear-KNOS2JPB.js} +31 -26
  72. package/dist/{context-working-set-UX5KEP4J.js → context-working-set-EUXAZI6N.js} +8 -8
  73. package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-B7MTOVKL.js} +313 -53
  74. package/dist/{docs-6FZSCG5B.js → docs-FLJTIDSE.js} +4 -4
  75. package/dist/{doctor-SVJ5BZCW.js → doctor-RN4YKO2X.js} +14 -14
  76. package/dist/{eval-CG6LLBLD.js → eval-RUBJVSNQ.js} +8 -7
  77. package/dist/{evidence-ZYFIEN42.js → evidence-JZNBUOQZ.js} +30 -25
  78. package/dist/{evolve-QGEXEMDW.js → evolve-FJVC4KKI.js} +30 -25
  79. package/dist/{extensions-ADGNCJJD.js → extensions-IQL36S7K.js} +4 -4
  80. package/dist/{fleet-S5R4ZOQY.js → fleet-BDKYJFCP.js} +214 -360
  81. package/dist/fleet-commands-ZFIWZSB3.js +70 -0
  82. package/dist/fleet-graph-Y6HPXIVF.js +125 -0
  83. package/dist/fleet-new-RDVJLHHH.js +48 -0
  84. package/dist/fleet-validate-BIYREGIK.js +79 -0
  85. package/dist/{init-5DRU55YR.js → init-LQUB5COQ.js} +44 -37
  86. package/dist/library-NJAHIGG4.js +217 -0
  87. package/dist/{memory-7YKKR6UC.js → memory-OG6HOYKM.js} +31 -26
  88. package/dist/{models-ZPOLRU2C.js → models-5ZG5XY7J.js} +21 -20
  89. package/dist/{monitor-US5F5YGZ.js → monitor-TJ7AMTGB.js} +49 -30
  90. package/dist/{orchestrator-E2AL4T5N.js → orchestrator-WZYB54DM.js} +3827 -581
  91. package/dist/{paths-E7KYAQWE.js → paths-XUC7GS6E.js} +4 -4
  92. package/dist/{reset-KZ652EK6.js → reset-PXQT45IY.js} +7 -7
  93. package/dist/{run-SRNBKDWD.js → run-FQ74YF62.js} +53 -45
  94. package/dist/{share-CGZE33UP.js → share-FW7SVCL3.js} +33 -9
  95. package/dist/{skills-S2X4DLY5.js → skills-7E7IRB3R.js} +24 -8
  96. package/dist/{skills-eval-W2GGIC4R.js → skills-eval-LI75W6OK.js} +34 -27
  97. package/dist/{targets-54SWINWB.js → targets-4CIFKCTW.js} +23 -22
  98. package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WUZY7ZV5.js} +4 -4
  99. package/dist/{uninstall-BVLWXKBT.js → uninstall-7FV7IP4E.js} +4 -4
  100. package/dist/{upgrade-JKAR27XC.js → upgrade-K2HVIVMQ.js} +20 -19
  101. package/dist/{usage-MSAWCLX4.js → usage-GTZELZQX.js} +116 -49
  102. package/dist/verifiers-RLAHT27O.js +336 -0
  103. package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
  104. package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-ASIFASCN.js} +45 -37
  105. package/dist/worker/entry.js +38 -35
  106. package/docs/README.md +3 -2
  107. package/docs/acp.md +1 -1
  108. package/docs/alcf-provider.md +1 -1
  109. package/docs/architecture.md +2 -2
  110. package/docs/artifact-versions.md +10 -6
  111. package/docs/built-in-agents.md +26 -2
  112. package/docs/capacity-and-scheduling.md +1 -1
  113. package/docs/commands-and-modes.md +82 -2
  114. package/docs/configuration-and-targets.md +79 -2
  115. package/docs/context-engine.md +1 -1
  116. package/docs/development-pipeline.md +1 -1
  117. package/docs/dispatch-architecture-rationale.md +1 -1
  118. package/docs/documentation-coverage.md +3 -3
  119. package/docs/documentation-guide.md +3 -3
  120. package/docs/eval-runner.md +1 -1
  121. package/docs/evals-internal.md +1 -1
  122. package/docs/evidence-and-memory.md +5 -5
  123. package/docs/evolution.md +1 -1
  124. package/docs/exit-codes-and-output.md +4 -1
  125. package/docs/extensions-and-sharing.md +6 -2
  126. package/docs/fleet-demo-runbook.md +2 -2
  127. package/docs/fleet-dispatch.md +197 -10
  128. package/docs/git-commit-provenance.md +2 -2
  129. package/docs/glossary.md +1 -1
  130. package/docs/installation-and-lifecycle.md +2 -2
  131. package/docs/middleware-and-components.md +2 -1
  132. package/docs/model-catalog.md +1 -1
  133. package/docs/observability.md +55 -8
  134. package/docs/proactive-memory.md +1 -1
  135. package/docs/prompt-envelope-and-tools.md +1 -1
  136. package/docs/provider-adapter-cookbook.md +1 -1
  137. package/docs/release-cut-checklist.md +79 -64
  138. package/docs/resource-library.md +59 -0
  139. package/docs/safety-model.md +2 -2
  140. package/docs/scientific-validation.md +3 -3
  141. package/docs/session-lifecycle.md +37 -1
  142. package/docs/skills-marketplace.md +16 -3
  143. package/docs/tool-usage.md +14 -7
  144. package/docs/trace-store.md +1 -1
  145. package/docs/troubleshooting.md +1 -1
  146. package/docs/tui-design.md +1 -1
  147. package/docs/worker-dispatch-mechanics.md +3 -3
  148. package/package.json +1 -1
  149. package/src/cli/fleet-commands.ts +37 -0
  150. package/src/cli/fleet-graph.ts +102 -0
  151. package/src/cli/fleet-new.ts +36 -0
  152. package/src/cli/fleet-preflight.ts +121 -0
  153. package/src/cli/fleet-validate.ts +30 -0
  154. package/src/cli/fleet.ts +173 -335
  155. package/src/cli/index.ts +3 -1
  156. package/src/cli/library.ts +190 -0
  157. package/src/cli/share.ts +13 -1
  158. package/src/cli/usage.ts +111 -19
  159. package/src/core/bus-events.ts +4 -0
  160. package/src/core/commit-attribution.ts +4 -4
  161. package/src/core/config.ts +130 -0
  162. package/src/core/defaults.ts +81 -0
  163. package/src/domains/agents/builtins/architect.md +1 -0
  164. package/src/domains/agents/builtins/oracle.md +33 -0
  165. package/src/domains/agents/catalog.ts +13 -1
  166. package/src/domains/agents/fleet-contract.ts +278 -16
  167. package/src/domains/agents/index.ts +14 -0
  168. package/src/domains/agents/result-contract.ts +235 -1
  169. package/src/domains/config/classify.ts +4 -0
  170. package/src/domains/dispatch/active-route-planner.ts +14 -0
  171. package/src/domains/dispatch/backoff.ts +2 -1
  172. package/src/domains/dispatch/capability-match.ts +1 -0
  173. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  174. package/src/domains/dispatch/contract.ts +34 -0
  175. package/src/domains/dispatch/delegation-plan.ts +167 -0
  176. package/src/domains/dispatch/execution-plan.ts +76 -5
  177. package/src/domains/dispatch/execution-role.ts +3 -1
  178. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  179. package/src/domains/dispatch/extension.ts +258 -9
  180. package/src/domains/dispatch/fleet-gate.ts +14 -0
  181. package/src/domains/dispatch/fleet-plan.ts +63 -3
  182. package/src/domains/dispatch/fleet-run.ts +737 -0
  183. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  184. package/src/domains/dispatch/host-verification.ts +178 -0
  185. package/src/domains/dispatch/index.ts +38 -0
  186. package/src/domains/dispatch/intent.ts +159 -0
  187. package/src/domains/dispatch/receipt-integrity.ts +8 -4
  188. package/src/domains/dispatch/state.ts +36 -3
  189. package/src/domains/dispatch/types.ts +51 -6
  190. package/src/domains/dispatch/validation.ts +66 -6
  191. package/src/domains/evidence/trust-status.ts +10 -1
  192. package/src/domains/middleware/index.ts +15 -0
  193. package/src/domains/middleware/watchdog.ts +281 -0
  194. package/src/domains/observability/contract.ts +3 -1
  195. package/src/domains/observability/cost.ts +12 -1
  196. package/src/domains/observability/extension.ts +2 -2
  197. package/src/domains/observability/index.ts +10 -0
  198. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  199. package/src/domains/resources/index.ts +20 -0
  200. package/src/domains/resources/library.ts +326 -0
  201. package/src/domains/resources/skills/marketplace.ts +37 -12
  202. package/src/domains/session/handoff.ts +629 -0
  203. package/src/domains/share/archive.ts +67 -2
  204. package/src/entry/orchestrator.ts +37 -0
  205. package/src/interactive/bus-notices.ts +26 -0
  206. package/src/interactive/chat-loop.ts +235 -1
  207. package/src/interactive/chat-renderer.ts +22 -0
  208. package/src/interactive/cost-overlay.ts +31 -3
  209. package/src/interactive/council-dispatch.ts +30 -0
  210. package/src/interactive/council-grid.ts +213 -0
  211. package/src/interactive/council.ts +99 -0
  212. package/src/interactive/dispatch-board.ts +260 -16
  213. package/src/interactive/fleet-run-preview.ts +307 -0
  214. package/src/interactive/footer/notifications.ts +219 -0
  215. package/src/interactive/handoff-round.ts +56 -0
  216. package/src/interactive/interactive-application.ts +43 -1
  217. package/src/interactive/interactive-event-projection.ts +9 -1
  218. package/src/interactive/interactive-slash-runtime.ts +52 -2
  219. package/src/interactive/interactive-subscriptions.ts +14 -2
  220. package/src/interactive/oracle.ts +179 -0
  221. package/src/interactive/overlay-ask-user-lifecycle.ts +6 -0
  222. package/src/interactive/overlay-general-openers.ts +190 -1
  223. package/src/interactive/overlay-key-routing.ts +17 -1
  224. package/src/interactive/overlay-lifecycle.ts +41 -1
  225. package/src/interactive/overlay-permission-lifecycle.ts +10 -0
  226. package/src/interactive/overlay-resource-openers.ts +11 -3
  227. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  228. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  229. package/src/interactive/overlays/handoff-review.ts +185 -0
  230. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  231. package/src/interactive/overlays/list-overlay.ts +168 -2
  232. package/src/interactive/overlays/settings.ts +101 -4
  233. package/src/interactive/overlays/side-question.ts +139 -0
  234. package/src/interactive/overlays/skills-hub.ts +401 -15
  235. package/src/interactive/side-question.ts +171 -0
  236. package/src/interactive/slash-commands.ts +432 -5
  237. package/src/interactive/slash-spec.ts +19 -6
  238. package/src/interactive/theme/tokens.ts +30 -0
  239. package/src/interactive/turn-middleware.ts +15 -1
  240. package/src/interactive/watchdog-run.ts +75 -0
  241. package/src/interactive/worker-share.ts +56 -1
  242. package/src/interactive/worker-stream.ts +7 -0
  243. package/src/tools/bootstrap.ts +3 -0
  244. package/src/tools/compete-worktrees.ts +13 -79
  245. package/src/tools/dispatch-admission.ts +242 -8
  246. package/src/tools/dispatch-arguments.ts +57 -1
  247. package/src/tools/dispatch-plan.ts +136 -6
  248. package/src/tools/dispatch-runner.ts +319 -13
  249. package/src/tools/dispatch-types.ts +20 -1
  250. package/src/tools/dispatch.ts +72 -2
  251. package/src/tools/monitor.ts +16 -0
  252. package/src/tools/profiles.ts +18 -4
  253. package/src/tools/task-worktree.ts +238 -0
  254. package/src/tools/verify/authoring.ts +61 -1
  255. package/src/tools/verify/scripts.ts +62 -0
  256. package/src/tools/worker-evidence.ts +2 -1
  257. package/src/worker/spec-contract.ts +1 -0
  258. package/dist/chunk-HC4CLZ2Y.js +0 -68
@@ -10,10 +10,10 @@ import {
10
10
  } from "./chunk-WHGPSPT5.js";
11
11
  import {
12
12
  isTerminalRunEnvelope
13
- } from "./chunk-XXQNGV4M.js";
13
+ } from "./chunk-CEYBNUGC.js";
14
14
  import {
15
15
  taskBoardCounts
16
- } from "./chunk-43AOLP7E.js";
16
+ } from "./chunk-5FR74PWO.js";
17
17
  import {
18
18
  SKILL_SUGGESTION_ANCHOR,
19
19
  SKILL_SUGGESTION_PREFIX
@@ -25,13 +25,13 @@ import {
25
25
  import {
26
26
  ToolNames
27
27
  } from "./chunk-CGKSTWHD.js";
28
- import {
29
- reportCommitAttributionDiagnostic,
30
- withManagedGitCommitAttributionEnvironment
31
- } from "./chunk-VEZEGCGW.js";
32
28
  import {
33
29
  ceilChars
34
30
  } from "./chunk-GEYXPTRF.js";
31
+ import {
32
+ reportCommitAttributionDiagnostic,
33
+ withManagedGitCommitAttributionEnvironment
34
+ } from "./chunk-D4MDIG46.js";
35
35
  import {
36
36
  require_dist
37
37
  } from "./chunk-APJ265NV.js";
@@ -2097,6 +2097,153 @@ function createMiddlewareToolChoiceControl() {
2097
2097
  };
2098
2098
  }
2099
2099
 
2100
+ // src/domains/middleware/watchdog.ts
2101
+ init_esm_shims();
2102
+ var WATCHDOG_REGISTRATION_ID = "observer.watchdog";
2103
+ var WATCHDOG_DIFF_MAX_BYTES = 12 * 1024;
2104
+ var WATCHDOG_PATHS_MAX = 40;
2105
+ var WATCHDOG_TRUNCATION_MARKER = "\n[diff truncated]";
2106
+ var MUTATING_TOOL_NAMES = /* @__PURE__ */ new Set([ToolNames.Write, ToolNames.Edit, ToolNames.Artifact]);
2107
+ var NO_EFFECTS4 = [];
2108
+ function stringValue2(value) {
2109
+ return typeof value === "string" && value.length > 0 ? value : null;
2110
+ }
2111
+ function firstPath(details) {
2112
+ const paths = details?.paths;
2113
+ if (!Array.isArray(paths)) return null;
2114
+ for (const entry of paths) {
2115
+ const path = stringValue2(entry);
2116
+ if (path !== null) return path;
2117
+ }
2118
+ return null;
2119
+ }
2120
+ function coalesceTurnDiff(byPath, maxBytes = WATCHDOG_DIFF_MAX_BYTES) {
2121
+ const blocks = [];
2122
+ let index = 0;
2123
+ for (const [path, diff] of byPath) {
2124
+ if (index >= WATCHDOG_PATHS_MAX) {
2125
+ blocks.push(`[${byPath.size - WATCHDOG_PATHS_MAX} more changed path(s) omitted]`);
2126
+ break;
2127
+ }
2128
+ blocks.push(`--- ${path}
2129
+ ${diff}`);
2130
+ index += 1;
2131
+ }
2132
+ const whole = blocks.join("\n\n");
2133
+ if (Buffer.byteLength(whole, "utf8") <= maxBytes) return whole;
2134
+ const room = Math.max(0, maxBytes - Buffer.byteLength(WATCHDOG_TRUNCATION_MARKER, "utf8"));
2135
+ const buffer = Buffer.from(whole, "utf8");
2136
+ let cut = Math.min(room, buffer.byteLength);
2137
+ while (cut > 0) {
2138
+ const next = buffer[cut];
2139
+ if (next === void 0 || (next & 192) !== 128) break;
2140
+ cut -= 1;
2141
+ }
2142
+ return `${buffer.subarray(0, cut).toString("utf8")}${WATCHDOG_TRUNCATION_MARKER}`;
2143
+ }
2144
+ var WATCHDOG_TASK = "Review the coalesced diff in the briefing against the scope it names. Report one check per concern: a change outside the stated scope, a change the scope required that the diff does not make, or a defect visible in the diff itself. Run no commands and change nothing.";
2145
+ function watchdogBriefing(trigger) {
2146
+ const scope = trigger.scope === null ? "(no task board; scope is unstated)" : trigger.scope;
2147
+ const paths = trigger.paths.length === 0 ? "(none)" : trigger.paths.join("\n");
2148
+ return [
2149
+ "## Current scope",
2150
+ scope,
2151
+ "",
2152
+ "## Changed paths",
2153
+ paths,
2154
+ "",
2155
+ "## Coalesced diff for this turn",
2156
+ trigger.diff
2157
+ ].join("\n");
2158
+ }
2159
+ function createWatchdogRegistration(deps) {
2160
+ const diffByPath = /* @__PURE__ */ new Map();
2161
+ let toolCalls = 0;
2162
+ let dropped = 0;
2163
+ let inFlight = false;
2164
+ let outstanding = Promise.resolve();
2165
+ const active = () => {
2166
+ if (deps.firesOnThisSurface === false) return null;
2167
+ let settings;
2168
+ try {
2169
+ settings = deps.getSettings();
2170
+ } catch {
2171
+ return null;
2172
+ }
2173
+ return settings.enabled ? settings : null;
2174
+ };
2175
+ const resetTurn = () => {
2176
+ diffByPath.clear();
2177
+ toolCalls = 0;
2178
+ };
2179
+ const fire = (reason) => {
2180
+ if (diffByPath.size === 0) return;
2181
+ if (inFlight) {
2182
+ dropped += 1;
2183
+ return;
2184
+ }
2185
+ const trigger = {
2186
+ reason,
2187
+ diff: coalesceTurnDiff(diffByPath),
2188
+ paths: [...diffByPath.keys()].slice(0, WATCHDOG_PATHS_MAX),
2189
+ scope: scopeNow(),
2190
+ toolCalls
2191
+ };
2192
+ inFlight = true;
2193
+ let started;
2194
+ try {
2195
+ started = deps.run(trigger);
2196
+ } catch {
2197
+ inFlight = false;
2198
+ return;
2199
+ }
2200
+ outstanding = started.catch(() => {
2201
+ }).finally(() => {
2202
+ inFlight = false;
2203
+ });
2204
+ };
2205
+ const scopeNow = () => {
2206
+ try {
2207
+ return deps.getScope?.() ?? null;
2208
+ } catch {
2209
+ return null;
2210
+ }
2211
+ };
2212
+ return {
2213
+ id: WATCHDOG_REGISTRATION_ID,
2214
+ description: "review a mutating turn's coalesced diff against the board scope with a read-only verifier run",
2215
+ hooks: ["after_tool", "turn_end"],
2216
+ evaluate(input) {
2217
+ const settings = active();
2218
+ if (settings === null) {
2219
+ if (input.hook === "turn_end") resetTurn();
2220
+ return NO_EFFECTS4;
2221
+ }
2222
+ if (input.hook === "after_tool") {
2223
+ toolCalls += 1;
2224
+ recordMutation(input);
2225
+ const cadence = settings.cadenceToolCalls;
2226
+ if (cadence !== void 0 && cadence >= 1 && toolCalls % cadence === 0) fire("cadence");
2227
+ return NO_EFFECTS4;
2228
+ }
2229
+ if (input.hook !== "turn_end") return NO_EFFECTS4;
2230
+ fire("turn_end");
2231
+ resetTurn();
2232
+ return NO_EFFECTS4;
2233
+ },
2234
+ droppedTriggers: () => dropped,
2235
+ runInFlight: () => inFlight,
2236
+ whenIdle: () => outstanding
2237
+ };
2238
+ function recordMutation(input) {
2239
+ if (input.metadata?.resultKind !== "ok") return;
2240
+ if (input.toolName === void 0 || !MUTATING_TOOL_NAMES.has(input.toolName)) return;
2241
+ const diff = stringValue2(input.toolResultDetails?.diff);
2242
+ if (diff === null) return;
2243
+ diffByPath.set(firstPath(input.toolResultDetails) ?? input.toolName, diff);
2244
+ }
2245
+ }
2246
+
2100
2247
  // src/domains/middleware/index.ts
2101
2248
  init_esm_shims();
2102
2249
 
@@ -2252,6 +2399,9 @@ export {
2252
2399
  createTaskBoardReminderRegistration,
2253
2400
  createTaskNudgeRegistration,
2254
2401
  createMiddlewareToolChoiceControl,
2402
+ WATCHDOG_TASK,
2403
+ watchdogBriefing,
2404
+ createWatchdogRegistration,
2255
2405
  MiddlewareDomainModule
2256
2406
  };
2257
- //# sourceMappingURL=chunk-ZXF4XRKW.js.map
2407
+ //# sourceMappingURL=chunk-XEGB6BCN.js.map
@@ -5,7 +5,7 @@ import {
5
5
  settingsPath,
6
6
  updateSavedSettingsDocument,
7
7
  validateSettings
8
- } from "./chunk-AD2SYQYC.js";
8
+ } from "./chunk-UHXRNZ2J.js";
9
9
  import {
10
10
  require_dist
11
11
  } from "./chunk-APJ265NV.js";
@@ -226,4 +226,4 @@ export {
226
226
  updateLayeredSettings,
227
227
  settingsSourceFor
228
228
  };
229
- //# sourceMappingURL=chunk-E25LMLRW.js.map
229
+ //# sourceMappingURL=chunk-YD734TPH.js.map
@@ -4,52 +4,34 @@ import {
4
4
  tomlTableAt
5
5
  } from "./chunk-LCGCVYZ4.js";
6
6
  import {
7
- discoverDeclaredChecksAtRoot,
8
7
  verifyTool
9
- } from "./chunk-PCZJO5TI.js";
10
- import "./chunk-NILBFAPG.js";
8
+ } from "./chunk-UFQ3F4FW.js";
9
+ import {
10
+ discoverDeclaredChecksAtRoot,
11
+ discoverDeclaredProjectEntriesAtRoot
12
+ } from "./chunk-PD3MESLB.js";
11
13
  import {
12
14
  PROJECT_VERIFIER_CATALOG_CAPS,
13
15
  PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
14
16
  PROJECT_VERIFIER_CATALOG_VERSION,
15
17
  compareCodepoints,
16
- loadProjectVerifierCatalog,
17
18
  parseProjectVerifierCatalogText
18
- } from "./chunk-FYYLNIL5.js";
19
+ } from "./chunk-GH5622CP.js";
19
20
  import {
20
21
  isVerificationScriptName
21
22
  } from "./chunk-UL3WSD3F.js";
22
- import "./chunk-VG7TBQIY.js";
23
- import "./chunk-OQE5J4C6.js";
24
- import "./chunk-ECH6PKUQ.js";
25
- import "./chunk-6XLNIQDB.js";
26
- import "./chunk-5B2AEOW5.js";
27
- import "./chunk-CGKSTWHD.js";
28
- import {
29
- printError,
30
- printOk
31
- } from "./chunk-PPAMZ32Z.js";
32
- import "./chunk-5TSRNF4G.js";
33
23
  import {
34
24
  SAFE_EXEC_DEFAULT_TIMEOUT_MS,
35
25
  resolveSafeCwd
36
- } from "./chunk-VEZEGCGW.js";
37
- import "./chunk-FQ4SKYE4.js";
38
- import "./chunk-FCSXB6T2.js";
26
+ } from "./chunk-D4MDIG46.js";
39
27
  import {
40
28
  require_dist
41
29
  } from "./chunk-APJ265NV.js";
42
- import "./chunk-YXLYO42X.js";
43
- import "./chunk-BNAZZHFG.js";
44
- import "./chunk-6EJMN2Y3.js";
45
30
  import {
46
31
  __toESM,
47
32
  init_esm_shims
48
33
  } from "./chunk-3R73A4XB.js";
49
34
 
50
- // src/cli/verifiers.ts
51
- init_esm_shims();
52
-
53
35
  // src/tools/verify/authoring.ts
54
36
  init_esm_shims();
55
37
  var import_yaml = __toESM(require_dist(), 1);
@@ -259,7 +241,7 @@ function pythonProposals(workspaceRoot, diagnostics) {
259
241
  if (document === null) {
260
242
  diagnostics.push(`${pyprojectPath}: invalid TOML; Python discovery skipped.`);
261
243
  } else {
262
- for (const [path2, section, module, id, description, tags2] of [
244
+ for (const [path2, section, module, id, description, tags] of [
263
245
  [
264
246
  ["tool", "pytest", "ini_options"],
265
247
  "tool.pytest.ini_options",
@@ -278,7 +260,7 @@ function pythonProposals(workspaceRoot, diagnostics) {
278
260
  command: ["python", "-m", module],
279
261
  cwd: ".",
280
262
  timeoutMs: SAFE_EXEC_DEFAULT_TIMEOUT_MS,
281
- tags: [...tags2],
263
+ tags: [...tags],
282
264
  provenance: {
283
265
  kind: "python-runner",
284
266
  path: pyprojectPath,
@@ -343,6 +325,52 @@ function pythonProposals(workspaceRoot, diagnostics) {
343
325
  }
344
326
  return proposals;
345
327
  }
328
+ function discoverDeclaredProjectCommands(workspaceRoot = process.cwd()) {
329
+ const commands = [];
330
+ const add = (id, command, pathValue, detail, kind) => {
331
+ commands.push({
332
+ id,
333
+ command,
334
+ provenance: { kind, path: pathValue, detail, authority: "project-declared" }
335
+ });
336
+ };
337
+ for (const entry of discoverDeclaredProjectEntriesAtRoot(workspaceRoot)) {
338
+ add(entry.id, entry.command, entry.path, entry.detail, entry.kind);
339
+ }
340
+ const pyprojectText = regularFileText(path.join(workspaceRoot, "pyproject.toml"), workspaceRoot);
341
+ if (typeof pyprojectText === "string") {
342
+ const document = parseTomlDocument(pyprojectText);
343
+ if (document !== null) {
344
+ for (const [tablePath, label] of [
345
+ [["project", "scripts"], "project.scripts"],
346
+ [["tool", "poetry", "scripts"], "tool.poetry.scripts"]
347
+ ]) {
348
+ const scripts = tomlTableAt(document, tablePath);
349
+ if (scripts === null) continue;
350
+ for (const [name, target] of Object.entries(scripts).sort(([left], [right]) => compareCodepoints(left, right))) {
351
+ if (typeof target === "string") add(name, [name], "pyproject.toml", `[${label}] entry '${name}'`, "python-runner");
352
+ }
353
+ }
354
+ for (const [tablePath, module, id, label] of [
355
+ [["tool", "pytest", "ini_options"], "pytest", "pytest", "tool.pytest.ini_options"],
356
+ [["tool", "tox"], "tox", "tox", "tool.tox"],
357
+ [["tool", "nox"], "nox", "nox", "tool.nox"]
358
+ ]) {
359
+ if (tomlTableAt(document, tablePath) !== null)
360
+ add(id, ["python", "-m", module], "pyproject.toml", `[${label}]`, "python-runner");
361
+ }
362
+ }
363
+ }
364
+ const seen = /* @__PURE__ */ new Set();
365
+ return commands.filter((entry) => {
366
+ let id = slug(entry.id, "command");
367
+ let suffix = 2;
368
+ while (seen.has(id)) id = `${slug(entry.id, "command")}-${suffix++}`;
369
+ seen.add(id);
370
+ entry.id = id;
371
+ return true;
372
+ });
373
+ }
346
374
  function goProposals(workspaceRoot, diagnostics) {
347
375
  const relative = "go.mod";
348
376
  const text = regularFileText(path.join(workspaceRoot, relative), workspaceRoot);
@@ -506,14 +534,14 @@ function validationContractProposals(workspaceRoot, diagnostics) {
506
534
  const description = typeof record?.description === "string" ? record.description : `Run validation contract command ${JSON.stringify(argv)}`;
507
535
  const cwd = typeof record?.cwd === "string" ? record.cwd : ".";
508
536
  const timeoutMs = typeof record?.timeoutMs === "number" ? record.timeoutMs : SAFE_EXEC_DEFAULT_TIMEOUT_MS;
509
- const tags2 = Array.isArray(record?.tags) ? record.tags.filter((tag) => typeof tag === "string") : [];
537
+ const tags = Array.isArray(record?.tags) ? record.tags.filter((tag) => typeof tag === "string") : [];
510
538
  proposals.push({
511
539
  preferredId: declaredId,
512
540
  description,
513
541
  command: argv,
514
542
  cwd,
515
543
  timeoutMs,
516
- tags: tags2.length > 0 ? tags2 : ["scientific", "validation"],
544
+ tags: tags.length > 0 ? tags : ["scientific", "validation"],
517
545
  provenance: {
518
546
  kind: "validation-contract",
519
547
  path: relative,
@@ -640,8 +668,8 @@ function createVerifierDraft(discovery, options = {}) {
640
668
  ...discovery.catalogText === void 0 ? {} : { catalogText: discovery.catalogText }
641
669
  };
642
670
  }
643
- function catalogEntry({ id, description, command, cwd, timeoutMs, tags: tags2 }) {
644
- return { id, description, command: [...command], cwd, timeoutMs, tags: [...tags2] };
671
+ function catalogEntry({ id, description, command, cwd, timeoutMs, tags }) {
672
+ return { id, description, command: [...command], cwd, timeoutMs, tags: [...tags] };
645
673
  }
646
674
  function serializeVerifierDraft(draft) {
647
675
  const checks = [...draft.checks].sort((left, right) => compareCodepoints(left.id, right.id));
@@ -925,296 +953,11 @@ async function runVerifierAuthoringWorkflow(options) {
925
953
  };
926
954
  }
927
955
 
928
- // src/cli/verifiers.ts
929
- var HELP = `Project verifier authoring
930
-
931
- Usage:
932
- clio-coder verifiers discover
933
- clio-coder verifiers author [--exclude <id>] [--rename <old>=<new>] [--dry-run <id>] [--yes]
934
- clio-coder verifiers validate
935
- clio-coder verifiers dry-run <id>
936
- clio-coder verifiers add --id <id> --description <text> --command <json-argv> [fields] [--yes]
937
- clio-coder verifiers edit <id> [--description <text>] [--command <json-argv>] [fields] [--yes]
938
- clio-coder verifiers rename <old> <new> [--yes]
939
- clio-coder verifiers remove <id> [--yes]
940
-
941
- Fields:
942
- --cwd <path> repository-relative working directory (default .)
943
- --timeout-ms <number> bounded timeout in milliseconds (default 120000)
944
- --tags <a,b> comma-separated catalog tags
945
-
946
- Discovery and every preview are read-only. Mutating commands write only with
947
- --yes after printing the exact argv, cwd, timeout, tags, source provenance, and
948
- effective execution authority. dry-run invokes the production verify path.
949
- `;
950
- var VALUE_OPTIONS = /* @__PURE__ */ new Set([
951
- "--id",
952
- "--description",
953
- "--command",
954
- "--cwd",
955
- "--timeout-ms",
956
- "--tags",
957
- "--exclude",
958
- "--rename",
959
- "--dry-run"
960
- ]);
961
- function parseAuthoringArgs(argv) {
962
- const positional = [];
963
- const values = /* @__PURE__ */ new Map();
964
- let yes = false;
965
- let help = false;
966
- for (let index = 0; index < argv.length; index += 1) {
967
- const arg = argv[index];
968
- if (arg === "--yes") {
969
- yes = true;
970
- continue;
971
- }
972
- if (arg === "--help" || arg === "-h") {
973
- help = true;
974
- continue;
975
- }
976
- if (arg?.startsWith("--") === true) {
977
- if (!VALUE_OPTIONS.has(arg)) return { yes, help, positional, values, error: `unknown option: ${arg}` };
978
- const value = argv[index + 1];
979
- if (value === void 0 || value.startsWith("--")) {
980
- return { yes, help, positional, values, error: `${arg} requires a value` };
981
- }
982
- const prior = values.get(arg) ?? [];
983
- prior.push(value);
984
- values.set(arg, prior);
985
- index += 1;
986
- continue;
987
- }
988
- if (arg !== void 0) positional.push(arg);
989
- }
990
- return { yes, help, positional, values };
991
- }
992
- function oneValue(parsed, option) {
993
- return parsed.values.get(option)?.at(-1);
994
- }
995
- function parseCommand(value) {
996
- if (value === void 0) return new Error("--command is required and must be a JSON argv array");
997
- let parsed;
998
- try {
999
- parsed = JSON.parse(value);
1000
- } catch (error) {
1001
- return new Error(`--command must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);
1002
- }
1003
- if (!Array.isArray(parsed) || parsed.length === 0 || parsed.some((entry) => typeof entry !== "string")) {
1004
- return new Error("--command must be a non-empty JSON string array");
1005
- }
1006
- return parsed;
1007
- }
1008
- function parseTimeout(value) {
1009
- if (value === void 0) return SAFE_EXEC_DEFAULT_TIMEOUT_MS;
1010
- const parsed = Number(value);
1011
- if (!Number.isInteger(parsed) || parsed <= 0) return new Error("--timeout-ms must be a positive integer");
1012
- return parsed;
1013
- }
1014
- function tags(value) {
1015
- return value === void 0 ? [] : value.split(",").map((tag) => tag.trim()).filter((tag) => tag.length > 0);
1016
- }
1017
- function requiredValue(parsed, option) {
1018
- const value = oneValue(parsed, option);
1019
- return value === void 0 || value.length === 0 ? new Error(`${option} is required`) : value;
1020
- }
1021
- function authorRevisions(parsed) {
1022
- const revisions = [];
1023
- for (const id of parsed.values.get("--exclude") ?? []) revisions.push({ kind: "remove", id });
1024
- for (const rename of parsed.values.get("--rename") ?? []) {
1025
- const separator = rename.indexOf("=");
1026
- if (separator <= 0 || separator === rename.length - 1) {
1027
- return new Error("--rename must use <old>=<new>");
1028
- }
1029
- revisions.push({ kind: "rename", id: rename.slice(0, separator), newId: rename.slice(separator + 1) });
1030
- }
1031
- return revisions;
1032
- }
1033
- function addRevision(parsed) {
1034
- const id = requiredValue(parsed, "--id");
1035
- if (id instanceof Error) return id;
1036
- const description = requiredValue(parsed, "--description");
1037
- if (description instanceof Error) return description;
1038
- const command = parseCommand(oneValue(parsed, "--command"));
1039
- if (command instanceof Error) return command;
1040
- const timeoutMs = parseTimeout(oneValue(parsed, "--timeout-ms"));
1041
- if (timeoutMs instanceof Error) return timeoutMs;
1042
- return {
1043
- kind: "add",
1044
- check: {
1045
- id,
1046
- description,
1047
- command,
1048
- cwd: oneValue(parsed, "--cwd") ?? ".",
1049
- timeoutMs,
1050
- tags: tags(oneValue(parsed, "--tags"))
1051
- }
1052
- };
1053
- }
1054
- function editRevision(parsed) {
1055
- const id = parsed.positional[1];
1056
- if (id === void 0) return new Error("edit requires a check ID");
1057
- const changes = {};
1058
- const description = oneValue(parsed, "--description");
1059
- if (description !== void 0) changes.description = description;
1060
- const commandValue = oneValue(parsed, "--command");
1061
- if (commandValue !== void 0) {
1062
- const command = parseCommand(commandValue);
1063
- if (command instanceof Error) return command;
1064
- changes.command = command;
1065
- }
1066
- const cwd = oneValue(parsed, "--cwd");
1067
- if (cwd !== void 0) changes.cwd = cwd;
1068
- const timeoutValue = oneValue(parsed, "--timeout-ms");
1069
- if (timeoutValue !== void 0) {
1070
- const timeoutMs = parseTimeout(timeoutValue);
1071
- if (timeoutMs instanceof Error) return timeoutMs;
1072
- changes.timeoutMs = timeoutMs;
1073
- }
1074
- const tagValue = oneValue(parsed, "--tags");
1075
- if (tagValue !== void 0) changes.tags = tags(tagValue);
1076
- if (Object.keys(changes).length === 0) return new Error("edit requires at least one changed field");
1077
- return { kind: "edit", id, changes };
1078
- }
1079
- function mutationRevision(parsed) {
1080
- const command = parsed.positional[0];
1081
- if (command === "add") return addRevision(parsed);
1082
- if (command === "edit") return editRevision(parsed);
1083
- if (command === "rename") {
1084
- const id = parsed.positional[1];
1085
- const newId = parsed.positional[2];
1086
- if (id === void 0 || newId === void 0) return new Error("rename requires <old> and <new> IDs");
1087
- return { kind: "rename", id, newId };
1088
- }
1089
- if (command === "remove") {
1090
- const id = parsed.positional[1];
1091
- if (id === void 0) return new Error("remove requires a check ID");
1092
- return { kind: "remove", id };
1093
- }
1094
- return new Error(`unknown verifiers command: ${command ?? "(none)"}`);
1095
- }
1096
- function printDryRun(id, result) {
1097
- if (result.kind === "error") {
1098
- printError(`dry-run '${id}' failed: ${result.message}`);
1099
- return 1;
1100
- }
1101
- process.stdout.write(`Dry run '${id}':
1102
- ${result.output}${result.output.endsWith("\n") ? "" : "\n"}`);
1103
- return 0;
1104
- }
1105
- async function executeWorkflow(parsed, options) {
1106
- let printedPreview = false;
1107
- const dryRunCheckIds = parsed.values.get("--dry-run") ?? [];
1108
- const result = await runVerifierAuthoringWorkflow({
1109
- includeProposals: options.includeProposals,
1110
- initialRevisions: options.revisions,
1111
- confirmed: parsed.yes,
1112
- decide(context) {
1113
- process.stdout.write(`${context.preview}
1114
- `);
1115
- printedPreview = true;
1116
- if (!parsed.yes || context.draft.checks.length === 0 && options.revisions.length === 0) {
1117
- return { kind: "reject" };
1118
- }
1119
- return { kind: "confirm", dryRunCheckIds };
1120
- }
1121
- });
1122
- if (result.status === "invalid") {
1123
- if (!printedPreview && result.preview !== void 0) process.stdout.write(`${result.preview}
1124
- `);
1125
- printError(result.reason);
1126
- if (result.wrote && result.path !== void 0) {
1127
- process.stderr.write(` ${result.path} was written; repair or remove it before running a check.
1128
- `);
1129
- }
1130
- return 1;
1131
- }
1132
- if (result.status === "rejected") {
1133
- if (!parsed.yes) {
1134
- process.stdout.write("Review complete. Nothing changed; rerun the same command with --yes to write this preview.\n");
1135
- } else {
1136
- process.stdout.write(
1137
- "Nothing changed because the preview contains no catalog checks. Package checks remain active; unsupported commands can be added with `clio-coder verifiers add`.\n"
1138
- );
1139
- }
1140
- return 0;
1141
- }
1142
- printOk(`wrote ${result.path}; production parser accepted the catalog`);
1143
- let code = 0;
1144
- for (const dryRun of result.dryRuns) code = Math.max(code, printDryRun(dryRun.id, dryRun.result));
1145
- return code;
1146
- }
1147
- async function discoverCommand() {
1148
- const discovery = discoverVerifierAuthoring();
1149
- if (!discovery.ok) {
1150
- printError(discovery.reason);
1151
- process.stderr.write(`${discovery.manualEntry}
1152
- `);
1153
- return 1;
1154
- }
1155
- process.stdout.write(`${previewVerifierDraft(createVerifierDraft(discovery))}
1156
- `);
1157
- return 0;
1158
- }
1159
- function validateCommand() {
1160
- const loaded = loadProjectVerifierCatalog(process.cwd());
1161
- if (!loaded.ok) {
1162
- printError(`production catalog parser rejected ${loaded.reason}`);
1163
- return 1;
1164
- }
1165
- if (loaded.source === null) {
1166
- process.stdout.write(`No ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH} exists. Run \`clio-coder verifiers author\`.
1167
- `);
1168
- return 0;
1169
- }
1170
- printOk(
1171
- `production catalog parser accepted ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH} (${loaded.source.checks.length} check${loaded.source.checks.length === 1 ? "" : "s"})`
1172
- );
1173
- return 0;
1174
- }
1175
- async function runVerifiersCommand(argv) {
1176
- const parsed = parseAuthoringArgs(argv);
1177
- if (parsed.error !== void 0) {
1178
- printError(parsed.error);
1179
- process.stderr.write(HELP);
1180
- return 2;
1181
- }
1182
- if (parsed.help || parsed.positional.length === 0) {
1183
- process.stdout.write(HELP);
1184
- return 0;
1185
- }
1186
- const command = parsed.positional[0];
1187
- if (command === "discover") return discoverCommand();
1188
- if (command === "validate") return validateCommand();
1189
- if (command === "dry-run") {
1190
- const id = parsed.positional[1];
1191
- if (id === void 0) {
1192
- printError("dry-run requires a check ID");
1193
- return 2;
1194
- }
1195
- return printDryRun(id, await verifyTool.run({ check: id }));
1196
- }
1197
- if (command === "author") {
1198
- const revisions = authorRevisions(parsed);
1199
- if (revisions instanceof Error) {
1200
- printError(revisions.message);
1201
- return 2;
1202
- }
1203
- return executeWorkflow(parsed, { includeProposals: true, revisions });
1204
- }
1205
- if (["add", "edit", "rename", "remove"].includes(command ?? "")) {
1206
- const revision = mutationRevision(parsed);
1207
- if (revision instanceof Error) {
1208
- printError(revision.message);
1209
- return 2;
1210
- }
1211
- return executeWorkflow(parsed, { includeProposals: false, revisions: [revision] });
1212
- }
1213
- printError(`unknown verifiers command: ${command}`);
1214
- process.stderr.write(HELP);
1215
- return 2;
1216
- }
1217
956
  export {
1218
- runVerifiersCommand
957
+ discoverDeclaredProjectCommands,
958
+ discoverVerifierAuthoring,
959
+ createVerifierDraft,
960
+ previewVerifierDraft,
961
+ runVerifierAuthoringWorkflow
1219
962
  };
1220
- //# sourceMappingURL=verifiers-NCBTHHN2.js.map
963
+ //# sourceMappingURL=chunk-YTYFXUI3.js.map