@probelabs/visor 0.1.106 → 0.1.107

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 (450) hide show
  1. package/README.md +65 -2
  2. package/action.yml +1 -1
  3. package/defaults/code-refiner.yaml +114 -0
  4. package/defaults/{.visor.yaml → code-review.yaml} +35 -226
  5. package/defaults/override.yaml +52 -0
  6. package/defaults/task-refinement.yaml +620 -0
  7. package/defaults/visor.tests.yaml +674 -0
  8. package/defaults/visor.yaml +482 -0
  9. package/dist/663.index.js +2 -3
  10. package/dist/80.index.js +2 -3
  11. package/dist/action-cli-bridge.d.ts +11 -82
  12. package/dist/action-cli-bridge.d.ts.map +1 -1
  13. package/dist/ai-review-service.d.ts +15 -0
  14. package/dist/ai-review-service.d.ts.map +1 -1
  15. package/dist/check-execution-engine.d.ts +19 -331
  16. package/dist/check-execution-engine.d.ts.map +1 -1
  17. package/dist/cli-main.d.ts.map +1 -1
  18. package/dist/cli.d.ts +0 -1
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/config.d.ts +16 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/cron-scheduler.d.ts +3 -3
  23. package/dist/cron-scheduler.d.ts.map +1 -1
  24. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  25. package/dist/defaults/code-refiner.yaml +114 -0
  26. package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
  27. package/dist/defaults/override.yaml +52 -0
  28. package/dist/defaults/task-refinement.yaml +620 -0
  29. package/dist/defaults/visor.tests.yaml +674 -0
  30. package/dist/defaults/visor.yaml +482 -0
  31. package/dist/docs/DEPLOYMENT.md +118 -0
  32. package/dist/docs/GITHUB_CHECKS.md +280 -0
  33. package/dist/docs/NPM_USAGE.md +208 -0
  34. package/dist/docs/action-reference.md +19 -0
  35. package/dist/docs/advanced-ai.md +178 -0
  36. package/dist/docs/ai-configuration.md +468 -0
  37. package/dist/docs/author-permissions.md +610 -0
  38. package/dist/docs/ci-cli-mode.md +34 -0
  39. package/dist/docs/claude-code.md +74 -0
  40. package/dist/docs/command-provider.md +559 -0
  41. package/dist/docs/commands.md +8 -0
  42. package/dist/docs/configuration.md +303 -0
  43. package/dist/docs/custom-tools.md +424 -0
  44. package/dist/docs/dashboards/README.md +23 -0
  45. package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
  46. package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
  47. package/dist/docs/debug-visualizer-progress.md +572 -0
  48. package/dist/docs/debug-visualizer-rfc.md +691 -0
  49. package/dist/docs/debug-visualizer.md +114 -0
  50. package/dist/docs/debugging.md +636 -0
  51. package/dist/docs/default-output-schema.md +28 -0
  52. package/dist/docs/dependencies.md +369 -0
  53. package/dist/docs/dev-playbook.md +9 -0
  54. package/dist/docs/engine-state-machine-plan.md +333 -0
  55. package/dist/docs/event-driven-github-integration-rfc.md +743 -0
  56. package/dist/docs/event-triggers.md +292 -0
  57. package/dist/docs/execution-statistics-rfc.md +290 -0
  58. package/dist/docs/fact-validator-gap-analysis.md +178 -0
  59. package/dist/docs/fact-validator-implementation-plan.md +1235 -0
  60. package/dist/docs/fail-if.md +95 -0
  61. package/dist/docs/failure-conditions-implementation.md +271 -0
  62. package/dist/docs/failure-conditions-schema.md +173 -0
  63. package/dist/docs/failure-routing-rfc.md +193 -0
  64. package/dist/docs/failure-routing.md +507 -0
  65. package/dist/docs/foreach-dependency-propagation.md +473 -0
  66. package/dist/docs/github-ops.md +89 -0
  67. package/dist/docs/goto-forward-run-plan.md +113 -0
  68. package/dist/docs/guides/criticality-modes.md +332 -0
  69. package/dist/docs/guides/fault-management-and-contracts.md +738 -0
  70. package/dist/docs/guides/workflow-style-guide.md +224 -0
  71. package/dist/docs/http.md +299 -0
  72. package/dist/docs/human-input-provider.md +372 -0
  73. package/dist/docs/limits.md +64 -0
  74. package/dist/docs/liquid-templates.md +347 -0
  75. package/dist/docs/loop-routing-refactor.md +89 -0
  76. package/dist/docs/mcp-provider.md +557 -0
  77. package/dist/docs/mcp.md +124 -0
  78. package/dist/docs/memory.md +903 -0
  79. package/dist/docs/observability.md +12 -0
  80. package/dist/docs/output-formats.md +20 -0
  81. package/dist/docs/output-formatting.md +29 -0
  82. package/dist/docs/output-history.md +383 -0
  83. package/dist/docs/performance.md +6 -0
  84. package/dist/docs/pluggable.md +124 -0
  85. package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
  86. package/dist/docs/recipes.md +21 -0
  87. package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
  88. package/dist/docs/schema-next-pr.md +10 -0
  89. package/dist/docs/schema-templates.md +68 -0
  90. package/dist/docs/script.md +34 -0
  91. package/dist/docs/sdk.md +222 -0
  92. package/dist/docs/security.md +7 -0
  93. package/dist/docs/suppressions.md +89 -0
  94. package/dist/docs/tag-filtering.md +258 -0
  95. package/dist/docs/telemetry-setup.md +119 -0
  96. package/dist/docs/telemetry-tracing-rfc.md +275 -0
  97. package/dist/docs/test-framework-rfc.md +680 -0
  98. package/dist/docs/testing/assertions.md +85 -0
  99. package/dist/docs/testing/ci.md +44 -0
  100. package/dist/docs/testing/cli.md +41 -0
  101. package/dist/docs/testing/cookbook.md +172 -0
  102. package/dist/docs/testing/dsl-reference.md +199 -0
  103. package/dist/docs/testing/fixtures-and-mocks.md +91 -0
  104. package/dist/docs/testing/flows.md +92 -0
  105. package/dist/docs/testing/getting-started.md +93 -0
  106. package/dist/docs/testing/troubleshooting.md +55 -0
  107. package/dist/docs/timeouts.md +50 -0
  108. package/dist/docs/troubleshooting.md +7 -0
  109. package/dist/docs/visor-sdk-rfc.md +186 -0
  110. package/dist/docs/workflows.md +569 -0
  111. package/dist/engine/on-finish/orchestrator.d.ts +19 -0
  112. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
  113. package/dist/engine/on-finish/utils.d.ts +44 -0
  114. package/dist/engine/on-finish/utils.d.ts.map +1 -0
  115. package/dist/event-bus/event-bus.d.ts +13 -0
  116. package/dist/event-bus/event-bus.d.ts.map +1 -0
  117. package/dist/event-bus/types.d.ts +57 -0
  118. package/dist/event-bus/types.d.ts.map +1 -0
  119. package/dist/examples/.claude/agents/code-reviewer.md +69 -0
  120. package/dist/examples/.mcp.json +34 -0
  121. package/dist/examples/CALCULATOR-SDK.md +364 -0
  122. package/dist/examples/README.md +384 -0
  123. package/dist/examples/ai-retry-fallback-config.yaml +180 -0
  124. package/dist/examples/ai-with-bash.yaml +126 -0
  125. package/dist/examples/ai-with-mcp.yaml +82 -0
  126. package/dist/examples/basic-human-input.yaml +15 -0
  127. package/dist/examples/bedrock-config.yaml +77 -0
  128. package/dist/examples/calculator-config.yaml +133 -0
  129. package/dist/examples/calculator-json-output-guide.md +311 -0
  130. package/dist/examples/calculator-sdk-automated.ts +340 -0
  131. package/dist/examples/calculator-sdk-example.ts +275 -0
  132. package/dist/examples/calculator-sdk-json.ts +331 -0
  133. package/dist/examples/calculator-sdk-real.ts +374 -0
  134. package/dist/examples/calculator-sdk-test.ts +148 -0
  135. package/dist/examples/claude-code-config.yaml +191 -0
  136. package/dist/examples/cron-webhook-config.yaml +215 -0
  137. package/dist/examples/custom-template.liquid +57 -0
  138. package/dist/examples/custom-tools-example.yaml +281 -0
  139. package/dist/examples/enhanced-config.yaml +165 -0
  140. package/dist/examples/environments/visor.base.yaml +92 -0
  141. package/dist/examples/environments/visor.dev.yaml +33 -0
  142. package/dist/examples/environments/visor.prod.yaml +95 -0
  143. package/dist/examples/environments/visor.staging.yaml +46 -0
  144. package/dist/examples/fact-validator.yaml +361 -0
  145. package/dist/examples/fail-if-simple.yaml +90 -0
  146. package/dist/examples/failure-conditions-advanced.yaml +136 -0
  147. package/dist/examples/failure-conditions-basic.yaml +48 -0
  148. package/dist/examples/failure-conditions-github-style.yaml +119 -0
  149. package/dist/examples/failure-conditions-migration.yaml +74 -0
  150. package/dist/examples/for-loop-example.yaml +176 -0
  151. package/dist/examples/forEach-example.yaml +120 -0
  152. package/dist/examples/github-workflow-with-tags.yml +163 -0
  153. package/dist/examples/http-integration-config.yaml +240 -0
  154. package/dist/examples/https-server-config.yaml +209 -0
  155. package/dist/examples/human-input-example.yaml +63 -0
  156. package/dist/examples/if-conditions.yaml +173 -0
  157. package/dist/examples/jira-simple-example.yaml +56 -0
  158. package/dist/examples/jira-single-issue-workflow.yaml +166 -0
  159. package/dist/examples/jira-workflow-mcp.yaml +182 -0
  160. package/dist/examples/mcp/analyzer.py +119 -0
  161. package/dist/examples/mcp-provider-example.yaml +301 -0
  162. package/dist/examples/memory-counter.yaml +99 -0
  163. package/dist/examples/memory-error-collection.yaml +104 -0
  164. package/dist/examples/memory-exec-js.yaml +247 -0
  165. package/dist/examples/memory-namespace-isolation.yaml +184 -0
  166. package/dist/examples/memory-retry-counter.yaml +65 -0
  167. package/dist/examples/memory-state-machine.yaml +170 -0
  168. package/dist/examples/outputs-raw-basic.yaml +26 -0
  169. package/dist/examples/project-with-tools.yaml +174 -0
  170. package/dist/examples/prompts/architecture-analysis.liquid +116 -0
  171. package/dist/examples/prompts/security-comprehensive.liquid +107 -0
  172. package/dist/examples/quick-start-tags.yaml +53 -0
  173. package/dist/examples/routing-basic.yaml +35 -0
  174. package/dist/examples/routing-dynamic-js.yaml +46 -0
  175. package/dist/examples/routing-foreach.yaml +34 -0
  176. package/dist/examples/routing-goto-event.yaml +34 -0
  177. package/dist/examples/routing-on-success.yaml +25 -0
  178. package/dist/examples/run-calculator-demo.sh +71 -0
  179. package/dist/examples/sdk-basic.mjs +10 -0
  180. package/dist/examples/sdk-cjs.cjs +10 -0
  181. package/dist/examples/sdk-comprehensive.mjs +175 -0
  182. package/dist/examples/sdk-manual-config.mjs +65 -0
  183. package/dist/examples/sdk-typescript.js +81 -0
  184. package/dist/examples/sdk-typescript.ts +92 -0
  185. package/dist/examples/session-reuse-config.yaml +151 -0
  186. package/dist/examples/templates/security-report.liquid +137 -0
  187. package/dist/examples/tools-library.yaml +281 -0
  188. package/dist/examples/transform-example.yaml +199 -0
  189. package/dist/examples/visor-with-tags.yaml +198 -0
  190. package/dist/examples/webhook-pipeline-config.yaml +218 -0
  191. package/dist/examples/workflows/calculator-workflow.yaml +163 -0
  192. package/dist/examples/workflows/code-quality.yaml +222 -0
  193. package/dist/examples/workflows/quick-pr-check.yaml +90 -0
  194. package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
  195. package/dist/failure-condition-evaluator.d.ts +1 -0
  196. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  197. package/dist/frontends/github-frontend.d.ts +38 -0
  198. package/dist/frontends/github-frontend.d.ts.map +1 -0
  199. package/dist/frontends/host.d.ts +43 -0
  200. package/dist/frontends/host.d.ts.map +1 -0
  201. package/dist/frontends/ndjson-sink.d.ts +12 -0
  202. package/dist/frontends/ndjson-sink.d.ts.map +1 -0
  203. package/dist/generated/config-schema.d.ts +564 -22
  204. package/dist/generated/config-schema.d.ts.map +1 -1
  205. package/dist/generated/config-schema.json +612 -24
  206. package/dist/github-check-service.d.ts +4 -6
  207. package/dist/github-check-service.d.ts.map +1 -1
  208. package/dist/github-comments.d.ts +0 -4
  209. package/dist/github-comments.d.ts.map +1 -1
  210. package/dist/index.d.ts.map +1 -1
  211. package/dist/index.js +70335 -62514
  212. package/dist/liquid-extensions.d.ts.map +1 -1
  213. package/dist/logger.d.ts +1 -0
  214. package/dist/logger.d.ts.map +1 -1
  215. package/dist/memory-store.d.ts +6 -0
  216. package/dist/memory-store.d.ts.map +1 -1
  217. package/dist/output/assistant-json/template.liquid +0 -0
  218. package/dist/output/traces/run-2025-11-21T11-50-46-505Z.ndjson +138 -0
  219. package/dist/output/traces/run-2025-11-21T11-51-33-674Z.ndjson +839 -0
  220. package/dist/output-formatters.d.ts +1 -1
  221. package/dist/output-formatters.d.ts.map +1 -1
  222. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  223. package/dist/providers/check-provider-registry.d.ts +6 -0
  224. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  225. package/dist/providers/check-provider.interface.d.ts +34 -1
  226. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  227. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  228. package/dist/providers/command-check-provider.d.ts +1 -1
  229. package/dist/providers/command-check-provider.d.ts.map +1 -1
  230. package/dist/providers/custom-tool-executor.d.ts +61 -0
  231. package/dist/providers/custom-tool-executor.d.ts.map +1 -0
  232. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  233. package/dist/providers/http-client-provider.d.ts +1 -4
  234. package/dist/providers/http-client-provider.d.ts.map +1 -1
  235. package/dist/providers/human-input-check-provider.d.ts +3 -0
  236. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  237. package/dist/providers/index.d.ts +1 -0
  238. package/dist/providers/index.d.ts.map +1 -1
  239. package/dist/providers/log-check-provider.d.ts +2 -5
  240. package/dist/providers/log-check-provider.d.ts.map +1 -1
  241. package/dist/providers/mcp-check-provider.d.ts +9 -3
  242. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  243. package/dist/providers/memory-check-provider.d.ts +2 -8
  244. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  245. package/dist/providers/script-check-provider.d.ts +25 -0
  246. package/dist/providers/script-check-provider.d.ts.map +1 -0
  247. package/dist/providers/workflow-check-provider.d.ts +56 -0
  248. package/dist/providers/workflow-check-provider.d.ts.map +1 -0
  249. package/dist/reviewer.d.ts +2 -1
  250. package/dist/reviewer.d.ts.map +1 -1
  251. package/dist/sdk/chunk-37ZSCMFC.mjs +482 -0
  252. package/dist/sdk/chunk-37ZSCMFC.mjs.map +1 -0
  253. package/dist/sdk/chunk-6Y4YTKCF.mjs +197 -0
  254. package/dist/sdk/chunk-6Y4YTKCF.mjs.map +1 -0
  255. package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
  256. package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
  257. package/dist/sdk/chunk-IEO6CFLG.mjs +1215 -0
  258. package/dist/sdk/chunk-IEO6CFLG.mjs.map +1 -0
  259. package/dist/sdk/chunk-JEHPDJIF.mjs +223 -0
  260. package/dist/sdk/chunk-JEHPDJIF.mjs.map +1 -0
  261. package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
  262. package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
  263. package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-OOZITMRU.mjs} +1 -1
  264. package/dist/sdk/chunk-OOZITMRU.mjs.map +1 -0
  265. package/dist/sdk/chunk-OWUVOILT.mjs +557 -0
  266. package/dist/sdk/chunk-OWUVOILT.mjs.map +1 -0
  267. package/dist/sdk/chunk-OZJ263FM.mjs +986 -0
  268. package/dist/sdk/chunk-OZJ263FM.mjs.map +1 -0
  269. package/dist/sdk/chunk-PTL3K3PN.mjs +3128 -0
  270. package/dist/sdk/chunk-PTL3K3PN.mjs.map +1 -0
  271. package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
  272. package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
  273. package/dist/sdk/chunk-VMPLF6FT.mjs +127 -0
  274. package/dist/sdk/chunk-VMPLF6FT.mjs.map +1 -0
  275. package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
  276. package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
  277. package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
  278. package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
  279. package/dist/sdk/config-M4ZNO6NU.mjs +14 -0
  280. package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
  281. package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
  282. package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
  283. package/dist/sdk/failure-condition-evaluator-NBO5YRXW.mjs +16 -0
  284. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
  285. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
  286. package/dist/sdk/github-frontend-4AWRJT7D.mjs +1242 -0
  287. package/dist/sdk/github-frontend-4AWRJT7D.mjs.map +1 -0
  288. package/dist/sdk/host-7GBC3S7L.mjs +49 -0
  289. package/dist/sdk/host-7GBC3S7L.mjs.map +1 -0
  290. package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-C7EG3YKH.mjs} +7 -2
  291. package/dist/sdk/memory-store-GJACZC2A.mjs +11 -0
  292. package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
  293. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
  294. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
  295. package/dist/sdk/renderer-schema-6RF26VUS.mjs +50 -0
  296. package/dist/sdk/renderer-schema-6RF26VUS.mjs.map +1 -0
  297. package/dist/sdk/routing-RP56JTV2.mjs +23 -0
  298. package/dist/sdk/routing-RP56JTV2.mjs.map +1 -0
  299. package/dist/sdk/sdk.d.mts +326 -21
  300. package/dist/sdk/sdk.d.ts +326 -21
  301. package/dist/sdk/sdk.js +21403 -16366
  302. package/dist/sdk/sdk.js.map +1 -1
  303. package/dist/sdk/sdk.mjs +13510 -2096
  304. package/dist/sdk/sdk.mjs.map +1 -1
  305. package/dist/sdk/session-registry-N5FFYFTM.mjs +10 -0
  306. package/dist/sdk/session-registry-N5FFYFTM.mjs.map +1 -0
  307. package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
  308. package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
  309. package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-WP4X46IF.mjs} +2 -2
  310. package/dist/sdk/tracer-init-WP4X46IF.mjs.map +1 -0
  311. package/dist/sdk/workflow-registry-2YIIXQCK.mjs +11 -0
  312. package/dist/sdk/workflow-registry-2YIIXQCK.mjs.map +1 -0
  313. package/dist/sdk.d.ts.map +1 -1
  314. package/dist/snapshot-store.d.ts +59 -0
  315. package/dist/snapshot-store.d.ts.map +1 -0
  316. package/dist/state-machine/context/build-engine-context.d.ts +9 -0
  317. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
  318. package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
  319. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
  320. package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
  321. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
  322. package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
  323. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
  324. package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
  325. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
  326. package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
  327. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
  328. package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
  329. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
  330. package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
  331. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
  332. package/dist/state-machine/execution/summary.d.ts +8 -0
  333. package/dist/state-machine/execution/summary.d.ts.map +1 -0
  334. package/dist/state-machine/runner.d.ts +73 -0
  335. package/dist/state-machine/runner.d.ts.map +1 -0
  336. package/dist/state-machine/states/check-running.d.ts +14 -0
  337. package/dist/state-machine/states/check-running.d.ts.map +1 -0
  338. package/dist/state-machine/states/completed.d.ts +12 -0
  339. package/dist/state-machine/states/completed.d.ts.map +1 -0
  340. package/dist/state-machine/states/error.d.ts +11 -0
  341. package/dist/state-machine/states/error.d.ts.map +1 -0
  342. package/dist/state-machine/states/init.d.ts +11 -0
  343. package/dist/state-machine/states/init.d.ts.map +1 -0
  344. package/dist/state-machine/states/level-dispatch.d.ts +17 -0
  345. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
  346. package/dist/state-machine/states/plan-ready.d.ts +12 -0
  347. package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
  348. package/dist/state-machine/states/routing.d.ts +52 -0
  349. package/dist/state-machine/states/routing.d.ts.map +1 -0
  350. package/dist/state-machine/states/wave-planning.d.ts +14 -0
  351. package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
  352. package/dist/state-machine/workflow-projection.d.ts +47 -0
  353. package/dist/state-machine/workflow-projection.d.ts.map +1 -0
  354. package/dist/state-machine-execution-engine.d.ts +147 -0
  355. package/dist/state-machine-execution-engine.d.ts.map +1 -0
  356. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  357. package/dist/test-runner/assertions.d.ts +59 -0
  358. package/dist/test-runner/assertions.d.ts.map +1 -0
  359. package/dist/test-runner/core/environment.d.ts +8 -0
  360. package/dist/test-runner/core/environment.d.ts.map +1 -0
  361. package/dist/test-runner/core/fixture.d.ts +3 -0
  362. package/dist/test-runner/core/fixture.d.ts.map +1 -0
  363. package/dist/test-runner/core/flow-stage.d.ts +32 -0
  364. package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
  365. package/dist/test-runner/core/mocks.d.ts +8 -0
  366. package/dist/test-runner/core/mocks.d.ts.map +1 -0
  367. package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
  368. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
  369. package/dist/test-runner/evaluators.d.ts +12 -0
  370. package/dist/test-runner/evaluators.d.ts.map +1 -0
  371. package/dist/test-runner/fixture-loader.d.ts +30 -0
  372. package/dist/test-runner/fixture-loader.d.ts.map +1 -0
  373. package/dist/test-runner/index.d.ts +120 -0
  374. package/dist/test-runner/index.d.ts.map +1 -0
  375. package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
  376. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
  377. package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
  378. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
  379. package/dist/test-runner/utils/selectors.d.ts +2 -0
  380. package/dist/test-runner/utils/selectors.d.ts.map +1 -0
  381. package/dist/test-runner/validator.d.ts +8 -0
  382. package/dist/test-runner/validator.d.ts.map +1 -0
  383. package/dist/traces/run-2025-11-21T11-50-46-505Z.ndjson +138 -0
  384. package/dist/traces/run-2025-11-21T11-51-33-674Z.ndjson +839 -0
  385. package/dist/types/cli.d.ts +4 -1
  386. package/dist/types/cli.d.ts.map +1 -1
  387. package/dist/types/config.d.ts +278 -5
  388. package/dist/types/config.d.ts.map +1 -1
  389. package/dist/types/engine.d.ts +172 -0
  390. package/dist/types/engine.d.ts.map +1 -0
  391. package/dist/types/execution.d.ts +73 -0
  392. package/dist/types/execution.d.ts.map +1 -0
  393. package/dist/types/github.d.ts +51 -0
  394. package/dist/types/github.d.ts.map +1 -0
  395. package/dist/types/workflow.d.ts +237 -0
  396. package/dist/types/workflow.d.ts.map +1 -0
  397. package/dist/utils/command-executor.d.ts +43 -0
  398. package/dist/utils/command-executor.d.ts.map +1 -0
  399. package/dist/utils/comment-metadata.d.ts +21 -0
  400. package/dist/utils/comment-metadata.d.ts.map +1 -0
  401. package/dist/utils/config-loader.d.ts.map +1 -1
  402. package/dist/utils/config-merger.d.ts.map +1 -1
  403. package/dist/utils/env-exposure.d.ts +3 -0
  404. package/dist/utils/env-exposure.d.ts.map +1 -0
  405. package/dist/utils/file-exclusion.d.ts.map +1 -1
  406. package/dist/utils/interactive-prompt.d.ts +1 -1
  407. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  408. package/dist/utils/sandbox.d.ts.map +1 -1
  409. package/dist/utils/script-memory-ops.d.ts +21 -0
  410. package/dist/utils/script-memory-ops.d.ts.map +1 -0
  411. package/dist/utils/template-context.d.ts +7 -0
  412. package/dist/utils/template-context.d.ts.map +1 -0
  413. package/dist/webhook-server.d.ts +3 -3
  414. package/dist/webhook-server.d.ts.map +1 -1
  415. package/dist/workflow-executor.d.ts +81 -0
  416. package/dist/workflow-executor.d.ts.map +1 -0
  417. package/dist/workflow-registry.d.ts +79 -0
  418. package/dist/workflow-registry.d.ts.map +1 -0
  419. package/package.json +10 -5
  420. package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  421. package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
  422. package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
  423. package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
  424. package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
  425. package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
  426. package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
  427. package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
  428. package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
  429. package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
  430. package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
  431. package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
  432. package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
  433. package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
  434. package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
  435. package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
  436. package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
  437. package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
  438. package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
  439. package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
  440. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
  441. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
  442. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
  443. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
  444. package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  445. /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → config-M4ZNO6NU.mjs.map} +0 -0
  446. /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
  447. /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → failure-condition-evaluator-NBO5YRXW.mjs.map} +0 -0
  448. /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → liquid-extensions-C7EG3YKH.mjs.map} +0 -0
  449. /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → memory-store-GJACZC2A.mjs.map} +0 -0
  450. /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → metrics-7PP3EJUH.mjs.map} +0 -0
@@ -0,0 +1,301 @@
1
+ version: "1.0"
2
+
3
+ # Real-World MCP Provider Examples
4
+ # Production-ready workflows using actual MCP servers
5
+
6
+ steps:
7
+ # =============================================================================
8
+ # Example 1: Security Scanning with Semgrep
9
+ # Detect security vulnerabilities in changed code
10
+ # =============================================================================
11
+ semgrep-security-scan:
12
+ type: mcp
13
+ transport: stdio
14
+ command: npx
15
+ args: ["-y", "@semgrep/mcp"]
16
+ method: scan
17
+ methodArgs:
18
+ paths: "{{ files | map: 'filename' | json }}"
19
+ rules: ["security", "owasp-top-10"]
20
+ tags: ["security", "fast"]
21
+
22
+ # =============================================================================
23
+ # Example 2: GitHub Repository Analysis
24
+ # Fetch PR context and compare with related issues
25
+ # =============================================================================
26
+ fetch-related-issues:
27
+ type: mcp
28
+ transport: stdio
29
+ command: npx
30
+ args: ["-y", "@modelcontextprotocol/server-github"]
31
+ method: search_issues
32
+ methodArgs:
33
+ query: "{{ pr.title | split: ' ' | slice: 0, 3 | join: ' ' }}"
34
+ state: "open"
35
+ transform_js: |
36
+ // Find duplicate or related issues
37
+ output.items
38
+ .filter(issue => issue.number !== pr.number)
39
+ .slice(0, 5)
40
+ .map(issue => ({
41
+ file: 'github',
42
+ line: 0,
43
+ message: `Related issue #${issue.number}: ${issue.title}`,
44
+ severity: 'info',
45
+ category: 'documentation',
46
+ ruleId: 'duplicate-check'
47
+ }))
48
+
49
+ # =============================================================================
50
+ # Example 3: Web Scraping for Documentation Validation
51
+ # Check if external URLs in docs are still valid
52
+ # =============================================================================
53
+ validate-external-links:
54
+ type: mcp
55
+ transport: stdio
56
+ command: npx
57
+ args: ["-y", "@modelcontextprotocol/server-puppeteer"]
58
+ method: navigate
59
+ # Only run on markdown/doc files
60
+ if: "files.some(f => f.filename.endsWith('.md'))"
61
+ argsTransform: |
62
+ {
63
+ "url": "{{ files | map: 'filename' | first }}",
64
+ "waitUntil": "networkidle2"
65
+ }
66
+ transform_js: |
67
+ // Check for broken links
68
+ if (output.statusCode && output.statusCode >= 400) {
69
+ return [{
70
+ file: 'documentation',
71
+ line: 0,
72
+ message: `Broken external link detected: ${output.url} (${output.statusCode})`,
73
+ severity: 'warning',
74
+ category: 'documentation',
75
+ ruleId: 'broken-link'
76
+ }];
77
+ }
78
+ return [];
79
+
80
+ # =============================================================================
81
+ # Example 4: Database Schema Validation with Postgres
82
+ # Verify migrations don't break existing schema
83
+ # =============================================================================
84
+ check-schema-migrations:
85
+ type: mcp
86
+ transport: stdio
87
+ command: npx
88
+ args: ["-y", "@modelcontextprotocol/server-postgres"]
89
+ # Only run if SQL files changed
90
+ if: "files.some(f => f.filename.includes('migrations/'))"
91
+ method: query
92
+ methodArgs:
93
+ query: "SELECT * FROM information_schema.tables WHERE table_schema = 'public'"
94
+ transform_js: |
95
+ // Validate that critical tables still exist
96
+ const criticalTables = ['users', 'sessions', 'payments'];
97
+ const existingTables = output.rows.map(r => r.table_name);
98
+ const missing = criticalTables.filter(t => !existingTables.includes(t));
99
+
100
+ return missing.map(table => ({
101
+ file: 'database',
102
+ line: 0,
103
+ message: `Critical table '${table}' is missing after migration`,
104
+ severity: 'error',
105
+ category: 'logic',
106
+ ruleId: 'schema-validation'
107
+ }));
108
+
109
+ # =============================================================================
110
+ # Example 5: File System Access for License Checking
111
+ # Ensure all source files have proper license headers
112
+ # =============================================================================
113
+ check-license-headers:
114
+ type: mcp
115
+ transport: stdio
116
+ command: npx
117
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
118
+ method: read_file
119
+ forEach:
120
+ items: "{{ files | map: 'filename' | json }}"
121
+ itemVar: filepath
122
+ methodArgs:
123
+ path: "{{ filepath }}"
124
+ transform_js: |
125
+ // Check for license header in source files
126
+ const content = output.content || '';
127
+ const hasLicense = content.includes('Copyright') || content.includes('SPDX-License');
128
+
129
+ if (!hasLicense && filepath.match(/\.(ts|js|py|go)$/)) {
130
+ return [{
131
+ file: filepath,
132
+ line: 1,
133
+ message: 'Missing license header',
134
+ severity: 'warning',
135
+ category: 'documentation',
136
+ ruleId: 'license-header',
137
+ suggestion: 'Add SPDX-License-Identifier comment at the top of the file'
138
+ }];
139
+ }
140
+ return [];
141
+
142
+ # =============================================================================
143
+ # Example 6: Slack Notification for High-Severity Issues
144
+ # Post summary to Slack when critical issues found
145
+ # =============================================================================
146
+ count-critical-issues:
147
+ type: logger
148
+ depends_on: [semgrep-security-scan]
149
+ message: "Found {{ outputs['semgrep-security-scan'].issues | size }} security issues"
150
+
151
+ notify-slack:
152
+ type: mcp
153
+ depends_on: [count-critical-issues]
154
+ transport: stdio
155
+ command: npx
156
+ args: ["-y", "@modelcontextprotocol/server-slack"]
157
+ # Only notify if critical issues found
158
+ if: "outputs['semgrep-security-scan']?.issues?.filter(i => i.severity === 'error').length > 0"
159
+ method: post_message
160
+ argsTransform: |
161
+ {
162
+ "channel": "#security-alerts",
163
+ "text": "🚨 Security Alert: PR #{{ pr.number }} has {{ outputs['semgrep-security-scan'].issues | where: 'severity', 'error' | size }} critical security issues"
164
+ }
165
+
166
+ # =============================================================================
167
+ # Example 7: Git History Analysis
168
+ # Check if sensitive files were modified by unauthorized users
169
+ # =============================================================================
170
+ check-sensitive-file-changes:
171
+ type: mcp
172
+ transport: stdio
173
+ command: npx
174
+ args: ["-y", "@modelcontextprotocol/server-git", "."]
175
+ method: log
176
+ # Only check if sensitive files changed
177
+ if: "files.some(f => f.filename.match(/(env|secret|key|password)/))"
178
+ methodArgs:
179
+ path: "{{ files | map: 'filename' | first }}"
180
+ maxCount: 10
181
+ transform_js: |
182
+ // Warn if sensitive files modified by external contributor
183
+ const sensitiveFiles = files.filter(f => f.filename.match(/(env|secret|key|password)/));
184
+
185
+ return sensitiveFiles.map(file => ({
186
+ file: file.filename,
187
+ line: 0,
188
+ message: `Sensitive file modified. Please review carefully: ${pr.author}`,
189
+ severity: 'warning',
190
+ category: 'security',
191
+ ruleId: 'sensitive-file-change'
192
+ }));
193
+
194
+ # =============================================================================
195
+ # Example 8: Firecrawl for Scraping Documentation
196
+ # Fetch and validate API documentation references
197
+ # =============================================================================
198
+ validate-api-docs:
199
+ type: mcp
200
+ transport: stdio
201
+ command: npx
202
+ args: ["-y", "@mendable/firecrawl-mcp"]
203
+ # Only run on API-related changes
204
+ if: "files.some(f => f.filename.includes('api/') || f.filename.includes('swagger'))"
205
+ method: scrape
206
+ methodArgs:
207
+ url: "https://api-docs.example.com/latest"
208
+ formats: ["markdown"]
209
+ transform_js: |
210
+ // Check if documented endpoints match code changes
211
+ const endpoints = output.markdown?.match(/\/api\/v\d+\/\w+/g) || [];
212
+
213
+ return [{
214
+ file: 'api-documentation',
215
+ line: 0,
216
+ message: `Found ${endpoints.length} documented API endpoints`,
217
+ severity: 'info',
218
+ category: 'documentation',
219
+ ruleId: 'api-docs-sync'
220
+ }];
221
+
222
+ # =============================================================================
223
+ # Example 9: Jira Integration for Ticket Validation
224
+ # Ensure PR references valid Jira ticket
225
+ # =============================================================================
226
+ validate-jira-ticket:
227
+ type: mcp
228
+ transport: stdio
229
+ command: npx
230
+ args: ["-y", "@atlassian/mcp-server-jira"]
231
+ method: get_issue
232
+ argsTransform: |
233
+ {
234
+ "issueKey": "{{ pr.title | split: ' ' | first | upcase }}"
235
+ }
236
+ transform_js: |
237
+ // Validate PR is linked to a valid Jira ticket
238
+ if (output.error || !output.fields) {
239
+ return [{
240
+ file: 'jira',
241
+ line: 0,
242
+ message: 'PR title must start with valid Jira ticket number (e.g., PROJ-123)',
243
+ severity: 'error',
244
+ category: 'documentation',
245
+ ruleId: 'jira-ticket-required'
246
+ }];
247
+ }
248
+
249
+ // Check if ticket is in correct status
250
+ if (output.fields.status?.name !== 'In Progress') {
251
+ return [{
252
+ file: 'jira',
253
+ line: 0,
254
+ message: `Jira ticket ${output.key} is in '${output.fields.status.name}' status, expected 'In Progress'`,
255
+ severity: 'warning',
256
+ category: 'documentation',
257
+ ruleId: 'jira-status-check'
258
+ }];
259
+ }
260
+
261
+ return [];
262
+
263
+ # =============================================================================
264
+ # Example 10: Brave Search for CVE Checking
265
+ # Search for known vulnerabilities in dependencies
266
+ # =============================================================================
267
+ check-dependency-cves:
268
+ type: mcp
269
+ transport: stdio
270
+ command: npx
271
+ args: ["-y", "@modelcontextprotocol/server-brave-search"]
272
+ # Only run if package files changed
273
+ if: "files.some(f => f.filename.match(/package\\.json|requirements\\.txt|go\\.mod/))"
274
+ method: search
275
+ argsTransform: |
276
+ {
277
+ "query": "CVE {{ pr.title | split: ' ' | join: ' ' }} vulnerability"
278
+ }
279
+ transform_js: |
280
+ // Parse search results for CVE mentions
281
+ const cvePattern = /CVE-\d{4}-\d{4,7}/g;
282
+ const results = output.web?.results || [];
283
+ const cves = new Set();
284
+
285
+ results.forEach(result => {
286
+ const matches = result.description?.match(cvePattern) || [];
287
+ matches.forEach(cve => cves.add(cve));
288
+ });
289
+
290
+ if (cves.size > 0) {
291
+ return [{
292
+ file: 'dependencies',
293
+ line: 0,
294
+ message: `Potential CVEs found: ${Array.from(cves).join(', ')}. Please review dependencies.`,
295
+ severity: 'warning',
296
+ category: 'security',
297
+ ruleId: 'cve-check'
298
+ }];
299
+ }
300
+
301
+ return [];
@@ -0,0 +1,99 @@
1
+ version: "1.0"
2
+
3
+ # Example: Simple counter with increment operation
4
+ # This demonstrates using increment for tracking metrics
5
+
6
+ memory:
7
+ storage: memory
8
+ namespace: default
9
+
10
+ steps:
11
+ # Initialize counters
12
+ init-counters:
13
+ type: script
14
+ content: |
15
+ // Initialize multiple counters
16
+ memory.set('processed', 0);
17
+ memory.set('errors', 0);
18
+ memory.set('warnings', 0);
19
+ return { initialized: true };
20
+
21
+ # Simulate processing files
22
+ process-file-1:
23
+ type: memory
24
+ operation: increment
25
+ key: processed
26
+ depends_on: [init-counters]
27
+
28
+ process-file-2:
29
+ type: memory
30
+ operation: increment
31
+ key: processed
32
+
33
+ # Track errors
34
+ track-error:
35
+ type: memory
36
+ operation: increment
37
+ key: errors
38
+ depends_on: [process-file-1]
39
+
40
+ # Track multiple warnings
41
+ track-warnings:
42
+ type: memory
43
+ operation: increment
44
+ key: warnings
45
+ value: 3 # Increment by 3
46
+
47
+ # Generate report using script
48
+ generate-report:
49
+ type: script
50
+ depends_on: [process-file-2, track-error, track-warnings]
51
+ content: |
52
+ const processed = memory.get('processed');
53
+ const errors = memory.get('errors');
54
+ const warnings = memory.get('warnings');
55
+
56
+ // Calculate success rate
57
+ const successRate = ((processed - errors) / processed * 100).toFixed(2);
58
+
59
+ // Store report
60
+ memory.set('report', {
61
+ processed,
62
+ errors,
63
+ warnings,
64
+ successRate: `${successRate}%`
65
+ });
66
+
67
+ return memory.get('report');
68
+
69
+ # Display results
70
+ display-report:
71
+ type: log
72
+ depends_on: [generate-report]
73
+ message: |
74
+ Processing Report:
75
+ - Files processed: {{ outputs['generate-report'].processed }}
76
+ - Errors: {{ outputs['generate-report'].errors }}
77
+ - Warnings: {{ outputs['generate-report'].warnings }}
78
+ - Success rate: {{ outputs['generate-report'].successRate }}
79
+
80
+ # Example: View counter with decrement
81
+ decrement-example:
82
+ type: script
83
+ content: |
84
+ // Initialize views and clicks
85
+ memory.set('views', 100);
86
+ memory.set('clicks', 25);
87
+
88
+ // Increment views
89
+ memory.increment('views', 50);
90
+
91
+ // Decrement (negative increment) remaining quota
92
+ memory.set('quota', 1000);
93
+ memory.increment('quota', -memory.get('clicks'));
94
+
95
+ return {
96
+ views: memory.get('views'),
97
+ clicks: memory.get('clicks'),
98
+ quota: memory.get('quota')
99
+ };
@@ -0,0 +1,104 @@
1
+ # Memory Example: Error Collection Across Checks
2
+ #
3
+ # This example shows how to collect errors from multiple checks
4
+ # and report them together at the end.
5
+
6
+ version: "1.0"
7
+
8
+ memory:
9
+ storage: file
10
+ file: ./errors.json
11
+ format: json
12
+ auto_save: true
13
+
14
+ steps:
15
+ # Initialize error collection
16
+ init-errors:
17
+ type: memory
18
+ operation: set
19
+ key: errors
20
+ value: []
21
+
22
+ # Lint check
23
+ lint:
24
+ type: command
25
+ exec: npm run lint
26
+ depends_on: [init-errors]
27
+ on_fail:
28
+ run: [collect-lint-error]
29
+
30
+ collect-lint-error:
31
+ type: memory
32
+ operation: append
33
+ key: errors
34
+ value:
35
+ check: lint
36
+ message: "{{ outputs['lint'].stderr }}"
37
+ timestamp: "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
38
+
39
+ # Test check
40
+ test:
41
+ type: command
42
+ exec: npm test
43
+ depends_on: [init-errors]
44
+ on_fail:
45
+ run: [collect-test-error]
46
+
47
+ collect-test-error:
48
+ type: memory
49
+ operation: append
50
+ key: errors
51
+ value:
52
+ check: test
53
+ message: "{{ outputs['test'].stderr }}"
54
+ timestamp: "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
55
+
56
+ # Build check
57
+ build:
58
+ type: command
59
+ exec: npm run build
60
+ depends_on: [init-errors]
61
+ on_fail:
62
+ run: [collect-build-error]
63
+
64
+ collect-build-error:
65
+ type: memory
66
+ operation: append
67
+ key: errors
68
+ value:
69
+ check: build
70
+ message: "{{ outputs['build'].stderr }}"
71
+ timestamp: "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
72
+
73
+ # Report all errors
74
+ report-errors:
75
+ type: log
76
+ depends_on: [lint, test, build]
77
+ message: |
78
+ {% assign all_errors = "errors" | memory_get %}
79
+ {% if all_errors.size > 0 %}
80
+ ## ❌ Errors Found: {{ all_errors.size }}
81
+
82
+ {% for error in all_errors %}
83
+ ### {{ error.check | upcase }}
84
+ - **Time**: {{ error.timestamp }}
85
+ - **Message**: {{ error.message | truncate: 200 }}
86
+
87
+ {% endfor %}
88
+ {% else %}
89
+ ## ✅ All Checks Passed!
90
+ {% endif %}
91
+
92
+ # Fail if any errors were collected
93
+ check-errors:
94
+ type: noop
95
+ depends_on: [report-errors]
96
+ fail_if: |
97
+ const errors = memory.get('errors') || [];
98
+ return errors.length > 0;
99
+
100
+ output:
101
+ pr_comment:
102
+ format: markdown
103
+ group_by: check
104
+ collapse: false