@probelabs/visor 0.1.106 → 0.1.111

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 (530) hide show
  1. package/README.md +71 -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 +624 -0
  7. package/defaults/visor.tests.yaml +685 -0
  8. package/defaults/visor.yaml +483 -0
  9. package/dist/action-cli-bridge.d.ts +11 -82
  10. package/dist/action-cli-bridge.d.ts.map +1 -1
  11. package/dist/ai-review-service.d.ts +28 -9
  12. package/dist/ai-review-service.d.ts.map +1 -1
  13. package/dist/check-execution-engine.d.ts +19 -331
  14. package/dist/check-execution-engine.d.ts.map +1 -1
  15. package/dist/cli-main.d.ts.map +1 -1
  16. package/dist/cli.d.ts +0 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/config.d.ts +16 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/cron-scheduler.d.ts +3 -3
  21. package/dist/cron-scheduler.d.ts.map +1 -1
  22. package/dist/debug-visualizer/ws-server.d.ts +7 -1
  23. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  24. package/dist/defaults/code-refiner.yaml +114 -0
  25. package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
  26. package/dist/defaults/override.yaml +52 -0
  27. package/dist/defaults/task-refinement.yaml +624 -0
  28. package/dist/defaults/visor.tests.yaml +685 -0
  29. package/dist/defaults/visor.yaml +483 -0
  30. package/dist/docs/DEPLOYMENT.md +118 -0
  31. package/dist/docs/GITHUB_CHECKS.md +280 -0
  32. package/dist/docs/NPM_USAGE.md +208 -0
  33. package/dist/docs/action-reference.md +19 -0
  34. package/dist/docs/advanced-ai.md +237 -0
  35. package/dist/docs/ai-configuration.md +535 -0
  36. package/dist/docs/ai-custom-tools-usage.md +261 -0
  37. package/dist/docs/ai-custom-tools.md +392 -0
  38. package/dist/docs/author-permissions.md +610 -0
  39. package/dist/docs/bot-transports-rfc.md +23 -0
  40. package/dist/docs/ci-cli-mode.md +34 -0
  41. package/dist/docs/claude-code.md +74 -0
  42. package/dist/docs/command-provider.md +559 -0
  43. package/dist/docs/commands.md +8 -0
  44. package/dist/docs/configuration.md +324 -0
  45. package/dist/docs/custom-tools.md +424 -0
  46. package/dist/docs/dashboards/README.md +23 -0
  47. package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
  48. package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
  49. package/dist/docs/debug-visualizer-progress.md +572 -0
  50. package/dist/docs/debug-visualizer-rfc.md +691 -0
  51. package/dist/docs/debug-visualizer.md +114 -0
  52. package/dist/docs/debugging.md +636 -0
  53. package/dist/docs/default-output-schema.md +28 -0
  54. package/dist/docs/dependencies.md +369 -0
  55. package/dist/docs/dev-playbook.md +9 -0
  56. package/dist/docs/engine-pause-resume-rfc.md +192 -0
  57. package/dist/docs/engine-state-machine-plan.md +333 -0
  58. package/dist/docs/event-driven-github-integration-rfc.md +743 -0
  59. package/dist/docs/event-triggers.md +292 -0
  60. package/dist/docs/execution-statistics-rfc.md +290 -0
  61. package/dist/docs/fact-validator-gap-analysis.md +178 -0
  62. package/dist/docs/fact-validator-implementation-plan.md +1235 -0
  63. package/dist/docs/fail-if.md +95 -0
  64. package/dist/docs/failure-conditions-implementation.md +271 -0
  65. package/dist/docs/failure-conditions-schema.md +173 -0
  66. package/dist/docs/failure-routing-rfc.md +193 -0
  67. package/dist/docs/failure-routing.md +507 -0
  68. package/dist/docs/foreach-dependency-propagation.md +473 -0
  69. package/dist/docs/github-ops.md +89 -0
  70. package/dist/docs/goto-forward-run-plan.md +113 -0
  71. package/dist/docs/guides/criticality-modes.md +332 -0
  72. package/dist/docs/guides/fault-management-and-contracts.md +738 -0
  73. package/dist/docs/guides/workflow-style-guide.md +224 -0
  74. package/dist/docs/http.md +299 -0
  75. package/dist/docs/human-input-provider.md +372 -0
  76. package/dist/docs/lifecycle-hooks.md +253 -0
  77. package/dist/docs/limits.md +64 -0
  78. package/dist/docs/liquid-templates.md +490 -0
  79. package/dist/docs/loop-routing-refactor.md +89 -0
  80. package/dist/docs/mcp-provider.md +557 -0
  81. package/dist/docs/mcp.md +124 -0
  82. package/dist/docs/memory.md +903 -0
  83. package/dist/docs/observability.md +12 -0
  84. package/dist/docs/output-formats.md +20 -0
  85. package/dist/docs/output-formatting.md +29 -0
  86. package/dist/docs/output-history.md +383 -0
  87. package/dist/docs/performance.md +6 -0
  88. package/dist/docs/pluggable.md +124 -0
  89. package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
  90. package/dist/docs/providers/git-checkout.md +589 -0
  91. package/dist/docs/recipes.md +474 -0
  92. package/dist/docs/rfc/git-checkout-step.md +601 -0
  93. package/dist/docs/rfc/on_init-hook.md +1294 -0
  94. package/dist/docs/rfc/workspace-isolation.md +216 -0
  95. package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
  96. package/dist/docs/router-patterns.md +339 -0
  97. package/dist/docs/schema-next-pr.md +10 -0
  98. package/dist/docs/schema-templates.md +68 -0
  99. package/dist/docs/script.md +34 -0
  100. package/dist/docs/sdk.md +222 -0
  101. package/dist/docs/security.md +7 -0
  102. package/dist/docs/suppressions.md +89 -0
  103. package/dist/docs/tag-filtering.md +258 -0
  104. package/dist/docs/telemetry-setup.md +119 -0
  105. package/dist/docs/telemetry-tracing-rfc.md +275 -0
  106. package/dist/docs/test-framework-rfc.md +680 -0
  107. package/dist/docs/testing/assertions.md +85 -0
  108. package/dist/docs/testing/ci.md +44 -0
  109. package/dist/docs/testing/cli.md +41 -0
  110. package/dist/docs/testing/cookbook.md +172 -0
  111. package/dist/docs/testing/dsl-reference.md +199 -0
  112. package/dist/docs/testing/fixtures-and-mocks.md +91 -0
  113. package/dist/docs/testing/flows.md +92 -0
  114. package/dist/docs/testing/getting-started.md +93 -0
  115. package/dist/docs/testing/troubleshooting.md +55 -0
  116. package/dist/docs/timeouts.md +50 -0
  117. package/dist/docs/troubleshooting.md +7 -0
  118. package/dist/docs/visor-sdk-rfc.md +186 -0
  119. package/dist/docs/workflows.md +569 -0
  120. package/dist/engine/on-finish/orchestrator.d.ts +19 -0
  121. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
  122. package/dist/engine/on-finish/utils.d.ts +44 -0
  123. package/dist/engine/on-finish/utils.d.ts.map +1 -0
  124. package/dist/event-bus/event-bus.d.ts +13 -0
  125. package/dist/event-bus/event-bus.d.ts.map +1 -0
  126. package/dist/event-bus/types.d.ts +71 -0
  127. package/dist/event-bus/types.d.ts.map +1 -0
  128. package/dist/examples/.claude/agents/code-reviewer.md +69 -0
  129. package/dist/examples/.mcp.json +34 -0
  130. package/dist/examples/CALCULATOR-SDK.md +364 -0
  131. package/dist/examples/README.md +384 -0
  132. package/dist/examples/ai-custom-tools-example.yaml +206 -0
  133. package/dist/examples/ai-custom-tools-simple.yaml +76 -0
  134. package/dist/examples/ai-retry-fallback-config.yaml +180 -0
  135. package/dist/examples/ai-with-bash.yaml +126 -0
  136. package/dist/examples/ai-with-mcp.yaml +82 -0
  137. package/dist/examples/basic-human-input.yaml +15 -0
  138. package/dist/examples/bedrock-config.yaml +77 -0
  139. package/dist/examples/calculator-config.yaml +133 -0
  140. package/dist/examples/calculator-json-output-guide.md +311 -0
  141. package/dist/examples/calculator-sdk-automated.ts +340 -0
  142. package/dist/examples/calculator-sdk-example.ts +275 -0
  143. package/dist/examples/calculator-sdk-json.ts +331 -0
  144. package/dist/examples/calculator-sdk-real.ts +374 -0
  145. package/dist/examples/calculator-sdk-test.ts +148 -0
  146. package/dist/examples/claude-code-config.yaml +191 -0
  147. package/dist/examples/cron-webhook-config.yaml +215 -0
  148. package/dist/examples/custom-template.liquid +57 -0
  149. package/dist/examples/custom-tools-example.yaml +281 -0
  150. package/dist/examples/enhanced-config.yaml +165 -0
  151. package/dist/examples/environments/visor.base.yaml +92 -0
  152. package/dist/examples/environments/visor.dev.yaml +33 -0
  153. package/dist/examples/environments/visor.prod.yaml +95 -0
  154. package/dist/examples/environments/visor.staging.yaml +46 -0
  155. package/dist/examples/fact-validator.yaml +361 -0
  156. package/dist/examples/fail-if-simple.yaml +90 -0
  157. package/dist/examples/failure-conditions-advanced.yaml +136 -0
  158. package/dist/examples/failure-conditions-basic.yaml +48 -0
  159. package/dist/examples/failure-conditions-github-style.yaml +119 -0
  160. package/dist/examples/failure-conditions-migration.yaml +74 -0
  161. package/dist/examples/for-loop-example.yaml +176 -0
  162. package/dist/examples/forEach-example.yaml +120 -0
  163. package/dist/examples/git-checkout-basic.yaml +32 -0
  164. package/dist/examples/git-checkout-compare.yaml +59 -0
  165. package/dist/examples/git-checkout-cross-repo.yaml +76 -0
  166. package/dist/examples/github-workflow-with-tags.yml +163 -0
  167. package/dist/examples/http-integration-config.yaml +240 -0
  168. package/dist/examples/https-server-config.yaml +209 -0
  169. package/dist/examples/human-input-example.yaml +63 -0
  170. package/dist/examples/if-conditions.yaml +173 -0
  171. package/dist/examples/jira-simple-example.yaml +56 -0
  172. package/dist/examples/jira-single-issue-workflow.yaml +166 -0
  173. package/dist/examples/jira-workflow-mcp.yaml +182 -0
  174. package/dist/examples/mcp/analyzer.py +119 -0
  175. package/dist/examples/mcp-provider-example.yaml +301 -0
  176. package/dist/examples/memory-counter.yaml +99 -0
  177. package/dist/examples/memory-error-collection.yaml +104 -0
  178. package/dist/examples/memory-exec-js.yaml +247 -0
  179. package/dist/examples/memory-namespace-isolation.yaml +184 -0
  180. package/dist/examples/memory-retry-counter.yaml +65 -0
  181. package/dist/examples/memory-state-machine.yaml +170 -0
  182. package/dist/examples/on-init-import-demo.yaml +179 -0
  183. package/dist/examples/outputs-raw-basic.yaml +26 -0
  184. package/dist/examples/project-with-tools.yaml +174 -0
  185. package/dist/examples/prompts/architecture-analysis.liquid +116 -0
  186. package/dist/examples/prompts/security-comprehensive.liquid +107 -0
  187. package/dist/examples/quick-start-tags.yaml +53 -0
  188. package/dist/examples/reusable-tools.yaml +92 -0
  189. package/dist/examples/reusable-workflows.yaml +88 -0
  190. package/dist/examples/routing-basic.yaml +35 -0
  191. package/dist/examples/routing-dynamic-js.yaml +46 -0
  192. package/dist/examples/routing-foreach.yaml +34 -0
  193. package/dist/examples/routing-goto-event.yaml +34 -0
  194. package/dist/examples/routing-on-success.yaml +25 -0
  195. package/dist/examples/run-calculator-demo.sh +71 -0
  196. package/dist/examples/sdk-basic.mjs +10 -0
  197. package/dist/examples/sdk-cjs.cjs +10 -0
  198. package/dist/examples/sdk-comprehensive.mjs +175 -0
  199. package/dist/examples/sdk-manual-config.mjs +65 -0
  200. package/dist/examples/sdk-typescript.js +81 -0
  201. package/dist/examples/sdk-typescript.ts +92 -0
  202. package/dist/examples/session-reuse-config.yaml +151 -0
  203. package/dist/examples/session-reuse-self.yaml +81 -0
  204. package/dist/examples/slack-simple-chat.yaml +775 -0
  205. package/dist/examples/templates/security-report.liquid +137 -0
  206. package/dist/examples/tools-library.yaml +281 -0
  207. package/dist/examples/transform-example.yaml +199 -0
  208. package/dist/examples/visor-with-tags.yaml +198 -0
  209. package/dist/examples/webhook-pipeline-config.yaml +218 -0
  210. package/dist/examples/workflows/calculator-workflow.yaml +163 -0
  211. package/dist/examples/workflows/code-quality.yaml +222 -0
  212. package/dist/examples/workflows/quick-pr-check.yaml +90 -0
  213. package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
  214. package/dist/failure-condition-evaluator.d.ts +3 -0
  215. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  216. package/dist/frontends/github-frontend.d.ts +58 -0
  217. package/dist/frontends/github-frontend.d.ts.map +1 -0
  218. package/dist/frontends/host.d.ts +47 -0
  219. package/dist/frontends/host.d.ts.map +1 -0
  220. package/dist/frontends/ndjson-sink.d.ts +12 -0
  221. package/dist/frontends/ndjson-sink.d.ts.map +1 -0
  222. package/dist/frontends/slack-frontend.d.ts +58 -0
  223. package/dist/frontends/slack-frontend.d.ts.map +1 -0
  224. package/dist/generated/config-schema.d.ts +967 -57
  225. package/dist/generated/config-schema.d.ts.map +1 -1
  226. package/dist/generated/config-schema.json +1033 -56
  227. package/dist/github-check-service.d.ts +4 -6
  228. package/dist/github-check-service.d.ts.map +1 -1
  229. package/dist/github-comments.d.ts +2 -4
  230. package/dist/github-comments.d.ts.map +1 -1
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +134327 -99004
  233. package/dist/liquid-extensions.d.ts.map +1 -1
  234. package/dist/logger.d.ts +2 -0
  235. package/dist/logger.d.ts.map +1 -1
  236. package/dist/memory-store.d.ts +6 -0
  237. package/dist/memory-store.d.ts.map +1 -1
  238. package/dist/output/assistant-json/template.liquid +0 -0
  239. package/dist/output/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  240. package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  241. package/dist/output-formatters.d.ts +1 -1
  242. package/dist/output-formatters.d.ts.map +1 -1
  243. package/dist/providers/ai-check-provider.d.ts +12 -0
  244. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  245. package/dist/providers/check-provider-registry.d.ts +6 -0
  246. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  247. package/dist/providers/check-provider.interface.d.ts +43 -1
  248. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  249. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  250. package/dist/providers/command-check-provider.d.ts +1 -1
  251. package/dist/providers/command-check-provider.d.ts.map +1 -1
  252. package/dist/providers/custom-tool-executor.d.ts +61 -0
  253. package/dist/providers/custom-tool-executor.d.ts.map +1 -0
  254. package/dist/providers/git-checkout-provider.d.ts +25 -0
  255. package/dist/providers/git-checkout-provider.d.ts.map +1 -0
  256. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  257. package/dist/providers/http-client-provider.d.ts +4 -4
  258. package/dist/providers/http-client-provider.d.ts.map +1 -1
  259. package/dist/providers/human-input-check-provider.d.ts +5 -0
  260. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  261. package/dist/providers/index.d.ts +1 -0
  262. package/dist/providers/index.d.ts.map +1 -1
  263. package/dist/providers/log-check-provider.d.ts +2 -5
  264. package/dist/providers/log-check-provider.d.ts.map +1 -1
  265. package/dist/providers/mcp-check-provider.d.ts +10 -4
  266. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  267. package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
  268. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
  269. package/dist/providers/memory-check-provider.d.ts +2 -8
  270. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  271. package/dist/providers/script-check-provider.d.ts +25 -0
  272. package/dist/providers/script-check-provider.d.ts.map +1 -0
  273. package/dist/providers/workflow-check-provider.d.ts +56 -0
  274. package/dist/providers/workflow-check-provider.d.ts.map +1 -0
  275. package/dist/reviewer.d.ts +2 -1
  276. package/dist/reviewer.d.ts.map +1 -1
  277. package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
  278. package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
  279. package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
  280. package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-3OMWVM6J.mjs} +11 -1
  281. package/dist/sdk/chunk-3OMWVM6J.mjs.map +1 -0
  282. package/dist/sdk/chunk-7UK3NIIT.mjs +482 -0
  283. package/dist/sdk/chunk-7UK3NIIT.mjs.map +1 -0
  284. package/dist/sdk/chunk-AGIZJ4UZ.mjs +173 -0
  285. package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
  286. package/dist/sdk/chunk-AIVFBIS4.mjs +1371 -0
  287. package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
  288. package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
  289. package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
  290. package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
  291. package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
  292. package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
  293. package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
  294. package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
  295. package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
  296. package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
  297. package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
  298. package/dist/sdk/chunk-NAW3DB3I.mjs +197 -0
  299. package/dist/sdk/chunk-NAW3DB3I.mjs.map +1 -0
  300. package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
  301. package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
  302. package/dist/sdk/chunk-QR7MOMJH.mjs +558 -0
  303. package/dist/sdk/chunk-QR7MOMJH.mjs.map +1 -0
  304. package/dist/sdk/chunk-QY2XYPEV.mjs +3556 -0
  305. package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
  306. package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
  307. package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
  308. package/dist/sdk/chunk-SIWNBRTK.mjs +800 -0
  309. package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
  310. package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
  311. package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
  312. package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
  313. package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
  314. package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
  315. package/dist/sdk/config-YNC2EOOT.mjs +16 -0
  316. package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
  317. package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
  318. package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
  319. package/dist/sdk/failure-condition-evaluator-YGTF2GHG.mjs +17 -0
  320. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
  321. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
  322. package/dist/sdk/github-frontend-SIAEOCON.mjs +1420 -0
  323. package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
  324. package/dist/sdk/host-DXUYTNMU.mjs +52 -0
  325. package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
  326. package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-PKWCKK7E.mjs} +8 -2
  327. package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
  328. package/dist/sdk/memory-store-XGBB7LX7.mjs.map +1 -0
  329. package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
  330. package/dist/sdk/metrics-7PP3EJUH.mjs.map +1 -0
  331. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
  332. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
  333. package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
  334. package/dist/sdk/prompt-state-YRJY6QAL.mjs.map +1 -0
  335. package/dist/sdk/renderer-schema-LPKN5UJS.mjs +51 -0
  336. package/dist/sdk/renderer-schema-LPKN5UJS.mjs.map +1 -0
  337. package/dist/sdk/routing-6N45MJ4F.mjs +24 -0
  338. package/dist/sdk/routing-6N45MJ4F.mjs.map +1 -0
  339. package/dist/sdk/sdk.d.mts +541 -22
  340. package/dist/sdk/sdk.d.ts +541 -22
  341. package/dist/sdk/sdk.js +27963 -16505
  342. package/dist/sdk/sdk.js.map +1 -1
  343. package/dist/sdk/sdk.mjs +1116 -2169
  344. package/dist/sdk/sdk.mjs.map +1 -1
  345. package/dist/sdk/session-registry-4E6YRQ77.mjs +10 -0
  346. package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
  347. package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
  348. package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
  349. package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
  350. package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
  351. package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
  352. package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
  353. package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
  354. package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
  355. package/dist/sdk.d.ts.map +1 -1
  356. package/dist/slack/adapter.d.ts +36 -0
  357. package/dist/slack/adapter.d.ts.map +1 -0
  358. package/dist/slack/cache-prewarmer.d.ts +31 -0
  359. package/dist/slack/cache-prewarmer.d.ts.map +1 -0
  360. package/dist/slack/client.d.ts +77 -0
  361. package/dist/slack/client.d.ts.map +1 -0
  362. package/dist/slack/markdown.d.ts +45 -0
  363. package/dist/slack/markdown.d.ts.map +1 -0
  364. package/dist/slack/prompt-state.d.ts +33 -0
  365. package/dist/slack/prompt-state.d.ts.map +1 -0
  366. package/dist/slack/rate-limiter.d.ts +56 -0
  367. package/dist/slack/rate-limiter.d.ts.map +1 -0
  368. package/dist/slack/signature.d.ts +2 -0
  369. package/dist/slack/signature.d.ts.map +1 -0
  370. package/dist/slack/socket-runner.d.ts +42 -0
  371. package/dist/slack/socket-runner.d.ts.map +1 -0
  372. package/dist/slack/thread-cache.d.ts +51 -0
  373. package/dist/slack/thread-cache.d.ts.map +1 -0
  374. package/dist/snapshot-store.d.ts +59 -0
  375. package/dist/snapshot-store.d.ts.map +1 -0
  376. package/dist/state-machine/context/build-engine-context.d.ts +17 -0
  377. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
  378. package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
  379. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
  380. package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
  381. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
  382. package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
  383. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
  384. package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
  385. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
  386. package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
  387. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
  388. package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
  389. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
  390. package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
  391. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
  392. package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
  393. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
  394. package/dist/state-machine/execution/summary.d.ts +8 -0
  395. package/dist/state-machine/execution/summary.d.ts.map +1 -0
  396. package/dist/state-machine/runner.d.ts +79 -0
  397. package/dist/state-machine/runner.d.ts.map +1 -0
  398. package/dist/state-machine/states/check-running.d.ts +14 -0
  399. package/dist/state-machine/states/check-running.d.ts.map +1 -0
  400. package/dist/state-machine/states/completed.d.ts +12 -0
  401. package/dist/state-machine/states/completed.d.ts.map +1 -0
  402. package/dist/state-machine/states/error.d.ts +11 -0
  403. package/dist/state-machine/states/error.d.ts.map +1 -0
  404. package/dist/state-machine/states/init.d.ts +11 -0
  405. package/dist/state-machine/states/init.d.ts.map +1 -0
  406. package/dist/state-machine/states/level-dispatch.d.ts +17 -0
  407. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
  408. package/dist/state-machine/states/plan-ready.d.ts +12 -0
  409. package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
  410. package/dist/state-machine/states/routing.d.ts +52 -0
  411. package/dist/state-machine/states/routing.d.ts.map +1 -0
  412. package/dist/state-machine/states/wave-planning.d.ts +14 -0
  413. package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
  414. package/dist/state-machine/workflow-projection.d.ts +47 -0
  415. package/dist/state-machine/workflow-projection.d.ts.map +1 -0
  416. package/dist/state-machine-execution-engine.d.ts +159 -0
  417. package/dist/state-machine-execution-engine.d.ts.map +1 -0
  418. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  419. package/dist/telemetry/state-capture.d.ts +5 -0
  420. package/dist/telemetry/state-capture.d.ts.map +1 -1
  421. package/dist/test-runner/assertions.d.ts +59 -0
  422. package/dist/test-runner/assertions.d.ts.map +1 -0
  423. package/dist/test-runner/core/environment.d.ts +8 -0
  424. package/dist/test-runner/core/environment.d.ts.map +1 -0
  425. package/dist/test-runner/core/fixture.d.ts +3 -0
  426. package/dist/test-runner/core/fixture.d.ts.map +1 -0
  427. package/dist/test-runner/core/flow-stage.d.ts +32 -0
  428. package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
  429. package/dist/test-runner/core/mocks.d.ts +8 -0
  430. package/dist/test-runner/core/mocks.d.ts.map +1 -0
  431. package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
  432. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
  433. package/dist/test-runner/evaluators.d.ts +45 -0
  434. package/dist/test-runner/evaluators.d.ts.map +1 -0
  435. package/dist/test-runner/fixture-loader.d.ts +30 -0
  436. package/dist/test-runner/fixture-loader.d.ts.map +1 -0
  437. package/dist/test-runner/index.d.ts +127 -0
  438. package/dist/test-runner/index.d.ts.map +1 -0
  439. package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
  440. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
  441. package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
  442. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
  443. package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
  444. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
  445. package/dist/test-runner/utils/selectors.d.ts +2 -0
  446. package/dist/test-runner/utils/selectors.d.ts.map +1 -0
  447. package/dist/test-runner/validator.d.ts +8 -0
  448. package/dist/test-runner/validator.d.ts.map +1 -0
  449. package/dist/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  450. package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  451. package/dist/types/bot.d.ts +109 -0
  452. package/dist/types/bot.d.ts.map +1 -0
  453. package/dist/types/cli.d.ts +8 -1
  454. package/dist/types/cli.d.ts.map +1 -1
  455. package/dist/types/config.d.ts +459 -9
  456. package/dist/types/config.d.ts.map +1 -1
  457. package/dist/types/engine.d.ts +177 -0
  458. package/dist/types/engine.d.ts.map +1 -0
  459. package/dist/types/execution.d.ts +73 -0
  460. package/dist/types/execution.d.ts.map +1 -0
  461. package/dist/types/git-checkout.d.ts +76 -0
  462. package/dist/types/git-checkout.d.ts.map +1 -0
  463. package/dist/types/github.d.ts +51 -0
  464. package/dist/types/github.d.ts.map +1 -0
  465. package/dist/types/workflow.d.ts +237 -0
  466. package/dist/types/workflow.d.ts.map +1 -0
  467. package/dist/utils/command-executor.d.ts +43 -0
  468. package/dist/utils/command-executor.d.ts.map +1 -0
  469. package/dist/utils/comment-metadata.d.ts +21 -0
  470. package/dist/utils/comment-metadata.d.ts.map +1 -0
  471. package/dist/utils/config-loader.d.ts.map +1 -1
  472. package/dist/utils/config-merger.d.ts.map +1 -1
  473. package/dist/utils/env-exposure.d.ts +3 -0
  474. package/dist/utils/env-exposure.d.ts.map +1 -0
  475. package/dist/utils/file-exclusion.d.ts.map +1 -1
  476. package/dist/utils/interactive-prompt.d.ts +1 -1
  477. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  478. package/dist/utils/json-text-extractor.d.ts +17 -0
  479. package/dist/utils/json-text-extractor.d.ts.map +1 -0
  480. package/dist/utils/sandbox.d.ts +10 -0
  481. package/dist/utils/sandbox.d.ts.map +1 -1
  482. package/dist/utils/script-memory-ops.d.ts +21 -0
  483. package/dist/utils/script-memory-ops.d.ts.map +1 -0
  484. package/dist/utils/template-context.d.ts +8 -0
  485. package/dist/utils/template-context.d.ts.map +1 -0
  486. package/dist/utils/tracer-init.d.ts.map +1 -1
  487. package/dist/utils/workspace-manager.d.ts +118 -0
  488. package/dist/utils/workspace-manager.d.ts.map +1 -0
  489. package/dist/utils/worktree-cleanup.d.ts +33 -0
  490. package/dist/utils/worktree-cleanup.d.ts.map +1 -0
  491. package/dist/utils/worktree-manager.d.ts +153 -0
  492. package/dist/utils/worktree-manager.d.ts.map +1 -0
  493. package/dist/webhook-server.d.ts +3 -3
  494. package/dist/webhook-server.d.ts.map +1 -1
  495. package/dist/workflow-executor.d.ts +81 -0
  496. package/dist/workflow-executor.d.ts.map +1 -0
  497. package/dist/workflow-registry.d.ts +79 -0
  498. package/dist/workflow-registry.d.ts.map +1 -0
  499. package/package.json +12 -5
  500. package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  501. package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
  502. package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
  503. package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
  504. package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
  505. package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
  506. package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
  507. package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
  508. package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
  509. package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
  510. package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
  511. package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
  512. package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
  513. package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
  514. package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
  515. package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
  516. package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
  517. package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
  518. package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
  519. package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
  520. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
  521. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
  522. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
  523. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
  524. package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  525. /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
  526. /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
  527. /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
  528. /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
  529. /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
  530. /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
@@ -0,0 +1,483 @@
1
+ version: "1.0"
2
+ include: "./code-review.yaml"
3
+
4
+ # Default Visor configuration - provides comprehensive code analysis out-of-the-box
5
+ # Uses mock provider for CI compatibility when no AI API keys are configured
6
+ # Users can override this by creating their own .visor.yaml in their project root
7
+
8
+ # Global AI provider settings - users should configure their preferred provider
9
+ # For CI testing, use --provider mock CLI flag instead
10
+
11
+ # Run up to 4 steps in parallel for faster execution
12
+ max_parallelism: 4
13
+
14
+ # Global fail condition - fail if critical or error severity issues are found
15
+ fail_if: "output.issues && output.issues.some(i => i.severity === 'critical' || i.severity === 'error')"
16
+
17
+ # Workflow steps (formerly 'checks' - both keys are supported for backward compatibility)
18
+ steps:
19
+ # AI-powered release notes generation - manual execution only for release workflows
20
+ release-notes:
21
+ type: ai
22
+ group: release
23
+ on: [manual]
24
+ prompt: |
25
+ Generate professional release notes for version {{ env.TAG_NAME }} of this project.
26
+
27
+ Analyze the git commits since the last release:
28
+ ```
29
+ {{ env.GIT_LOG }}
30
+ ```
31
+
32
+ And the file changes summary:
33
+ ```
34
+ {{ env.GIT_DIFF_STAT }}
35
+ ```
36
+
37
+ Create release notes with these sections:
38
+
39
+ ## 🚀 What's New in {{ env.TAG_NAME }}
40
+
41
+ ### ✨ New Features
42
+ List any new features added (look for feat: commits)
43
+
44
+ ### 🐛 Bug Fixes
45
+ List any bugs fixed (look for fix: commits)
46
+
47
+ ### 📈 Improvements
48
+ List any improvements or refactoring (look for refactor:, perf:, chore:, build: commits)
49
+
50
+ ### 🔥 Breaking Changes
51
+ List any breaking changes if present (look for BREAKING CHANGE or ! in commits)
52
+
53
+ ### 📊 Statistics
54
+ - Number of commits since last release
55
+ - Number of contributors involved
56
+ - Number of files changed
57
+
58
+ Keep descriptions concise and user-friendly. Focus on what changed from a user perspective, not implementation details.
59
+ Use present tense and action-oriented language. Group similar changes together.
60
+ schema: plain
61
+
62
+ # (overview, security, architecture, performance, quality) were extracted to defaults/code-review.yaml
63
+
64
+ # Apply labels based on overview tags — runs only on PR open (GitHub environments only)
65
+ apply-overview-labels:
66
+ type: github
67
+ criticality: external
68
+ tags: [github]
69
+ on: [pr_opened]
70
+ depends_on: [overview]
71
+ assume:
72
+ - "outputs['overview']?.tags?.label"
73
+ - "outputs['overview']?.tags?.['review-effort'] != null"
74
+ op: labels.add
75
+ values:
76
+ - "{{ outputs.overview.tags.label | default: '' | safe_label }}"
77
+ - "{{ outputs.overview.tags['review-effort'] | default: '' | prepend: 'review/effort:' | safe_label }}"
78
+
79
+ # Issue Assistant (issues only) — triage-quality prompt from main branch, structured output
80
+ issue-assistant:
81
+ type: ai
82
+ group: dynamic # New issue triage posts a standalone comment
83
+ on: [issue_opened]
84
+ schema: issue-assistant
85
+ prompt: |
86
+ You are an intelligent GitHub issue assistant for the {{ event.repository.fullName }} repository. Your role is to provide professional, knowledgeable assistance when a NEW issue is opened.
87
+
88
+ {%- liquid
89
+ # Correction context from the last validation wave (filtered)
90
+ # Keep only invalid or non-high confidence items using where_exp
91
+ assign issues = outputs_history["validate-fact"].last | where_exp: 'i', 'i && (i.is_valid != true || i.confidence != "high")'
92
+ assign has_problems = issues | not_empty
93
+ -%}
94
+ {% if has_problems %}
95
+ ⚠️ **IMPORTANT: Your previous response contained factual errors. Please correct them:**
96
+
97
+ <previous_response>
98
+ {% assign prev_comment = outputs_history["comment-assistant"].last %}
99
+ {{ prev_comment.text }}
100
+ </previous_response>
101
+
102
+ **Validation Errors Found:**
103
+ {% for issue in issues %}
104
+ {% if issue.is_valid == nil or issue.is_valid != true or issue.confidence != 'high' %}
105
+ - **{{ issue.claim }}**: {{ issue.evidence | default: "" }}
106
+ {% if issue.correction %}
107
+ Correction: {{ issue.correction }}
108
+ {% endif %}
109
+ Claim: {{ issue.claim }}
110
+ {% if issue.correction %}Correction: {{ issue.correction }}{% endif %}
111
+ {% endif %}
112
+ {% endfor %}
113
+
114
+ Please provide a corrected response that addresses these factual errors.
115
+ {% endif %}
116
+
117
+ Return ONE JSON object (no prose outside JSON) that validates the `issue-assistant` schema with:
118
+ - `text`: write a clear, well-structured markdown reply that welcomes the reporter, shows understanding, and provides next steps. Use sections and bullets where helpful.
119
+ - `intent`: must be "issue_triage" for this flow.
120
+ - `labels` (optional): array of labels that would help organization for this new issue.
121
+
122
+ Add a short “References” section at the end of the markdown `text` as a simple, clickable markdown list (no fenced code blocks). Keep it minimal. If you didn’t consult code, write `References: none`.
123
+
124
+ Example:
125
+ References:
126
+ - [path/to/file.ext:START-END](https://github.com/{{ event.repository.fullName }}/blob/{{ event.pull_request.head.sha | default: 'HEAD' }}/path/to/file.ext#LSTART-LEND) – very short note
127
+
128
+ Use this triage rubric (adopted from our main prompt):
129
+ 1) Categorize the issue - choose from: bug, chore, documentation, enhancement, feature, question, wontfix, invalid, duplicate
130
+ 2) Assess priority (low/medium/high/urgent)
131
+ 3) Estimate complexity (trivial/simple/moderate/complex)
132
+ 4) Recommend labels from the categories above
133
+ 5) Identify potential areas affected or relevant documentation
134
+ 6) Provide an initial response with clarifying questions if needed
135
+
136
+ Response style:
137
+ - Professional and welcoming
138
+ - Start by acknowledging what you understand from the issue report
139
+ - Clearly state what you're confident about based on the information provided
140
+ - Identify what is unclear or missing, and explicitly ask follow-up questions to help with debugging
141
+ - When information is incomplete, ask specific questions that would help diagnose the issue
142
+ - Provide actionable guidance and clear next steps
143
+ - Use natural markdown formatting; include code snippets where useful
144
+ - Be honest about what you know and what you don't know
145
+ - NEVER make promises about timelines, release dates, or team commitments
146
+ - NEVER say things like "we'll pick this up", "will be included in upcoming release", or "we will post updates"
147
+ - Focus on technical analysis and helpful information rather than commitments
148
+
149
+ # Comment Assistant (comments only) — intent detection and reply
150
+ comment-assistant:
151
+ type: ai
152
+ group: dynamic
153
+ on: [issue_comment]
154
+ command: "visor"
155
+ prompt: |
156
+ You are the GitHub comment assistant for {{ event.repository.fullName }}. Respond to user comments on issues or PR discussion threads.
157
+
158
+ Latest comment (verbatim):
159
+ {{ event.comment.body | default: "" }}
160
+
161
+ {%- liquid
162
+ # Correction context from the last validation wave (filtered)
163
+ assign issues = outputs_history["validate-fact"].last | where_exp: 'i', 'i && (i.is_valid != true || i.confidence != "high")'
164
+ assign has_problems = issues | not_empty
165
+ assign prev_comment = outputs_history["comment-assistant"].last
166
+ -%}
167
+ {% if has_problems %}
168
+ ⚠️ **IMPORTANT: Your previous response contained factual errors. Please correct them:**
169
+
170
+ <previous_response>
171
+ {{ prev_comment.text | default: "" }}
172
+ </previous_response>
173
+
174
+ **Validation Errors Found:**
175
+ {%- for issue in issues -%}
176
+ {%- if issue.is_valid == nil or issue.is_valid != true or issue.confidence != 'high' -%}
177
+ - **{{ issue.claim }}**: {{ issue.evidence | default: "" }}
178
+ {%- if issue.correction %}
179
+ Correction: {{ issue.correction }}
180
+ {%- endif %}
181
+ Claim: {{ issue.claim }}
182
+ {%- if issue.correction %}Correction: {{ issue.correction }}{% endif -%}
183
+ {%- endif -%}
184
+ {%- endfor -%}
185
+
186
+ Please provide a corrected response that addresses these factual errors.
187
+ {% endif %}
188
+
189
+ Return ONE JSON object (no prose outside JSON) that validates the `issue-assistant` schema with:
190
+ - `text`: a concise, helpful markdown reply to the latest comment.
191
+ - `intent`: choose one: "comment_reply" (normal reply) or "comment_retrigger" (pick this ONLY when the user explicitly asks to re-run checks OR explicitly asks to disable some checks).
192
+ - `labels`: omit for comments (do not include).
193
+
194
+ Add a short “References” section at the end of the markdown `text` as a clickable markdown list (no fenced blocks). If none used, write `References: none`.
195
+
196
+ Example:
197
+ References:
198
+ - [path/to/file.ext:START-END](https://github.com/{{ event.repository.fullName }}/blob/{{ event.pull_request.head.sha | default: 'HEAD' }}/path/to/file.ext#LSTART-LEND) – very short note
199
+
200
+ Rules:
201
+ - Never suggest rerun/disable unless asked explicitly.
202
+ - If asked to disable any check(s), set `intent` = "comment_retrigger" and in `text` acknowledge the request and say the checks will be re-run; DO NOT propose slash/directive comments.
203
+ - Stay technical, direct, and specific; add code snippets or links when helpful.
204
+ - When answering questions, acknowledge what you can answer confidently based on the context provided
205
+ - If you need more information to provide a complete answer, ask specific follow-up questions
206
+ - Be honest when you don't know something or can't find the answer in the available context
207
+ - If the question requires information not available in the PR/issue context, clearly state what's missing
208
+ - Provide partial answers when possible, and indicate what additional information would help give a complete response
209
+ schema: issue-assistant
210
+ on_success:
211
+ transitions:
212
+ - when: "event.name === 'issue_comment' && output?.intent === 'comment_retrigger'"
213
+ to: overview
214
+ goto_event: pr_updated
215
+
216
+ # Apply labels to new issues based on assistant output (GitHub-only)
217
+ apply-issue-labels:
218
+ type: github
219
+ criticality: external
220
+ tags: [github]
221
+ on: [issue_opened]
222
+ depends_on: [issue-assistant]
223
+ assume:
224
+ - "(outputs['issue-assistant']?.labels?.length ?? 0) > 0"
225
+ op: labels.add
226
+ # Explicitly derive labels from issue-assistant output with guardrails
227
+ # - Use Liquid to serialize labels array to JSON; provider will expand
228
+ # - Assumptions ensure the dependency exists and produced at least one label
229
+ values:
230
+ - "{{ outputs['issue-assistant'].labels | default: [] | json }}"
231
+
232
+ # External origin labelling for PRs and Issues
233
+ external-label:
234
+ type: github
235
+ criticality: external
236
+ tags: [github]
237
+ on: [pr_opened, issue_opened]
238
+ if: "!isMember() && !isContributor()"
239
+ op: labels.add
240
+ values:
241
+ - "external"
242
+
243
+ # ============================================================================
244
+ # Fact Validation System (enabled with ENABLE_FACT_VALIDATION env var)
245
+ # ============================================================================
246
+ # This system validates factual claims made by AI assistants before posting
247
+ # responses to GitHub issues and comments. It uses forEach with on_finish hooks
248
+ # to validate all facts, aggregate results, and retry with correction context
249
+ # if needed.
250
+ #
251
+ # To enable: Set ENABLE_FACT_VALIDATION=true environment variable
252
+ # ============================================================================
253
+
254
+ # Extract verifiable facts from assistant responses
255
+ # This is a forEach check that triggers validation for each fact
256
+ extract-facts:
257
+ type: ai
258
+ group: fact-validation
259
+ on: [issue_opened, issue_comment]
260
+ depends_on: ["issue-assistant|comment-assistant"]
261
+ # Only when validation is enabled (assistants schedule validate-fact; engine runs this dependency inline)
262
+ if: "env.ENABLE_FACT_VALIDATION === 'true'"
263
+ # Ensure we have an assistant output to analyze for this event type
264
+ assume:
265
+ - "outputs['issue-assistant'] || outputs['comment-assistant']"
266
+ ai:
267
+ skip_code_context: true
268
+ disableTools: true
269
+ prompt: |
270
+ Your task is to EXTRACT factual claims from the assistant's response below.
271
+
272
+ IMPORTANT: Do NOT investigate, verify, or validate any facts. Simply identify and list them.
273
+ Do NOT use any tools or search the codebase. Just read the response and extract claims.
274
+
275
+ Assistant's response to analyze:
276
+ ```
277
+ {% if outputs['issue-assistant'] %}{{ outputs['issue-assistant'].text }}{% else %}{{ outputs['comment-assistant'].text }}{% endif %}
278
+ ```
279
+
280
+ If the response ends with a “References” section in a fenced block labeled `refs`, parse it. Each line will be in the form:
281
+ path/to/file.ext[:start[-end]|#SymbolName] - note
282
+ Capture it as an array of objects `{ path, lines?, symbol? }` where `lines` is the numeric line or range if present, or `symbol` is the string after `#`.
283
+ When assigning references to facts:
284
+ - If a reference clearly maps to a specific fact, include only those refs for that fact.
285
+ - If mapping is ambiguous, include the entire refs list for that fact (better recall than omission).
286
+
287
+ Extract verifiable factual claims about:
288
+ - Configuration variables and their values (e.g., "max_parallelism defaults to 4")
289
+ - Feature capabilities (what is/isn't supported, how features work)
290
+ - File paths and locations mentioned (e.g., "config is in src/config.ts")
291
+ - Function/class names and their behavior
292
+ - Command syntax and available options
293
+ - API endpoints and their methods
294
+ - Environment variables and usage
295
+ - Default values and constants
296
+ - Line numbers or code locations mentioned
297
+ - Data structures and schemas
298
+ - Dependencies and version requirements
299
+
300
+ Guidelines:
301
+ - Extract claims AS STATED in the response (don't verify or investigate)
302
+ - Focus on specific, testable assertions
303
+ - Each claim MUST be self-contained with ALL necessary context
304
+ - Include file paths, line numbers, values in the claim itself
305
+ - AVOID duplicates - if same fact appears multiple times, extract it once
306
+ - Group related info when it's the SAME fact (e.g., "value is 3 at lines 100 and 200")
307
+ - Each fact should be atomic and independently verifiable
308
+
309
+ Example of GOOD claims:
310
+ - "max_parallelism defaults to 3 in src/check-execution-engine.ts at lines 2795 and 4712"
311
+ - "Configuration file defaults/visor.yaml sets max_parallelism to 4 at line 11"
312
+
313
+ Example of BAD claims (missing context):
314
+ - "Default is 3" (missing: default of what? where?)
315
+ - "Code has hardcoded value" (missing: what value? where? which file?)
316
+
317
+ Do NOT extract:
318
+ - Recommendations (e.g., "you should change X to Y")
319
+ - Opinions or preferences (e.g., "this is better than")
320
+ - General explanations without specific claims
321
+ - Your own knowledge - only extract what's IN the response
322
+ - Duplicate facts (same claim stated multiple ways)
323
+
324
+ Return ONLY the JSON array of fact objects. Do not investigate or verify anything.
325
+ Each item must be: { id, category, claim, verifiable, refs? } where refs items may contain `lines` or `symbol`.
326
+
327
+ schema:
328
+ type: array
329
+ items:
330
+ type: object
331
+ properties:
332
+ id:
333
+ type: string
334
+ description: Unique identifier for the fact (e.g., fact-1, fact-2)
335
+ category:
336
+ type: string
337
+ description: Type of claim (Configuration, Feature, Documentation, API, etc.)
338
+ claim:
339
+ type: string
340
+ description: The exact factual statement being made
341
+ verifiable:
342
+ type: boolean
343
+ description: Whether this claim can be verified against the codebase
344
+ refs:
345
+ type: array
346
+ description: Optional list of code references (parsed from assistant References block)
347
+ items:
348
+ type: object
349
+ properties:
350
+ path:
351
+ type: string
352
+ lines:
353
+ type: string
354
+ description: Line or range, e.g., "120-145" or "88"
355
+ required: [path]
356
+ required: [id, category, claim, verifiable]
357
+
358
+ forEach: true
359
+
360
+ # After one validation wave completes, route back to the appropriate assistant
361
+ # using declarative transitions so the engine forward-runs dependents
362
+ # (assistant → extract-facts → validate-fact).
363
+ on_finish:
364
+ transitions:
365
+ - when: "any(outputs_history['validate-fact'], v => v && (v.is_valid === false || v.valid === false)) && event.name === 'issue_opened'"
366
+ to: issue-assistant
367
+ - when: "any(outputs_history['validate-fact'], v => v && (v.is_valid === false || v.valid === false)) && event.name === 'issue_comment'"
368
+ to: comment-assistant
369
+
370
+ # Validate each extracted fact
371
+ validate-fact:
372
+ type: ai
373
+ group: fact-validation
374
+ on: [issue_opened, issue_comment]
375
+ depends_on: [extract-facts]
376
+ if: "env.ENABLE_FACT_VALIDATION === 'true'"
377
+ ai:
378
+ timeout: 180000 # 3 minutes hard cap per validation
379
+ # always validate each fact
380
+ prompt: |
381
+ Validate this factual claim against the codebase:
382
+
383
+ **Claim:** {{ outputs['extract-facts'].claim }}
384
+ **Category:** {{ outputs['extract-facts'].category }}
385
+ **Fact ID:** {{ outputs['extract-facts'].id }}
386
+
387
+ Use code search and file reading tools to verify if this claim is accurate.
388
+
389
+ If references were provided for this fact (parsed earlier), use them FIRST and prefer them strongly:
390
+ {% assign refs = outputs['extract-facts'].refs %}
391
+ {% assign __refs_len = refs | size %}
392
+ {% if refs and __refs_len > 0 %}
393
+ Provided References:
394
+ {% for r in refs %}- {{ r.path }}{% if r.lines %}:{{ r.lines }}{% endif %}{% if r.symbol %}#{{ r.symbol }}{% endif %}
395
+ {% endfor %}
396
+ Strategy:
397
+ - If a reference has `lines`, open those line ranges first and try to validate from there.
398
+ - If a reference has `symbol`, locate the symbol definition in the referenced file (e.g., function/class/const). Search for common patterns like:
399
+ - `function SYMBOL(`, `const SYMBOL`, `let SYMBOL`, `class SYMBOL`, `export .* SYMBOL`, `SYMBOL:\s*` (TypeScript), etc.
400
+ Then analyze ~100 lines around the definition (±50 lines) before expanding.
401
+ - Expand search to nearby lines in the same files if needed (±50 lines).
402
+ - Only if still inconclusive, perform a broader search.
403
+ {% else %}
404
+ No provided references. Perform a targeted search (prefer exact identifiers from the claim) before broader queries.
405
+ {% endif %}
406
+
407
+ Provide:
408
+ - Evidence of what you found in the codebase
409
+ - Confidence level (high/medium/low) in your validation
410
+ - If the claim is incorrect, provide the accurate information as a correction
411
+
412
+ schema:
413
+ type: object
414
+ properties:
415
+ fact_id:
416
+ type: string
417
+ description: ID of the fact being validated
418
+ claim:
419
+ type: string
420
+ description: The original claim being validated
421
+ is_valid:
422
+ type: boolean
423
+ description: Whether the claim is accurate
424
+ confidence:
425
+ type: string
426
+ enum: [high, medium, low]
427
+ description: Confidence level in the validation
428
+ evidence:
429
+ type: string
430
+ description: Evidence found in the codebase supporting the validation
431
+ correction:
432
+ type: string
433
+ description: If invalid, the correct information (optional)
434
+ required: [fact_id, claim, is_valid, confidence, evidence]
435
+
436
+ # Aggregate validation results and expose boolean all_valid
437
+ aggregate:
438
+ type: script
439
+ group: fact-validation
440
+ on: [issue_opened, issue_comment]
441
+ depends_on: [validate-fact]
442
+ if: "env.ENABLE_FACT_VALIDATION === 'true'"
443
+ assume:
444
+ # Run only when we have per-item validations and it's the first attempt
445
+ - "(outputs['validate-fact']?.forEachItems?.length ?? 0) > 0"
446
+ - "(memory.get('attempt', 'fact-validation') ?? 0) === 0"
447
+ content: |
448
+ const vf = (outputs.history['validate-fact']||[]).filter(v => v && typeof v === 'object');
449
+ const ex = (outputs.history['extract-facts']||[]);
450
+ let lastSize = 0; for (let i = ex.length - 1; i >= 0 && lastSize === 0; i--) { if (Array.isArray(ex[i])) { lastSize = ex[i].length; } }
451
+ const recent = lastSize > 0 ? vf.slice(-lastSize) : vf;
452
+ const allValid = recent.length > 0 && recent.every(i => i && (i.is_valid === true || i.valid === true));
453
+ memory.set('all_valid', allValid, 'fact-validation');
454
+ return { all_valid: allValid };
455
+ schema:
456
+ type: object
457
+ properties:
458
+ all_valid:
459
+ type: boolean
460
+ required:
461
+ - all_valid
462
+ additionalProperties: false
463
+ guarantee: "output && typeof output.all_valid === 'boolean'"
464
+ namespace: fact-validation
465
+
466
+ # Post only when all facts are valid
467
+ post-verified:
468
+ type: log
469
+ group: fact-validation
470
+ on: [issue_opened, issue_comment]
471
+ depends_on: [extract-facts]
472
+ if: "env.ENABLE_FACT_VALIDATION === 'true' && memory.get('all_valid', 'fact-validation') === true"
473
+ message: "✅ Posted verified response"
474
+ level: info
475
+
476
+ # Retrigger noop removed — comment-assistant schedules overview directly
477
+
478
+ output:
479
+ pr_comment:
480
+ format: markdown
481
+ # Grouping is determined solely by each check's `group` field.
482
+ # The renderer ignores any global group_by; keep comments compact.
483
+ collapse: true
@@ -0,0 +1,118 @@
1
+ # Visor Cloudflare Pages Deployment
2
+
3
+ This document describes how to deploy the Visor landing page to Cloudflare Pages with worker routing from `probelabs.com/visor`.
4
+
5
+ ## Architecture
6
+
7
+ The deployment consists of two components:
8
+
9
+ 1. **Cloudflare Pages Site**: Hosts the static `index.html` at `https://visor-site.pages.dev`
10
+ 2. **Cloudflare Worker**: Routes requests from `probelabs.com/visor/*` to the Pages site
11
+
12
+ ## Files Structure
13
+
14
+ ```
15
+ /Users/leonidbugaev/go/src/gates/
16
+ ├── wrangler.toml # Worker configuration
17
+ ├── worker.js # Worker routing script
18
+ ├── package.json # Deployment scripts
19
+ └── site/
20
+ ├── index.html # Visor landing page
21
+ └── _routes.json # Pages routing configuration
22
+ ```
23
+
24
+ ## Configuration Files
25
+
26
+ ### wrangler.toml
27
+ Configures the Cloudflare Worker named `visor-router` that handles routing from `probelabs.com/visor` and `probelabs.com/visor/*` to the Pages deployment.
28
+
29
+ ### worker.js
30
+ The worker script that:
31
+ - Redirects `probelabs.com/visor` to `probelabs.com/visor/` (with trailing slash)
32
+ - Proxies requests from `probelabs.com/visor/*` to `https://visor-site.pages.dev`
33
+ - Updates HTML content to prefix absolute URLs with `/visor`
34
+
35
+ ### site/_routes.json
36
+ Cloudflare Pages routing configuration that includes all `/visor/*` routes.
37
+
38
+ ## Deployment Process
39
+
40
+ ### Prerequisites
41
+
42
+ 1. Install Wrangler CLI and authenticate:
43
+ ```bash
44
+ npm install -g wrangler
45
+ wrangler login
46
+ ```
47
+
48
+ 2. Install project dependencies:
49
+ ```bash
50
+ cd /Users/leonidbugaev/go/src/gates
51
+ npm install
52
+ ```
53
+
54
+ ### Deploy the Pages Site
55
+
56
+ Deploy the static site to Cloudflare Pages:
57
+
58
+ ```bash
59
+ npm run deploy:site
60
+ ```
61
+
62
+ This runs: `cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true`
63
+
64
+ ### Deploy the Worker
65
+
66
+ Deploy the routing worker:
67
+
68
+ ```bash
69
+ npm run deploy:worker
70
+ ```
71
+
72
+ This runs: `npx wrangler deploy`
73
+
74
+ ### Full Deployment
75
+
76
+ Deploy both components:
77
+
78
+ ```bash
79
+ npm run deploy
80
+ ```
81
+
82
+ ## Verification
83
+
84
+ After deployment:
85
+
86
+ 1. **Pages Site**: Visit `https://visor-site.pages.dev` to verify the site loads correctly
87
+ 2. **Worker Routing**: Visit `https://probelabs.com/visor` to verify it redirects to `https://probelabs.com/visor/`
88
+ 3. **Content Proxying**: Verify that `https://probelabs.com/visor/` shows the Visor landing page with correctly prefixed URLs
89
+
90
+ ## Configuration Details
91
+
92
+ ### Pages Project Name
93
+ The Pages deployment uses project name `visor-site`, which creates the URL `https://visor-site.pages.dev`.
94
+
95
+ ### Worker Routes
96
+ The worker is configured to handle:
97
+ - `probelabs.com/visor` (exact match)
98
+ - `probelabs.com/visor/*` (wildcard match)
99
+
100
+ ### URL Transformation
101
+ The worker transforms URLs by:
102
+ 1. Removing `/visor` prefix from incoming requests
103
+ 2. Forwarding to `https://visor-site.pages.dev`
104
+ 3. Updating HTML content to add `/visor` prefix to absolute URLs
105
+
106
+ ## Maintenance
107
+
108
+ ### Updating the Site
109
+ 1. Modify `/Users/leonidbugaev/go/src/gates/site/index.html`
110
+ 2. Run `npm run deploy:site`
111
+
112
+ ### Updating the Worker
113
+ 1. Modify `/Users/leonidbugaev/go/src/gates/worker.js`
114
+ 2. Run `npm run deploy:worker`
115
+
116
+ ### Logs and Monitoring
117
+ - View worker logs: `wrangler tail visor-router`
118
+ - Monitor Pages deployment: Check Cloudflare Dashboard > Pages > visor-site