@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,483 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
include: "./code-review.yaml"
|
|
3
|
+
|
|
4
|
+
# Default Visor configuration - provides comprehensive code analysis out-of-the-box
|
|
5
|
+
# Uses mock provider for CI compatibility when no AI API keys are configured
|
|
6
|
+
# Users can override this by creating their own .visor.yaml in their project root
|
|
7
|
+
|
|
8
|
+
# Global AI provider settings - users should configure their preferred provider
|
|
9
|
+
# For CI testing, use --provider mock CLI flag instead
|
|
10
|
+
|
|
11
|
+
# Run up to 4 steps in parallel for faster execution
|
|
12
|
+
max_parallelism: 4
|
|
13
|
+
|
|
14
|
+
# Global fail condition - fail if critical or error severity issues are found
|
|
15
|
+
fail_if: "output.issues && output.issues.some(i => i.severity === 'critical' || i.severity === 'error')"
|
|
16
|
+
|
|
17
|
+
# Workflow steps (formerly 'checks' - both keys are supported for backward compatibility)
|
|
18
|
+
steps:
|
|
19
|
+
# AI-powered release notes generation - manual execution only for release workflows
|
|
20
|
+
release-notes:
|
|
21
|
+
type: ai
|
|
22
|
+
group: release
|
|
23
|
+
on: [manual]
|
|
24
|
+
prompt: |
|
|
25
|
+
Generate professional release notes for version {{ env.TAG_NAME }} of this project.
|
|
26
|
+
|
|
27
|
+
Analyze the git commits since the last release:
|
|
28
|
+
```
|
|
29
|
+
{{ env.GIT_LOG }}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
And the file changes summary:
|
|
33
|
+
```
|
|
34
|
+
{{ env.GIT_DIFF_STAT }}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Create release notes with these sections:
|
|
38
|
+
|
|
39
|
+
## 🚀 What's New in {{ env.TAG_NAME }}
|
|
40
|
+
|
|
41
|
+
### ✨ New Features
|
|
42
|
+
List any new features added (look for feat: commits)
|
|
43
|
+
|
|
44
|
+
### 🐛 Bug Fixes
|
|
45
|
+
List any bugs fixed (look for fix: commits)
|
|
46
|
+
|
|
47
|
+
### 📈 Improvements
|
|
48
|
+
List any improvements or refactoring (look for refactor:, perf:, chore:, build: commits)
|
|
49
|
+
|
|
50
|
+
### 🔥 Breaking Changes
|
|
51
|
+
List any breaking changes if present (look for BREAKING CHANGE or ! in commits)
|
|
52
|
+
|
|
53
|
+
### 📊 Statistics
|
|
54
|
+
- Number of commits since last release
|
|
55
|
+
- Number of contributors involved
|
|
56
|
+
- Number of files changed
|
|
57
|
+
|
|
58
|
+
Keep descriptions concise and user-friendly. Focus on what changed from a user perspective, not implementation details.
|
|
59
|
+
Use present tense and action-oriented language. Group similar changes together.
|
|
60
|
+
schema: plain
|
|
61
|
+
|
|
62
|
+
# (overview, security, architecture, performance, quality) were extracted to defaults/code-review.yaml
|
|
63
|
+
|
|
64
|
+
# Apply labels based on overview tags — runs only on PR open (GitHub environments only)
|
|
65
|
+
apply-overview-labels:
|
|
66
|
+
type: github
|
|
67
|
+
criticality: external
|
|
68
|
+
tags: [github]
|
|
69
|
+
on: [pr_opened]
|
|
70
|
+
depends_on: [overview]
|
|
71
|
+
assume:
|
|
72
|
+
- "outputs['overview']?.tags?.label"
|
|
73
|
+
- "outputs['overview']?.tags?.['review-effort'] != null"
|
|
74
|
+
op: labels.add
|
|
75
|
+
values:
|
|
76
|
+
- "{{ outputs.overview.tags.label | default: '' | safe_label }}"
|
|
77
|
+
- "{{ outputs.overview.tags['review-effort'] | default: '' | prepend: 'review/effort:' | safe_label }}"
|
|
78
|
+
|
|
79
|
+
# Issue Assistant (issues only) — triage-quality prompt from main branch, structured output
|
|
80
|
+
issue-assistant:
|
|
81
|
+
type: ai
|
|
82
|
+
group: dynamic # New issue triage posts a standalone comment
|
|
83
|
+
on: [issue_opened]
|
|
84
|
+
schema: issue-assistant
|
|
85
|
+
prompt: |
|
|
86
|
+
You are an intelligent GitHub issue assistant for the {{ event.repository.fullName }} repository. Your role is to provide professional, knowledgeable assistance when a NEW issue is opened.
|
|
87
|
+
|
|
88
|
+
{%- liquid
|
|
89
|
+
# Correction context from the last validation wave (filtered)
|
|
90
|
+
# Keep only invalid or non-high confidence items using where_exp
|
|
91
|
+
assign issues = outputs_history["validate-fact"].last | where_exp: 'i', 'i && (i.is_valid != true || i.confidence != "high")'
|
|
92
|
+
assign has_problems = issues | not_empty
|
|
93
|
+
-%}
|
|
94
|
+
{% if has_problems %}
|
|
95
|
+
⚠️ **IMPORTANT: Your previous response contained factual errors. Please correct them:**
|
|
96
|
+
|
|
97
|
+
<previous_response>
|
|
98
|
+
{% assign prev_comment = outputs_history["comment-assistant"].last %}
|
|
99
|
+
{{ prev_comment.text }}
|
|
100
|
+
</previous_response>
|
|
101
|
+
|
|
102
|
+
**Validation Errors Found:**
|
|
103
|
+
{% for issue in issues %}
|
|
104
|
+
{% if issue.is_valid == nil or issue.is_valid != true or issue.confidence != 'high' %}
|
|
105
|
+
- **{{ issue.claim }}**: {{ issue.evidence | default: "" }}
|
|
106
|
+
{% if issue.correction %}
|
|
107
|
+
Correction: {{ issue.correction }}
|
|
108
|
+
{% endif %}
|
|
109
|
+
Claim: {{ issue.claim }}
|
|
110
|
+
{% if issue.correction %}Correction: {{ issue.correction }}{% endif %}
|
|
111
|
+
{% endif %}
|
|
112
|
+
{% endfor %}
|
|
113
|
+
|
|
114
|
+
Please provide a corrected response that addresses these factual errors.
|
|
115
|
+
{% endif %}
|
|
116
|
+
|
|
117
|
+
Return ONE JSON object (no prose outside JSON) that validates the `issue-assistant` schema with:
|
|
118
|
+
- `text`: write a clear, well-structured markdown reply that welcomes the reporter, shows understanding, and provides next steps. Use sections and bullets where helpful.
|
|
119
|
+
- `intent`: must be "issue_triage" for this flow.
|
|
120
|
+
- `labels` (optional): array of labels that would help organization for this new issue.
|
|
121
|
+
|
|
122
|
+
Add a short “References” section at the end of the markdown `text` as a simple, clickable markdown list (no fenced code blocks). Keep it minimal. If you didn’t consult code, write `References: none`.
|
|
123
|
+
|
|
124
|
+
Example:
|
|
125
|
+
References:
|
|
126
|
+
- [path/to/file.ext:START-END](https://github.com/{{ event.repository.fullName }}/blob/{{ event.pull_request.head.sha | default: 'HEAD' }}/path/to/file.ext#LSTART-LEND) – very short note
|
|
127
|
+
|
|
128
|
+
Use this triage rubric (adopted from our main prompt):
|
|
129
|
+
1) Categorize the issue - choose from: bug, chore, documentation, enhancement, feature, question, wontfix, invalid, duplicate
|
|
130
|
+
2) Assess priority (low/medium/high/urgent)
|
|
131
|
+
3) Estimate complexity (trivial/simple/moderate/complex)
|
|
132
|
+
4) Recommend labels from the categories above
|
|
133
|
+
5) Identify potential areas affected or relevant documentation
|
|
134
|
+
6) Provide an initial response with clarifying questions if needed
|
|
135
|
+
|
|
136
|
+
Response style:
|
|
137
|
+
- Professional and welcoming
|
|
138
|
+
- Start by acknowledging what you understand from the issue report
|
|
139
|
+
- Clearly state what you're confident about based on the information provided
|
|
140
|
+
- Identify what is unclear or missing, and explicitly ask follow-up questions to help with debugging
|
|
141
|
+
- When information is incomplete, ask specific questions that would help diagnose the issue
|
|
142
|
+
- Provide actionable guidance and clear next steps
|
|
143
|
+
- Use natural markdown formatting; include code snippets where useful
|
|
144
|
+
- Be honest about what you know and what you don't know
|
|
145
|
+
- NEVER make promises about timelines, release dates, or team commitments
|
|
146
|
+
- NEVER say things like "we'll pick this up", "will be included in upcoming release", or "we will post updates"
|
|
147
|
+
- Focus on technical analysis and helpful information rather than commitments
|
|
148
|
+
|
|
149
|
+
# Comment Assistant (comments only) — intent detection and reply
|
|
150
|
+
comment-assistant:
|
|
151
|
+
type: ai
|
|
152
|
+
group: dynamic
|
|
153
|
+
on: [issue_comment]
|
|
154
|
+
command: "visor"
|
|
155
|
+
prompt: |
|
|
156
|
+
You are the GitHub comment assistant for {{ event.repository.fullName }}. Respond to user comments on issues or PR discussion threads.
|
|
157
|
+
|
|
158
|
+
Latest comment (verbatim):
|
|
159
|
+
{{ event.comment.body | default: "" }}
|
|
160
|
+
|
|
161
|
+
{%- liquid
|
|
162
|
+
# Correction context from the last validation wave (filtered)
|
|
163
|
+
assign issues = outputs_history["validate-fact"].last | where_exp: 'i', 'i && (i.is_valid != true || i.confidence != "high")'
|
|
164
|
+
assign has_problems = issues | not_empty
|
|
165
|
+
assign prev_comment = outputs_history["comment-assistant"].last
|
|
166
|
+
-%}
|
|
167
|
+
{% if has_problems %}
|
|
168
|
+
⚠️ **IMPORTANT: Your previous response contained factual errors. Please correct them:**
|
|
169
|
+
|
|
170
|
+
<previous_response>
|
|
171
|
+
{{ prev_comment.text | default: "" }}
|
|
172
|
+
</previous_response>
|
|
173
|
+
|
|
174
|
+
**Validation Errors Found:**
|
|
175
|
+
{%- for issue in issues -%}
|
|
176
|
+
{%- if issue.is_valid == nil or issue.is_valid != true or issue.confidence != 'high' -%}
|
|
177
|
+
- **{{ issue.claim }}**: {{ issue.evidence | default: "" }}
|
|
178
|
+
{%- if issue.correction %}
|
|
179
|
+
Correction: {{ issue.correction }}
|
|
180
|
+
{%- endif %}
|
|
181
|
+
Claim: {{ issue.claim }}
|
|
182
|
+
{%- if issue.correction %}Correction: {{ issue.correction }}{% endif -%}
|
|
183
|
+
{%- endif -%}
|
|
184
|
+
{%- endfor -%}
|
|
185
|
+
|
|
186
|
+
Please provide a corrected response that addresses these factual errors.
|
|
187
|
+
{% endif %}
|
|
188
|
+
|
|
189
|
+
Return ONE JSON object (no prose outside JSON) that validates the `issue-assistant` schema with:
|
|
190
|
+
- `text`: a concise, helpful markdown reply to the latest comment.
|
|
191
|
+
- `intent`: choose one: "comment_reply" (normal reply) or "comment_retrigger" (pick this ONLY when the user explicitly asks to re-run checks OR explicitly asks to disable some checks).
|
|
192
|
+
- `labels`: omit for comments (do not include).
|
|
193
|
+
|
|
194
|
+
Add a short “References” section at the end of the markdown `text` as a clickable markdown list (no fenced blocks). If none used, write `References: none`.
|
|
195
|
+
|
|
196
|
+
Example:
|
|
197
|
+
References:
|
|
198
|
+
- [path/to/file.ext:START-END](https://github.com/{{ event.repository.fullName }}/blob/{{ event.pull_request.head.sha | default: 'HEAD' }}/path/to/file.ext#LSTART-LEND) – very short note
|
|
199
|
+
|
|
200
|
+
Rules:
|
|
201
|
+
- Never suggest rerun/disable unless asked explicitly.
|
|
202
|
+
- If asked to disable any check(s), set `intent` = "comment_retrigger" and in `text` acknowledge the request and say the checks will be re-run; DO NOT propose slash/directive comments.
|
|
203
|
+
- Stay technical, direct, and specific; add code snippets or links when helpful.
|
|
204
|
+
- When answering questions, acknowledge what you can answer confidently based on the context provided
|
|
205
|
+
- If you need more information to provide a complete answer, ask specific follow-up questions
|
|
206
|
+
- Be honest when you don't know something or can't find the answer in the available context
|
|
207
|
+
- If the question requires information not available in the PR/issue context, clearly state what's missing
|
|
208
|
+
- Provide partial answers when possible, and indicate what additional information would help give a complete response
|
|
209
|
+
schema: issue-assistant
|
|
210
|
+
on_success:
|
|
211
|
+
transitions:
|
|
212
|
+
- when: "event.name === 'issue_comment' && output?.intent === 'comment_retrigger'"
|
|
213
|
+
to: overview
|
|
214
|
+
goto_event: pr_updated
|
|
215
|
+
|
|
216
|
+
# Apply labels to new issues based on assistant output (GitHub-only)
|
|
217
|
+
apply-issue-labels:
|
|
218
|
+
type: github
|
|
219
|
+
criticality: external
|
|
220
|
+
tags: [github]
|
|
221
|
+
on: [issue_opened]
|
|
222
|
+
depends_on: [issue-assistant]
|
|
223
|
+
assume:
|
|
224
|
+
- "(outputs['issue-assistant']?.labels?.length ?? 0) > 0"
|
|
225
|
+
op: labels.add
|
|
226
|
+
# Explicitly derive labels from issue-assistant output with guardrails
|
|
227
|
+
# - Use Liquid to serialize labels array to JSON; provider will expand
|
|
228
|
+
# - Assumptions ensure the dependency exists and produced at least one label
|
|
229
|
+
values:
|
|
230
|
+
- "{{ outputs['issue-assistant'].labels | default: [] | json }}"
|
|
231
|
+
|
|
232
|
+
# External origin labelling for PRs and Issues
|
|
233
|
+
external-label:
|
|
234
|
+
type: github
|
|
235
|
+
criticality: external
|
|
236
|
+
tags: [github]
|
|
237
|
+
on: [pr_opened, issue_opened]
|
|
238
|
+
if: "!isMember() && !isContributor()"
|
|
239
|
+
op: labels.add
|
|
240
|
+
values:
|
|
241
|
+
- "external"
|
|
242
|
+
|
|
243
|
+
# ============================================================================
|
|
244
|
+
# Fact Validation System (enabled with ENABLE_FACT_VALIDATION env var)
|
|
245
|
+
# ============================================================================
|
|
246
|
+
# This system validates factual claims made by AI assistants before posting
|
|
247
|
+
# responses to GitHub issues and comments. It uses forEach with on_finish hooks
|
|
248
|
+
# to validate all facts, aggregate results, and retry with correction context
|
|
249
|
+
# if needed.
|
|
250
|
+
#
|
|
251
|
+
# To enable: Set ENABLE_FACT_VALIDATION=true environment variable
|
|
252
|
+
# ============================================================================
|
|
253
|
+
|
|
254
|
+
# Extract verifiable facts from assistant responses
|
|
255
|
+
# This is a forEach check that triggers validation for each fact
|
|
256
|
+
extract-facts:
|
|
257
|
+
type: ai
|
|
258
|
+
group: fact-validation
|
|
259
|
+
on: [issue_opened, issue_comment]
|
|
260
|
+
depends_on: ["issue-assistant|comment-assistant"]
|
|
261
|
+
# Only when validation is enabled (assistants schedule validate-fact; engine runs this dependency inline)
|
|
262
|
+
if: "env.ENABLE_FACT_VALIDATION === 'true'"
|
|
263
|
+
# Ensure we have an assistant output to analyze for this event type
|
|
264
|
+
assume:
|
|
265
|
+
- "outputs['issue-assistant'] || outputs['comment-assistant']"
|
|
266
|
+
ai:
|
|
267
|
+
skip_code_context: true
|
|
268
|
+
disableTools: true
|
|
269
|
+
prompt: |
|
|
270
|
+
Your task is to EXTRACT factual claims from the assistant's response below.
|
|
271
|
+
|
|
272
|
+
IMPORTANT: Do NOT investigate, verify, or validate any facts. Simply identify and list them.
|
|
273
|
+
Do NOT use any tools or search the codebase. Just read the response and extract claims.
|
|
274
|
+
|
|
275
|
+
Assistant's response to analyze:
|
|
276
|
+
```
|
|
277
|
+
{% if outputs['issue-assistant'] %}{{ outputs['issue-assistant'].text }}{% else %}{{ outputs['comment-assistant'].text }}{% endif %}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
If the response ends with a “References” section in a fenced block labeled `refs`, parse it. Each line will be in the form:
|
|
281
|
+
path/to/file.ext[:start[-end]|#SymbolName] - note
|
|
282
|
+
Capture it as an array of objects `{ path, lines?, symbol? }` where `lines` is the numeric line or range if present, or `symbol` is the string after `#`.
|
|
283
|
+
When assigning references to facts:
|
|
284
|
+
- If a reference clearly maps to a specific fact, include only those refs for that fact.
|
|
285
|
+
- If mapping is ambiguous, include the entire refs list for that fact (better recall than omission).
|
|
286
|
+
|
|
287
|
+
Extract verifiable factual claims about:
|
|
288
|
+
- Configuration variables and their values (e.g., "max_parallelism defaults to 4")
|
|
289
|
+
- Feature capabilities (what is/isn't supported, how features work)
|
|
290
|
+
- File paths and locations mentioned (e.g., "config is in src/config.ts")
|
|
291
|
+
- Function/class names and their behavior
|
|
292
|
+
- Command syntax and available options
|
|
293
|
+
- API endpoints and their methods
|
|
294
|
+
- Environment variables and usage
|
|
295
|
+
- Default values and constants
|
|
296
|
+
- Line numbers or code locations mentioned
|
|
297
|
+
- Data structures and schemas
|
|
298
|
+
- Dependencies and version requirements
|
|
299
|
+
|
|
300
|
+
Guidelines:
|
|
301
|
+
- Extract claims AS STATED in the response (don't verify or investigate)
|
|
302
|
+
- Focus on specific, testable assertions
|
|
303
|
+
- Each claim MUST be self-contained with ALL necessary context
|
|
304
|
+
- Include file paths, line numbers, values in the claim itself
|
|
305
|
+
- AVOID duplicates - if same fact appears multiple times, extract it once
|
|
306
|
+
- Group related info when it's the SAME fact (e.g., "value is 3 at lines 100 and 200")
|
|
307
|
+
- Each fact should be atomic and independently verifiable
|
|
308
|
+
|
|
309
|
+
Example of GOOD claims:
|
|
310
|
+
- "max_parallelism defaults to 3 in src/check-execution-engine.ts at lines 2795 and 4712"
|
|
311
|
+
- "Configuration file defaults/visor.yaml sets max_parallelism to 4 at line 11"
|
|
312
|
+
|
|
313
|
+
Example of BAD claims (missing context):
|
|
314
|
+
- "Default is 3" (missing: default of what? where?)
|
|
315
|
+
- "Code has hardcoded value" (missing: what value? where? which file?)
|
|
316
|
+
|
|
317
|
+
Do NOT extract:
|
|
318
|
+
- Recommendations (e.g., "you should change X to Y")
|
|
319
|
+
- Opinions or preferences (e.g., "this is better than")
|
|
320
|
+
- General explanations without specific claims
|
|
321
|
+
- Your own knowledge - only extract what's IN the response
|
|
322
|
+
- Duplicate facts (same claim stated multiple ways)
|
|
323
|
+
|
|
324
|
+
Return ONLY the JSON array of fact objects. Do not investigate or verify anything.
|
|
325
|
+
Each item must be: { id, category, claim, verifiable, refs? } where refs items may contain `lines` or `symbol`.
|
|
326
|
+
|
|
327
|
+
schema:
|
|
328
|
+
type: array
|
|
329
|
+
items:
|
|
330
|
+
type: object
|
|
331
|
+
properties:
|
|
332
|
+
id:
|
|
333
|
+
type: string
|
|
334
|
+
description: Unique identifier for the fact (e.g., fact-1, fact-2)
|
|
335
|
+
category:
|
|
336
|
+
type: string
|
|
337
|
+
description: Type of claim (Configuration, Feature, Documentation, API, etc.)
|
|
338
|
+
claim:
|
|
339
|
+
type: string
|
|
340
|
+
description: The exact factual statement being made
|
|
341
|
+
verifiable:
|
|
342
|
+
type: boolean
|
|
343
|
+
description: Whether this claim can be verified against the codebase
|
|
344
|
+
refs:
|
|
345
|
+
type: array
|
|
346
|
+
description: Optional list of code references (parsed from assistant References block)
|
|
347
|
+
items:
|
|
348
|
+
type: object
|
|
349
|
+
properties:
|
|
350
|
+
path:
|
|
351
|
+
type: string
|
|
352
|
+
lines:
|
|
353
|
+
type: string
|
|
354
|
+
description: Line or range, e.g., "120-145" or "88"
|
|
355
|
+
required: [path]
|
|
356
|
+
required: [id, category, claim, verifiable]
|
|
357
|
+
|
|
358
|
+
forEach: true
|
|
359
|
+
|
|
360
|
+
# After one validation wave completes, route back to the appropriate assistant
|
|
361
|
+
# using declarative transitions so the engine forward-runs dependents
|
|
362
|
+
# (assistant → extract-facts → validate-fact).
|
|
363
|
+
on_finish:
|
|
364
|
+
transitions:
|
|
365
|
+
- when: "any(outputs_history['validate-fact'], v => v && (v.is_valid === false || v.valid === false)) && event.name === 'issue_opened'"
|
|
366
|
+
to: issue-assistant
|
|
367
|
+
- when: "any(outputs_history['validate-fact'], v => v && (v.is_valid === false || v.valid === false)) && event.name === 'issue_comment'"
|
|
368
|
+
to: comment-assistant
|
|
369
|
+
|
|
370
|
+
# Validate each extracted fact
|
|
371
|
+
validate-fact:
|
|
372
|
+
type: ai
|
|
373
|
+
group: fact-validation
|
|
374
|
+
on: [issue_opened, issue_comment]
|
|
375
|
+
depends_on: [extract-facts]
|
|
376
|
+
if: "env.ENABLE_FACT_VALIDATION === 'true'"
|
|
377
|
+
ai:
|
|
378
|
+
timeout: 180000 # 3 minutes hard cap per validation
|
|
379
|
+
# always validate each fact
|
|
380
|
+
prompt: |
|
|
381
|
+
Validate this factual claim against the codebase:
|
|
382
|
+
|
|
383
|
+
**Claim:** {{ outputs['extract-facts'].claim }}
|
|
384
|
+
**Category:** {{ outputs['extract-facts'].category }}
|
|
385
|
+
**Fact ID:** {{ outputs['extract-facts'].id }}
|
|
386
|
+
|
|
387
|
+
Use code search and file reading tools to verify if this claim is accurate.
|
|
388
|
+
|
|
389
|
+
If references were provided for this fact (parsed earlier), use them FIRST and prefer them strongly:
|
|
390
|
+
{% assign refs = outputs['extract-facts'].refs %}
|
|
391
|
+
{% assign __refs_len = refs | size %}
|
|
392
|
+
{% if refs and __refs_len > 0 %}
|
|
393
|
+
Provided References:
|
|
394
|
+
{% for r in refs %}- {{ r.path }}{% if r.lines %}:{{ r.lines }}{% endif %}{% if r.symbol %}#{{ r.symbol }}{% endif %}
|
|
395
|
+
{% endfor %}
|
|
396
|
+
Strategy:
|
|
397
|
+
- If a reference has `lines`, open those line ranges first and try to validate from there.
|
|
398
|
+
- If a reference has `symbol`, locate the symbol definition in the referenced file (e.g., function/class/const). Search for common patterns like:
|
|
399
|
+
- `function SYMBOL(`, `const SYMBOL`, `let SYMBOL`, `class SYMBOL`, `export .* SYMBOL`, `SYMBOL:\s*` (TypeScript), etc.
|
|
400
|
+
Then analyze ~100 lines around the definition (±50 lines) before expanding.
|
|
401
|
+
- Expand search to nearby lines in the same files if needed (±50 lines).
|
|
402
|
+
- Only if still inconclusive, perform a broader search.
|
|
403
|
+
{% else %}
|
|
404
|
+
No provided references. Perform a targeted search (prefer exact identifiers from the claim) before broader queries.
|
|
405
|
+
{% endif %}
|
|
406
|
+
|
|
407
|
+
Provide:
|
|
408
|
+
- Evidence of what you found in the codebase
|
|
409
|
+
- Confidence level (high/medium/low) in your validation
|
|
410
|
+
- If the claim is incorrect, provide the accurate information as a correction
|
|
411
|
+
|
|
412
|
+
schema:
|
|
413
|
+
type: object
|
|
414
|
+
properties:
|
|
415
|
+
fact_id:
|
|
416
|
+
type: string
|
|
417
|
+
description: ID of the fact being validated
|
|
418
|
+
claim:
|
|
419
|
+
type: string
|
|
420
|
+
description: The original claim being validated
|
|
421
|
+
is_valid:
|
|
422
|
+
type: boolean
|
|
423
|
+
description: Whether the claim is accurate
|
|
424
|
+
confidence:
|
|
425
|
+
type: string
|
|
426
|
+
enum: [high, medium, low]
|
|
427
|
+
description: Confidence level in the validation
|
|
428
|
+
evidence:
|
|
429
|
+
type: string
|
|
430
|
+
description: Evidence found in the codebase supporting the validation
|
|
431
|
+
correction:
|
|
432
|
+
type: string
|
|
433
|
+
description: If invalid, the correct information (optional)
|
|
434
|
+
required: [fact_id, claim, is_valid, confidence, evidence]
|
|
435
|
+
|
|
436
|
+
# Aggregate validation results and expose boolean all_valid
|
|
437
|
+
aggregate:
|
|
438
|
+
type: script
|
|
439
|
+
group: fact-validation
|
|
440
|
+
on: [issue_opened, issue_comment]
|
|
441
|
+
depends_on: [validate-fact]
|
|
442
|
+
if: "env.ENABLE_FACT_VALIDATION === 'true'"
|
|
443
|
+
assume:
|
|
444
|
+
# Run only when we have per-item validations and it's the first attempt
|
|
445
|
+
- "(outputs['validate-fact']?.forEachItems?.length ?? 0) > 0"
|
|
446
|
+
- "(memory.get('attempt', 'fact-validation') ?? 0) === 0"
|
|
447
|
+
content: |
|
|
448
|
+
const vf = (outputs.history['validate-fact']||[]).filter(v => v && typeof v === 'object');
|
|
449
|
+
const ex = (outputs.history['extract-facts']||[]);
|
|
450
|
+
let lastSize = 0; for (let i = ex.length - 1; i >= 0 && lastSize === 0; i--) { if (Array.isArray(ex[i])) { lastSize = ex[i].length; } }
|
|
451
|
+
const recent = lastSize > 0 ? vf.slice(-lastSize) : vf;
|
|
452
|
+
const allValid = recent.length > 0 && recent.every(i => i && (i.is_valid === true || i.valid === true));
|
|
453
|
+
memory.set('all_valid', allValid, 'fact-validation');
|
|
454
|
+
return { all_valid: allValid };
|
|
455
|
+
schema:
|
|
456
|
+
type: object
|
|
457
|
+
properties:
|
|
458
|
+
all_valid:
|
|
459
|
+
type: boolean
|
|
460
|
+
required:
|
|
461
|
+
- all_valid
|
|
462
|
+
additionalProperties: false
|
|
463
|
+
guarantee: "output && typeof output.all_valid === 'boolean'"
|
|
464
|
+
namespace: fact-validation
|
|
465
|
+
|
|
466
|
+
# Post only when all facts are valid
|
|
467
|
+
post-verified:
|
|
468
|
+
type: log
|
|
469
|
+
group: fact-validation
|
|
470
|
+
on: [issue_opened, issue_comment]
|
|
471
|
+
depends_on: [extract-facts]
|
|
472
|
+
if: "env.ENABLE_FACT_VALIDATION === 'true' && memory.get('all_valid', 'fact-validation') === true"
|
|
473
|
+
message: "✅ Posted verified response"
|
|
474
|
+
level: info
|
|
475
|
+
|
|
476
|
+
# Retrigger noop removed — comment-assistant schedules overview directly
|
|
477
|
+
|
|
478
|
+
output:
|
|
479
|
+
pr_comment:
|
|
480
|
+
format: markdown
|
|
481
|
+
# Grouping is determined solely by each check's `group` field.
|
|
482
|
+
# The renderer ignores any global group_by; keep comments compact.
|
|
483
|
+
collapse: true
|
|
@@ -1,47 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
owner?: string;
|
|
4
|
-
repo?: string;
|
|
5
|
-
'auto-review'?: string;
|
|
6
|
-
'app-id'?: string;
|
|
7
|
-
'private-key'?: string;
|
|
8
|
-
'installation-id'?: string;
|
|
9
|
-
checks?: string;
|
|
10
|
-
'output-format'?: string;
|
|
11
|
-
'config-path'?: string;
|
|
12
|
-
'comment-on-pr'?: string;
|
|
13
|
-
'create-check'?: string;
|
|
14
|
-
'add-labels'?: string;
|
|
15
|
-
'add-reactions'?: string;
|
|
16
|
-
'fail-on-critical'?: string;
|
|
17
|
-
'fail-on-api-error'?: string;
|
|
18
|
-
'min-score'?: string;
|
|
19
|
-
'max-parallelism'?: string;
|
|
20
|
-
'fail-fast'?: string;
|
|
21
|
-
debug?: string;
|
|
22
|
-
'ai-provider'?: string;
|
|
23
|
-
'ai-model'?: string;
|
|
24
|
-
tags?: string;
|
|
25
|
-
'exclude-tags'?: string;
|
|
26
|
-
'visor-config-path'?: string;
|
|
27
|
-
'visor-checks'?: string;
|
|
28
|
-
}
|
|
29
|
-
export interface GitHubContext {
|
|
30
|
-
event_name: string;
|
|
31
|
-
repository?: {
|
|
32
|
-
owner: {
|
|
33
|
-
login: string;
|
|
34
|
-
};
|
|
35
|
-
name: string;
|
|
36
|
-
};
|
|
37
|
-
event?: {
|
|
38
|
-
comment?: Record<string, unknown>;
|
|
39
|
-
issue?: Record<string, unknown>;
|
|
40
|
-
pull_request?: Record<string, unknown>;
|
|
41
|
-
action?: string;
|
|
42
|
-
};
|
|
43
|
-
payload?: Record<string, unknown>;
|
|
44
|
-
}
|
|
1
|
+
import { GitHubActionInputs, GitHubContext } from './types/github';
|
|
2
|
+
export { GitHubActionInputs, GitHubContext };
|
|
45
3
|
export interface ActionCliOutput {
|
|
46
4
|
success: boolean;
|
|
47
5
|
output?: string;
|
|
@@ -54,57 +12,28 @@ export interface ActionCliOutput {
|
|
|
54
12
|
};
|
|
55
13
|
}
|
|
56
14
|
/**
|
|
57
|
-
*
|
|
15
|
+
* Minimal bridge between GitHub Action and Visor
|
|
16
|
+
* Provides utility functions for parsing GitHub Action inputs
|
|
58
17
|
*/
|
|
59
18
|
export declare class ActionCliBridge {
|
|
60
19
|
private githubToken;
|
|
61
20
|
private context;
|
|
62
21
|
constructor(githubToken: string, context: GitHubContext);
|
|
63
22
|
/**
|
|
64
|
-
* Determine if Visor
|
|
23
|
+
* Determine if legacy Visor inputs are present
|
|
65
24
|
*/
|
|
66
25
|
shouldUseVisor(inputs: GitHubActionInputs): boolean;
|
|
67
26
|
/**
|
|
68
|
-
* Parse GitHub Action inputs
|
|
27
|
+
* Parse GitHub Action inputs into CLI arguments
|
|
28
|
+
* Note: No validation - let the config system handle it
|
|
69
29
|
*/
|
|
70
30
|
parseGitHubInputsToCliArgs(inputs: GitHubActionInputs): string[];
|
|
71
31
|
/**
|
|
72
|
-
*
|
|
73
|
-
*/
|
|
74
|
-
executeCliWithContext(inputs: GitHubActionInputs, options?: {
|
|
75
|
-
workingDir?: string;
|
|
76
|
-
timeout?: number;
|
|
77
|
-
}): Promise<ActionCliOutput>;
|
|
78
|
-
/**
|
|
79
|
-
* Merge CLI and Action outputs for backward compatibility
|
|
80
|
-
*/
|
|
81
|
-
mergeActionAndCliOutputs(actionInputs: GitHubActionInputs, cliResult: ActionCliOutput, legacyOutputs?: Record<string, string>): Record<string, string>;
|
|
82
|
-
/**
|
|
83
|
-
* Execute command with timeout and proper error handling
|
|
84
|
-
*/
|
|
85
|
-
private executeCommand;
|
|
86
|
-
/**
|
|
87
|
-
* Parse CLI JSON output to extract relevant data
|
|
88
|
-
*/
|
|
89
|
-
private parseCliOutput;
|
|
90
|
-
/**
|
|
91
|
-
* Check if a check type is valid
|
|
92
|
-
*/
|
|
93
|
-
private isValidCheck;
|
|
94
|
-
/**
|
|
95
|
-
* Create temporary config file from action inputs
|
|
96
|
-
*/
|
|
97
|
-
createTempConfigFromInputs(inputs: GitHubActionInputs, options?: {
|
|
98
|
-
workingDir?: string;
|
|
99
|
-
}): Promise<string | null>;
|
|
100
|
-
/**
|
|
101
|
-
* Get AI prompt for a specific check type
|
|
32
|
+
* Merge CLI outputs with legacy Action outputs
|
|
102
33
|
*/
|
|
103
|
-
|
|
34
|
+
mergeActionAndCliOutputs(inputs: GitHubActionInputs, cliResult: ActionCliOutput, legacyOutputs?: Record<string, string>): Record<string, string>;
|
|
104
35
|
/**
|
|
105
|
-
* Cleanup
|
|
36
|
+
* Cleanup method for compatibility (no-op since we don't create temp files)
|
|
106
37
|
*/
|
|
107
|
-
cleanup(
|
|
108
|
-
workingDir?: string;
|
|
109
|
-
}): Promise<void>;
|
|
38
|
+
cleanup(): Promise<void>;
|
|
110
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/action-cli-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/action-cli-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAKvD;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAI1D;;;OAGG;IACI,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAgCvE;;OAEG;IACI,wBAAwB,CAC7B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,eAAe,EAC1B,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACzC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkBzB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAItC"}
|
|
@@ -20,6 +20,20 @@ export interface AIReviewConfig {
|
|
|
20
20
|
[key: string]: unknown;
|
|
21
21
|
}>;
|
|
22
22
|
mcpServers?: Record<string, import('./types/config').McpServerConfig>;
|
|
23
|
+
enableDelegate?: boolean;
|
|
24
|
+
promptType?: string;
|
|
25
|
+
systemPrompt?: string;
|
|
26
|
+
customPrompt?: string;
|
|
27
|
+
retry?: import('./types/config').AIRetryConfig;
|
|
28
|
+
fallback?: import('./types/config').AIFallbackConfig;
|
|
29
|
+
allowEdit?: boolean;
|
|
30
|
+
allowedTools?: string[];
|
|
31
|
+
disableTools?: boolean;
|
|
32
|
+
allowBash?: boolean;
|
|
33
|
+
bashConfig?: import('./types/config').BashConfig;
|
|
34
|
+
path?: string;
|
|
35
|
+
allowedFolders?: string[];
|
|
36
|
+
completionPrompt?: string;
|
|
23
37
|
}
|
|
24
38
|
export interface AIDebugInfo {
|
|
25
39
|
/** The prompt sent to the AI */
|
|
@@ -76,6 +90,10 @@ export declare class AIReviewService {
|
|
|
76
90
|
* @param sessionMode - 'clone' (default) clones history, 'append' shares history
|
|
77
91
|
*/
|
|
78
92
|
executeReviewWithSessionReuse(prInfo: PRInfo, customPrompt: string, parentSessionId: string, schema?: string | Record<string, unknown>, checkName?: string, sessionMode?: 'clone' | 'append'): Promise<ReviewSummary>;
|
|
93
|
+
/**
|
|
94
|
+
* Promise timeout helper that rejects after ms if unresolved
|
|
95
|
+
*/
|
|
96
|
+
private withTimeout;
|
|
79
97
|
/**
|
|
80
98
|
* Register a new AI session in the session registry
|
|
81
99
|
*/
|
|
@@ -92,6 +110,16 @@ export declare class AIReviewService {
|
|
|
92
110
|
* Format PR or Issue context for the AI using XML structure
|
|
93
111
|
*/
|
|
94
112
|
private formatPRContext;
|
|
113
|
+
/**
|
|
114
|
+
* Format Slack conversation context (if attached to PRInfo) as XML
|
|
115
|
+
*/
|
|
116
|
+
private formatSlackContextFromPRInfo;
|
|
117
|
+
/**
|
|
118
|
+
* Build a normalized ConversationContext for GitHub (PR/issue + comments)
|
|
119
|
+
* using the same contract as Slack's ConversationContext. This is exposed
|
|
120
|
+
* to templates via the unified `conversation` object.
|
|
121
|
+
*/
|
|
122
|
+
private buildGitHubConversationFromPRInfo;
|
|
95
123
|
/**
|
|
96
124
|
* No longer escaping XML - returning text as-is
|
|
97
125
|
*/
|
|
@@ -112,15 +140,6 @@ export declare class AIReviewService {
|
|
|
112
140
|
* Parse AI response JSON
|
|
113
141
|
*/
|
|
114
142
|
private parseAIResponse;
|
|
115
|
-
/**
|
|
116
|
-
* Extract JSON from a response that might contain surrounding text
|
|
117
|
-
* Uses proper bracket matching to find valid JSON objects or arrays
|
|
118
|
-
*/
|
|
119
|
-
private extractJsonFromResponse;
|
|
120
|
-
/**
|
|
121
|
-
* Find JSON with proper bracket matching to avoid false positives
|
|
122
|
-
*/
|
|
123
|
-
private findJsonWithBracketMatching;
|
|
124
143
|
/**
|
|
125
144
|
* Generate mock response for testing
|
|
126
145
|
*/
|