@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,292 @@
1
+ # Visor Event Triggers
2
+
3
+ This document explains what events trigger Visor and how to identify the context from logs.
4
+
5
+ ## Trigger Modes
6
+
7
+ Visor can be triggered in two main modes:
8
+
9
+ ### 1. Manual CLI Mode
10
+ - **When**: Running `visor` command locally
11
+ - **Log indicator**: `🖥️ Mode: Manual CLI`
12
+ - **Context**: Local git repository analysis
13
+ - **Event simulation**: Use `--event` flag to simulate GitHub events (see [CLI Event Simulation](#cli-event-simulation))
14
+
15
+ ### 2. GitHub Action Mode
16
+ - **When**: Triggered by GitHub webhook events
17
+ - **Log indicator**: `🤖 Mode: GitHub Action`
18
+ - **Context**: Based on GitHub event type
19
+
20
+ ## GitHub Events
21
+
22
+ When running as a GitHub Action, Visor responds to these events:
23
+
24
+ ### Pull Request Events (`pull_request`)
25
+ - **Actions**: `opened`, `synchronize`, `edited`
26
+ - **Trigger mapping**:
27
+ - `opened` → `pr_opened`
28
+ - `synchronize` / `edited` → `pr_updated`
29
+ - **Log format**:
30
+ ```
31
+ 🤖 Mode: GitHub Action
32
+ 📂 Repository: owner/repo
33
+ 📋 Event: pull_request (action: opened)
34
+ 🎯 Trigger: pr_opened
35
+ 🔀 Context: Pull Request #123
36
+ ```
37
+
38
+ ### Issue Events (`issues`)
39
+ - **Actions**: `opened`, `edited`, etc.
40
+ - **Trigger mapping**: `issue_opened`
41
+ - **Log format**:
42
+ ```
43
+ 🤖 Mode: GitHub Action
44
+ 📂 Repository: owner/repo
45
+ 📋 Event: issues (action: opened)
46
+ 🎯 Trigger: issue_opened
47
+ 🎫 Context: Issue #456
48
+ ```
49
+
50
+ ### Issue Comment Events (`issue_comment`)
51
+ - **Actions**: `created`, `edited`
52
+ - **Trigger mapping**: `issue_comment`
53
+ - **Context**: Can be on either a Pull Request or an Issue
54
+ - **Log format** (on PR):
55
+ ```
56
+ 🤖 Mode: GitHub Action
57
+ 📂 Repository: owner/repo
58
+ 📋 Event: issue_comment (action: created)
59
+ 🎯 Trigger: issue_comment
60
+ 💬 Context: Comment on Pull Request #123
61
+ ```
62
+ - **Log format** (on Issue):
63
+ ```
64
+ 🤖 Mode: GitHub Action
65
+ 📂 Repository: owner/repo
66
+ 📋 Event: issue_comment (action: created)
67
+ 🎯 Trigger: issue_comment
68
+ 💬 Context: Comment on Issue #456
69
+ ```
70
+
71
+ ## Example Logs
72
+
73
+ ### Before (old logging):
74
+ ```
75
+ Event: issue_comment, Owner: TykTechnologies, Repo: tyk
76
+ ```
77
+
78
+ ### After (improved logging):
79
+ ```
80
+ 🤖 Mode: GitHub Action
81
+ 📂 Repository: TykTechnologies/tyk
82
+ 📋 Event: issue_comment (action: created)
83
+ 🎯 Trigger: issue_comment
84
+ 💬 Context: Comment on Pull Request #123
85
+ 📚 Total checks in loaded config: 10
86
+ 📚 Available checks: release-notes, overview, security, performance, quality, style, review-all, issue-assistant, dependency, connectivity
87
+ 🔧 Checks to run for issue_comment: review-all, issue-assistant
88
+ ```
89
+
90
+ ## Understanding the Log Output
91
+
92
+ 1. **Mode**: Tells you if this is a manual CLI run or GitHub Action
93
+ 2. **Repository**: The owner/repo being analyzed
94
+ 3. **Event**: The raw GitHub event name and action
95
+ 4. **Trigger**: The internal event type Visor uses for configuration
96
+ 5. **Context**: Specific context (PR number, Issue number, etc.)
97
+ 6. **Available checks**: All checks defined in configuration
98
+ 7. **Checks to run**: Which checks will execute for this event
99
+
100
+ ## Recursion Prevention
101
+
102
+ When Visor posts a comment on an issue or PR, GitHub triggers a new `issue_comment` event. To prevent infinite loops, Visor automatically skips processing its own comments by detecting:
103
+
104
+ 1. **Bot username**: `visor[bot]`, `github-actions[bot]`, `probelabs[bot]`, or any user with `type: Bot`
105
+ 2. **Visor markers**: Comments containing `<!-- visor-comment-id:` or `*Powered by [Visor](...)*`
106
+
107
+ **Example log (expected behavior):**
108
+ ```
109
+ ✓ Skipping bot's own comment to prevent recursion. Author: probelabs[bot], Type: Bot, Has markers: true
110
+ ```
111
+
112
+ This is **normal and correct** - it means:
113
+ - Issue opened → Bot posts comment → Comment triggers event → Bot detects its own comment → Skips ✅
114
+
115
+ ## Event Flow Example
116
+
117
+ **When an issue is opened:**
118
+
119
+ 1. **Event 1**: `issues` (action: opened)
120
+ ```
121
+ 🤖 Mode: GitHub Action
122
+ 📋 Event: issues (action: opened)
123
+ 🎯 Trigger: issue_opened
124
+ 🎫 Context: Issue #456
125
+ 🔧 Checks to run: issue-assistant
126
+ ✅ Posted issue assistant results to issue #456
127
+ ```
128
+
129
+ 2. **Event 2**: `issue_comment` (action: created) - Bot's own comment
130
+ ```
131
+ 🤖 Mode: GitHub Action
132
+ 📋 Event: issue_comment (action: created)
133
+ 🎯 Trigger: issue_comment
134
+ 💬 Context: Comment on Issue #456
135
+ ✓ Skipping bot's own comment to prevent recursion. Author: probelabs[bot], Type: Bot, Has markers: true
136
+ ```
137
+
138
+ ## Configuration
139
+
140
+ Checks are configured to run on specific triggers using the `on` field:
141
+
142
+ ```yaml
143
+ steps:
144
+ security-check:
145
+ on: [pr_opened, pr_updated] # Only runs on PR events
146
+ type: ai
147
+ # ... rest of config
148
+
149
+ issue-assistant:
150
+ on: [issue_comment, issue_opened] # Runs on issue events
151
+ type: ai
152
+ # ... rest of config
153
+ ```
154
+
155
+ If `on` is not specified, the check can run on any event type.
156
+
157
+ ### Using goto_event to simulate a different trigger for a jump
158
+
159
+ Sometimes you want to “re-run” an ancestor step as if a different event happened (e.g., from an `issue_comment` flow you want to re-execute a PR step under `pr_updated`). Use `goto_event` together with `goto`:
160
+
161
+ ```yaml
162
+ steps:
163
+ overview:
164
+ type: ai
165
+ on: [pr_opened, pr_updated]
166
+
167
+ security:
168
+ type: ai
169
+ depends_on: [overview]
170
+ on: [pr_opened, pr_updated]
171
+ on_success:
172
+ goto: overview
173
+ goto_event: pr_updated # simulate PR update for the inline jump
174
+ ```
175
+
176
+ During that inline execution, event filtering and `if:` expressions see the simulated event. The current step is then re-run once. For a full PR re-run from an issue comment, synthesize a PR event and re-invoke the action entrypoint (see failure-routing docs for details).
177
+
178
+ ## CLI Event Simulation
179
+
180
+ When running Visor locally via CLI, you can simulate GitHub events to test event-based check filtering. This is useful for testing your configuration locally before deploying to GitHub Actions.
181
+
182
+ ### Usage
183
+
184
+ ```bash
185
+ # Simulate a PR update event
186
+ visor --event pr_updated
187
+
188
+ # Simulate a PR opened event
189
+ visor --event pr_opened
190
+
191
+ # Simulate an issue comment event
192
+ visor --event issue_comment
193
+
194
+ # Simulate an issue opened event
195
+ visor --event issue_opened
196
+
197
+ # Run all checks regardless of event filters (default)
198
+ visor --event all
199
+ ```
200
+
201
+ ### Auto-Detection
202
+
203
+ Visor automatically detects the appropriate event based on the checks being run:
204
+
205
+ - **Code-review schemas** → Defaults to `pr_updated`
206
+ - **Other schemas** → Defaults to `all` (no filtering)
207
+
208
+ ```bash
209
+ # These two are equivalent when running checks with code-review schema
210
+ visor --check security
211
+ visor --check security --event pr_updated
212
+ ```
213
+
214
+ ### Event Filtering Behavior
215
+
216
+ | Flag | Behavior | Use Case |
217
+ |------|----------|----------|
218
+ | `--event pr_updated` | Only runs checks with `on: [pr_updated]` | Test PR update scenario locally |
219
+ | `--event pr_opened` | Only runs checks with `on: [pr_opened]` | Test PR opened scenario |
220
+ | `--event issue_comment` | Only runs checks with `on: [issue_comment]` | Test comment assistant |
221
+ | `--event manual` | Only runs checks with `on: [manual]` | Test manual-triggered checks |
222
+ | `--event all` | Runs all checks (except manual-only) | Default behavior, ignores `on:` filters |
223
+ | (no flag) | Auto-detects based on schema | Smart default |
224
+
225
+ ### Example Workflow
226
+
227
+ **Testing PR review locally before pushing:**
228
+
229
+ ```bash
230
+ # 1. Make changes on a feature branch
231
+ git checkout -b feature/new-feature
232
+
233
+ # 2. Simulate PR update event to see what checks would run
234
+ visor --event pr_updated --analyze-branch-diff
235
+
236
+ # 3. Review the output and fix any issues
237
+
238
+ # 4. Push and open PR (GitHub Actions will run the same checks)
239
+ git push origin feature/new-feature
240
+ ```
241
+
242
+ ### Combining with Other Flags
243
+
244
+ Event simulation works alongside other CLI flags:
245
+
246
+ ```bash
247
+ # Analyze branch diff with PR update event
248
+ visor --event pr_updated --analyze-branch-diff
249
+
250
+ # Run specific checks with event filtering
251
+ visor --check security --check style --event pr_opened
252
+
253
+ # Debug mode with event simulation
254
+ visor --event pr_updated --debug
255
+
256
+ # JSON output with event filtering
257
+ visor --event issue_comment --output json
258
+ ```
259
+
260
+ ### Log Output
261
+
262
+ When using event simulation, you'll see:
263
+
264
+ ```
265
+ 🎯 Simulating event: pr_updated
266
+ ▶ Running check: overview [1/4]
267
+ ▶ Running check: security [2/4]
268
+ ```
269
+
270
+ When using `--event all`:
271
+
272
+ ```
273
+ 🎯 Event filtering: DISABLED (running all checks regardless of event triggers)
274
+ ```
275
+
276
+ ### Common Patterns
277
+
278
+ **Test all PR checks locally:**
279
+ ```bash
280
+ visor --event pr_updated --analyze-branch-diff
281
+ ```
282
+
283
+ **Test issue assistant:**
284
+ ```bash
285
+ # Issue assistants typically run on issue_comment or issue_opened
286
+ visor --event issue_comment
287
+ ```
288
+
289
+ **Run everything (useful for local development):**
290
+ ```bash
291
+ visor --event all # or just: visor
292
+ ```
@@ -0,0 +1,290 @@
1
+ # RFC: Enhanced Execution Logging & Statistics
2
+
3
+ **Status:** Implemented
4
+ **Date:** 2025-10-04
5
+ **Version:** 1.0
6
+
7
+ ## Summary
8
+
9
+ This RFC describes the implementation of comprehensive execution statistics tracking and enhanced logging for Visor checks, providing users with clear visibility into forEach iterations, skip reasons, and overall execution metrics.
10
+
11
+ ## Motivation
12
+
13
+ Users running complex Visor workflows with features like `forEach`, `if` conditions, and `fail_if` lacked visibility into:
14
+ - How many times each check actually ran (forEach iterations)
15
+ - Why checks were skipped and what conditions failed
16
+ - Overall execution metrics (total runs vs. configured checks)
17
+ - Performance bottlenecks (time per check/iteration)
18
+ - Issue distribution across checks
19
+
20
+ This made debugging and understanding workflow execution difficult.
21
+
22
+ ## Design
23
+
24
+ ### Architecture
25
+
26
+ The solution adds execution statistics tracking throughout the check execution lifecycle:
27
+
28
+ ```
29
+ CheckExecutionEngine
30
+ ├── executionStats: Map<string, CheckExecutionStats> // Tracks all stats
31
+ ├── initializeCheckStats() // Initialize stats for each check
32
+ ├── recordIterationStart/Complete() // Track forEach iterations
33
+ ├── recordSkip() // Track skipped checks
34
+ ├── recordError() // Track failures
35
+ ├── buildExecutionStatistics() // Build final stats object
36
+ └── logExecutionSummary() // Display symbol-rich table
37
+ ```
38
+
39
+ ### Data Structures
40
+
41
+ #### CheckExecutionStats
42
+ ```typescript
43
+ interface CheckExecutionStats {
44
+ checkName: string;
45
+ totalRuns: number; // How many times executed (1 or forEach iterations)
46
+ successfulRuns: number;
47
+ failedRuns: number;
48
+ skipped: boolean;
49
+ skipReason?: 'if_condition' | 'fail_fast' | 'dependency_failed';
50
+ skipCondition?: string; // The actual if condition text
51
+ totalDuration: number; // Total duration in milliseconds
52
+ perIterationDuration?: number[]; // Duration for each iteration
53
+ issuesFound: number;
54
+ issuesBySeverity: {
55
+ critical: number;
56
+ error: number;
57
+ warning: number;
58
+ info: number;
59
+ };
60
+ outputsProduced?: number; // For forEach checks
61
+ errorMessage?: string; // If failed
62
+ forEachPreview?: string[]; // Preview of forEach items
63
+ }
64
+ ```
65
+
66
+ #### ExecutionStatistics
67
+ ```typescript
68
+ interface ExecutionStatistics {
69
+ totalChecksConfigured: number;
70
+ totalExecutions: number; // Sum of all runs including forEach
71
+ successfulExecutions: number;
72
+ failedExecutions: number;
73
+ skippedChecks: number;
74
+ totalDuration: number;
75
+ checks: CheckExecutionStats[];
76
+ }
77
+ ```
78
+
79
+ ### Tracking Points
80
+
81
+ 1. **Initialization** (`executeDependencyAwareChecks` start)
82
+ - Initialize stats for all checks
83
+
84
+ 2. **forEach Execution** (when forEach items detected)
85
+ - Record forEach preview items
86
+ - Track each iteration start/complete
87
+ - Log iteration progress: `✔ 3/5 (2.1s)`
88
+
89
+ 3. **Normal Execution** (single runs)
90
+ - Track start/complete
91
+ - Record outputs produced
92
+
93
+ 4. **Skip Conditions** (when `if` evaluates to false)
94
+ - Record skip reason and condition
95
+ - Log: `⏭ Skipped (if: branch == "main")`
96
+
97
+ 5. **Errors** (on exception)
98
+ - Record error message
99
+ - Track failed iteration
100
+
101
+ 6. **Completion** (`executeChecks` end)
102
+ - Build final statistics
103
+ - Display summary table
104
+
105
+ ### Output Formats
106
+
107
+ #### Console (Table) - Default
108
+ ```
109
+ ┌───────────────────────────────────────┐
110
+ │ Execution Complete (45.3s) │
111
+ ├───────────────────────────────────────┤
112
+ │ Checks: 8 configured → 23 executions │
113
+ │ Status: 20 ✔ │ 2 ✖ │ 1 ⏭ │
114
+ │ Issues: 15 total (3 🔴 12 ⚠️) │
115
+ └───────────────────────────────────────┘
116
+
117
+ Check Details:
118
+ ┌─────────────────────┬──────────┬──────────┬─────────────────────┐
119
+ │ Check │ Duration │ Status │ Details │
120
+ ├─────────────────────┼──────────┼──────────┼─────────────────────┤
121
+ │ list-files │ 0.5s │ ✔ │ →5 │
122
+ │ validate-file │ 12.3s │ ✔ ×5 │ 12⚠️ │
123
+ │ security-scan │ 8.2s │ ✔ │ 3🔴 │
124
+ │ transform-data │ 6.1s │ ✔ ×3 │ →3 │
125
+ │ notify-slack │ 2.1s │ ✖ ×3 │ HTTP 500 │
126
+ │ production-only │ - │ ⏭ if │ branch=="main" │
127
+ │ archive-results │ 1.3s │ ✔ │ │
128
+ │ final-report │ 14.8s │ ✔ │ →1 │
129
+ └─────────────────────┴──────────┴──────────┴─────────────────────┘
130
+
131
+ Legend: ✔=success │ ✖=failed │ ⏭=skipped │ ×N=iterations │ →N=outputs │ N🔴=critical │ N⚠️=warnings
132
+ ```
133
+
134
+ #### JSON Output
135
+ Full `executionStatistics` object included in JSON output with all tracked data:
136
+ - Per-iteration timings
137
+ - Skip condition evaluations
138
+ - forEach item previews
139
+ - Complete error messages
140
+
141
+ ### Symbol Reference
142
+
143
+ | Symbol | Meaning | Example |
144
+ |--------|---------|---------|
145
+ | `✔` | Success (1 run) | `✔` |
146
+ | `✔ ×5` | Success (5 forEach iterations) | `✔ ×5` |
147
+ | `✖ ×3` | Failed (3 iterations) | `✖ ×3` |
148
+ | `✔/✖ 2/3` | Partial success (2 of 3 succeeded) | `✔/✖ 2/3` |
149
+ | `⏭ if` | Skipped (if condition) | `⏭ if` |
150
+ | `⏭ ff` | Skipped (fail-fast) | `⏭ ff` |
151
+ | `⏭ dep` | Skipped (dependency failed) | `⏭ dep` |
152
+ | `→N` | Produced N outputs | `→5` |
153
+ | `N🔴` | N critical issues | `3🔴` |
154
+ | `N⚠️` | N warnings | `12⚠️` |
155
+ | `N💡` | N info messages | `5💡` |
156
+
157
+ ## Implementation
158
+
159
+ ### Files Modified
160
+
161
+ 1. **src/check-execution-engine.ts** (~300 lines added)
162
+ - Added `CheckExecutionStats` and `ExecutionStatistics` interfaces
163
+ - Added `executionStats` property to class
164
+ - Implemented tracking methods:
165
+ - `initializeCheckStats()`
166
+ - `recordIterationStart/Complete()`
167
+ - `recordSkip()`
168
+ - `recordError()`
169
+ - `recordForEachPreview()`
170
+ - `buildExecutionStatistics()`
171
+ - Implemented display methods:
172
+ - `logExecutionSummary()`
173
+ - `formatStatusColumn()`
174
+ - `formatDetailsColumn()`
175
+ - `truncate()`
176
+ - Updated `executeDependencyAwareChecks()` to track stats
177
+ - Updated `executeChecks()` to return statistics
178
+
179
+ 2. **src/output-formatters.ts** (~5 lines added)
180
+ - Added `executionStatistics?` field to `AnalysisResult` interface
181
+
182
+ ### Backward Compatibility
183
+
184
+ ✅ **No Breaking Changes**
185
+ - All changes are additive
186
+ - `executionStatistics` is optional in `AnalysisResult`
187
+ - Existing output formats continue to work
188
+ - Statistics appear automatically in table output (default)
189
+ - JSON/SARIF include statistics when available
190
+
191
+ ## Examples
192
+
193
+ ### Scenario 1: forEach with Multiple Iterations
194
+
195
+ **Config:**
196
+ ```yaml
197
+ steps:
198
+ list-files:
199
+ type: command
200
+ exec: echo '["a.json", "b.json", "c.json"]'
201
+ forEach: true
202
+
203
+ validate-file:
204
+ type: command
205
+ exec: jsonlint {{ outputs.list-files }}
206
+ depends_on: [list-files]
207
+ ```
208
+
209
+ **Output:**
210
+ ```
211
+ ▶ Running check: list-files [1/2]
212
+ ✔ Check complete: list-files (0.3s) - 3 items
213
+
214
+ ▶ Running check: validate-file [2/2]
215
+ Processing 3 items...
216
+ ✔ 1/3 (1.2s)
217
+ ✔ 2/3 (1.1s)
218
+ ✔ 3/3 (1.3s)
219
+ ✔ Check complete: validate-file (3.6s) - 3 runs
220
+
221
+ ┌───────────────────────────────────────┐
222
+ │ Execution Complete (3.9s) │
223
+ ├───────────────────────────────────────┤
224
+ │ Checks: 2 configured → 4 executions │
225
+ │ Status: 4 ✔ │ 0 ✖ │ 0 ⏭ │
226
+ └───────────────────────────────────────┘
227
+
228
+ Check Details:
229
+ ┌─────────────────────┬──────────┬──────────┬─────────────────────┐
230
+ │ Check │ Duration │ Status │ Details │
231
+ ├─────────────────────┼──────────┼──────────┼─────────────────────┤
232
+ │ list-files │ 0.3s │ ✔ │ →3 │
233
+ │ validate-file │ 3.6s │ ✔ ×3 │ │
234
+ └─────────────────────┴──────────┴──────────┴─────────────────────┘
235
+ ```
236
+
237
+ ### Scenario 2: Conditional Skip
238
+
239
+ **Config:**
240
+ ```yaml
241
+ steps:
242
+ production-deploy:
243
+ type: command
244
+ exec: ./deploy.sh
245
+ if: 'branch == "main"'
246
+ ```
247
+
248
+ **Output (on feature branch):**
249
+ ```
250
+ ▶ Running check: production-deploy [1/1]
251
+ ⏭ Skipped (if: branch == "main")
252
+
253
+ ┌───────────────────────────────────────┐
254
+ │ Execution Complete (0.0s) │
255
+ ├───────────────────────────────────────┤
256
+ │ Checks: 1 configured → 0 executions │
257
+ │ Status: 0 ✔ │ 0 ✖ │ 1 ⏭ │
258
+ └───────────────────────────────────────┘
259
+
260
+ Check Details:
261
+ ┌─────────────────────┬──────────┬──────────┬─────────────────────┐
262
+ │ Check │ Duration │ Status │ Details │
263
+ ├─────────────────────┼──────────┼──────────┼─────────────────────┤
264
+ │ production-deploy │ - │ ⏭ if │ branch == "main" │
265
+ └─────────────────────┴──────────┴──────────┴─────────────────────┘
266
+ ```
267
+
268
+ ## Benefits
269
+
270
+ 1. **🎯 Clarity**: Users immediately see forEach iterations and skip reasons
271
+ 2. **📊 Metrics**: Clear stats on total work done vs. configured checks
272
+ 3. **⚡ Performance**: Easy to spot slow checks and iterations
273
+ 4. **🐛 Debugging**: Skip conditions shown inline for quick troubleshooting
274
+ 5. **📈 Automation**: Full stats in JSON for CI/CD analytics
275
+ 6. **✅ Professional**: Clean, symbol-rich output matches modern CLIs
276
+
277
+ ## Future Enhancements
278
+
279
+ Potential future improvements:
280
+ - Color-coded output (green/red/yellow) when terminal supports it
281
+ - Configurable verbosity levels for forEach iteration logging
282
+ - Export statistics to external monitoring systems
283
+ - Historical statistics comparison across runs
284
+ - Performance regression detection
285
+
286
+ ## References
287
+
288
+ - Implementation PR: [Link to PR]
289
+ - Related Issues: Enhanced logging visibility (#XX)
290
+ - Documentation: Updated in CLAUDE.md and README.md