@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
@@ -1,47 +1,5 @@
1
- export interface GitHubActionInputs {
2
- 'github-token': string;
3
- owner?: string;
4
- repo?: string;
5
- 'auto-review'?: string;
6
- 'app-id'?: string;
7
- 'private-key'?: string;
8
- 'installation-id'?: string;
9
- checks?: string;
10
- 'output-format'?: string;
11
- 'config-path'?: string;
12
- 'comment-on-pr'?: string;
13
- 'create-check'?: string;
14
- 'add-labels'?: string;
15
- 'add-reactions'?: string;
16
- 'fail-on-critical'?: string;
17
- 'fail-on-api-error'?: string;
18
- 'min-score'?: string;
19
- 'max-parallelism'?: string;
20
- 'fail-fast'?: string;
21
- debug?: string;
22
- 'ai-provider'?: string;
23
- 'ai-model'?: string;
24
- tags?: string;
25
- 'exclude-tags'?: string;
26
- 'visor-config-path'?: string;
27
- 'visor-checks'?: string;
28
- }
29
- export interface GitHubContext {
30
- event_name: string;
31
- repository?: {
32
- owner: {
33
- login: string;
34
- };
35
- name: string;
36
- };
37
- event?: {
38
- comment?: Record<string, unknown>;
39
- issue?: Record<string, unknown>;
40
- pull_request?: Record<string, unknown>;
41
- action?: string;
42
- };
43
- payload?: Record<string, unknown>;
44
- }
1
+ import { GitHubActionInputs, GitHubContext } from './types/github';
2
+ export { GitHubActionInputs, GitHubContext };
45
3
  export interface ActionCliOutput {
46
4
  success: boolean;
47
5
  output?: string;
@@ -54,57 +12,28 @@ export interface ActionCliOutput {
54
12
  };
55
13
  }
56
14
  /**
57
- * Bridge between GitHub Action and Visor CLI
15
+ * Minimal bridge between GitHub Action and Visor
16
+ * Provides utility functions for parsing GitHub Action inputs
58
17
  */
59
18
  export declare class ActionCliBridge {
60
19
  private githubToken;
61
20
  private context;
62
21
  constructor(githubToken: string, context: GitHubContext);
63
22
  /**
64
- * Determine if Visor CLI should be used based on inputs
23
+ * Determine if legacy Visor inputs are present
65
24
  */
66
25
  shouldUseVisor(inputs: GitHubActionInputs): boolean;
67
26
  /**
68
- * Parse GitHub Action inputs to CLI arguments
27
+ * Parse GitHub Action inputs into CLI arguments
28
+ * Note: No validation - let the config system handle it
69
29
  */
70
30
  parseGitHubInputsToCliArgs(inputs: GitHubActionInputs): string[];
71
31
  /**
72
- * Execute CLI with GitHub context
73
- */
74
- executeCliWithContext(inputs: GitHubActionInputs, options?: {
75
- workingDir?: string;
76
- timeout?: number;
77
- }): Promise<ActionCliOutput>;
78
- /**
79
- * Merge CLI and Action outputs for backward compatibility
80
- */
81
- mergeActionAndCliOutputs(actionInputs: GitHubActionInputs, cliResult: ActionCliOutput, legacyOutputs?: Record<string, string>): Record<string, string>;
82
- /**
83
- * Execute command with timeout and proper error handling
84
- */
85
- private executeCommand;
86
- /**
87
- * Parse CLI JSON output to extract relevant data
88
- */
89
- private parseCliOutput;
90
- /**
91
- * Check if a check type is valid
92
- */
93
- private isValidCheck;
94
- /**
95
- * Create temporary config file from action inputs
96
- */
97
- createTempConfigFromInputs(inputs: GitHubActionInputs, options?: {
98
- workingDir?: string;
99
- }): Promise<string | null>;
100
- /**
101
- * Get AI prompt for a specific check type
32
+ * Merge CLI outputs with legacy Action outputs
102
33
  */
103
- private getPromptForCheck;
34
+ mergeActionAndCliOutputs(inputs: GitHubActionInputs, cliResult: ActionCliOutput, legacyOutputs?: Record<string, string>): Record<string, string>;
104
35
  /**
105
- * Cleanup temporary files
36
+ * Cleanup method for compatibility (no-op since we don't create temp files)
106
37
  */
107
- cleanup(options?: {
108
- workingDir?: string;
109
- }): Promise<void>;
38
+ cleanup(): Promise<void>;
110
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/action-cli-bridge.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAKvD;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAS1D;;OAEG;IACI,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAgEvE;;OAEG;IACU,qBAAqB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC,eAAe,CAAC;IAsF3B;;OAEG;IACI,wBAAwB,CAC7B,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,eAAe,EAC1B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAyBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IA8DtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACU,0BAA0B,CACrC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GACpC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsDzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACU,OAAO,CAAC,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAU3E"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/action-cli-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAKvD;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAI1D;;;OAGG;IACI,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAgCvE;;OAEG;IACI,wBAAwB,CAC7B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,eAAe,EAC1B,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACzC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkBzB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAItC"}
@@ -20,6 +20,20 @@ export interface AIReviewConfig {
20
20
  [key: string]: unknown;
21
21
  }>;
22
22
  mcpServers?: Record<string, import('./types/config').McpServerConfig>;
23
+ enableDelegate?: boolean;
24
+ promptType?: string;
25
+ systemPrompt?: string;
26
+ customPrompt?: string;
27
+ retry?: import('./types/config').AIRetryConfig;
28
+ fallback?: import('./types/config').AIFallbackConfig;
29
+ allowEdit?: boolean;
30
+ allowedTools?: string[];
31
+ disableTools?: boolean;
32
+ allowBash?: boolean;
33
+ bashConfig?: import('./types/config').BashConfig;
34
+ path?: string;
35
+ allowedFolders?: string[];
36
+ completionPrompt?: string;
23
37
  }
24
38
  export interface AIDebugInfo {
25
39
  /** The prompt sent to the AI */
@@ -76,6 +90,10 @@ export declare class AIReviewService {
76
90
  * @param sessionMode - 'clone' (default) clones history, 'append' shares history
77
91
  */
78
92
  executeReviewWithSessionReuse(prInfo: PRInfo, customPrompt: string, parentSessionId: string, schema?: string | Record<string, unknown>, checkName?: string, sessionMode?: 'clone' | 'append'): Promise<ReviewSummary>;
93
+ /**
94
+ * Promise timeout helper that rejects after ms if unresolved
95
+ */
96
+ private withTimeout;
79
97
  /**
80
98
  * Register a new AI session in the session registry
81
99
  */
@@ -92,6 +110,16 @@ export declare class AIReviewService {
92
110
  * Format PR or Issue context for the AI using XML structure
93
111
  */
94
112
  private formatPRContext;
113
+ /**
114
+ * Format Slack conversation context (if attached to PRInfo) as XML
115
+ */
116
+ private formatSlackContextFromPRInfo;
117
+ /**
118
+ * Build a normalized ConversationContext for GitHub (PR/issue + comments)
119
+ * using the same contract as Slack's ConversationContext. This is exposed
120
+ * to templates via the unified `conversation` object.
121
+ */
122
+ private buildGitHubConversationFromPRInfo;
95
123
  /**
96
124
  * No longer escaping XML - returning text as-is
97
125
  */
@@ -112,15 +140,6 @@ export declare class AIReviewService {
112
140
  * Parse AI response JSON
113
141
  */
114
142
  private parseAIResponse;
115
- /**
116
- * Extract JSON from a response that might contain surrounding text
117
- * Uses proper bracket matching to find valid JSON objects or arrays
118
- */
119
- private extractJsonFromResponse;
120
- /**
121
- * Find JSON with proper bracket matching to avoid false positives
122
- */
123
- private findJsonWithBracketMatching;
124
143
  /**
125
144
  * Generate mock response for testing
126
145
  */