@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,292 @@
|
|
|
1
|
+
# Visor Event Triggers
|
|
2
|
+
|
|
3
|
+
This document explains what events trigger Visor and how to identify the context from logs.
|
|
4
|
+
|
|
5
|
+
## Trigger Modes
|
|
6
|
+
|
|
7
|
+
Visor can be triggered in two main modes:
|
|
8
|
+
|
|
9
|
+
### 1. Manual CLI Mode
|
|
10
|
+
- **When**: Running `visor` command locally
|
|
11
|
+
- **Log indicator**: `🖥️ Mode: Manual CLI`
|
|
12
|
+
- **Context**: Local git repository analysis
|
|
13
|
+
- **Event simulation**: Use `--event` flag to simulate GitHub events (see [CLI Event Simulation](#cli-event-simulation))
|
|
14
|
+
|
|
15
|
+
### 2. GitHub Action Mode
|
|
16
|
+
- **When**: Triggered by GitHub webhook events
|
|
17
|
+
- **Log indicator**: `🤖 Mode: GitHub Action`
|
|
18
|
+
- **Context**: Based on GitHub event type
|
|
19
|
+
|
|
20
|
+
## GitHub Events
|
|
21
|
+
|
|
22
|
+
When running as a GitHub Action, Visor responds to these events:
|
|
23
|
+
|
|
24
|
+
### Pull Request Events (`pull_request`)
|
|
25
|
+
- **Actions**: `opened`, `synchronize`, `edited`
|
|
26
|
+
- **Trigger mapping**:
|
|
27
|
+
- `opened` → `pr_opened`
|
|
28
|
+
- `synchronize` / `edited` → `pr_updated`
|
|
29
|
+
- **Log format**:
|
|
30
|
+
```
|
|
31
|
+
🤖 Mode: GitHub Action
|
|
32
|
+
📂 Repository: owner/repo
|
|
33
|
+
📋 Event: pull_request (action: opened)
|
|
34
|
+
🎯 Trigger: pr_opened
|
|
35
|
+
🔀 Context: Pull Request #123
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Issue Events (`issues`)
|
|
39
|
+
- **Actions**: `opened`, `edited`, etc.
|
|
40
|
+
- **Trigger mapping**: `issue_opened`
|
|
41
|
+
- **Log format**:
|
|
42
|
+
```
|
|
43
|
+
🤖 Mode: GitHub Action
|
|
44
|
+
📂 Repository: owner/repo
|
|
45
|
+
📋 Event: issues (action: opened)
|
|
46
|
+
🎯 Trigger: issue_opened
|
|
47
|
+
🎫 Context: Issue #456
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Issue Comment Events (`issue_comment`)
|
|
51
|
+
- **Actions**: `created`, `edited`
|
|
52
|
+
- **Trigger mapping**: `issue_comment`
|
|
53
|
+
- **Context**: Can be on either a Pull Request or an Issue
|
|
54
|
+
- **Log format** (on PR):
|
|
55
|
+
```
|
|
56
|
+
🤖 Mode: GitHub Action
|
|
57
|
+
📂 Repository: owner/repo
|
|
58
|
+
📋 Event: issue_comment (action: created)
|
|
59
|
+
🎯 Trigger: issue_comment
|
|
60
|
+
💬 Context: Comment on Pull Request #123
|
|
61
|
+
```
|
|
62
|
+
- **Log format** (on Issue):
|
|
63
|
+
```
|
|
64
|
+
🤖 Mode: GitHub Action
|
|
65
|
+
📂 Repository: owner/repo
|
|
66
|
+
📋 Event: issue_comment (action: created)
|
|
67
|
+
🎯 Trigger: issue_comment
|
|
68
|
+
💬 Context: Comment on Issue #456
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Example Logs
|
|
72
|
+
|
|
73
|
+
### Before (old logging):
|
|
74
|
+
```
|
|
75
|
+
Event: issue_comment, Owner: TykTechnologies, Repo: tyk
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### After (improved logging):
|
|
79
|
+
```
|
|
80
|
+
🤖 Mode: GitHub Action
|
|
81
|
+
📂 Repository: TykTechnologies/tyk
|
|
82
|
+
📋 Event: issue_comment (action: created)
|
|
83
|
+
🎯 Trigger: issue_comment
|
|
84
|
+
💬 Context: Comment on Pull Request #123
|
|
85
|
+
📚 Total checks in loaded config: 10
|
|
86
|
+
📚 Available checks: release-notes, overview, security, performance, quality, style, review-all, issue-assistant, dependency, connectivity
|
|
87
|
+
🔧 Checks to run for issue_comment: review-all, issue-assistant
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Understanding the Log Output
|
|
91
|
+
|
|
92
|
+
1. **Mode**: Tells you if this is a manual CLI run or GitHub Action
|
|
93
|
+
2. **Repository**: The owner/repo being analyzed
|
|
94
|
+
3. **Event**: The raw GitHub event name and action
|
|
95
|
+
4. **Trigger**: The internal event type Visor uses for configuration
|
|
96
|
+
5. **Context**: Specific context (PR number, Issue number, etc.)
|
|
97
|
+
6. **Available checks**: All checks defined in configuration
|
|
98
|
+
7. **Checks to run**: Which checks will execute for this event
|
|
99
|
+
|
|
100
|
+
## Recursion Prevention
|
|
101
|
+
|
|
102
|
+
When Visor posts a comment on an issue or PR, GitHub triggers a new `issue_comment` event. To prevent infinite loops, Visor automatically skips processing its own comments by detecting:
|
|
103
|
+
|
|
104
|
+
1. **Bot username**: `visor[bot]`, `github-actions[bot]`, `probelabs[bot]`, or any user with `type: Bot`
|
|
105
|
+
2. **Visor markers**: Comments containing `<!-- visor-comment-id:` or `*Powered by [Visor](...)*`
|
|
106
|
+
|
|
107
|
+
**Example log (expected behavior):**
|
|
108
|
+
```
|
|
109
|
+
✓ Skipping bot's own comment to prevent recursion. Author: probelabs[bot], Type: Bot, Has markers: true
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
This is **normal and correct** - it means:
|
|
113
|
+
- Issue opened → Bot posts comment → Comment triggers event → Bot detects its own comment → Skips ✅
|
|
114
|
+
|
|
115
|
+
## Event Flow Example
|
|
116
|
+
|
|
117
|
+
**When an issue is opened:**
|
|
118
|
+
|
|
119
|
+
1. **Event 1**: `issues` (action: opened)
|
|
120
|
+
```
|
|
121
|
+
🤖 Mode: GitHub Action
|
|
122
|
+
📋 Event: issues (action: opened)
|
|
123
|
+
🎯 Trigger: issue_opened
|
|
124
|
+
🎫 Context: Issue #456
|
|
125
|
+
🔧 Checks to run: issue-assistant
|
|
126
|
+
✅ Posted issue assistant results to issue #456
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
2. **Event 2**: `issue_comment` (action: created) - Bot's own comment
|
|
130
|
+
```
|
|
131
|
+
🤖 Mode: GitHub Action
|
|
132
|
+
📋 Event: issue_comment (action: created)
|
|
133
|
+
🎯 Trigger: issue_comment
|
|
134
|
+
💬 Context: Comment on Issue #456
|
|
135
|
+
✓ Skipping bot's own comment to prevent recursion. Author: probelabs[bot], Type: Bot, Has markers: true
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Configuration
|
|
139
|
+
|
|
140
|
+
Checks are configured to run on specific triggers using the `on` field:
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
steps:
|
|
144
|
+
security-check:
|
|
145
|
+
on: [pr_opened, pr_updated] # Only runs on PR events
|
|
146
|
+
type: ai
|
|
147
|
+
# ... rest of config
|
|
148
|
+
|
|
149
|
+
issue-assistant:
|
|
150
|
+
on: [issue_comment, issue_opened] # Runs on issue events
|
|
151
|
+
type: ai
|
|
152
|
+
# ... rest of config
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
If `on` is not specified, the check can run on any event type.
|
|
156
|
+
|
|
157
|
+
### Using goto_event to simulate a different trigger for a jump
|
|
158
|
+
|
|
159
|
+
Sometimes you want to “re-run” an ancestor step as if a different event happened (e.g., from an `issue_comment` flow you want to re-execute a PR step under `pr_updated`). Use `goto_event` together with `goto`:
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
steps:
|
|
163
|
+
overview:
|
|
164
|
+
type: ai
|
|
165
|
+
on: [pr_opened, pr_updated]
|
|
166
|
+
|
|
167
|
+
security:
|
|
168
|
+
type: ai
|
|
169
|
+
depends_on: [overview]
|
|
170
|
+
on: [pr_opened, pr_updated]
|
|
171
|
+
on_success:
|
|
172
|
+
goto: overview
|
|
173
|
+
goto_event: pr_updated # simulate PR update for the inline jump
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
During that inline execution, event filtering and `if:` expressions see the simulated event. The current step is then re-run once. For a full PR re-run from an issue comment, synthesize a PR event and re-invoke the action entrypoint (see failure-routing docs for details).
|
|
177
|
+
|
|
178
|
+
## CLI Event Simulation
|
|
179
|
+
|
|
180
|
+
When running Visor locally via CLI, you can simulate GitHub events to test event-based check filtering. This is useful for testing your configuration locally before deploying to GitHub Actions.
|
|
181
|
+
|
|
182
|
+
### Usage
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Simulate a PR update event
|
|
186
|
+
visor --event pr_updated
|
|
187
|
+
|
|
188
|
+
# Simulate a PR opened event
|
|
189
|
+
visor --event pr_opened
|
|
190
|
+
|
|
191
|
+
# Simulate an issue comment event
|
|
192
|
+
visor --event issue_comment
|
|
193
|
+
|
|
194
|
+
# Simulate an issue opened event
|
|
195
|
+
visor --event issue_opened
|
|
196
|
+
|
|
197
|
+
# Run all checks regardless of event filters (default)
|
|
198
|
+
visor --event all
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Auto-Detection
|
|
202
|
+
|
|
203
|
+
Visor automatically detects the appropriate event based on the checks being run:
|
|
204
|
+
|
|
205
|
+
- **Code-review schemas** → Defaults to `pr_updated`
|
|
206
|
+
- **Other schemas** → Defaults to `all` (no filtering)
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# These two are equivalent when running checks with code-review schema
|
|
210
|
+
visor --check security
|
|
211
|
+
visor --check security --event pr_updated
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Event Filtering Behavior
|
|
215
|
+
|
|
216
|
+
| Flag | Behavior | Use Case |
|
|
217
|
+
|------|----------|----------|
|
|
218
|
+
| `--event pr_updated` | Only runs checks with `on: [pr_updated]` | Test PR update scenario locally |
|
|
219
|
+
| `--event pr_opened` | Only runs checks with `on: [pr_opened]` | Test PR opened scenario |
|
|
220
|
+
| `--event issue_comment` | Only runs checks with `on: [issue_comment]` | Test comment assistant |
|
|
221
|
+
| `--event manual` | Only runs checks with `on: [manual]` | Test manual-triggered checks |
|
|
222
|
+
| `--event all` | Runs all checks (except manual-only) | Default behavior, ignores `on:` filters |
|
|
223
|
+
| (no flag) | Auto-detects based on schema | Smart default |
|
|
224
|
+
|
|
225
|
+
### Example Workflow
|
|
226
|
+
|
|
227
|
+
**Testing PR review locally before pushing:**
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# 1. Make changes on a feature branch
|
|
231
|
+
git checkout -b feature/new-feature
|
|
232
|
+
|
|
233
|
+
# 2. Simulate PR update event to see what checks would run
|
|
234
|
+
visor --event pr_updated --analyze-branch-diff
|
|
235
|
+
|
|
236
|
+
# 3. Review the output and fix any issues
|
|
237
|
+
|
|
238
|
+
# 4. Push and open PR (GitHub Actions will run the same checks)
|
|
239
|
+
git push origin feature/new-feature
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Combining with Other Flags
|
|
243
|
+
|
|
244
|
+
Event simulation works alongside other CLI flags:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# Analyze branch diff with PR update event
|
|
248
|
+
visor --event pr_updated --analyze-branch-diff
|
|
249
|
+
|
|
250
|
+
# Run specific checks with event filtering
|
|
251
|
+
visor --check security --check style --event pr_opened
|
|
252
|
+
|
|
253
|
+
# Debug mode with event simulation
|
|
254
|
+
visor --event pr_updated --debug
|
|
255
|
+
|
|
256
|
+
# JSON output with event filtering
|
|
257
|
+
visor --event issue_comment --output json
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Log Output
|
|
261
|
+
|
|
262
|
+
When using event simulation, you'll see:
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
🎯 Simulating event: pr_updated
|
|
266
|
+
▶ Running check: overview [1/4]
|
|
267
|
+
▶ Running check: security [2/4]
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
When using `--event all`:
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
🎯 Event filtering: DISABLED (running all checks regardless of event triggers)
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Common Patterns
|
|
277
|
+
|
|
278
|
+
**Test all PR checks locally:**
|
|
279
|
+
```bash
|
|
280
|
+
visor --event pr_updated --analyze-branch-diff
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**Test issue assistant:**
|
|
284
|
+
```bash
|
|
285
|
+
# Issue assistants typically run on issue_comment or issue_opened
|
|
286
|
+
visor --event issue_comment
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Run everything (useful for local development):**
|
|
290
|
+
```bash
|
|
291
|
+
visor --event all # or just: visor
|
|
292
|
+
```
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# RFC: Enhanced Execution Logging & Statistics
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented
|
|
4
|
+
**Date:** 2025-10-04
|
|
5
|
+
**Version:** 1.0
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
This RFC describes the implementation of comprehensive execution statistics tracking and enhanced logging for Visor checks, providing users with clear visibility into forEach iterations, skip reasons, and overall execution metrics.
|
|
10
|
+
|
|
11
|
+
## Motivation
|
|
12
|
+
|
|
13
|
+
Users running complex Visor workflows with features like `forEach`, `if` conditions, and `fail_if` lacked visibility into:
|
|
14
|
+
- How many times each check actually ran (forEach iterations)
|
|
15
|
+
- Why checks were skipped and what conditions failed
|
|
16
|
+
- Overall execution metrics (total runs vs. configured checks)
|
|
17
|
+
- Performance bottlenecks (time per check/iteration)
|
|
18
|
+
- Issue distribution across checks
|
|
19
|
+
|
|
20
|
+
This made debugging and understanding workflow execution difficult.
|
|
21
|
+
|
|
22
|
+
## Design
|
|
23
|
+
|
|
24
|
+
### Architecture
|
|
25
|
+
|
|
26
|
+
The solution adds execution statistics tracking throughout the check execution lifecycle:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
CheckExecutionEngine
|
|
30
|
+
├── executionStats: Map<string, CheckExecutionStats> // Tracks all stats
|
|
31
|
+
├── initializeCheckStats() // Initialize stats for each check
|
|
32
|
+
├── recordIterationStart/Complete() // Track forEach iterations
|
|
33
|
+
├── recordSkip() // Track skipped checks
|
|
34
|
+
├── recordError() // Track failures
|
|
35
|
+
├── buildExecutionStatistics() // Build final stats object
|
|
36
|
+
└── logExecutionSummary() // Display symbol-rich table
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Data Structures
|
|
40
|
+
|
|
41
|
+
#### CheckExecutionStats
|
|
42
|
+
```typescript
|
|
43
|
+
interface CheckExecutionStats {
|
|
44
|
+
checkName: string;
|
|
45
|
+
totalRuns: number; // How many times executed (1 or forEach iterations)
|
|
46
|
+
successfulRuns: number;
|
|
47
|
+
failedRuns: number;
|
|
48
|
+
skipped: boolean;
|
|
49
|
+
skipReason?: 'if_condition' | 'fail_fast' | 'dependency_failed';
|
|
50
|
+
skipCondition?: string; // The actual if condition text
|
|
51
|
+
totalDuration: number; // Total duration in milliseconds
|
|
52
|
+
perIterationDuration?: number[]; // Duration for each iteration
|
|
53
|
+
issuesFound: number;
|
|
54
|
+
issuesBySeverity: {
|
|
55
|
+
critical: number;
|
|
56
|
+
error: number;
|
|
57
|
+
warning: number;
|
|
58
|
+
info: number;
|
|
59
|
+
};
|
|
60
|
+
outputsProduced?: number; // For forEach checks
|
|
61
|
+
errorMessage?: string; // If failed
|
|
62
|
+
forEachPreview?: string[]; // Preview of forEach items
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### ExecutionStatistics
|
|
67
|
+
```typescript
|
|
68
|
+
interface ExecutionStatistics {
|
|
69
|
+
totalChecksConfigured: number;
|
|
70
|
+
totalExecutions: number; // Sum of all runs including forEach
|
|
71
|
+
successfulExecutions: number;
|
|
72
|
+
failedExecutions: number;
|
|
73
|
+
skippedChecks: number;
|
|
74
|
+
totalDuration: number;
|
|
75
|
+
checks: CheckExecutionStats[];
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Tracking Points
|
|
80
|
+
|
|
81
|
+
1. **Initialization** (`executeDependencyAwareChecks` start)
|
|
82
|
+
- Initialize stats for all checks
|
|
83
|
+
|
|
84
|
+
2. **forEach Execution** (when forEach items detected)
|
|
85
|
+
- Record forEach preview items
|
|
86
|
+
- Track each iteration start/complete
|
|
87
|
+
- Log iteration progress: `✔ 3/5 (2.1s)`
|
|
88
|
+
|
|
89
|
+
3. **Normal Execution** (single runs)
|
|
90
|
+
- Track start/complete
|
|
91
|
+
- Record outputs produced
|
|
92
|
+
|
|
93
|
+
4. **Skip Conditions** (when `if` evaluates to false)
|
|
94
|
+
- Record skip reason and condition
|
|
95
|
+
- Log: `⏭ Skipped (if: branch == "main")`
|
|
96
|
+
|
|
97
|
+
5. **Errors** (on exception)
|
|
98
|
+
- Record error message
|
|
99
|
+
- Track failed iteration
|
|
100
|
+
|
|
101
|
+
6. **Completion** (`executeChecks` end)
|
|
102
|
+
- Build final statistics
|
|
103
|
+
- Display summary table
|
|
104
|
+
|
|
105
|
+
### Output Formats
|
|
106
|
+
|
|
107
|
+
#### Console (Table) - Default
|
|
108
|
+
```
|
|
109
|
+
┌───────────────────────────────────────┐
|
|
110
|
+
│ Execution Complete (45.3s) │
|
|
111
|
+
├───────────────────────────────────────┤
|
|
112
|
+
│ Checks: 8 configured → 23 executions │
|
|
113
|
+
│ Status: 20 ✔ │ 2 ✖ │ 1 ⏭ │
|
|
114
|
+
│ Issues: 15 total (3 🔴 12 ⚠️) │
|
|
115
|
+
└───────────────────────────────────────┘
|
|
116
|
+
|
|
117
|
+
Check Details:
|
|
118
|
+
┌─────────────────────┬──────────┬──────────┬─────────────────────┐
|
|
119
|
+
│ Check │ Duration │ Status │ Details │
|
|
120
|
+
├─────────────────────┼──────────┼──────────┼─────────────────────┤
|
|
121
|
+
│ list-files │ 0.5s │ ✔ │ →5 │
|
|
122
|
+
│ validate-file │ 12.3s │ ✔ ×5 │ 12⚠️ │
|
|
123
|
+
│ security-scan │ 8.2s │ ✔ │ 3🔴 │
|
|
124
|
+
│ transform-data │ 6.1s │ ✔ ×3 │ →3 │
|
|
125
|
+
│ notify-slack │ 2.1s │ ✖ ×3 │ HTTP 500 │
|
|
126
|
+
│ production-only │ - │ ⏭ if │ branch=="main" │
|
|
127
|
+
│ archive-results │ 1.3s │ ✔ │ │
|
|
128
|
+
│ final-report │ 14.8s │ ✔ │ →1 │
|
|
129
|
+
└─────────────────────┴──────────┴──────────┴─────────────────────┘
|
|
130
|
+
|
|
131
|
+
Legend: ✔=success │ ✖=failed │ ⏭=skipped │ ×N=iterations │ →N=outputs │ N🔴=critical │ N⚠️=warnings
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### JSON Output
|
|
135
|
+
Full `executionStatistics` object included in JSON output with all tracked data:
|
|
136
|
+
- Per-iteration timings
|
|
137
|
+
- Skip condition evaluations
|
|
138
|
+
- forEach item previews
|
|
139
|
+
- Complete error messages
|
|
140
|
+
|
|
141
|
+
### Symbol Reference
|
|
142
|
+
|
|
143
|
+
| Symbol | Meaning | Example |
|
|
144
|
+
|--------|---------|---------|
|
|
145
|
+
| `✔` | Success (1 run) | `✔` |
|
|
146
|
+
| `✔ ×5` | Success (5 forEach iterations) | `✔ ×5` |
|
|
147
|
+
| `✖ ×3` | Failed (3 iterations) | `✖ ×3` |
|
|
148
|
+
| `✔/✖ 2/3` | Partial success (2 of 3 succeeded) | `✔/✖ 2/3` |
|
|
149
|
+
| `⏭ if` | Skipped (if condition) | `⏭ if` |
|
|
150
|
+
| `⏭ ff` | Skipped (fail-fast) | `⏭ ff` |
|
|
151
|
+
| `⏭ dep` | Skipped (dependency failed) | `⏭ dep` |
|
|
152
|
+
| `→N` | Produced N outputs | `→5` |
|
|
153
|
+
| `N🔴` | N critical issues | `3🔴` |
|
|
154
|
+
| `N⚠️` | N warnings | `12⚠️` |
|
|
155
|
+
| `N💡` | N info messages | `5💡` |
|
|
156
|
+
|
|
157
|
+
## Implementation
|
|
158
|
+
|
|
159
|
+
### Files Modified
|
|
160
|
+
|
|
161
|
+
1. **src/check-execution-engine.ts** (~300 lines added)
|
|
162
|
+
- Added `CheckExecutionStats` and `ExecutionStatistics` interfaces
|
|
163
|
+
- Added `executionStats` property to class
|
|
164
|
+
- Implemented tracking methods:
|
|
165
|
+
- `initializeCheckStats()`
|
|
166
|
+
- `recordIterationStart/Complete()`
|
|
167
|
+
- `recordSkip()`
|
|
168
|
+
- `recordError()`
|
|
169
|
+
- `recordForEachPreview()`
|
|
170
|
+
- `buildExecutionStatistics()`
|
|
171
|
+
- Implemented display methods:
|
|
172
|
+
- `logExecutionSummary()`
|
|
173
|
+
- `formatStatusColumn()`
|
|
174
|
+
- `formatDetailsColumn()`
|
|
175
|
+
- `truncate()`
|
|
176
|
+
- Updated `executeDependencyAwareChecks()` to track stats
|
|
177
|
+
- Updated `executeChecks()` to return statistics
|
|
178
|
+
|
|
179
|
+
2. **src/output-formatters.ts** (~5 lines added)
|
|
180
|
+
- Added `executionStatistics?` field to `AnalysisResult` interface
|
|
181
|
+
|
|
182
|
+
### Backward Compatibility
|
|
183
|
+
|
|
184
|
+
✅ **No Breaking Changes**
|
|
185
|
+
- All changes are additive
|
|
186
|
+
- `executionStatistics` is optional in `AnalysisResult`
|
|
187
|
+
- Existing output formats continue to work
|
|
188
|
+
- Statistics appear automatically in table output (default)
|
|
189
|
+
- JSON/SARIF include statistics when available
|
|
190
|
+
|
|
191
|
+
## Examples
|
|
192
|
+
|
|
193
|
+
### Scenario 1: forEach with Multiple Iterations
|
|
194
|
+
|
|
195
|
+
**Config:**
|
|
196
|
+
```yaml
|
|
197
|
+
steps:
|
|
198
|
+
list-files:
|
|
199
|
+
type: command
|
|
200
|
+
exec: echo '["a.json", "b.json", "c.json"]'
|
|
201
|
+
forEach: true
|
|
202
|
+
|
|
203
|
+
validate-file:
|
|
204
|
+
type: command
|
|
205
|
+
exec: jsonlint {{ outputs.list-files }}
|
|
206
|
+
depends_on: [list-files]
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Output:**
|
|
210
|
+
```
|
|
211
|
+
▶ Running check: list-files [1/2]
|
|
212
|
+
✔ Check complete: list-files (0.3s) - 3 items
|
|
213
|
+
|
|
214
|
+
▶ Running check: validate-file [2/2]
|
|
215
|
+
Processing 3 items...
|
|
216
|
+
✔ 1/3 (1.2s)
|
|
217
|
+
✔ 2/3 (1.1s)
|
|
218
|
+
✔ 3/3 (1.3s)
|
|
219
|
+
✔ Check complete: validate-file (3.6s) - 3 runs
|
|
220
|
+
|
|
221
|
+
┌───────────────────────────────────────┐
|
|
222
|
+
│ Execution Complete (3.9s) │
|
|
223
|
+
├───────────────────────────────────────┤
|
|
224
|
+
│ Checks: 2 configured → 4 executions │
|
|
225
|
+
│ Status: 4 ✔ │ 0 ✖ │ 0 ⏭ │
|
|
226
|
+
└───────────────────────────────────────┘
|
|
227
|
+
|
|
228
|
+
Check Details:
|
|
229
|
+
┌─────────────────────┬──────────┬──────────┬─────────────────────┐
|
|
230
|
+
│ Check │ Duration │ Status │ Details │
|
|
231
|
+
├─────────────────────┼──────────┼──────────┼─────────────────────┤
|
|
232
|
+
│ list-files │ 0.3s │ ✔ │ →3 │
|
|
233
|
+
│ validate-file │ 3.6s │ ✔ ×3 │ │
|
|
234
|
+
└─────────────────────┴──────────┴──────────┴─────────────────────┘
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Scenario 2: Conditional Skip
|
|
238
|
+
|
|
239
|
+
**Config:**
|
|
240
|
+
```yaml
|
|
241
|
+
steps:
|
|
242
|
+
production-deploy:
|
|
243
|
+
type: command
|
|
244
|
+
exec: ./deploy.sh
|
|
245
|
+
if: 'branch == "main"'
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Output (on feature branch):**
|
|
249
|
+
```
|
|
250
|
+
▶ Running check: production-deploy [1/1]
|
|
251
|
+
⏭ Skipped (if: branch == "main")
|
|
252
|
+
|
|
253
|
+
┌───────────────────────────────────────┐
|
|
254
|
+
│ Execution Complete (0.0s) │
|
|
255
|
+
├───────────────────────────────────────┤
|
|
256
|
+
│ Checks: 1 configured → 0 executions │
|
|
257
|
+
│ Status: 0 ✔ │ 0 ✖ │ 1 ⏭ │
|
|
258
|
+
└───────────────────────────────────────┘
|
|
259
|
+
|
|
260
|
+
Check Details:
|
|
261
|
+
┌─────────────────────┬──────────┬──────────┬─────────────────────┐
|
|
262
|
+
│ Check │ Duration │ Status │ Details │
|
|
263
|
+
├─────────────────────┼──────────┼──────────┼─────────────────────┤
|
|
264
|
+
│ production-deploy │ - │ ⏭ if │ branch == "main" │
|
|
265
|
+
└─────────────────────┴──────────┴──────────┴─────────────────────┘
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Benefits
|
|
269
|
+
|
|
270
|
+
1. **🎯 Clarity**: Users immediately see forEach iterations and skip reasons
|
|
271
|
+
2. **📊 Metrics**: Clear stats on total work done vs. configured checks
|
|
272
|
+
3. **⚡ Performance**: Easy to spot slow checks and iterations
|
|
273
|
+
4. **🐛 Debugging**: Skip conditions shown inline for quick troubleshooting
|
|
274
|
+
5. **📈 Automation**: Full stats in JSON for CI/CD analytics
|
|
275
|
+
6. **✅ Professional**: Clean, symbol-rich output matches modern CLIs
|
|
276
|
+
|
|
277
|
+
## Future Enhancements
|
|
278
|
+
|
|
279
|
+
Potential future improvements:
|
|
280
|
+
- Color-coded output (green/red/yellow) when terminal supports it
|
|
281
|
+
- Configurable verbosity levels for forEach iteration logging
|
|
282
|
+
- Export statistics to external monitoring systems
|
|
283
|
+
- Historical statistics comparison across runs
|
|
284
|
+
- Performance regression detection
|
|
285
|
+
|
|
286
|
+
## References
|
|
287
|
+
|
|
288
|
+
- Implementation PR: [Link to PR]
|
|
289
|
+
- Related Issues: Enhanced logging visibility (#XX)
|
|
290
|
+
- Documentation: Updated in CLAUDE.md and README.md
|