@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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Registry — Discovery, validation, and health polling for twin definitions.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-1.
|
|
5
|
+
*/
|
|
6
|
+
import type { TwinDefinition, HealthPollResult } from './types.js';
|
|
7
|
+
export declare class TwinRegistry {
|
|
8
|
+
private _twins;
|
|
9
|
+
/**
|
|
10
|
+
* Discovers and validates all *.yaml and *.yml twin definition files in the given directory.
|
|
11
|
+
* Non-recursive — only top-level files are processed.
|
|
12
|
+
*
|
|
13
|
+
* @throws {TwinDefinitionError} if a file contains invalid YAML or fails schema validation
|
|
14
|
+
* @throws {TwinRegistryError} if two files declare the same twin name
|
|
15
|
+
*/
|
|
16
|
+
discover(dir: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Returns all discovered twin definitions.
|
|
19
|
+
*/
|
|
20
|
+
list(): TwinDefinition[];
|
|
21
|
+
/**
|
|
22
|
+
* Returns a twin definition by name, or undefined if not found.
|
|
23
|
+
*/
|
|
24
|
+
get(name: string): TwinDefinition | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Polls the health endpoint of a twin definition until healthy or timed out.
|
|
27
|
+
*
|
|
28
|
+
* @param twin - The twin definition to poll
|
|
29
|
+
* @param options - Optional overrides (e.g., mock fetch for testing)
|
|
30
|
+
* @returns HealthPollResult indicating success or timeout
|
|
31
|
+
*/
|
|
32
|
+
pollHealth(twin: TwinDefinition, options?: {
|
|
33
|
+
fetch?: typeof fetch;
|
|
34
|
+
}): Promise<HealthPollResult>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Factory function that creates a new TwinRegistry instance.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createTwinRegistry(): TwinRegistry;
|
|
40
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/twins/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAyC;IAEvD;;;;;;OAMG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoH1C;;OAEG;IACH,IAAI,IAAI,cAAc,EAAE;IAIxB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C;;;;;;OAMG;IACG,UAAU,CACd,IAAI,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;KAAE,GACjC,OAAO,CAAC,gBAAgB,CAAC;CA4C7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Registry — Discovery, validation, and health polling for twin definitions.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-1.
|
|
5
|
+
*/
|
|
6
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
7
|
+
import { join, resolve } from 'node:path';
|
|
8
|
+
import yaml from 'js-yaml';
|
|
9
|
+
import { TwinDefinitionSchema } from './schema.js';
|
|
10
|
+
import { TwinDefinitionError, TwinRegistryError } from './types.js';
|
|
11
|
+
export class TwinRegistry {
|
|
12
|
+
_twins = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Discovers and validates all *.yaml and *.yml twin definition files in the given directory.
|
|
15
|
+
* Non-recursive — only top-level files are processed.
|
|
16
|
+
*
|
|
17
|
+
* @throws {TwinDefinitionError} if a file contains invalid YAML or fails schema validation
|
|
18
|
+
* @throws {TwinRegistryError} if two files declare the same twin name
|
|
19
|
+
*/
|
|
20
|
+
async discover(dir) {
|
|
21
|
+
let entries;
|
|
22
|
+
try {
|
|
23
|
+
entries = await readdir(dir);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new TwinDefinitionError(`Failed to read directory: ${dir} — ${err.message}`);
|
|
27
|
+
}
|
|
28
|
+
const yamlFiles = entries.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
29
|
+
// Collect per-file validation errors so that valid siblings are still discovered (AC3).
|
|
30
|
+
// TwinRegistryError (duplicate names) is still thrown immediately as a consistency error.
|
|
31
|
+
const perFileErrors = [];
|
|
32
|
+
for (const filename of yamlFiles) {
|
|
33
|
+
const filePath = resolve(join(dir, filename));
|
|
34
|
+
let raw;
|
|
35
|
+
try {
|
|
36
|
+
raw = await readFile(filePath, 'utf-8');
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
perFileErrors.push(new TwinDefinitionError(`Failed to read file: ${filePath} — ${err.message}`, filePath));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// Parse YAML
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = yaml.load(raw);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
perFileErrors.push(new TwinDefinitionError(`Twin definition at ${filePath} contains invalid YAML: ${err.message}`, filePath));
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Validate with Zod schema
|
|
52
|
+
const result = TwinDefinitionSchema.safeParse(parsed);
|
|
53
|
+
if (!result.success) {
|
|
54
|
+
const firstIssue = result.error.issues[0];
|
|
55
|
+
const fieldPath = firstIssue?.path?.join('.') ?? 'unknown';
|
|
56
|
+
const fieldMessage = firstIssue?.message ?? result.error.message;
|
|
57
|
+
// Provide a descriptive error distinguishing missing required fields from unknown fields
|
|
58
|
+
let message;
|
|
59
|
+
const issueCode = firstIssue?.code;
|
|
60
|
+
if (issueCode === 'unrecognized_keys') {
|
|
61
|
+
// Zod v3: unrecognized_keys issue
|
|
62
|
+
const keys = firstIssue.keys ?? [];
|
|
63
|
+
message = `Twin definition at ${filePath} contains unrecognised field(s): ${keys.join(', ')}`;
|
|
64
|
+
}
|
|
65
|
+
else if (issueCode === 'unrecognized_key') {
|
|
66
|
+
// Zod v4: single unrecognized_key issue
|
|
67
|
+
const key = firstIssue.key ?? fieldPath;
|
|
68
|
+
message = `Twin definition at ${filePath} contains unrecognised field(s): ${key}`;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Determine if this is a missing required field by checking the parsed input directly
|
|
72
|
+
const parsedObj = parsed;
|
|
73
|
+
const isMissingField = parsedObj &&
|
|
74
|
+
typeof parsedObj === 'object' &&
|
|
75
|
+
fieldPath !== 'unknown' &&
|
|
76
|
+
!(fieldPath in parsedObj);
|
|
77
|
+
if (isMissingField) {
|
|
78
|
+
message = `Twin definition at ${filePath} is missing required field: ${fieldPath}`;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
message = `Twin definition at ${filePath} failed validation — ${fieldPath}: ${fieldMessage}`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
perFileErrors.push(new TwinDefinitionError(message, filePath));
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Construct TwinDefinition manually to satisfy exactOptionalPropertyTypes —
|
|
88
|
+
// Zod types optional fields as `T | undefined` but TwinDefinition uses `T?` (absent).
|
|
89
|
+
const data = result.data;
|
|
90
|
+
const twin = {
|
|
91
|
+
name: data.name,
|
|
92
|
+
image: data.image,
|
|
93
|
+
ports: data.ports,
|
|
94
|
+
environment: data.environment,
|
|
95
|
+
sourceFile: filePath,
|
|
96
|
+
...(data.healthcheck !== undefined && { healthcheck: data.healthcheck }),
|
|
97
|
+
};
|
|
98
|
+
// Check for duplicate names — throw immediately as a registry consistency error (AC4).
|
|
99
|
+
if (this._twins.has(twin.name)) {
|
|
100
|
+
const existing = this._twins.get(twin.name);
|
|
101
|
+
throw new TwinRegistryError(`Duplicate twin name "${twin.name}" found in: ${existing.sourceFile} and ${filePath}`);
|
|
102
|
+
}
|
|
103
|
+
this._twins.set(twin.name, twin);
|
|
104
|
+
}
|
|
105
|
+
// After processing all files, surface the first per-file validation error (AC3).
|
|
106
|
+
// Valid siblings have already been added to the registry above.
|
|
107
|
+
if (perFileErrors.length > 0) {
|
|
108
|
+
throw perFileErrors[0];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Returns all discovered twin definitions.
|
|
113
|
+
*/
|
|
114
|
+
list() {
|
|
115
|
+
return Array.from(this._twins.values());
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Returns a twin definition by name, or undefined if not found.
|
|
119
|
+
*/
|
|
120
|
+
get(name) {
|
|
121
|
+
return this._twins.get(name);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Polls the health endpoint of a twin definition until healthy or timed out.
|
|
125
|
+
*
|
|
126
|
+
* @param twin - The twin definition to poll
|
|
127
|
+
* @param options - Optional overrides (e.g., mock fetch for testing)
|
|
128
|
+
* @returns HealthPollResult indicating success or timeout
|
|
129
|
+
*/
|
|
130
|
+
async pollHealth(twin, options) {
|
|
131
|
+
const { healthcheck } = twin;
|
|
132
|
+
if (!healthcheck) {
|
|
133
|
+
return { healthy: true, attempts: 0 };
|
|
134
|
+
}
|
|
135
|
+
const fetchFn = options?.fetch ?? globalThis.fetch;
|
|
136
|
+
const { url, interval_ms = 500, timeout_ms = 10000 } = healthcheck;
|
|
137
|
+
const startTime = Date.now();
|
|
138
|
+
let attempts = 0;
|
|
139
|
+
while (true) {
|
|
140
|
+
attempts++;
|
|
141
|
+
try {
|
|
142
|
+
const response = await fetchFn(url);
|
|
143
|
+
if (response.ok) {
|
|
144
|
+
return { healthy: true, attempts };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Network error — treat as non-2xx, continue looping
|
|
149
|
+
}
|
|
150
|
+
const elapsed = Date.now() - startTime;
|
|
151
|
+
if (elapsed >= timeout_ms) {
|
|
152
|
+
return {
|
|
153
|
+
healthy: false,
|
|
154
|
+
error: `Health check timed out after ${timeout_ms}ms`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// Wait before next attempt
|
|
158
|
+
await new Promise((resolve) => setTimeout(resolve, interval_ms));
|
|
159
|
+
// Check timeout again after sleep
|
|
160
|
+
if (Date.now() - startTime >= timeout_ms) {
|
|
161
|
+
return {
|
|
162
|
+
healthy: false,
|
|
163
|
+
error: `Health check timed out after ${timeout_ms}ms`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Factory function that creates a new TwinRegistry instance.
|
|
171
|
+
*/
|
|
172
|
+
export function createTwinRegistry() {
|
|
173
|
+
return new TwinRegistry();
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/twins/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run state management for digital twin sessions.
|
|
3
|
+
*
|
|
4
|
+
* Persists the compose directory path and started twin names to
|
|
5
|
+
* `.substrate/twins/.run-state.json` so that `twins stop` and `twins status`
|
|
6
|
+
* can locate the active session without Docker inspection.
|
|
7
|
+
*
|
|
8
|
+
* Story 47-5.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Serialized state written by `twins start` and read by `twins stop`/`twins status`.
|
|
12
|
+
*/
|
|
13
|
+
export interface TwinRunState {
|
|
14
|
+
/** Absolute path to the temp directory containing the active docker-compose.yml */
|
|
15
|
+
composeDir: string;
|
|
16
|
+
/** Names of all twins included in this run */
|
|
17
|
+
twinNames: string[];
|
|
18
|
+
/** ISO 8601 timestamp of when the twins were started */
|
|
19
|
+
startedAt: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns the absolute path to the run-state JSON file for the given project.
|
|
23
|
+
*
|
|
24
|
+
* @param projectDir - Absolute path to the project root (usually `process.cwd()`)
|
|
25
|
+
*/
|
|
26
|
+
export declare function runStatePath(projectDir: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Reads and JSON-parses the run-state file.
|
|
29
|
+
*
|
|
30
|
+
* @returns The parsed `TwinRunState`, or `null` if the file does not exist.
|
|
31
|
+
* @throws If any I/O error other than ENOENT occurs, or if the JSON is invalid.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readRunState(projectDir: string): Promise<TwinRunState | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Writes the given run state to disk, creating parent directories as needed.
|
|
36
|
+
*
|
|
37
|
+
* @param projectDir - Absolute path to the project root
|
|
38
|
+
* @param state - The `TwinRunState` to persist
|
|
39
|
+
*/
|
|
40
|
+
export declare function writeRunState(projectDir: string, state: TwinRunState): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Deletes the run-state file. No-op if the file does not exist.
|
|
43
|
+
*
|
|
44
|
+
* @param projectDir - Absolute path to the project root
|
|
45
|
+
*/
|
|
46
|
+
export declare function clearRunState(projectDir: string): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=run-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state.d.ts","sourceRoot":"","sources":["../../src/twins/run-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAMD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CASnF;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1F;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run state management for digital twin sessions.
|
|
3
|
+
*
|
|
4
|
+
* Persists the compose directory path and started twin names to
|
|
5
|
+
* `.substrate/twins/.run-state.json` so that `twins stop` and `twins status`
|
|
6
|
+
* can locate the active session without Docker inspection.
|
|
7
|
+
*
|
|
8
|
+
* Story 47-5.
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises';
|
|
11
|
+
import path from 'node:path';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Path helper
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Returns the absolute path to the run-state JSON file for the given project.
|
|
17
|
+
*
|
|
18
|
+
* @param projectDir - Absolute path to the project root (usually `process.cwd()`)
|
|
19
|
+
*/
|
|
20
|
+
export function runStatePath(projectDir) {
|
|
21
|
+
return path.join(projectDir, '.substrate', 'twins', '.run-state.json');
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Read / write / clear
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/**
|
|
27
|
+
* Reads and JSON-parses the run-state file.
|
|
28
|
+
*
|
|
29
|
+
* @returns The parsed `TwinRunState`, or `null` if the file does not exist.
|
|
30
|
+
* @throws If any I/O error other than ENOENT occurs, or if the JSON is invalid.
|
|
31
|
+
*/
|
|
32
|
+
export async function readRunState(projectDir) {
|
|
33
|
+
const filePath = runStatePath(projectDir);
|
|
34
|
+
try {
|
|
35
|
+
const content = await readFile(filePath, 'utf-8');
|
|
36
|
+
return JSON.parse(content);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (err.code === 'ENOENT')
|
|
40
|
+
return null;
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Writes the given run state to disk, creating parent directories as needed.
|
|
46
|
+
*
|
|
47
|
+
* @param projectDir - Absolute path to the project root
|
|
48
|
+
* @param state - The `TwinRunState` to persist
|
|
49
|
+
*/
|
|
50
|
+
export async function writeRunState(projectDir, state) {
|
|
51
|
+
const filePath = runStatePath(projectDir);
|
|
52
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
53
|
+
await writeFile(filePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Deletes the run-state file. No-op if the file does not exist.
|
|
57
|
+
*
|
|
58
|
+
* @param projectDir - Absolute path to the project root
|
|
59
|
+
*/
|
|
60
|
+
export async function clearRunState(projectDir) {
|
|
61
|
+
const filePath = runStatePath(projectDir);
|
|
62
|
+
try {
|
|
63
|
+
await unlink(filePath);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
if (err.code !== 'ENOENT')
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=run-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../src/twins/run-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,IAAI,MAAM,WAAW,CAAA;AAkB5B,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAA;AACxE,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QACjE,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,KAAmB;IACzE,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAA;IACjE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Registry — Zod validation schema for twin definition YAML files.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-1.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Validates a full twin definition. Unknown fields are rejected via `.strict()`.
|
|
9
|
+
*/
|
|
10
|
+
declare const twinDefinitionSchema: z.ZodObject<{
|
|
11
|
+
name: z.ZodString;
|
|
12
|
+
image: z.ZodString;
|
|
13
|
+
ports: z.ZodDefault<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<{
|
|
14
|
+
host: number;
|
|
15
|
+
container: number;
|
|
16
|
+
}, string>>>>;
|
|
17
|
+
environment: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
18
|
+
healthcheck: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
url: z.ZodString;
|
|
20
|
+
interval_ms: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
}, z.core.$strip>>;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
export declare const TwinDefinitionSchema: z.ZodObject<{
|
|
25
|
+
name: z.ZodString;
|
|
26
|
+
image: z.ZodString;
|
|
27
|
+
ports: z.ZodDefault<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<{
|
|
28
|
+
host: number;
|
|
29
|
+
container: number;
|
|
30
|
+
}, string>>>>;
|
|
31
|
+
environment: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
32
|
+
healthcheck: z.ZodOptional<z.ZodObject<{
|
|
33
|
+
url: z.ZodString;
|
|
34
|
+
interval_ms: z.ZodDefault<z.ZodNumber>;
|
|
35
|
+
timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
}, z.core.$strict>;
|
|
38
|
+
export type TwinDefinitionInput = z.input<typeof twinDefinitionSchema>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/twins/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAyBvB;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;;cAfgB,MAAM;mBAAa,MAAM;;;;;;;;kBAuBxD,CAAA;AAEX,eAAO,MAAM,oBAAoB;;;;cAzBS,MAAM;mBAAa,MAAM;;;;;;;;kBAyBX,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Registry — Zod validation schema for twin definition YAML files.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-1.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Validates and transforms a "host:container" port string into a PortMapping object.
|
|
9
|
+
*/
|
|
10
|
+
const portMappingStringSchema = z
|
|
11
|
+
.string()
|
|
12
|
+
.regex(/^\d+:\d+$/, 'Port mapping must be in "host:container" format (e.g., "5432:5432")')
|
|
13
|
+
.transform((val) => {
|
|
14
|
+
const parts = val.split(':');
|
|
15
|
+
const host = Number(parts[0]);
|
|
16
|
+
const container = Number(parts[1]);
|
|
17
|
+
return { host, container };
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Validates a healthcheck configuration object.
|
|
21
|
+
*/
|
|
22
|
+
const twinHealthcheckSchema = z.object({
|
|
23
|
+
url: z.string().url('Healthcheck URL must be a valid URL'),
|
|
24
|
+
interval_ms: z.number().int().positive().default(500),
|
|
25
|
+
timeout_ms: z.number().int().positive().default(10000),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Validates a full twin definition. Unknown fields are rejected via `.strict()`.
|
|
29
|
+
*/
|
|
30
|
+
const twinDefinitionSchema = z
|
|
31
|
+
.object({
|
|
32
|
+
name: z.string().min(1, 'Twin name must not be empty'),
|
|
33
|
+
image: z.string().min(1, 'Twin image must not be empty'),
|
|
34
|
+
ports: z.array(portMappingStringSchema).default([]),
|
|
35
|
+
environment: z.record(z.string(), z.string()).default({}),
|
|
36
|
+
healthcheck: twinHealthcheckSchema.optional(),
|
|
37
|
+
})
|
|
38
|
+
.strict();
|
|
39
|
+
export const TwinDefinitionSchema = twinDefinitionSchema;
|
|
40
|
+
// Compile-time assertion: schema output must be assignable to TwinDefinition (minus sourceFile
|
|
41
|
+
// and healthcheck). The healthcheck field is excluded because Zod's `.optional()` produces
|
|
42
|
+
// `T | undefined` which conflicts with exactOptionalPropertyTypes (which requires the field
|
|
43
|
+
// to be absent, not explicitly undefined). The registry.ts constructor handles this mismatch
|
|
44
|
+
// with a spread-based conditional assignment.
|
|
45
|
+
const _schemaCompatCheck = {};
|
|
46
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/twins/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;GAEG;AACH,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,EAAE;KACR,KAAK,CAAC,WAAW,EAAE,qEAAqE,CAAC;KACzF,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAyC,CAAA;AACnE,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,qCAAqC,CAAC;IAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACvD,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,WAAW,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC9C,CAAC;KACD,MAAM,EAAE,CAAA;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAA;AAIxD,+FAA+F;AAC/F,2FAA2F;AAC3F,4FAA4F;AAC5F,6FAA6F;AAC7F,8CAA8C;AAC9C,MAAM,kBAAkB,GACtB,EAAgE,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Template Catalog — pre-built twin definition templates for common external services.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-4.
|
|
5
|
+
*/
|
|
6
|
+
import type { TwinDefinitionInput } from './schema.js';
|
|
7
|
+
/**
|
|
8
|
+
* A single entry in the twin template catalog.
|
|
9
|
+
*/
|
|
10
|
+
export interface TwinTemplateEntry {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
definition: TwinDefinitionInput;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Map of all built-in twin templates, keyed by template name.
|
|
17
|
+
*/
|
|
18
|
+
export declare const TWIN_TEMPLATES: Map<string, TwinTemplateEntry>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns all available twin template entries.
|
|
21
|
+
*/
|
|
22
|
+
export declare function listTwinTemplates(): TwinTemplateEntry[];
|
|
23
|
+
/**
|
|
24
|
+
* Returns the twin template entry for the given name, or `undefined` if not found.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getTwinTemplate(name: string): TwinTemplateEntry | undefined;
|
|
27
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/twins/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,mBAAmB,CAAA;CAChC;AA4CD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAGxD,CAAA;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,EAAE,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE3E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Template Catalog — pre-built twin definition templates for common external services.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-4.
|
|
5
|
+
*/
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Built-in templates
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const localstackTemplate = {
|
|
10
|
+
name: 'localstack',
|
|
11
|
+
description: 'LocalStack — AWS cloud service emulator (S3, SQS, DynamoDB)',
|
|
12
|
+
definition: {
|
|
13
|
+
name: 'localstack',
|
|
14
|
+
image: 'localstack/localstack:latest',
|
|
15
|
+
ports: ['4566:4566'],
|
|
16
|
+
environment: {
|
|
17
|
+
SERVICES: 's3,sqs,dynamodb',
|
|
18
|
+
},
|
|
19
|
+
healthcheck: {
|
|
20
|
+
url: 'http://localhost:4566/_localstack/health',
|
|
21
|
+
interval_ms: 500,
|
|
22
|
+
timeout_ms: 10000,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const wiremockTemplate = {
|
|
27
|
+
name: 'wiremock',
|
|
28
|
+
description: 'WireMock — HTTP API mock and stub server',
|
|
29
|
+
definition: {
|
|
30
|
+
name: 'wiremock',
|
|
31
|
+
image: 'wiremock/wiremock:latest',
|
|
32
|
+
ports: ['8080:8080'],
|
|
33
|
+
environment: {},
|
|
34
|
+
healthcheck: {
|
|
35
|
+
url: 'http://localhost:8080/__admin/health',
|
|
36
|
+
interval_ms: 500,
|
|
37
|
+
timeout_ms: 10000,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Template catalog
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
/**
|
|
45
|
+
* Map of all built-in twin templates, keyed by template name.
|
|
46
|
+
*/
|
|
47
|
+
export const TWIN_TEMPLATES = new Map([
|
|
48
|
+
[localstackTemplate.name, localstackTemplate],
|
|
49
|
+
[wiremockTemplate.name, wiremockTemplate],
|
|
50
|
+
]);
|
|
51
|
+
/**
|
|
52
|
+
* Returns all available twin template entries.
|
|
53
|
+
*/
|
|
54
|
+
export function listTwinTemplates() {
|
|
55
|
+
return Array.from(TWIN_TEMPLATES.values());
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Returns the twin template entry for the given name, or `undefined` if not found.
|
|
59
|
+
*/
|
|
60
|
+
export function getTwinTemplate(name) {
|
|
61
|
+
return TWIN_TEMPLATES.get(name);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/twins/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,kBAAkB,GAAsB;IAC5C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,6DAA6D;IAC1E,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,8BAA8B;QACrC,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,WAAW,EAAE;YACX,QAAQ,EAAE,iBAAiB;SAC5B;QACD,WAAW,EAAE;YACX,GAAG,EAAE,0CAA0C;YAC/C,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,KAAK;SAClB;KACF;CACF,CAAA;AAED,MAAM,gBAAgB,GAAsB;IAC1C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,0CAA0C;IACvD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,0BAA0B;QACjC,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,GAAG,EAAE,sCAAsC;YAC3C,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,KAAK;SAClB;KACF;CACF,CAAA;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmC,IAAI,GAAG,CAAC;IACpE,CAAC,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAC7C,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC;CAC1C,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Registry — Type definitions for TwinDefinition and related interfaces.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-1.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Represents a host:container port mapping for a digital twin service.
|
|
8
|
+
*/
|
|
9
|
+
export interface PortMapping {
|
|
10
|
+
host: number;
|
|
11
|
+
container: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Healthcheck configuration for a digital twin service.
|
|
15
|
+
*/
|
|
16
|
+
export interface TwinHealthcheck {
|
|
17
|
+
url: string;
|
|
18
|
+
interval_ms?: number;
|
|
19
|
+
timeout_ms?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Full definition of a digital twin service, parsed from a YAML file.
|
|
23
|
+
*/
|
|
24
|
+
export interface TwinDefinition {
|
|
25
|
+
name: string;
|
|
26
|
+
image: string;
|
|
27
|
+
ports: PortMapping[];
|
|
28
|
+
environment: Record<string, string>;
|
|
29
|
+
healthcheck?: TwinHealthcheck;
|
|
30
|
+
sourceFile?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of polling a twin's health endpoint.
|
|
34
|
+
*/
|
|
35
|
+
export type HealthPollResult = {
|
|
36
|
+
healthy: true;
|
|
37
|
+
attempts: number;
|
|
38
|
+
} | {
|
|
39
|
+
healthy: false;
|
|
40
|
+
error: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Thrown when a single twin definition file fails validation or parsing.
|
|
44
|
+
*/
|
|
45
|
+
export declare class TwinDefinitionError extends Error {
|
|
46
|
+
readonly sourceFile?: string | undefined;
|
|
47
|
+
constructor(message: string, sourceFile?: string | undefined);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Thrown when a registry-level constraint is violated (e.g., duplicate twin names).
|
|
51
|
+
*/
|
|
52
|
+
export declare class TwinRegistryError extends Error {
|
|
53
|
+
constructor(message: string);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/twins/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAErC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Twin Registry — Type definitions for TwinDefinition and related interfaces.
|
|
3
|
+
*
|
|
4
|
+
* Story 47-1.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Thrown when a single twin definition file fails validation or parsing.
|
|
8
|
+
*/
|
|
9
|
+
export class TwinDefinitionError extends Error {
|
|
10
|
+
sourceFile;
|
|
11
|
+
constructor(message, sourceFile) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.sourceFile = sourceFile;
|
|
14
|
+
this.name = 'TwinDefinitionError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Thrown when a registry-level constraint is violated (e.g., duplicate twin names).
|
|
19
|
+
*/
|
|
20
|
+
export class TwinRegistryError extends Error {
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'TwinRegistryError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/twins/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsCH;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAG1B;IAFlB,YACE,OAAe,EACC,UAAmB;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,eAAU,GAAV,UAAU,CAAS;QAGnC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF"}
|