@probelabs/visor 0.1.106 → 0.1.107

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 (450) hide show
  1. package/README.md +65 -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 +620 -0
  7. package/defaults/visor.tests.yaml +674 -0
  8. package/defaults/visor.yaml +482 -0
  9. package/dist/663.index.js +2 -3
  10. package/dist/80.index.js +2 -3
  11. package/dist/action-cli-bridge.d.ts +11 -82
  12. package/dist/action-cli-bridge.d.ts.map +1 -1
  13. package/dist/ai-review-service.d.ts +15 -0
  14. package/dist/ai-review-service.d.ts.map +1 -1
  15. package/dist/check-execution-engine.d.ts +19 -331
  16. package/dist/check-execution-engine.d.ts.map +1 -1
  17. package/dist/cli-main.d.ts.map +1 -1
  18. package/dist/cli.d.ts +0 -1
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/config.d.ts +16 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/cron-scheduler.d.ts +3 -3
  23. package/dist/cron-scheduler.d.ts.map +1 -1
  24. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  25. package/dist/defaults/code-refiner.yaml +114 -0
  26. package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
  27. package/dist/defaults/override.yaml +52 -0
  28. package/dist/defaults/task-refinement.yaml +620 -0
  29. package/dist/defaults/visor.tests.yaml +674 -0
  30. package/dist/defaults/visor.yaml +482 -0
  31. package/dist/docs/DEPLOYMENT.md +118 -0
  32. package/dist/docs/GITHUB_CHECKS.md +280 -0
  33. package/dist/docs/NPM_USAGE.md +208 -0
  34. package/dist/docs/action-reference.md +19 -0
  35. package/dist/docs/advanced-ai.md +178 -0
  36. package/dist/docs/ai-configuration.md +468 -0
  37. package/dist/docs/author-permissions.md +610 -0
  38. package/dist/docs/ci-cli-mode.md +34 -0
  39. package/dist/docs/claude-code.md +74 -0
  40. package/dist/docs/command-provider.md +559 -0
  41. package/dist/docs/commands.md +8 -0
  42. package/dist/docs/configuration.md +303 -0
  43. package/dist/docs/custom-tools.md +424 -0
  44. package/dist/docs/dashboards/README.md +23 -0
  45. package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
  46. package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
  47. package/dist/docs/debug-visualizer-progress.md +572 -0
  48. package/dist/docs/debug-visualizer-rfc.md +691 -0
  49. package/dist/docs/debug-visualizer.md +114 -0
  50. package/dist/docs/debugging.md +636 -0
  51. package/dist/docs/default-output-schema.md +28 -0
  52. package/dist/docs/dependencies.md +369 -0
  53. package/dist/docs/dev-playbook.md +9 -0
  54. package/dist/docs/engine-state-machine-plan.md +333 -0
  55. package/dist/docs/event-driven-github-integration-rfc.md +743 -0
  56. package/dist/docs/event-triggers.md +292 -0
  57. package/dist/docs/execution-statistics-rfc.md +290 -0
  58. package/dist/docs/fact-validator-gap-analysis.md +178 -0
  59. package/dist/docs/fact-validator-implementation-plan.md +1235 -0
  60. package/dist/docs/fail-if.md +95 -0
  61. package/dist/docs/failure-conditions-implementation.md +271 -0
  62. package/dist/docs/failure-conditions-schema.md +173 -0
  63. package/dist/docs/failure-routing-rfc.md +193 -0
  64. package/dist/docs/failure-routing.md +507 -0
  65. package/dist/docs/foreach-dependency-propagation.md +473 -0
  66. package/dist/docs/github-ops.md +89 -0
  67. package/dist/docs/goto-forward-run-plan.md +113 -0
  68. package/dist/docs/guides/criticality-modes.md +332 -0
  69. package/dist/docs/guides/fault-management-and-contracts.md +738 -0
  70. package/dist/docs/guides/workflow-style-guide.md +224 -0
  71. package/dist/docs/http.md +299 -0
  72. package/dist/docs/human-input-provider.md +372 -0
  73. package/dist/docs/limits.md +64 -0
  74. package/dist/docs/liquid-templates.md +347 -0
  75. package/dist/docs/loop-routing-refactor.md +89 -0
  76. package/dist/docs/mcp-provider.md +557 -0
  77. package/dist/docs/mcp.md +124 -0
  78. package/dist/docs/memory.md +903 -0
  79. package/dist/docs/observability.md +12 -0
  80. package/dist/docs/output-formats.md +20 -0
  81. package/dist/docs/output-formatting.md +29 -0
  82. package/dist/docs/output-history.md +383 -0
  83. package/dist/docs/performance.md +6 -0
  84. package/dist/docs/pluggable.md +124 -0
  85. package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
  86. package/dist/docs/recipes.md +21 -0
  87. package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
  88. package/dist/docs/schema-next-pr.md +10 -0
  89. package/dist/docs/schema-templates.md +68 -0
  90. package/dist/docs/script.md +34 -0
  91. package/dist/docs/sdk.md +222 -0
  92. package/dist/docs/security.md +7 -0
  93. package/dist/docs/suppressions.md +89 -0
  94. package/dist/docs/tag-filtering.md +258 -0
  95. package/dist/docs/telemetry-setup.md +119 -0
  96. package/dist/docs/telemetry-tracing-rfc.md +275 -0
  97. package/dist/docs/test-framework-rfc.md +680 -0
  98. package/dist/docs/testing/assertions.md +85 -0
  99. package/dist/docs/testing/ci.md +44 -0
  100. package/dist/docs/testing/cli.md +41 -0
  101. package/dist/docs/testing/cookbook.md +172 -0
  102. package/dist/docs/testing/dsl-reference.md +199 -0
  103. package/dist/docs/testing/fixtures-and-mocks.md +91 -0
  104. package/dist/docs/testing/flows.md +92 -0
  105. package/dist/docs/testing/getting-started.md +93 -0
  106. package/dist/docs/testing/troubleshooting.md +55 -0
  107. package/dist/docs/timeouts.md +50 -0
  108. package/dist/docs/troubleshooting.md +7 -0
  109. package/dist/docs/visor-sdk-rfc.md +186 -0
  110. package/dist/docs/workflows.md +569 -0
  111. package/dist/engine/on-finish/orchestrator.d.ts +19 -0
  112. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
  113. package/dist/engine/on-finish/utils.d.ts +44 -0
  114. package/dist/engine/on-finish/utils.d.ts.map +1 -0
  115. package/dist/event-bus/event-bus.d.ts +13 -0
  116. package/dist/event-bus/event-bus.d.ts.map +1 -0
  117. package/dist/event-bus/types.d.ts +57 -0
  118. package/dist/event-bus/types.d.ts.map +1 -0
  119. package/dist/examples/.claude/agents/code-reviewer.md +69 -0
  120. package/dist/examples/.mcp.json +34 -0
  121. package/dist/examples/CALCULATOR-SDK.md +364 -0
  122. package/dist/examples/README.md +384 -0
  123. package/dist/examples/ai-retry-fallback-config.yaml +180 -0
  124. package/dist/examples/ai-with-bash.yaml +126 -0
  125. package/dist/examples/ai-with-mcp.yaml +82 -0
  126. package/dist/examples/basic-human-input.yaml +15 -0
  127. package/dist/examples/bedrock-config.yaml +77 -0
  128. package/dist/examples/calculator-config.yaml +133 -0
  129. package/dist/examples/calculator-json-output-guide.md +311 -0
  130. package/dist/examples/calculator-sdk-automated.ts +340 -0
  131. package/dist/examples/calculator-sdk-example.ts +275 -0
  132. package/dist/examples/calculator-sdk-json.ts +331 -0
  133. package/dist/examples/calculator-sdk-real.ts +374 -0
  134. package/dist/examples/calculator-sdk-test.ts +148 -0
  135. package/dist/examples/claude-code-config.yaml +191 -0
  136. package/dist/examples/cron-webhook-config.yaml +215 -0
  137. package/dist/examples/custom-template.liquid +57 -0
  138. package/dist/examples/custom-tools-example.yaml +281 -0
  139. package/dist/examples/enhanced-config.yaml +165 -0
  140. package/dist/examples/environments/visor.base.yaml +92 -0
  141. package/dist/examples/environments/visor.dev.yaml +33 -0
  142. package/dist/examples/environments/visor.prod.yaml +95 -0
  143. package/dist/examples/environments/visor.staging.yaml +46 -0
  144. package/dist/examples/fact-validator.yaml +361 -0
  145. package/dist/examples/fail-if-simple.yaml +90 -0
  146. package/dist/examples/failure-conditions-advanced.yaml +136 -0
  147. package/dist/examples/failure-conditions-basic.yaml +48 -0
  148. package/dist/examples/failure-conditions-github-style.yaml +119 -0
  149. package/dist/examples/failure-conditions-migration.yaml +74 -0
  150. package/dist/examples/for-loop-example.yaml +176 -0
  151. package/dist/examples/forEach-example.yaml +120 -0
  152. package/dist/examples/github-workflow-with-tags.yml +163 -0
  153. package/dist/examples/http-integration-config.yaml +240 -0
  154. package/dist/examples/https-server-config.yaml +209 -0
  155. package/dist/examples/human-input-example.yaml +63 -0
  156. package/dist/examples/if-conditions.yaml +173 -0
  157. package/dist/examples/jira-simple-example.yaml +56 -0
  158. package/dist/examples/jira-single-issue-workflow.yaml +166 -0
  159. package/dist/examples/jira-workflow-mcp.yaml +182 -0
  160. package/dist/examples/mcp/analyzer.py +119 -0
  161. package/dist/examples/mcp-provider-example.yaml +301 -0
  162. package/dist/examples/memory-counter.yaml +99 -0
  163. package/dist/examples/memory-error-collection.yaml +104 -0
  164. package/dist/examples/memory-exec-js.yaml +247 -0
  165. package/dist/examples/memory-namespace-isolation.yaml +184 -0
  166. package/dist/examples/memory-retry-counter.yaml +65 -0
  167. package/dist/examples/memory-state-machine.yaml +170 -0
  168. package/dist/examples/outputs-raw-basic.yaml +26 -0
  169. package/dist/examples/project-with-tools.yaml +174 -0
  170. package/dist/examples/prompts/architecture-analysis.liquid +116 -0
  171. package/dist/examples/prompts/security-comprehensive.liquid +107 -0
  172. package/dist/examples/quick-start-tags.yaml +53 -0
  173. package/dist/examples/routing-basic.yaml +35 -0
  174. package/dist/examples/routing-dynamic-js.yaml +46 -0
  175. package/dist/examples/routing-foreach.yaml +34 -0
  176. package/dist/examples/routing-goto-event.yaml +34 -0
  177. package/dist/examples/routing-on-success.yaml +25 -0
  178. package/dist/examples/run-calculator-demo.sh +71 -0
  179. package/dist/examples/sdk-basic.mjs +10 -0
  180. package/dist/examples/sdk-cjs.cjs +10 -0
  181. package/dist/examples/sdk-comprehensive.mjs +175 -0
  182. package/dist/examples/sdk-manual-config.mjs +65 -0
  183. package/dist/examples/sdk-typescript.js +81 -0
  184. package/dist/examples/sdk-typescript.ts +92 -0
  185. package/dist/examples/session-reuse-config.yaml +151 -0
  186. package/dist/examples/templates/security-report.liquid +137 -0
  187. package/dist/examples/tools-library.yaml +281 -0
  188. package/dist/examples/transform-example.yaml +199 -0
  189. package/dist/examples/visor-with-tags.yaml +198 -0
  190. package/dist/examples/webhook-pipeline-config.yaml +218 -0
  191. package/dist/examples/workflows/calculator-workflow.yaml +163 -0
  192. package/dist/examples/workflows/code-quality.yaml +222 -0
  193. package/dist/examples/workflows/quick-pr-check.yaml +90 -0
  194. package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
  195. package/dist/failure-condition-evaluator.d.ts +1 -0
  196. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  197. package/dist/frontends/github-frontend.d.ts +38 -0
  198. package/dist/frontends/github-frontend.d.ts.map +1 -0
  199. package/dist/frontends/host.d.ts +43 -0
  200. package/dist/frontends/host.d.ts.map +1 -0
  201. package/dist/frontends/ndjson-sink.d.ts +12 -0
  202. package/dist/frontends/ndjson-sink.d.ts.map +1 -0
  203. package/dist/generated/config-schema.d.ts +564 -22
  204. package/dist/generated/config-schema.d.ts.map +1 -1
  205. package/dist/generated/config-schema.json +612 -24
  206. package/dist/github-check-service.d.ts +4 -6
  207. package/dist/github-check-service.d.ts.map +1 -1
  208. package/dist/github-comments.d.ts +0 -4
  209. package/dist/github-comments.d.ts.map +1 -1
  210. package/dist/index.d.ts.map +1 -1
  211. package/dist/index.js +70335 -62514
  212. package/dist/liquid-extensions.d.ts.map +1 -1
  213. package/dist/logger.d.ts +1 -0
  214. package/dist/logger.d.ts.map +1 -1
  215. package/dist/memory-store.d.ts +6 -0
  216. package/dist/memory-store.d.ts.map +1 -1
  217. package/dist/output/assistant-json/template.liquid +0 -0
  218. package/dist/output/traces/run-2025-11-21T11-50-46-505Z.ndjson +138 -0
  219. package/dist/output/traces/run-2025-11-21T11-51-33-674Z.ndjson +839 -0
  220. package/dist/output-formatters.d.ts +1 -1
  221. package/dist/output-formatters.d.ts.map +1 -1
  222. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  223. package/dist/providers/check-provider-registry.d.ts +6 -0
  224. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  225. package/dist/providers/check-provider.interface.d.ts +34 -1
  226. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  227. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  228. package/dist/providers/command-check-provider.d.ts +1 -1
  229. package/dist/providers/command-check-provider.d.ts.map +1 -1
  230. package/dist/providers/custom-tool-executor.d.ts +61 -0
  231. package/dist/providers/custom-tool-executor.d.ts.map +1 -0
  232. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  233. package/dist/providers/http-client-provider.d.ts +1 -4
  234. package/dist/providers/http-client-provider.d.ts.map +1 -1
  235. package/dist/providers/human-input-check-provider.d.ts +3 -0
  236. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  237. package/dist/providers/index.d.ts +1 -0
  238. package/dist/providers/index.d.ts.map +1 -1
  239. package/dist/providers/log-check-provider.d.ts +2 -5
  240. package/dist/providers/log-check-provider.d.ts.map +1 -1
  241. package/dist/providers/mcp-check-provider.d.ts +9 -3
  242. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  243. package/dist/providers/memory-check-provider.d.ts +2 -8
  244. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  245. package/dist/providers/script-check-provider.d.ts +25 -0
  246. package/dist/providers/script-check-provider.d.ts.map +1 -0
  247. package/dist/providers/workflow-check-provider.d.ts +56 -0
  248. package/dist/providers/workflow-check-provider.d.ts.map +1 -0
  249. package/dist/reviewer.d.ts +2 -1
  250. package/dist/reviewer.d.ts.map +1 -1
  251. package/dist/sdk/chunk-37ZSCMFC.mjs +482 -0
  252. package/dist/sdk/chunk-37ZSCMFC.mjs.map +1 -0
  253. package/dist/sdk/chunk-6Y4YTKCF.mjs +197 -0
  254. package/dist/sdk/chunk-6Y4YTKCF.mjs.map +1 -0
  255. package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
  256. package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
  257. package/dist/sdk/chunk-IEO6CFLG.mjs +1215 -0
  258. package/dist/sdk/chunk-IEO6CFLG.mjs.map +1 -0
  259. package/dist/sdk/chunk-JEHPDJIF.mjs +223 -0
  260. package/dist/sdk/chunk-JEHPDJIF.mjs.map +1 -0
  261. package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
  262. package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
  263. package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-OOZITMRU.mjs} +1 -1
  264. package/dist/sdk/chunk-OOZITMRU.mjs.map +1 -0
  265. package/dist/sdk/chunk-OWUVOILT.mjs +557 -0
  266. package/dist/sdk/chunk-OWUVOILT.mjs.map +1 -0
  267. package/dist/sdk/chunk-OZJ263FM.mjs +986 -0
  268. package/dist/sdk/chunk-OZJ263FM.mjs.map +1 -0
  269. package/dist/sdk/chunk-PTL3K3PN.mjs +3128 -0
  270. package/dist/sdk/chunk-PTL3K3PN.mjs.map +1 -0
  271. package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
  272. package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
  273. package/dist/sdk/chunk-VMPLF6FT.mjs +127 -0
  274. package/dist/sdk/chunk-VMPLF6FT.mjs.map +1 -0
  275. package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
  276. package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
  277. package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
  278. package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
  279. package/dist/sdk/config-M4ZNO6NU.mjs +14 -0
  280. package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
  281. package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
  282. package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
  283. package/dist/sdk/failure-condition-evaluator-NBO5YRXW.mjs +16 -0
  284. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
  285. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
  286. package/dist/sdk/github-frontend-4AWRJT7D.mjs +1242 -0
  287. package/dist/sdk/github-frontend-4AWRJT7D.mjs.map +1 -0
  288. package/dist/sdk/host-7GBC3S7L.mjs +49 -0
  289. package/dist/sdk/host-7GBC3S7L.mjs.map +1 -0
  290. package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-C7EG3YKH.mjs} +7 -2
  291. package/dist/sdk/memory-store-GJACZC2A.mjs +11 -0
  292. package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
  293. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
  294. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
  295. package/dist/sdk/renderer-schema-6RF26VUS.mjs +50 -0
  296. package/dist/sdk/renderer-schema-6RF26VUS.mjs.map +1 -0
  297. package/dist/sdk/routing-RP56JTV2.mjs +23 -0
  298. package/dist/sdk/routing-RP56JTV2.mjs.map +1 -0
  299. package/dist/sdk/sdk.d.mts +326 -21
  300. package/dist/sdk/sdk.d.ts +326 -21
  301. package/dist/sdk/sdk.js +21403 -16366
  302. package/dist/sdk/sdk.js.map +1 -1
  303. package/dist/sdk/sdk.mjs +13510 -2096
  304. package/dist/sdk/sdk.mjs.map +1 -1
  305. package/dist/sdk/session-registry-N5FFYFTM.mjs +10 -0
  306. package/dist/sdk/session-registry-N5FFYFTM.mjs.map +1 -0
  307. package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
  308. package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
  309. package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-WP4X46IF.mjs} +2 -2
  310. package/dist/sdk/tracer-init-WP4X46IF.mjs.map +1 -0
  311. package/dist/sdk/workflow-registry-2YIIXQCK.mjs +11 -0
  312. package/dist/sdk/workflow-registry-2YIIXQCK.mjs.map +1 -0
  313. package/dist/sdk.d.ts.map +1 -1
  314. package/dist/snapshot-store.d.ts +59 -0
  315. package/dist/snapshot-store.d.ts.map +1 -0
  316. package/dist/state-machine/context/build-engine-context.d.ts +9 -0
  317. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
  318. package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
  319. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
  320. package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
  321. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
  322. package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
  323. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
  324. package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
  325. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
  326. package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
  327. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
  328. package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
  329. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
  330. package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
  331. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
  332. package/dist/state-machine/execution/summary.d.ts +8 -0
  333. package/dist/state-machine/execution/summary.d.ts.map +1 -0
  334. package/dist/state-machine/runner.d.ts +73 -0
  335. package/dist/state-machine/runner.d.ts.map +1 -0
  336. package/dist/state-machine/states/check-running.d.ts +14 -0
  337. package/dist/state-machine/states/check-running.d.ts.map +1 -0
  338. package/dist/state-machine/states/completed.d.ts +12 -0
  339. package/dist/state-machine/states/completed.d.ts.map +1 -0
  340. package/dist/state-machine/states/error.d.ts +11 -0
  341. package/dist/state-machine/states/error.d.ts.map +1 -0
  342. package/dist/state-machine/states/init.d.ts +11 -0
  343. package/dist/state-machine/states/init.d.ts.map +1 -0
  344. package/dist/state-machine/states/level-dispatch.d.ts +17 -0
  345. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
  346. package/dist/state-machine/states/plan-ready.d.ts +12 -0
  347. package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
  348. package/dist/state-machine/states/routing.d.ts +52 -0
  349. package/dist/state-machine/states/routing.d.ts.map +1 -0
  350. package/dist/state-machine/states/wave-planning.d.ts +14 -0
  351. package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
  352. package/dist/state-machine/workflow-projection.d.ts +47 -0
  353. package/dist/state-machine/workflow-projection.d.ts.map +1 -0
  354. package/dist/state-machine-execution-engine.d.ts +147 -0
  355. package/dist/state-machine-execution-engine.d.ts.map +1 -0
  356. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  357. package/dist/test-runner/assertions.d.ts +59 -0
  358. package/dist/test-runner/assertions.d.ts.map +1 -0
  359. package/dist/test-runner/core/environment.d.ts +8 -0
  360. package/dist/test-runner/core/environment.d.ts.map +1 -0
  361. package/dist/test-runner/core/fixture.d.ts +3 -0
  362. package/dist/test-runner/core/fixture.d.ts.map +1 -0
  363. package/dist/test-runner/core/flow-stage.d.ts +32 -0
  364. package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
  365. package/dist/test-runner/core/mocks.d.ts +8 -0
  366. package/dist/test-runner/core/mocks.d.ts.map +1 -0
  367. package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
  368. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
  369. package/dist/test-runner/evaluators.d.ts +12 -0
  370. package/dist/test-runner/evaluators.d.ts.map +1 -0
  371. package/dist/test-runner/fixture-loader.d.ts +30 -0
  372. package/dist/test-runner/fixture-loader.d.ts.map +1 -0
  373. package/dist/test-runner/index.d.ts +120 -0
  374. package/dist/test-runner/index.d.ts.map +1 -0
  375. package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
  376. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
  377. package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
  378. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
  379. package/dist/test-runner/utils/selectors.d.ts +2 -0
  380. package/dist/test-runner/utils/selectors.d.ts.map +1 -0
  381. package/dist/test-runner/validator.d.ts +8 -0
  382. package/dist/test-runner/validator.d.ts.map +1 -0
  383. package/dist/traces/run-2025-11-21T11-50-46-505Z.ndjson +138 -0
  384. package/dist/traces/run-2025-11-21T11-51-33-674Z.ndjson +839 -0
  385. package/dist/types/cli.d.ts +4 -1
  386. package/dist/types/cli.d.ts.map +1 -1
  387. package/dist/types/config.d.ts +278 -5
  388. package/dist/types/config.d.ts.map +1 -1
  389. package/dist/types/engine.d.ts +172 -0
  390. package/dist/types/engine.d.ts.map +1 -0
  391. package/dist/types/execution.d.ts +73 -0
  392. package/dist/types/execution.d.ts.map +1 -0
  393. package/dist/types/github.d.ts +51 -0
  394. package/dist/types/github.d.ts.map +1 -0
  395. package/dist/types/workflow.d.ts +237 -0
  396. package/dist/types/workflow.d.ts.map +1 -0
  397. package/dist/utils/command-executor.d.ts +43 -0
  398. package/dist/utils/command-executor.d.ts.map +1 -0
  399. package/dist/utils/comment-metadata.d.ts +21 -0
  400. package/dist/utils/comment-metadata.d.ts.map +1 -0
  401. package/dist/utils/config-loader.d.ts.map +1 -1
  402. package/dist/utils/config-merger.d.ts.map +1 -1
  403. package/dist/utils/env-exposure.d.ts +3 -0
  404. package/dist/utils/env-exposure.d.ts.map +1 -0
  405. package/dist/utils/file-exclusion.d.ts.map +1 -1
  406. package/dist/utils/interactive-prompt.d.ts +1 -1
  407. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  408. package/dist/utils/sandbox.d.ts.map +1 -1
  409. package/dist/utils/script-memory-ops.d.ts +21 -0
  410. package/dist/utils/script-memory-ops.d.ts.map +1 -0
  411. package/dist/utils/template-context.d.ts +7 -0
  412. package/dist/utils/template-context.d.ts.map +1 -0
  413. package/dist/webhook-server.d.ts +3 -3
  414. package/dist/webhook-server.d.ts.map +1 -1
  415. package/dist/workflow-executor.d.ts +81 -0
  416. package/dist/workflow-executor.d.ts.map +1 -0
  417. package/dist/workflow-registry.d.ts +79 -0
  418. package/dist/workflow-registry.d.ts.map +1 -0
  419. package/package.json +10 -5
  420. package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  421. package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
  422. package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
  423. package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
  424. package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
  425. package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
  426. package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
  427. package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
  428. package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
  429. package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
  430. package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
  431. package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
  432. package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
  433. package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
  434. package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
  435. package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
  436. package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
  437. package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
  438. package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
  439. package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
  440. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
  441. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
  442. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
  443. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
  444. package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  445. /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → config-M4ZNO6NU.mjs.map} +0 -0
  446. /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
  447. /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → failure-condition-evaluator-NBO5YRXW.mjs.map} +0 -0
  448. /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → liquid-extensions-C7EG3YKH.mjs.map} +0 -0
  449. /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → memory-store-GJACZC2A.mjs.map} +0 -0
  450. /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → metrics-7PP3EJUH.mjs.map} +0 -0
@@ -0,0 +1,468 @@
1
+ ## 🤖 AI Configuration
2
+
3
+ Visor supports multiple AI providers. Configure one via environment variables.
4
+
5
+ ### Supported Providers
6
+
7
+ | Provider | Env Var | Example Models |
8
+ |----------|---------|----------------|
9
+ | Google Gemini | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-1.5-pro` |
10
+ | Anthropic Claude | `ANTHROPIC_API_KEY` | `claude-3-opus`, `claude-3-sonnet` |
11
+ | OpenAI GPT | `OPENAI_API_KEY` | `gpt-4`, `gpt-4-turbo`, `gpt-3.5-turbo` |
12
+ | AWS Bedrock | AWS credentials (see below) | `anthropic.claude-sonnet-4-20250514-v1:0` (default) |
13
+
14
+ ### GitHub Actions Setup
15
+ Add the provider key as a secret (Settings → Secrets → Actions), then expose it:
16
+
17
+ ```yaml
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - uses: probelabs/visor@v1
21
+ env:
22
+ GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
23
+ # or ANTHROPIC_API_KEY / OPENAI_API_KEY
24
+ # For AWS Bedrock:
25
+ # AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
26
+ # AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
27
+ # AWS_REGION: us-east-1
28
+ ```
29
+
30
+ ### Local Development
31
+
32
+ ```bash
33
+ # Google Gemini
34
+ export GOOGLE_API_KEY="your-api-key"
35
+ export MODEL_NAME="gemini-2.0-flash-exp"
36
+
37
+ # AWS Bedrock
38
+ export AWS_ACCESS_KEY_ID="your-access-key"
39
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
40
+ export AWS_REGION="us-east-1"
41
+ # Optional: Use specific model
42
+ export MODEL_NAME="anthropic.claude-sonnet-4-20250514-v1:0"
43
+ ```
44
+
45
+ ### AWS Bedrock Configuration
46
+
47
+ Bedrock supports multiple authentication methods:
48
+
49
+ 1. **IAM Credentials** (recommended):
50
+ ```bash
51
+ export AWS_ACCESS_KEY_ID="your-access-key"
52
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
53
+ export AWS_REGION="us-east-1"
54
+ ```
55
+
56
+ 2. **Temporary Session Credentials**:
57
+ ```bash
58
+ export AWS_ACCESS_KEY_ID="your-access-key"
59
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
60
+ export AWS_SESSION_TOKEN="your-session-token"
61
+ export AWS_REGION="us-east-1"
62
+ ```
63
+
64
+ 3. **API Key Authentication** (if configured):
65
+ ```bash
66
+ export AWS_BEDROCK_API_KEY="your-api-key"
67
+ export AWS_BEDROCK_BASE_URL="https://your-custom-endpoint.com" # Optional
68
+ ```
69
+
70
+ To force Bedrock provider:
71
+ ```bash
72
+ export FORCE_PROVIDER=bedrock
73
+ ```
74
+
75
+ ### YAML Configuration
76
+
77
+ #### Global Provider Settings
78
+
79
+ Configure a default AI provider in `.visor.yaml`:
80
+
81
+ ```yaml
82
+ # Global configuration for all checks
83
+ ai_provider: bedrock # or google, anthropic, openai
84
+ ai_model: anthropic.claude-sonnet-4-20250514-v1:0 # Optional, uses default if not specified
85
+
86
+ steps:
87
+ security-review:
88
+ type: ai
89
+ prompt: "Analyze code for security vulnerabilities"
90
+ ```
91
+
92
+ #### Per-Check Provider Configuration
93
+
94
+ Override the provider for specific checks:
95
+
96
+ ```yaml
97
+ # Use different providers for different checks
98
+ steps:
99
+ security-review:
100
+ type: ai
101
+ ai_provider: bedrock
102
+ ai_model: anthropic.claude-sonnet-4-20250514-v1:0
103
+ prompt: "Analyze code for security vulnerabilities using AWS Bedrock"
104
+
105
+ performance-review:
106
+ type: ai
107
+ ai_provider: google
108
+ ai_model: gemini-2.0-flash-exp
109
+ prompt: "Analyze code for performance issues using Gemini"
110
+
111
+ style-review:
112
+ type: ai
113
+ ai:
114
+ provider: openai
115
+ model: gpt-4-turbo
116
+ prompt: "Review code style and best practices"
117
+
118
+ #### Prompt Controls (Probe promptType, customPrompt, and persona)
119
+
120
+ Visor exposes Probe’s prompt controls to adjust the agent’s behavior for a given step. Use underscore names only.
121
+
122
+ Accepted keys
123
+ - Under `ai:`
124
+ - `prompt_type`: string — Probe persona/family, e.g., `engineer`, `code-review`, `architect`.
125
+ - `custom_prompt`: string — Baseline/system prompt prepended by the SDK.
126
+ - At the check level (aliases if you prefer not to nest):
127
+ - `ai_prompt_type`: string
128
+ - `ai_custom_prompt`: string
129
+ - `ai_persona`: string — optional hint we prepend as a first line: `Persona: <value>`.
130
+
131
+ Examples
132
+
133
+ ```yaml
134
+ steps:
135
+ engineer-review:
136
+ type: ai
137
+ ai:
138
+ provider: anthropic
139
+ model: claude-3-5-sonnet-latest
140
+ prompt_type: engineer
141
+ custom_prompt: |
142
+ You are a specialist in analyzing security vulnerabilities.
143
+ Focus on injection, authn/z, crypto, and data exposure.
144
+ schema: code-review
145
+ prompt: |
146
+ Review the following changes.
147
+
148
+ quick-architect-check:
149
+ type: ai
150
+ ai_prompt_type: architect # check-level alias
151
+ ai_custom_prompt: "Favor modular boundaries and low coupling."
152
+ prompt: "Assess high-level design risks in the diff"
153
+ ```
154
+
155
+ Notes
156
+ - If `prompt_type` is omitted and a `schema` is provided, Visor defaults to `code-review`.
157
+ - `ai_persona` is a lightweight hint added as a first line; prefer `prompt_type` when integrating with Probe personas.
158
+ ```
159
+
160
+ #### AWS Bedrock Specific Configuration
161
+
162
+ Complete example for Bedrock with all options:
163
+
164
+ ```yaml
165
+ version: "1.0"
166
+
167
+ # Global Bedrock settings
168
+ ai_provider: bedrock
169
+ ai_model: anthropic.claude-sonnet-4-20250514-v1:0
170
+
171
+ # Environment variables can be referenced
172
+ env:
173
+ AWS_REGION: us-east-1
174
+ # AWS credentials should be set as environment variables, not in config
175
+
176
+ steps:
177
+ comprehensive-review:
178
+ type: ai
179
+ ai_provider: bedrock
180
+ prompt: |
181
+ Perform a comprehensive code review including:
182
+ - Security vulnerabilities
183
+ - Performance optimizations
184
+ - Code quality and best practices
185
+ - Architectural concerns
186
+ schema: code-review # Use structured output format
187
+
188
+ custom-bedrock-model:
189
+ type: ai
190
+ ai:
191
+ provider: bedrock
192
+ model: anthropic.claude-3-opus-20240229 # Use a different Bedrock model
193
+ timeout: 120000 # 2 minute timeout for complex analysis
194
+ prompt: "Perform deep architectural analysis"
195
+
196
+ output:
197
+ pr_comment:
198
+ format: markdown
199
+ group_by: check
200
+ collapse: true
201
+ ```
202
+
203
+ ### Advanced AI Configuration
204
+
205
+ #### File Editing (`allowEdit`)
206
+
207
+ Enable Edit and Create tools to allow AI agents to modify files directly. This feature is disabled by default for security and requires explicit opt-in.
208
+
209
+ ```yaml
210
+ steps:
211
+ auto-fix-security:
212
+ type: ai
213
+ prompt: "Fix the security vulnerabilities found in the code"
214
+ ai:
215
+ provider: anthropic
216
+ model: claude-3-opus
217
+ allowEdit: true # Enable Edit and Create tools
218
+
219
+ read-only-review:
220
+ type: ai
221
+ prompt: "Review code for security issues"
222
+ ai:
223
+ provider: google
224
+ allowEdit: false # Disable editing (default)
225
+ ```
226
+
227
+ **When to enable editing:**
228
+ - Automated fix workflows where the AI should apply changes
229
+ - Code refactoring tasks
230
+ - Auto-formatting or style correction
231
+ - When working in a sandboxed or test environment
232
+
233
+ **When to disable editing:**
234
+ - Review-only workflows (default behavior)
235
+ - Production environments without proper safeguards
236
+ - When you want to review suggested changes before applying them
237
+
238
+ **Security Note:** Edit tools respect existing `allowedFolders` configuration and perform exact string matching to prevent unintended modifications. Always review changes before merging.
239
+
240
+ #### Tool Filtering (`allowedTools`, `disableTools`)
241
+
242
+ Control which tools the AI agent can access during execution. This feature supports three filtering modes for fine-grained control over agent capabilities.
243
+
244
+ **Filtering Modes:**
245
+
246
+ 1. **Allow All Tools (default)**: No filtering applied, agent has access to all available tools
247
+ 2. **Whitelist Mode**: Specify exact tools the agent can use (e.g., `['Read', 'Grep']`)
248
+ 3. **Exclusion Mode**: Block specific tools using `!` prefix (e.g., `['!Edit', '!Write']`)
249
+ 4. **Raw AI Mode**: Disable all tools for pure conversational interactions
250
+
251
+ ```yaml
252
+ steps:
253
+ # Whitelist specific tools only
254
+ restricted-analysis:
255
+ type: ai
256
+ prompt: "Analyze the codebase structure"
257
+ ai:
258
+ provider: anthropic
259
+ allowedTools: ['Read', 'Grep', 'Glob'] # Only these tools allowed
260
+
261
+ # Exclude specific tools
262
+ safe-review:
263
+ type: ai
264
+ prompt: "Review code without making changes"
265
+ ai:
266
+ provider: google
267
+ allowedTools: ['!Edit', '!Write', '!Delete'] # Block modification tools
268
+
269
+ # Raw AI mode - no tools
270
+ conversational:
271
+ type: ai
272
+ prompt: "Explain the architecture"
273
+ ai:
274
+ provider: openai
275
+ disableTools: true # Pure conversation, no tool access
276
+
277
+ # Alternative raw AI mode
278
+ conversational-alt:
279
+ type: ai
280
+ prompt: "Explain the architecture"
281
+ ai:
282
+ provider: anthropic
283
+ allowedTools: [] # Empty array also disables all tools
284
+ ```
285
+
286
+ **MCP Tool Filtering:**
287
+
288
+ Filter external Model Context Protocol tools using the `mcp__` prefix pattern:
289
+
290
+ ```yaml
291
+ steps:
292
+ mcp-filtered:
293
+ type: ai
294
+ prompt: "Search the codebase"
295
+ ai:
296
+ provider: anthropic
297
+ allowedTools: ['mcp__code-search__*'] # Allow all code-search MCP tools
298
+ mcpServers:
299
+ code-search:
300
+ command: "npx"
301
+ args: ["-y", "@modelcontextprotocol/server-code-search"]
302
+ ```
303
+
304
+ **When to use tool filtering:**
305
+ - Restrict agent capabilities for security-sensitive tasks
306
+ - Prevent unintended file modifications
307
+ - Create specialized agents with limited toolsets
308
+ - Testing and debugging specific tool interactions
309
+ - Compliance requirements that limit agent autonomy
310
+
311
+ **Security Note:** Tool filtering is enforced at runtime through system message filtering. Always combine with other security measures like `allowedFolders` for defense in depth.
312
+
313
+ #### Task Delegation (`enableDelegate`)
314
+
315
+ Enable the delegate tool to allow AI agents to break down complex tasks and distribute them to specialized subagents for parallel processing. This feature is available when using Probe as the AI provider (Google Gemini, Anthropic Claude, OpenAI GPT, AWS Bedrock).
316
+
317
+ ```yaml
318
+ steps:
319
+ comprehensive-security-audit:
320
+ type: ai
321
+ prompt: |
322
+ Perform a comprehensive security audit including:
323
+ - SQL injection vulnerabilities
324
+ - XSS attack vectors
325
+ - Authentication bypass risks
326
+ - Authorization flaws
327
+ - Cryptographic weaknesses
328
+ ai:
329
+ provider: anthropic
330
+ model: claude-3-opus
331
+ enableDelegate: true # Enable task delegation to subagents
332
+
333
+ focused-sql-injection-check:
334
+ type: ai
335
+ prompt: "Check for SQL injection vulnerabilities"
336
+ ai:
337
+ provider: google
338
+ enableDelegate: false # Disable delegation for focused check
339
+ ```
340
+
341
+ **When to enable delegation:**
342
+ - Complex multi-step analysis requiring different expertise areas (e.g., security + performance + architecture)
343
+ - Large codebases where parallel processing speeds up review
344
+ - Comprehensive audits that benefit from specialized subagents
345
+
346
+ **When to disable delegation:**
347
+ - Simple, focused checks (e.g., "check for SQL injection")
348
+ - Time-sensitive reviews where speed is critical
349
+ - Resource-constrained environments
350
+ - Default behavior (delegation is disabled by default)
351
+
352
+ **Note:** Task delegation increases execution time and token usage, but can provide more thorough analysis for complex tasks.
353
+
354
+ #### Bash Command Execution (`allowBash` / `bashConfig`)
355
+
356
+ Enable secure bash command execution for AI agents to run read-only commands and analyze system state. This feature is disabled by default for security and requires explicit opt-in.
357
+
358
+ **Simple Configuration:**
359
+
360
+ Use `allowBash: true` for basic bash command execution with default safe commands:
361
+
362
+ ```yaml
363
+ steps:
364
+ # Simple: Enable bash with default safe commands
365
+ git-status-analysis:
366
+ type: ai
367
+ prompt: "Analyze the project structure and git status"
368
+ ai:
369
+ provider: anthropic
370
+ model: claude-3-opus
371
+ allowBash: true # Simple one-line enable
372
+ ```
373
+
374
+ **Advanced Configuration:**
375
+
376
+ Use `bashConfig` for fine-grained control over bash command execution:
377
+
378
+ ```yaml
379
+ steps:
380
+ # Advanced: Custom allow/deny lists
381
+ custom-bash-config:
382
+ type: ai
383
+ prompt: "Run custom analysis commands"
384
+ ai:
385
+ provider: google
386
+ allowBash: true # Enable bash execution
387
+ bashConfig:
388
+ allow: ['npm test', 'npm run lint'] # Additional allowed commands
389
+ deny: ['npm install'] # Additional blocked commands
390
+ timeout: 30000 # 30 second timeout per command
391
+ workingDirectory: './src' # Default working directory
392
+
393
+ # Advanced: Disable default filters (expert mode)
394
+ advanced-bash:
395
+ type: ai
396
+ prompt: "Run advanced system commands"
397
+ ai:
398
+ provider: anthropic
399
+ allowBash: true
400
+ bashConfig:
401
+ noDefaultAllow: true # Disable default safe command list
402
+ noDefaultDeny: false # Keep default dangerous command blocklist
403
+ allow: ['specific-command-1', 'specific-command-2']
404
+ ```
405
+
406
+ **Configuration Options:**
407
+
408
+ - **`allowBash`** (boolean): Simple toggle to enable bash command execution. Default: `false`
409
+ - **`allow`** (string[]): Additional permitted command patterns (e.g., `['ls', 'git status']`)
410
+ - **`deny`** (string[]): Additional blocked command patterns (e.g., `['rm -rf', 'sudo']`)
411
+ - **`noDefaultAllow`** (boolean): Disable default safe command list (~235 commands). Default: `false`
412
+ - **`noDefaultDeny`** (boolean): Disable default dangerous command blocklist (~191 patterns). Default: `false`
413
+ - **`timeout`** (number): Execution timeout in milliseconds. Default: varies by ProbeAgent
414
+ - **`workingDirectory`** (string): Base directory for command execution
415
+
416
+ **Default Security:**
417
+
418
+ ProbeAgent includes comprehensive security by default:
419
+ - **Safe Commands** (~235): Read-only operations like `ls`, `cat`, `git status`, `npm list`, `grep`
420
+ - **Blocked Commands** (~191): Dangerous operations like `rm -rf`, `sudo`, `npm install`, `curl`, system modifications
421
+
422
+ **When to enable bash commands:**
423
+ - System state analysis (git status, file listings, environment info)
424
+ - Running read-only diagnostic commands
425
+ - Executing test suites or linters
426
+ - Analyzing build outputs or logs
427
+
428
+ **When to keep bash disabled (default):**
429
+ - Security-sensitive environments
430
+ - Untrusted AI prompts or inputs
431
+ - Code review without system access needs
432
+ - Compliance requirements that prohibit command execution
433
+
434
+ **Security Best Practices:**
435
+ 1. Always use the default allow/deny lists unless you have specific requirements
436
+ 2. Set reasonable timeouts to prevent long-running commands
437
+ 3. Use `workingDirectory` to restrict command execution scope
438
+ 4. Audit command patterns in your allow list regularly
439
+ 5. Test configuration in a safe environment first
440
+ 6. Review AI-generated commands before enabling in production
441
+
442
+ **Example: Git Status Analysis**
443
+
444
+ ```yaml
445
+ steps:
446
+ git-status-review:
447
+ type: ai
448
+ prompt: |
449
+ Analyze the current git status and provide insights:
450
+ - Check for uncommitted changes
451
+ - Review branch state
452
+ - Identify any potential issues
453
+ ai:
454
+ provider: anthropic
455
+ allowBash: true # Simple enable
456
+ bashConfig:
457
+ allow: ['git log --oneline'] # Add custom git command
458
+ workingDirectory: '.'
459
+ ```
460
+
461
+ **Security Note:** Bash command execution respects existing security boundaries and permissions. Commands run with the same privileges as the Visor process. Always review and test bash configurations before deploying to production environments.
462
+
463
+ ### Fallback Behavior
464
+
465
+ If no key is configured, Visor falls back to fast, heuristic checks (simple patterns, basic style/perf). For best results, set a provider.
466
+
467
+ ### MCP (Tools) Support
468
+ See docs/mcp.md for adding MCP servers (Probe, Jira, Filesystem, etc.).