@substrate-ai/factory 0.19.54
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/dist/__tests__/config.test.d.ts +11 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +215 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/factory-run-command.test.d.ts +12 -0
- package/dist/__tests__/factory-run-command.test.d.ts.map +1 -0
- package/dist/__tests__/factory-run-command.test.js +454 -0
- package/dist/__tests__/factory-run-command.test.js.map +1 -0
- package/dist/__tests__/factory-validate-command.test.d.ts +15 -0
- package/dist/__tests__/factory-validate-command.test.d.ts.map +1 -0
- package/dist/__tests__/factory-validate-command.test.js +339 -0
- package/dist/__tests__/factory-validate-command.test.js.map +1 -0
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +72 -0
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +1 -0
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +121 -0
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +1 -0
- package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +28 -0
- package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +1 -0
- package/dist/__tests__/fixtures/llm-edge-routing.dot.js +55 -0
- package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +1 -0
- package/dist/__tests__/fixtures/manager-loop.dot.d.ts +34 -0
- package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +1 -0
- package/dist/__tests__/fixtures/manager-loop.dot.js +61 -0
- package/dist/__tests__/fixtures/manager-loop.dot.js.map +1 -0
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +42 -0
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +1 -0
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +118 -0
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +1 -0
- package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +35 -0
- package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +1 -0
- package/dist/__tests__/fixtures/subgraph-parent.dot.js +69 -0
- package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +1 -0
- package/dist/__tests__/integration/advanced-graph-events.test.d.ts +19 -0
- package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +1 -0
- package/dist/__tests__/integration/advanced-graph-events.test.js +288 -0
- package/dist/__tests__/integration/advanced-graph-events.test.js.map +1 -0
- package/dist/__tests__/integration/checkpoint-resume.test.d.ts +10 -0
- package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +1 -0
- package/dist/__tests__/integration/checkpoint-resume.test.js +125 -0
- package/dist/__tests__/integration/checkpoint-resume.test.js.map +1 -0
- package/dist/__tests__/integration/conditional-pipeline.test.d.ts +10 -0
- package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/integration/conditional-pipeline.test.js +106 -0
- package/dist/__tests__/integration/conditional-pipeline.test.js.map +1 -0
- package/dist/__tests__/integration/convergence-validation.test.d.ts +14 -0
- package/dist/__tests__/integration/convergence-validation.test.d.ts.map +1 -0
- package/dist/__tests__/integration/convergence-validation.test.js +449 -0
- package/dist/__tests__/integration/convergence-validation.test.js.map +1 -0
- package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +12 -0
- package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +1 -0
- package/dist/__tests__/integration/epic44-coverage-gate.test.js +58 -0
- package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +1 -0
- package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +11 -0
- package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +1 -0
- package/dist/__tests__/integration/epic45-coverage-gate.test.js +64 -0
- package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +1 -0
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +2 -0
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +1 -0
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +285 -0
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +1 -0
- package/dist/__tests__/integration/events.test.d.ts +8 -0
- package/dist/__tests__/integration/events.test.d.ts.map +1 -0
- package/dist/__tests__/integration/events.test.js +194 -0
- package/dist/__tests__/integration/events.test.js.map +1 -0
- package/dist/__tests__/integration/graphs.d.ts +59 -0
- package/dist/__tests__/integration/graphs.d.ts.map +1 -0
- package/dist/__tests__/integration/graphs.js +164 -0
- package/dist/__tests__/integration/graphs.js.map +1 -0
- package/dist/__tests__/integration/helpers.d.ts +127 -0
- package/dist/__tests__/integration/helpers.d.ts.map +1 -0
- package/dist/__tests__/integration/helpers.js +167 -0
- package/dist/__tests__/integration/helpers.js.map +1 -0
- package/dist/__tests__/integration/integrity.test.d.ts +8 -0
- package/dist/__tests__/integration/integrity.test.d.ts.map +1 -0
- package/dist/__tests__/integration/integrity.test.js +198 -0
- package/dist/__tests__/integration/integrity.test.js.map +1 -0
- package/dist/__tests__/integration/llm-edge-routing.test.d.ts +21 -0
- package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +1 -0
- package/dist/__tests__/integration/llm-edge-routing.test.js +341 -0
- package/dist/__tests__/integration/llm-edge-routing.test.js.map +1 -0
- package/dist/__tests__/integration/manager-loop.test.d.ts +24 -0
- package/dist/__tests__/integration/manager-loop.test.d.ts.map +1 -0
- package/dist/__tests__/integration/manager-loop.test.js +276 -0
- package/dist/__tests__/integration/manager-loop.test.js.map +1 -0
- package/dist/__tests__/integration/multi-type-graph.test.d.ts +10 -0
- package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +1 -0
- package/dist/__tests__/integration/multi-type-graph.test.js +100 -0
- package/dist/__tests__/integration/multi-type-graph.test.js.map +1 -0
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +22 -0
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +1 -0
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +515 -0
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +1 -0
- package/dist/__tests__/integration/persistence.test.d.ts +8 -0
- package/dist/__tests__/integration/persistence.test.d.ts.map +1 -0
- package/dist/__tests__/integration/persistence.test.js +129 -0
- package/dist/__tests__/integration/persistence.test.js.map +1 -0
- package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +16 -0
- package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/pipeline-templates-integration.test.js +171 -0
- package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +1 -0
- package/dist/__tests__/integration/scenario-pipeline.test.d.ts +11 -0
- package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/integration/scenario-pipeline.test.js +243 -0
- package/dist/__tests__/integration/scenario-pipeline.test.js.map +1 -0
- package/dist/__tests__/integration/stylesheet-application.test.d.ts +12 -0
- package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +1 -0
- package/dist/__tests__/integration/stylesheet-application.test.js +119 -0
- package/dist/__tests__/integration/stylesheet-application.test.js.map +1 -0
- package/dist/__tests__/integration/subgraph-execution.test.d.ts +24 -0
- package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +1 -0
- package/dist/__tests__/integration/subgraph-execution.test.js +291 -0
- package/dist/__tests__/integration/subgraph-execution.test.js.map +1 -0
- package/dist/__tests__/integration/validation-errors.test.d.ts +8 -0
- package/dist/__tests__/integration/validation-errors.test.d.ts.map +1 -0
- package/dist/__tests__/integration/validation-errors.test.js +150 -0
- package/dist/__tests__/integration/validation-errors.test.js.map +1 -0
- package/dist/agent/__tests__/loop-detection.test.d.ts +2 -0
- package/dist/agent/__tests__/loop-detection.test.d.ts.map +1 -0
- package/dist/agent/__tests__/loop-detection.test.js +236 -0
- package/dist/agent/__tests__/loop-detection.test.js.map +1 -0
- package/dist/agent/__tests__/loop.test.d.ts +2 -0
- package/dist/agent/__tests__/loop.test.d.ts.map +1 -0
- package/dist/agent/__tests__/loop.test.js +868 -0
- package/dist/agent/__tests__/loop.test.js.map +1 -0
- package/dist/agent/__tests__/truncation.test.d.ts +2 -0
- package/dist/agent/__tests__/truncation.test.d.ts.map +1 -0
- package/dist/agent/__tests__/truncation.test.js +276 -0
- package/dist/agent/__tests__/truncation.test.js.map +1 -0
- package/dist/agent/index.d.ts +11 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +13 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/loop-detection.d.ts +21 -0
- package/dist/agent/loop-detection.d.ts.map +1 -0
- package/dist/agent/loop-detection.js +61 -0
- package/dist/agent/loop-detection.js.map +1 -0
- package/dist/agent/loop.d.ts +88 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +411 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/anthropic-tools.test.js +49 -0
- package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +1 -0
- package/dist/agent/tools/__tests__/environment.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/environment.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/environment.test.js +33 -0
- package/dist/agent/tools/__tests__/environment.test.js.map +1 -0
- package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/gemini-tools.test.js +98 -0
- package/dist/agent/tools/__tests__/gemini-tools.test.js.map +1 -0
- package/dist/agent/tools/__tests__/openai-tools.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/openai-tools.test.js +53 -0
- package/dist/agent/tools/__tests__/openai-tools.test.js.map +1 -0
- package/dist/agent/tools/__tests__/patch.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/patch.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/patch.test.js +116 -0
- package/dist/agent/tools/__tests__/patch.test.js.map +1 -0
- package/dist/agent/tools/__tests__/profiles.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/profiles.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/profiles.test.js +125 -0
- package/dist/agent/tools/__tests__/profiles.test.js.map +1 -0
- package/dist/agent/tools/__tests__/registry.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/registry.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/registry.test.js +94 -0
- package/dist/agent/tools/__tests__/registry.test.js.map +1 -0
- package/dist/agent/tools/__tests__/shared.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/shared.test.d.ts.map +1 -0
- package/dist/agent/tools/__tests__/shared.test.js +131 -0
- package/dist/agent/tools/__tests__/shared.test.js.map +1 -0
- package/dist/agent/tools/anthropic-tools.d.ts +15 -0
- package/dist/agent/tools/anthropic-tools.d.ts.map +1 -0
- package/dist/agent/tools/anthropic-tools.js +45 -0
- package/dist/agent/tools/anthropic-tools.js.map +1 -0
- package/dist/agent/tools/environment.d.ts +11 -0
- package/dist/agent/tools/environment.d.ts.map +1 -0
- package/dist/agent/tools/environment.js +35 -0
- package/dist/agent/tools/environment.js.map +1 -0
- package/dist/agent/tools/gemini-tools.d.ts +29 -0
- package/dist/agent/tools/gemini-tools.d.ts.map +1 -0
- package/dist/agent/tools/gemini-tools.js +112 -0
- package/dist/agent/tools/gemini-tools.js.map +1 -0
- package/dist/agent/tools/index.d.ts +13 -0
- package/dist/agent/tools/index.d.ts.map +1 -0
- package/dist/agent/tools/index.js +13 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/tools/openai-tools.d.ts +18 -0
- package/dist/agent/tools/openai-tools.d.ts.map +1 -0
- package/dist/agent/tools/openai-tools.js +208 -0
- package/dist/agent/tools/openai-tools.js.map +1 -0
- package/dist/agent/tools/profiles.d.ts +66 -0
- package/dist/agent/tools/profiles.d.ts.map +1 -0
- package/dist/agent/tools/profiles.js +121 -0
- package/dist/agent/tools/profiles.js.map +1 -0
- package/dist/agent/tools/registry.d.ts +16 -0
- package/dist/agent/tools/registry.d.ts.map +1 -0
- package/dist/agent/tools/registry.js +55 -0
- package/dist/agent/tools/registry.js.map +1 -0
- package/dist/agent/tools/shared.d.ts +10 -0
- package/dist/agent/tools/shared.d.ts.map +1 -0
- package/dist/agent/tools/shared.js +207 -0
- package/dist/agent/tools/shared.js.map +1 -0
- package/dist/agent/tools/types.d.ts +55 -0
- package/dist/agent/tools/types.d.ts.map +1 -0
- package/dist/agent/tools/types.js +14 -0
- package/dist/agent/tools/types.js.map +1 -0
- package/dist/agent/truncation.d.ts +29 -0
- package/dist/agent/truncation.d.ts.map +1 -0
- package/dist/agent/truncation.js +76 -0
- package/dist/agent/truncation.js.map +1 -0
- package/dist/agent/types.d.ts +91 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +45 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/backend/__tests__/direct-backend.test.d.ts +14 -0
- package/dist/backend/__tests__/direct-backend.test.d.ts.map +1 -0
- package/dist/backend/__tests__/direct-backend.test.js +393 -0
- package/dist/backend/__tests__/direct-backend.test.js.map +1 -0
- package/dist/backend/__tests__/direct-bootstrap.test.d.ts +7 -0
- package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +1 -0
- package/dist/backend/__tests__/direct-bootstrap.test.js +177 -0
- package/dist/backend/__tests__/direct-bootstrap.test.js.map +1 -0
- package/dist/backend/__tests__/mock-backend.test.d.ts +7 -0
- package/dist/backend/__tests__/mock-backend.test.d.ts.map +1 -0
- package/dist/backend/__tests__/mock-backend.test.js +273 -0
- package/dist/backend/__tests__/mock-backend.test.js.map +1 -0
- package/dist/backend/__tests__/parity.test.d.ts +17 -0
- package/dist/backend/__tests__/parity.test.d.ts.map +1 -0
- package/dist/backend/__tests__/parity.test.js +411 -0
- package/dist/backend/__tests__/parity.test.js.map +1 -0
- package/dist/backend/direct-backend.d.ts +27 -0
- package/dist/backend/direct-backend.d.ts.map +1 -0
- package/dist/backend/direct-backend.js +76 -0
- package/dist/backend/direct-backend.js.map +1 -0
- package/dist/backend/direct-bootstrap.d.ts +29 -0
- package/dist/backend/direct-bootstrap.d.ts.map +1 -0
- package/dist/backend/direct-bootstrap.js +109 -0
- package/dist/backend/direct-bootstrap.js.map +1 -0
- package/dist/backend/index.d.ts +11 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +8 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/mock-backend.d.ts +49 -0
- package/dist/backend/mock-backend.d.ts.map +1 -0
- package/dist/backend/mock-backend.js +87 -0
- package/dist/backend/mock-backend.js.map +1 -0
- package/dist/backend/types.d.ts +74 -0
- package/dist/backend/types.d.ts.map +1 -0
- package/dist/backend/types.js +12 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/config.d.ts +196 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +140 -0
- package/dist/config.js.map +1 -0
- package/dist/context/__tests__/auto-summarizer.test.d.ts +14 -0
- package/dist/context/__tests__/auto-summarizer.test.d.ts.map +1 -0
- package/dist/context/__tests__/auto-summarizer.test.js +189 -0
- package/dist/context/__tests__/auto-summarizer.test.js.map +1 -0
- package/dist/context/__tests__/context-cli-command.test.d.ts +7 -0
- package/dist/context/__tests__/context-cli-command.test.d.ts.map +1 -0
- package/dist/context/__tests__/context-cli-command.test.js +331 -0
- package/dist/context/__tests__/context-cli-command.test.js.map +1 -0
- package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +2 -0
- package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +1 -0
- package/dist/context/__tests__/pyramid-summary-integration.test.js +533 -0
- package/dist/context/__tests__/pyramid-summary-integration.test.js.map +1 -0
- package/dist/context/__tests__/summarizer.test.d.ts +2 -0
- package/dist/context/__tests__/summarizer.test.d.ts.map +1 -0
- package/dist/context/__tests__/summarizer.test.js +189 -0
- package/dist/context/__tests__/summarizer.test.js.map +1 -0
- package/dist/context/__tests__/summary-cache.test.d.ts +2 -0
- package/dist/context/__tests__/summary-cache.test.d.ts.map +1 -0
- package/dist/context/__tests__/summary-cache.test.js +214 -0
- package/dist/context/__tests__/summary-cache.test.js.map +1 -0
- package/dist/context/__tests__/summary-metrics.test.d.ts +2 -0
- package/dist/context/__tests__/summary-metrics.test.d.ts.map +1 -0
- package/dist/context/__tests__/summary-metrics.test.js +172 -0
- package/dist/context/__tests__/summary-metrics.test.js.map +1 -0
- package/dist/context/__tests__/summary-types.test.d.ts +2 -0
- package/dist/context/__tests__/summary-types.test.d.ts.map +1 -0
- package/dist/context/__tests__/summary-types.test.js +130 -0
- package/dist/context/__tests__/summary-types.test.js.map +1 -0
- package/dist/context/auto-summarizer.d.ts +120 -0
- package/dist/context/auto-summarizer.d.ts.map +1 -0
- package/dist/context/auto-summarizer.js +91 -0
- package/dist/context/auto-summarizer.js.map +1 -0
- package/dist/context/cli-command.d.ts +109 -0
- package/dist/context/cli-command.d.ts.map +1 -0
- package/dist/context/cli-command.js +382 -0
- package/dist/context/cli-command.js.map +1 -0
- package/dist/context/index.d.ts +8 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +8 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/summarizer.d.ts +12 -0
- package/dist/context/summarizer.d.ts.map +1 -0
- package/dist/context/summarizer.js +105 -0
- package/dist/context/summarizer.js.map +1 -0
- package/dist/context/summary-cache.d.ts +41 -0
- package/dist/context/summary-cache.d.ts.map +1 -0
- package/dist/context/summary-cache.js +80 -0
- package/dist/context/summary-cache.js.map +1 -0
- package/dist/context/summary-engine.d.ts +46 -0
- package/dist/context/summary-engine.d.ts.map +1 -0
- package/dist/context/summary-engine.js +2 -0
- package/dist/context/summary-engine.js.map +1 -0
- package/dist/context/summary-metrics.d.ts +75 -0
- package/dist/context/summary-metrics.d.ts.map +1 -0
- package/dist/context/summary-metrics.js +160 -0
- package/dist/context/summary-metrics.js.map +1 -0
- package/dist/context/summary-types.d.ts +103 -0
- package/dist/context/summary-types.d.ts.map +1 -0
- package/dist/context/summary-types.js +39 -0
- package/dist/context/summary-types.js.map +1 -0
- package/dist/convergence/__tests__/budget.test.d.ts +6 -0
- package/dist/convergence/__tests__/budget.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/budget.test.js +187 -0
- package/dist/convergence/__tests__/budget.test.js.map +1 -0
- package/dist/convergence/__tests__/controller.test.d.ts +9 -0
- package/dist/convergence/__tests__/controller.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/controller.test.js +585 -0
- package/dist/convergence/__tests__/controller.test.js.map +1 -0
- package/dist/convergence/__tests__/dual-signal.test.d.ts +14 -0
- package/dist/convergence/__tests__/dual-signal.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/dual-signal.test.js +123 -0
- package/dist/convergence/__tests__/dual-signal.test.js.map +1 -0
- package/dist/convergence/__tests__/epic46-integration.test.d.ts +15 -0
- package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/epic46-integration.test.js +522 -0
- package/dist/convergence/__tests__/epic46-integration.test.js.map +1 -0
- package/dist/convergence/__tests__/plateau.test.d.ts +6 -0
- package/dist/convergence/__tests__/plateau.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/plateau.test.js +163 -0
- package/dist/convergence/__tests__/plateau.test.js.map +1 -0
- package/dist/convergence/__tests__/remediation.test.d.ts +11 -0
- package/dist/convergence/__tests__/remediation.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/remediation.test.js +209 -0
- package/dist/convergence/__tests__/remediation.test.js.map +1 -0
- package/dist/convergence/__tests__/scenario-primary.test.d.ts +13 -0
- package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +1 -0
- package/dist/convergence/__tests__/scenario-primary.test.js +183 -0
- package/dist/convergence/__tests__/scenario-primary.test.js.map +1 -0
- package/dist/convergence/budget.d.ts +181 -0
- package/dist/convergence/budget.d.ts.map +1 -0
- package/dist/convergence/budget.js +218 -0
- package/dist/convergence/budget.js.map +1 -0
- package/dist/convergence/controller.d.ts +133 -0
- package/dist/convergence/controller.d.ts.map +1 -0
- package/dist/convergence/controller.js +102 -0
- package/dist/convergence/controller.js.map +1 -0
- package/dist/convergence/dual-signal.d.ts +73 -0
- package/dist/convergence/dual-signal.d.ts.map +1 -0
- package/dist/convergence/dual-signal.js +78 -0
- package/dist/convergence/dual-signal.js.map +1 -0
- package/dist/convergence/index.d.ts +17 -0
- package/dist/convergence/index.d.ts.map +1 -0
- package/dist/convergence/index.js +11 -0
- package/dist/convergence/index.js.map +1 -0
- package/dist/convergence/plateau.d.ts +99 -0
- package/dist/convergence/plateau.d.ts.map +1 -0
- package/dist/convergence/plateau.js +83 -0
- package/dist/convergence/plateau.js.map +1 -0
- package/dist/convergence/remediation.d.ts +105 -0
- package/dist/convergence/remediation.d.ts.map +1 -0
- package/dist/convergence/remediation.js +117 -0
- package/dist/convergence/remediation.js.map +1 -0
- package/dist/events.d.ts +331 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +13 -0
- package/dist/events.js.map +1 -0
- package/dist/factory-command.d.ts +40 -0
- package/dist/factory-command.d.ts.map +1 -0
- package/dist/factory-command.js +626 -0
- package/dist/factory-command.js.map +1 -0
- package/dist/factory-command.test.d.ts +8 -0
- package/dist/factory-command.test.d.ts.map +1 -0
- package/dist/factory-command.test.js +304 -0
- package/dist/factory-command.test.js.map +1 -0
- package/dist/graph/__tests__/attractor-compliance.test.d.ts +10 -0
- package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +1 -0
- package/dist/graph/__tests__/attractor-compliance.test.js +766 -0
- package/dist/graph/__tests__/attractor-compliance.test.js.map +1 -0
- package/dist/graph/__tests__/checkpoint.test.d.ts +8 -0
- package/dist/graph/__tests__/checkpoint.test.d.ts.map +1 -0
- package/dist/graph/__tests__/checkpoint.test.js +329 -0
- package/dist/graph/__tests__/checkpoint.test.js.map +1 -0
- package/dist/graph/__tests__/condition-parser.test.d.ts +14 -0
- package/dist/graph/__tests__/condition-parser.test.d.ts.map +1 -0
- package/dist/graph/__tests__/condition-parser.test.js +406 -0
- package/dist/graph/__tests__/condition-parser.test.js.map +1 -0
- package/dist/graph/__tests__/context.test.d.ts +14 -0
- package/dist/graph/__tests__/context.test.d.ts.map +1 -0
- package/dist/graph/__tests__/context.test.js +276 -0
- package/dist/graph/__tests__/context.test.js.map +1 -0
- package/dist/graph/__tests__/edge-selector-events.test.d.ts +11 -0
- package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +1 -0
- package/dist/graph/__tests__/edge-selector-events.test.js +184 -0
- package/dist/graph/__tests__/edge-selector-events.test.js.map +1 -0
- package/dist/graph/__tests__/edge-selector.test.d.ts +6 -0
- package/dist/graph/__tests__/edge-selector.test.d.ts.map +1 -0
- package/dist/graph/__tests__/edge-selector.test.js +452 -0
- package/dist/graph/__tests__/edge-selector.test.js.map +1 -0
- package/dist/graph/__tests__/executor-convergence.test.d.ts +12 -0
- package/dist/graph/__tests__/executor-convergence.test.d.ts.map +1 -0
- package/dist/graph/__tests__/executor-convergence.test.js +432 -0
- package/dist/graph/__tests__/executor-convergence.test.js.map +1 -0
- package/dist/graph/__tests__/executor-fidelity.test.d.ts +13 -0
- package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +1 -0
- package/dist/graph/__tests__/executor-fidelity.test.js +335 -0
- package/dist/graph/__tests__/executor-fidelity.test.js.map +1 -0
- package/dist/graph/__tests__/executor.test.d.ts +14 -0
- package/dist/graph/__tests__/executor.test.d.ts.map +1 -0
- package/dist/graph/__tests__/executor.test.js +901 -0
- package/dist/graph/__tests__/executor.test.js.map +1 -0
- package/dist/graph/__tests__/fidelity.test.d.ts +8 -0
- package/dist/graph/__tests__/fidelity.test.d.ts.map +1 -0
- package/dist/graph/__tests__/fidelity.test.js +135 -0
- package/dist/graph/__tests__/fidelity.test.js.map +1 -0
- package/dist/graph/__tests__/llm-evaluator.test.d.ts +7 -0
- package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +1 -0
- package/dist/graph/__tests__/llm-evaluator.test.js +106 -0
- package/dist/graph/__tests__/llm-evaluator.test.js.map +1 -0
- package/dist/graph/__tests__/parser-chaining.test.d.ts +13 -0
- package/dist/graph/__tests__/parser-chaining.test.d.ts.map +1 -0
- package/dist/graph/__tests__/parser-chaining.test.js +215 -0
- package/dist/graph/__tests__/parser-chaining.test.js.map +1 -0
- package/dist/graph/__tests__/parser.test.d.ts +22 -0
- package/dist/graph/__tests__/parser.test.d.ts.map +1 -0
- package/dist/graph/__tests__/parser.test.js +452 -0
- package/dist/graph/__tests__/parser.test.js.map +1 -0
- package/dist/graph/__tests__/run-state.test.d.ts +13 -0
- package/dist/graph/__tests__/run-state.test.d.ts.map +1 -0
- package/dist/graph/__tests__/run-state.test.js +189 -0
- package/dist/graph/__tests__/run-state.test.js.map +1 -0
- package/dist/graph/__tests__/transformer.test.d.ts +16 -0
- package/dist/graph/__tests__/transformer.test.d.ts.map +1 -0
- package/dist/graph/__tests__/transformer.test.js +350 -0
- package/dist/graph/__tests__/transformer.test.js.map +1 -0
- package/dist/graph/__tests__/validator-errors.test.d.ts +15 -0
- package/dist/graph/__tests__/validator-errors.test.d.ts.map +1 -0
- package/dist/graph/__tests__/validator-errors.test.js +572 -0
- package/dist/graph/__tests__/validator-errors.test.js.map +1 -0
- package/dist/graph/__tests__/validator-warnings.test.d.ts +15 -0
- package/dist/graph/__tests__/validator-warnings.test.d.ts.map +1 -0
- package/dist/graph/__tests__/validator-warnings.test.js +363 -0
- package/dist/graph/__tests__/validator-warnings.test.js.map +1 -0
- package/dist/graph/checkpoint.d.ts +61 -0
- package/dist/graph/checkpoint.d.ts.map +1 -0
- package/dist/graph/checkpoint.js +80 -0
- package/dist/graph/checkpoint.js.map +1 -0
- package/dist/graph/condition-parser.d.ts +55 -0
- package/dist/graph/condition-parser.d.ts.map +1 -0
- package/dist/graph/condition-parser.js +213 -0
- package/dist/graph/condition-parser.js.map +1 -0
- package/dist/graph/context.d.ts +53 -0
- package/dist/graph/context.d.ts.map +1 -0
- package/dist/graph/context.js +90 -0
- package/dist/graph/context.js.map +1 -0
- package/dist/graph/edge-selector.d.ts +74 -0
- package/dist/graph/edge-selector.d.ts.map +1 -0
- package/dist/graph/edge-selector.js +178 -0
- package/dist/graph/edge-selector.js.map +1 -0
- package/dist/graph/executor.d.ts +133 -0
- package/dist/graph/executor.d.ts.map +1 -0
- package/dist/graph/executor.js +787 -0
- package/dist/graph/executor.js.map +1 -0
- package/dist/graph/fidelity.d.ts +27 -0
- package/dist/graph/fidelity.d.ts.map +1 -0
- package/dist/graph/fidelity.js +38 -0
- package/dist/graph/fidelity.js.map +1 -0
- package/dist/graph/index.d.ts +13 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +9 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/llm-evaluator.d.ts +61 -0
- package/dist/graph/llm-evaluator.d.ts.map +1 -0
- package/dist/graph/llm-evaluator.js +106 -0
- package/dist/graph/llm-evaluator.js.map +1 -0
- package/dist/graph/parser.d.ts +28 -0
- package/dist/graph/parser.d.ts.map +1 -0
- package/dist/graph/parser.js +370 -0
- package/dist/graph/parser.js.map +1 -0
- package/dist/graph/rules/error-rules.d.ts +19 -0
- package/dist/graph/rules/error-rules.d.ts.map +1 -0
- package/dist/graph/rules/error-rules.js +264 -0
- package/dist/graph/rules/error-rules.js.map +1 -0
- package/dist/graph/rules/warning-rules.d.ts +7 -0
- package/dist/graph/rules/warning-rules.d.ts.map +1 -0
- package/dist/graph/rules/warning-rules.js +165 -0
- package/dist/graph/rules/warning-rules.js.map +1 -0
- package/dist/graph/run-state.d.ts +62 -0
- package/dist/graph/run-state.d.ts.map +1 -0
- package/dist/graph/run-state.js +79 -0
- package/dist/graph/run-state.js.map +1 -0
- package/dist/graph/transformer.d.ts +31 -0
- package/dist/graph/transformer.d.ts.map +1 -0
- package/dist/graph/transformer.js +64 -0
- package/dist/graph/transformer.js.map +1 -0
- package/dist/graph/types.d.ts +320 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +6 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/validator.d.ts +16 -0
- package/dist/graph/validator.d.ts.map +1 -0
- package/dist/graph/validator.js +40 -0
- package/dist/graph/validator.js.map +1 -0
- package/dist/handlers/__tests__/codergen-handler.test.d.ts +14 -0
- package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/codergen-handler.test.js +442 -0
- package/dist/handlers/__tests__/codergen-handler.test.js.map +1 -0
- package/dist/handlers/__tests__/fan-in.test.d.ts +14 -0
- package/dist/handlers/__tests__/fan-in.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/fan-in.test.js +399 -0
- package/dist/handlers/__tests__/fan-in.test.js.map +1 -0
- package/dist/handlers/__tests__/join-policy.test.d.ts +9 -0
- package/dist/handlers/__tests__/join-policy.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/join-policy.test.js +201 -0
- package/dist/handlers/__tests__/join-policy.test.js.map +1 -0
- package/dist/handlers/__tests__/manager-loop.test.d.ts +14 -0
- package/dist/handlers/__tests__/manager-loop.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/manager-loop.test.js +322 -0
- package/dist/handlers/__tests__/manager-loop.test.js.map +1 -0
- package/dist/handlers/__tests__/parallel-events.test.d.ts +12 -0
- package/dist/handlers/__tests__/parallel-events.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/parallel-events.test.js +252 -0
- package/dist/handlers/__tests__/parallel-events.test.js.map +1 -0
- package/dist/handlers/__tests__/parallel-handler.test.d.ts +14 -0
- package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/parallel-handler.test.js +337 -0
- package/dist/handlers/__tests__/parallel-handler.test.js.map +1 -0
- package/dist/handlers/__tests__/parallel-join.test.d.ts +9 -0
- package/dist/handlers/__tests__/parallel-join.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/parallel-join.test.js +267 -0
- package/dist/handlers/__tests__/parallel-join.test.js.map +1 -0
- package/dist/handlers/__tests__/registry.test.d.ts +14 -0
- package/dist/handlers/__tests__/registry.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/registry.test.js +315 -0
- package/dist/handlers/__tests__/registry.test.js.map +1 -0
- package/dist/handlers/__tests__/subgraph-events.test.d.ts +10 -0
- package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/subgraph-events.test.js +189 -0
- package/dist/handlers/__tests__/subgraph-events.test.js.map +1 -0
- package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +14 -0
- package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/subgraph-inheritance.test.js +267 -0
- package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +1 -0
- package/dist/handlers/__tests__/subgraph.test.d.ts +14 -0
- package/dist/handlers/__tests__/subgraph.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/subgraph.test.js +369 -0
- package/dist/handlers/__tests__/subgraph.test.js.map +1 -0
- package/dist/handlers/__tests__/tool-handler.test.d.ts +11 -0
- package/dist/handlers/__tests__/tool-handler.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/tool-handler.test.js +184 -0
- package/dist/handlers/__tests__/tool-handler.test.js.map +1 -0
- package/dist/handlers/__tests__/tool-scenario.test.d.ts +12 -0
- package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/tool-scenario.test.js +222 -0
- package/dist/handlers/__tests__/tool-scenario.test.js.map +1 -0
- package/dist/handlers/__tests__/wait-human-handler.test.d.ts +11 -0
- package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +1 -0
- package/dist/handlers/__tests__/wait-human-handler.test.js +251 -0
- package/dist/handlers/__tests__/wait-human-handler.test.js.map +1 -0
- package/dist/handlers/codergen-handler.d.ts +83 -0
- package/dist/handlers/codergen-handler.d.ts.map +1 -0
- package/dist/handlers/codergen-handler.js +152 -0
- package/dist/handlers/codergen-handler.js.map +1 -0
- package/dist/handlers/conditional.d.ts +15 -0
- package/dist/handlers/conditional.d.ts.map +1 -0
- package/dist/handlers/conditional.js +16 -0
- package/dist/handlers/conditional.js.map +1 -0
- package/dist/handlers/exit.d.ts +10 -0
- package/dist/handlers/exit.d.ts.map +1 -0
- package/dist/handlers/exit.js +11 -0
- package/dist/handlers/exit.js.map +1 -0
- package/dist/handlers/fan-in.d.ts +74 -0
- package/dist/handlers/fan-in.d.ts.map +1 -0
- package/dist/handlers/fan-in.js +191 -0
- package/dist/handlers/fan-in.js.map +1 -0
- package/dist/handlers/index.d.ts +29 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +22 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/join-policy.d.ts +117 -0
- package/dist/handlers/join-policy.d.ts.map +1 -0
- package/dist/handlers/join-policy.js +129 -0
- package/dist/handlers/join-policy.js.map +1 -0
- package/dist/handlers/manager-loop.d.ts +54 -0
- package/dist/handlers/manager-loop.d.ts.map +1 -0
- package/dist/handlers/manager-loop.js +177 -0
- package/dist/handlers/manager-loop.js.map +1 -0
- package/dist/handlers/parallel.d.ts +31 -0
- package/dist/handlers/parallel.d.ts.map +1 -0
- package/dist/handlers/parallel.js +362 -0
- package/dist/handlers/parallel.js.map +1 -0
- package/dist/handlers/registry.d.ts +75 -0
- package/dist/handlers/registry.d.ts.map +1 -0
- package/dist/handlers/registry.js +132 -0
- package/dist/handlers/registry.js.map +1 -0
- package/dist/handlers/start.d.ts +10 -0
- package/dist/handlers/start.d.ts.map +1 -0
- package/dist/handlers/start.js +11 -0
- package/dist/handlers/start.js.map +1 -0
- package/dist/handlers/subgraph.d.ts +46 -0
- package/dist/handlers/subgraph.d.ts.map +1 -0
- package/dist/handlers/subgraph.js +178 -0
- package/dist/handlers/subgraph.js.map +1 -0
- package/dist/handlers/tool.d.ts +36 -0
- package/dist/handlers/tool.d.ts.map +1 -0
- package/dist/handlers/tool.js +99 -0
- package/dist/handlers/tool.js.map +1 -0
- package/dist/handlers/types.d.ts +98 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +6 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/handlers/wait-human.d.ts +65 -0
- package/dist/handlers/wait-human.d.ts.map +1 -0
- package/dist/handlers/wait-human.js +124 -0
- package/dist/handlers/wait-human.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/__tests__/client.test.d.ts +2 -0
- package/dist/llm/__tests__/client.test.d.ts.map +1 -0
- package/dist/llm/__tests__/client.test.js +198 -0
- package/dist/llm/__tests__/client.test.js.map +1 -0
- package/dist/llm/__tests__/types.test.d.ts +2 -0
- package/dist/llm/__tests__/types.test.d.ts.map +1 -0
- package/dist/llm/__tests__/types.test.js +289 -0
- package/dist/llm/__tests__/types.test.js.map +1 -0
- package/dist/llm/client.d.ts +19 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +50 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/index.d.ts +6 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +6 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +2 -0
- package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +1 -0
- package/dist/llm/middleware/__tests__/cost-tracking.test.js +73 -0
- package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +1 -0
- package/dist/llm/middleware/__tests__/logging.test.d.ts +2 -0
- package/dist/llm/middleware/__tests__/logging.test.d.ts.map +1 -0
- package/dist/llm/middleware/__tests__/logging.test.js +127 -0
- package/dist/llm/middleware/__tests__/logging.test.js.map +1 -0
- package/dist/llm/middleware/__tests__/retry.test.d.ts +2 -0
- package/dist/llm/middleware/__tests__/retry.test.d.ts.map +1 -0
- package/dist/llm/middleware/__tests__/retry.test.js +126 -0
- package/dist/llm/middleware/__tests__/retry.test.js.map +1 -0
- package/dist/llm/middleware/cost-tracking.d.ts +8 -0
- package/dist/llm/middleware/cost-tracking.d.ts.map +1 -0
- package/dist/llm/middleware/cost-tracking.js +34 -0
- package/dist/llm/middleware/cost-tracking.js.map +1 -0
- package/dist/llm/middleware/index.d.ts +5 -0
- package/dist/llm/middleware/index.d.ts.map +1 -0
- package/dist/llm/middleware/index.js +6 -0
- package/dist/llm/middleware/index.js.map +1 -0
- package/dist/llm/middleware/logging.d.ts +6 -0
- package/dist/llm/middleware/logging.d.ts.map +1 -0
- package/dist/llm/middleware/logging.js +54 -0
- package/dist/llm/middleware/logging.js.map +1 -0
- package/dist/llm/middleware/retry.d.ts +14 -0
- package/dist/llm/middleware/retry.d.ts.map +1 -0
- package/dist/llm/middleware/retry.js +40 -0
- package/dist/llm/middleware/retry.js.map +1 -0
- package/dist/llm/middleware/types.d.ts +23 -0
- package/dist/llm/middleware/types.d.ts.map +1 -0
- package/dist/llm/middleware/types.js +24 -0
- package/dist/llm/middleware/types.js.map +1 -0
- package/dist/llm/model-registry.d.ts +14 -0
- package/dist/llm/model-registry.d.ts.map +1 -0
- package/dist/llm/model-registry.js +32 -0
- package/dist/llm/model-registry.js.map +1 -0
- package/dist/llm/providers/__tests__/anthropic.test.d.ts +2 -0
- package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +1 -0
- package/dist/llm/providers/__tests__/anthropic.test.js +412 -0
- package/dist/llm/providers/__tests__/anthropic.test.js.map +1 -0
- package/dist/llm/providers/__tests__/gemini.test.d.ts +2 -0
- package/dist/llm/providers/__tests__/gemini.test.d.ts.map +1 -0
- package/dist/llm/providers/__tests__/gemini.test.js +591 -0
- package/dist/llm/providers/__tests__/gemini.test.js.map +1 -0
- package/dist/llm/providers/__tests__/openai.test.d.ts +2 -0
- package/dist/llm/providers/__tests__/openai.test.d.ts.map +1 -0
- package/dist/llm/providers/__tests__/openai.test.js +546 -0
- package/dist/llm/providers/__tests__/openai.test.js.map +1 -0
- package/dist/llm/providers/anthropic.d.ts +25 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +315 -0
- package/dist/llm/providers/anthropic.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +28 -0
- package/dist/llm/providers/gemini.d.ts.map +1 -0
- package/dist/llm/providers/gemini.js +429 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/providers/index.d.ts +7 -0
- package/dist/llm/providers/index.d.ts.map +1 -0
- package/dist/llm/providers/index.js +4 -0
- package/dist/llm/providers/index.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +28 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +426 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/llm/types.d.ts +127 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +21 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/persistence/__tests__/factory-queries.test.d.ts +9 -0
- package/dist/persistence/__tests__/factory-queries.test.d.ts.map +1 -0
- package/dist/persistence/__tests__/factory-queries.test.js +372 -0
- package/dist/persistence/__tests__/factory-queries.test.js.map +1 -0
- package/dist/persistence/__tests__/factory-schema.test.d.ts +6 -0
- package/dist/persistence/__tests__/factory-schema.test.d.ts.map +1 -0
- package/dist/persistence/__tests__/factory-schema.test.js +105 -0
- package/dist/persistence/__tests__/factory-schema.test.js.map +1 -0
- package/dist/persistence/factory-queries.d.ts +204 -0
- package/dist/persistence/factory-queries.d.ts.map +1 -0
- package/dist/persistence/factory-queries.js +186 -0
- package/dist/persistence/factory-queries.js.map +1 -0
- package/dist/persistence/factory-schema.d.ts +16 -0
- package/dist/persistence/factory-schema.d.ts.map +1 -0
- package/dist/persistence/factory-schema.js +89 -0
- package/dist/persistence/factory-schema.js.map +1 -0
- package/dist/scenarios/__tests__/cli-command-list.test.d.ts +7 -0
- package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/cli-command-list.test.js +237 -0
- package/dist/scenarios/__tests__/cli-command-list.test.js.map +1 -0
- package/dist/scenarios/__tests__/cli-command.test.d.ts +11 -0
- package/dist/scenarios/__tests__/cli-command.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/cli-command.test.js +275 -0
- package/dist/scenarios/__tests__/cli-command.test.js.map +1 -0
- package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +15 -0
- package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/integrity-pipeline.test.js +318 -0
- package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +1 -0
- package/dist/scenarios/__tests__/runner-twins.test.d.ts +13 -0
- package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/runner-twins.test.js +205 -0
- package/dist/scenarios/__tests__/runner-twins.test.js.map +1 -0
- package/dist/scenarios/__tests__/scorer.test.d.ts +11 -0
- package/dist/scenarios/__tests__/scorer.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/scorer.test.js +225 -0
- package/dist/scenarios/__tests__/scorer.test.js.map +1 -0
- package/dist/scenarios/__tests__/scoring-integration.test.d.ts +8 -0
- package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/scoring-integration.test.js +178 -0
- package/dist/scenarios/__tests__/scoring-integration.test.js.map +1 -0
- package/dist/scenarios/__tests__/store.test.d.ts +5 -0
- package/dist/scenarios/__tests__/store.test.d.ts.map +1 -0
- package/dist/scenarios/__tests__/store.test.js +169 -0
- package/dist/scenarios/__tests__/store.test.js.map +1 -0
- package/dist/scenarios/cli-command.d.ts +20 -0
- package/dist/scenarios/cli-command.d.ts.map +1 -0
- package/dist/scenarios/cli-command.js +66 -0
- package/dist/scenarios/cli-command.js.map +1 -0
- package/dist/scenarios/index.d.ts +11 -0
- package/dist/scenarios/index.d.ts.map +1 -0
- package/dist/scenarios/index.js +11 -0
- package/dist/scenarios/index.js.map +1 -0
- package/dist/scenarios/runner.d.ts +64 -0
- package/dist/scenarios/runner.d.ts.map +1 -0
- package/dist/scenarios/runner.js +205 -0
- package/dist/scenarios/runner.js.map +1 -0
- package/dist/scenarios/scorer.d.ts +69 -0
- package/dist/scenarios/scorer.d.ts.map +1 -0
- package/dist/scenarios/scorer.js +66 -0
- package/dist/scenarios/scorer.js.map +1 -0
- package/dist/scenarios/store.d.ts +33 -0
- package/dist/scenarios/store.d.ts.map +1 -0
- package/dist/scenarios/store.js +92 -0
- package/dist/scenarios/store.js.map +1 -0
- package/dist/scenarios/types.d.ts +40 -0
- package/dist/scenarios/types.d.ts.map +1 -0
- package/dist/scenarios/types.js +5 -0
- package/dist/scenarios/types.js.map +1 -0
- package/dist/stylesheet/__tests__/stylesheet.test.d.ts +17 -0
- package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +1 -0
- package/dist/stylesheet/__tests__/stylesheet.test.js +368 -0
- package/dist/stylesheet/__tests__/stylesheet.test.js.map +1 -0
- package/dist/stylesheet/parser.d.ts +44 -0
- package/dist/stylesheet/parser.d.ts.map +1 -0
- package/dist/stylesheet/parser.js +190 -0
- package/dist/stylesheet/parser.js.map +1 -0
- package/dist/stylesheet/resolver.d.ts +38 -0
- package/dist/stylesheet/resolver.d.ts.map +1 -0
- package/dist/stylesheet/resolver.js +96 -0
- package/dist/stylesheet/resolver.js.map +1 -0
- package/dist/templates/__tests__/templates.test.d.ts +7 -0
- package/dist/templates/__tests__/templates.test.d.ts.map +1 -0
- package/dist/templates/__tests__/templates.test.js +92 -0
- package/dist/templates/__tests__/templates.test.js.map +1 -0
- package/dist/templates/index.d.ts +38 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +153 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/twins/__tests__/docker-compose.test.d.ts +13 -0
- package/dist/twins/__tests__/docker-compose.test.d.ts.map +1 -0
- package/dist/twins/__tests__/docker-compose.test.js +247 -0
- package/dist/twins/__tests__/docker-compose.test.js.map +1 -0
- package/dist/twins/__tests__/health-monitor.test.d.ts +19 -0
- package/dist/twins/__tests__/health-monitor.test.d.ts.map +1 -0
- package/dist/twins/__tests__/health-monitor.test.js +301 -0
- package/dist/twins/__tests__/health-monitor.test.js.map +1 -0
- package/dist/twins/__tests__/integration/e2e.test.d.ts +18 -0
- package/dist/twins/__tests__/integration/e2e.test.d.ts.map +1 -0
- package/dist/twins/__tests__/integration/e2e.test.js +146 -0
- package/dist/twins/__tests__/integration/e2e.test.js.map +1 -0
- package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +16 -0
- package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +1 -0
- package/dist/twins/__tests__/integration/health-monitor-integration.test.js +183 -0
- package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +1 -0
- package/dist/twins/__tests__/integration/helpers.d.ts +32 -0
- package/dist/twins/__tests__/integration/helpers.d.ts.map +1 -0
- package/dist/twins/__tests__/integration/helpers.js +67 -0
- package/dist/twins/__tests__/integration/helpers.js.map +1 -0
- package/dist/twins/__tests__/integration/lifecycle.test.d.ts +14 -0
- package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +1 -0
- package/dist/twins/__tests__/integration/lifecycle.test.js +127 -0
- package/dist/twins/__tests__/integration/lifecycle.test.js.map +1 -0
- package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +14 -0
- package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +1 -0
- package/dist/twins/__tests__/integration/persistence-integration.test.js +132 -0
- package/dist/twins/__tests__/integration/persistence-integration.test.js.map +1 -0
- package/dist/twins/__tests__/persistence.test.d.ts +10 -0
- package/dist/twins/__tests__/persistence.test.d.ts.map +1 -0
- package/dist/twins/__tests__/persistence.test.js +300 -0
- package/dist/twins/__tests__/persistence.test.js.map +1 -0
- package/dist/twins/__tests__/registry.test.d.ts +7 -0
- package/dist/twins/__tests__/registry.test.d.ts.map +1 -0
- package/dist/twins/__tests__/registry.test.js +282 -0
- package/dist/twins/__tests__/registry.test.js.map +1 -0
- package/dist/twins/__tests__/run-state.test.d.ts +9 -0
- package/dist/twins/__tests__/run-state.test.d.ts.map +1 -0
- package/dist/twins/__tests__/run-state.test.js +112 -0
- package/dist/twins/__tests__/run-state.test.js.map +1 -0
- package/dist/twins/__tests__/templates-cli.test.d.ts +10 -0
- package/dist/twins/__tests__/templates-cli.test.d.ts.map +1 -0
- package/dist/twins/__tests__/templates-cli.test.js +187 -0
- package/dist/twins/__tests__/templates-cli.test.js.map +1 -0
- package/dist/twins/__tests__/templates.test.d.ts +7 -0
- package/dist/twins/__tests__/templates.test.d.ts.map +1 -0
- package/dist/twins/__tests__/templates.test.js +87 -0
- package/dist/twins/__tests__/templates.test.js.map +1 -0
- package/dist/twins/__tests__/twins-cli.test.d.ts +11 -0
- package/dist/twins/__tests__/twins-cli.test.d.ts.map +1 -0
- package/dist/twins/__tests__/twins-cli.test.js +365 -0
- package/dist/twins/__tests__/twins-cli.test.js.map +1 -0
- package/dist/twins/docker-compose.d.ts +48 -0
- package/dist/twins/docker-compose.d.ts.map +1 -0
- package/dist/twins/docker-compose.js +172 -0
- package/dist/twins/docker-compose.js.map +1 -0
- package/dist/twins/health-monitor.d.ts +36 -0
- package/dist/twins/health-monitor.d.ts.map +1 -0
- package/dist/twins/health-monitor.js +114 -0
- package/dist/twins/health-monitor.js.map +1 -0
- package/dist/twins/index.d.ts +22 -0
- package/dist/twins/index.d.ts.map +1 -0
- package/dist/twins/index.js +19 -0
- package/dist/twins/index.js.map +1 -0
- package/dist/twins/persistence.d.ts +100 -0
- package/dist/twins/persistence.d.ts.map +1 -0
- package/dist/twins/persistence.js +120 -0
- package/dist/twins/persistence.js.map +1 -0
- package/dist/twins/registry.d.ts +40 -0
- package/dist/twins/registry.d.ts.map +1 -0
- package/dist/twins/registry.js +175 -0
- package/dist/twins/registry.js.map +1 -0
- package/dist/twins/run-state.d.ts +47 -0
- package/dist/twins/run-state.d.ts.map +1 -0
- package/dist/twins/run-state.js +70 -0
- package/dist/twins/run-state.js.map +1 -0
- package/dist/twins/schema.d.ts +40 -0
- package/dist/twins/schema.d.ts.map +1 -0
- package/dist/twins/schema.js +46 -0
- package/dist/twins/schema.js.map +1 -0
- package/dist/twins/templates.d.ts +27 -0
- package/dist/twins/templates.d.ts.map +1 -0
- package/dist/twins/templates.js +63 -0
- package/dist/twins/templates.js.map +1 -0
- package/dist/twins/types.d.ts +55 -0
- package/dist/twins/types.d.ts.map +1 -0
- package/dist/twins/types.js +26 -0
- package/dist/twins/types.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSS-like stylesheet parser for the `model_stylesheet` graph attribute.
|
|
3
|
+
*
|
|
4
|
+
* Grammar (Attractor Spec §8.2):
|
|
5
|
+
* Stylesheet ::= Rule*
|
|
6
|
+
* Rule ::= Selector '{' Declaration ( ';' Declaration )* ';'? '}'
|
|
7
|
+
* Selector ::= '*' | ShapeName | '#' Identifier | '.' ClassName
|
|
8
|
+
* ClassName ::= [a-z0-9_-]+
|
|
9
|
+
* ShapeName ::= [a-zA-Z_][a-zA-Z0-9_]*
|
|
10
|
+
* Identifier ::= [a-zA-Z_][a-zA-Z0-9_]*
|
|
11
|
+
* Declaration ::= Property ':' PropertyValue
|
|
12
|
+
* Property ::= 'llm_model' | 'llm_provider' | 'reasoning_effort'
|
|
13
|
+
* PropertyValue ::= QuotedString | BareValue
|
|
14
|
+
* QuotedString ::= '"' [^"]* '"' | "'" [^']* "'"
|
|
15
|
+
* BareValue ::= [^\s;{}]+
|
|
16
|
+
*
|
|
17
|
+
* Story 42-7.
|
|
18
|
+
*/
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// StylesheetParseError
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/**
|
|
23
|
+
* Thrown by `parseStylesheet` when the stylesheet source does not conform
|
|
24
|
+
* to the supported grammar.
|
|
25
|
+
*/
|
|
26
|
+
export class StylesheetParseError extends Error {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = 'StylesheetParseError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Valid properties
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
const VALID_PROPERTIES = new Set([
|
|
36
|
+
'llm_model',
|
|
37
|
+
'llm_provider',
|
|
38
|
+
'reasoning_effort',
|
|
39
|
+
]);
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Internal helpers
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
/**
|
|
44
|
+
* Strip C-style block comments (`/* ... *\/`) and line comments (`// ...`)
|
|
45
|
+
* from the source string before parsing.
|
|
46
|
+
*/
|
|
47
|
+
function stripComments(source) {
|
|
48
|
+
// Strip block comments: /* ... */ (non-greedy, dotall)
|
|
49
|
+
let result = source.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
50
|
+
// Strip line comments: // ... (to end of line)
|
|
51
|
+
result = result.replace(/\/\/[^\n]*/g, '');
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Strip surrounding single or double quotes from a property value string.
|
|
56
|
+
* Returns the original string if it is not quoted.
|
|
57
|
+
*/
|
|
58
|
+
function stripValueQuotes(value) {
|
|
59
|
+
if (value.length >= 2) {
|
|
60
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
61
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
62
|
+
return value.slice(1, -1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse a selector token string into a `StylesheetSelector`.
|
|
69
|
+
* Throws `StylesheetParseError` for invalid selector syntax.
|
|
70
|
+
*/
|
|
71
|
+
function parseSelector(token) {
|
|
72
|
+
if (token === '*') {
|
|
73
|
+
return { type: 'universal', value: '*', specificity: 0 };
|
|
74
|
+
}
|
|
75
|
+
if (token.startsWith('#')) {
|
|
76
|
+
const name = token.slice(1);
|
|
77
|
+
if (!name || !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {
|
|
78
|
+
throw new StylesheetParseError(`Invalid ID selector '${token}'; expected '#' followed by an identifier matching [a-zA-Z_][a-zA-Z0-9_]*`);
|
|
79
|
+
}
|
|
80
|
+
return { type: 'id', value: name, specificity: 3 };
|
|
81
|
+
}
|
|
82
|
+
if (token.startsWith('.')) {
|
|
83
|
+
const name = token.slice(1);
|
|
84
|
+
if (!name || !/^[a-z0-9_-]+$/.test(name)) {
|
|
85
|
+
throw new StylesheetParseError(`Invalid class selector '${token}'; expected '.' followed by a class name matching [a-z0-9_-]+`);
|
|
86
|
+
}
|
|
87
|
+
return { type: 'class', value: name, specificity: 2 };
|
|
88
|
+
}
|
|
89
|
+
// Shape selector — bare identifier
|
|
90
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(token)) {
|
|
91
|
+
throw new StylesheetParseError(`Invalid selector '${token}'; expected '*', a shape name ([a-zA-Z_][a-zA-Z0-9_]*), '#identifier', or '.classname'`);
|
|
92
|
+
}
|
|
93
|
+
return { type: 'shape', value: token, specificity: 1 };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Parse the declaration block content (text between `{` and `}`) for a rule.
|
|
97
|
+
*
|
|
98
|
+
* @param content - Raw text between the opening and closing braces.
|
|
99
|
+
* @param selector - Selector token string (used only for error messages).
|
|
100
|
+
* @returns An array of parsed `StylesheetDeclaration` objects.
|
|
101
|
+
* @throws `StylesheetParseError` on unknown property or malformed pair.
|
|
102
|
+
*/
|
|
103
|
+
function parseDeclarations(content, selector) {
|
|
104
|
+
const declarations = [];
|
|
105
|
+
const segments = content.split(';');
|
|
106
|
+
for (const segment of segments) {
|
|
107
|
+
const trimmed = segment.trim();
|
|
108
|
+
if (trimmed === '')
|
|
109
|
+
continue; // empty segment from trailing semicolon or whitespace
|
|
110
|
+
const colonPos = trimmed.indexOf(':');
|
|
111
|
+
if (colonPos === -1) {
|
|
112
|
+
throw new StylesheetParseError(`Invalid declaration in selector '${selector}': missing ':' in '${trimmed}'`);
|
|
113
|
+
}
|
|
114
|
+
const propRaw = trimmed.slice(0, colonPos).trim();
|
|
115
|
+
const valueRaw = trimmed.slice(colonPos + 1).trim();
|
|
116
|
+
if (!VALID_PROPERTIES.has(propRaw)) {
|
|
117
|
+
throw new StylesheetParseError(`Unknown property '${propRaw}' in selector '${selector}'; ` +
|
|
118
|
+
`expected one of: ${[...VALID_PROPERTIES].join(', ')}`);
|
|
119
|
+
}
|
|
120
|
+
const value = stripValueQuotes(valueRaw);
|
|
121
|
+
if (value === '') {
|
|
122
|
+
throw new StylesheetParseError(`Missing value for property '${propRaw}' in selector '${selector}'`);
|
|
123
|
+
}
|
|
124
|
+
declarations.push({ property: propRaw, value });
|
|
125
|
+
}
|
|
126
|
+
return declarations;
|
|
127
|
+
}
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// Public API
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
/**
|
|
132
|
+
* Parse a CSS-like model stylesheet string into a `ParsedStylesheet`.
|
|
133
|
+
*
|
|
134
|
+
* The parser:
|
|
135
|
+
* - Strips C-style block comments (`/* ... * /`) and `//` line comments before parsing.
|
|
136
|
+
* - Recognises four selector types: universal (`*`), shape (bare identifier),
|
|
137
|
+
* class (`.name`), and ID (`#name`).
|
|
138
|
+
* - Validates that every declared property is one of the three known routing
|
|
139
|
+
* properties: `llm_model`, `llm_provider`, `reasoning_effort`.
|
|
140
|
+
* - Preserves source order in the returned array.
|
|
141
|
+
*
|
|
142
|
+
* @param source - The raw stylesheet string.
|
|
143
|
+
* @returns A `ParsedStylesheet` (array of `StylesheetRule`) in source order.
|
|
144
|
+
* @throws `StylesheetParseError` on syntax errors, unknown properties, or
|
|
145
|
+
* unbalanced braces.
|
|
146
|
+
*/
|
|
147
|
+
export function parseStylesheet(source) {
|
|
148
|
+
const cleaned = stripComments(source);
|
|
149
|
+
const rules = [];
|
|
150
|
+
let pos = 0;
|
|
151
|
+
while (pos < cleaned.length) {
|
|
152
|
+
// Skip leading whitespace
|
|
153
|
+
while (pos < cleaned.length && /\s/.test(cleaned[pos]))
|
|
154
|
+
pos++;
|
|
155
|
+
if (pos >= cleaned.length)
|
|
156
|
+
break;
|
|
157
|
+
// Find the opening brace for this rule
|
|
158
|
+
const braceOpenPos = cleaned.indexOf('{', pos);
|
|
159
|
+
if (braceOpenPos === -1) {
|
|
160
|
+
// Remaining content has no opening brace — it's an error if non-empty
|
|
161
|
+
const remaining = cleaned.slice(pos).trim();
|
|
162
|
+
if (remaining !== '') {
|
|
163
|
+
throw new StylesheetParseError(`Unexpected content without opening brace '{': '${remaining}'`);
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
// Extract and validate the selector token
|
|
168
|
+
const selectorToken = cleaned.slice(pos, braceOpenPos).trim();
|
|
169
|
+
if (selectorToken === '') {
|
|
170
|
+
throw new StylesheetParseError(`Empty selector before '{'`);
|
|
171
|
+
}
|
|
172
|
+
// Find the matching closing brace
|
|
173
|
+
const braceClosePos = cleaned.indexOf('}', braceOpenPos + 1);
|
|
174
|
+
if (braceClosePos === -1) {
|
|
175
|
+
throw new StylesheetParseError(`Missing closing brace '}' for selector '${selectorToken}'`);
|
|
176
|
+
}
|
|
177
|
+
// The block content between { and }
|
|
178
|
+
const blockContent = cleaned.slice(braceOpenPos + 1, braceClosePos);
|
|
179
|
+
// Reject nested braces (unbalanced — inner '{' inside block)
|
|
180
|
+
if (blockContent.includes('{')) {
|
|
181
|
+
throw new StylesheetParseError(`Unexpected '{' inside declaration block for selector '${selectorToken}'; nested rules are not supported`);
|
|
182
|
+
}
|
|
183
|
+
const selector = parseSelector(selectorToken);
|
|
184
|
+
const declarations = parseDeclarations(blockContent, selectorToken);
|
|
185
|
+
rules.push({ selector, declarations });
|
|
186
|
+
pos = braceClosePos + 1;
|
|
187
|
+
}
|
|
188
|
+
return rules;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/stylesheet/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specificity-based resolver for the model stylesheet.
|
|
3
|
+
*
|
|
4
|
+
* Given a parsed stylesheet and a graph node, `resolveNodeStyles` determines
|
|
5
|
+
* which LLM routing properties apply to that node by:
|
|
6
|
+
* 1. Filtering rules to only those whose selector matches the node.
|
|
7
|
+
* 2. Sorting matching rules by specificity ascending (stable sort so that
|
|
8
|
+
* equal-specificity rules preserve source order).
|
|
9
|
+
* 3. Iterating the sorted list and letting each rule overwrite properties
|
|
10
|
+
* — the last rule at the highest specificity wins; for ties the rule
|
|
11
|
+
* appearing later in the original stylesheet wins.
|
|
12
|
+
*
|
|
13
|
+
* **Caller contract**: `resolveNodeStyles` does NOT enforce the "explicit node
|
|
14
|
+
* attribute wins" rule. The caller (executor / node preparation layer) is
|
|
15
|
+
* responsible for the final merge:
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const resolved = resolveNodeStyles(node, stylesheet)
|
|
18
|
+
* const finalModel = node.llmModel || resolved.llmModel || graph.defaultLlmModel || ''
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Story 42-7.
|
|
22
|
+
*/
|
|
23
|
+
import type { GraphNode, ParsedStylesheet, ResolvedNodeStyles } from '../graph/types.js';
|
|
24
|
+
/**
|
|
25
|
+
* Resolve LLM routing properties for a single graph node using the parsed stylesheet.
|
|
26
|
+
*
|
|
27
|
+
* @param node - The graph node to resolve properties for.
|
|
28
|
+
* @param stylesheet - A parsed stylesheet (array of `StylesheetRule` in source order).
|
|
29
|
+
* @returns A `ResolvedNodeStyles` object containing only the properties that
|
|
30
|
+
* were resolved from matching rules. Properties absent from matching rules
|
|
31
|
+
* are omitted (not set to `undefined` explicitly).
|
|
32
|
+
*
|
|
33
|
+
* **Important**: this function does NOT check the node's own attributes.
|
|
34
|
+
* Callers must give explicit node attributes (`node.llmModel`, etc.) priority
|
|
35
|
+
* over the values returned here.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveNodeStyles(node: GraphNode, stylesheet: ParsedStylesheet): ResolvedNodeStyles;
|
|
38
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/stylesheet/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAsB,MAAM,mBAAmB,CAAA;AA0C5G;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CA4BnG"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specificity-based resolver for the model stylesheet.
|
|
3
|
+
*
|
|
4
|
+
* Given a parsed stylesheet and a graph node, `resolveNodeStyles` determines
|
|
5
|
+
* which LLM routing properties apply to that node by:
|
|
6
|
+
* 1. Filtering rules to only those whose selector matches the node.
|
|
7
|
+
* 2. Sorting matching rules by specificity ascending (stable sort so that
|
|
8
|
+
* equal-specificity rules preserve source order).
|
|
9
|
+
* 3. Iterating the sorted list and letting each rule overwrite properties
|
|
10
|
+
* — the last rule at the highest specificity wins; for ties the rule
|
|
11
|
+
* appearing later in the original stylesheet wins.
|
|
12
|
+
*
|
|
13
|
+
* **Caller contract**: `resolveNodeStyles` does NOT enforce the "explicit node
|
|
14
|
+
* attribute wins" rule. The caller (executor / node preparation layer) is
|
|
15
|
+
* responsible for the final merge:
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const resolved = resolveNodeStyles(node, stylesheet)
|
|
18
|
+
* const finalModel = node.llmModel || resolved.llmModel || graph.defaultLlmModel || ''
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Story 42-7.
|
|
22
|
+
*/
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Internal helpers
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/**
|
|
27
|
+
* Return `true` if the given `selector` matches the provided `node`.
|
|
28
|
+
*
|
|
29
|
+
* Matching rules:
|
|
30
|
+
* - `universal`: always matches every node.
|
|
31
|
+
* - `shape`: matches when `node.shape === selector.value`.
|
|
32
|
+
* - `class`: matches when the node's `class` field, split on commas and
|
|
33
|
+
* trimmed, contains `selector.value` (case-sensitive).
|
|
34
|
+
* - `id`: matches when `node.id === selector.value`.
|
|
35
|
+
*/
|
|
36
|
+
function matchesNode(node, selector) {
|
|
37
|
+
switch (selector.type) {
|
|
38
|
+
case 'universal':
|
|
39
|
+
return true;
|
|
40
|
+
case 'shape':
|
|
41
|
+
return node.shape === selector.value;
|
|
42
|
+
case 'class': {
|
|
43
|
+
// node.class is a comma-separated list of class tokens (e.g. "code,critical,fast")
|
|
44
|
+
const tokens = node.class.split(',').map((t) => t.trim());
|
|
45
|
+
return tokens.includes(selector.value);
|
|
46
|
+
}
|
|
47
|
+
case 'id':
|
|
48
|
+
return node.id === selector.value;
|
|
49
|
+
default:
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Public API
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Resolve LLM routing properties for a single graph node using the parsed stylesheet.
|
|
58
|
+
*
|
|
59
|
+
* @param node - The graph node to resolve properties for.
|
|
60
|
+
* @param stylesheet - A parsed stylesheet (array of `StylesheetRule` in source order).
|
|
61
|
+
* @returns A `ResolvedNodeStyles` object containing only the properties that
|
|
62
|
+
* were resolved from matching rules. Properties absent from matching rules
|
|
63
|
+
* are omitted (not set to `undefined` explicitly).
|
|
64
|
+
*
|
|
65
|
+
* **Important**: this function does NOT check the node's own attributes.
|
|
66
|
+
* Callers must give explicit node attributes (`node.llmModel`, etc.) priority
|
|
67
|
+
* over the values returned here.
|
|
68
|
+
*/
|
|
69
|
+
export function resolveNodeStyles(node, stylesheet) {
|
|
70
|
+
// 1. Filter to rules whose selector matches this node
|
|
71
|
+
const matchingRules = stylesheet.filter((rule) => matchesNode(node, rule.selector));
|
|
72
|
+
// 2. Stable-sort by specificity ascending so higher-specificity rules come
|
|
73
|
+
// last and can overwrite lower-specificity values during iteration.
|
|
74
|
+
// Array.prototype.sort is stable (guaranteed since ES2019 / Node 12+),
|
|
75
|
+
// so equal-specificity rules remain in their original source order,
|
|
76
|
+
// meaning a later rule in the stylesheet will appear later in the sorted
|
|
77
|
+
// array and will correctly win by overwriting.
|
|
78
|
+
matchingRules.sort((a, b) => a.selector.specificity - b.selector.specificity);
|
|
79
|
+
// 3. Accumulate resolved properties — each rule overwrites earlier ones
|
|
80
|
+
const resolved = {};
|
|
81
|
+
for (const rule of matchingRules) {
|
|
82
|
+
for (const decl of rule.declarations) {
|
|
83
|
+
if (decl.property === 'llm_model') {
|
|
84
|
+
resolved.llmModel = decl.value;
|
|
85
|
+
}
|
|
86
|
+
else if (decl.property === 'llm_provider') {
|
|
87
|
+
resolved.llmProvider = decl.value;
|
|
88
|
+
}
|
|
89
|
+
else if (decl.property === 'reasoning_effort') {
|
|
90
|
+
resolved.reasoningEffort = decl.value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return resolved;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/stylesheet/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,IAAe,EAAE,QAA4B;IAChE,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,IAAI,CAAA;QAEb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAA;QAEtC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,mFAAmF;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACxC,CAAC;QAED,KAAK,IAAI;YACP,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAA;QAEnC;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,UAA4B;IAC7E,sDAAsD;IACtD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEnF,2EAA2E;IAC3E,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,4EAA4E;IAC5E,kDAAkD;IAClD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAE7E,wEAAwE;IACxE,MAAM,QAAQ,GAAuB,EAAE,CAAA;IAEvC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAClC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAA;YAChC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAC5C,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;YACnC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;gBAChD,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAA;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.d.ts","sourceRoot":"","sources":["../../../src/templates/__tests__/templates.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the pipeline template registry.
|
|
3
|
+
*
|
|
4
|
+
* Story 50-10 AC7 — ≥10 test cases covering registry correctness and DOT validity.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { listPipelineTemplates, getPipelineTemplate } from '../index.js';
|
|
8
|
+
import { parseGraph } from '../../graph/parser.js';
|
|
9
|
+
describe('listPipelineTemplates()', () => {
|
|
10
|
+
it('returns exactly 4 entries', () => {
|
|
11
|
+
const templates = listPipelineTemplates();
|
|
12
|
+
expect(templates).toHaveLength(4);
|
|
13
|
+
});
|
|
14
|
+
it('returns templates in insertion order (trycycle first, staged-validation last)', () => {
|
|
15
|
+
const templates = listPipelineTemplates();
|
|
16
|
+
expect(templates[0]?.name).toBe('trycycle');
|
|
17
|
+
expect(templates[3]?.name).toBe('staged-validation');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe('getPipelineTemplate()', () => {
|
|
21
|
+
it("returns trycycle template with name === 'trycycle'", () => {
|
|
22
|
+
const t = getPipelineTemplate('trycycle');
|
|
23
|
+
expect(t).toBeDefined();
|
|
24
|
+
expect(t?.name).toBe('trycycle');
|
|
25
|
+
});
|
|
26
|
+
it("returns dual-review template with name === 'dual-review'", () => {
|
|
27
|
+
const t = getPipelineTemplate('dual-review');
|
|
28
|
+
expect(t).toBeDefined();
|
|
29
|
+
expect(t?.name).toBe('dual-review');
|
|
30
|
+
});
|
|
31
|
+
it("returns parallel-exploration template with name === 'parallel-exploration'", () => {
|
|
32
|
+
const t = getPipelineTemplate('parallel-exploration');
|
|
33
|
+
expect(t).toBeDefined();
|
|
34
|
+
expect(t?.name).toBe('parallel-exploration');
|
|
35
|
+
});
|
|
36
|
+
it("returns staged-validation template with name === 'staged-validation'", () => {
|
|
37
|
+
const t = getPipelineTemplate('staged-validation');
|
|
38
|
+
expect(t).toBeDefined();
|
|
39
|
+
expect(t?.name).toBe('staged-validation');
|
|
40
|
+
});
|
|
41
|
+
it("returns undefined for an unknown template name", () => {
|
|
42
|
+
const t = getPipelineTemplate('nonexistent');
|
|
43
|
+
expect(t).toBeUndefined();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('DOT content validity — trycycle', () => {
|
|
47
|
+
it('parseGraph(trycycle.dotContent) does not throw', () => {
|
|
48
|
+
const trycycle = getPipelineTemplate('trycycle');
|
|
49
|
+
expect(() => parseGraph(trycycle.dotContent)).not.toThrow();
|
|
50
|
+
});
|
|
51
|
+
it("parsed trycycle graph contains a node with id 'eval_plan'", () => {
|
|
52
|
+
const trycycle = getPipelineTemplate('trycycle');
|
|
53
|
+
const graph = parseGraph(trycycle.dotContent);
|
|
54
|
+
expect(graph.nodes.has('eval_plan')).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('DOT content validity — dual-review', () => {
|
|
58
|
+
it('parseGraph(dual_review.dotContent) does not throw', () => {
|
|
59
|
+
const dualReview = getPipelineTemplate('dual-review');
|
|
60
|
+
expect(() => parseGraph(dualReview.dotContent)).not.toThrow();
|
|
61
|
+
});
|
|
62
|
+
it("parsed dual-review graph has at least one node whose type is 'parallel' (fan-out handler)", () => {
|
|
63
|
+
const dualReview = getPipelineTemplate('dual-review');
|
|
64
|
+
const graph = parseGraph(dualReview.dotContent);
|
|
65
|
+
const parallelNodes = Array.from(graph.nodes.values()).filter((n) => n.type === 'parallel');
|
|
66
|
+
expect(parallelNodes.length).toBeGreaterThanOrEqual(1);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('DOT content validity — parallel-exploration', () => {
|
|
70
|
+
it('parseGraph(parallel_exploration.dotContent) does not throw', () => {
|
|
71
|
+
const parallelExploration = getPipelineTemplate('parallel-exploration');
|
|
72
|
+
expect(() => parseGraph(parallelExploration.dotContent)).not.toThrow();
|
|
73
|
+
});
|
|
74
|
+
it("parsed parallel-exploration graph has at least one node whose type is 'parallel.fan_in'", () => {
|
|
75
|
+
const parallelExploration = getPipelineTemplate('parallel-exploration');
|
|
76
|
+
const graph = parseGraph(parallelExploration.dotContent);
|
|
77
|
+
const fanInNodes = Array.from(graph.nodes.values()).filter((n) => n.type === 'parallel.fan_in');
|
|
78
|
+
expect(fanInNodes.length).toBeGreaterThanOrEqual(1);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('DOT content validity — staged-validation', () => {
|
|
82
|
+
it('parseGraph(staged_validation.dotContent) does not throw', () => {
|
|
83
|
+
const stagedValidation = getPipelineTemplate('staged-validation');
|
|
84
|
+
expect(() => parseGraph(stagedValidation.dotContent)).not.toThrow();
|
|
85
|
+
});
|
|
86
|
+
it("parsed staged-validation graph contains a node with id 'lint'", () => {
|
|
87
|
+
const stagedValidation = getPipelineTemplate('staged-validation');
|
|
88
|
+
const graph = parseGraph(stagedValidation.dotContent);
|
|
89
|
+
expect(graph.nodes.has('lint')).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=templates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../src/templates/__tests__/templates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Template Catalog — pre-built DOT graph pipeline templates for common patterns.
|
|
3
|
+
*
|
|
4
|
+
* Story 50-10.
|
|
5
|
+
*
|
|
6
|
+
* Node type strings used:
|
|
7
|
+
* - `start` — start node (registered by default registry)
|
|
8
|
+
* - `exit` — exit node (registered by default registry)
|
|
9
|
+
* - `codergen` — coding agent node (registered by default registry)
|
|
10
|
+
* - `parallel` — parallel fan-out node (story 50-1, shape=component)
|
|
11
|
+
* - `parallel.fan_in`— fan-in/merge node (story 50-2, shape=tripleoctagon)
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* A single entry in the pipeline template catalog.
|
|
15
|
+
*/
|
|
16
|
+
export interface PipelineTemplate {
|
|
17
|
+
/** Unique template name (used as the `--template` flag value) */
|
|
18
|
+
name: string;
|
|
19
|
+
/** One-line description displayed in `factory templates list` */
|
|
20
|
+
description: string;
|
|
21
|
+
/** DOT graph source string written to `pipeline.dot` on `factory templates init` */
|
|
22
|
+
dotContent: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Map of all built-in pipeline templates, keyed by template name.
|
|
26
|
+
* Insertion order determines display order in `factory templates list`.
|
|
27
|
+
*/
|
|
28
|
+
export declare const PIPELINE_TEMPLATES: Map<string, PipelineTemplate>;
|
|
29
|
+
/**
|
|
30
|
+
* Returns all available pipeline template entries in insertion order.
|
|
31
|
+
*/
|
|
32
|
+
export declare function listPipelineTemplates(): PipelineTemplate[];
|
|
33
|
+
/**
|
|
34
|
+
* Returns the pipeline template entry for the given name (case-sensitive),
|
|
35
|
+
* or `undefined` if not found.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getPipelineTemplate(name: string): PipelineTemplate | undefined;
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAA;IACnB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAA;CACnB;AA+HD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAK3D,CAAA;AAMF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE9E"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Template Catalog — pre-built DOT graph pipeline templates for common patterns.
|
|
3
|
+
*
|
|
4
|
+
* Story 50-10.
|
|
5
|
+
*
|
|
6
|
+
* Node type strings used:
|
|
7
|
+
* - `start` — start node (registered by default registry)
|
|
8
|
+
* - `exit` — exit node (registered by default registry)
|
|
9
|
+
* - `codergen` — coding agent node (registered by default registry)
|
|
10
|
+
* - `parallel` — parallel fan-out node (story 50-1, shape=component)
|
|
11
|
+
* - `parallel.fan_in`— fan-in/merge node (story 50-2, shape=tripleoctagon)
|
|
12
|
+
*/
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Built-in template DOT content
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const trycycleDotContent = `digraph trycycle {
|
|
17
|
+
// Trycycle Pattern: iterative refinement with eval gates
|
|
18
|
+
// Flow: define → plan → eval_plan ⇄ implement → eval_impl → exit
|
|
19
|
+
// eval nodes can loop back to their upstream node on revision_needed.
|
|
20
|
+
|
|
21
|
+
start [type="start"];
|
|
22
|
+
define [type="codergen", label="Define Requirements"];
|
|
23
|
+
plan [type="codergen", label="Plan Implementation"];
|
|
24
|
+
eval_plan [type="codergen", label="Evaluate Plan"];
|
|
25
|
+
implement [type="codergen", label="Implement"];
|
|
26
|
+
eval_impl [type="codergen", label="Evaluate Implementation"];
|
|
27
|
+
exit [type="exit"];
|
|
28
|
+
|
|
29
|
+
start -> define;
|
|
30
|
+
define -> plan;
|
|
31
|
+
plan -> eval_plan;
|
|
32
|
+
eval_plan -> implement [label="approved"];
|
|
33
|
+
eval_plan -> plan [label="revision_needed"];
|
|
34
|
+
implement -> eval_impl;
|
|
35
|
+
eval_impl -> exit [label="approved"];
|
|
36
|
+
eval_impl -> implement [label="revision_needed"];
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
const dualReviewDotContent = `digraph dual_review {
|
|
40
|
+
// Dual-Review Pattern: fan-out to two independent reviewers, then fan-in
|
|
41
|
+
// Flow: implement → (reviewer_a + reviewer_b) in parallel → merge → exit
|
|
42
|
+
|
|
43
|
+
start [type="start"];
|
|
44
|
+
implement [type="codergen", label="Implement"];
|
|
45
|
+
review_parallel [type="parallel", label="Fan-Out to Reviewers"];
|
|
46
|
+
reviewer_a [type="codergen", label="Reviewer A"];
|
|
47
|
+
reviewer_b [type="codergen", label="Reviewer B"];
|
|
48
|
+
review_merge [type="parallel.fan_in",label="Merge Reviews"];
|
|
49
|
+
exit [type="exit"];
|
|
50
|
+
|
|
51
|
+
start -> implement;
|
|
52
|
+
implement -> review_parallel;
|
|
53
|
+
review_parallel -> reviewer_a;
|
|
54
|
+
review_parallel -> reviewer_b;
|
|
55
|
+
reviewer_a -> review_merge;
|
|
56
|
+
reviewer_b -> review_merge;
|
|
57
|
+
review_merge -> exit;
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
const parallelExplorationDotContent = `digraph parallel_exploration {
|
|
61
|
+
// Parallel-Exploration Pattern: dispatch multiple approaches concurrently,
|
|
62
|
+
// select the best-scoring result, then refine the winner.
|
|
63
|
+
// Flow: (approach_a + approach_b) in parallel → select best → refine → exit
|
|
64
|
+
|
|
65
|
+
start [type="start"];
|
|
66
|
+
explore_parallel[type="parallel", label="Fan-Out Exploration"];
|
|
67
|
+
approach_a [type="codergen", label="Approach A"];
|
|
68
|
+
approach_b [type="codergen", label="Approach B"];
|
|
69
|
+
select_best [type="parallel.fan_in", label="Select Best Candidate", selection="best"];
|
|
70
|
+
refine [type="codergen", label="Refine Winner"];
|
|
71
|
+
exit [type="exit"];
|
|
72
|
+
|
|
73
|
+
start -> explore_parallel;
|
|
74
|
+
explore_parallel -> approach_a;
|
|
75
|
+
explore_parallel -> approach_b;
|
|
76
|
+
approach_a -> select_best;
|
|
77
|
+
approach_b -> select_best;
|
|
78
|
+
select_best -> refine;
|
|
79
|
+
refine -> exit;
|
|
80
|
+
}
|
|
81
|
+
`;
|
|
82
|
+
const stagedValidationDotContent = `digraph staged_validation {
|
|
83
|
+
// Staged-Validation Pattern: sequential quality gates
|
|
84
|
+
// Flow: implement → lint → test → validate → exit
|
|
85
|
+
// Each stage is a separate codergen node; no parallel branches.
|
|
86
|
+
|
|
87
|
+
start [type="start"];
|
|
88
|
+
implement[type="codergen", label="Implement"];
|
|
89
|
+
lint [type="codergen", label="Lint"];
|
|
90
|
+
test [type="codergen", label="Test"];
|
|
91
|
+
validate [type="codergen", label="Validate"];
|
|
92
|
+
exit [type="exit"];
|
|
93
|
+
|
|
94
|
+
start -> implement;
|
|
95
|
+
implement -> lint;
|
|
96
|
+
lint -> test;
|
|
97
|
+
test -> validate;
|
|
98
|
+
validate -> exit;
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Template objects
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
const trycycleTemplate = {
|
|
105
|
+
name: 'trycycle',
|
|
106
|
+
description: 'Iterative refinement loop with plan and implementation eval gates',
|
|
107
|
+
dotContent: trycycleDotContent,
|
|
108
|
+
};
|
|
109
|
+
const dualReviewTemplate = {
|
|
110
|
+
name: 'dual-review',
|
|
111
|
+
description: 'Fan-out to two independent reviewers, then fan-in to merge results',
|
|
112
|
+
dotContent: dualReviewDotContent,
|
|
113
|
+
};
|
|
114
|
+
const parallelExplorationTemplate = {
|
|
115
|
+
name: 'parallel-exploration',
|
|
116
|
+
description: 'Dispatch parallel implementation approaches and select the best candidate',
|
|
117
|
+
dotContent: parallelExplorationDotContent,
|
|
118
|
+
};
|
|
119
|
+
const stagedValidationTemplate = {
|
|
120
|
+
name: 'staged-validation',
|
|
121
|
+
description: 'Sequential quality gate stages: implement → lint → test → validate',
|
|
122
|
+
dotContent: stagedValidationDotContent,
|
|
123
|
+
};
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// Template catalog
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
/**
|
|
128
|
+
* Map of all built-in pipeline templates, keyed by template name.
|
|
129
|
+
* Insertion order determines display order in `factory templates list`.
|
|
130
|
+
*/
|
|
131
|
+
export const PIPELINE_TEMPLATES = new Map([
|
|
132
|
+
[trycycleTemplate.name, trycycleTemplate],
|
|
133
|
+
[dualReviewTemplate.name, dualReviewTemplate],
|
|
134
|
+
[parallelExplorationTemplate.name, parallelExplorationTemplate],
|
|
135
|
+
[stagedValidationTemplate.name, stagedValidationTemplate],
|
|
136
|
+
]);
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// Exported functions
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
/**
|
|
141
|
+
* Returns all available pipeline template entries in insertion order.
|
|
142
|
+
*/
|
|
143
|
+
export function listPipelineTemplates() {
|
|
144
|
+
return Array.from(PIPELINE_TEMPLATES.values());
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Returns the pipeline template entry for the given name (case-sensitive),
|
|
148
|
+
* or `undefined` if not found.
|
|
149
|
+
*/
|
|
150
|
+
export function getPipelineTemplate(name) {
|
|
151
|
+
return PIPELINE_TEMPLATES.get(name);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=index.js.map
|