@probelabs/visor 0.1.128 → 0.1.130-ee

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 (302) hide show
  1. package/README.md +54 -1
  2. package/defaults/.visor.yaml +420 -0
  3. package/dist/ai-review-service.d.ts.map +1 -1
  4. package/dist/cli-main.d.ts.map +1 -1
  5. package/dist/config.d.ts +8 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/daemon.js +19 -0
  8. package/dist/defaults/.visor.yaml +420 -0
  9. package/dist/docs/author-permissions.md +20 -0
  10. package/dist/docs/debugging.md +133 -0
  11. package/dist/docs/dev-playbook.md +10 -0
  12. package/dist/docs/enterprise-policy.md +1325 -0
  13. package/dist/docs/index.md +11 -0
  14. package/dist/docs/scheduler-storage.md +433 -0
  15. package/dist/docs/scheduler.md +513 -0
  16. package/dist/docs/slack-integration.md +21 -0
  17. package/dist/docs/workflow-creation-guide.md +39 -0
  18. package/dist/enterprise/license/validator.d.ts +39 -0
  19. package/dist/enterprise/license/validator.d.ts.map +1 -0
  20. package/dist/enterprise/loader.d.ts +25 -0
  21. package/dist/enterprise/loader.d.ts.map +1 -0
  22. package/dist/enterprise/policy/opa-compiler.d.ts +37 -0
  23. package/dist/enterprise/policy/opa-compiler.d.ts.map +1 -0
  24. package/dist/enterprise/policy/opa-http-evaluator.d.ts +36 -0
  25. package/dist/enterprise/policy/opa-http-evaluator.d.ts.map +1 -0
  26. package/dist/enterprise/policy/opa-policy-engine.d.ts +48 -0
  27. package/dist/enterprise/policy/opa-policy-engine.d.ts.map +1 -0
  28. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts +34 -0
  29. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts.map +1 -0
  30. package/dist/enterprise/policy/policy-input-builder.d.ts +120 -0
  31. package/dist/enterprise/policy/policy-input-builder.d.ts.map +1 -0
  32. package/dist/enterprise/scheduler/knex-store.d.ts +41 -0
  33. package/dist/enterprise/scheduler/knex-store.d.ts.map +1 -0
  34. package/dist/examples/README.md +53 -0
  35. package/dist/examples/calculator-config.yaml +4 -4
  36. package/dist/examples/enterprise-policy/README.md +344 -0
  37. package/dist/examples/enterprise-policy/policies/capability_resolve.rego +29 -0
  38. package/dist/examples/enterprise-policy/policies/capability_resolve_test.rego +230 -0
  39. package/dist/examples/enterprise-policy/policies/check_execute.rego +71 -0
  40. package/dist/examples/enterprise-policy/policies/check_execute_test.rego +321 -0
  41. package/dist/examples/enterprise-policy/policies/deploy_production.rego +33 -0
  42. package/dist/examples/enterprise-policy/policies/deploy_production_test.rego +29 -0
  43. package/dist/examples/enterprise-policy/policies/slack_channel_gate.rego +17 -0
  44. package/dist/examples/enterprise-policy/policies/slack_tool_restrict.rego +16 -0
  45. package/dist/examples/enterprise-policy/policies/tool_invoke.rego +24 -0
  46. package/dist/examples/enterprise-policy/policies/tool_invoke_test.rego +227 -0
  47. package/dist/examples/enterprise-policy/visor.yaml +64 -0
  48. package/dist/examples/sandbox-basic.yaml +18 -0
  49. package/dist/examples/sandbox-cache.yaml +32 -0
  50. package/dist/examples/sandbox-dockerfile-inline.yaml +22 -0
  51. package/dist/examples/sandbox-env-passthrough.yaml +26 -0
  52. package/dist/examples/sandbox-multi-env.yaml +27 -0
  53. package/dist/examples/sandbox-read-only.yaml +33 -0
  54. package/dist/examples/scheduler-example.yaml +118 -0
  55. package/dist/failure-condition-evaluator.d.ts +18 -0
  56. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  57. package/dist/frontends/host.d.ts.map +1 -1
  58. package/dist/frontends/slack-frontend.d.ts +1 -0
  59. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  60. package/dist/generated/config-schema.d.ts +320 -6
  61. package/dist/generated/config-schema.d.ts.map +1 -1
  62. package/dist/index.js +15893 -1724
  63. package/dist/liquid-extensions.d.ts.map +1 -1
  64. package/dist/mcp-server.d.ts +8 -8
  65. package/dist/policy/default-engine.d.ts +17 -0
  66. package/dist/policy/default-engine.d.ts.map +1 -0
  67. package/dist/policy/index.d.ts +4 -0
  68. package/dist/policy/index.d.ts.map +1 -0
  69. package/dist/policy/policy-check-command.d.ts +65 -0
  70. package/dist/policy/policy-check-command.d.ts.map +1 -0
  71. package/dist/policy/types.d.ts +81 -0
  72. package/dist/policy/types.d.ts.map +1 -0
  73. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  74. package/dist/providers/check-provider.interface.d.ts +7 -0
  75. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  76. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  77. package/dist/providers/log-check-provider.d.ts.map +1 -1
  78. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  79. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  80. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  81. package/dist/sandbox/cache-volume-manager.d.ts +48 -0
  82. package/dist/sandbox/cache-volume-manager.d.ts.map +1 -0
  83. package/dist/sandbox/check-runner.d.ts +25 -0
  84. package/dist/sandbox/check-runner.d.ts.map +1 -0
  85. package/dist/sandbox/docker-compose-sandbox.d.ts +25 -0
  86. package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -0
  87. package/dist/sandbox/docker-image-sandbox.d.ts +32 -0
  88. package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -0
  89. package/dist/sandbox/env-filter.d.ts +19 -0
  90. package/dist/sandbox/env-filter.d.ts.map +1 -0
  91. package/dist/sandbox/index.d.ts +9 -0
  92. package/dist/sandbox/index.d.ts.map +1 -0
  93. package/dist/sandbox/sandbox-manager.d.ts +39 -0
  94. package/dist/sandbox/sandbox-manager.d.ts.map +1 -0
  95. package/dist/sandbox/sandbox-telemetry.d.ts +9 -0
  96. package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -0
  97. package/dist/sandbox/trace-ingester.d.ts +19 -0
  98. package/dist/sandbox/trace-ingester.d.ts.map +1 -0
  99. package/dist/sandbox/types.d.ts +149 -0
  100. package/dist/sandbox/types.d.ts.map +1 -0
  101. package/dist/scheduler/cli-handler.d.ts +6 -0
  102. package/dist/scheduler/cli-handler.d.ts.map +1 -0
  103. package/dist/scheduler/index.d.ts +16 -0
  104. package/dist/scheduler/index.d.ts.map +1 -0
  105. package/dist/scheduler/schedule-parser.d.ts +34 -0
  106. package/dist/scheduler/schedule-parser.d.ts.map +1 -0
  107. package/dist/scheduler/schedule-store.d.ts +156 -0
  108. package/dist/scheduler/schedule-store.d.ts.map +1 -0
  109. package/dist/scheduler/schedule-tool.d.ts +137 -0
  110. package/dist/scheduler/schedule-tool.d.ts.map +1 -0
  111. package/dist/scheduler/scheduler.d.ts +216 -0
  112. package/dist/scheduler/scheduler.d.ts.map +1 -0
  113. package/dist/scheduler/store/index.d.ts +7 -0
  114. package/dist/scheduler/store/index.d.ts.map +1 -0
  115. package/dist/scheduler/store/json-migrator.d.ts +10 -0
  116. package/dist/scheduler/store/json-migrator.d.ts.map +1 -0
  117. package/dist/scheduler/store/sqlite-store.d.ts +32 -0
  118. package/dist/scheduler/store/sqlite-store.d.ts.map +1 -0
  119. package/dist/scheduler/store/types.d.ts +127 -0
  120. package/dist/scheduler/store/types.d.ts.map +1 -0
  121. package/dist/sdk/check-provider-registry-PANIXYRB.mjs +28 -0
  122. package/dist/sdk/check-provider-registry-S7DKTEM6.mjs +28 -0
  123. package/dist/sdk/{chunk-N7IVCCGH.mjs → chunk-DIND4ZCV.mjs} +2 -2
  124. package/dist/sdk/{chunk-SIMCSNXO.mjs → chunk-GEW6LS32.mjs} +2 -2
  125. package/dist/sdk/chunk-H5BOW5CR.mjs +91 -0
  126. package/dist/sdk/chunk-H5BOW5CR.mjs.map +1 -0
  127. package/dist/sdk/{chunk-UKG5UP5U.mjs → chunk-HOKQOO3G.mjs} +12 -7
  128. package/dist/sdk/chunk-HOKQOO3G.mjs.map +1 -0
  129. package/dist/sdk/{chunk-YCUWMIV5.mjs → chunk-JL7JXCET.mjs} +2 -2
  130. package/dist/sdk/{chunk-QRXSDDYN.mjs → chunk-LG4AUKHB.mjs} +2 -2
  131. package/dist/sdk/{chunk-UPKHRMUA.mjs → chunk-S6CD7GFM.mjs} +33449 -28837
  132. package/dist/sdk/chunk-S6CD7GFM.mjs.map +1 -0
  133. package/dist/sdk/{chunk-P6YFV6N2.mjs → chunk-SZXICFQ3.mjs} +2 -2
  134. package/dist/sdk/{chunk-V7RIRPO7.mjs → chunk-TQ4D3YOF.mjs} +33449 -28837
  135. package/dist/sdk/chunk-TQ4D3YOF.mjs.map +1 -0
  136. package/dist/sdk/{chunk-4HVFUUNB.mjs → chunk-UCMJJ3IM.mjs} +84 -3
  137. package/dist/sdk/{chunk-4HVFUUNB.mjs.map → chunk-UCMJJ3IM.mjs.map} +1 -1
  138. package/dist/sdk/{chunk-D55IQCUP.mjs → chunk-UCNT3PDT.mjs} +677 -12
  139. package/dist/sdk/chunk-UCNT3PDT.mjs.map +1 -0
  140. package/dist/sdk/{chunk-LMJSJQPP.mjs → chunk-V2IV3ILA.mjs} +8 -6
  141. package/dist/sdk/chunk-V2IV3ILA.mjs.map +1 -0
  142. package/dist/sdk/{chunk-EJN6Q4D3.mjs → chunk-VF6XIUE4.mjs} +6 -4
  143. package/dist/sdk/{chunk-EJN6Q4D3.mjs.map → chunk-VF6XIUE4.mjs.map} +1 -1
  144. package/dist/sdk/{chunk-VEROLBCD.mjs → chunk-VMLORODQ.mjs} +108 -21
  145. package/dist/sdk/chunk-VMLORODQ.mjs.map +1 -0
  146. package/dist/sdk/{chunk-UEWXVJ6C.mjs → chunk-VPC3QSPW.mjs} +2 -2
  147. package/dist/sdk/{chunk-WVNQ56DO.mjs → chunk-YJRBN3XS.mjs} +13 -2
  148. package/dist/sdk/{chunk-WVNQ56DO.mjs.map → chunk-YJRBN3XS.mjs.map} +1 -1
  149. package/dist/sdk/{command-executor-C4DGIQ4Q.mjs → command-executor-TOYBBE7S.mjs} +4 -4
  150. package/dist/sdk/{config-GYTBTHRZ.mjs → config-OGOS4ZU4.mjs} +5 -5
  151. package/dist/sdk/event-bus-5K3Y2FCS.mjs +43 -0
  152. package/dist/sdk/{event-bus-XV2TOQFU.mjs.map → event-bus-5K3Y2FCS.mjs.map} +1 -1
  153. package/dist/sdk/failure-condition-evaluator-HC3M5377.mjs +17 -0
  154. package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs +471 -0
  155. package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs.map +1 -0
  156. package/dist/sdk/{github-frontend-UC326PMS.mjs → github-frontend-E2KJSC3Y.mjs} +517 -585
  157. package/dist/sdk/github-frontend-E2KJSC3Y.mjs.map +1 -0
  158. package/dist/sdk/host-EE6EJ2FM.mjs +63 -0
  159. package/dist/sdk/host-EE6EJ2FM.mjs.map +1 -0
  160. package/dist/sdk/host-OUSD2OIQ.mjs +63 -0
  161. package/dist/sdk/host-OUSD2OIQ.mjs.map +1 -0
  162. package/dist/sdk/knex-store-HPXJILBL.mjs +411 -0
  163. package/dist/sdk/knex-store-HPXJILBL.mjs.map +1 -0
  164. package/dist/sdk/lazy-otel-5NH4ZJJM.mjs +24 -0
  165. package/dist/sdk/{liquid-extensions-WJAC7QKG.mjs → liquid-extensions-E4EUOCES.mjs} +6 -6
  166. package/dist/sdk/loader-ID5LMXOW.mjs +89 -0
  167. package/dist/sdk/loader-ID5LMXOW.mjs.map +1 -0
  168. package/dist/sdk/memory-store-AAPL2MTE.mjs +12 -0
  169. package/dist/sdk/{metrics-CSBGJEWW.mjs → metrics-I6A7IHG4.mjs} +3 -3
  170. package/dist/sdk/ndjson-sink-FD2PSXGD.mjs +52 -0
  171. package/dist/sdk/{ndjson-sink-JQ2INHTS.mjs.map → ndjson-sink-FD2PSXGD.mjs.map} +1 -1
  172. package/dist/sdk/opa-policy-engine-UUPFN5CL.mjs +655 -0
  173. package/dist/sdk/opa-policy-engine-UUPFN5CL.mjs.map +1 -0
  174. package/dist/sdk/{prompt-state-X2WDGSEM.mjs → prompt-state-VAKKC773.mjs} +4 -4
  175. package/dist/sdk/{renderer-schema-FRCLA6KH.mjs → renderer-schema-HXEW6BRJ.mjs} +3 -3
  176. package/dist/sdk/routing-OZQWAGAI.mjs +25 -0
  177. package/dist/sdk/schedule-tool-handler-B7TMSG6A.mjs +38 -0
  178. package/dist/sdk/schedule-tool-handler-EBNKDUJC.mjs +38 -0
  179. package/dist/sdk/sdk.d.mts +284 -4
  180. package/dist/sdk/sdk.d.ts +284 -4
  181. package/dist/sdk/sdk.js +8247 -2417
  182. package/dist/sdk/sdk.js.map +1 -1
  183. package/dist/sdk/sdk.mjs +20 -1348
  184. package/dist/sdk/sdk.mjs.map +1 -1
  185. package/dist/sdk/slack-frontend-LAY45IBR.mjs +989 -0
  186. package/dist/sdk/slack-frontend-LAY45IBR.mjs.map +1 -0
  187. package/dist/sdk/{trace-helpers-LUCR52GY.mjs → trace-helpers-PP3YHTAM.mjs} +3 -3
  188. package/dist/sdk/tui-frontend-T56PZB67.mjs +290 -0
  189. package/dist/sdk/tui-frontend-T56PZB67.mjs.map +1 -0
  190. package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
  191. package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
  192. package/dist/sdk/workflow-check-provider-E7YPEZ45.mjs +28 -0
  193. package/dist/sdk/workflow-check-provider-E7YPEZ45.mjs.map +1 -0
  194. package/dist/sdk/workflow-check-provider-HB4XTD4Z.mjs +28 -0
  195. package/dist/sdk/workflow-check-provider-HB4XTD4Z.mjs.map +1 -0
  196. package/dist/sdk/workflow-registry-AAD37XKZ.mjs +12 -0
  197. package/dist/sdk/workflow-registry-AAD37XKZ.mjs.map +1 -0
  198. package/dist/slack/client.d.ts +40 -0
  199. package/dist/slack/client.d.ts.map +1 -1
  200. package/dist/slack/schedule-tool-handler.d.ts +46 -0
  201. package/dist/slack/schedule-tool-handler.d.ts.map +1 -0
  202. package/dist/slack/slack-output-adapter.d.ts +44 -0
  203. package/dist/slack/slack-output-adapter.d.ts.map +1 -0
  204. package/dist/slack/socket-runner.d.ts +22 -0
  205. package/dist/slack/socket-runner.d.ts.map +1 -1
  206. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  207. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
  208. package/dist/state-machine/dispatch/policy-gate.d.ts +28 -0
  209. package/dist/state-machine/dispatch/policy-gate.d.ts.map +1 -0
  210. package/dist/state-machine/dispatch/sandbox-routing.d.ts +21 -0
  211. package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -0
  212. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  213. package/dist/state-machine/states/routing.d.ts.map +1 -1
  214. package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
  215. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  216. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  217. package/dist/test-runner/index.d.ts.map +1 -1
  218. package/dist/test-runner/validator.d.ts.map +1 -1
  219. package/dist/tui/chat-runner.d.ts +39 -0
  220. package/dist/tui/chat-runner.d.ts.map +1 -0
  221. package/dist/tui/chat-state.d.ts +57 -0
  222. package/dist/tui/chat-state.d.ts.map +1 -0
  223. package/dist/tui/chat-tui.d.ts +70 -0
  224. package/dist/tui/chat-tui.d.ts.map +1 -0
  225. package/dist/tui/components/chat-box.d.ts +42 -0
  226. package/dist/tui/components/chat-box.d.ts.map +1 -0
  227. package/dist/tui/components/input-bar.d.ts +67 -0
  228. package/dist/tui/components/input-bar.d.ts.map +1 -0
  229. package/dist/tui/components/status-bar.d.ts +34 -0
  230. package/dist/tui/components/status-bar.d.ts.map +1 -0
  231. package/dist/tui/components/trace-viewer.d.ts +74 -0
  232. package/dist/tui/components/trace-viewer.d.ts.map +1 -0
  233. package/dist/tui/index.d.ts +14 -0
  234. package/dist/tui/index.d.ts.map +1 -0
  235. package/dist/tui/tui-frontend.d.ts +29 -0
  236. package/dist/tui/tui-frontend.d.ts.map +1 -0
  237. package/dist/types/bot.d.ts +35 -0
  238. package/dist/types/bot.d.ts.map +1 -1
  239. package/dist/types/config.d.ts +197 -2
  240. package/dist/types/config.d.ts.map +1 -1
  241. package/dist/types/engine.d.ts +8 -0
  242. package/dist/types/engine.d.ts.map +1 -1
  243. package/dist/types/execution.d.ts +1 -1
  244. package/dist/types/execution.d.ts.map +1 -1
  245. package/dist/utils/sandbox.d.ts.map +1 -1
  246. package/package.json +17 -5
  247. package/dist/docs/NPM_USAGE.md +0 -281
  248. package/dist/generated/config-schema.json +0 -2209
  249. package/dist/output/traces/run-2026-02-05T13-36-03-279Z.ndjson +0 -138
  250. package/dist/output/traces/run-2026-02-05T13-36-48-767Z.ndjson +0 -1137
  251. package/dist/output/traces/run-2026-02-05T13-36-58-960Z.ndjson +0 -17
  252. package/dist/output/traces/run-2026-02-05T13-37-00-184Z.ndjson +0 -205
  253. package/dist/sdk/check-provider-registry-OB5FEBJU.mjs +0 -28
  254. package/dist/sdk/check-provider-registry-UC2LPSB4.mjs +0 -28
  255. package/dist/sdk/chunk-D55IQCUP.mjs.map +0 -1
  256. package/dist/sdk/chunk-LMJSJQPP.mjs.map +0 -1
  257. package/dist/sdk/chunk-UKG5UP5U.mjs.map +0 -1
  258. package/dist/sdk/chunk-UPKHRMUA.mjs.map +0 -1
  259. package/dist/sdk/chunk-V7RIRPO7.mjs.map +0 -1
  260. package/dist/sdk/chunk-VEROLBCD.mjs.map +0 -1
  261. package/dist/sdk/event-bus-XV2TOQFU.mjs +0 -35
  262. package/dist/sdk/failure-condition-evaluator-KRFY4OLQ.mjs +0 -17
  263. package/dist/sdk/git-repository-analyzer-VO7OZMTM.mjs +0 -458
  264. package/dist/sdk/git-repository-analyzer-VO7OZMTM.mjs.map +0 -1
  265. package/dist/sdk/github-frontend-UC326PMS.mjs.map +0 -1
  266. package/dist/sdk/host-H7MKML2H.mjs +0 -52
  267. package/dist/sdk/host-H7MKML2H.mjs.map +0 -1
  268. package/dist/sdk/memory-store-LPOZWQ5E.mjs +0 -12
  269. package/dist/sdk/ndjson-sink-JQ2INHTS.mjs +0 -44
  270. package/dist/sdk/routing-745DOEKR.mjs +0 -24
  271. package/dist/sdk/slack-frontend-UPYUYCUQ.mjs +0 -821
  272. package/dist/sdk/slack-frontend-UPYUYCUQ.mjs.map +0 -1
  273. package/dist/sdk/workflow-check-provider-AA3VNYUY.mjs +0 -28
  274. package/dist/sdk/workflow-check-provider-LQNQZUN5.mjs +0 -28
  275. package/dist/sdk/workflow-registry-W7IEH7GK.mjs +0 -12
  276. package/dist/traces/run-2026-02-05T13-36-03-279Z.ndjson +0 -138
  277. package/dist/traces/run-2026-02-05T13-36-48-767Z.ndjson +0 -1137
  278. package/dist/traces/run-2026-02-05T13-36-58-960Z.ndjson +0 -17
  279. package/dist/traces/run-2026-02-05T13-37-00-184Z.ndjson +0 -205
  280. package/dist/tui.d.ts +0 -51
  281. package/dist/tui.d.ts.map +0 -1
  282. /package/dist/sdk/{check-provider-registry-OB5FEBJU.mjs.map → check-provider-registry-PANIXYRB.mjs.map} +0 -0
  283. /package/dist/sdk/{check-provider-registry-UC2LPSB4.mjs.map → check-provider-registry-S7DKTEM6.mjs.map} +0 -0
  284. /package/dist/sdk/{chunk-N7IVCCGH.mjs.map → chunk-DIND4ZCV.mjs.map} +0 -0
  285. /package/dist/sdk/{chunk-SIMCSNXO.mjs.map → chunk-GEW6LS32.mjs.map} +0 -0
  286. /package/dist/sdk/{chunk-YCUWMIV5.mjs.map → chunk-JL7JXCET.mjs.map} +0 -0
  287. /package/dist/sdk/{chunk-QRXSDDYN.mjs.map → chunk-LG4AUKHB.mjs.map} +0 -0
  288. /package/dist/sdk/{chunk-P6YFV6N2.mjs.map → chunk-SZXICFQ3.mjs.map} +0 -0
  289. /package/dist/sdk/{chunk-UEWXVJ6C.mjs.map → chunk-VPC3QSPW.mjs.map} +0 -0
  290. /package/dist/sdk/{command-executor-C4DGIQ4Q.mjs.map → command-executor-TOYBBE7S.mjs.map} +0 -0
  291. /package/dist/sdk/{config-GYTBTHRZ.mjs.map → config-OGOS4ZU4.mjs.map} +0 -0
  292. /package/dist/sdk/{failure-condition-evaluator-KRFY4OLQ.mjs.map → failure-condition-evaluator-HC3M5377.mjs.map} +0 -0
  293. /package/dist/sdk/{liquid-extensions-WJAC7QKG.mjs.map → lazy-otel-5NH4ZJJM.mjs.map} +0 -0
  294. /package/dist/sdk/{memory-store-LPOZWQ5E.mjs.map → liquid-extensions-E4EUOCES.mjs.map} +0 -0
  295. /package/dist/sdk/{metrics-CSBGJEWW.mjs.map → memory-store-AAPL2MTE.mjs.map} +0 -0
  296. /package/dist/sdk/{prompt-state-X2WDGSEM.mjs.map → metrics-I6A7IHG4.mjs.map} +0 -0
  297. /package/dist/sdk/{routing-745DOEKR.mjs.map → prompt-state-VAKKC773.mjs.map} +0 -0
  298. /package/dist/sdk/{renderer-schema-FRCLA6KH.mjs.map → renderer-schema-HXEW6BRJ.mjs.map} +0 -0
  299. /package/dist/sdk/{trace-helpers-LUCR52GY.mjs.map → routing-OZQWAGAI.mjs.map} +0 -0
  300. /package/dist/sdk/{workflow-check-provider-AA3VNYUY.mjs.map → schedule-tool-handler-B7TMSG6A.mjs.map} +0 -0
  301. /package/dist/sdk/{workflow-check-provider-LQNQZUN5.mjs.map → schedule-tool-handler-EBNKDUJC.mjs.map} +0 -0
  302. /package/dist/sdk/{workflow-registry-W7IEH7GK.mjs.map → trace-helpers-PP3YHTAM.mjs.map} +0 -0
@@ -116,6 +116,7 @@ The test framework allows you to write integration tests for your Visor workflow
116
116
  |----------|-------------|
117
117
  | [GitHub Checks](./GITHUB_CHECKS.md) | GitHub Checks API integration for PR status reporting |
118
118
  | [Slack Integration](./slack-integration.md) | Bidirectional Slack integration via Socket Mode |
119
+ | [Scheduler](./scheduler.md) | Schedule workflows and reminders to run at specified times |
119
120
  | [Deployment](./DEPLOYMENT.md) | Cloudflare Pages deployment for landing page |
120
121
 
121
122
  ---
@@ -134,6 +135,16 @@ The test framework allows you to write integration tests for your Visor workflow
134
135
 
135
136
  ---
136
137
 
138
+ ## Enterprise Edition
139
+
140
+ > Enterprise features require a Visor EE license. Contact **hello@probelabs.com** for licensing.
141
+
142
+ | Document | Description |
143
+ |----------|-------------|
144
+ | [Enterprise Policy Engine (OPA)](./enterprise-policy.md) | Comprehensive guide to the OPA-based policy engine: installation, licensing, Rego policies, configuration, and troubleshooting |
145
+
146
+ ---
147
+
137
148
  ## Guides
138
149
 
139
150
  Best practices and style guides for writing maintainable workflows.
@@ -0,0 +1,433 @@
1
+ # Scheduler Storage
2
+
3
+ This guide covers database storage configuration for the Visor scheduler, including cloud database setup, SSL/TLS, connection pooling, and high-availability deployments.
4
+
5
+ ## Overview
6
+
7
+ The scheduler supports four storage drivers:
8
+
9
+ | Driver | License | Use Case |
10
+ |--------|---------|----------|
11
+ | `sqlite` | OSS (free) | Single-node, local development, small deployments |
12
+ | `postgresql` | Enterprise | Production, multi-node HA, cloud databases |
13
+ | `mysql` | Enterprise | Production, multi-node HA, cloud databases |
14
+ | `mssql` | Enterprise | Azure SQL, SQL Server environments |
15
+
16
+ ## SQLite (Default)
17
+
18
+ Zero-configuration — works out of the box:
19
+
20
+ ```yaml
21
+ scheduler:
22
+ enabled: true
23
+ storage:
24
+ driver: sqlite
25
+ connection:
26
+ filename: .visor/schedules.db # default
27
+ ```
28
+
29
+ SQLite is the default when no driver is specified. It stores data in a local file and supports all scheduler features except distributed locking (HA mode).
30
+
31
+ ## PostgreSQL
32
+
33
+ ```yaml
34
+ scheduler:
35
+ storage:
36
+ driver: postgresql
37
+ connection:
38
+ host: localhost
39
+ port: 5432
40
+ database: visor
41
+ user: visor
42
+ password: ${VISOR_DB_PASSWORD}
43
+ ssl: true
44
+ ```
45
+
46
+ ## MySQL
47
+
48
+ ```yaml
49
+ scheduler:
50
+ storage:
51
+ driver: mysql
52
+ connection:
53
+ host: localhost
54
+ port: 3306
55
+ database: visor
56
+ user: visor
57
+ password: ${VISOR_DB_PASSWORD}
58
+ ssl: true
59
+ ```
60
+
61
+ ## MSSQL (SQL Server)
62
+
63
+ ```yaml
64
+ scheduler:
65
+ storage:
66
+ driver: mssql
67
+ connection:
68
+ host: localhost
69
+ port: 1433
70
+ database: visor
71
+ user: sa
72
+ password: ${VISOR_DB_PASSWORD}
73
+ ssl:
74
+ reject_unauthorized: true
75
+ ```
76
+
77
+ For MSSQL, `host` is mapped to the tedious driver's `server` parameter internally. SSL configuration maps to `encrypt` and `trustServerCertificate` options.
78
+
79
+ ## Connection String
80
+
81
+ All server drivers support connection string URLs as an alternative to individual parameters:
82
+
83
+ ```yaml
84
+ scheduler:
85
+ storage:
86
+ driver: postgresql
87
+ connection:
88
+ connection_string: postgresql://visor:secret@db.example.com:5432/visor?sslmode=require
89
+ ```
90
+
91
+ ```yaml
92
+ scheduler:
93
+ storage:
94
+ driver: mysql
95
+ connection:
96
+ connection_string: mysql://visor:secret@db.example.com:3306/visor
97
+ ```
98
+
99
+ When `connection_string` is set, `host`, `port`, `database`, `user`, and `password` are ignored.
100
+
101
+ ## SSL/TLS Configuration
102
+
103
+ ### Boolean (simple)
104
+
105
+ ```yaml
106
+ connection:
107
+ host: db.example.com
108
+ ssl: true # enables SSL with rejectUnauthorized: true
109
+ ```
110
+
111
+ ### Object (detailed)
112
+
113
+ ```yaml
114
+ connection:
115
+ host: db.example.com
116
+ ssl:
117
+ enabled: true
118
+ reject_unauthorized: true # default: true
119
+ ca: /path/to/ca-cert.pem # CA certificate
120
+ cert: /path/to/client-cert.pem # client certificate (mTLS)
121
+ key: /path/to/client-key.pem # client key (mTLS)
122
+ ```
123
+
124
+ | Field | Default | Description |
125
+ |-------|---------|-------------|
126
+ | `enabled` | `true` | Enable SSL (when object is provided) |
127
+ | `reject_unauthorized` | `true` | Validate server certificate against CA |
128
+ | `ca` | — | Path to CA certificate PEM file |
129
+ | `cert` | — | Path to client certificate PEM file (for mTLS) |
130
+ | `key` | — | Path to client key PEM file (for mTLS) |
131
+
132
+ Certificate file paths are read at initialization time. This works well with Kubernetes secret mounts, AWS SSM Parameter Store files, and similar mechanisms.
133
+
134
+ ## Connection Pool
135
+
136
+ ```yaml
137
+ connection:
138
+ host: db.example.com
139
+ pool:
140
+ min: 0 # default: 0 (good for serverless)
141
+ max: 10 # default: 10
142
+ ```
143
+
144
+ | Field | Default | Description |
145
+ |-------|---------|-------------|
146
+ | `min` | `0` | Minimum connections to keep open |
147
+ | `max` | `10` | Maximum simultaneous connections |
148
+
149
+ **Serverless tip**: Keep `min: 0` to avoid holding idle connections in Lambda/Cloud Functions. The pool will scale up on demand and release connections when idle.
150
+
151
+ **High-throughput tip**: Increase `max` if you have many concurrent schedule executions. Each execution may hold a connection during locking and updates.
152
+
153
+ ## Cloud Database Examples
154
+
155
+ ### AWS RDS PostgreSQL
156
+
157
+ ```yaml
158
+ scheduler:
159
+ storage:
160
+ driver: postgresql
161
+ connection:
162
+ host: mydb.abc123.us-east-1.rds.amazonaws.com
163
+ port: 5432
164
+ database: visor
165
+ user: visor
166
+ password: ${RDS_PASSWORD}
167
+ ssl:
168
+ reject_unauthorized: true
169
+ ca: /etc/ssl/certs/rds-combined-ca-bundle.pem
170
+ pool:
171
+ min: 0
172
+ max: 10
173
+ ```
174
+
175
+ Download the [RDS CA bundle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) and mount it in your container or EC2 instance.
176
+
177
+ ### AWS RDS MySQL
178
+
179
+ ```yaml
180
+ scheduler:
181
+ storage:
182
+ driver: mysql
183
+ connection:
184
+ host: mydb.abc123.us-east-1.rds.amazonaws.com
185
+ port: 3306
186
+ database: visor
187
+ user: visor
188
+ password: ${RDS_PASSWORD}
189
+ ssl:
190
+ reject_unauthorized: true
191
+ ca: /etc/ssl/certs/rds-combined-ca-bundle.pem
192
+ ```
193
+
194
+ ### AWS Aurora PostgreSQL
195
+
196
+ ```yaml
197
+ scheduler:
198
+ storage:
199
+ driver: postgresql
200
+ connection:
201
+ host: mycluster.cluster-abc123.us-east-1.rds.amazonaws.com
202
+ port: 5432
203
+ database: visor
204
+ user: visor
205
+ password: ${AURORA_PASSWORD}
206
+ ssl:
207
+ reject_unauthorized: true
208
+ ca: /etc/ssl/certs/rds-combined-ca-bundle.pem
209
+ pool:
210
+ min: 0
211
+ max: 10
212
+ ```
213
+
214
+ Use the **cluster endpoint** (writer) for the scheduler. Aurora uses the same CA bundle as RDS.
215
+
216
+ ### AWS Aurora MySQL
217
+
218
+ ```yaml
219
+ scheduler:
220
+ storage:
221
+ driver: mysql
222
+ connection:
223
+ host: mycluster.cluster-abc123.us-east-1.rds.amazonaws.com
224
+ port: 3306
225
+ database: visor
226
+ user: visor
227
+ password: ${AURORA_PASSWORD}
228
+ ssl:
229
+ reject_unauthorized: true
230
+ ca: /etc/ssl/certs/rds-combined-ca-bundle.pem
231
+ ```
232
+
233
+ ### Azure Database for PostgreSQL
234
+
235
+ ```yaml
236
+ scheduler:
237
+ storage:
238
+ driver: postgresql
239
+ connection:
240
+ host: myserver.postgres.database.azure.com
241
+ port: 5432
242
+ database: visor
243
+ user: visor@myserver
244
+ password: ${AZURE_DB_PASSWORD}
245
+ ssl:
246
+ reject_unauthorized: true
247
+ ca: /etc/ssl/certs/DigiCertGlobalRootCA.crt.pem
248
+ ```
249
+
250
+ Azure PostgreSQL requires the username in `user@servername` format. Download the [DigiCert Global Root CA](https://learn.microsoft.com/en-us/azure/postgresql/single-server/concepts-ssl-connection-security).
251
+
252
+ ### Azure Database for MySQL
253
+
254
+ ```yaml
255
+ scheduler:
256
+ storage:
257
+ driver: mysql
258
+ connection:
259
+ host: myserver.mysql.database.azure.com
260
+ port: 3306
261
+ database: visor
262
+ user: visor@myserver
263
+ password: ${AZURE_DB_PASSWORD}
264
+ ssl:
265
+ reject_unauthorized: true
266
+ ca: /etc/ssl/certs/DigiCertGlobalRootCA.crt.pem
267
+ ```
268
+
269
+ ### Azure SQL Database (MSSQL)
270
+
271
+ ```yaml
272
+ scheduler:
273
+ storage:
274
+ driver: mssql
275
+ connection:
276
+ host: myserver.database.windows.net
277
+ port: 1433
278
+ database: visor
279
+ user: visor
280
+ password: ${AZURE_SQL_PASSWORD}
281
+ ssl:
282
+ reject_unauthorized: true
283
+ ```
284
+
285
+ Azure SQL Database enforces encryption by default. The `ssl.reject_unauthorized: true` setting maps to `trustServerCertificate: false` (i.e., the server certificate is validated).
286
+
287
+ ### Google Cloud SQL PostgreSQL
288
+
289
+ ```yaml
290
+ scheduler:
291
+ storage:
292
+ driver: postgresql
293
+ connection:
294
+ host: /cloudsql/project:region:instance # Unix socket
295
+ database: visor
296
+ user: visor
297
+ password: ${CLOUDSQL_PASSWORD}
298
+ ```
299
+
300
+ When using the [Cloud SQL Auth Proxy](https://cloud.google.com/sql/docs/postgres/connect-auth-proxy), connect via Unix socket (no SSL needed as the proxy handles encryption):
301
+
302
+ ```yaml
303
+ connection:
304
+ host: 127.0.0.1
305
+ port: 5432
306
+ database: visor
307
+ user: visor
308
+ password: ${CLOUDSQL_PASSWORD}
309
+ ```
310
+
311
+ ### Google Cloud SQL MySQL
312
+
313
+ ```yaml
314
+ scheduler:
315
+ storage:
316
+ driver: mysql
317
+ connection:
318
+ host: 127.0.0.1
319
+ port: 3306
320
+ database: visor
321
+ user: visor
322
+ password: ${CLOUDSQL_PASSWORD}
323
+ ```
324
+
325
+ ### Google Cloud SQL - SQL Server
326
+
327
+ ```yaml
328
+ scheduler:
329
+ storage:
330
+ driver: mssql
331
+ connection:
332
+ host: 127.0.0.1
333
+ port: 1433
334
+ database: visor
335
+ user: sqlserver
336
+ password: ${CLOUDSQL_PASSWORD}
337
+ ssl:
338
+ reject_unauthorized: true
339
+ ```
340
+
341
+ ## High Availability
342
+
343
+ For multi-node deployments, enable HA mode with a server database:
344
+
345
+ ```yaml
346
+ scheduler:
347
+ storage:
348
+ driver: postgresql
349
+ connection:
350
+ host: db.example.com
351
+ database: visor
352
+ user: visor
353
+ password: ${DB_PASSWORD}
354
+ ssl: true
355
+ ha:
356
+ enabled: true
357
+ node_id: node-1 # unique per node (default: hostname-pid)
358
+ lock_ttl: 60 # lock expiry in seconds
359
+ heartbeat_interval: 15 # lock renewal interval
360
+ ```
361
+
362
+ HA mode uses row-level distributed locking to ensure each schedule is executed by exactly one node. SQLite does **not** support HA mode — use PostgreSQL, MySQL, or MSSQL.
363
+
364
+ ## Migration from JSON
365
+
366
+ If you previously used JSON file storage (`storage.path: .visor/schedules.json`), the scheduler automatically migrates data to the configured database on first startup. The JSON file is preserved as a backup.
367
+
368
+ ```yaml
369
+ # Legacy config (auto-migrated)
370
+ scheduler:
371
+ storage:
372
+ path: .visor/schedules.json
373
+
374
+ # New config
375
+ scheduler:
376
+ storage:
377
+ driver: sqlite # or postgresql/mysql/mssql
378
+ ```
379
+
380
+ ## Troubleshooting
381
+
382
+ ### Connection Refused
383
+
384
+ ```
385
+ Error: connect ECONNREFUSED 127.0.0.1:5432
386
+ ```
387
+
388
+ - Verify the database server is running and accessible
389
+ - Check host, port, and firewall rules
390
+ - For cloud databases, ensure your IP is whitelisted
391
+
392
+ ### SSL Certificate Error
393
+
394
+ ```
395
+ Error: self signed certificate in certificate chain
396
+ ```
397
+
398
+ - Set the `ca` path to your cloud provider's CA certificate bundle
399
+ - For development with self-signed certs: `ssl.reject_unauthorized: false` (not recommended for production)
400
+
401
+ ### Authentication Failed
402
+
403
+ ```
404
+ Error: password authentication failed for user "visor"
405
+ ```
406
+
407
+ - Verify `user` and `password` are correct
408
+ - For Azure PostgreSQL, use `user@servername` format
409
+ - Check that the user has access to the specified database
410
+
411
+ ### Module Not Found
412
+
413
+ ```
414
+ Error: knex is required for PostgreSQL/MySQL/MSSQL schedule storage
415
+ ```
416
+
417
+ Install the required database driver:
418
+
419
+ ```bash
420
+ npm install knex pg # PostgreSQL
421
+ npm install knex mysql2 # MySQL
422
+ npm install knex tedious # MSSQL
423
+ ```
424
+
425
+ ### Pool Exhaustion
426
+
427
+ ```
428
+ Error: Knex: Timeout acquiring a connection
429
+ ```
430
+
431
+ - Increase `pool.max` in your configuration
432
+ - Check for connection leaks or long-running transactions
433
+ - For serverless, ensure `pool.min: 0` to avoid stale connections