@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,157 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_logger,
|
|
3
|
+
logger
|
|
4
|
+
} from "./chunk-AGIZJ4UZ.mjs";
|
|
5
|
+
import {
|
|
6
|
+
__esm
|
|
7
|
+
} from "./chunk-WMJKH4XE.mjs";
|
|
8
|
+
|
|
9
|
+
// src/slack/prompt-state.ts
|
|
10
|
+
function getPromptStateManager(ttlMs) {
|
|
11
|
+
if (!__promptState) __promptState = new PromptStateManager(ttlMs);
|
|
12
|
+
return __promptState;
|
|
13
|
+
}
|
|
14
|
+
function resetPromptStateManager() {
|
|
15
|
+
__promptState = void 0;
|
|
16
|
+
}
|
|
17
|
+
var PromptStateManager, __promptState;
|
|
18
|
+
var init_prompt_state = __esm({
|
|
19
|
+
"src/slack/prompt-state.ts"() {
|
|
20
|
+
init_logger();
|
|
21
|
+
PromptStateManager = class {
|
|
22
|
+
waiting = /* @__PURE__ */ new Map();
|
|
23
|
+
// key: `${channel}:${threadTs}`
|
|
24
|
+
ttlMs;
|
|
25
|
+
timer;
|
|
26
|
+
firstMessage = /* @__PURE__ */ new Map();
|
|
27
|
+
summaryTs = /* @__PURE__ */ new Map();
|
|
28
|
+
// key: threadKey -> group -> ts
|
|
29
|
+
constructor(ttlMs = 60 * 60 * 1e3) {
|
|
30
|
+
this.ttlMs = ttlMs;
|
|
31
|
+
this.startCleanup();
|
|
32
|
+
}
|
|
33
|
+
key(channel, threadTs) {
|
|
34
|
+
return `${channel}:${threadTs}`;
|
|
35
|
+
}
|
|
36
|
+
setWaiting(channel, threadTs, info) {
|
|
37
|
+
const key = this.key(channel, threadTs);
|
|
38
|
+
const value = { ...info, timestamp: Date.now(), channel, threadTs };
|
|
39
|
+
this.waiting.set(key, value);
|
|
40
|
+
try {
|
|
41
|
+
logger.info(
|
|
42
|
+
`[prompt-state] waiting set for ${key} (check=${info.checkName}, prompt="${info.prompt.substring(
|
|
43
|
+
0,
|
|
44
|
+
60
|
|
45
|
+
)}\u2026")`
|
|
46
|
+
);
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
getWaiting(channel, threadTs) {
|
|
51
|
+
const key = this.key(channel, threadTs);
|
|
52
|
+
const info = this.waiting.get(key);
|
|
53
|
+
if (!info) return void 0;
|
|
54
|
+
const age = Date.now() - info.timestamp;
|
|
55
|
+
if (age > this.ttlMs) {
|
|
56
|
+
this.waiting.delete(key);
|
|
57
|
+
try {
|
|
58
|
+
logger.warn(`[prompt-state] expired ${key} (age=${Math.round(age / 1e3)}s)`);
|
|
59
|
+
} catch {
|
|
60
|
+
}
|
|
61
|
+
return void 0;
|
|
62
|
+
}
|
|
63
|
+
return info;
|
|
64
|
+
}
|
|
65
|
+
clear(channel, threadTs) {
|
|
66
|
+
const key = this.key(channel, threadTs);
|
|
67
|
+
const had = this.waiting.delete(key);
|
|
68
|
+
if (had) {
|
|
69
|
+
try {
|
|
70
|
+
logger.info(`[prompt-state] cleared ${key}`);
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return had;
|
|
75
|
+
}
|
|
76
|
+
/** Merge updates into an existing waiting entry */
|
|
77
|
+
update(channel, threadTs, patch) {
|
|
78
|
+
const key = this.key(channel, threadTs);
|
|
79
|
+
const prev = this.waiting.get(key);
|
|
80
|
+
if (!prev) return void 0;
|
|
81
|
+
const next = { ...prev, ...patch };
|
|
82
|
+
this.waiting.set(key, next);
|
|
83
|
+
try {
|
|
84
|
+
if (patch.snapshotPath) {
|
|
85
|
+
logger.info(`[prompt-state] snapshotPath set for ${key}`);
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
}
|
|
89
|
+
return next;
|
|
90
|
+
}
|
|
91
|
+
// First message capture helpers
|
|
92
|
+
setFirstMessage(channel, threadTs, text) {
|
|
93
|
+
const key = this.key(channel, threadTs);
|
|
94
|
+
if (!text || !text.trim()) return;
|
|
95
|
+
const existing = this.firstMessage.get(key);
|
|
96
|
+
if (!existing || existing.consumed) {
|
|
97
|
+
this.firstMessage.set(key, { text, consumed: false });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
consumeFirstMessage(channel, threadTs) {
|
|
101
|
+
const key = this.key(channel, threadTs);
|
|
102
|
+
const entry = this.firstMessage.get(key);
|
|
103
|
+
if (entry && !entry.consumed) {
|
|
104
|
+
entry.consumed = true;
|
|
105
|
+
this.firstMessage.set(key, entry);
|
|
106
|
+
return entry.text;
|
|
107
|
+
}
|
|
108
|
+
return void 0;
|
|
109
|
+
}
|
|
110
|
+
hasUnconsumedFirstMessage(channel, threadTs) {
|
|
111
|
+
const key = this.key(channel, threadTs);
|
|
112
|
+
const e = this.firstMessage.get(key);
|
|
113
|
+
return !!(e && !e.consumed && e.text && e.text.trim());
|
|
114
|
+
}
|
|
115
|
+
startCleanup(intervalMs = 5 * 60 * 1e3) {
|
|
116
|
+
if (this.timer) clearInterval(this.timer);
|
|
117
|
+
this.timer = setInterval(() => this.cleanup(), intervalMs);
|
|
118
|
+
if (this.timer.unref) this.timer.unref();
|
|
119
|
+
}
|
|
120
|
+
cleanup() {
|
|
121
|
+
const now = Date.now();
|
|
122
|
+
let removed = 0;
|
|
123
|
+
for (const [key, info] of this.waiting.entries()) {
|
|
124
|
+
if (now - info.timestamp > this.ttlMs) {
|
|
125
|
+
this.waiting.delete(key);
|
|
126
|
+
removed++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (const [key] of this.firstMessage.entries()) {
|
|
130
|
+
const waitingInfo = this.waiting.get(key);
|
|
131
|
+
if (!waitingInfo) {
|
|
132
|
+
const entry = this.firstMessage.get(key);
|
|
133
|
+
if (entry?.consumed) {
|
|
134
|
+
this.firstMessage.delete(key);
|
|
135
|
+
removed++;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (removed) {
|
|
140
|
+
try {
|
|
141
|
+
logger.info(`[prompt-state] cleanup removed ${removed} entries`);
|
|
142
|
+
} catch {
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return removed;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
export {
|
|
152
|
+
PromptStateManager,
|
|
153
|
+
getPromptStateManager,
|
|
154
|
+
resetPromptStateManager,
|
|
155
|
+
init_prompt_state
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=chunk-HTOKWMPO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/slack/prompt-state.ts"],"sourcesContent":["import { logger } from '../logger';\n\nexport interface WaitingPromptInfo {\n checkName: string;\n prompt: string;\n timestamp: number;\n channel: string;\n threadTs: string;\n promptMessageTs?: string;\n snapshotPath?: string;\n promptsPosted?: number; // how many prompts we posted into this thread\n context?: Record<string, unknown>;\n}\n\nexport class PromptStateManager {\n private waiting = new Map<string, WaitingPromptInfo>(); // key: `${channel}:${threadTs}`\n private ttlMs: number;\n private timer?: NodeJS.Timeout;\n private firstMessage = new Map<string, { text: string; consumed: boolean }>();\n private summaryTs = new Map<string, Map<string, string>>(); // key: threadKey -> group -> ts\n\n constructor(ttlMs: number = 60 * 60 * 1000) {\n this.ttlMs = ttlMs;\n this.startCleanup();\n }\n\n private key(channel: string, threadTs: string): string {\n return `${channel}:${threadTs}`;\n }\n\n setWaiting(\n channel: string,\n threadTs: string,\n info: Omit<WaitingPromptInfo, 'timestamp' | 'channel' | 'threadTs'>\n ) {\n const key = this.key(channel, threadTs);\n const value: WaitingPromptInfo = { ...info, timestamp: Date.now(), channel, threadTs };\n this.waiting.set(key, value);\n try {\n logger.info(\n `[prompt-state] waiting set for ${key} (check=${info.checkName}, prompt=\"${info.prompt.substring(\n 0,\n 60\n )}…\")`\n );\n } catch {}\n }\n\n getWaiting(channel: string, threadTs: string): WaitingPromptInfo | undefined {\n const key = this.key(channel, threadTs);\n const info = this.waiting.get(key);\n if (!info) return undefined;\n const age = Date.now() - info.timestamp;\n if (age > this.ttlMs) {\n this.waiting.delete(key);\n try {\n logger.warn(`[prompt-state] expired ${key} (age=${Math.round(age / 1000)}s)`);\n } catch {}\n return undefined;\n }\n return info;\n }\n\n clear(channel: string, threadTs: string): boolean {\n const key = this.key(channel, threadTs);\n const had = this.waiting.delete(key);\n if (had) {\n try {\n logger.info(`[prompt-state] cleared ${key}`);\n } catch {}\n }\n return had;\n }\n\n /** Merge updates into an existing waiting entry */\n update(\n channel: string,\n threadTs: string,\n patch: Partial<WaitingPromptInfo>\n ): WaitingPromptInfo | undefined {\n const key = this.key(channel, threadTs);\n const prev = this.waiting.get(key);\n if (!prev) return undefined;\n const next = { ...prev, ...patch } as WaitingPromptInfo;\n this.waiting.set(key, next);\n try {\n if (patch.snapshotPath) {\n logger.info(`[prompt-state] snapshotPath set for ${key}`);\n }\n } catch {}\n return next;\n }\n\n // First message capture helpers\n setFirstMessage(channel: string, threadTs: string, text: string): void {\n const key = this.key(channel, threadTs);\n if (!text || !text.trim()) return;\n const existing = this.firstMessage.get(key);\n // Only set if: no entry exists OR the existing entry was already consumed\n // This allows new messages to be captured after a resume cycle\n if (!existing || existing.consumed) {\n this.firstMessage.set(key, { text, consumed: false });\n }\n }\n consumeFirstMessage(channel: string, threadTs: string): string | undefined {\n const key = this.key(channel, threadTs);\n const entry = this.firstMessage.get(key);\n if (entry && !entry.consumed) {\n entry.consumed = true;\n this.firstMessage.set(key, entry);\n return entry.text;\n }\n return undefined;\n }\n hasUnconsumedFirstMessage(channel: string, threadTs: string): boolean {\n const key = this.key(channel, threadTs);\n const e = this.firstMessage.get(key);\n return !!(e && !e.consumed && e.text && e.text.trim());\n }\n\n private startCleanup(intervalMs: number = 5 * 60 * 1000) {\n if (this.timer) clearInterval(this.timer);\n this.timer = setInterval(() => this.cleanup(), intervalMs);\n if (this.timer.unref) this.timer.unref();\n }\n\n private cleanup(): number {\n const now = Date.now();\n let removed = 0;\n for (const [key, info] of this.waiting.entries()) {\n if (now - info.timestamp > this.ttlMs) {\n this.waiting.delete(key);\n removed++;\n }\n }\n // Also clean up stale firstMessage entries (consumed entries older than TTL)\n // Keep unconsumed entries to avoid losing user messages\n for (const [key] of this.firstMessage.entries()) {\n const waitingInfo = this.waiting.get(key);\n // If no corresponding waiting entry exists and the firstMessage was consumed,\n // the conversation is likely complete - safe to remove\n if (!waitingInfo) {\n const entry = this.firstMessage.get(key);\n if (entry?.consumed) {\n this.firstMessage.delete(key);\n removed++;\n }\n }\n }\n if (removed) {\n try {\n logger.info(`[prompt-state] cleanup removed ${removed} entries`);\n } catch {}\n }\n return removed;\n }\n}\n\nlet __promptState: PromptStateManager | undefined;\nexport function getPromptStateManager(ttlMs?: number): PromptStateManager {\n if (!__promptState) __promptState = new PromptStateManager(ttlMs);\n return __promptState;\n}\n\nexport function resetPromptStateManager(): void {\n __promptState = undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__esm,
|
|
3
|
+
__export
|
|
4
|
+
} from "./chunk-WMJKH4XE.mjs";
|
|
5
|
+
|
|
6
|
+
// src/session-registry.ts
|
|
7
|
+
var session_registry_exports = {};
|
|
8
|
+
__export(session_registry_exports, {
|
|
9
|
+
SessionRegistry: () => SessionRegistry
|
|
10
|
+
});
|
|
11
|
+
var SessionRegistry;
|
|
12
|
+
var init_session_registry = __esm({
|
|
13
|
+
"src/session-registry.ts"() {
|
|
14
|
+
SessionRegistry = class _SessionRegistry {
|
|
15
|
+
static instance;
|
|
16
|
+
sessions = /* @__PURE__ */ new Map();
|
|
17
|
+
exitHandlerRegistered = false;
|
|
18
|
+
constructor() {
|
|
19
|
+
this.registerExitHandlers();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the singleton instance of SessionRegistry
|
|
23
|
+
*/
|
|
24
|
+
static getInstance() {
|
|
25
|
+
if (!_SessionRegistry.instance) {
|
|
26
|
+
_SessionRegistry.instance = new _SessionRegistry();
|
|
27
|
+
}
|
|
28
|
+
return _SessionRegistry.instance;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register a ProbeAgent session
|
|
32
|
+
*/
|
|
33
|
+
registerSession(sessionId, agent) {
|
|
34
|
+
console.error(`\u{1F504} Registering AI session: ${sessionId}`);
|
|
35
|
+
this.sessions.set(sessionId, agent);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get an existing ProbeAgent session
|
|
39
|
+
*/
|
|
40
|
+
getSession(sessionId) {
|
|
41
|
+
const agent = this.sessions.get(sessionId);
|
|
42
|
+
if (agent) {
|
|
43
|
+
console.error(`\u267B\uFE0F Reusing AI session: ${sessionId}`);
|
|
44
|
+
}
|
|
45
|
+
return agent;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Remove a session from the registry
|
|
49
|
+
*/
|
|
50
|
+
unregisterSession(sessionId) {
|
|
51
|
+
if (this.sessions.has(sessionId)) {
|
|
52
|
+
console.error(`\u{1F5D1}\uFE0F Unregistering AI session: ${sessionId}`);
|
|
53
|
+
const agent = this.sessions.get(sessionId);
|
|
54
|
+
this.sessions.delete(sessionId);
|
|
55
|
+
if (agent && typeof agent.cleanup === "function") {
|
|
56
|
+
try {
|
|
57
|
+
agent.cleanup();
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error(`\u26A0\uFE0F Warning: Failed to cleanup ProbeAgent: ${error}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Clear all sessions (useful for cleanup)
|
|
66
|
+
*/
|
|
67
|
+
clearAllSessions() {
|
|
68
|
+
console.error(`\u{1F9F9} Clearing all AI sessions (${this.sessions.size} sessions)`);
|
|
69
|
+
for (const [, agent] of this.sessions.entries()) {
|
|
70
|
+
if (agent && typeof agent.cleanup === "function") {
|
|
71
|
+
try {
|
|
72
|
+
agent.cleanup();
|
|
73
|
+
} catch {
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.sessions.clear();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get all active session IDs
|
|
81
|
+
*/
|
|
82
|
+
getActiveSessionIds() {
|
|
83
|
+
return Array.from(this.sessions.keys());
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a session exists
|
|
87
|
+
*/
|
|
88
|
+
hasSession(sessionId) {
|
|
89
|
+
return this.sessions.has(sessionId);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clone a session with a new session ID using ProbeAgent's official clone() method
|
|
93
|
+
* This uses ProbeAgent's built-in cloning which automatically handles:
|
|
94
|
+
* - Intelligent filtering of internal messages (schema reminders, tool prompts, etc.)
|
|
95
|
+
* - Preserving system message for cache efficiency
|
|
96
|
+
* - Deep copying conversation history
|
|
97
|
+
* - Copying agent configuration
|
|
98
|
+
*/
|
|
99
|
+
async cloneSession(sourceSessionId, newSessionId, checkName) {
|
|
100
|
+
const sourceAgent = this.sessions.get(sourceSessionId);
|
|
101
|
+
if (!sourceAgent) {
|
|
102
|
+
console.error(`\u26A0\uFE0F Cannot clone session: ${sourceSessionId} not found`);
|
|
103
|
+
return void 0;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
const clonedAgent = sourceAgent.clone({
|
|
107
|
+
sessionId: newSessionId,
|
|
108
|
+
stripInternalMessages: true,
|
|
109
|
+
// Remove schema reminders, tool prompts, etc.
|
|
110
|
+
keepSystemMessage: true,
|
|
111
|
+
// Keep for cache efficiency
|
|
112
|
+
deepCopy: true
|
|
113
|
+
// Safe deep copy of history
|
|
114
|
+
});
|
|
115
|
+
if (sourceAgent.debug && checkName) {
|
|
116
|
+
try {
|
|
117
|
+
const { initializeTracer } = await import("./tracer-init-GSLPPLCD.mjs");
|
|
118
|
+
const tracerResult = await initializeTracer(newSessionId, checkName);
|
|
119
|
+
if (tracerResult) {
|
|
120
|
+
clonedAgent.tracer = tracerResult.tracer;
|
|
121
|
+
clonedAgent._telemetryConfig = tracerResult.telemetryConfig;
|
|
122
|
+
clonedAgent._traceFilePath = tracerResult.filePath;
|
|
123
|
+
}
|
|
124
|
+
} catch (traceError) {
|
|
125
|
+
console.error(
|
|
126
|
+
"\u26A0\uFE0F Warning: Failed to initialize tracing for cloned session:",
|
|
127
|
+
traceError
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (sourceAgent._mcpInitialized && typeof clonedAgent.initialize === "function") {
|
|
132
|
+
try {
|
|
133
|
+
await clonedAgent.initialize();
|
|
134
|
+
console.error(`\u{1F527} Initialized MCP tools for cloned session`);
|
|
135
|
+
} catch (initError) {
|
|
136
|
+
console.error(`\u26A0\uFE0F Warning: Failed to initialize cloned agent: ${initError}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const historyLength = clonedAgent.history?.length || 0;
|
|
140
|
+
console.error(
|
|
141
|
+
`\u{1F4CB} Cloned session ${sourceSessionId} \u2192 ${newSessionId} using ProbeAgent.clone() (${historyLength} messages, internal messages filtered)`
|
|
142
|
+
);
|
|
143
|
+
this.registerSession(newSessionId, clonedAgent);
|
|
144
|
+
return clonedAgent;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
console.error(`\u26A0\uFE0F Failed to clone session ${sourceSessionId}:`, error);
|
|
147
|
+
return void 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Register process exit handlers to cleanup sessions on exit
|
|
152
|
+
*/
|
|
153
|
+
registerExitHandlers() {
|
|
154
|
+
if (this.exitHandlerRegistered) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const cleanupAndExit = (signal) => {
|
|
158
|
+
if (this.sessions.size > 0) {
|
|
159
|
+
console.error(`
|
|
160
|
+
\u{1F9F9} [${signal}] Cleaning up ${this.sessions.size} active AI sessions...`);
|
|
161
|
+
this.clearAllSessions();
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
process.on("exit", () => {
|
|
165
|
+
if (this.sessions.size > 0) {
|
|
166
|
+
console.error(`\u{1F9F9} [exit] Cleaning up ${this.sessions.size} active AI sessions...`);
|
|
167
|
+
for (const [, agent] of this.sessions.entries()) {
|
|
168
|
+
if (agent && typeof agent.cleanup === "function") {
|
|
169
|
+
try {
|
|
170
|
+
agent.cleanup();
|
|
171
|
+
} catch {
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this.sessions.clear();
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
process.on("SIGINT", () => {
|
|
179
|
+
cleanupAndExit("SIGINT");
|
|
180
|
+
process.exit(0);
|
|
181
|
+
});
|
|
182
|
+
process.on("SIGTERM", () => {
|
|
183
|
+
cleanupAndExit("SIGTERM");
|
|
184
|
+
process.exit(0);
|
|
185
|
+
});
|
|
186
|
+
this.exitHandlerRegistered = true;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
export {
|
|
193
|
+
SessionRegistry,
|
|
194
|
+
session_registry_exports,
|
|
195
|
+
init_session_registry
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=chunk-NAW3DB3I.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/session-registry.ts"],"sourcesContent":["import { ProbeAgent } from '@probelabs/probe';\n\n/**\n * Extended ProbeAgent interface that includes tracing properties\n */\ninterface TracedProbeAgent extends ProbeAgent {\n tracer?: any; // AppTracer removed from probe\n _telemetryConfig?: any; // TelemetryConfig removed from probe\n _traceFilePath?: string;\n}\n\n/**\n * Registry to manage active ProbeAgent sessions for session reuse\n */\nexport class SessionRegistry {\n private static instance: SessionRegistry;\n private sessions: Map<string, TracedProbeAgent> = new Map();\n private exitHandlerRegistered = false;\n\n private constructor() {\n // Register process exit handlers to cleanup sessions\n this.registerExitHandlers();\n }\n\n /**\n * Get the singleton instance of SessionRegistry\n */\n public static getInstance(): SessionRegistry {\n if (!SessionRegistry.instance) {\n SessionRegistry.instance = new SessionRegistry();\n }\n return SessionRegistry.instance;\n }\n\n /**\n * Register a ProbeAgent session\n */\n public registerSession(sessionId: string, agent: TracedProbeAgent): void {\n console.error(`🔄 Registering AI session: ${sessionId}`);\n this.sessions.set(sessionId, agent);\n }\n\n /**\n * Get an existing ProbeAgent session\n */\n public getSession(sessionId: string): TracedProbeAgent | undefined {\n const agent = this.sessions.get(sessionId);\n if (agent) {\n console.error(`♻️ Reusing AI session: ${sessionId}`);\n }\n return agent;\n }\n\n /**\n * Remove a session from the registry\n */\n public unregisterSession(sessionId: string): void {\n if (this.sessions.has(sessionId)) {\n console.error(`🗑️ Unregistering AI session: ${sessionId}`);\n const agent = this.sessions.get(sessionId);\n this.sessions.delete(sessionId);\n\n // Cleanup the ProbeAgent instance to prevent hanging processes\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (agent && typeof (agent as any).cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (agent as any).cleanup();\n } catch (error) {\n console.error(`⚠️ Warning: Failed to cleanup ProbeAgent: ${error}`);\n }\n }\n }\n }\n\n /**\n * Clear all sessions (useful for cleanup)\n */\n public clearAllSessions(): void {\n console.error(`🧹 Clearing all AI sessions (${this.sessions.size} sessions)`);\n\n // Cleanup each ProbeAgent instance before clearing\n for (const [, agent] of this.sessions.entries()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (agent && typeof (agent as any).cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (agent as any).cleanup();\n } catch {\n // Silent fail during bulk cleanup\n }\n }\n }\n\n this.sessions.clear();\n }\n\n /**\n * Get all active session IDs\n */\n public getActiveSessionIds(): string[] {\n return Array.from(this.sessions.keys());\n }\n\n /**\n * Check if a session exists\n */\n public hasSession(sessionId: string): boolean {\n return this.sessions.has(sessionId);\n }\n\n /**\n * Clone a session with a new session ID using ProbeAgent's official clone() method\n * This uses ProbeAgent's built-in cloning which automatically handles:\n * - Intelligent filtering of internal messages (schema reminders, tool prompts, etc.)\n * - Preserving system message for cache efficiency\n * - Deep copying conversation history\n * - Copying agent configuration\n */\n public async cloneSession(\n sourceSessionId: string,\n newSessionId: string,\n checkName?: string\n ): Promise<ProbeAgent | undefined> {\n const sourceAgent = this.sessions.get(sourceSessionId);\n if (!sourceAgent) {\n console.error(`⚠️ Cannot clone session: ${sourceSessionId} not found`);\n return undefined;\n }\n\n try {\n // Use ProbeAgent's official clone() method with options\n // This handles intelligent message filtering automatically\n const clonedAgent = (sourceAgent as any).clone({\n sessionId: newSessionId,\n stripInternalMessages: true, // Remove schema reminders, tool prompts, etc.\n keepSystemMessage: true, // Keep for cache efficiency\n deepCopy: true, // Safe deep copy of history\n }) as TracedProbeAgent;\n\n // Set up tracing for cloned session if debug mode is enabled\n if ((sourceAgent as any).debug && checkName) {\n try {\n const { initializeTracer } = await import('./utils/tracer-init');\n const tracerResult = await initializeTracer(newSessionId, checkName);\n if (tracerResult) {\n clonedAgent.tracer = tracerResult.tracer;\n // Store telemetry config and trace file path for proper shutdown\n clonedAgent._telemetryConfig = tracerResult.telemetryConfig;\n clonedAgent._traceFilePath = tracerResult.filePath;\n }\n } catch (traceError) {\n console.error(\n '⚠️ Warning: Failed to initialize tracing for cloned session:',\n traceError\n );\n }\n }\n\n // Initialize MCP tools if the source agent had them initialized\n if (\n (sourceAgent as any)._mcpInitialized &&\n typeof (clonedAgent as any).initialize === 'function'\n ) {\n try {\n await (clonedAgent as any).initialize();\n console.error(`🔧 Initialized MCP tools for cloned session`);\n } catch (initError) {\n console.error(`⚠️ Warning: Failed to initialize cloned agent: ${initError}`);\n }\n }\n\n // Get history length for logging\n const historyLength = (clonedAgent as any).history?.length || 0;\n\n console.error(\n `📋 Cloned session ${sourceSessionId} → ${newSessionId} using ProbeAgent.clone() (${historyLength} messages, internal messages filtered)`\n );\n\n // Register the cloned session\n this.registerSession(newSessionId, clonedAgent);\n\n return clonedAgent;\n } catch (error) {\n console.error(`⚠️ Failed to clone session ${sourceSessionId}:`, error);\n return undefined;\n }\n }\n\n /**\n * Register process exit handlers to cleanup sessions on exit\n */\n private registerExitHandlers(): void {\n if (this.exitHandlerRegistered) {\n return;\n }\n\n const cleanupAndExit = (signal: string) => {\n if (this.sessions.size > 0) {\n console.error(`\\n🧹 [${signal}] Cleaning up ${this.sessions.size} active AI sessions...`);\n this.clearAllSessions();\n }\n };\n\n // Handle normal process exit\n process.on('exit', () => {\n if (this.sessions.size > 0) {\n console.error(`🧹 [exit] Cleaning up ${this.sessions.size} active AI sessions...`);\n // Note: async operations won't complete here, but sync cleanup methods will\n for (const [, agent] of this.sessions.entries()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (agent && typeof (agent as any).cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (agent as any).cleanup();\n } catch {\n // Silent fail on exit\n }\n }\n }\n this.sessions.clear();\n }\n });\n\n // Handle SIGINT (Ctrl+C)\n process.on('SIGINT', () => {\n cleanupAndExit('SIGINT');\n process.exit(0);\n });\n\n // Handle SIGTERM\n process.on('SIGTERM', () => {\n cleanupAndExit('SIGTERM');\n process.exit(0);\n });\n\n this.exitHandlerRegistered = true;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__esm,
|
|
3
|
+
__export
|
|
4
|
+
} from "./chunk-WMJKH4XE.mjs";
|
|
5
|
+
|
|
6
|
+
// src/utils/config-merger.ts
|
|
7
|
+
var config_merger_exports = {};
|
|
8
|
+
__export(config_merger_exports, {
|
|
9
|
+
ConfigMerger: () => ConfigMerger
|
|
10
|
+
});
|
|
11
|
+
var ConfigMerger;
|
|
12
|
+
var init_config_merger = __esm({
|
|
13
|
+
"src/utils/config-merger.ts"() {
|
|
14
|
+
ConfigMerger = class {
|
|
15
|
+
/**
|
|
16
|
+
* Merge two configurations with child overriding parent
|
|
17
|
+
* @param parent - Base configuration
|
|
18
|
+
* @param child - Configuration to merge on top
|
|
19
|
+
* @returns Merged configuration
|
|
20
|
+
*/
|
|
21
|
+
merge(parent, child) {
|
|
22
|
+
const result = this.deepCopy(parent);
|
|
23
|
+
if (child.version !== void 0) result.version = child.version;
|
|
24
|
+
if (child.ai_model !== void 0) result.ai_model = child.ai_model;
|
|
25
|
+
if (child.ai_provider !== void 0) result.ai_provider = child.ai_provider;
|
|
26
|
+
if (child.max_parallelism !== void 0) result.max_parallelism = child.max_parallelism;
|
|
27
|
+
if (child.fail_fast !== void 0) result.fail_fast = child.fail_fast;
|
|
28
|
+
if (child.fail_if !== void 0) result.fail_if = child.fail_if;
|
|
29
|
+
if (child.failure_conditions !== void 0)
|
|
30
|
+
result.failure_conditions = child.failure_conditions;
|
|
31
|
+
if (child.env) {
|
|
32
|
+
result.env = this.mergeObjects(parent.env || {}, child.env);
|
|
33
|
+
}
|
|
34
|
+
if (child.output) {
|
|
35
|
+
result.output = this.mergeOutputConfig(parent.output, child.output);
|
|
36
|
+
}
|
|
37
|
+
if (child.checks) {
|
|
38
|
+
result.checks = this.mergeChecks(parent.checks || {}, child.checks);
|
|
39
|
+
}
|
|
40
|
+
if (child.steps) {
|
|
41
|
+
const parentSteps = parent.steps || {};
|
|
42
|
+
const childSteps = child.steps || {};
|
|
43
|
+
result.steps = this.mergeChecks(parentSteps, childSteps);
|
|
44
|
+
}
|
|
45
|
+
if (child.tools) {
|
|
46
|
+
result.tools = this.mergeObjects(parent.tools || {}, child.tools);
|
|
47
|
+
}
|
|
48
|
+
if (child.imports) {
|
|
49
|
+
const parentImports = parent.imports || [];
|
|
50
|
+
const childImports = child.imports || [];
|
|
51
|
+
result.imports = [.../* @__PURE__ */ new Set([...parentImports, ...childImports])];
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Deep copy an object
|
|
57
|
+
*/
|
|
58
|
+
deepCopy(obj) {
|
|
59
|
+
if (obj === null || obj === void 0) {
|
|
60
|
+
return obj;
|
|
61
|
+
}
|
|
62
|
+
if (obj instanceof Date) {
|
|
63
|
+
return new Date(obj.getTime());
|
|
64
|
+
}
|
|
65
|
+
if (obj instanceof Array) {
|
|
66
|
+
const copy = [];
|
|
67
|
+
for (const item of obj) {
|
|
68
|
+
copy.push(this.deepCopy(item));
|
|
69
|
+
}
|
|
70
|
+
return copy;
|
|
71
|
+
}
|
|
72
|
+
if (obj instanceof Object) {
|
|
73
|
+
const copy = {};
|
|
74
|
+
for (const key in obj) {
|
|
75
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
76
|
+
copy[key] = this.deepCopy(obj[key]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return copy;
|
|
80
|
+
}
|
|
81
|
+
return obj;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Merge two objects (child overrides parent)
|
|
85
|
+
*/
|
|
86
|
+
mergeObjects(parent, child) {
|
|
87
|
+
const result = { ...parent };
|
|
88
|
+
for (const key in child) {
|
|
89
|
+
if (Object.prototype.hasOwnProperty.call(child, key)) {
|
|
90
|
+
const parentValue = parent[key];
|
|
91
|
+
const childValue = child[key];
|
|
92
|
+
if (childValue === null || childValue === void 0) {
|
|
93
|
+
delete result[key];
|
|
94
|
+
} else if (typeof parentValue === "object" && typeof childValue === "object" && !Array.isArray(parentValue) && !Array.isArray(childValue) && parentValue !== null && childValue !== null) {
|
|
95
|
+
result[key] = this.mergeObjects(
|
|
96
|
+
parentValue,
|
|
97
|
+
childValue
|
|
98
|
+
);
|
|
99
|
+
} else {
|
|
100
|
+
result[key] = this.deepCopy(childValue);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Merge output configurations
|
|
108
|
+
*/
|
|
109
|
+
mergeOutputConfig(parent, child) {
|
|
110
|
+
if (!child) return parent;
|
|
111
|
+
if (!parent) return child;
|
|
112
|
+
const result = this.deepCopy(parent);
|
|
113
|
+
if (child.pr_comment) {
|
|
114
|
+
result.pr_comment = this.mergeObjects(
|
|
115
|
+
parent.pr_comment || {},
|
|
116
|
+
child.pr_comment
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
if (child.file_comment !== void 0) {
|
|
120
|
+
if (child.file_comment === null) {
|
|
121
|
+
delete result.file_comment;
|
|
122
|
+
} else {
|
|
123
|
+
result.file_comment = this.mergeObjects(
|
|
124
|
+
parent.file_comment || {},
|
|
125
|
+
child.file_comment
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (child.github_checks !== void 0) {
|
|
130
|
+
if (child.github_checks === null) {
|
|
131
|
+
delete result.github_checks;
|
|
132
|
+
} else {
|
|
133
|
+
result.github_checks = this.mergeObjects(
|
|
134
|
+
parent.github_checks || {},
|
|
135
|
+
child.github_checks
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Merge check configurations with special handling
|
|
143
|
+
*/
|
|
144
|
+
mergeChecks(parent, child) {
|
|
145
|
+
const result = {};
|
|
146
|
+
for (const [checkName, checkConfig] of Object.entries(parent)) {
|
|
147
|
+
result[checkName] = this.deepCopy(checkConfig);
|
|
148
|
+
}
|
|
149
|
+
for (const [checkName, childConfig] of Object.entries(child)) {
|
|
150
|
+
const parentConfig = parent[checkName];
|
|
151
|
+
if (!parentConfig) {
|
|
152
|
+
const copiedConfig = this.deepCopy(childConfig);
|
|
153
|
+
if (!copiedConfig.type) {
|
|
154
|
+
copiedConfig.type = "ai";
|
|
155
|
+
}
|
|
156
|
+
if (!copiedConfig.on) {
|
|
157
|
+
copiedConfig.on = ["manual"];
|
|
158
|
+
}
|
|
159
|
+
if (copiedConfig.appendPrompt !== void 0) {
|
|
160
|
+
if (!copiedConfig.prompt) {
|
|
161
|
+
copiedConfig.prompt = copiedConfig.appendPrompt;
|
|
162
|
+
} else {
|
|
163
|
+
copiedConfig.prompt = copiedConfig.prompt + "\n\n" + copiedConfig.appendPrompt;
|
|
164
|
+
}
|
|
165
|
+
delete copiedConfig.appendPrompt;
|
|
166
|
+
}
|
|
167
|
+
result[checkName] = copiedConfig;
|
|
168
|
+
} else {
|
|
169
|
+
result[checkName] = this.mergeCheckConfig(parentConfig, childConfig);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Merge individual check configurations
|
|
176
|
+
*/
|
|
177
|
+
mergeCheckConfig(parent, child) {
|
|
178
|
+
const result = this.deepCopy(parent);
|
|
179
|
+
if (child.type !== void 0) result.type = child.type;
|
|
180
|
+
if (!result.type) {
|
|
181
|
+
result.type = "ai";
|
|
182
|
+
}
|
|
183
|
+
if (child.prompt !== void 0) result.prompt = child.prompt;
|
|
184
|
+
if (child.appendPrompt !== void 0) {
|
|
185
|
+
if (result.prompt) {
|
|
186
|
+
result.prompt = result.prompt + "\n\n" + child.appendPrompt;
|
|
187
|
+
} else {
|
|
188
|
+
result.prompt = child.appendPrompt;
|
|
189
|
+
}
|
|
190
|
+
delete result.appendPrompt;
|
|
191
|
+
}
|
|
192
|
+
if (child.exec !== void 0) result.exec = child.exec;
|
|
193
|
+
if (child.stdin !== void 0) result.stdin = child.stdin;
|
|
194
|
+
if (child.url !== void 0) result.url = child.url;
|
|
195
|
+
if (child.focus !== void 0) result.focus = child.focus;
|
|
196
|
+
if (child.command !== void 0) result.command = child.command;
|
|
197
|
+
if (child.ai_model !== void 0) result.ai_model = child.ai_model;
|
|
198
|
+
if (child.ai_provider !== void 0) result.ai_provider = child.ai_provider;
|
|
199
|
+
if (child.group !== void 0) result.group = child.group;
|
|
200
|
+
if (child.schema !== void 0) result.schema = child.schema;
|
|
201
|
+
if (child.if !== void 0) result.if = child.if;
|
|
202
|
+
if (child.reuse_ai_session !== void 0) result.reuse_ai_session = child.reuse_ai_session;
|
|
203
|
+
if (child.fail_if !== void 0) result.fail_if = child.fail_if;
|
|
204
|
+
if (child.failure_conditions !== void 0)
|
|
205
|
+
result.failure_conditions = child.failure_conditions;
|
|
206
|
+
if (child.on !== void 0) {
|
|
207
|
+
if (Array.isArray(child.on) && child.on.length === 0) {
|
|
208
|
+
result.on = [];
|
|
209
|
+
} else {
|
|
210
|
+
result.on = [...child.on];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (!result.on) {
|
|
214
|
+
result.on = ["manual"];
|
|
215
|
+
}
|
|
216
|
+
if (child.triggers !== void 0) {
|
|
217
|
+
result.triggers = child.triggers ? [...child.triggers] : void 0;
|
|
218
|
+
}
|
|
219
|
+
if (child.depends_on !== void 0) {
|
|
220
|
+
result.depends_on = child.depends_on ? [...child.depends_on] : void 0;
|
|
221
|
+
}
|
|
222
|
+
if (child.env) {
|
|
223
|
+
result.env = this.mergeObjects(
|
|
224
|
+
parent.env || {},
|
|
225
|
+
child.env
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
if (child.ai) {
|
|
229
|
+
result.ai = this.mergeObjects(
|
|
230
|
+
parent.ai || {},
|
|
231
|
+
child.ai
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
if (child.template) {
|
|
235
|
+
result.template = this.mergeObjects(
|
|
236
|
+
parent.template || {},
|
|
237
|
+
child.template
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Check if a check is disabled (has empty 'on' array)
|
|
244
|
+
*/
|
|
245
|
+
isCheckDisabled(check) {
|
|
246
|
+
return Array.isArray(check.on) && check.on.length === 0;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Remove disabled checks from the configuration
|
|
250
|
+
*/
|
|
251
|
+
removeDisabledChecks(config) {
|
|
252
|
+
if (!config.checks) return config;
|
|
253
|
+
const result = this.deepCopy(config);
|
|
254
|
+
const enabledChecks = {};
|
|
255
|
+
for (const [checkName, checkConfig] of Object.entries(result.checks)) {
|
|
256
|
+
if (!this.isCheckDisabled(checkConfig)) {
|
|
257
|
+
enabledChecks[checkName] = checkConfig;
|
|
258
|
+
} else {
|
|
259
|
+
console.log(`\u2139\uFE0F Check '${checkName}' is disabled (empty 'on' array)`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
result.checks = enabledChecks;
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
export {
|
|
270
|
+
ConfigMerger,
|
|
271
|
+
config_merger_exports,
|
|
272
|
+
init_config_merger
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=chunk-O5EZDNYL.mjs.map
|