@substrate-ai/factory 0.19.54 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/config.d.ts +4 -4
- package/package.json +12 -3
- package/dist/__tests__/config.test.d.ts +0 -11
- package/dist/__tests__/config.test.d.ts.map +0 -1
- package/dist/__tests__/config.test.js +0 -215
- package/dist/__tests__/config.test.js.map +0 -1
- package/dist/__tests__/factory-run-command.test.d.ts +0 -12
- package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
- package/dist/__tests__/factory-run-command.test.js +0 -454
- package/dist/__tests__/factory-run-command.test.js.map +0 -1
- package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
- package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
- package/dist/__tests__/factory-validate-command.test.js +0 -339
- package/dist/__tests__/factory-validate-command.test.js.map +0 -1
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
- package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
- package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
- package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
- package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
- package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
- package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
- package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
- package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
- package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
- package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
- package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
- package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
- package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
- package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
- package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
- package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
- package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
- package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
- package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
- package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
- package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
- package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
- package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
- package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
- package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
- package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
- package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
- package/dist/__tests__/integration/convergence-validation.test.js +0 -449
- package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
- package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
- package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
- package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
- package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
- package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
- package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
- package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
- package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
- package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
- package/dist/__tests__/integration/events.test.d.ts +0 -8
- package/dist/__tests__/integration/events.test.d.ts.map +0 -1
- package/dist/__tests__/integration/events.test.js +0 -194
- package/dist/__tests__/integration/events.test.js.map +0 -1
- package/dist/__tests__/integration/graphs.d.ts +0 -59
- package/dist/__tests__/integration/graphs.d.ts.map +0 -1
- package/dist/__tests__/integration/graphs.js +0 -164
- package/dist/__tests__/integration/graphs.js.map +0 -1
- package/dist/__tests__/integration/helpers.d.ts +0 -127
- package/dist/__tests__/integration/helpers.d.ts.map +0 -1
- package/dist/__tests__/integration/helpers.js +0 -167
- package/dist/__tests__/integration/helpers.js.map +0 -1
- package/dist/__tests__/integration/integrity.test.d.ts +0 -8
- package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
- package/dist/__tests__/integration/integrity.test.js +0 -198
- package/dist/__tests__/integration/integrity.test.js.map +0 -1
- package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
- package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
- package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
- package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
- package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
- package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
- package/dist/__tests__/integration/manager-loop.test.js +0 -276
- package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
- package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
- package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
- package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
- package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
- package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
- package/dist/__tests__/integration/persistence.test.d.ts +0 -8
- package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
- package/dist/__tests__/integration/persistence.test.js +0 -129
- package/dist/__tests__/integration/persistence.test.js.map +0 -1
- package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
- package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
- package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
- package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
- package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
- package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
- package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
- package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
- package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
- package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
- package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
- package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
- package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
- package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
- package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
- package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
- package/dist/__tests__/integration/validation-errors.test.js +0 -150
- package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
- package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
- package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
- package/dist/agent/__tests__/loop-detection.test.js +0 -236
- package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
- package/dist/agent/__tests__/loop.test.d.ts +0 -2
- package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
- package/dist/agent/__tests__/loop.test.js +0 -868
- package/dist/agent/__tests__/loop.test.js.map +0 -1
- package/dist/agent/__tests__/truncation.test.d.ts +0 -2
- package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
- package/dist/agent/__tests__/truncation.test.js +0 -276
- package/dist/agent/__tests__/truncation.test.js.map +0 -1
- package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
- package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
- package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/environment.test.js +0 -33
- package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
- package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
- package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
- package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
- package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
- package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/patch.test.js +0 -116
- package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
- package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/profiles.test.js +0 -125
- package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
- package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/registry.test.js +0 -94
- package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
- package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
- package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
- package/dist/agent/tools/__tests__/shared.test.js +0 -131
- package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
- package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
- package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
- package/dist/backend/__tests__/direct-backend.test.js +0 -393
- package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
- package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
- package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
- package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
- package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
- package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
- package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
- package/dist/backend/__tests__/mock-backend.test.js +0 -273
- package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
- package/dist/backend/__tests__/parity.test.d.ts +0 -17
- package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
- package/dist/backend/__tests__/parity.test.js +0 -411
- package/dist/backend/__tests__/parity.test.js.map +0 -1
- package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
- package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
- package/dist/context/__tests__/auto-summarizer.test.js +0 -189
- package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
- package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
- package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
- package/dist/context/__tests__/context-cli-command.test.js +0 -331
- package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
- package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
- package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
- package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
- package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
- package/dist/context/__tests__/summarizer.test.d.ts +0 -2
- package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
- package/dist/context/__tests__/summarizer.test.js +0 -189
- package/dist/context/__tests__/summarizer.test.js.map +0 -1
- package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
- package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
- package/dist/context/__tests__/summary-cache.test.js +0 -214
- package/dist/context/__tests__/summary-cache.test.js.map +0 -1
- package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
- package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
- package/dist/context/__tests__/summary-metrics.test.js +0 -172
- package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
- package/dist/context/__tests__/summary-types.test.d.ts +0 -2
- package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
- package/dist/context/__tests__/summary-types.test.js +0 -130
- package/dist/context/__tests__/summary-types.test.js.map +0 -1
- package/dist/convergence/__tests__/budget.test.d.ts +0 -6
- package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/budget.test.js +0 -187
- package/dist/convergence/__tests__/budget.test.js.map +0 -1
- package/dist/convergence/__tests__/controller.test.d.ts +0 -9
- package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/controller.test.js +0 -585
- package/dist/convergence/__tests__/controller.test.js.map +0 -1
- package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
- package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/dual-signal.test.js +0 -123
- package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
- package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
- package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
- package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
- package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
- package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/plateau.test.js +0 -163
- package/dist/convergence/__tests__/plateau.test.js.map +0 -1
- package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
- package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/remediation.test.js +0 -209
- package/dist/convergence/__tests__/remediation.test.js.map +0 -1
- package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
- package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
- package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
- package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
- package/dist/factory-command.test.d.ts +0 -8
- package/dist/factory-command.test.d.ts.map +0 -1
- package/dist/factory-command.test.js +0 -304
- package/dist/factory-command.test.js.map +0 -1
- package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
- package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
- package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
- package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
- package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
- package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
- package/dist/graph/__tests__/checkpoint.test.js +0 -329
- package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
- package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
- package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
- package/dist/graph/__tests__/condition-parser.test.js +0 -406
- package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
- package/dist/graph/__tests__/context.test.d.ts +0 -14
- package/dist/graph/__tests__/context.test.d.ts.map +0 -1
- package/dist/graph/__tests__/context.test.js +0 -276
- package/dist/graph/__tests__/context.test.js.map +0 -1
- package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
- package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
- package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
- package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
- package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
- package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
- package/dist/graph/__tests__/edge-selector.test.js +0 -452
- package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
- package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
- package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
- package/dist/graph/__tests__/executor-convergence.test.js +0 -432
- package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
- package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
- package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
- package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
- package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
- package/dist/graph/__tests__/executor.test.d.ts +0 -14
- package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
- package/dist/graph/__tests__/executor.test.js +0 -901
- package/dist/graph/__tests__/executor.test.js.map +0 -1
- package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
- package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
- package/dist/graph/__tests__/fidelity.test.js +0 -135
- package/dist/graph/__tests__/fidelity.test.js.map +0 -1
- package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
- package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
- package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
- package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
- package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
- package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
- package/dist/graph/__tests__/parser-chaining.test.js +0 -215
- package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
- package/dist/graph/__tests__/parser.test.d.ts +0 -22
- package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
- package/dist/graph/__tests__/parser.test.js +0 -452
- package/dist/graph/__tests__/parser.test.js.map +0 -1
- package/dist/graph/__tests__/run-state.test.d.ts +0 -13
- package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
- package/dist/graph/__tests__/run-state.test.js +0 -189
- package/dist/graph/__tests__/run-state.test.js.map +0 -1
- package/dist/graph/__tests__/transformer.test.d.ts +0 -16
- package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
- package/dist/graph/__tests__/transformer.test.js +0 -350
- package/dist/graph/__tests__/transformer.test.js.map +0 -1
- package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
- package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
- package/dist/graph/__tests__/validator-errors.test.js +0 -572
- package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
- package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
- package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
- package/dist/graph/__tests__/validator-warnings.test.js +0 -363
- package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
- package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
- package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
- package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
- package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
- package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/fan-in.test.js +0 -399
- package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
- package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
- package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/join-policy.test.js +0 -201
- package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
- package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
- package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/manager-loop.test.js +0 -322
- package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
- package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
- package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/parallel-events.test.js +0 -252
- package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
- package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
- package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
- package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
- package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
- package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/parallel-join.test.js +0 -267
- package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
- package/dist/handlers/__tests__/registry.test.d.ts +0 -14
- package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/registry.test.js +0 -315
- package/dist/handlers/__tests__/registry.test.js.map +0 -1
- package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
- package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
- package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
- package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
- package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
- package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
- package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
- package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/subgraph.test.js +0 -369
- package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
- package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
- package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/tool-handler.test.js +0 -184
- package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
- package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
- package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
- package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
- package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
- package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
- package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
- package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
- package/dist/llm/__tests__/client.test.d.ts +0 -2
- package/dist/llm/__tests__/client.test.d.ts.map +0 -1
- package/dist/llm/__tests__/client.test.js +0 -198
- package/dist/llm/__tests__/client.test.js.map +0 -1
- package/dist/llm/__tests__/types.test.d.ts +0 -2
- package/dist/llm/__tests__/types.test.d.ts.map +0 -1
- package/dist/llm/__tests__/types.test.js +0 -289
- package/dist/llm/__tests__/types.test.js.map +0 -1
- package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
- package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
- package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
- package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
- package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
- package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
- package/dist/llm/middleware/__tests__/logging.test.js +0 -127
- package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
- package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
- package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
- package/dist/llm/middleware/__tests__/retry.test.js +0 -126
- package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
- package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
- package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
- package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
- package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
- package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
- package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
- package/dist/llm/providers/__tests__/gemini.test.js +0 -591
- package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
- package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
- package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
- package/dist/llm/providers/__tests__/openai.test.js +0 -546
- package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
- package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
- package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
- package/dist/persistence/__tests__/factory-queries.test.js +0 -372
- package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
- package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
- package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
- package/dist/persistence/__tests__/factory-schema.test.js +0 -105
- package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
- package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
- package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
- package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
- package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
- package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/cli-command.test.js +0 -275
- package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
- package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
- package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
- package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
- package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
- package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
- package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
- package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
- package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/scorer.test.js +0 -225
- package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
- package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
- package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
- package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
- package/dist/scenarios/__tests__/store.test.d.ts +0 -5
- package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
- package/dist/scenarios/__tests__/store.test.js +0 -169
- package/dist/scenarios/__tests__/store.test.js.map +0 -1
- package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
- package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
- package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
- package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
- package/dist/templates/__tests__/templates.test.d.ts +0 -7
- package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
- package/dist/templates/__tests__/templates.test.js +0 -92
- package/dist/templates/__tests__/templates.test.js.map +0 -1
- package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
- package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
- package/dist/twins/__tests__/docker-compose.test.js +0 -247
- package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
- package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
- package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
- package/dist/twins/__tests__/health-monitor.test.js +0 -301
- package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
- package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
- package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
- package/dist/twins/__tests__/integration/e2e.test.js +0 -146
- package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
- package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +0 -16
- package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +0 -1
- package/dist/twins/__tests__/integration/health-monitor-integration.test.js +0 -183
- package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +0 -1
- package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
- package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
- package/dist/twins/__tests__/integration/helpers.js +0 -67
- package/dist/twins/__tests__/integration/helpers.js.map +0 -1
- package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
- package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
- package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
- package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
- package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
- package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
- package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
- package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
- package/dist/twins/__tests__/persistence.test.d.ts +0 -10
- package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
- package/dist/twins/__tests__/persistence.test.js +0 -300
- package/dist/twins/__tests__/persistence.test.js.map +0 -1
- package/dist/twins/__tests__/registry.test.d.ts +0 -7
- package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
- package/dist/twins/__tests__/registry.test.js +0 -282
- package/dist/twins/__tests__/registry.test.js.map +0 -1
- package/dist/twins/__tests__/run-state.test.d.ts +0 -9
- package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
- package/dist/twins/__tests__/run-state.test.js +0 -112
- package/dist/twins/__tests__/run-state.test.js.map +0 -1
- package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
- package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
- package/dist/twins/__tests__/templates-cli.test.js +0 -187
- package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
- package/dist/twins/__tests__/templates.test.d.ts +0 -7
- package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
- package/dist/twins/__tests__/templates.test.js +0 -87
- package/dist/twins/__tests__/templates.test.js.map +0 -1
- package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
- package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
- package/dist/twins/__tests__/twins-cli.test.js +0 -365
- package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for `substrate factory validate` CLI subcommand.
|
|
3
|
-
*
|
|
4
|
-
* AC1 — Valid graph → "13/13 rules passed, 0 errors, 0 warnings", exit 0
|
|
5
|
-
* AC2 — Error diagnostic → summary shows failing rule, lists diagnostic, exit 1
|
|
6
|
-
* AC3 — Warning-only → lists warning, summary, exit 0
|
|
7
|
-
* AC4 — --output-format json → JSON array of ValidationDiagnostic[], no summary
|
|
8
|
-
* AC5 — Missing file → stderr "file not found", exit 2
|
|
9
|
-
* AC6 — Malformed DOT → stderr "failed to parse graph", exit 2
|
|
10
|
-
* AC7 — 2 diagnostics from 1 ruleId + 1 from another → correct unique-rule pass count
|
|
11
|
-
*
|
|
12
|
-
* Story 46-7.
|
|
13
|
-
*/
|
|
14
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
15
|
-
import { Command } from 'commander';
|
|
16
|
-
import { registerFactoryCommand } from '../factory-command.js';
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Module mocks (hoisted before imports in vitest)
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
vi.mock('node:fs/promises', () => ({
|
|
21
|
-
readFile: vi.fn(),
|
|
22
|
-
}));
|
|
23
|
-
vi.mock('../graph/parser.js', () => ({
|
|
24
|
-
parseGraph: vi.fn(),
|
|
25
|
-
}));
|
|
26
|
-
vi.mock('../graph/validator.js', () => ({
|
|
27
|
-
createValidator: vi.fn(() => ({
|
|
28
|
-
validate: vi.fn().mockReturnValue([]),
|
|
29
|
-
validateOrRaise: vi.fn(),
|
|
30
|
-
registerRule: vi.fn(),
|
|
31
|
-
})),
|
|
32
|
-
}));
|
|
33
|
-
vi.mock('../graph/executor.js', () => ({
|
|
34
|
-
createGraphExecutor: vi.fn(),
|
|
35
|
-
}));
|
|
36
|
-
vi.mock('../handlers/index.js', () => ({
|
|
37
|
-
createDefaultRegistry: vi.fn(),
|
|
38
|
-
HandlerRegistry: vi.fn(),
|
|
39
|
-
}));
|
|
40
|
-
vi.mock('../config.js', () => ({
|
|
41
|
-
loadFactoryConfig: vi.fn(),
|
|
42
|
-
}));
|
|
43
|
-
vi.mock('../scenarios/cli-command.js', () => ({
|
|
44
|
-
registerScenariosCommand: vi.fn(),
|
|
45
|
-
}));
|
|
46
|
-
vi.mock('../graph/run-state.js', () => ({
|
|
47
|
-
RunStateManager: vi.fn().mockImplementation(() => ({
|
|
48
|
-
initRun: vi.fn().mockResolvedValue(undefined),
|
|
49
|
-
writeNodeArtifacts: vi.fn().mockResolvedValue(undefined),
|
|
50
|
-
writeScenarioIteration: vi.fn().mockResolvedValue(undefined),
|
|
51
|
-
})),
|
|
52
|
-
}));
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// Helpers
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
/** Minimal mock graph */
|
|
57
|
-
const mockGraph = {
|
|
58
|
-
nodes: new Map([
|
|
59
|
-
['start', { id: 'start', type: 'start', label: 'Start' }],
|
|
60
|
-
['exit', { id: 'exit', type: 'exit', label: 'Exit' }],
|
|
61
|
-
]),
|
|
62
|
-
edges: [],
|
|
63
|
-
startNode: () => ({ id: 'start', type: 'start', label: 'Start' }),
|
|
64
|
-
exitNode: () => ({ id: 'exit', type: 'exit', label: 'Exit' }),
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Run `substrate factory validate <graphFile> [...extraArgs]`
|
|
68
|
-
* via a fresh Commander program instance.
|
|
69
|
-
*/
|
|
70
|
-
async function runValidateCmd(graphFile, extraArgs = []) {
|
|
71
|
-
const program = new Command();
|
|
72
|
-
program.exitOverride();
|
|
73
|
-
registerFactoryCommand(program);
|
|
74
|
-
await program.parseAsync(['node', 'substrate', 'factory', 'validate', graphFile, ...extraArgs]);
|
|
75
|
-
}
|
|
76
|
-
// ---------------------------------------------------------------------------
|
|
77
|
-
// Tests
|
|
78
|
-
// ---------------------------------------------------------------------------
|
|
79
|
-
describe('substrate factory validate command', () => {
|
|
80
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
-
let stderrSpy;
|
|
82
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
-
let stdoutSpy;
|
|
84
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
-
let exitSpy;
|
|
86
|
-
beforeEach(async () => {
|
|
87
|
-
vi.clearAllMocks();
|
|
88
|
-
stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
89
|
-
stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
90
|
-
exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
|
|
91
|
-
throw new Error('process.exit called');
|
|
92
|
-
}));
|
|
93
|
-
// Default happy-path: file reads successfully, graph parses, no diagnostics
|
|
94
|
-
const { readFile } = await import('node:fs/promises');
|
|
95
|
-
vi.mocked(readFile).mockResolvedValue('digraph G { start -> exit }');
|
|
96
|
-
const { parseGraph } = await import('../graph/parser.js');
|
|
97
|
-
vi.mocked(parseGraph).mockReturnValue(mockGraph);
|
|
98
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
99
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
100
|
-
validate: vi.fn().mockReturnValue([]),
|
|
101
|
-
validateOrRaise: vi.fn(),
|
|
102
|
-
registerRule: vi.fn(),
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
afterEach(() => {
|
|
106
|
-
vi.restoreAllMocks();
|
|
107
|
-
});
|
|
108
|
-
// -------------------------------------------------------------------------
|
|
109
|
-
// AC1: Valid graph reports full pass
|
|
110
|
-
// -------------------------------------------------------------------------
|
|
111
|
-
it('AC1: valid graph prints "13/13 rules passed, 0 errors, 0 warnings" and exits 0', async () => {
|
|
112
|
-
await runValidateCmd('pipeline.dot');
|
|
113
|
-
const output = vi
|
|
114
|
-
.mocked(process.stdout.write)
|
|
115
|
-
.mock.calls.map((args) => String(args[0]))
|
|
116
|
-
.join('');
|
|
117
|
-
expect(output).toContain('13/13 rules passed, 0 errors, 0 warnings');
|
|
118
|
-
expect(exitSpy).not.toHaveBeenCalled();
|
|
119
|
-
});
|
|
120
|
-
// -------------------------------------------------------------------------
|
|
121
|
-
// AC2: Error diagnostics reported with non-zero exit
|
|
122
|
-
// -------------------------------------------------------------------------
|
|
123
|
-
it('AC2: error diagnostic — lists diagnostic with ruleId and exits with code 1', async () => {
|
|
124
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
125
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
126
|
-
validate: vi.fn().mockReturnValue([
|
|
127
|
-
{
|
|
128
|
-
ruleId: 'start_node',
|
|
129
|
-
severity: 'error',
|
|
130
|
-
message: 'Expected exactly one start node, found 2',
|
|
131
|
-
},
|
|
132
|
-
]),
|
|
133
|
-
validateOrRaise: vi.fn(),
|
|
134
|
-
registerRule: vi.fn(),
|
|
135
|
-
});
|
|
136
|
-
await expect(runValidateCmd('pipeline.dot')).rejects.toThrow('process.exit called');
|
|
137
|
-
const output = vi
|
|
138
|
-
.mocked(process.stdout.write)
|
|
139
|
-
.mock.calls.map((args) => String(args[0]))
|
|
140
|
-
.join('');
|
|
141
|
-
expect(output).toContain('error');
|
|
142
|
-
expect(output).toContain('start_node');
|
|
143
|
-
expect(output).toContain('12/13 rules passed, 1 error, 0 warnings');
|
|
144
|
-
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
145
|
-
});
|
|
146
|
-
// -------------------------------------------------------------------------
|
|
147
|
-
// AC3: Warning-only graphs exit 0
|
|
148
|
-
// -------------------------------------------------------------------------
|
|
149
|
-
it('AC3: warning-only graph lists warning, shows summary, and exits 0', async () => {
|
|
150
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
151
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
152
|
-
validate: vi.fn().mockReturnValue([
|
|
153
|
-
{
|
|
154
|
-
ruleId: 'prompt_on_llm_nodes',
|
|
155
|
-
severity: 'warning',
|
|
156
|
-
message: "Codergen node 'generate' has no prompt or label",
|
|
157
|
-
nodeId: 'generate',
|
|
158
|
-
},
|
|
159
|
-
]),
|
|
160
|
-
validateOrRaise: vi.fn(),
|
|
161
|
-
registerRule: vi.fn(),
|
|
162
|
-
});
|
|
163
|
-
await runValidateCmd('pipeline.dot');
|
|
164
|
-
const output = vi
|
|
165
|
-
.mocked(process.stdout.write)
|
|
166
|
-
.mock.calls.map((args) => String(args[0]))
|
|
167
|
-
.join('');
|
|
168
|
-
expect(output).toContain('warning');
|
|
169
|
-
expect(output).toContain('prompt_on_llm_nodes');
|
|
170
|
-
expect(output).toContain('12/13 rules passed');
|
|
171
|
-
expect(output).toContain('0 errors');
|
|
172
|
-
expect(output).toContain('1 warning');
|
|
173
|
-
expect(exitSpy).not.toHaveBeenCalled();
|
|
174
|
-
});
|
|
175
|
-
// -------------------------------------------------------------------------
|
|
176
|
-
// AC4: JSON output format emits ValidationDiagnostic array
|
|
177
|
-
// -------------------------------------------------------------------------
|
|
178
|
-
it('AC4: --output-format json with error diagnostic emits JSON array', async () => {
|
|
179
|
-
const diagnostic = {
|
|
180
|
-
ruleId: 'start_node',
|
|
181
|
-
severity: 'error',
|
|
182
|
-
message: 'Expected exactly one start node, found 2',
|
|
183
|
-
};
|
|
184
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
185
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
186
|
-
validate: vi.fn().mockReturnValue([diagnostic]),
|
|
187
|
-
validateOrRaise: vi.fn(),
|
|
188
|
-
registerRule: vi.fn(),
|
|
189
|
-
});
|
|
190
|
-
await expect(runValidateCmd('pipeline.dot', ['--output-format', 'json'])).rejects.toThrow('process.exit called');
|
|
191
|
-
const output = vi
|
|
192
|
-
.mocked(process.stdout.write)
|
|
193
|
-
.mock.calls.map((args) => String(args[0]))
|
|
194
|
-
.join('');
|
|
195
|
-
const parsed = JSON.parse(output);
|
|
196
|
-
expect(Array.isArray(parsed)).toBe(true);
|
|
197
|
-
expect(parsed).toHaveLength(1);
|
|
198
|
-
expect(parsed[0]).toMatchObject({
|
|
199
|
-
ruleId: 'start_node',
|
|
200
|
-
severity: 'error',
|
|
201
|
-
message: 'Expected exactly one start node, found 2',
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
it('AC4: --output-format json with valid graph emits empty array []', async () => {
|
|
205
|
-
await runValidateCmd('pipeline.dot', ['--output-format', 'json']);
|
|
206
|
-
const output = vi
|
|
207
|
-
.mocked(process.stdout.write)
|
|
208
|
-
.mock.calls.map((args) => String(args[0]))
|
|
209
|
-
.join('');
|
|
210
|
-
const parsed = JSON.parse(output);
|
|
211
|
-
expect(Array.isArray(parsed)).toBe(true);
|
|
212
|
-
expect(parsed).toHaveLength(0);
|
|
213
|
-
expect(exitSpy).not.toHaveBeenCalled();
|
|
214
|
-
});
|
|
215
|
-
it('AC4: --output-format json does not print summary line', async () => {
|
|
216
|
-
await runValidateCmd('pipeline.dot', ['--output-format', 'json']);
|
|
217
|
-
const output = vi
|
|
218
|
-
.mocked(process.stdout.write)
|
|
219
|
-
.mock.calls.map((args) => String(args[0]))
|
|
220
|
-
.join('');
|
|
221
|
-
expect(output).not.toContain('rules passed');
|
|
222
|
-
});
|
|
223
|
-
// -------------------------------------------------------------------------
|
|
224
|
-
// AC5: Missing file exits with code 2
|
|
225
|
-
// -------------------------------------------------------------------------
|
|
226
|
-
it('AC5: file not found prints error to stderr and exits with code 2', async () => {
|
|
227
|
-
const { readFile } = await import('node:fs/promises');
|
|
228
|
-
vi.mocked(readFile).mockRejectedValue(Object.assign(new Error('ENOENT: no such file'), { code: 'ENOENT' }));
|
|
229
|
-
await expect(runValidateCmd('missing.dot')).rejects.toThrow('process.exit called');
|
|
230
|
-
const stderrOutput = vi
|
|
231
|
-
.mocked(process.stderr.write)
|
|
232
|
-
.mock.calls.map((args) => String(args[0]))
|
|
233
|
-
.join('');
|
|
234
|
-
expect(stderrOutput).toContain('file not found: missing.dot');
|
|
235
|
-
expect(exitSpy).toHaveBeenCalledWith(2);
|
|
236
|
-
});
|
|
237
|
-
// -------------------------------------------------------------------------
|
|
238
|
-
// AC6: Malformed DOT file parse error exits with code 2
|
|
239
|
-
// -------------------------------------------------------------------------
|
|
240
|
-
it('AC6: malformed DOT file prints parse error to stderr and exits with code 2', async () => {
|
|
241
|
-
const { parseGraph } = await import('../graph/parser.js');
|
|
242
|
-
vi.mocked(parseGraph).mockImplementation(() => {
|
|
243
|
-
throw new Error('unexpected token at line 3');
|
|
244
|
-
});
|
|
245
|
-
await expect(runValidateCmd('bad.dot')).rejects.toThrow('process.exit called');
|
|
246
|
-
const stderrOutput = vi
|
|
247
|
-
.mocked(process.stderr.write)
|
|
248
|
-
.mock.calls.map((args) => String(args[0]))
|
|
249
|
-
.join('');
|
|
250
|
-
expect(stderrOutput).toContain('failed to parse graph: unexpected token at line 3');
|
|
251
|
-
expect(exitSpy).toHaveBeenCalledWith(2);
|
|
252
|
-
});
|
|
253
|
-
// -------------------------------------------------------------------------
|
|
254
|
-
// AC7: Summary counts reflect unique fired rules
|
|
255
|
-
// -------------------------------------------------------------------------
|
|
256
|
-
it('AC7: 2 diagnostics from 1 ruleId + 1 from another → "11/13 rules passed, 1 error, 1 warning"', async () => {
|
|
257
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
258
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
259
|
-
validate: vi.fn().mockReturnValue([
|
|
260
|
-
// Two diagnostics from the same ruleId 'reachability' (1 unique rule)
|
|
261
|
-
{
|
|
262
|
-
ruleId: 'reachability',
|
|
263
|
-
severity: 'error',
|
|
264
|
-
message: 'Node "orphan1" is unreachable',
|
|
265
|
-
nodeId: 'orphan1',
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
ruleId: 'reachability',
|
|
269
|
-
severity: 'error',
|
|
270
|
-
message: 'Node "orphan2" is unreachable',
|
|
271
|
-
nodeId: 'orphan2',
|
|
272
|
-
},
|
|
273
|
-
// One diagnostic from 'fidelity_valid' (1 unique rule)
|
|
274
|
-
{
|
|
275
|
-
ruleId: 'fidelity_valid',
|
|
276
|
-
severity: 'warning',
|
|
277
|
-
message: "Node 'x' has unrecognised fidelity value",
|
|
278
|
-
nodeId: 'x',
|
|
279
|
-
},
|
|
280
|
-
]),
|
|
281
|
-
validateOrRaise: vi.fn(),
|
|
282
|
-
registerRule: vi.fn(),
|
|
283
|
-
});
|
|
284
|
-
await expect(runValidateCmd('pipeline.dot')).rejects.toThrow('process.exit called');
|
|
285
|
-
const output = vi
|
|
286
|
-
.mocked(process.stdout.write)
|
|
287
|
-
.mock.calls.map((args) => String(args[0]))
|
|
288
|
-
.join('');
|
|
289
|
-
// 13 - 2 unique ruleIds = 11 passed
|
|
290
|
-
expect(output).toContain('11/13 rules passed, 2 errors, 1 warning');
|
|
291
|
-
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
292
|
-
});
|
|
293
|
-
// -------------------------------------------------------------------------
|
|
294
|
-
// Additional: node/edge annotation in text output
|
|
295
|
-
// -------------------------------------------------------------------------
|
|
296
|
-
it('text output includes [node: <id>] annotation when nodeId is present', async () => {
|
|
297
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
298
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
299
|
-
validate: vi.fn().mockReturnValue([
|
|
300
|
-
{
|
|
301
|
-
ruleId: 'prompt_on_llm_nodes',
|
|
302
|
-
severity: 'warning',
|
|
303
|
-
message: 'Missing prompt',
|
|
304
|
-
nodeId: 'generate',
|
|
305
|
-
},
|
|
306
|
-
]),
|
|
307
|
-
validateOrRaise: vi.fn(),
|
|
308
|
-
registerRule: vi.fn(),
|
|
309
|
-
});
|
|
310
|
-
await runValidateCmd('pipeline.dot');
|
|
311
|
-
const output = vi
|
|
312
|
-
.mocked(process.stdout.write)
|
|
313
|
-
.mock.calls.map((args) => String(args[0]))
|
|
314
|
-
.join('');
|
|
315
|
-
expect(output).toContain('[node: generate]');
|
|
316
|
-
});
|
|
317
|
-
it('text output includes [edge: <index>] annotation when edgeIndex is present', async () => {
|
|
318
|
-
const { createValidator } = await import('../graph/validator.js');
|
|
319
|
-
vi.mocked(createValidator).mockReturnValue({
|
|
320
|
-
validate: vi.fn().mockReturnValue([
|
|
321
|
-
{
|
|
322
|
-
ruleId: 'some_edge_rule',
|
|
323
|
-
severity: 'warning',
|
|
324
|
-
message: 'Edge condition problem',
|
|
325
|
-
edgeIndex: 3,
|
|
326
|
-
},
|
|
327
|
-
]),
|
|
328
|
-
validateOrRaise: vi.fn(),
|
|
329
|
-
registerRule: vi.fn(),
|
|
330
|
-
});
|
|
331
|
-
await runValidateCmd('pipeline.dot');
|
|
332
|
-
const output = vi
|
|
333
|
-
.mocked(process.stdout.write)
|
|
334
|
-
.mock.calls.map((args) => String(args[0]))
|
|
335
|
-
.join('');
|
|
336
|
-
expect(output).toContain('[edge: 3]');
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
//# sourceMappingURL=factory-validate-command.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory-validate-command.test.js","sourceRoot":"","sources":["../../src/__tests__/factory-validate-command.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DOT fixture strings for the advanced cross-project validation test.
|
|
3
|
-
* Story 50-12.
|
|
4
|
-
*
|
|
5
|
-
* Node type strings verified via:
|
|
6
|
-
* grep -rn "registry.register" packages/factory/src/handlers/registry.ts
|
|
7
|
-
*
|
|
8
|
-
* Registered types used here:
|
|
9
|
-
* 'stack.manager_loop' – outer supervisor (story 50-8)
|
|
10
|
-
* 'parallel' – fan-out node (story 50-1)
|
|
11
|
-
* 'parallel.fan_in' – fan-in/merge node (story 50-2)
|
|
12
|
-
* 'subgraph' – nested subgraph execution node (story 50-5)
|
|
13
|
-
* 'codergen' – branch execution nodes
|
|
14
|
-
* 'start' – start node
|
|
15
|
-
* 'exit' – exit node
|
|
16
|
-
*
|
|
17
|
-
* Architecture note:
|
|
18
|
-
* The manager_loop handler requires a `graph_file` attribute pointing to a
|
|
19
|
-
* separate body DOT file. `parseGraph` does NOT populate `node.attrs`, so tests
|
|
20
|
-
* must post-process the parsed graph:
|
|
21
|
-
* outerGraph.nodes.get('manager_loop')!.attrs = {
|
|
22
|
-
* graph_file: 'body.dot',
|
|
23
|
-
* max_cycles: '3',
|
|
24
|
-
* stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
|
|
25
|
-
* }
|
|
26
|
-
*
|
|
27
|
-
* Similarly, subgraph nodes require:
|
|
28
|
-
* bodyGraph.nodes.get('subgraph_node')!.attrs = { graph_file: 'child.dot' }
|
|
29
|
-
* (handled by mock subgraph handler in tests — no post-processing needed).
|
|
30
|
-
*/
|
|
31
|
-
import { parseGraph } from '../../graph/parser.js';
|
|
32
|
-
/**
|
|
33
|
-
* Outer graph: start → manager_loop → exit [condition="llm:..."]
|
|
34
|
-
*
|
|
35
|
-
* The manager_loop acts as the outermost supervisor. Its body (BODY_GRAPH_DOT)
|
|
36
|
-
* is loaded via a mock graphFileLoader and contains the parallel fan-out/fan-in
|
|
37
|
-
* with subgraph integration.
|
|
38
|
-
*
|
|
39
|
-
* Post-process after parseGraph:
|
|
40
|
-
* graph.nodes.get('manager_loop')!.attrs = {
|
|
41
|
-
* graph_file: 'body.dot',
|
|
42
|
-
* max_cycles: '3',
|
|
43
|
-
* stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
|
|
44
|
-
* }
|
|
45
|
-
*/
|
|
46
|
-
export declare const ADVANCED_VALIDATION_DOT = "\ndigraph advanced_cross_project {\n start [type=\"start\"];\n manager_loop [type=\"stack.manager_loop\", label=\"Supervised Loop\"];\n exit [type=\"exit\"];\n\n start -> manager_loop;\n manager_loop -> exit [condition=\"llm:has the implementation satisfied the acceptance criteria?\"];\n}\n";
|
|
47
|
-
/**
|
|
48
|
-
* Body graph: parallel fan-out/fan-in with subgraph integration.
|
|
49
|
-
*
|
|
50
|
-
* start → parallel_node fans out to [branch_a, branch_b]
|
|
51
|
-
* branch_a runs, then main executor traverses branch_a → subgraph_node → fan_in
|
|
52
|
-
* branch_b result is collected by fan_in
|
|
53
|
-
* fan_in → exit [condition="llm:..."] — LLM-evaluated exit edge
|
|
54
|
-
*
|
|
55
|
-
* Handler types present: parallel, codergen, subgraph, parallel.fan_in
|
|
56
|
-
*/
|
|
57
|
-
export declare const BODY_GRAPH_DOT = "\ndigraph manager_body {\n start [type=\"start\"];\n parallel_node [type=\"parallel\", label=\"Fan-out Branches\"];\n branch_a [type=\"codergen\", label=\"Implement approach A\"];\n subgraph_node [type=\"subgraph\", label=\"Run child pipeline\"];\n branch_b [type=\"codergen\", label=\"Implement approach B\"];\n fan_in [type=\"parallel.fan_in\", label=\"Best Candidate\"];\n exit [type=\"exit\"];\n\n start -> parallel_node;\n parallel_node -> branch_a;\n parallel_node -> branch_b;\n branch_a -> subgraph_node;\n subgraph_node -> fan_in;\n branch_b -> fan_in;\n fan_in -> exit [condition=\"llm:has the implementation satisfied the acceptance criteria?\"];\n}\n";
|
|
58
|
-
/**
|
|
59
|
-
* Minimal child graph: child_start → child_work → child_exit
|
|
60
|
-
* Returned by mock graphFileLoader when subgraph_node requests 'child.dot'.
|
|
61
|
-
*/
|
|
62
|
-
export declare const CHILD_GRAPH_DOT = "\ndigraph child_branch {\n child_start [type=\"start\"];\n child_work [type=\"codergen\", label=\"Implement in child context\"];\n child_exit [type=\"exit\"];\n\n child_start -> child_work;\n child_work -> child_exit;\n}\n";
|
|
63
|
-
/**
|
|
64
|
-
* Parse all three fixture DOT strings and throw if any parse fails.
|
|
65
|
-
* Returns the three parsed graphs for downstream assertions.
|
|
66
|
-
*/
|
|
67
|
-
export declare function validateFixtures(): {
|
|
68
|
-
outerGraph: ReturnType<typeof parseGraph>;
|
|
69
|
-
bodyGraph: ReturnType<typeof parseGraph>;
|
|
70
|
-
childGraph: ReturnType<typeof parseGraph>;
|
|
71
|
-
};
|
|
72
|
-
//# sourceMappingURL=advanced-cross-project-validation.dot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-cross-project-validation.dot.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/advanced-cross-project-validation.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAMlD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,mUASnC,CAAA;AAMD;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,ouBAkB1B,CAAA;AAMD;;;GAGG;AACH,eAAO,MAAM,eAAe,2OAS3B,CAAA;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IACzC,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IACxC,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;CAC1C,CAKA"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DOT fixture strings for the advanced cross-project validation test.
|
|
3
|
-
* Story 50-12.
|
|
4
|
-
*
|
|
5
|
-
* Node type strings verified via:
|
|
6
|
-
* grep -rn "registry.register" packages/factory/src/handlers/registry.ts
|
|
7
|
-
*
|
|
8
|
-
* Registered types used here:
|
|
9
|
-
* 'stack.manager_loop' – outer supervisor (story 50-8)
|
|
10
|
-
* 'parallel' – fan-out node (story 50-1)
|
|
11
|
-
* 'parallel.fan_in' – fan-in/merge node (story 50-2)
|
|
12
|
-
* 'subgraph' – nested subgraph execution node (story 50-5)
|
|
13
|
-
* 'codergen' – branch execution nodes
|
|
14
|
-
* 'start' – start node
|
|
15
|
-
* 'exit' – exit node
|
|
16
|
-
*
|
|
17
|
-
* Architecture note:
|
|
18
|
-
* The manager_loop handler requires a `graph_file` attribute pointing to a
|
|
19
|
-
* separate body DOT file. `parseGraph` does NOT populate `node.attrs`, so tests
|
|
20
|
-
* must post-process the parsed graph:
|
|
21
|
-
* outerGraph.nodes.get('manager_loop')!.attrs = {
|
|
22
|
-
* graph_file: 'body.dot',
|
|
23
|
-
* max_cycles: '3',
|
|
24
|
-
* stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
|
|
25
|
-
* }
|
|
26
|
-
*
|
|
27
|
-
* Similarly, subgraph nodes require:
|
|
28
|
-
* bodyGraph.nodes.get('subgraph_node')!.attrs = { graph_file: 'child.dot' }
|
|
29
|
-
* (handled by mock subgraph handler in tests — no post-processing needed).
|
|
30
|
-
*/
|
|
31
|
-
import { parseGraph } from '../../graph/parser.js';
|
|
32
|
-
// ---------------------------------------------------------------------------
|
|
33
|
-
// ADVANCED_VALIDATION_DOT — outer graph (manager_loop wrapper)
|
|
34
|
-
// ---------------------------------------------------------------------------
|
|
35
|
-
/**
|
|
36
|
-
* Outer graph: start → manager_loop → exit [condition="llm:..."]
|
|
37
|
-
*
|
|
38
|
-
* The manager_loop acts as the outermost supervisor. Its body (BODY_GRAPH_DOT)
|
|
39
|
-
* is loaded via a mock graphFileLoader and contains the parallel fan-out/fan-in
|
|
40
|
-
* with subgraph integration.
|
|
41
|
-
*
|
|
42
|
-
* Post-process after parseGraph:
|
|
43
|
-
* graph.nodes.get('manager_loop')!.attrs = {
|
|
44
|
-
* graph_file: 'body.dot',
|
|
45
|
-
* max_cycles: '3',
|
|
46
|
-
* stop_condition: 'llm:has the implementation satisfied the acceptance criteria?',
|
|
47
|
-
* }
|
|
48
|
-
*/
|
|
49
|
-
export const ADVANCED_VALIDATION_DOT = `
|
|
50
|
-
digraph advanced_cross_project {
|
|
51
|
-
start [type="start"];
|
|
52
|
-
manager_loop [type="stack.manager_loop", label="Supervised Loop"];
|
|
53
|
-
exit [type="exit"];
|
|
54
|
-
|
|
55
|
-
start -> manager_loop;
|
|
56
|
-
manager_loop -> exit [condition="llm:has the implementation satisfied the acceptance criteria?"];
|
|
57
|
-
}
|
|
58
|
-
`;
|
|
59
|
-
// ---------------------------------------------------------------------------
|
|
60
|
-
// BODY_GRAPH_DOT — body graph executed by manager_loop each cycle
|
|
61
|
-
// ---------------------------------------------------------------------------
|
|
62
|
-
/**
|
|
63
|
-
* Body graph: parallel fan-out/fan-in with subgraph integration.
|
|
64
|
-
*
|
|
65
|
-
* start → parallel_node fans out to [branch_a, branch_b]
|
|
66
|
-
* branch_a runs, then main executor traverses branch_a → subgraph_node → fan_in
|
|
67
|
-
* branch_b result is collected by fan_in
|
|
68
|
-
* fan_in → exit [condition="llm:..."] — LLM-evaluated exit edge
|
|
69
|
-
*
|
|
70
|
-
* Handler types present: parallel, codergen, subgraph, parallel.fan_in
|
|
71
|
-
*/
|
|
72
|
-
export const BODY_GRAPH_DOT = `
|
|
73
|
-
digraph manager_body {
|
|
74
|
-
start [type="start"];
|
|
75
|
-
parallel_node [type="parallel", label="Fan-out Branches"];
|
|
76
|
-
branch_a [type="codergen", label="Implement approach A"];
|
|
77
|
-
subgraph_node [type="subgraph", label="Run child pipeline"];
|
|
78
|
-
branch_b [type="codergen", label="Implement approach B"];
|
|
79
|
-
fan_in [type="parallel.fan_in", label="Best Candidate"];
|
|
80
|
-
exit [type="exit"];
|
|
81
|
-
|
|
82
|
-
start -> parallel_node;
|
|
83
|
-
parallel_node -> branch_a;
|
|
84
|
-
parallel_node -> branch_b;
|
|
85
|
-
branch_a -> subgraph_node;
|
|
86
|
-
subgraph_node -> fan_in;
|
|
87
|
-
branch_b -> fan_in;
|
|
88
|
-
fan_in -> exit [condition="llm:has the implementation satisfied the acceptance criteria?"];
|
|
89
|
-
}
|
|
90
|
-
`;
|
|
91
|
-
// ---------------------------------------------------------------------------
|
|
92
|
-
// CHILD_GRAPH_DOT — minimal child graph executed by subgraph handler
|
|
93
|
-
// ---------------------------------------------------------------------------
|
|
94
|
-
/**
|
|
95
|
-
* Minimal child graph: child_start → child_work → child_exit
|
|
96
|
-
* Returned by mock graphFileLoader when subgraph_node requests 'child.dot'.
|
|
97
|
-
*/
|
|
98
|
-
export const CHILD_GRAPH_DOT = `
|
|
99
|
-
digraph child_branch {
|
|
100
|
-
child_start [type="start"];
|
|
101
|
-
child_work [type="codergen", label="Implement in child context"];
|
|
102
|
-
child_exit [type="exit"];
|
|
103
|
-
|
|
104
|
-
child_start -> child_work;
|
|
105
|
-
child_work -> child_exit;
|
|
106
|
-
}
|
|
107
|
-
`;
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
// validateFixtures — test helper for AC1
|
|
110
|
-
// ---------------------------------------------------------------------------
|
|
111
|
-
/**
|
|
112
|
-
* Parse all three fixture DOT strings and throw if any parse fails.
|
|
113
|
-
* Returns the three parsed graphs for downstream assertions.
|
|
114
|
-
*/
|
|
115
|
-
export function validateFixtures() {
|
|
116
|
-
const outerGraph = parseGraph(ADVANCED_VALIDATION_DOT);
|
|
117
|
-
const bodyGraph = parseGraph(BODY_GRAPH_DOT);
|
|
118
|
-
const childGraph = parseGraph(CHILD_GRAPH_DOT);
|
|
119
|
-
return { outerGraph, bodyGraph, childGraph };
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=advanced-cross-project-validation.dot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-cross-project-validation.dot.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/advanced-cross-project-validation.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;CAStC,CAAA;AAED,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;CAkB7B,CAAA;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;CAS9B,CAAA;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAK9B,MAAM,UAAU,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AAC9C,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DOT fixture strings for LLM-evaluated edge integration tests.
|
|
3
|
-
* Story 50-11.
|
|
4
|
-
*
|
|
5
|
-
* The `condition` DOT edge attribute maps to `GraphEdge.condition`.
|
|
6
|
-
* Edges with `condition="llm:..."` are evaluated by `selectEdge` via the
|
|
7
|
-
* LLM evaluator (`evaluateLlmCondition`).
|
|
8
|
-
*
|
|
9
|
-
* Graph structure: start → decision → exit
|
|
10
|
-
* decision has two outgoing edges:
|
|
11
|
-
* 1. condition="llm:should we iterate?" — LLM-evaluated (to refine node)
|
|
12
|
-
* 2. label="done" — plain unconditional edge (to exit)
|
|
13
|
-
*
|
|
14
|
-
* The LLM edge is tested using `selectEdge` directly with a mock `llmCall`.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Decision graph with one LLM-evaluated edge and one plain forward edge.
|
|
18
|
-
* start → decision → exit (via done edge)
|
|
19
|
-
* → refine (via llm:should we iterate? edge)
|
|
20
|
-
* refine → exit
|
|
21
|
-
*/
|
|
22
|
-
export declare const LLM_EDGE_ROUTING_DOT = "\ndigraph llm_edge_test {\n start [type=\"start\"];\n decision [type=\"codergen\", label=\"Evaluate Progress\"];\n refine [type=\"codergen\", label=\"Refine\"];\n exit [type=\"exit\"];\n\n start -> decision;\n decision -> refine [condition=\"llm:should we iterate?\"];\n decision -> exit [label=\"done\"];\n refine -> exit;\n}\n";
|
|
23
|
-
/**
|
|
24
|
-
* Graph with multiple static label edges and one LLM edge.
|
|
25
|
-
* Used to verify that static label matching still works alongside LLM edges.
|
|
26
|
-
*/
|
|
27
|
-
export declare const MIXED_EDGE_TYPES_DOT = "\ndigraph mixed_edges {\n start [type=\"start\"];\n router [type=\"codergen\", label=\"Route Decision\"];\n path_a [type=\"codergen\", label=\"Path A\"];\n path_b [type=\"codergen\", label=\"Path B\"];\n exit [type=\"exit\"];\n\n start -> router;\n router -> path_a [label=\"approved\"];\n router -> path_b [label=\"revision_needed\"];\n router -> exit [condition=\"llm:is this complete?\"];\n path_a -> exit;\n path_b -> exit;\n}\n";
|
|
28
|
-
//# sourceMappingURL=llm-edge-routing.dot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-edge-routing.dot.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/llm-edge-routing.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,qWAYhC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gdAehC,CAAA"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DOT fixture strings for LLM-evaluated edge integration tests.
|
|
3
|
-
* Story 50-11.
|
|
4
|
-
*
|
|
5
|
-
* The `condition` DOT edge attribute maps to `GraphEdge.condition`.
|
|
6
|
-
* Edges with `condition="llm:..."` are evaluated by `selectEdge` via the
|
|
7
|
-
* LLM evaluator (`evaluateLlmCondition`).
|
|
8
|
-
*
|
|
9
|
-
* Graph structure: start → decision → exit
|
|
10
|
-
* decision has two outgoing edges:
|
|
11
|
-
* 1. condition="llm:should we iterate?" — LLM-evaluated (to refine node)
|
|
12
|
-
* 2. label="done" — plain unconditional edge (to exit)
|
|
13
|
-
*
|
|
14
|
-
* The LLM edge is tested using `selectEdge` directly with a mock `llmCall`.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Decision graph with one LLM-evaluated edge and one plain forward edge.
|
|
18
|
-
* start → decision → exit (via done edge)
|
|
19
|
-
* → refine (via llm:should we iterate? edge)
|
|
20
|
-
* refine → exit
|
|
21
|
-
*/
|
|
22
|
-
export const LLM_EDGE_ROUTING_DOT = `
|
|
23
|
-
digraph llm_edge_test {
|
|
24
|
-
start [type="start"];
|
|
25
|
-
decision [type="codergen", label="Evaluate Progress"];
|
|
26
|
-
refine [type="codergen", label="Refine"];
|
|
27
|
-
exit [type="exit"];
|
|
28
|
-
|
|
29
|
-
start -> decision;
|
|
30
|
-
decision -> refine [condition="llm:should we iterate?"];
|
|
31
|
-
decision -> exit [label="done"];
|
|
32
|
-
refine -> exit;
|
|
33
|
-
}
|
|
34
|
-
`;
|
|
35
|
-
/**
|
|
36
|
-
* Graph with multiple static label edges and one LLM edge.
|
|
37
|
-
* Used to verify that static label matching still works alongside LLM edges.
|
|
38
|
-
*/
|
|
39
|
-
export const MIXED_EDGE_TYPES_DOT = `
|
|
40
|
-
digraph mixed_edges {
|
|
41
|
-
start [type="start"];
|
|
42
|
-
router [type="codergen", label="Route Decision"];
|
|
43
|
-
path_a [type="codergen", label="Path A"];
|
|
44
|
-
path_b [type="codergen", label="Path B"];
|
|
45
|
-
exit [type="exit"];
|
|
46
|
-
|
|
47
|
-
start -> router;
|
|
48
|
-
router -> path_a [label="approved"];
|
|
49
|
-
router -> path_b [label="revision_needed"];
|
|
50
|
-
router -> exit [condition="llm:is this complete?"];
|
|
51
|
-
path_a -> exit;
|
|
52
|
-
path_b -> exit;
|
|
53
|
-
}
|
|
54
|
-
`;
|
|
55
|
-
//# sourceMappingURL=llm-edge-routing.dot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-edge-routing.dot.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/llm-edge-routing.dot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;CAYnC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;CAenC,CAAA"}
|