@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,224 @@
1
+ # Visor Workflow Style Guide
2
+
3
+ This guide captures pragmatic conventions for writing clear, safe, and maintainable Visor workflows (visor.yaml and friends). It complements the feature guides by focusing on readability, intent, and day‑2 operability.
4
+
5
+ ## Why This Matters
6
+
7
+ - Readability reduces on‑call cognitive load and speeds reviews.
8
+ - A consistent structure makes behaviors obvious (what, when, how, and why).
9
+ - Guardrails prevent accidental side effects and clarify intent.
10
+
11
+ ## Key Principles
12
+
13
+ - One step, one responsibility. Prefer small, composable steps over “kitchen‑sink” checks.
14
+ - Declare intent before mechanics. Readers should see what a step is and when it runs before how it runs.
15
+ - Guard and contract every important step. Preconditions (“assume” or “if”) up front, postconditions (“schema” or “guarantee”) after execution.
16
+ - Avoid hidden control flow. Prefer declarative transitions and explicit dependencies over imperative logic.
17
+ - Be idempotent, especially for external effects. Plan for retries and partial failures.
18
+
19
+ ## Recommended Key Order (Per Step)
20
+
21
+ Use this top‑down order for every step. Omit sections that don’t apply.
22
+
23
+ 1) Identity & Intent
24
+ - `type`
25
+ - `criticality` (external | internal | policy | info)
26
+ - `group`
27
+ - `tags`
28
+ - `description`
29
+
30
+ 2) Triggers & Dependencies
31
+ - `on`
32
+ - `depends_on`
33
+ - `fanout` / `forEach` / `reduce`
34
+
35
+ 3) Preconditions (Guards)
36
+ - `assume`
37
+ - `if`
38
+
39
+ 4) Provider Configuration (Only fields for the given type)
40
+ - ai: `prompt`, `ai.{model,provider,tools,…}`
41
+ - command: `exec`, `args`, `cwd`, `shell`
42
+ - script: `content` or `file`
43
+ - github: `op`, `values`
44
+ - http/http_client/http_input: `url`, `method`, `body`, `headers`
45
+ - log/memory/workflow/noop: minimal fields
46
+
47
+ 5) Contracts (Post‑Exec)
48
+ - `schema` (renderer name or JSON Schema)
49
+ - `guarantee`
50
+
51
+ 6) Failure Policies
52
+ - `fail_if`
53
+ - `continue_on_failure`
54
+
55
+ 7) Routing & Transitions
56
+ - `on_success`
57
+ - `on_fail`
58
+ - `on_finish`
59
+
60
+ 8) Runtime Controls
61
+ - `timeout`, `retries/backoff`, `env`
62
+ - `namespace`, `reuse_ai_session`, `session_mode`
63
+
64
+ 9) Output Formatting
65
+ - `template: { content | file }`
66
+ - `message`, `level` (for `log`)
67
+
68
+ ## Criticality & Contracts (Default Safety)
69
+
70
+ - `external`: side effects outside the repo/CI boundary (e.g., GitHub ops, webhooks).
71
+ - Require a precondition: `assume` (preferred) or `if`.
72
+ - If output‑producing, also require a post‑exec contract: `schema` or `guarantee`.
73
+ - Logical failures (schema/guarantee/fail_if) are not auto‑retried.
74
+
75
+ - `internal`: orchestration/state within CI/repo (formerly “control‑plane”).
76
+ - Same enforcement as `external` (precondition + contract for output steps).
77
+ - No auto‑retry for logical failures.
78
+
79
+ - `policy`: evaluative checks (security/perf/quality/docs). Optional guards/contracts.
80
+
81
+ - `info`: purely informational; never gates dependents. Good for exploratory or advisory steps.
82
+
83
+ Notes
84
+ - Global `fail_if` is non‑gating by design; it marks the run status but must not block dependents.
85
+ - Check‑level `fail_if` is gating (treated as fatal for routing).
86
+
87
+ ## Declarative Flow > Imperative Glue
88
+
89
+ - Prefer `transitions` under `on_success` / `on_fail` / `on_finish` over imperative `goto_js`.
90
+ - Keep transition expressions short, pure, and readable; use optional chaining and nullish coalescing for safety.
91
+
92
+ Example
93
+
94
+ ```yaml
95
+ on_finish:
96
+ transitions:
97
+ - when: "any(outputs_history['validate-fact'], v => v?.is_valid === false) && event.name === 'issue_opened'"
98
+ to: issue-assistant
99
+ - when: "any(outputs_history['validate-fact'], v => v?.is_valid === false) && event.name === 'issue_comment'"
100
+ to: comment-assistant
101
+ - when: "all(outputs_history['validate-fact'], v => v?.is_valid === true)"
102
+ to: null
103
+ ```
104
+
105
+ ## forEach (Fan‑Out) Patterns
106
+
107
+ - Use `forEach: true` on the parent that produces an array; children with `fanout: map` run per item; with `fanout: reduce` run once (aggregate).
108
+ - Empty arrays should skip dependents with a visible message and not increment stats.
109
+ - Aggregate parents should route (on_success/on_fail) before committing; dependents read per‑scope outputs.
110
+
111
+ Minimal Map + Aggregate
112
+
113
+ ```yaml
114
+ extract-facts:
115
+ type: ai
116
+ on: [issue_opened]
117
+ forEach: true
118
+ prompt: |
119
+ Return JSON array of facts: [{ id, claim, verifiable }]
120
+ schema:
121
+ type: array
122
+ items:
123
+ type: object
124
+ required: [id, claim, verifiable]
125
+
126
+ validate-fact:
127
+ type: ai
128
+ on: [issue_opened]
129
+ depends_on: [extract-facts]
130
+ fanout: map
131
+ prompt: "Validate: {{ outputs['extract-facts'].claim }}"
132
+
133
+ aggregate:
134
+ type: script
135
+ on: [issue_opened]
136
+ depends_on: [validate-fact]
137
+ content: |
138
+ const all = (outputs.history['validate-fact']||[]).filter(Boolean);
139
+ return { all_valid: all.every(v => v?.is_valid === true) };
140
+ schema:
141
+ type: object
142
+ required: [all_valid]
143
+ ```
144
+
145
+ ## GitHub Ops (External)
146
+
147
+ - Normalize values at the provider; still use `assume` to guard empties.
148
+ - Keep idempotency: label adds/sets should tolerate duplicates and ordering.
149
+
150
+ Example
151
+
152
+ ```yaml
153
+ apply-issue-labels:
154
+ type: github
155
+ criticality: external
156
+ on: [issue_opened]
157
+ depends_on: [issue-assistant]
158
+ assume:
159
+ - "(outputs['issue-assistant']?.labels?.length ?? 0) > 0"
160
+ op: labels.add
161
+ values:
162
+ - "{{ outputs['issue-assistant'].labels | default: [] | json }}"
163
+ ```
164
+
165
+ ## Memory & Idempotency
166
+
167
+ - Use `namespace` to avoid collisions.
168
+ - Treat memory reads in `assume`/`if` as guards only; avoid side effects in expressions.
169
+ - For external calls, design retry‑safe operations (check‑before‑write, idempotency keys).
170
+
171
+ ## YAML Style
172
+
173
+ - Prefer block arrays/lists over inline `[]` unless trivially short.
174
+ - Quote JS expressions in `assume`/`if` using double quotes.
175
+ - Use `|` for multiline `prompt`/`content`; avoid trailing whitespace.
176
+ - Keep keys in the recommended order across all steps.
177
+
178
+ ## Do’s and Don’ts
179
+
180
+ Do
181
+ - Declare `criticality` and follow the guard/contract rules for `external`/`internal`.
182
+ - Keep expressions short and defensive: `outputs?.x?.length ?? 0`.
183
+ - Add `schema` whenever output shape matters (AI/script/command/http).
184
+
185
+ Don’t
186
+ - Hide control flow in templates or long `*_js` snippets.
187
+ - Mix unrelated responsibilities in a single step.
188
+ - Depend on outputs you didn’t guard (always use `assume`).
189
+
190
+ ## Quick Checklist (Per Step)
191
+
192
+ - Identity: `type`, `criticality`, `group` set?
193
+ - When: `on` clear and minimal?
194
+ - Inputs: `depends_on` accurate? `assume` present for risky reads?
195
+ - How: provider config minimal and readable?
196
+ - Contracts: `schema` or `guarantee` (required for external/internal outputs)?
197
+ - Policies: `fail_if` only for step‑specific gating?
198
+ - Flow: transitions (`on_success`/`on_fail`/`on_finish`) instead of imperative glue?
199
+ - Controls: timeouts and env only when necessary?
200
+
201
+ ## Complete Example (Well‑Structured External Labeling)
202
+
203
+ ```yaml
204
+ apply-overview-labels:
205
+ type: github
206
+ criticality: external
207
+ tags: [github]
208
+ on: [pr_opened]
209
+ depends_on: [overview]
210
+ assume:
211
+ - "outputs['overview']?.tags?.label"
212
+ - "outputs['overview']?.tags?.['review-effort'] != null"
213
+ op: labels.add
214
+ values:
215
+ - "{{ outputs.overview.tags.label | default: '' | safe_label }}"
216
+ - "{{ outputs.overview.tags['review-effort'] | default: '' | prepend: 'review/effort:' | safe_label }}"
217
+ ```
218
+
219
+ ## References
220
+
221
+ - Fault Management & Contracts
222
+ - Criticality Modes
223
+ - Dependencies & Routing
224
+
@@ -0,0 +1,299 @@
1
+ ## 🌐 HTTP Integration & Scheduling
2
+
3
+ Visor provides comprehensive HTTP integration capabilities including webhook reception, HTTP outputs, scheduled executions via cron, and TLS/HTTPS support.
4
+
5
+ ### HTTP Server for Webhook Reception
6
+
7
+ Configure an HTTP/HTTPS server to receive webhooks and trigger checks:
8
+
9
+ ```yaml
10
+ version: "1.0"
11
+
12
+ http_server:
13
+ enabled: true
14
+ port: 8080
15
+ host: "0.0.0.0"
16
+
17
+ # Optional TLS/HTTPS configuration
18
+ tls:
19
+ enabled: true
20
+ cert: "${TLS_CERT}" # From environment variable
21
+ key: "${TLS_KEY}"
22
+ ca: "${TLS_CA}" # Optional CA certificate
23
+ rejectUnauthorized: true
24
+
25
+ # Authentication
26
+ auth:
27
+ type: bearer_token
28
+ secret: "${WEBHOOK_SECRET}"
29
+
30
+ # Webhook endpoints
31
+ endpoints:
32
+ - path: "/webhook/github"
33
+ name: "github-events"
34
+ - path: "/webhook/jenkins"
35
+ name: "jenkins-builds"
36
+ ```
37
+
38
+ Note: The HTTP server is automatically disabled when running in GitHub Actions to avoid conflicts.
39
+
40
+ ### Check Types for HTTP Integration
41
+
42
+ #### 1. HTTP Input (Webhook Receiver)
43
+ Receive data from configured webhook endpoints:
44
+
45
+ ```yaml
46
+ steps:
47
+ github-webhook:
48
+ type: http_input
49
+ endpoint: "/webhook/github"
50
+ on: [webhook_received]
51
+ transform: |
52
+ {
53
+ "event": "{{ webhook.action }}",
54
+ "repository": "{{ webhook.repository.full_name }}"
55
+ }
56
+ ```
57
+
58
+ #### 2. HTTP Output (Send Data)
59
+ Send check results to external services:
60
+
61
+ ```yaml
62
+ steps:
63
+ notify-external:
64
+ type: http
65
+ depends_on: [security-check]
66
+ url: "https://api.example.com/notify"
67
+ method: POST
68
+ headers:
69
+ Content-Type: "application/json"
70
+ Authorization: "Bearer ${API_TOKEN}"
71
+ body: |
72
+ {
73
+ "results": {{ outputs['security-check'] | json }},
74
+ "timestamp": "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
75
+ }
76
+ ```
77
+
78
+ #### 3. HTTP Client (Fetch Data)
79
+ Fetch data from external APIs:
80
+
81
+ ```yaml
82
+ steps:
83
+ fetch-config:
84
+ type: http_client
85
+ url: "https://api.example.com/config"
86
+ method: GET
87
+ headers:
88
+ Authorization: "Bearer ${API_TOKEN}"
89
+ transform: |
90
+ {
91
+ "settings": {{ response.data | json }},
92
+ "fetched_at": "{{ 'now' | date: '%Y-%m-%d' }}"
93
+ }
94
+ ```
95
+
96
+ #### 4. Log Provider (Debugging & Monitoring)
97
+ Output debugging information and monitor workflow execution:
98
+
99
+ ```yaml
100
+ steps:
101
+ debug-start:
102
+ type: log
103
+ group: debugging
104
+ level: info
105
+ message: "🚀 Starting code review for PR #{{ pr.number }} by {{ pr.author }}"
106
+ include_pr_context: true
107
+ include_dependencies: false
108
+ include_metadata: true
109
+
110
+ debug-dependencies:
111
+ type: log
112
+ group: debugging
113
+ level: debug
114
+ depends_on: [security-check]
115
+ message: |
116
+ 📊 Dependency results summary:
117
+ {% if dependencies %}
118
+ - Security check found {{ dependencies['security-check'].issueCount }} issues
119
+ {% else %}
120
+ - No dependencies processed
121
+ {% endif %}
122
+ include_dependencies: true
123
+
124
+ performance-monitor:
125
+ type: log
126
+ group: monitoring
127
+ level: warn
128
+ message: "⚠️ Large PR detected: {{ pr.totalAdditions }} lines added"
129
+ ```
130
+
131
+ ### Cron Scheduling
132
+
133
+ ```yaml
134
+ steps:
135
+ nightly-security-scan:
136
+ type: ai
137
+ schedule: "0 3 * * *" # Every day at 3am
138
+ prompt: "Run a deep security scan on the default branch"
139
+ ```
140
+
141
+ ```yaml
142
+ steps:
143
+ weekly-health-check:
144
+ type: http_client
145
+ url: "https://api.example.com/health"
146
+ schedule: "0 0 * * 0" # Every Sunday at midnight
147
+ ```
148
+
149
+ ### TLS/HTTPS Configuration
150
+
151
+ You can configure TLS using environment variables, direct file paths, or Let's Encrypt.
152
+
153
+ #### Environment Variables
154
+ ```yaml
155
+ tls:
156
+ enabled: true
157
+ cert: "${TLS_CERT}"
158
+ key: "${TLS_KEY}"
159
+ ```
160
+
161
+ #### File Paths
162
+ ```yaml
163
+ tls:
164
+ enabled: true
165
+ cert: "/etc/ssl/certs/server.crt"
166
+ key: "/etc/ssl/private/server.key"
167
+ ```
168
+
169
+ #### Let's Encrypt
170
+ ```yaml
171
+ tls:
172
+ enabled: true
173
+ cert: "/etc/letsencrypt/live/example.com/fullchain.pem"
174
+ key: "/etc/letsencrypt/live/example.com/privkey.pem"
175
+ ```
176
+
177
+ ### HTTP Security Features
178
+
179
+ Visor's HTTP server includes comprehensive security protections:
180
+
181
+ #### Authentication Methods
182
+ ```yaml
183
+ # Bearer Token Authentication
184
+ auth:
185
+ type: bearer_token
186
+ secret: "${WEBHOOK_SECRET}"
187
+
188
+ # HMAC-SHA256 Signature Verification
189
+ auth:
190
+ type: hmac
191
+ secret: "${WEBHOOK_SECRET}"
192
+
193
+ # Basic Authentication
194
+ auth:
195
+ type: basic
196
+ username: "${HTTP_USERNAME}"
197
+ password: "${HTTP_PASSWORD}"
198
+ ```
199
+
200
+ #### HMAC Authentication Details
201
+ For `hmac` authentication, webhooks must include the `x-webhook-signature` header:
202
+ - Signature format: `sha256={hash}`
203
+ - Uses HMAC-SHA256 with the configured secret
204
+ - Implements timing-safe comparison to prevent timing attacks
205
+ - Compatible with GitHub webhook signatures
206
+
207
+ #### DoS Protection
208
+ - Request size limits: Maximum 1MB request body size
209
+ - Early rejection: Validates `Content-Length` header before processing
210
+ - Graceful error handling: Returns proper HTTP status codes (413 Payload Too Large)
211
+
212
+ #### Security Best Practices
213
+ - Environment detection: Automatically disables in GitHub Actions
214
+ - TLS support: Full HTTPS configuration with custom certificates
215
+ - Input validation: Validates all webhook payloads before processing
216
+ - Error isolation: Security failures don't affect independent checks
217
+
218
+ ### Complete HTTP Pipeline Example
219
+
220
+ ```yaml
221
+ version: "1.0"
222
+
223
+ # HTTP server configuration
224
+ http_server:
225
+ enabled: true
226
+ port: 8443
227
+ tls:
228
+ enabled: true
229
+ cert: "${TLS_CERT}"
230
+ key: "${TLS_KEY}"
231
+ auth:
232
+ type: bearer_token
233
+ secret: "${WEBHOOK_SECRET}"
234
+ endpoints:
235
+ - path: "/webhook/deployment"
236
+ name: "deployment-trigger"
237
+
238
+ steps:
239
+ # 1. Receive webhook
240
+ deployment-webhook:
241
+ type: http_input
242
+ endpoint: "/webhook/deployment"
243
+ on: [webhook_received]
244
+ transform: |
245
+ {
246
+ "version": "{{ webhook.version }}",
247
+ "environment": "{{ webhook.environment }}"
248
+ }
249
+
250
+ # 2. Analyze deployment
251
+ deployment-analysis:
252
+ type: ai
253
+ depends_on: [deployment-webhook]
254
+ prompt: |
255
+ Analyze deployment for version {{ outputs['deployment-webhook'].suggestions | first }}
256
+ Check for potential issues and risks
257
+
258
+ # 3. Fetch current status
259
+ current-status:
260
+ type: http_client
261
+ depends_on: [deployment-webhook]
262
+ url: "https://api.example.com/status"
263
+ method: GET
264
+
265
+ # 4. Send results
266
+ notify-team:
267
+ type: http
268
+ depends_on: [deployment-analysis, current-status]
269
+ url: "https://slack.example.com/webhook"
270
+ body: |
271
+ {
272
+ "text": "Deployment Analysis Complete",
273
+ "analysis": {{ outputs['deployment-analysis'] | json }},
274
+ "current_status": {{ outputs['current-status'] | json }}
275
+ }
276
+
277
+ # 5. Scheduled health check
278
+ health-check:
279
+ type: http_client
280
+ url: "https://api.example.com/health"
281
+ schedule: "*/5 * * * *" # Every 5 minutes
282
+ transform: |
283
+ {
284
+ "status": "{{ response.status }}",
285
+ "checked_at": "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
286
+ }
287
+ ```
288
+
289
+ ### Liquid Template Support
290
+
291
+ All HTTP configurations support Liquid templating for dynamic content. See [Liquid Templates Guide](./liquid-templates.md) for complete reference.
292
+
293
+ Common patterns:
294
+ - Access webhook data: `{{ webhook.field }}`
295
+ - Access headers: `{{ headers['x-custom-header'] }}`
296
+ - Access previous outputs: `{{ outputs['check-name'].suggestions | first }}`
297
+ - Date formatting: `{{ 'now' | date: '%Y-%m-%d' }}`
298
+ - JSON encoding: `{{ data | json }}` (useful for debugging objects)
299
+