@probelabs/visor 0.1.106 → 0.1.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -2
- package/action.yml +1 -1
- package/defaults/code-refiner.yaml +114 -0
- package/defaults/{.visor.yaml → code-review.yaml} +35 -226
- package/defaults/override.yaml +52 -0
- package/defaults/task-refinement.yaml +624 -0
- package/defaults/visor.tests.yaml +685 -0
- package/defaults/visor.yaml +483 -0
- package/dist/action-cli-bridge.d.ts +11 -82
- package/dist/action-cli-bridge.d.ts.map +1 -1
- package/dist/ai-review-service.d.ts +28 -9
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/check-execution-engine.d.ts +19 -331
- package/dist/check-execution-engine.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/cron-scheduler.d.ts +3 -3
- package/dist/cron-scheduler.d.ts.map +1 -1
- package/dist/debug-visualizer/ws-server.d.ts +7 -1
- package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
- package/dist/defaults/code-refiner.yaml +114 -0
- package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
- package/dist/defaults/override.yaml +52 -0
- package/dist/defaults/task-refinement.yaml +624 -0
- package/dist/defaults/visor.tests.yaml +685 -0
- package/dist/defaults/visor.yaml +483 -0
- package/dist/docs/DEPLOYMENT.md +118 -0
- package/dist/docs/GITHUB_CHECKS.md +280 -0
- package/dist/docs/NPM_USAGE.md +208 -0
- package/dist/docs/action-reference.md +19 -0
- package/dist/docs/advanced-ai.md +237 -0
- package/dist/docs/ai-configuration.md +535 -0
- package/dist/docs/ai-custom-tools-usage.md +261 -0
- package/dist/docs/ai-custom-tools.md +392 -0
- package/dist/docs/author-permissions.md +610 -0
- package/dist/docs/bot-transports-rfc.md +23 -0
- package/dist/docs/ci-cli-mode.md +34 -0
- package/dist/docs/claude-code.md +74 -0
- package/dist/docs/command-provider.md +559 -0
- package/dist/docs/commands.md +8 -0
- package/dist/docs/configuration.md +324 -0
- package/dist/docs/custom-tools.md +424 -0
- package/dist/docs/dashboards/README.md +23 -0
- package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
- package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
- package/dist/docs/debug-visualizer-progress.md +572 -0
- package/dist/docs/debug-visualizer-rfc.md +691 -0
- package/dist/docs/debug-visualizer.md +114 -0
- package/dist/docs/debugging.md +636 -0
- package/dist/docs/default-output-schema.md +28 -0
- package/dist/docs/dependencies.md +369 -0
- package/dist/docs/dev-playbook.md +9 -0
- package/dist/docs/engine-pause-resume-rfc.md +192 -0
- package/dist/docs/engine-state-machine-plan.md +333 -0
- package/dist/docs/event-driven-github-integration-rfc.md +743 -0
- package/dist/docs/event-triggers.md +292 -0
- package/dist/docs/execution-statistics-rfc.md +290 -0
- package/dist/docs/fact-validator-gap-analysis.md +178 -0
- package/dist/docs/fact-validator-implementation-plan.md +1235 -0
- package/dist/docs/fail-if.md +95 -0
- package/dist/docs/failure-conditions-implementation.md +271 -0
- package/dist/docs/failure-conditions-schema.md +173 -0
- package/dist/docs/failure-routing-rfc.md +193 -0
- package/dist/docs/failure-routing.md +507 -0
- package/dist/docs/foreach-dependency-propagation.md +473 -0
- package/dist/docs/github-ops.md +89 -0
- package/dist/docs/goto-forward-run-plan.md +113 -0
- package/dist/docs/guides/criticality-modes.md +332 -0
- package/dist/docs/guides/fault-management-and-contracts.md +738 -0
- package/dist/docs/guides/workflow-style-guide.md +224 -0
- package/dist/docs/http.md +299 -0
- package/dist/docs/human-input-provider.md +372 -0
- package/dist/docs/lifecycle-hooks.md +253 -0
- package/dist/docs/limits.md +64 -0
- package/dist/docs/liquid-templates.md +490 -0
- package/dist/docs/loop-routing-refactor.md +89 -0
- package/dist/docs/mcp-provider.md +557 -0
- package/dist/docs/mcp.md +124 -0
- package/dist/docs/memory.md +903 -0
- package/dist/docs/observability.md +12 -0
- package/dist/docs/output-formats.md +20 -0
- package/dist/docs/output-formatting.md +29 -0
- package/dist/docs/output-history.md +383 -0
- package/dist/docs/performance.md +6 -0
- package/dist/docs/pluggable.md +124 -0
- package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
- package/dist/docs/providers/git-checkout.md +589 -0
- package/dist/docs/recipes.md +474 -0
- package/dist/docs/rfc/git-checkout-step.md +601 -0
- package/dist/docs/rfc/on_init-hook.md +1294 -0
- package/dist/docs/rfc/workspace-isolation.md +216 -0
- package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
- package/dist/docs/router-patterns.md +339 -0
- package/dist/docs/schema-next-pr.md +10 -0
- package/dist/docs/schema-templates.md +68 -0
- package/dist/docs/script.md +34 -0
- package/dist/docs/sdk.md +222 -0
- package/dist/docs/security.md +7 -0
- package/dist/docs/suppressions.md +89 -0
- package/dist/docs/tag-filtering.md +258 -0
- package/dist/docs/telemetry-setup.md +119 -0
- package/dist/docs/telemetry-tracing-rfc.md +275 -0
- package/dist/docs/test-framework-rfc.md +680 -0
- package/dist/docs/testing/assertions.md +85 -0
- package/dist/docs/testing/ci.md +44 -0
- package/dist/docs/testing/cli.md +41 -0
- package/dist/docs/testing/cookbook.md +172 -0
- package/dist/docs/testing/dsl-reference.md +199 -0
- package/dist/docs/testing/fixtures-and-mocks.md +91 -0
- package/dist/docs/testing/flows.md +92 -0
- package/dist/docs/testing/getting-started.md +93 -0
- package/dist/docs/testing/troubleshooting.md +55 -0
- package/dist/docs/timeouts.md +50 -0
- package/dist/docs/troubleshooting.md +7 -0
- package/dist/docs/visor-sdk-rfc.md +186 -0
- package/dist/docs/workflows.md +569 -0
- package/dist/engine/on-finish/orchestrator.d.ts +19 -0
- package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
- package/dist/engine/on-finish/utils.d.ts +44 -0
- package/dist/engine/on-finish/utils.d.ts.map +1 -0
- package/dist/event-bus/event-bus.d.ts +13 -0
- package/dist/event-bus/event-bus.d.ts.map +1 -0
- package/dist/event-bus/types.d.ts +71 -0
- package/dist/event-bus/types.d.ts.map +1 -0
- package/dist/examples/.claude/agents/code-reviewer.md +69 -0
- package/dist/examples/.mcp.json +34 -0
- package/dist/examples/CALCULATOR-SDK.md +364 -0
- package/dist/examples/README.md +384 -0
- package/dist/examples/ai-custom-tools-example.yaml +206 -0
- package/dist/examples/ai-custom-tools-simple.yaml +76 -0
- package/dist/examples/ai-retry-fallback-config.yaml +180 -0
- package/dist/examples/ai-with-bash.yaml +126 -0
- package/dist/examples/ai-with-mcp.yaml +82 -0
- package/dist/examples/basic-human-input.yaml +15 -0
- package/dist/examples/bedrock-config.yaml +77 -0
- package/dist/examples/calculator-config.yaml +133 -0
- package/dist/examples/calculator-json-output-guide.md +311 -0
- package/dist/examples/calculator-sdk-automated.ts +340 -0
- package/dist/examples/calculator-sdk-example.ts +275 -0
- package/dist/examples/calculator-sdk-json.ts +331 -0
- package/dist/examples/calculator-sdk-real.ts +374 -0
- package/dist/examples/calculator-sdk-test.ts +148 -0
- package/dist/examples/claude-code-config.yaml +191 -0
- package/dist/examples/cron-webhook-config.yaml +215 -0
- package/dist/examples/custom-template.liquid +57 -0
- package/dist/examples/custom-tools-example.yaml +281 -0
- package/dist/examples/enhanced-config.yaml +165 -0
- package/dist/examples/environments/visor.base.yaml +92 -0
- package/dist/examples/environments/visor.dev.yaml +33 -0
- package/dist/examples/environments/visor.prod.yaml +95 -0
- package/dist/examples/environments/visor.staging.yaml +46 -0
- package/dist/examples/fact-validator.yaml +361 -0
- package/dist/examples/fail-if-simple.yaml +90 -0
- package/dist/examples/failure-conditions-advanced.yaml +136 -0
- package/dist/examples/failure-conditions-basic.yaml +48 -0
- package/dist/examples/failure-conditions-github-style.yaml +119 -0
- package/dist/examples/failure-conditions-migration.yaml +74 -0
- package/dist/examples/for-loop-example.yaml +176 -0
- package/dist/examples/forEach-example.yaml +120 -0
- package/dist/examples/git-checkout-basic.yaml +32 -0
- package/dist/examples/git-checkout-compare.yaml +59 -0
- package/dist/examples/git-checkout-cross-repo.yaml +76 -0
- package/dist/examples/github-workflow-with-tags.yml +163 -0
- package/dist/examples/http-integration-config.yaml +240 -0
- package/dist/examples/https-server-config.yaml +209 -0
- package/dist/examples/human-input-example.yaml +63 -0
- package/dist/examples/if-conditions.yaml +173 -0
- package/dist/examples/jira-simple-example.yaml +56 -0
- package/dist/examples/jira-single-issue-workflow.yaml +166 -0
- package/dist/examples/jira-workflow-mcp.yaml +182 -0
- package/dist/examples/mcp/analyzer.py +119 -0
- package/dist/examples/mcp-provider-example.yaml +301 -0
- package/dist/examples/memory-counter.yaml +99 -0
- package/dist/examples/memory-error-collection.yaml +104 -0
- package/dist/examples/memory-exec-js.yaml +247 -0
- package/dist/examples/memory-namespace-isolation.yaml +184 -0
- package/dist/examples/memory-retry-counter.yaml +65 -0
- package/dist/examples/memory-state-machine.yaml +170 -0
- package/dist/examples/on-init-import-demo.yaml +179 -0
- package/dist/examples/outputs-raw-basic.yaml +26 -0
- package/dist/examples/project-with-tools.yaml +174 -0
- package/dist/examples/prompts/architecture-analysis.liquid +116 -0
- package/dist/examples/prompts/security-comprehensive.liquid +107 -0
- package/dist/examples/quick-start-tags.yaml +53 -0
- package/dist/examples/reusable-tools.yaml +92 -0
- package/dist/examples/reusable-workflows.yaml +88 -0
- package/dist/examples/routing-basic.yaml +35 -0
- package/dist/examples/routing-dynamic-js.yaml +46 -0
- package/dist/examples/routing-foreach.yaml +34 -0
- package/dist/examples/routing-goto-event.yaml +34 -0
- package/dist/examples/routing-on-success.yaml +25 -0
- package/dist/examples/run-calculator-demo.sh +71 -0
- package/dist/examples/sdk-basic.mjs +10 -0
- package/dist/examples/sdk-cjs.cjs +10 -0
- package/dist/examples/sdk-comprehensive.mjs +175 -0
- package/dist/examples/sdk-manual-config.mjs +65 -0
- package/dist/examples/sdk-typescript.js +81 -0
- package/dist/examples/sdk-typescript.ts +92 -0
- package/dist/examples/session-reuse-config.yaml +151 -0
- package/dist/examples/session-reuse-self.yaml +81 -0
- package/dist/examples/slack-simple-chat.yaml +775 -0
- package/dist/examples/templates/security-report.liquid +137 -0
- package/dist/examples/tools-library.yaml +281 -0
- package/dist/examples/transform-example.yaml +199 -0
- package/dist/examples/visor-with-tags.yaml +198 -0
- package/dist/examples/webhook-pipeline-config.yaml +218 -0
- package/dist/examples/workflows/calculator-workflow.yaml +163 -0
- package/dist/examples/workflows/code-quality.yaml +222 -0
- package/dist/examples/workflows/quick-pr-check.yaml +90 -0
- package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
- package/dist/failure-condition-evaluator.d.ts +3 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts +58 -0
- package/dist/frontends/github-frontend.d.ts.map +1 -0
- package/dist/frontends/host.d.ts +47 -0
- package/dist/frontends/host.d.ts.map +1 -0
- package/dist/frontends/ndjson-sink.d.ts +12 -0
- package/dist/frontends/ndjson-sink.d.ts.map +1 -0
- package/dist/frontends/slack-frontend.d.ts +58 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -0
- package/dist/generated/config-schema.d.ts +967 -57
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +1033 -56
- package/dist/github-check-service.d.ts +4 -6
- package/dist/github-check-service.d.ts.map +1 -1
- package/dist/github-comments.d.ts +2 -4
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +134327 -99004
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/memory-store.d.ts +6 -0
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/output/assistant-json/template.liquid +0 -0
- package/dist/output/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
- package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
- package/dist/output-formatters.d.ts +1 -1
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts +12 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts +6 -0
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +43 -1
- 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/command-check-provider.d.ts +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/custom-tool-executor.d.ts +61 -0
- package/dist/providers/custom-tool-executor.d.ts.map +1 -0
- package/dist/providers/git-checkout-provider.d.ts +25 -0
- package/dist/providers/git-checkout-provider.d.ts.map +1 -0
- package/dist/providers/github-ops-provider.d.ts.map +1 -1
- package/dist/providers/http-client-provider.d.ts +4 -4
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/human-input-check-provider.d.ts +5 -0
- package/dist/providers/human-input-check-provider.d.ts.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts +2 -5
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts +10 -4
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
- package/dist/providers/memory-check-provider.d.ts +2 -8
- package/dist/providers/memory-check-provider.d.ts.map +1 -1
- package/dist/providers/script-check-provider.d.ts +25 -0
- package/dist/providers/script-check-provider.d.ts.map +1 -0
- package/dist/providers/workflow-check-provider.d.ts +56 -0
- package/dist/providers/workflow-check-provider.d.ts.map +1 -0
- package/dist/reviewer.d.ts +2 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
- package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
- package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
- package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-3OMWVM6J.mjs} +11 -1
- package/dist/sdk/chunk-3OMWVM6J.mjs.map +1 -0
- package/dist/sdk/chunk-7UK3NIIT.mjs +482 -0
- package/dist/sdk/chunk-7UK3NIIT.mjs.map +1 -0
- package/dist/sdk/chunk-AGIZJ4UZ.mjs +173 -0
- package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
- package/dist/sdk/chunk-AIVFBIS4.mjs +1371 -0
- package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
- package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
- package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
- package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
- package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
- package/dist/sdk/chunk-NAW3DB3I.mjs +197 -0
- package/dist/sdk/chunk-NAW3DB3I.mjs.map +1 -0
- package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
- package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
- package/dist/sdk/chunk-QR7MOMJH.mjs +558 -0
- package/dist/sdk/chunk-QR7MOMJH.mjs.map +1 -0
- package/dist/sdk/chunk-QY2XYPEV.mjs +3556 -0
- package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
- package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
- package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
- package/dist/sdk/chunk-SIWNBRTK.mjs +800 -0
- package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
- package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
- package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
- package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
- package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
- package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
- package/dist/sdk/config-YNC2EOOT.mjs +16 -0
- package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
- package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
- package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
- package/dist/sdk/failure-condition-evaluator-YGTF2GHG.mjs +17 -0
- package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
- package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
- package/dist/sdk/github-frontend-SIAEOCON.mjs +1420 -0
- package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
- package/dist/sdk/host-DXUYTNMU.mjs +52 -0
- package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-PKWCKK7E.mjs} +8 -2
- package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
- package/dist/sdk/memory-store-XGBB7LX7.mjs.map +1 -0
- package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
- package/dist/sdk/metrics-7PP3EJUH.mjs.map +1 -0
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
- package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
- package/dist/sdk/prompt-state-YRJY6QAL.mjs.map +1 -0
- package/dist/sdk/renderer-schema-LPKN5UJS.mjs +51 -0
- package/dist/sdk/renderer-schema-LPKN5UJS.mjs.map +1 -0
- package/dist/sdk/routing-6N45MJ4F.mjs +24 -0
- package/dist/sdk/routing-6N45MJ4F.mjs.map +1 -0
- package/dist/sdk/sdk.d.mts +541 -22
- package/dist/sdk/sdk.d.ts +541 -22
- package/dist/sdk/sdk.js +27963 -16505
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +1116 -2169
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/session-registry-4E6YRQ77.mjs +10 -0
- package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
- package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
- package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
- package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
- package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
- package/dist/sdk.d.ts.map +1 -1
- package/dist/slack/adapter.d.ts +36 -0
- package/dist/slack/adapter.d.ts.map +1 -0
- package/dist/slack/cache-prewarmer.d.ts +31 -0
- package/dist/slack/cache-prewarmer.d.ts.map +1 -0
- package/dist/slack/client.d.ts +77 -0
- package/dist/slack/client.d.ts.map +1 -0
- package/dist/slack/markdown.d.ts +45 -0
- package/dist/slack/markdown.d.ts.map +1 -0
- package/dist/slack/prompt-state.d.ts +33 -0
- package/dist/slack/prompt-state.d.ts.map +1 -0
- package/dist/slack/rate-limiter.d.ts +56 -0
- package/dist/slack/rate-limiter.d.ts.map +1 -0
- package/dist/slack/signature.d.ts +2 -0
- package/dist/slack/signature.d.ts.map +1 -0
- package/dist/slack/socket-runner.d.ts +42 -0
- package/dist/slack/socket-runner.d.ts.map +1 -0
- package/dist/slack/thread-cache.d.ts +51 -0
- package/dist/slack/thread-cache.d.ts.map +1 -0
- package/dist/snapshot-store.d.ts +59 -0
- package/dist/snapshot-store.d.ts.map +1 -0
- package/dist/state-machine/context/build-engine-context.d.ts +17 -0
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
- package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
- package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
- package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
- package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
- package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
- package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
- package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
- package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
- package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
- package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
- package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
- package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
- package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
- package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
- package/dist/state-machine/execution/summary.d.ts +8 -0
- package/dist/state-machine/execution/summary.d.ts.map +1 -0
- package/dist/state-machine/runner.d.ts +79 -0
- package/dist/state-machine/runner.d.ts.map +1 -0
- package/dist/state-machine/states/check-running.d.ts +14 -0
- package/dist/state-machine/states/check-running.d.ts.map +1 -0
- package/dist/state-machine/states/completed.d.ts +12 -0
- package/dist/state-machine/states/completed.d.ts.map +1 -0
- package/dist/state-machine/states/error.d.ts +11 -0
- package/dist/state-machine/states/error.d.ts.map +1 -0
- package/dist/state-machine/states/init.d.ts +11 -0
- package/dist/state-machine/states/init.d.ts.map +1 -0
- package/dist/state-machine/states/level-dispatch.d.ts +17 -0
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
- package/dist/state-machine/states/plan-ready.d.ts +12 -0
- package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
- package/dist/state-machine/states/routing.d.ts +52 -0
- package/dist/state-machine/states/routing.d.ts.map +1 -0
- package/dist/state-machine/states/wave-planning.d.ts +14 -0
- package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
- package/dist/state-machine/workflow-projection.d.ts +47 -0
- package/dist/state-machine/workflow-projection.d.ts.map +1 -0
- package/dist/state-machine-execution-engine.d.ts +159 -0
- package/dist/state-machine-execution-engine.d.ts.map +1 -0
- package/dist/telemetry/opentelemetry.d.ts.map +1 -1
- package/dist/telemetry/state-capture.d.ts +5 -0
- package/dist/telemetry/state-capture.d.ts.map +1 -1
- package/dist/test-runner/assertions.d.ts +59 -0
- package/dist/test-runner/assertions.d.ts.map +1 -0
- package/dist/test-runner/core/environment.d.ts +8 -0
- package/dist/test-runner/core/environment.d.ts.map +1 -0
- package/dist/test-runner/core/fixture.d.ts +3 -0
- package/dist/test-runner/core/fixture.d.ts.map +1 -0
- package/dist/test-runner/core/flow-stage.d.ts +32 -0
- package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
- package/dist/test-runner/core/mocks.d.ts +8 -0
- package/dist/test-runner/core/mocks.d.ts.map +1 -0
- package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
- package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
- package/dist/test-runner/evaluators.d.ts +45 -0
- package/dist/test-runner/evaluators.d.ts.map +1 -0
- package/dist/test-runner/fixture-loader.d.ts +30 -0
- package/dist/test-runner/fixture-loader.d.ts.map +1 -0
- package/dist/test-runner/index.d.ts +127 -0
- package/dist/test-runner/index.d.ts.map +1 -0
- package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
- package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
- package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
- package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
- package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
- package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
- package/dist/test-runner/utils/selectors.d.ts +2 -0
- package/dist/test-runner/utils/selectors.d.ts.map +1 -0
- package/dist/test-runner/validator.d.ts +8 -0
- package/dist/test-runner/validator.d.ts.map +1 -0
- package/dist/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
- package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
- package/dist/types/bot.d.ts +109 -0
- package/dist/types/bot.d.ts.map +1 -0
- package/dist/types/cli.d.ts +8 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts +459 -9
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +177 -0
- package/dist/types/engine.d.ts.map +1 -0
- package/dist/types/execution.d.ts +73 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/git-checkout.d.ts +76 -0
- package/dist/types/git-checkout.d.ts.map +1 -0
- package/dist/types/github.d.ts +51 -0
- package/dist/types/github.d.ts.map +1 -0
- package/dist/types/workflow.d.ts +237 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/utils/command-executor.d.ts +43 -0
- package/dist/utils/command-executor.d.ts.map +1 -0
- package/dist/utils/comment-metadata.d.ts +21 -0
- package/dist/utils/comment-metadata.d.ts.map +1 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-merger.d.ts.map +1 -1
- package/dist/utils/env-exposure.d.ts +3 -0
- package/dist/utils/env-exposure.d.ts.map +1 -0
- package/dist/utils/file-exclusion.d.ts.map +1 -1
- package/dist/utils/interactive-prompt.d.ts +1 -1
- package/dist/utils/interactive-prompt.d.ts.map +1 -1
- package/dist/utils/json-text-extractor.d.ts +17 -0
- package/dist/utils/json-text-extractor.d.ts.map +1 -0
- package/dist/utils/sandbox.d.ts +10 -0
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/script-memory-ops.d.ts +21 -0
- package/dist/utils/script-memory-ops.d.ts.map +1 -0
- package/dist/utils/template-context.d.ts +8 -0
- package/dist/utils/template-context.d.ts.map +1 -0
- package/dist/utils/tracer-init.d.ts.map +1 -1
- package/dist/utils/workspace-manager.d.ts +118 -0
- package/dist/utils/workspace-manager.d.ts.map +1 -0
- package/dist/utils/worktree-cleanup.d.ts +33 -0
- package/dist/utils/worktree-cleanup.d.ts.map +1 -0
- package/dist/utils/worktree-manager.d.ts +153 -0
- package/dist/utils/worktree-manager.d.ts.map +1 -0
- package/dist/webhook-server.d.ts +3 -3
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/workflow-executor.d.ts +81 -0
- package/dist/workflow-executor.d.ts.map +1 -0
- package/dist/workflow-registry.d.ts +79 -0
- package/dist/workflow-registry.d.ts.map +1 -0
- package/package.json +12 -5
- package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
- package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
- package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
- package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
- package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
- package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
- package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
- package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
- package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
- package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
- package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
- package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
- package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
- package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
- package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
- package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
- package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
- package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
- package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
- package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
- package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
- package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
- package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
- package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
- package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
- /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
- /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
- /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
- /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
- /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Visor Workflow Style Guide
|
|
2
|
+
|
|
3
|
+
This guide captures pragmatic conventions for writing clear, safe, and maintainable Visor workflows (visor.yaml and friends). It complements the feature guides by focusing on readability, intent, and day‑2 operability.
|
|
4
|
+
|
|
5
|
+
## Why This Matters
|
|
6
|
+
|
|
7
|
+
- Readability reduces on‑call cognitive load and speeds reviews.
|
|
8
|
+
- A consistent structure makes behaviors obvious (what, when, how, and why).
|
|
9
|
+
- Guardrails prevent accidental side effects and clarify intent.
|
|
10
|
+
|
|
11
|
+
## Key Principles
|
|
12
|
+
|
|
13
|
+
- One step, one responsibility. Prefer small, composable steps over “kitchen‑sink” checks.
|
|
14
|
+
- Declare intent before mechanics. Readers should see what a step is and when it runs before how it runs.
|
|
15
|
+
- Guard and contract every important step. Preconditions (“assume” or “if”) up front, postconditions (“schema” or “guarantee”) after execution.
|
|
16
|
+
- Avoid hidden control flow. Prefer declarative transitions and explicit dependencies over imperative logic.
|
|
17
|
+
- Be idempotent, especially for external effects. Plan for retries and partial failures.
|
|
18
|
+
|
|
19
|
+
## Recommended Key Order (Per Step)
|
|
20
|
+
|
|
21
|
+
Use this top‑down order for every step. Omit sections that don’t apply.
|
|
22
|
+
|
|
23
|
+
1) Identity & Intent
|
|
24
|
+
- `type`
|
|
25
|
+
- `criticality` (external | internal | policy | info)
|
|
26
|
+
- `group`
|
|
27
|
+
- `tags`
|
|
28
|
+
- `description`
|
|
29
|
+
|
|
30
|
+
2) Triggers & Dependencies
|
|
31
|
+
- `on`
|
|
32
|
+
- `depends_on`
|
|
33
|
+
- `fanout` / `forEach` / `reduce`
|
|
34
|
+
|
|
35
|
+
3) Preconditions (Guards)
|
|
36
|
+
- `assume`
|
|
37
|
+
- `if`
|
|
38
|
+
|
|
39
|
+
4) Provider Configuration (Only fields for the given type)
|
|
40
|
+
- ai: `prompt`, `ai.{model,provider,tools,…}`
|
|
41
|
+
- command: `exec`, `args`, `cwd`, `shell`
|
|
42
|
+
- script: `content` or `file`
|
|
43
|
+
- github: `op`, `values`
|
|
44
|
+
- http/http_client/http_input: `url`, `method`, `body`, `headers`
|
|
45
|
+
- log/memory/workflow/noop: minimal fields
|
|
46
|
+
|
|
47
|
+
5) Contracts (Post‑Exec)
|
|
48
|
+
- `schema` (renderer name or JSON Schema)
|
|
49
|
+
- `guarantee`
|
|
50
|
+
|
|
51
|
+
6) Failure Policies
|
|
52
|
+
- `fail_if`
|
|
53
|
+
- `continue_on_failure`
|
|
54
|
+
|
|
55
|
+
7) Routing & Transitions
|
|
56
|
+
- `on_success`
|
|
57
|
+
- `on_fail`
|
|
58
|
+
- `on_finish`
|
|
59
|
+
|
|
60
|
+
8) Runtime Controls
|
|
61
|
+
- `timeout`, `retries/backoff`, `env`
|
|
62
|
+
- `namespace`, `reuse_ai_session`, `session_mode`
|
|
63
|
+
|
|
64
|
+
9) Output Formatting
|
|
65
|
+
- `template: { content | file }`
|
|
66
|
+
- `message`, `level` (for `log`)
|
|
67
|
+
|
|
68
|
+
## Criticality & Contracts (Default Safety)
|
|
69
|
+
|
|
70
|
+
- `external`: side effects outside the repo/CI boundary (e.g., GitHub ops, webhooks).
|
|
71
|
+
- Require a precondition: `assume` (preferred) or `if`.
|
|
72
|
+
- If output‑producing, also require a post‑exec contract: `schema` or `guarantee`.
|
|
73
|
+
- Logical failures (schema/guarantee/fail_if) are not auto‑retried.
|
|
74
|
+
|
|
75
|
+
- `internal`: orchestration/state within CI/repo (formerly “control‑plane”).
|
|
76
|
+
- Same enforcement as `external` (precondition + contract for output steps).
|
|
77
|
+
- No auto‑retry for logical failures.
|
|
78
|
+
|
|
79
|
+
- `policy`: evaluative checks (security/perf/quality/docs). Optional guards/contracts.
|
|
80
|
+
|
|
81
|
+
- `info`: purely informational; never gates dependents. Good for exploratory or advisory steps.
|
|
82
|
+
|
|
83
|
+
Notes
|
|
84
|
+
- Global `fail_if` is non‑gating by design; it marks the run status but must not block dependents.
|
|
85
|
+
- Check‑level `fail_if` is gating (treated as fatal for routing).
|
|
86
|
+
|
|
87
|
+
## Declarative Flow > Imperative Glue
|
|
88
|
+
|
|
89
|
+
- Prefer `transitions` under `on_success` / `on_fail` / `on_finish` over imperative `goto_js`.
|
|
90
|
+
- Keep transition expressions short, pure, and readable; use optional chaining and nullish coalescing for safety.
|
|
91
|
+
|
|
92
|
+
Example
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
on_finish:
|
|
96
|
+
transitions:
|
|
97
|
+
- when: "any(outputs_history['validate-fact'], v => v?.is_valid === false) && event.name === 'issue_opened'"
|
|
98
|
+
to: issue-assistant
|
|
99
|
+
- when: "any(outputs_history['validate-fact'], v => v?.is_valid === false) && event.name === 'issue_comment'"
|
|
100
|
+
to: comment-assistant
|
|
101
|
+
- when: "all(outputs_history['validate-fact'], v => v?.is_valid === true)"
|
|
102
|
+
to: null
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## forEach (Fan‑Out) Patterns
|
|
106
|
+
|
|
107
|
+
- Use `forEach: true` on the parent that produces an array; children with `fanout: map` run per item; with `fanout: reduce` run once (aggregate).
|
|
108
|
+
- Empty arrays should skip dependents with a visible message and not increment stats.
|
|
109
|
+
- Aggregate parents should route (on_success/on_fail) before committing; dependents read per‑scope outputs.
|
|
110
|
+
|
|
111
|
+
Minimal Map + Aggregate
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
extract-facts:
|
|
115
|
+
type: ai
|
|
116
|
+
on: [issue_opened]
|
|
117
|
+
forEach: true
|
|
118
|
+
prompt: |
|
|
119
|
+
Return JSON array of facts: [{ id, claim, verifiable }]
|
|
120
|
+
schema:
|
|
121
|
+
type: array
|
|
122
|
+
items:
|
|
123
|
+
type: object
|
|
124
|
+
required: [id, claim, verifiable]
|
|
125
|
+
|
|
126
|
+
validate-fact:
|
|
127
|
+
type: ai
|
|
128
|
+
on: [issue_opened]
|
|
129
|
+
depends_on: [extract-facts]
|
|
130
|
+
fanout: map
|
|
131
|
+
prompt: "Validate: {{ outputs['extract-facts'].claim }}"
|
|
132
|
+
|
|
133
|
+
aggregate:
|
|
134
|
+
type: script
|
|
135
|
+
on: [issue_opened]
|
|
136
|
+
depends_on: [validate-fact]
|
|
137
|
+
content: |
|
|
138
|
+
const all = (outputs.history['validate-fact']||[]).filter(Boolean);
|
|
139
|
+
return { all_valid: all.every(v => v?.is_valid === true) };
|
|
140
|
+
schema:
|
|
141
|
+
type: object
|
|
142
|
+
required: [all_valid]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## GitHub Ops (External)
|
|
146
|
+
|
|
147
|
+
- Normalize values at the provider; still use `assume` to guard empties.
|
|
148
|
+
- Keep idempotency: label adds/sets should tolerate duplicates and ordering.
|
|
149
|
+
|
|
150
|
+
Example
|
|
151
|
+
|
|
152
|
+
```yaml
|
|
153
|
+
apply-issue-labels:
|
|
154
|
+
type: github
|
|
155
|
+
criticality: external
|
|
156
|
+
on: [issue_opened]
|
|
157
|
+
depends_on: [issue-assistant]
|
|
158
|
+
assume:
|
|
159
|
+
- "(outputs['issue-assistant']?.labels?.length ?? 0) > 0"
|
|
160
|
+
op: labels.add
|
|
161
|
+
values:
|
|
162
|
+
- "{{ outputs['issue-assistant'].labels | default: [] | json }}"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Memory & Idempotency
|
|
166
|
+
|
|
167
|
+
- Use `namespace` to avoid collisions.
|
|
168
|
+
- Treat memory reads in `assume`/`if` as guards only; avoid side effects in expressions.
|
|
169
|
+
- For external calls, design retry‑safe operations (check‑before‑write, idempotency keys).
|
|
170
|
+
|
|
171
|
+
## YAML Style
|
|
172
|
+
|
|
173
|
+
- Prefer block arrays/lists over inline `[]` unless trivially short.
|
|
174
|
+
- Quote JS expressions in `assume`/`if` using double quotes.
|
|
175
|
+
- Use `|` for multiline `prompt`/`content`; avoid trailing whitespace.
|
|
176
|
+
- Keep keys in the recommended order across all steps.
|
|
177
|
+
|
|
178
|
+
## Do’s and Don’ts
|
|
179
|
+
|
|
180
|
+
Do
|
|
181
|
+
- Declare `criticality` and follow the guard/contract rules for `external`/`internal`.
|
|
182
|
+
- Keep expressions short and defensive: `outputs?.x?.length ?? 0`.
|
|
183
|
+
- Add `schema` whenever output shape matters (AI/script/command/http).
|
|
184
|
+
|
|
185
|
+
Don’t
|
|
186
|
+
- Hide control flow in templates or long `*_js` snippets.
|
|
187
|
+
- Mix unrelated responsibilities in a single step.
|
|
188
|
+
- Depend on outputs you didn’t guard (always use `assume`).
|
|
189
|
+
|
|
190
|
+
## Quick Checklist (Per Step)
|
|
191
|
+
|
|
192
|
+
- Identity: `type`, `criticality`, `group` set?
|
|
193
|
+
- When: `on` clear and minimal?
|
|
194
|
+
- Inputs: `depends_on` accurate? `assume` present for risky reads?
|
|
195
|
+
- How: provider config minimal and readable?
|
|
196
|
+
- Contracts: `schema` or `guarantee` (required for external/internal outputs)?
|
|
197
|
+
- Policies: `fail_if` only for step‑specific gating?
|
|
198
|
+
- Flow: transitions (`on_success`/`on_fail`/`on_finish`) instead of imperative glue?
|
|
199
|
+
- Controls: timeouts and env only when necessary?
|
|
200
|
+
|
|
201
|
+
## Complete Example (Well‑Structured External Labeling)
|
|
202
|
+
|
|
203
|
+
```yaml
|
|
204
|
+
apply-overview-labels:
|
|
205
|
+
type: github
|
|
206
|
+
criticality: external
|
|
207
|
+
tags: [github]
|
|
208
|
+
on: [pr_opened]
|
|
209
|
+
depends_on: [overview]
|
|
210
|
+
assume:
|
|
211
|
+
- "outputs['overview']?.tags?.label"
|
|
212
|
+
- "outputs['overview']?.tags?.['review-effort'] != null"
|
|
213
|
+
op: labels.add
|
|
214
|
+
values:
|
|
215
|
+
- "{{ outputs.overview.tags.label | default: '' | safe_label }}"
|
|
216
|
+
- "{{ outputs.overview.tags['review-effort'] | default: '' | prepend: 'review/effort:' | safe_label }}"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## References
|
|
220
|
+
|
|
221
|
+
- Fault Management & Contracts
|
|
222
|
+
- Criticality Modes
|
|
223
|
+
- Dependencies & Routing
|
|
224
|
+
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
## 🌐 HTTP Integration & Scheduling
|
|
2
|
+
|
|
3
|
+
Visor provides comprehensive HTTP integration capabilities including webhook reception, HTTP outputs, scheduled executions via cron, and TLS/HTTPS support.
|
|
4
|
+
|
|
5
|
+
### HTTP Server for Webhook Reception
|
|
6
|
+
|
|
7
|
+
Configure an HTTP/HTTPS server to receive webhooks and trigger checks:
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
version: "1.0"
|
|
11
|
+
|
|
12
|
+
http_server:
|
|
13
|
+
enabled: true
|
|
14
|
+
port: 8080
|
|
15
|
+
host: "0.0.0.0"
|
|
16
|
+
|
|
17
|
+
# Optional TLS/HTTPS configuration
|
|
18
|
+
tls:
|
|
19
|
+
enabled: true
|
|
20
|
+
cert: "${TLS_CERT}" # From environment variable
|
|
21
|
+
key: "${TLS_KEY}"
|
|
22
|
+
ca: "${TLS_CA}" # Optional CA certificate
|
|
23
|
+
rejectUnauthorized: true
|
|
24
|
+
|
|
25
|
+
# Authentication
|
|
26
|
+
auth:
|
|
27
|
+
type: bearer_token
|
|
28
|
+
secret: "${WEBHOOK_SECRET}"
|
|
29
|
+
|
|
30
|
+
# Webhook endpoints
|
|
31
|
+
endpoints:
|
|
32
|
+
- path: "/webhook/github"
|
|
33
|
+
name: "github-events"
|
|
34
|
+
- path: "/webhook/jenkins"
|
|
35
|
+
name: "jenkins-builds"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Note: The HTTP server is automatically disabled when running in GitHub Actions to avoid conflicts.
|
|
39
|
+
|
|
40
|
+
### Check Types for HTTP Integration
|
|
41
|
+
|
|
42
|
+
#### 1. HTTP Input (Webhook Receiver)
|
|
43
|
+
Receive data from configured webhook endpoints:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
steps:
|
|
47
|
+
github-webhook:
|
|
48
|
+
type: http_input
|
|
49
|
+
endpoint: "/webhook/github"
|
|
50
|
+
on: [webhook_received]
|
|
51
|
+
transform: |
|
|
52
|
+
{
|
|
53
|
+
"event": "{{ webhook.action }}",
|
|
54
|
+
"repository": "{{ webhook.repository.full_name }}"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### 2. HTTP Output (Send Data)
|
|
59
|
+
Send check results to external services:
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
steps:
|
|
63
|
+
notify-external:
|
|
64
|
+
type: http
|
|
65
|
+
depends_on: [security-check]
|
|
66
|
+
url: "https://api.example.com/notify"
|
|
67
|
+
method: POST
|
|
68
|
+
headers:
|
|
69
|
+
Content-Type: "application/json"
|
|
70
|
+
Authorization: "Bearer ${API_TOKEN}"
|
|
71
|
+
body: |
|
|
72
|
+
{
|
|
73
|
+
"results": {{ outputs['security-check'] | json }},
|
|
74
|
+
"timestamp": "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### 3. HTTP Client (Fetch Data)
|
|
79
|
+
Fetch data from external APIs:
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
steps:
|
|
83
|
+
fetch-config:
|
|
84
|
+
type: http_client
|
|
85
|
+
url: "https://api.example.com/config"
|
|
86
|
+
method: GET
|
|
87
|
+
headers:
|
|
88
|
+
Authorization: "Bearer ${API_TOKEN}"
|
|
89
|
+
transform: |
|
|
90
|
+
{
|
|
91
|
+
"settings": {{ response.data | json }},
|
|
92
|
+
"fetched_at": "{{ 'now' | date: '%Y-%m-%d' }}"
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### 4. Log Provider (Debugging & Monitoring)
|
|
97
|
+
Output debugging information and monitor workflow execution:
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
steps:
|
|
101
|
+
debug-start:
|
|
102
|
+
type: log
|
|
103
|
+
group: debugging
|
|
104
|
+
level: info
|
|
105
|
+
message: "🚀 Starting code review for PR #{{ pr.number }} by {{ pr.author }}"
|
|
106
|
+
include_pr_context: true
|
|
107
|
+
include_dependencies: false
|
|
108
|
+
include_metadata: true
|
|
109
|
+
|
|
110
|
+
debug-dependencies:
|
|
111
|
+
type: log
|
|
112
|
+
group: debugging
|
|
113
|
+
level: debug
|
|
114
|
+
depends_on: [security-check]
|
|
115
|
+
message: |
|
|
116
|
+
📊 Dependency results summary:
|
|
117
|
+
{% if dependencies %}
|
|
118
|
+
- Security check found {{ dependencies['security-check'].issueCount }} issues
|
|
119
|
+
{% else %}
|
|
120
|
+
- No dependencies processed
|
|
121
|
+
{% endif %}
|
|
122
|
+
include_dependencies: true
|
|
123
|
+
|
|
124
|
+
performance-monitor:
|
|
125
|
+
type: log
|
|
126
|
+
group: monitoring
|
|
127
|
+
level: warn
|
|
128
|
+
message: "⚠️ Large PR detected: {{ pr.totalAdditions }} lines added"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Cron Scheduling
|
|
132
|
+
|
|
133
|
+
```yaml
|
|
134
|
+
steps:
|
|
135
|
+
nightly-security-scan:
|
|
136
|
+
type: ai
|
|
137
|
+
schedule: "0 3 * * *" # Every day at 3am
|
|
138
|
+
prompt: "Run a deep security scan on the default branch"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
steps:
|
|
143
|
+
weekly-health-check:
|
|
144
|
+
type: http_client
|
|
145
|
+
url: "https://api.example.com/health"
|
|
146
|
+
schedule: "0 0 * * 0" # Every Sunday at midnight
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### TLS/HTTPS Configuration
|
|
150
|
+
|
|
151
|
+
You can configure TLS using environment variables, direct file paths, or Let's Encrypt.
|
|
152
|
+
|
|
153
|
+
#### Environment Variables
|
|
154
|
+
```yaml
|
|
155
|
+
tls:
|
|
156
|
+
enabled: true
|
|
157
|
+
cert: "${TLS_CERT}"
|
|
158
|
+
key: "${TLS_KEY}"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
#### File Paths
|
|
162
|
+
```yaml
|
|
163
|
+
tls:
|
|
164
|
+
enabled: true
|
|
165
|
+
cert: "/etc/ssl/certs/server.crt"
|
|
166
|
+
key: "/etc/ssl/private/server.key"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### Let's Encrypt
|
|
170
|
+
```yaml
|
|
171
|
+
tls:
|
|
172
|
+
enabled: true
|
|
173
|
+
cert: "/etc/letsencrypt/live/example.com/fullchain.pem"
|
|
174
|
+
key: "/etc/letsencrypt/live/example.com/privkey.pem"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### HTTP Security Features
|
|
178
|
+
|
|
179
|
+
Visor's HTTP server includes comprehensive security protections:
|
|
180
|
+
|
|
181
|
+
#### Authentication Methods
|
|
182
|
+
```yaml
|
|
183
|
+
# Bearer Token Authentication
|
|
184
|
+
auth:
|
|
185
|
+
type: bearer_token
|
|
186
|
+
secret: "${WEBHOOK_SECRET}"
|
|
187
|
+
|
|
188
|
+
# HMAC-SHA256 Signature Verification
|
|
189
|
+
auth:
|
|
190
|
+
type: hmac
|
|
191
|
+
secret: "${WEBHOOK_SECRET}"
|
|
192
|
+
|
|
193
|
+
# Basic Authentication
|
|
194
|
+
auth:
|
|
195
|
+
type: basic
|
|
196
|
+
username: "${HTTP_USERNAME}"
|
|
197
|
+
password: "${HTTP_PASSWORD}"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
#### HMAC Authentication Details
|
|
201
|
+
For `hmac` authentication, webhooks must include the `x-webhook-signature` header:
|
|
202
|
+
- Signature format: `sha256={hash}`
|
|
203
|
+
- Uses HMAC-SHA256 with the configured secret
|
|
204
|
+
- Implements timing-safe comparison to prevent timing attacks
|
|
205
|
+
- Compatible with GitHub webhook signatures
|
|
206
|
+
|
|
207
|
+
#### DoS Protection
|
|
208
|
+
- Request size limits: Maximum 1MB request body size
|
|
209
|
+
- Early rejection: Validates `Content-Length` header before processing
|
|
210
|
+
- Graceful error handling: Returns proper HTTP status codes (413 Payload Too Large)
|
|
211
|
+
|
|
212
|
+
#### Security Best Practices
|
|
213
|
+
- Environment detection: Automatically disables in GitHub Actions
|
|
214
|
+
- TLS support: Full HTTPS configuration with custom certificates
|
|
215
|
+
- Input validation: Validates all webhook payloads before processing
|
|
216
|
+
- Error isolation: Security failures don't affect independent checks
|
|
217
|
+
|
|
218
|
+
### Complete HTTP Pipeline Example
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
version: "1.0"
|
|
222
|
+
|
|
223
|
+
# HTTP server configuration
|
|
224
|
+
http_server:
|
|
225
|
+
enabled: true
|
|
226
|
+
port: 8443
|
|
227
|
+
tls:
|
|
228
|
+
enabled: true
|
|
229
|
+
cert: "${TLS_CERT}"
|
|
230
|
+
key: "${TLS_KEY}"
|
|
231
|
+
auth:
|
|
232
|
+
type: bearer_token
|
|
233
|
+
secret: "${WEBHOOK_SECRET}"
|
|
234
|
+
endpoints:
|
|
235
|
+
- path: "/webhook/deployment"
|
|
236
|
+
name: "deployment-trigger"
|
|
237
|
+
|
|
238
|
+
steps:
|
|
239
|
+
# 1. Receive webhook
|
|
240
|
+
deployment-webhook:
|
|
241
|
+
type: http_input
|
|
242
|
+
endpoint: "/webhook/deployment"
|
|
243
|
+
on: [webhook_received]
|
|
244
|
+
transform: |
|
|
245
|
+
{
|
|
246
|
+
"version": "{{ webhook.version }}",
|
|
247
|
+
"environment": "{{ webhook.environment }}"
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
# 2. Analyze deployment
|
|
251
|
+
deployment-analysis:
|
|
252
|
+
type: ai
|
|
253
|
+
depends_on: [deployment-webhook]
|
|
254
|
+
prompt: |
|
|
255
|
+
Analyze deployment for version {{ outputs['deployment-webhook'].suggestions | first }}
|
|
256
|
+
Check for potential issues and risks
|
|
257
|
+
|
|
258
|
+
# 3. Fetch current status
|
|
259
|
+
current-status:
|
|
260
|
+
type: http_client
|
|
261
|
+
depends_on: [deployment-webhook]
|
|
262
|
+
url: "https://api.example.com/status"
|
|
263
|
+
method: GET
|
|
264
|
+
|
|
265
|
+
# 4. Send results
|
|
266
|
+
notify-team:
|
|
267
|
+
type: http
|
|
268
|
+
depends_on: [deployment-analysis, current-status]
|
|
269
|
+
url: "https://slack.example.com/webhook"
|
|
270
|
+
body: |
|
|
271
|
+
{
|
|
272
|
+
"text": "Deployment Analysis Complete",
|
|
273
|
+
"analysis": {{ outputs['deployment-analysis'] | json }},
|
|
274
|
+
"current_status": {{ outputs['current-status'] | json }}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
# 5. Scheduled health check
|
|
278
|
+
health-check:
|
|
279
|
+
type: http_client
|
|
280
|
+
url: "https://api.example.com/health"
|
|
281
|
+
schedule: "*/5 * * * *" # Every 5 minutes
|
|
282
|
+
transform: |
|
|
283
|
+
{
|
|
284
|
+
"status": "{{ response.status }}",
|
|
285
|
+
"checked_at": "{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}"
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Liquid Template Support
|
|
290
|
+
|
|
291
|
+
All HTTP configurations support Liquid templating for dynamic content. See [Liquid Templates Guide](./liquid-templates.md) for complete reference.
|
|
292
|
+
|
|
293
|
+
Common patterns:
|
|
294
|
+
- Access webhook data: `{{ webhook.field }}`
|
|
295
|
+
- Access headers: `{{ headers['x-custom-header'] }}`
|
|
296
|
+
- Access previous outputs: `{{ outputs['check-name'].suggestions | first }}`
|
|
297
|
+
- Date formatting: `{{ 'now' | date: '%Y-%m-%d' }}`
|
|
298
|
+
- JSON encoding: `{{ data | json }}` (useful for debugging objects)
|
|
299
|
+
|