@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,119 @@
1
+ # Telemetry & Tracing — Setup Guide
2
+
3
+ This guide shows how to enable Visor telemetry and tracing with OpenTelemetry, export traces/metrics, auto‑instrument Node libraries, and generate a static HTML trace report.
4
+
5
+ ## Quick Start (CLI)
6
+
7
+ - Enable telemetry to serverless NDJSON traces:
8
+ - `VISOR_TELEMETRY_ENABLED=true`
9
+ - `VISOR_TELEMETRY_SINK=file`
10
+ - (optional) `VISOR_TRACE_DIR=output/traces`
11
+ - Run:
12
+ - `visor --config ./.visor.yaml --output json`
13
+ - Inspect traces:
14
+ - `ls output/traces/*.ndjson`
15
+
16
+ ## CLI Flags
17
+
18
+ - `--telemetry` — enable telemetry (overrides config)
19
+ - `--telemetry-sink <otlp|file|console>` — sink selection
20
+ - `--telemetry-endpoint <url>` — OTLP endpoint (HTTP) for traces/metrics
21
+ - `--trace-report` — write a static HTML trace report to output/traces
22
+ - `--auto-instrumentations` — enable OpenTelemetry auto‑instrumentations
23
+
24
+ Examples:
25
+ - `visor --config ./.visor.yaml --telemetry --telemetry-sink otlp --telemetry-endpoint https://otel.example.com`
26
+ - `visor --config ./.visor.yaml --telemetry --trace-report --auto-instrumentations`
27
+
28
+ ## Config (visor.yaml)
29
+
30
+ ```yaml
31
+ version: "1.0"
32
+ telemetry:
33
+ enabled: true
34
+ sink: file # otlp|file|console
35
+ otlp:
36
+ protocol: http
37
+ endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT}
38
+ headers: ${OTEL_EXPORTER_OTLP_HEADERS}
39
+ file:
40
+ dir: output/traces
41
+ ndjson: true
42
+ tracing:
43
+ auto_instrumentations: true
44
+ trace_report:
45
+ enabled: true
46
+ ```
47
+
48
+ ENV overrides (highest precedence):
49
+ - `VISOR_TELEMETRY_ENABLED`, `VISOR_TELEMETRY_SINK`, `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_HEADERS`, `VISOR_TRACE_DIR`
50
+ - `VISOR_TELEMETRY_AUTO_INSTRUMENTATIONS=true`
51
+ - `VISOR_TRACE_REPORT=true`
52
+
53
+ ## Serverless Mode (NDJSON)
54
+
55
+ - Visor writes NDJSON simplified spans to `output/traces/run-<id>-<ts>.ndjson`.
56
+ - Ingest with OTel Collector `filelog` receiver + transform to OTLP.
57
+
58
+ OTel Collector (example):
59
+ ```yaml
60
+ receivers:
61
+ filelog:
62
+ include: [ "/work/output/traces/*.ndjson" ]
63
+ operators:
64
+ - type: json_parser
65
+ parse_from: body
66
+ exporters:
67
+ otlphttp:
68
+ endpoint: http://tempo:4318
69
+ service:
70
+ pipelines:
71
+ traces:
72
+ receivers: [filelog]
73
+ exporters: [otlphttp]
74
+ ```
75
+
76
+ ## Connected Mode (OTLP HTTP)
77
+
78
+ - Set `VISOR_TELEMETRY_SINK=otlp` and `OTEL_EXPORTER_OTLP_ENDPOINT=https://collector.example.com`.
79
+ - Metrics exporter is enabled automatically (optional dependency) — histograms/counters for checks, providers, foreach items, fail_if triggers, and diagram blocks.
80
+
81
+ ## Auto‑Instrumentations
82
+
83
+ - Enable with `--auto-instrumentations` or `telemetry.tracing.auto_instrumentations: true`.
84
+ - Adds `@opentelemetry/auto-instrumentations-node` (http/undici/child_process/etc.) and correlates with Visor spans via context.
85
+ - Optional dependency; if not installed, Visor skips auto‑instrumentation gracefully.
86
+
87
+ ## Static Trace Report
88
+
89
+ - Enable `--trace-report` or `telemetry.tracing.trace_report.enabled: true`.
90
+ - Outputs two files per run:
91
+ - `*.trace.json` — simplified span JSON
92
+ - `*.report.html` — self‑contained HTML timeline (open locally)
93
+
94
+ ## Mermaid Telemetry
95
+
96
+ - Visor emits full `diagram.block` events with Mermaid code from outputs and issue messages.
97
+ - Metric: `visor.diagram.blocks{origin}` increments per diagram block.
98
+
99
+ ## Security & Redaction
100
+
101
+ - Diagram events are sent verbatim by default (as requested). You can later opt‑in to redaction via `telemetry.redaction` (not enforced by default).
102
+
103
+ ## GitHub Actions
104
+
105
+ - Visor wraps the Action run in a single root span (`visor.run`). Publish the `trace_id` in logs/checks for linking.
106
+ - Example step:
107
+ ```yaml
108
+ - name: Visor
109
+ run: |
110
+ export VISOR_TELEMETRY_ENABLED=true
111
+ export VISOR_TELEMETRY_SINK=otlp
112
+ export OTEL_EXPORTER_OTLP_ENDPOINT=${{ secrets.OTEL_ENDPOINT }}
113
+ export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer ${{ secrets.OTEL_TOKEN }}"
114
+ npx -y @probelabs/visor@latest --config ./.visor.yaml --output json
115
+ ```
116
+
117
+ Troubleshooting:
118
+ - No spans? Check `VISOR_TELEMETRY_ENABLED`, `VISOR_TELEMETRY_SINK`, and that optional deps resolved in the environment.
119
+ - Huge mermaid outputs? Consider adding a soft length cap in Visor or pre-truncating in templates.
@@ -0,0 +1,275 @@
1
+ # Telemetry & Tracing Platform — RFC
2
+
3
+ Status: Draft
4
+
5
+ Last updated: 2025-10-07
6
+
7
+ Owner: Visor team
8
+
9
+ Supersedes: telemetry-platform-rfc.md, opentelemetry-tracing-rfc.md (merged into this single RFC)
10
+ Related: execution-statistics-rfc.md, failure-routing-rfc.md
11
+
12
+ ## Motivation
13
+
14
+ We want SonarCloud‑style visibility and durable, searchable traces for every Visor run. Beyond raw telemetry, the goal is to power dashboards (per repo/org, per check, trends) with no rate limiting in CI, while remaining privacy‑first and operable in both connected and serverless environments.
15
+
16
+ ## Goals
17
+
18
+ - Open standards: adopt OpenTelemetry (OTel) as the primary API/SDK for tracing and metrics.
19
+ - Well‑thought spans covering runs, checks, providers, routing, forEach items, and diagram evaluation.
20
+ - Zero sampling in CI (AlwaysOn); rely on batching/queues, not drops or rate limiting.
21
+ - Serverless mode: write NDJSON (one span per line) simplified spans to disk for later ingestion (OTLP JSON optional later).
22
+ - Privacy by default: no raw code/AI payloads; hash/redact sensitive strings.
23
+ - Minimal overhead: lightweight Mermaid analysis; no rendering.
24
+
25
+ ## Non‑Goals
26
+
27
+ - Rendering Mermaid diagrams into images/SVG.
28
+ - Replacing existing logs/execution statistics; this augments and unifies them.
29
+ - Sending data to third parties without explicit config.
30
+
31
+ ## Overview
32
+
33
+ We introduce a unified telemetry platform centered on OpenTelemetry. The platform emits structured spans, metrics, and (optionally) events. It integrates with existing `ExecutionStatistics` and adds small, cheap Mermaid diagram checks for observability only.
34
+
35
+ Two deployment modes:
36
+ - Connected: OTLP (HTTP/gRPC) exporters to an OTel Collector (Tempo/Jaeger/etc.).
37
+ - Serverless: write NDJSON (one span per line) simplified spans to `output/traces/` for later upload. (Optional: OTLP JSON in a future iteration.)
38
+
39
+ ## Node.js Standards & SDK Setup
40
+
41
+ - Use `@opentelemetry/sdk-node` with AsyncLocalStorage context manager.
42
+ - Auto‑instrumentations: `@opentelemetry/auto-instrumentations-node` (http, undici, child_process, dns; fs optional).
43
+ - Exporters: `@opentelemetry/exporter-trace-otlp-http` or gRPC; plus a custom FileSpanExporter for serverless.
44
+ - Sampler: AlwaysOn in CI (no sampling). In dev, allow ratio sampling.
45
+ - BatchSpanProcessor tuned for high throughput; large queues instead of rate limits.
46
+
47
+ ### Unified Logging + Tracing
48
+
49
+ - Preferred approach: keep our existing logger, but inject OTel context (`trace_id`, `span_id`, `trace_flags`) into every log line.
50
+ - Implementation: `logger.ts` consults `@opentelemetry/api` `trace.getSpan(context.active())` to fetch ids and appends them as structured fields.
51
+ - Output: JSONL to stderr (unchanged) with added fields for correlation; pretty mode in local dev.
52
+ - Optional: if OTel Logs for Node is sufficiently stable in our env, add an OTLP Log Exporter alongside console JSONL. Otherwise, route logs to Loki/ELK with fields.
53
+ - Guarantees: every `console`/`logger` message becomes traceable via `trace_id/span_id` and shows up next to spans in backends that support exemplars/correlation.
54
+
55
+ ## Span Topology
56
+
57
+ ```
58
+ trace: visor.run (root span)
59
+ ├─ visor.check (per check execution)
60
+ │ ├─ visor.provider (ai|command|http|claude-code)
61
+ │ ├─ visor.routing (retry/goto/run remediation)
62
+ │ ├─ visor.foreach.item (when forEach is active)
63
+ │ └─ visor.mermaid (extract/evaluate; no rendering)
64
+ └─ auto‑instrumented http/undici/... spans
65
+ ```
66
+
67
+ Naming & Status:
68
+ - `visor.run` — root; `OK` unless the entire run aborts.
69
+ - `visor.check` — `ERROR` on execution error or fail_if triggered; issues alone do not imply error.
70
+ - `visor.provider` — `ERROR` if provider call fails; captures model/provider attributes.
71
+ - `visor.routing` — spans for retry/goto/run_js decisions; `ERROR` if loop budget exceeded.
72
+ - `visor.foreach.item` — isolates per‑item timing/attributes.
73
+ - `visor.mermaid` — extract/evaluate spans; metrics only, no source persisted.
74
+
75
+ Span events to record decisions: `issues.present`, `fail_if.triggered`, `retry.scheduled`, `goto.target`, `run_js.result`, `goto_js.result`.
76
+
77
+ State change coverage (exhaustive):
78
+ - Run: `run.started`, `run.completed` (attributes: totals, duration).
79
+ - Check lifecycle: `check.scheduled`, `check.started`, `check.skipped` (with `skip_reason`), `check.completed`.
80
+ - forEach items: `foreach.started`/`foreach.completed` (index/total attributes) or dedicated child spans.
81
+ - Dependencies: `dependency.waiting` (dep id), `dependency.ready`.
82
+ - Conditional evaluation: `if.evaluated` (expression hash, result), `fail_if.evaluated` (hash, result), `fail_if.triggered`.
83
+ - Routing: `retry.scheduled` (attempt, backoff), `goto.target` (step id), `run.remediation` (step id list).
84
+ - Providers: `provider.request`/`provider.response` (sizes, durations; no payloads), `ai.session.reused`.
85
+
86
+ ## Attributes (selected)
87
+
88
+ Resource (standard + custom):
89
+ - `service.name=visor`, `service.version`, `service.namespace=<org>`
90
+ - `deployment.environment=github-actions|ci|local`
91
+
92
+ Run (`visor.run`):
93
+ - `visor.run.id`, `visor.run.mode` (cli|github-actions)
94
+ - `visor.repo.owner`, `visor.repo.name`, `visor.pr.number`, `visor.git.head`, `visor.git.base`
95
+ - `visor.files.changed_count`, `visor.diff.additions`, `visor.diff.deletions`
96
+ - `visor.max_parallelism`, `visor.fail_fast`
97
+
98
+ Check (`visor.check`):
99
+ - `visor.check.id`, `visor.check.type`, `visor.check.group`, `visor.check.schema`, `visor.check.tags`
100
+ - `visor.check.depends_on`, `visor.check.skipped`, `visor.check.skip_reason`
101
+ - `visor.check.foreach.index`, `visor.check.foreach.total`
102
+ - `visor.issues.total`, `visor.issues.critical`, `visor.issues.error`, `visor.issues.warning`, `visor.issues.info`
103
+
104
+ Provider (`visor.provider`):
105
+ - `visor.provider.type`, `visor.ai.model`, `visor.ai.session_reused`
106
+
107
+ Routing (`visor.routing`):
108
+ - `visor.routing.action` (retry|goto|run), `visor.routing.attempt`, `visor.routing.backoff_ms`, `visor.routing.goto_target`, `visor.routing.loop_count`, `visor.routing.max_loops`
109
+
110
+ Mermaid (`visor.mermaid`):
111
+ - Extract: `visor.diagram.blocks_found`, `visor.diagram.source` (content|issue)
112
+ - Evaluate: `visor.diagram.syntax_ok`, `visor.diagram.node_count`, `visor.diagram.edge_count`, `visor.diagram.components`, `visor.diagram.density`, `visor.diagram.isolated_nodes`, `visor.diagram.references_changed_components`, `visor.diagram.score`
113
+
114
+ Privacy: do not persist raw code, diagram text, prompts, or responses unless explicitly enabled. Hash file paths and messages when redaction is on.
115
+
116
+ ## Metrics (OTel Metrics API)
117
+
118
+ Counters:
119
+ - `visor.check.issues` (attrs: check_id, severity)
120
+ - `visor.diagram.blocks` (attrs: syntax_ok)
121
+
122
+ Histograms:
123
+ - `visor.check.duration_ms`
124
+ - `visor.provider.duration_ms`
125
+ - `visor.diagram.evaluate.duration_ms`
126
+
127
+ Gauges:
128
+ - `visor.run.active_checks`
129
+
130
+ ## Mermaid Telemetry
131
+
132
+ - Extraction via fenced block regex for ```mermaid in rendered outputs and issue messages.
133
+ - No local analysis. We emit full Mermaid code as telemetry so downstream services can analyze asynchronously.
134
+ - Event shape: `diagram.block` with attributes `{ check, origin: 'content'|'issue', code: <full_mermaid> }`.
135
+ - Redaction: none by default for diagrams (unaltered code is sent) per current requirements.
136
+
137
+ ## Configuration
138
+
139
+ `VisorConfig.telemetry` (excerpt):
140
+
141
+ ```yaml
142
+ telemetry:
143
+ enabled: false
144
+ sink: otlp # otlp|file|console
145
+ diagrams:
146
+ evaluate: true # evaluation only; no render
147
+ redaction:
148
+ hash_files: true
149
+ hash_messages: true
150
+ tracing:
151
+ sampler: always_on # in CI; ratio allowed in dev
152
+ batch:
153
+ max_queue_size: 65536
154
+ max_export_batch_size: 8192
155
+ scheduled_delay_ms: 1000
156
+ export_timeout_ms: 10000
157
+ otlp:
158
+ protocol: http # or grpc
159
+ endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT}
160
+ headers: ${OTEL_EXPORTER_OTLP_HEADERS}
161
+ file_trace:
162
+ dir: output/traces
163
+ format: otlp_json # otlp_json|ndjson
164
+ ```
165
+
166
+ CLI flags: `--telemetry`, `--telemetry-sink`, `--telemetry-endpoint`, `--telemetry-diagrams`.
167
+ ENV: Standard OTel envs + `VISOR_TELEMETRY_*`.
168
+
169
+ ## Serverless File Export
170
+
171
+ - `FileSpanExporter` writes NDJSON (`one span per line`) simplified span objects to `output/traces/run-<id>-<ts>.ndjson`.
172
+ - These files are ingestible by an OTel Collector via a `filelog` receiver + transform pipeline to OTLP.
173
+ - Optional OTLP JSON export may be added later if needed.
174
+ - Provide `scripts/push-traces.ts` (planned) to upload stored traces to a collector.
175
+
176
+ ## Integration with Execution Statistics
177
+
178
+ - Existing `ExecutionStatistics` (engine) remains the authoritative per‑run aggregate.
179
+ - `run_completed` span records aggregate counters as attributes; metrics are derived as histograms/counters.
180
+ - This RFC supersedes earlier execution‑only docs for schema guidance; `execution-statistics-rfc.md` remains as historical rationale.
181
+
182
+ ## Instrumentation Plan (Code Map)
183
+
184
+ - `src/telemetry/opentelemetry.ts` — NodeSDK bootstrap, exporters, resource.
185
+ - `src/check-execution-engine.ts` — create `visor.run` and `visor.check`/`routing`/`foreach.item` spans; add events and attributes.
186
+ - `src/providers/*` — wrap provider calls with `visor.provider` spans; propagate context.
187
+ - `src/reviewer.ts` — after content assembly, scan for Mermaid, emit `visor.mermaid` spans (attributes only).
188
+ - `src/pr-analyzer.ts` — enrich root span with PR/repo attributes.
189
+ - `src/github-check-service.ts` — optional summary check; include trace id link in details.
190
+ - Logger — append `trace_id`/`span_id` when telemetry enabled.
191
+
192
+ ### Logger Injection Sketch
193
+
194
+ ```ts
195
+ // src/logger.ts (sketch)
196
+ import { context, trace } from '@opentelemetry/api';
197
+
198
+ function traceContext() {
199
+ const span = trace.getSpan(context.active());
200
+ const ctx = span?.spanContext();
201
+ return ctx ? { trace_id: ctx.traceId, span_id: ctx.spanId, trace_flags: ctx.traceFlags } : undefined;
202
+ }
203
+
204
+ function write(level: string, msg: string, extra?: Record<string, unknown>) {
205
+ const tc = traceContext();
206
+ const payload = { level, msg, ts: new Date().toISOString(), ...(tc || {}), ...(extra || {}) };
207
+ process.stderr.write(JSON.stringify(payload) + '\n');
208
+ }
209
+ ```
210
+
211
+
212
+ ## Dashboards
213
+
214
+ - Provide example Grafana dashboards (Tempo + Prometheus):
215
+ - Run overview: success/failure/skip, duration percentiles, parallelism, issue counts by severity.
216
+ - Check deep dive: duration by check, error hot spots, routing actions.
217
+ - Diagram quality: syntax pass rate, average score.
218
+
219
+ ## Rollout Plan
220
+
221
+ 1) SDK bootstrap + FileSpanExporter + minimal spans in engine/providers.
222
+ 2) OTLP exporters and CI config; Grafana/Tempo example dashboards.
223
+ 3) Mermaid evaluation attributes; logs correlation; script for pushing stored traces.
224
+
225
+ ## Acceptance Criteria
226
+
227
+ - CI runs emit full traces with AlwaysOn sampling and no drops under typical load (batched exports).
228
+ - Serverless mode writes valid OTLP JSON traces loadable by an OTel Collector.
229
+ - Spans show the expected hierarchy; attributes are present and PII‑safe by default.
230
+ - Diagram spans emit evaluation metrics only; no rendering or diagram source persisted.
231
+
232
+ ## Risks & Mitigations
233
+
234
+ - Overhead: keep spans coarse (few levels), batch aggressively; disable heavy auto‑instrumentations.
235
+ - Data leakage: default redaction and attribute size caps; no raw code/AI payloads.
236
+ - Volume: AlwaysOn in CI; rely on queue sizing and backpressure; allow local ratio sampling.
237
+
238
+ ## Open Questions
239
+
240
+ - Default protocol (HTTP vs gRPC) for OTLP in GitHub Actions.
241
+ - Injecting `traceparent` into command providers by default to link downstream tools.
242
+ - Which CI environments beyond GitHub Actions to tailor resource attributes for.
243
+
244
+ ---
245
+
246
+ ## Implementation Status (as of 2025‑10‑07)
247
+
248
+ Completed
249
+ - [x] Single RFC consolidating telemetry + OpenTelemetry tracing.
250
+ - [x] Config: `telemetry` block (enabled, sink=otlp|file|console, otlp/file options) with env overrides.
251
+ - [x] Bootstrap: `initTelemetry` (OTLP HTTP traces, optional OTLP metrics; serverless NDJSON exporter); AlwaysOn in CI (no rate limiting).
252
+ - [x] Log correlation: logger adds `[trace_id span_id]`; console.* patched when telemetry enabled.
253
+ - [x] CLI and GitHub Actions: root `visor.run` span around major phases; full root coverage in CLI; partial in Actions (reviewPR path).
254
+ - [x] Spans: `visor.check` (parent), `visor.provider` (child), `visor.foreach.item` (per item).
255
+ - [x] Events: `check.started/completed`, `if.evaluated`, `fail_if.evaluated`, `check.skipped`, `retry.scheduled`, `goto.target`, `run.remediation`, `command.exec.completed/error`, `http.request/response`, `foreach.started/skipped/completed`.
256
+ - [x] Metrics: histograms (`visor.check.duration_ms`, `visor.provider.duration_ms`, `visor.foreach.item.duration_ms`), counter (`visor.check.issues{severity}`), gauge (`visor.run.active_checks` via UpDownCounter), counter (`visor.fail_if.triggered{scope}`).
257
+ - [x] Providers: command exec child span + W3C context injection; http request/response events with status.
258
+ - [x] E2E tests: forEach + transform chains; read and validate resulting JSON; assert spans/events counts and attributes.
259
+ - [x] Example Grafana dashboards: overview + diagrams (skeleton) and setup guide.
260
+ - [x] Schema/types: `telemetry` block added to `VisorConfig` TypeScript types and generator picks it up for JSON Schema.
261
+ - [x] Mermaid telemetry: emit `diagram.block` with full Mermaid code (no local analysis or redaction).
262
+
263
+ Changed vs. original plan
264
+ - [x] Serverless exporter writes NDJSON simplified spans (one span per line) instead of full OTLP JSON. Rationale: easier diffs and ingestion via Collector filelog; OTLP JSON remains optional for later.
265
+ - [x] Diagram rendering explicitly out of scope; only telemetry signals are planned. (No rendering implemented.)
266
+
267
+ Pending / Next
268
+ - [ ] Wrap the entire GitHub Actions `run()` with a single root `visor.run` span (early logs included); ensure consistent repo/PR attributes at start.
269
+ - [ ] Diagram counters/panels: add metrics counters for diagram blocks to power Grafana panels.
270
+ - [ ] Redaction controls: enforce hashing/truncation for file paths/messages when enabled in `telemetry.redaction`.
271
+ - [ ] OTLP Logs: consider optional exporter when Node OTel Logs is stable; otherwise keep JSONL logs with trace correlation.
272
+ - [ ] Telemetry summary GitHub Check: optional status check summarizing totals and linking to trace.
273
+ - [ ] Additional tests: fail_if trigger E2E, Actions path E2E, command/http provider span details.
274
+ - [ ] Schema: add `telemetry` block to generated config schema and validation (Ajv), with docs/examples.
275
+ - [ ] Optional OTLP JSON file exporter alongside NDJSON if needed by downstream tooling.