@probelabs/visor 0.1.106 → 0.1.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -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 +620 -0
- package/defaults/visor.tests.yaml +674 -0
- package/defaults/visor.yaml +482 -0
- package/dist/663.index.js +2 -3
- package/dist/80.index.js +2 -3
- 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 +15 -0
- 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.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 +620 -0
- package/dist/defaults/visor.tests.yaml +674 -0
- package/dist/defaults/visor.yaml +482 -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 +178 -0
- package/dist/docs/ai-configuration.md +468 -0
- package/dist/docs/author-permissions.md +610 -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 +303 -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-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/limits.md +64 -0
- package/dist/docs/liquid-templates.md +347 -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/recipes.md +21 -0
- package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -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 +57 -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-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/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/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/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/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 +1 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts +38 -0
- package/dist/frontends/github-frontend.d.ts.map +1 -0
- package/dist/frontends/host.d.ts +43 -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/generated/config-schema.d.ts +564 -22
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +612 -24
- 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 +0 -4
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70335 -62514
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/logger.d.ts +1 -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-2025-11-21T11-50-46-505Z.ndjson +138 -0
- package/dist/output/traces/run-2025-11-21T11-51-33-674Z.ndjson +839 -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.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 +34 -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/github-ops-provider.d.ts.map +1 -1
- package/dist/providers/http-client-provider.d.ts +1 -4
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/human-input-check-provider.d.ts +3 -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 +9 -3
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- 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/chunk-37ZSCMFC.mjs +482 -0
- package/dist/sdk/chunk-37ZSCMFC.mjs.map +1 -0
- package/dist/sdk/chunk-6Y4YTKCF.mjs +197 -0
- package/dist/sdk/chunk-6Y4YTKCF.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-IEO6CFLG.mjs +1215 -0
- package/dist/sdk/chunk-IEO6CFLG.mjs.map +1 -0
- package/dist/sdk/chunk-JEHPDJIF.mjs +223 -0
- package/dist/sdk/chunk-JEHPDJIF.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-TUTOLSFV.mjs → chunk-OOZITMRU.mjs} +1 -1
- package/dist/sdk/chunk-OOZITMRU.mjs.map +1 -0
- package/dist/sdk/chunk-OWUVOILT.mjs +557 -0
- package/dist/sdk/chunk-OWUVOILT.mjs.map +1 -0
- package/dist/sdk/chunk-OZJ263FM.mjs +986 -0
- package/dist/sdk/chunk-OZJ263FM.mjs.map +1 -0
- package/dist/sdk/chunk-PTL3K3PN.mjs +3128 -0
- package/dist/sdk/chunk-PTL3K3PN.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-VMPLF6FT.mjs +127 -0
- package/dist/sdk/chunk-VMPLF6FT.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/config-M4ZNO6NU.mjs +14 -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-NBO5YRXW.mjs +16 -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-4AWRJT7D.mjs +1242 -0
- package/dist/sdk/github-frontend-4AWRJT7D.mjs.map +1 -0
- package/dist/sdk/host-7GBC3S7L.mjs +49 -0
- package/dist/sdk/host-7GBC3S7L.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-C7EG3YKH.mjs} +7 -2
- package/dist/sdk/memory-store-GJACZC2A.mjs +11 -0
- package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
- package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
- package/dist/sdk/renderer-schema-6RF26VUS.mjs +50 -0
- package/dist/sdk/renderer-schema-6RF26VUS.mjs.map +1 -0
- package/dist/sdk/routing-RP56JTV2.mjs +23 -0
- package/dist/sdk/routing-RP56JTV2.mjs.map +1 -0
- package/dist/sdk/sdk.d.mts +326 -21
- package/dist/sdk/sdk.d.ts +326 -21
- package/dist/sdk/sdk.js +21403 -16366
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +13510 -2096
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/session-registry-N5FFYFTM.mjs +10 -0
- package/dist/sdk/session-registry-N5FFYFTM.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-WP4X46IF.mjs} +2 -2
- package/dist/sdk/tracer-init-WP4X46IF.mjs.map +1 -0
- package/dist/sdk/workflow-registry-2YIIXQCK.mjs +11 -0
- package/dist/sdk/workflow-registry-2YIIXQCK.mjs.map +1 -0
- package/dist/sdk.d.ts.map +1 -1
- 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 +9 -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/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 +73 -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 +147 -0
- package/dist/state-machine-execution-engine.d.ts.map +1 -0
- package/dist/telemetry/opentelemetry.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 +12 -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 +120 -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/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-2025-11-21T11-50-46-505Z.ndjson +138 -0
- package/dist/traces/run-2025-11-21T11-51-33-674Z.ndjson +839 -0
- package/dist/types/cli.d.ts +4 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts +278 -5
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +172 -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/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/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 +7 -0
- package/dist/utils/template-context.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 +10 -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 → config-M4ZNO6NU.mjs.map} +0 -0
- /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
- /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → failure-condition-evaluator-NBO5YRXW.mjs.map} +0 -0
- /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → liquid-extensions-C7EG3YKH.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → memory-store-GJACZC2A.mjs.map} +0 -0
- /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → metrics-7PP3EJUH.mjs.map} +0 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
|
|
3
|
+
# Complete example of HTTP integration features
|
|
4
|
+
# Demonstrates http, http_input, and http_client check types
|
|
5
|
+
|
|
6
|
+
# HTTP server for receiving webhooks (disabled in GitHub Actions)
|
|
7
|
+
http_server:
|
|
8
|
+
enabled: true
|
|
9
|
+
port: 8080
|
|
10
|
+
host: "0.0.0.0"
|
|
11
|
+
auth:
|
|
12
|
+
type: bearer_token
|
|
13
|
+
secret: "${HTTP_SERVER_SECRET}" # Environment variable
|
|
14
|
+
endpoints:
|
|
15
|
+
- path: "/github/webhook"
|
|
16
|
+
name: "github-events"
|
|
17
|
+
- path: "/monitoring/health"
|
|
18
|
+
name: "health-checks"
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
# === HTTP CLIENT: Fetch data from external APIs ===
|
|
22
|
+
|
|
23
|
+
# Fetch repository statistics from GitHub API
|
|
24
|
+
github-stats:
|
|
25
|
+
type: http_client
|
|
26
|
+
url: "https://api.github.com/repos/{{ pr.base | split: '/' | last }}/stats/contributors"
|
|
27
|
+
headers:
|
|
28
|
+
Authorization: "token ${GITHUB_TOKEN}"
|
|
29
|
+
Accept: "application/vnd.github.v3+json"
|
|
30
|
+
transform: |
|
|
31
|
+
{
|
|
32
|
+
"total_contributors": {{ response | size }},
|
|
33
|
+
"top_contributor": "{{ response | first | map: 'author.login' }}",
|
|
34
|
+
"total_commits": {{ response | map: 'total' | sum }}
|
|
35
|
+
}
|
|
36
|
+
schedule: "0 0 * * 0" # Weekly on Sunday
|
|
37
|
+
|
|
38
|
+
# Fetch build status from CI/CD system
|
|
39
|
+
ci-status:
|
|
40
|
+
type: http_client
|
|
41
|
+
url: "${CI_API_URL}/builds/{{ pr.head }}"
|
|
42
|
+
method: GET
|
|
43
|
+
headers:
|
|
44
|
+
X-API-Key: "${CI_API_KEY}"
|
|
45
|
+
transform: |
|
|
46
|
+
{
|
|
47
|
+
"build_status": "{{ response.status }}",
|
|
48
|
+
"test_coverage": {{ response.coverage }},
|
|
49
|
+
"failed_tests": {{ response.failed_tests | default: 0 }}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Poll external service with POST request
|
|
53
|
+
vulnerability-check:
|
|
54
|
+
type: http_client
|
|
55
|
+
url: "${SECURITY_API_URL}/scan"
|
|
56
|
+
method: POST
|
|
57
|
+
body: |
|
|
58
|
+
{
|
|
59
|
+
"repository": "{{ pr.base }}",
|
|
60
|
+
"commit": "{{ pr.head }}",
|
|
61
|
+
"files": {{ pr.files | map: 'filename' | json }}
|
|
62
|
+
}
|
|
63
|
+
headers:
|
|
64
|
+
Content-Type: "application/json"
|
|
65
|
+
Authorization: "Bearer ${SECURITY_API_TOKEN}"
|
|
66
|
+
transform: |
|
|
67
|
+
{
|
|
68
|
+
"vulnerabilities": {{ response.vulnerabilities | default: [] | json }},
|
|
69
|
+
"risk_score": {{ response.risk_score | default: 0 }}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# === HTTP INPUT: Receive webhook data ===
|
|
73
|
+
|
|
74
|
+
# Receive GitHub webhook events
|
|
75
|
+
github-webhook-receiver:
|
|
76
|
+
type: http_input
|
|
77
|
+
endpoint: "/github/webhook"
|
|
78
|
+
on: [webhook_received]
|
|
79
|
+
transform: |
|
|
80
|
+
{
|
|
81
|
+
"event": "{{ webhook.action }}",
|
|
82
|
+
"repository": "{{ webhook.repository.full_name }}",
|
|
83
|
+
"sender": "{{ webhook.sender.login }}"
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# Receive monitoring health checks
|
|
87
|
+
health-check-receiver:
|
|
88
|
+
type: http_input
|
|
89
|
+
endpoint: "/monitoring/health"
|
|
90
|
+
on: [webhook_received]
|
|
91
|
+
|
|
92
|
+
# === AI ANALYSIS: Process fetched/received data ===
|
|
93
|
+
|
|
94
|
+
# Analyze GitHub statistics
|
|
95
|
+
contributor-analysis:
|
|
96
|
+
type: ai
|
|
97
|
+
depends_on: [github-stats]
|
|
98
|
+
prompt: |
|
|
99
|
+
Analyze the repository contributor statistics:
|
|
100
|
+
- Total contributors: {{ outputs['github-stats'].suggestions | first | parse_json: 'total_contributors' }}
|
|
101
|
+
- Top contributor: {{ outputs['github-stats'].suggestions | first | parse_json: 'top_contributor' }}
|
|
102
|
+
- Total commits: {{ outputs['github-stats'].suggestions | first | parse_json: 'total_commits' }}
|
|
103
|
+
|
|
104
|
+
Provide insights on:
|
|
105
|
+
1. Contribution patterns
|
|
106
|
+
2. Bus factor risks
|
|
107
|
+
3. Recommendations for improving collaboration
|
|
108
|
+
group: analytics
|
|
109
|
+
|
|
110
|
+
# Analyze CI/CD status
|
|
111
|
+
build-analysis:
|
|
112
|
+
type: ai
|
|
113
|
+
depends_on: [ci-status]
|
|
114
|
+
prompt: |
|
|
115
|
+
CI/CD Build Analysis:
|
|
116
|
+
{{ outputs['ci-status'].suggestions | first }}
|
|
117
|
+
|
|
118
|
+
Evaluate:
|
|
119
|
+
1. Build health and stability
|
|
120
|
+
2. Test coverage adequacy
|
|
121
|
+
3. Failed test patterns
|
|
122
|
+
4. Recommendations for improvement
|
|
123
|
+
group: ci-cd
|
|
124
|
+
|
|
125
|
+
# Security assessment based on vulnerability scan
|
|
126
|
+
security-assessment:
|
|
127
|
+
type: ai
|
|
128
|
+
depends_on: [vulnerability-check]
|
|
129
|
+
prompt: |
|
|
130
|
+
Security Vulnerability Assessment:
|
|
131
|
+
{{ outputs['vulnerability-check'].suggestions | first }}
|
|
132
|
+
|
|
133
|
+
Provide:
|
|
134
|
+
1. Risk assessment summary
|
|
135
|
+
2. Critical vulnerabilities that need immediate attention
|
|
136
|
+
3. Remediation priorities
|
|
137
|
+
4. Security best practices recommendations
|
|
138
|
+
group: security
|
|
139
|
+
|
|
140
|
+
# === HTTP OUTPUT: Send results to external services ===
|
|
141
|
+
|
|
142
|
+
# Send analysis to Slack
|
|
143
|
+
slack-notification:
|
|
144
|
+
type: http
|
|
145
|
+
depends_on: [contributor-analysis, build-analysis]
|
|
146
|
+
url: "${SLACK_WEBHOOK_URL}"
|
|
147
|
+
method: POST
|
|
148
|
+
body: |
|
|
149
|
+
{
|
|
150
|
+
"text": "Repository Analysis Complete",
|
|
151
|
+
"attachments": [
|
|
152
|
+
{
|
|
153
|
+
"color": "good",
|
|
154
|
+
"title": "Contributor Analysis",
|
|
155
|
+
"text": "{{ outputs['contributor-analysis'].suggestions | first | truncate: 200 }}"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"color": "{{ outputs['ci-status'].suggestions | first | parse_json: 'build_status' == 'passed' ? 'good' : 'danger' }}",
|
|
159
|
+
"title": "Build Status",
|
|
160
|
+
"text": "{{ outputs['build-analysis'].suggestions | first | truncate: 200 }}"
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
# Send metrics to monitoring system
|
|
166
|
+
metrics-export:
|
|
167
|
+
type: http
|
|
168
|
+
depends_on: [github-stats, ci-status]
|
|
169
|
+
url: "${METRICS_ENDPOINT}"
|
|
170
|
+
method: POST
|
|
171
|
+
headers:
|
|
172
|
+
Content-Type: "application/json"
|
|
173
|
+
X-API-Key: "${METRICS_API_KEY}"
|
|
174
|
+
body: |
|
|
175
|
+
{
|
|
176
|
+
"timestamp": "{{ 'now' | date: '%Y-%m-%dT%H:%M:%S' }}",
|
|
177
|
+
"metrics": {
|
|
178
|
+
"contributors": {{ outputs['github-stats'].suggestions | first | parse_json: 'total_contributors' }},
|
|
179
|
+
"commits": {{ outputs['github-stats'].suggestions | first | parse_json: 'total_commits' }},
|
|
180
|
+
"test_coverage": {{ outputs['ci-status'].suggestions | first | parse_json: 'test_coverage' }},
|
|
181
|
+
"failed_tests": {{ outputs['ci-status'].suggestions | first | parse_json: 'failed_tests' }}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
# Create JIRA ticket for critical vulnerabilities
|
|
186
|
+
jira-ticket:
|
|
187
|
+
type: http
|
|
188
|
+
depends_on: [vulnerability-check]
|
|
189
|
+
if: "outputs['vulnerability-check'].suggestions | first | parse_json: 'risk_score' > 7"
|
|
190
|
+
url: "${JIRA_API_URL}/rest/api/2/issue"
|
|
191
|
+
method: POST
|
|
192
|
+
headers:
|
|
193
|
+
Authorization: "Basic ${JIRA_AUTH}"
|
|
194
|
+
Content-Type: "application/json"
|
|
195
|
+
body: |
|
|
196
|
+
{
|
|
197
|
+
"fields": {
|
|
198
|
+
"project": { "key": "SEC" },
|
|
199
|
+
"summary": "Critical vulnerabilities detected in {{ pr.base }}",
|
|
200
|
+
"description": "Risk Score: {{ outputs['vulnerability-check'].suggestions | first | parse_json: 'risk_score' }}\n\nVulnerabilities:\n{{ outputs['vulnerability-check'].suggestions | first | parse_json: 'vulnerabilities' | json }}",
|
|
201
|
+
"issuetype": { "name": "Bug" },
|
|
202
|
+
"priority": { "name": "Critical" }
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
# === SCHEDULED AGGREGATION ===
|
|
207
|
+
|
|
208
|
+
# Daily summary that combines multiple data sources
|
|
209
|
+
daily-report:
|
|
210
|
+
type: http_client
|
|
211
|
+
schedule: "0 18 * * *" # 6 PM daily
|
|
212
|
+
url: "${ANALYTICS_API}/daily-summary"
|
|
213
|
+
method: GET
|
|
214
|
+
transform: |
|
|
215
|
+
{
|
|
216
|
+
"date": "{{ 'now' | date: '%Y-%m-%d' }}",
|
|
217
|
+
"summary": {{ response | json }}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
# Send daily report via email service
|
|
221
|
+
email-report:
|
|
222
|
+
type: http
|
|
223
|
+
depends_on: [daily-report]
|
|
224
|
+
url: "${EMAIL_SERVICE_URL}/send"
|
|
225
|
+
method: POST
|
|
226
|
+
headers:
|
|
227
|
+
Authorization: "Bearer ${EMAIL_API_KEY}"
|
|
228
|
+
body: |
|
|
229
|
+
{
|
|
230
|
+
"to": ["team@example.com"],
|
|
231
|
+
"subject": "Daily Visor Report - {{ 'now' | date: '%Y-%m-%d' }}",
|
|
232
|
+
"html": "<h1>Daily Summary</h1><pre>{{ outputs['daily-report'].suggestions | first }}</pre>"
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
output:
|
|
236
|
+
pr_comment:
|
|
237
|
+
format: markdown
|
|
238
|
+
group_by: check
|
|
239
|
+
collapse: true
|
|
240
|
+
suppressionEnabled: true
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
|
|
3
|
+
# Example of HTTPS server configuration with TLS/SSL
|
|
4
|
+
# Note: This server is automatically disabled when running in GitHub Actions
|
|
5
|
+
|
|
6
|
+
http_server:
|
|
7
|
+
enabled: true
|
|
8
|
+
port: 8443 # Standard HTTPS port
|
|
9
|
+
host: "0.0.0.0"
|
|
10
|
+
|
|
11
|
+
# TLS/SSL Configuration Options
|
|
12
|
+
tls:
|
|
13
|
+
enabled: true
|
|
14
|
+
|
|
15
|
+
# Option 1: File paths to certificates
|
|
16
|
+
# cert: "/path/to/server.crt"
|
|
17
|
+
# key: "/path/to/server.key"
|
|
18
|
+
# ca: "/path/to/ca.crt" # Optional: CA certificate
|
|
19
|
+
|
|
20
|
+
# Option 2: Environment variables containing certificate content
|
|
21
|
+
cert: "${TLS_CERT}" # Certificate content from environment variable
|
|
22
|
+
key: "${TLS_KEY}" # Private key content from environment variable
|
|
23
|
+
ca: "${TLS_CA}" # Optional: CA cert from environment variable
|
|
24
|
+
|
|
25
|
+
# Option 3: Inline certificate content (not recommended for production)
|
|
26
|
+
# cert: |
|
|
27
|
+
# -----BEGIN CERTIFICATE-----
|
|
28
|
+
# MIIDXTCCAkWgAwIBAgIJAKLdQVPy90WjMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
|
|
29
|
+
# ... certificate content ...
|
|
30
|
+
# -----END CERTIFICATE-----
|
|
31
|
+
# key: |
|
|
32
|
+
# -----BEGIN PRIVATE KEY-----
|
|
33
|
+
# MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYscr5BQJG
|
|
34
|
+
# ... key content ...
|
|
35
|
+
# -----END PRIVATE KEY-----
|
|
36
|
+
|
|
37
|
+
# Reject unauthorized connections (default: true)
|
|
38
|
+
rejectUnauthorized: true
|
|
39
|
+
|
|
40
|
+
# Authentication for webhook endpoints
|
|
41
|
+
auth:
|
|
42
|
+
type: bearer_token
|
|
43
|
+
secret: "${WEBHOOK_SECRET}"
|
|
44
|
+
|
|
45
|
+
# Webhook endpoints
|
|
46
|
+
endpoints:
|
|
47
|
+
- path: "/webhook/github"
|
|
48
|
+
name: "github-events"
|
|
49
|
+
- path: "/webhook/jenkins"
|
|
50
|
+
name: "jenkins-builds"
|
|
51
|
+
- path: "/webhook/datadog"
|
|
52
|
+
name: "monitoring-alerts"
|
|
53
|
+
|
|
54
|
+
steps:
|
|
55
|
+
# === Webhook receivers for HTTPS endpoints ===
|
|
56
|
+
|
|
57
|
+
github-webhook:
|
|
58
|
+
type: http_input
|
|
59
|
+
endpoint: "/webhook/github"
|
|
60
|
+
on: [webhook_received]
|
|
61
|
+
transform: |
|
|
62
|
+
{
|
|
63
|
+
"event": "{{ webhook.action }}",
|
|
64
|
+
"repository": "{{ webhook.repository.full_name }}",
|
|
65
|
+
"sender": "{{ webhook.sender.login }}",
|
|
66
|
+
"signature": "{{ headers['x-hub-signature-256'] }}"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
jenkins-webhook:
|
|
70
|
+
type: http_input
|
|
71
|
+
endpoint: "/webhook/jenkins"
|
|
72
|
+
on: [webhook_received]
|
|
73
|
+
transform: |
|
|
74
|
+
{
|
|
75
|
+
"job": "{{ webhook.name }}",
|
|
76
|
+
"build": "{{ webhook.build.number }}",
|
|
77
|
+
"status": "{{ webhook.build.status }}",
|
|
78
|
+
"url": "{{ webhook.build.url }}"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
datadog-alert:
|
|
82
|
+
type: http_input
|
|
83
|
+
endpoint: "/webhook/datadog"
|
|
84
|
+
on: [webhook_received]
|
|
85
|
+
transform: |
|
|
86
|
+
{
|
|
87
|
+
"alert": "{{ webhook.title }}",
|
|
88
|
+
"priority": "{{ webhook.priority }}",
|
|
89
|
+
"tags": {{ webhook.tags | json }},
|
|
90
|
+
"event_msg": "{{ webhook.event_msg }}"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
# === Process webhook data ===
|
|
94
|
+
|
|
95
|
+
github-analysis:
|
|
96
|
+
type: ai
|
|
97
|
+
depends_on: [github-webhook]
|
|
98
|
+
prompt: |
|
|
99
|
+
Analyze the GitHub webhook event:
|
|
100
|
+
{{ outputs['github-webhook'].suggestions | first }}
|
|
101
|
+
|
|
102
|
+
Determine:
|
|
103
|
+
1. Security implications
|
|
104
|
+
2. Required actions
|
|
105
|
+
3. Impact assessment
|
|
106
|
+
group: github
|
|
107
|
+
|
|
108
|
+
jenkins-build-analysis:
|
|
109
|
+
type: ai
|
|
110
|
+
depends_on: [jenkins-webhook]
|
|
111
|
+
prompt: |
|
|
112
|
+
Jenkins build notification:
|
|
113
|
+
{{ outputs['jenkins-webhook'].suggestions | first }}
|
|
114
|
+
|
|
115
|
+
Analyze:
|
|
116
|
+
1. Build failure patterns
|
|
117
|
+
2. Performance trends
|
|
118
|
+
3. Recommended fixes
|
|
119
|
+
group: ci-cd
|
|
120
|
+
|
|
121
|
+
monitoring-response:
|
|
122
|
+
type: ai
|
|
123
|
+
depends_on: [datadog-alert]
|
|
124
|
+
prompt: |
|
|
125
|
+
Datadog monitoring alert:
|
|
126
|
+
{{ outputs['datadog-alert'].suggestions | first }}
|
|
127
|
+
|
|
128
|
+
Provide:
|
|
129
|
+
1. Root cause analysis
|
|
130
|
+
2. Immediate remediation steps
|
|
131
|
+
3. Long-term prevention strategies
|
|
132
|
+
group: monitoring
|
|
133
|
+
|
|
134
|
+
# === Send secure notifications ===
|
|
135
|
+
|
|
136
|
+
# Send to secure internal API using HTTPS
|
|
137
|
+
internal-api-notification:
|
|
138
|
+
type: http
|
|
139
|
+
depends_on: [github-analysis, jenkins-build-analysis]
|
|
140
|
+
url: "https://internal-api.example.com/notifications"
|
|
141
|
+
method: POST
|
|
142
|
+
headers:
|
|
143
|
+
Content-Type: "application/json"
|
|
144
|
+
Authorization: "Bearer ${INTERNAL_API_TOKEN}"
|
|
145
|
+
X-TLS-Client-Cert: "${CLIENT_CERT}" # Client certificate for mTLS
|
|
146
|
+
body: |
|
|
147
|
+
{
|
|
148
|
+
"source": "visor",
|
|
149
|
+
"timestamp": "{{ 'now' | date: '%Y-%m-%dT%H:%M:%S' }}",
|
|
150
|
+
"github_analysis": {{ outputs['github-analysis'] | json }},
|
|
151
|
+
"jenkins_analysis": {{ outputs['jenkins-build-analysis'] | json }},
|
|
152
|
+
"secure": true,
|
|
153
|
+
"protocol": "https"
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# Fetch from secure API endpoint
|
|
157
|
+
secure-api-fetch:
|
|
158
|
+
type: http_client
|
|
159
|
+
url: "https://secure-api.example.com/data"
|
|
160
|
+
method: GET
|
|
161
|
+
headers:
|
|
162
|
+
Authorization: "Bearer ${SECURE_API_TOKEN}"
|
|
163
|
+
X-Client-Id: "${CLIENT_ID}"
|
|
164
|
+
# Note: http_client automatically handles HTTPS connections
|
|
165
|
+
transform: |
|
|
166
|
+
{
|
|
167
|
+
"fetched_at": "{{ 'now' | date: '%Y-%m-%dT%H:%M:%S' }}",
|
|
168
|
+
"data": {{ response | json }}
|
|
169
|
+
}
|
|
170
|
+
schedule: "*/30 * * * *" # Every 30 minutes
|
|
171
|
+
|
|
172
|
+
# Production TLS Setup Examples:
|
|
173
|
+
|
|
174
|
+
# 1. Let's Encrypt with Certbot:
|
|
175
|
+
# tls:
|
|
176
|
+
# cert: "/etc/letsencrypt/live/example.com/fullchain.pem"
|
|
177
|
+
# key: "/etc/letsencrypt/live/example.com/privkey.pem"
|
|
178
|
+
|
|
179
|
+
# 2. Self-signed for development:
|
|
180
|
+
# Generate: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
|
|
181
|
+
# tls:
|
|
182
|
+
# cert: "./cert.pem"
|
|
183
|
+
# key: "./key.pem"
|
|
184
|
+
# rejectUnauthorized: false # Allow self-signed in dev
|
|
185
|
+
|
|
186
|
+
# 3. Kubernetes secrets:
|
|
187
|
+
# tls:
|
|
188
|
+
# cert: "${TLS_CERT}" # Mounted from K8s secret
|
|
189
|
+
# key: "${TLS_KEY}" # Mounted from K8s secret
|
|
190
|
+
|
|
191
|
+
# 4. AWS Certificate Manager:
|
|
192
|
+
# Use AWS ALB/NLB for TLS termination, then:
|
|
193
|
+
# tls:
|
|
194
|
+
# enabled: false # TLS handled by load balancer
|
|
195
|
+
# auth:
|
|
196
|
+
# type: bearer_token # Still authenticate requests
|
|
197
|
+
|
|
198
|
+
# 5. Mutual TLS (mTLS):
|
|
199
|
+
# tls:
|
|
200
|
+
# cert: "${SERVER_CERT}"
|
|
201
|
+
# key: "${SERVER_KEY}"
|
|
202
|
+
# ca: "${CLIENT_CA}" # CA to verify client certificates
|
|
203
|
+
# rejectUnauthorized: true
|
|
204
|
+
|
|
205
|
+
output:
|
|
206
|
+
pr_comment:
|
|
207
|
+
format: markdown
|
|
208
|
+
group_by: check
|
|
209
|
+
collapse: true
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
|
|
3
|
+
# Example configuration demonstrating human-input check type
|
|
4
|
+
# This shows various ways to use human-in-the-loop interactions
|
|
5
|
+
|
|
6
|
+
checks:
|
|
7
|
+
# Example 1: Simple approval gate
|
|
8
|
+
approval-gate:
|
|
9
|
+
type: human-input
|
|
10
|
+
prompt: "Do you approve this change? (yes/no)"
|
|
11
|
+
allow_empty: false
|
|
12
|
+
timeout: 300 # 5 minutes in seconds
|
|
13
|
+
|
|
14
|
+
# Example 2: Context collection
|
|
15
|
+
gather-context:
|
|
16
|
+
type: human-input
|
|
17
|
+
prompt: |
|
|
18
|
+
Please provide additional context about this change:
|
|
19
|
+
- What problem does it solve?
|
|
20
|
+
- Are there any risks?
|
|
21
|
+
- Any special deployment considerations?
|
|
22
|
+
placeholder: "Enter context here..."
|
|
23
|
+
multiline: true
|
|
24
|
+
allow_empty: true
|
|
25
|
+
default: "No additional context provided"
|
|
26
|
+
|
|
27
|
+
# Example 3: Conditional workflow
|
|
28
|
+
choose-review-type:
|
|
29
|
+
type: human-input
|
|
30
|
+
prompt: "Select review type: (1) Quick check or (2) Full analysis?"
|
|
31
|
+
allow_empty: false
|
|
32
|
+
|
|
33
|
+
quick-check:
|
|
34
|
+
type: log
|
|
35
|
+
depends_on: [choose-review-type]
|
|
36
|
+
if: "outputs['choose-review-type'] === '1'"
|
|
37
|
+
message: "Running quick check... (selected option: {{ outputs['choose-review-type'] }})"
|
|
38
|
+
|
|
39
|
+
full-analysis:
|
|
40
|
+
type: log
|
|
41
|
+
depends_on: [choose-review-type]
|
|
42
|
+
if: "outputs['choose-review-type'] === '2'"
|
|
43
|
+
message: "Running full analysis... (selected option: {{ outputs['choose-review-type'] }})"
|
|
44
|
+
|
|
45
|
+
# Example 4: Using human input in subsequent checks
|
|
46
|
+
deployment-confirmation:
|
|
47
|
+
type: human-input
|
|
48
|
+
prompt: "Are you ready to deploy? Enter deployment target (staging/production):"
|
|
49
|
+
allow_empty: false
|
|
50
|
+
|
|
51
|
+
deploy:
|
|
52
|
+
type: log
|
|
53
|
+
depends_on: [deployment-confirmation]
|
|
54
|
+
message: |
|
|
55
|
+
Deploying to: {{ outputs['deployment-confirmation'] }}
|
|
56
|
+
|
|
57
|
+
This is where you would trigger your deployment script
|
|
58
|
+
|
|
59
|
+
output:
|
|
60
|
+
pr_comment:
|
|
61
|
+
format: markdown
|
|
62
|
+
group_by: check
|
|
63
|
+
collapse: false
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
|
|
3
|
+
# Example configuration showing how to use if conditions to control check execution
|
|
4
|
+
# The if condition determines whether a check should run based on context
|
|
5
|
+
|
|
6
|
+
steps:
|
|
7
|
+
# Run only on main branch
|
|
8
|
+
production-check:
|
|
9
|
+
type: ai
|
|
10
|
+
schema: code-review
|
|
11
|
+
prompt: "Check production readiness and deployment safety"
|
|
12
|
+
on: [pr_opened, pr_updated]
|
|
13
|
+
if: 'branch == "main" || baseBranch == "main"'
|
|
14
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
15
|
+
|
|
16
|
+
# Run only when there are file changes
|
|
17
|
+
incremental-review:
|
|
18
|
+
type: ai
|
|
19
|
+
schema: code-review
|
|
20
|
+
prompt: "Review changed files for issues"
|
|
21
|
+
on: [pr_opened, pr_updated]
|
|
22
|
+
if: "filesCount > 0"
|
|
23
|
+
fail_if: "output.issues.some(i => i.severity === 'error')"
|
|
24
|
+
|
|
25
|
+
# Run only on feature branches
|
|
26
|
+
feature-validation:
|
|
27
|
+
type: ai
|
|
28
|
+
schema: code-review
|
|
29
|
+
prompt: "Validate feature implementation"
|
|
30
|
+
on: [pr_opened, pr_updated]
|
|
31
|
+
if: 'startsWith(branch, "feature/")'
|
|
32
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
33
|
+
|
|
34
|
+
# Run only in CI environment
|
|
35
|
+
ci-only-check:
|
|
36
|
+
type: ai
|
|
37
|
+
schema: security
|
|
38
|
+
prompt: "Comprehensive security scan"
|
|
39
|
+
on: [pr_opened, pr_updated]
|
|
40
|
+
if: 'env.CI == "true"'
|
|
41
|
+
fail_if: "output.issues.length > 0"
|
|
42
|
+
|
|
43
|
+
# Run when specific files are changed
|
|
44
|
+
auth-security-check:
|
|
45
|
+
type: ai
|
|
46
|
+
schema: security
|
|
47
|
+
prompt: "Security review for authentication changes"
|
|
48
|
+
on: [pr_opened, pr_updated]
|
|
49
|
+
# Run when auth-related files are modified
|
|
50
|
+
if: 'contains(filesChanged, "auth") || contains(filesChanged, "login") || contains(filesChanged, "session")'
|
|
51
|
+
fail_if: "output.issues.length > 0"
|
|
52
|
+
|
|
53
|
+
# Complex condition - run on main or when many files changed
|
|
54
|
+
comprehensive-review:
|
|
55
|
+
type: ai
|
|
56
|
+
schema: code-review
|
|
57
|
+
prompt: "Comprehensive code review"
|
|
58
|
+
on: [pr_opened, pr_updated]
|
|
59
|
+
# Run on main branch OR when more than 10 files changed
|
|
60
|
+
if: 'branch == "main" || filesCount > 10'
|
|
61
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
62
|
+
|
|
63
|
+
# Always run (default behavior)
|
|
64
|
+
standard-check:
|
|
65
|
+
type: ai
|
|
66
|
+
schema: code-review
|
|
67
|
+
prompt: "Standard code review"
|
|
68
|
+
on: [pr_opened, pr_updated]
|
|
69
|
+
if: "always()" # Explicitly always run
|
|
70
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
71
|
+
|
|
72
|
+
# Never run (can be enabled by removing/changing condition)
|
|
73
|
+
disabled-check:
|
|
74
|
+
type: ai
|
|
75
|
+
schema: code-review
|
|
76
|
+
prompt: "Currently disabled check"
|
|
77
|
+
on: [pr_opened, pr_updated]
|
|
78
|
+
if: "!always()" # Never run
|
|
79
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
80
|
+
|
|
81
|
+
# Dependency-based execution
|
|
82
|
+
security-check:
|
|
83
|
+
type: ai
|
|
84
|
+
schema: security
|
|
85
|
+
prompt: "Security vulnerability scan"
|
|
86
|
+
on: [pr_opened, pr_updated]
|
|
87
|
+
if: "always()"
|
|
88
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
89
|
+
|
|
90
|
+
performance-check:
|
|
91
|
+
type: ai
|
|
92
|
+
schema: code-review
|
|
93
|
+
prompt: "Performance analysis"
|
|
94
|
+
on: [pr_opened, pr_updated]
|
|
95
|
+
if: "always()"
|
|
96
|
+
fail_if: "output.issues.filter(i => i.severity === 'error').length > 2"
|
|
97
|
+
|
|
98
|
+
# Run only if security check found issues
|
|
99
|
+
security-remediation:
|
|
100
|
+
type: ai
|
|
101
|
+
schema: code-review
|
|
102
|
+
prompt: "Suggest security fixes"
|
|
103
|
+
on: [pr_opened, pr_updated]
|
|
104
|
+
depends_on: [security-check]
|
|
105
|
+
# Only run if security check found issues (use length() function)
|
|
106
|
+
if: 'outputs["security-check"] && length(outputs["security-check"].issues) > 0'
|
|
107
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
108
|
+
|
|
109
|
+
# Run only if all previous checks passed
|
|
110
|
+
final-validation:
|
|
111
|
+
type: ai
|
|
112
|
+
schema: code-review
|
|
113
|
+
prompt: "Final validation before merge"
|
|
114
|
+
on: [pr_opened, pr_updated]
|
|
115
|
+
depends_on: [security-check, performance-check]
|
|
116
|
+
# Only run if both dependencies passed (check for specific severities)
|
|
117
|
+
if: |
|
|
118
|
+
outputs["security-check"] &&
|
|
119
|
+
!hasIssue(outputs["security-check"].issues, "severity", "critical") &&
|
|
120
|
+
!hasIssue(outputs["security-check"].issues, "severity", "error") &&
|
|
121
|
+
outputs["performance-check"] &&
|
|
122
|
+
!hasIssue(outputs["performance-check"].issues, "severity", "critical") &&
|
|
123
|
+
!hasIssue(outputs["performance-check"].issues, "severity", "error")
|
|
124
|
+
fail_if: "output.issues.length > 0"
|
|
125
|
+
|
|
126
|
+
# Environment-specific checks
|
|
127
|
+
staging-check:
|
|
128
|
+
type: ai
|
|
129
|
+
schema: code-review
|
|
130
|
+
prompt: "Staging environment validation"
|
|
131
|
+
on: [pr_opened, pr_updated]
|
|
132
|
+
# Run only in staging environment
|
|
133
|
+
if: 'env.ENVIRONMENT == "staging"'
|
|
134
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
135
|
+
|
|
136
|
+
# Time-based or conditional skip
|
|
137
|
+
weekend-check:
|
|
138
|
+
type: ai
|
|
139
|
+
schema: code-review
|
|
140
|
+
prompt: "Weekend maintenance check"
|
|
141
|
+
on: [pr_opened, pr_updated]
|
|
142
|
+
# Could be used with env vars set by CI to control execution
|
|
143
|
+
if: 'env.RUN_WEEKEND_CHECKS == "true"'
|
|
144
|
+
fail_if: "output.issues.some(i => i.severity === 'critical')"
|
|
145
|
+
|
|
146
|
+
output:
|
|
147
|
+
pr_comment:
|
|
148
|
+
format: markdown
|
|
149
|
+
group_by: check
|
|
150
|
+
collapse: true
|
|
151
|
+
|
|
152
|
+
# Available variables in if conditions:
|
|
153
|
+
# - checkName: Name of the current check
|
|
154
|
+
# - branch: Current branch name
|
|
155
|
+
# - baseBranch: Target/base branch name
|
|
156
|
+
# - filesChanged: Array of changed file paths
|
|
157
|
+
# - filesCount: Number of changed files
|
|
158
|
+
# - event: Event that triggered the check (e.g., "pr_opened", "manual")
|
|
159
|
+
# - env: Environment variables
|
|
160
|
+
# - outputs: Raw ReviewSummary objects from previous checks (for dependent checks)
|
|
161
|
+
# Example: outputs["check-name"].issues, outputs["check-name"].suggestions
|
|
162
|
+
# - metadata: Additional metadata (hasChanges, branch, event, checkName)
|
|
163
|
+
|
|
164
|
+
# Available functions (GitHub Actions-style):
|
|
165
|
+
# - contains(haystack, needle): Check if string/array contains value
|
|
166
|
+
# - startsWith(str, prefix): Check if string starts with prefix
|
|
167
|
+
# - endsWith(str, suffix): Check if string ends with suffix
|
|
168
|
+
# - always(): Always returns true
|
|
169
|
+
# - length(array|string|object): Get length of array, string, or object keys
|
|
170
|
+
# - hasIssue(issues, field, value): Check if any issue has field matching value
|
|
171
|
+
# - countIssues(issues, field, value): Count issues with field matching value
|
|
172
|
+
# - hasFileMatching(issues, pattern): Check if any issue file contains pattern
|
|
173
|
+
# - Standard operators: ==, !=, >, <, >=, <=, &&, ||, !
|