@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.
- package/README.md +54 -1
- package/defaults/.visor.yaml +420 -0
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/daemon.js +19 -0
- package/dist/defaults/.visor.yaml +420 -0
- package/dist/docs/author-permissions.md +20 -0
- package/dist/docs/debugging.md +133 -0
- package/dist/docs/dev-playbook.md +10 -0
- package/dist/docs/enterprise-policy.md +1325 -0
- package/dist/docs/index.md +11 -0
- package/dist/docs/scheduler-storage.md +433 -0
- package/dist/docs/scheduler.md +513 -0
- package/dist/docs/slack-integration.md +21 -0
- package/dist/docs/workflow-creation-guide.md +39 -0
- package/dist/enterprise/license/validator.d.ts +39 -0
- package/dist/enterprise/license/validator.d.ts.map +1 -0
- package/dist/enterprise/loader.d.ts +25 -0
- package/dist/enterprise/loader.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-compiler.d.ts +37 -0
- package/dist/enterprise/policy/opa-compiler.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-http-evaluator.d.ts +36 -0
- package/dist/enterprise/policy/opa-http-evaluator.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-policy-engine.d.ts +48 -0
- package/dist/enterprise/policy/opa-policy-engine.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-wasm-evaluator.d.ts +34 -0
- package/dist/enterprise/policy/opa-wasm-evaluator.d.ts.map +1 -0
- package/dist/enterprise/policy/policy-input-builder.d.ts +120 -0
- package/dist/enterprise/policy/policy-input-builder.d.ts.map +1 -0
- package/dist/enterprise/scheduler/knex-store.d.ts +41 -0
- package/dist/enterprise/scheduler/knex-store.d.ts.map +1 -0
- package/dist/examples/README.md +53 -0
- package/dist/examples/calculator-config.yaml +4 -4
- package/dist/examples/enterprise-policy/README.md +344 -0
- package/dist/examples/enterprise-policy/policies/capability_resolve.rego +29 -0
- package/dist/examples/enterprise-policy/policies/capability_resolve_test.rego +230 -0
- package/dist/examples/enterprise-policy/policies/check_execute.rego +71 -0
- package/dist/examples/enterprise-policy/policies/check_execute_test.rego +321 -0
- package/dist/examples/enterprise-policy/policies/deploy_production.rego +33 -0
- package/dist/examples/enterprise-policy/policies/deploy_production_test.rego +29 -0
- package/dist/examples/enterprise-policy/policies/slack_channel_gate.rego +17 -0
- package/dist/examples/enterprise-policy/policies/slack_tool_restrict.rego +16 -0
- package/dist/examples/enterprise-policy/policies/tool_invoke.rego +24 -0
- package/dist/examples/enterprise-policy/policies/tool_invoke_test.rego +227 -0
- package/dist/examples/enterprise-policy/visor.yaml +64 -0
- package/dist/examples/sandbox-basic.yaml +18 -0
- package/dist/examples/sandbox-cache.yaml +32 -0
- package/dist/examples/sandbox-dockerfile-inline.yaml +22 -0
- package/dist/examples/sandbox-env-passthrough.yaml +26 -0
- package/dist/examples/sandbox-multi-env.yaml +27 -0
- package/dist/examples/sandbox-read-only.yaml +33 -0
- package/dist/examples/scheduler-example.yaml +118 -0
- package/dist/failure-condition-evaluator.d.ts +18 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/frontends/host.d.ts.map +1 -1
- package/dist/frontends/slack-frontend.d.ts +1 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -1
- package/dist/generated/config-schema.d.ts +320 -6
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/index.js +15893 -1724
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/mcp-server.d.ts +8 -8
- package/dist/policy/default-engine.d.ts +17 -0
- package/dist/policy/default-engine.d.ts.map +1 -0
- package/dist/policy/index.d.ts +4 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/policy-check-command.d.ts +65 -0
- package/dist/policy/policy-check-command.d.ts.map +1 -0
- package/dist/policy/types.d.ts +81 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +7 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/sandbox/cache-volume-manager.d.ts +48 -0
- package/dist/sandbox/cache-volume-manager.d.ts.map +1 -0
- package/dist/sandbox/check-runner.d.ts +25 -0
- package/dist/sandbox/check-runner.d.ts.map +1 -0
- package/dist/sandbox/docker-compose-sandbox.d.ts +25 -0
- package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -0
- package/dist/sandbox/docker-image-sandbox.d.ts +32 -0
- package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -0
- package/dist/sandbox/env-filter.d.ts +19 -0
- package/dist/sandbox/env-filter.d.ts.map +1 -0
- package/dist/sandbox/index.d.ts +9 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/sandbox-manager.d.ts +39 -0
- package/dist/sandbox/sandbox-manager.d.ts.map +1 -0
- package/dist/sandbox/sandbox-telemetry.d.ts +9 -0
- package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -0
- package/dist/sandbox/trace-ingester.d.ts +19 -0
- package/dist/sandbox/trace-ingester.d.ts.map +1 -0
- package/dist/sandbox/types.d.ts +149 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/scheduler/cli-handler.d.ts +6 -0
- package/dist/scheduler/cli-handler.d.ts.map +1 -0
- package/dist/scheduler/index.d.ts +16 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/schedule-parser.d.ts +34 -0
- package/dist/scheduler/schedule-parser.d.ts.map +1 -0
- package/dist/scheduler/schedule-store.d.ts +156 -0
- package/dist/scheduler/schedule-store.d.ts.map +1 -0
- package/dist/scheduler/schedule-tool.d.ts +137 -0
- package/dist/scheduler/schedule-tool.d.ts.map +1 -0
- package/dist/scheduler/scheduler.d.ts +216 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/store/index.d.ts +7 -0
- package/dist/scheduler/store/index.d.ts.map +1 -0
- package/dist/scheduler/store/json-migrator.d.ts +10 -0
- package/dist/scheduler/store/json-migrator.d.ts.map +1 -0
- package/dist/scheduler/store/sqlite-store.d.ts +32 -0
- package/dist/scheduler/store/sqlite-store.d.ts.map +1 -0
- package/dist/scheduler/store/types.d.ts +127 -0
- package/dist/scheduler/store/types.d.ts.map +1 -0
- package/dist/sdk/check-provider-registry-PANIXYRB.mjs +28 -0
- package/dist/sdk/check-provider-registry-S7DKTEM6.mjs +28 -0
- package/dist/sdk/{chunk-N7IVCCGH.mjs → chunk-DIND4ZCV.mjs} +2 -2
- package/dist/sdk/{chunk-SIMCSNXO.mjs → chunk-GEW6LS32.mjs} +2 -2
- package/dist/sdk/chunk-H5BOW5CR.mjs +91 -0
- package/dist/sdk/chunk-H5BOW5CR.mjs.map +1 -0
- package/dist/sdk/{chunk-UKG5UP5U.mjs → chunk-HOKQOO3G.mjs} +12 -7
- package/dist/sdk/chunk-HOKQOO3G.mjs.map +1 -0
- package/dist/sdk/{chunk-YCUWMIV5.mjs → chunk-JL7JXCET.mjs} +2 -2
- package/dist/sdk/{chunk-QRXSDDYN.mjs → chunk-LG4AUKHB.mjs} +2 -2
- package/dist/sdk/{chunk-UPKHRMUA.mjs → chunk-S6CD7GFM.mjs} +33449 -28837
- package/dist/sdk/chunk-S6CD7GFM.mjs.map +1 -0
- package/dist/sdk/{chunk-P6YFV6N2.mjs → chunk-SZXICFQ3.mjs} +2 -2
- package/dist/sdk/{chunk-V7RIRPO7.mjs → chunk-TQ4D3YOF.mjs} +33449 -28837
- package/dist/sdk/chunk-TQ4D3YOF.mjs.map +1 -0
- package/dist/sdk/{chunk-4HVFUUNB.mjs → chunk-UCMJJ3IM.mjs} +84 -3
- package/dist/sdk/{chunk-4HVFUUNB.mjs.map → chunk-UCMJJ3IM.mjs.map} +1 -1
- package/dist/sdk/{chunk-D55IQCUP.mjs → chunk-UCNT3PDT.mjs} +677 -12
- package/dist/sdk/chunk-UCNT3PDT.mjs.map +1 -0
- package/dist/sdk/{chunk-LMJSJQPP.mjs → chunk-V2IV3ILA.mjs} +8 -6
- package/dist/sdk/chunk-V2IV3ILA.mjs.map +1 -0
- package/dist/sdk/{chunk-EJN6Q4D3.mjs → chunk-VF6XIUE4.mjs} +6 -4
- package/dist/sdk/{chunk-EJN6Q4D3.mjs.map → chunk-VF6XIUE4.mjs.map} +1 -1
- package/dist/sdk/{chunk-VEROLBCD.mjs → chunk-VMLORODQ.mjs} +108 -21
- package/dist/sdk/chunk-VMLORODQ.mjs.map +1 -0
- package/dist/sdk/{chunk-UEWXVJ6C.mjs → chunk-VPC3QSPW.mjs} +2 -2
- package/dist/sdk/{chunk-WVNQ56DO.mjs → chunk-YJRBN3XS.mjs} +13 -2
- package/dist/sdk/{chunk-WVNQ56DO.mjs.map → chunk-YJRBN3XS.mjs.map} +1 -1
- package/dist/sdk/{command-executor-C4DGIQ4Q.mjs → command-executor-TOYBBE7S.mjs} +4 -4
- package/dist/sdk/{config-GYTBTHRZ.mjs → config-OGOS4ZU4.mjs} +5 -5
- package/dist/sdk/event-bus-5K3Y2FCS.mjs +43 -0
- package/dist/sdk/{event-bus-XV2TOQFU.mjs.map → event-bus-5K3Y2FCS.mjs.map} +1 -1
- package/dist/sdk/failure-condition-evaluator-HC3M5377.mjs +17 -0
- package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs +471 -0
- package/dist/sdk/git-repository-analyzer-QFMW6WIS.mjs.map +1 -0
- package/dist/sdk/{github-frontend-UC326PMS.mjs → github-frontend-E2KJSC3Y.mjs} +517 -585
- package/dist/sdk/github-frontend-E2KJSC3Y.mjs.map +1 -0
- package/dist/sdk/host-EE6EJ2FM.mjs +63 -0
- package/dist/sdk/host-EE6EJ2FM.mjs.map +1 -0
- package/dist/sdk/host-OUSD2OIQ.mjs +63 -0
- package/dist/sdk/host-OUSD2OIQ.mjs.map +1 -0
- package/dist/sdk/knex-store-HPXJILBL.mjs +411 -0
- package/dist/sdk/knex-store-HPXJILBL.mjs.map +1 -0
- package/dist/sdk/lazy-otel-5NH4ZJJM.mjs +24 -0
- package/dist/sdk/{liquid-extensions-WJAC7QKG.mjs → liquid-extensions-E4EUOCES.mjs} +6 -6
- package/dist/sdk/loader-ID5LMXOW.mjs +89 -0
- package/dist/sdk/loader-ID5LMXOW.mjs.map +1 -0
- package/dist/sdk/memory-store-AAPL2MTE.mjs +12 -0
- package/dist/sdk/{metrics-CSBGJEWW.mjs → metrics-I6A7IHG4.mjs} +3 -3
- package/dist/sdk/ndjson-sink-FD2PSXGD.mjs +52 -0
- package/dist/sdk/{ndjson-sink-JQ2INHTS.mjs.map → ndjson-sink-FD2PSXGD.mjs.map} +1 -1
- package/dist/sdk/opa-policy-engine-UUPFN5CL.mjs +655 -0
- package/dist/sdk/opa-policy-engine-UUPFN5CL.mjs.map +1 -0
- package/dist/sdk/{prompt-state-X2WDGSEM.mjs → prompt-state-VAKKC773.mjs} +4 -4
- package/dist/sdk/{renderer-schema-FRCLA6KH.mjs → renderer-schema-HXEW6BRJ.mjs} +3 -3
- package/dist/sdk/routing-OZQWAGAI.mjs +25 -0
- package/dist/sdk/schedule-tool-handler-B7TMSG6A.mjs +38 -0
- package/dist/sdk/schedule-tool-handler-EBNKDUJC.mjs +38 -0
- package/dist/sdk/sdk.d.mts +284 -4
- package/dist/sdk/sdk.d.ts +284 -4
- package/dist/sdk/sdk.js +8247 -2417
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +20 -1348
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/slack-frontend-LAY45IBR.mjs +989 -0
- package/dist/sdk/slack-frontend-LAY45IBR.mjs.map +1 -0
- package/dist/sdk/{trace-helpers-LUCR52GY.mjs → trace-helpers-PP3YHTAM.mjs} +3 -3
- package/dist/sdk/tui-frontend-T56PZB67.mjs +290 -0
- package/dist/sdk/tui-frontend-T56PZB67.mjs.map +1 -0
- package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
- package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-E7YPEZ45.mjs +28 -0
- package/dist/sdk/workflow-check-provider-E7YPEZ45.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-HB4XTD4Z.mjs +28 -0
- package/dist/sdk/workflow-check-provider-HB4XTD4Z.mjs.map +1 -0
- package/dist/sdk/workflow-registry-AAD37XKZ.mjs +12 -0
- package/dist/sdk/workflow-registry-AAD37XKZ.mjs.map +1 -0
- package/dist/slack/client.d.ts +40 -0
- package/dist/slack/client.d.ts.map +1 -1
- package/dist/slack/schedule-tool-handler.d.ts +46 -0
- package/dist/slack/schedule-tool-handler.d.ts.map +1 -0
- package/dist/slack/slack-output-adapter.d.ts +44 -0
- package/dist/slack/slack-output-adapter.d.ts.map +1 -0
- package/dist/slack/socket-runner.d.ts +22 -0
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
- package/dist/state-machine/dispatch/policy-gate.d.ts +28 -0
- package/dist/state-machine/dispatch/policy-gate.d.ts.map +1 -0
- package/dist/state-machine/dispatch/sandbox-routing.d.ts +21 -0
- package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -0
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
- package/dist/state-machine/states/routing.d.ts.map +1 -1
- package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
- package/dist/state-machine-execution-engine.d.ts.map +1 -1
- package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/tui/chat-runner.d.ts +39 -0
- package/dist/tui/chat-runner.d.ts.map +1 -0
- package/dist/tui/chat-state.d.ts +57 -0
- package/dist/tui/chat-state.d.ts.map +1 -0
- package/dist/tui/chat-tui.d.ts +70 -0
- package/dist/tui/chat-tui.d.ts.map +1 -0
- package/dist/tui/components/chat-box.d.ts +42 -0
- package/dist/tui/components/chat-box.d.ts.map +1 -0
- package/dist/tui/components/input-bar.d.ts +67 -0
- package/dist/tui/components/input-bar.d.ts.map +1 -0
- package/dist/tui/components/status-bar.d.ts +34 -0
- package/dist/tui/components/status-bar.d.ts.map +1 -0
- package/dist/tui/components/trace-viewer.d.ts +74 -0
- package/dist/tui/components/trace-viewer.d.ts.map +1 -0
- package/dist/tui/index.d.ts +14 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/tui-frontend.d.ts +29 -0
- package/dist/tui/tui-frontend.d.ts.map +1 -0
- package/dist/types/bot.d.ts +35 -0
- package/dist/types/bot.d.ts.map +1 -1
- package/dist/types/config.d.ts +197 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +8 -0
- package/dist/types/engine.d.ts.map +1 -1
- package/dist/types/execution.d.ts +1 -1
- package/dist/types/execution.d.ts.map +1 -1
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/package.json +17 -5
- package/dist/docs/NPM_USAGE.md +0 -281
- package/dist/generated/config-schema.json +0 -2209
- package/dist/output/traces/run-2026-02-05T13-36-03-279Z.ndjson +0 -138
- package/dist/output/traces/run-2026-02-05T13-36-48-767Z.ndjson +0 -1137
- package/dist/output/traces/run-2026-02-05T13-36-58-960Z.ndjson +0 -17
- package/dist/output/traces/run-2026-02-05T13-37-00-184Z.ndjson +0 -205
- package/dist/sdk/check-provider-registry-OB5FEBJU.mjs +0 -28
- package/dist/sdk/check-provider-registry-UC2LPSB4.mjs +0 -28
- package/dist/sdk/chunk-D55IQCUP.mjs.map +0 -1
- package/dist/sdk/chunk-LMJSJQPP.mjs.map +0 -1
- package/dist/sdk/chunk-UKG5UP5U.mjs.map +0 -1
- package/dist/sdk/chunk-UPKHRMUA.mjs.map +0 -1
- package/dist/sdk/chunk-V7RIRPO7.mjs.map +0 -1
- package/dist/sdk/chunk-VEROLBCD.mjs.map +0 -1
- package/dist/sdk/event-bus-XV2TOQFU.mjs +0 -35
- package/dist/sdk/failure-condition-evaluator-KRFY4OLQ.mjs +0 -17
- package/dist/sdk/git-repository-analyzer-VO7OZMTM.mjs +0 -458
- package/dist/sdk/git-repository-analyzer-VO7OZMTM.mjs.map +0 -1
- package/dist/sdk/github-frontend-UC326PMS.mjs.map +0 -1
- package/dist/sdk/host-H7MKML2H.mjs +0 -52
- package/dist/sdk/host-H7MKML2H.mjs.map +0 -1
- package/dist/sdk/memory-store-LPOZWQ5E.mjs +0 -12
- package/dist/sdk/ndjson-sink-JQ2INHTS.mjs +0 -44
- package/dist/sdk/routing-745DOEKR.mjs +0 -24
- package/dist/sdk/slack-frontend-UPYUYCUQ.mjs +0 -821
- package/dist/sdk/slack-frontend-UPYUYCUQ.mjs.map +0 -1
- package/dist/sdk/workflow-check-provider-AA3VNYUY.mjs +0 -28
- package/dist/sdk/workflow-check-provider-LQNQZUN5.mjs +0 -28
- package/dist/sdk/workflow-registry-W7IEH7GK.mjs +0 -12
- package/dist/traces/run-2026-02-05T13-36-03-279Z.ndjson +0 -138
- package/dist/traces/run-2026-02-05T13-36-48-767Z.ndjson +0 -1137
- package/dist/traces/run-2026-02-05T13-36-58-960Z.ndjson +0 -17
- package/dist/traces/run-2026-02-05T13-37-00-184Z.ndjson +0 -205
- package/dist/tui.d.ts +0 -51
- package/dist/tui.d.ts.map +0 -1
- /package/dist/sdk/{check-provider-registry-OB5FEBJU.mjs.map → check-provider-registry-PANIXYRB.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-UC2LPSB4.mjs.map → check-provider-registry-S7DKTEM6.mjs.map} +0 -0
- /package/dist/sdk/{chunk-N7IVCCGH.mjs.map → chunk-DIND4ZCV.mjs.map} +0 -0
- /package/dist/sdk/{chunk-SIMCSNXO.mjs.map → chunk-GEW6LS32.mjs.map} +0 -0
- /package/dist/sdk/{chunk-YCUWMIV5.mjs.map → chunk-JL7JXCET.mjs.map} +0 -0
- /package/dist/sdk/{chunk-QRXSDDYN.mjs.map → chunk-LG4AUKHB.mjs.map} +0 -0
- /package/dist/sdk/{chunk-P6YFV6N2.mjs.map → chunk-SZXICFQ3.mjs.map} +0 -0
- /package/dist/sdk/{chunk-UEWXVJ6C.mjs.map → chunk-VPC3QSPW.mjs.map} +0 -0
- /package/dist/sdk/{command-executor-C4DGIQ4Q.mjs.map → command-executor-TOYBBE7S.mjs.map} +0 -0
- /package/dist/sdk/{config-GYTBTHRZ.mjs.map → config-OGOS4ZU4.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-KRFY4OLQ.mjs.map → failure-condition-evaluator-HC3M5377.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-WJAC7QKG.mjs.map → lazy-otel-5NH4ZJJM.mjs.map} +0 -0
- /package/dist/sdk/{memory-store-LPOZWQ5E.mjs.map → liquid-extensions-E4EUOCES.mjs.map} +0 -0
- /package/dist/sdk/{metrics-CSBGJEWW.mjs.map → memory-store-AAPL2MTE.mjs.map} +0 -0
- /package/dist/sdk/{prompt-state-X2WDGSEM.mjs.map → metrics-I6A7IHG4.mjs.map} +0 -0
- /package/dist/sdk/{routing-745DOEKR.mjs.map → prompt-state-VAKKC773.mjs.map} +0 -0
- /package/dist/sdk/{renderer-schema-FRCLA6KH.mjs.map → renderer-schema-HXEW6BRJ.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-LUCR52GY.mjs.map → routing-OZQWAGAI.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-AA3VNYUY.mjs.map → schedule-tool-handler-B7TMSG6A.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-LQNQZUN5.mjs.map → schedule-tool-handler-EBNKDUJC.mjs.map} +0 -0
- /package/dist/sdk/{workflow-registry-W7IEH7GK.mjs.map → trace-helpers-PP3YHTAM.mjs.map} +0 -0
package/dist/docs/index.md
CHANGED
|
@@ -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
|