@agentic-qe/v3 3.0.0-alpha.5 → 3.0.0-alpha.7
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/assets/agents/v3/subagents/v3-qe-code-reviewer.md +339 -0
- package/assets/agents/v3/subagents/v3-qe-integration-reviewer.md +344 -0
- package/assets/agents/v3/subagents/v3-qe-performance-reviewer.md +351 -0
- package/assets/agents/v3/subagents/v3-qe-security-reviewer.md +374 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-green.md +334 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-red.md +329 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-refactor.md +361 -0
- package/assets/agents/v3/v3-qe-accessibility-auditor.md +266 -0
- package/assets/agents/v3/v3-qe-bdd-generator.md +279 -0
- package/assets/agents/v3/v3-qe-chaos-engineer.md +265 -0
- package/assets/agents/v3/v3-qe-code-complexity.md +298 -0
- package/assets/agents/v3/v3-qe-code-intelligence.md +262 -0
- package/assets/agents/v3/v3-qe-contract-validator.md +267 -0
- package/assets/agents/v3/v3-qe-coverage-specialist.md +227 -0
- package/assets/agents/v3/v3-qe-defect-predictor.md +251 -0
- package/assets/agents/v3/v3-qe-dependency-mapper.md +277 -0
- package/assets/agents/v3/v3-qe-deployment-advisor.md +275 -0
- package/assets/agents/v3/v3-qe-flaky-hunter.md +248 -0
- package/assets/agents/v3/v3-qe-fleet-commander.md +293 -0
- package/assets/agents/v3/v3-qe-gap-detector.md +260 -0
- package/assets/agents/v3/v3-qe-graphql-tester.md +308 -0
- package/assets/agents/v3/v3-qe-impact-analyzer.md +299 -0
- package/assets/agents/v3/v3-qe-integration-tester.md +238 -0
- package/assets/agents/v3/v3-qe-kg-builder.md +273 -0
- package/assets/agents/v3/v3-qe-learning-coordinator.md +226 -0
- package/assets/agents/v3/v3-qe-load-tester.md +280 -0
- package/assets/agents/v3/v3-qe-metrics-optimizer.md +300 -0
- package/assets/agents/v3/v3-qe-mutation-tester.md +301 -0
- package/assets/agents/v3/v3-qe-parallel-executor.md +240 -0
- package/assets/agents/v3/v3-qe-pattern-learner.md +271 -0
- package/assets/agents/v3/v3-qe-performance-tester.md +262 -0
- package/assets/agents/v3/v3-qe-property-tester.md +247 -0
- package/assets/agents/v3/v3-qe-quality-gate.md +218 -0
- package/assets/agents/v3/v3-qe-queen-coordinator.md +214 -0
- package/assets/agents/v3/v3-qe-qx-partner.md +313 -0
- package/assets/agents/v3/v3-qe-regression-analyzer.md +322 -0
- package/assets/agents/v3/v3-qe-requirements-validator.md +360 -0
- package/assets/agents/v3/v3-qe-responsive-tester.md +311 -0
- package/assets/agents/v3/v3-qe-retry-handler.md +256 -0
- package/assets/agents/v3/v3-qe-risk-assessor.md +273 -0
- package/assets/agents/v3/v3-qe-root-cause-analyzer.md +286 -0
- package/assets/agents/v3/v3-qe-security-auditor.md +299 -0
- package/assets/agents/v3/v3-qe-security-scanner.md +235 -0
- package/assets/agents/v3/v3-qe-tdd-specialist.md +239 -0
- package/assets/agents/v3/v3-qe-test-architect.md +233 -0
- package/assets/agents/v3/v3-qe-transfer-specialist.md +295 -0
- package/assets/agents/v3/v3-qe-visual-tester.md +232 -0
- package/assets/skills/accessibility-testing/SKILL.md +216 -0
- package/assets/skills/agentdb-advanced/SKILL.md +550 -0
- package/assets/skills/agentdb-learning/SKILL.md +545 -0
- package/assets/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/assets/skills/agentdb-optimization/SKILL.md +509 -0
- package/assets/skills/agentdb-vector-search/SKILL.md +339 -0
- package/assets/skills/agentic-jujutsu/SKILL.md +645 -0
- package/assets/skills/agentic-quality-engineering/SKILL.md +335 -0
- package/assets/skills/api-testing-patterns/SKILL.md +294 -0
- package/assets/skills/aqe-v2-v3-migration/skill.md +322 -0
- package/assets/skills/brutal-honesty-review/README.md +218 -0
- package/assets/skills/brutal-honesty-review/SKILL.md +235 -0
- package/assets/skills/brutal-honesty-review/resources/assessment-rubrics.md +295 -0
- package/assets/skills/brutal-honesty-review/resources/review-template.md +102 -0
- package/assets/skills/brutal-honesty-review/scripts/assess-code.sh +179 -0
- package/assets/skills/brutal-honesty-review/scripts/assess-tests.sh +223 -0
- package/assets/skills/bug-reporting-excellence/SKILL.md +225 -0
- package/assets/skills/chaos-engineering-resilience/SKILL.md +158 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/README.md +304 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/SKILL.md +315 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/microservice-pipeline.md +239 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/mobile-pipeline.md +375 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/monolith-pipeline.md +268 -0
- package/assets/skills/code-review-quality/SKILL.md +227 -0
- package/assets/skills/compatibility-testing/SKILL.md +205 -0
- package/assets/skills/compliance-testing/SKILL.md +225 -0
- package/assets/skills/consultancy-practices/SKILL.md +202 -0
- package/assets/skills/context-driven-testing/SKILL.md +196 -0
- package/assets/skills/contract-testing/SKILL.md +222 -0
- package/assets/skills/database-testing/SKILL.md +244 -0
- package/assets/skills/exploratory-testing-advanced/SKILL.md +201 -0
- package/assets/skills/flow-nexus-neural/SKILL.md +738 -0
- package/assets/skills/flow-nexus-platform/SKILL.md +1157 -0
- package/assets/skills/flow-nexus-swarm/SKILL.md +610 -0
- package/assets/skills/github-code-review/SKILL.md +1140 -0
- package/assets/skills/github-multi-repo/SKILL.md +874 -0
- package/assets/skills/github-project-management/SKILL.md +1277 -0
- package/assets/skills/github-release-management/SKILL.md +1081 -0
- package/assets/skills/github-workflow-automation/SKILL.md +1065 -0
- package/assets/skills/hive-mind-advanced/SKILL.md +712 -0
- package/assets/skills/holistic-testing-pact/SKILL.md +171 -0
- package/assets/skills/hooks-automation/SKILL.md +1201 -0
- package/assets/skills/localization-testing/SKILL.md +221 -0
- package/assets/skills/mobile-testing/SKILL.md +219 -0
- package/assets/skills/mutation-testing/SKILL.md +229 -0
- package/assets/skills/n8n-expression-testing/SKILL.md +434 -0
- package/assets/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
- package/assets/skills/n8n-security-testing/SKILL.md +599 -0
- package/assets/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
- package/assets/skills/pair-programming/SKILL.md +1202 -0
- package/assets/skills/performance-analysis/SKILL.md +563 -0
- package/assets/skills/performance-testing/SKILL.md +310 -0
- package/assets/skills/quality-metrics/SKILL.md +225 -0
- package/assets/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/assets/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/assets/skills/refactoring-patterns/SKILL.md +205 -0
- package/assets/skills/regression-testing/SKILL.md +227 -0
- package/assets/skills/risk-based-testing/SKILL.md +206 -0
- package/assets/skills/security-testing/SKILL.md +306 -0
- package/assets/skills/sherlock-review/SKILL.md +250 -0
- package/assets/skills/shift-left-testing/SKILL.md +225 -0
- package/assets/skills/shift-right-testing/SKILL.md +227 -0
- package/assets/skills/six-thinking-hats/README.md +190 -0
- package/assets/skills/six-thinking-hats/SKILL.md +280 -0
- package/assets/skills/six-thinking-hats/resources/examples/api-testing-example.md +345 -0
- package/assets/skills/six-thinking-hats/resources/templates/solo-session-template.md +167 -0
- package/assets/skills/six-thinking-hats/resources/templates/team-session-template.md +336 -0
- package/assets/skills/skill-builder/SKILL.md +910 -0
- package/assets/skills/sparc-methodology/SKILL.md +1115 -0
- package/assets/skills/stream-chain/SKILL.md +563 -0
- package/assets/skills/swarm-advanced/SKILL.md +973 -0
- package/assets/skills/swarm-orchestration/SKILL.md +179 -0
- package/assets/skills/tdd-london-chicago/SKILL.md +244 -0
- package/assets/skills/technical-writing/SKILL.md +178 -0
- package/assets/skills/test-automation-strategy/SKILL.md +230 -0
- package/assets/skills/test-data-management/SKILL.md +270 -0
- package/assets/skills/test-design-techniques/SKILL.md +244 -0
- package/assets/skills/test-environment-management/SKILL.md +243 -0
- package/assets/skills/test-reporting-analytics/SKILL.md +214 -0
- package/assets/skills/testability-scoring/README.md +71 -0
- package/assets/skills/testability-scoring/SKILL.md +346 -0
- package/assets/skills/testability-scoring/resources/templates/config.template.js +84 -0
- package/assets/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
- package/assets/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
- package/assets/skills/testability-scoring/scripts/run-assessment.sh +70 -0
- package/assets/skills/v3-qe-chaos-resilience/SKILL.md +238 -0
- package/assets/skills/v3-qe-code-intelligence/SKILL.md +209 -0
- package/assets/skills/v3-qe-contract-testing/SKILL.md +218 -0
- package/assets/skills/v3-qe-coverage-analysis/SKILL.md +187 -0
- package/assets/skills/v3-qe-defect-intelligence/SKILL.md +205 -0
- package/assets/skills/v3-qe-learning-optimization/SKILL.md +238 -0
- package/assets/skills/v3-qe-quality-assessment/SKILL.md +213 -0
- package/assets/skills/v3-qe-requirements-validation/SKILL.md +248 -0
- package/assets/skills/v3-qe-test-execution/SKILL.md +182 -0
- package/assets/skills/v3-qe-test-generation/SKILL.md +141 -0
- package/assets/skills/v3-qe-visual-accessibility/SKILL.md +242 -0
- package/assets/skills/verification-quality/SKILL.md +649 -0
- package/assets/skills/visual-testing-advanced/SKILL.md +219 -0
- package/assets/skills/xp-practices/SKILL.md +229 -0
- package/dist/cli/bundle.js +8 -8
- package/dist/init/agents-installer.js +4 -4
- package/dist/init/agents-installer.js.map +1 -1
- package/dist/init/skills-installer.js +4 -4
- package/dist/init/skills-installer.js.map +1 -1
- package/package.json +8 -2
- package/docs/analysis/V3-INIT-REQUIREMENTS-ANALYSIS.md +0 -352
- package/implementation/README.md +0 -90
- package/implementation/adrs/ADR-030-coherence-gated-quality-gates.md +0 -312
- package/implementation/adrs/ADR-031-strange-loop-self-awareness.md +0 -484
- package/implementation/adrs/ADR-032-time-crystal-scheduling.md +0 -530
- package/implementation/adrs/ADR-033-early-exit-testing.md +0 -634
- package/implementation/adrs/ADR-034-neural-topology-optimizer.md +0 -589
- package/implementation/adrs/ADR-035-causal-discovery.md +0 -610
- package/implementation/adrs/ADR-036-result-persistence.md +0 -326
- package/implementation/adrs/ADR-037-v3-qe-agent-naming.md +0 -105
- package/implementation/adrs/ADR-038-v3-qe-memory-unification.md +0 -154
- package/implementation/adrs/ADR-039-v3-qe-mcp-optimization.md +0 -179
- package/implementation/adrs/ADR-040-v3-qe-agentic-flow-integration.md +0 -240
- package/implementation/adrs/ADR-041-v3-qe-cli-enhancement.md +0 -296
- package/implementation/adrs/ADR-042-v3-qe-token-tracking-integration.md +0 -517
- package/implementation/adrs/v3-adrs.md +0 -2783
- package/implementation/planning/AQE-V3-MASTER-PLAN.md +0 -815
- package/security-scan-report-2026-01-11.md +0 -410
- package/security-verification-report-2026-01-11.md +0 -278
- package/src/benchmarks/performance-benchmarks.ts +0 -646
- package/src/benchmarks/run-benchmarks.ts +0 -324
- package/src/causal-discovery/causal-graph.ts +0 -450
- package/src/causal-discovery/discovery-engine.ts +0 -438
- package/src/causal-discovery/index.ts +0 -117
- package/src/causal-discovery/types.ts +0 -456
- package/src/causal-discovery/weight-matrix.ts +0 -453
- package/src/cli/commands/qe-tools.ts +0 -634
- package/src/cli/index.ts +0 -1976
- package/src/compatibility/agent-mapper.ts +0 -291
- package/src/compatibility/cli-adapter.ts +0 -277
- package/src/compatibility/config-migrator.ts +0 -334
- package/src/compatibility/index.ts +0 -112
- package/src/compatibility/mcp-adapter.ts +0 -248
- package/src/compatibility/types.ts +0 -156
- package/src/coordination/claims/claim-repository.ts +0 -636
- package/src/coordination/claims/claim-service.ts +0 -675
- package/src/coordination/claims/handoff-manager.ts +0 -535
- package/src/coordination/claims/index.ts +0 -276
- package/src/coordination/claims/interfaces.ts +0 -687
- package/src/coordination/claims/work-stealing.ts +0 -436
- package/src/coordination/cross-domain-router.ts +0 -492
- package/src/coordination/index.ts +0 -127
- package/src/coordination/interfaces.ts +0 -691
- package/src/coordination/protocol-executor.ts +0 -760
- package/src/coordination/protocols/code-intelligence-index.ts +0 -855
- package/src/coordination/protocols/defect-investigation.ts +0 -1184
- package/src/coordination/protocols/index.ts +0 -11
- package/src/coordination/protocols/learning-consolidation.ts +0 -1181
- package/src/coordination/protocols/morning-sync.ts +0 -1055
- package/src/coordination/protocols/quality-gate.ts +0 -1566
- package/src/coordination/protocols/security-audit.ts +0 -1587
- package/src/coordination/queen-coordinator.ts +0 -1176
- package/src/coordination/result-saver.ts +0 -780
- package/src/coordination/task-executor.ts +0 -1146
- package/src/coordination/workflow-orchestrator.ts +0 -1917
- package/src/domains/chaos-resilience/coordinator.ts +0 -1032
- package/src/domains/chaos-resilience/index.ts +0 -143
- package/src/domains/chaos-resilience/interfaces.ts +0 -659
- package/src/domains/chaos-resilience/plugin.ts +0 -691
- package/src/domains/chaos-resilience/services/chaos-engineer.ts +0 -1097
- package/src/domains/chaos-resilience/services/index.ts +0 -19
- package/src/domains/chaos-resilience/services/load-tester.ts +0 -799
- package/src/domains/chaos-resilience/services/performance-profiler.ts +0 -792
- package/src/domains/code-intelligence/coordinator.ts +0 -631
- package/src/domains/code-intelligence/index.ts +0 -86
- package/src/domains/code-intelligence/interfaces.ts +0 -162
- package/src/domains/code-intelligence/plugin.ts +0 -451
- package/src/domains/code-intelligence/services/impact-analyzer.ts +0 -567
- package/src/domains/code-intelligence/services/index.ts +0 -26
- package/src/domains/code-intelligence/services/knowledge-graph.ts +0 -1067
- package/src/domains/code-intelligence/services/semantic-analyzer.ts +0 -901
- package/src/domains/contract-testing/coordinator.ts +0 -1038
- package/src/domains/contract-testing/index.ts +0 -122
- package/src/domains/contract-testing/interfaces.ts +0 -458
- package/src/domains/contract-testing/plugin.ts +0 -746
- package/src/domains/contract-testing/services/api-compatibility.ts +0 -748
- package/src/domains/contract-testing/services/contract-validator.ts +0 -1700
- package/src/domains/contract-testing/services/index.ts +0 -19
- package/src/domains/contract-testing/services/schema-validator.ts +0 -1102
- package/src/domains/coverage-analysis/coordinator.ts +0 -485
- package/src/domains/coverage-analysis/index.ts +0 -114
- package/src/domains/coverage-analysis/interfaces.ts +0 -142
- package/src/domains/coverage-analysis/plugin.ts +0 -172
- package/src/domains/coverage-analysis/services/coverage-analyzer.ts +0 -449
- package/src/domains/coverage-analysis/services/coverage-embedder.ts +0 -733
- package/src/domains/coverage-analysis/services/coverage-parser.ts +0 -753
- package/src/domains/coverage-analysis/services/gap-detector.ts +0 -592
- package/src/domains/coverage-analysis/services/hnsw-index.ts +0 -728
- package/src/domains/coverage-analysis/services/index.ts +0 -61
- package/src/domains/coverage-analysis/services/risk-scorer.ts +0 -540
- package/src/domains/coverage-analysis/services/sublinear-analyzer.ts +0 -747
- package/src/domains/defect-intelligence/coordinator.ts +0 -635
- package/src/domains/defect-intelligence/index.ts +0 -83
- package/src/domains/defect-intelligence/interfaces.ts +0 -152
- package/src/domains/defect-intelligence/plugin.ts +0 -483
- package/src/domains/defect-intelligence/services/causal-root-cause-analyzer.ts +0 -494
- package/src/domains/defect-intelligence/services/defect-predictor.ts +0 -852
- package/src/domains/defect-intelligence/services/index.ts +0 -37
- package/src/domains/defect-intelligence/services/pattern-learner.ts +0 -738
- package/src/domains/defect-intelligence/services/root-cause-analyzer.ts +0 -637
- package/src/domains/domain-interface.ts +0 -77
- package/src/domains/index.ts +0 -23
- package/src/domains/learning-optimization/coordinator.ts +0 -1215
- package/src/domains/learning-optimization/index.ts +0 -127
- package/src/domains/learning-optimization/interfaces.ts +0 -570
- package/src/domains/learning-optimization/plugin.ts +0 -851
- package/src/domains/learning-optimization/services/index.ts +0 -29
- package/src/domains/learning-optimization/services/learning-coordinator.ts +0 -972
- package/src/domains/learning-optimization/services/metrics-optimizer.ts +0 -915
- package/src/domains/learning-optimization/services/production-intel.ts +0 -971
- package/src/domains/learning-optimization/services/transfer-specialist.ts +0 -723
- package/src/domains/quality-assessment/coherence/gate-controller.ts +0 -549
- package/src/domains/quality-assessment/coherence/index.ts +0 -211
- package/src/domains/quality-assessment/coherence/lambda-calculator.ts +0 -384
- package/src/domains/quality-assessment/coherence/partition-detector.ts +0 -469
- package/src/domains/quality-assessment/coherence/types.ts +0 -384
- package/src/domains/quality-assessment/coordinator.ts +0 -605
- package/src/domains/quality-assessment/index.ts +0 -97
- package/src/domains/quality-assessment/interfaces.ts +0 -152
- package/src/domains/quality-assessment/plugin.ts +0 -496
- package/src/domains/quality-assessment/services/coherence-gate.ts +0 -358
- package/src/domains/quality-assessment/services/deployment-advisor.ts +0 -571
- package/src/domains/quality-assessment/services/index.ts +0 -34
- package/src/domains/quality-assessment/services/quality-analyzer.ts +0 -670
- package/src/domains/quality-assessment/services/quality-gate.ts +0 -384
- package/src/domains/requirements-validation/coordinator.ts +0 -812
- package/src/domains/requirements-validation/index.ts +0 -92
- package/src/domains/requirements-validation/interfaces.ts +0 -303
- package/src/domains/requirements-validation/plugin.ts +0 -576
- package/src/domains/requirements-validation/services/bdd-scenario-writer.ts +0 -676
- package/src/domains/requirements-validation/services/index.ts +0 -20
- package/src/domains/requirements-validation/services/requirements-validator.ts +0 -559
- package/src/domains/requirements-validation/services/testability-scorer.ts +0 -639
- package/src/domains/security-compliance/coordinator.ts +0 -757
- package/src/domains/security-compliance/index.ts +0 -120
- package/src/domains/security-compliance/interfaces.ts +0 -434
- package/src/domains/security-compliance/plugin.ts +0 -509
- package/src/domains/security-compliance/services/compliance-validator.ts +0 -1226
- package/src/domains/security-compliance/services/index.ts +0 -31
- package/src/domains/security-compliance/services/security-auditor.ts +0 -2227
- package/src/domains/security-compliance/services/security-scanner.ts +0 -2354
- package/src/domains/security-compliance/services/semgrep-integration.ts +0 -289
- package/src/domains/test-execution/coordinator.ts +0 -426
- package/src/domains/test-execution/index.ts +0 -76
- package/src/domains/test-execution/interfaces.ts +0 -119
- package/src/domains/test-execution/plugin.ts +0 -208
- package/src/domains/test-execution/services/flaky-detector.ts +0 -1240
- package/src/domains/test-execution/services/index.ts +0 -8
- package/src/domains/test-execution/services/retry-handler.ts +0 -820
- package/src/domains/test-execution/services/test-executor.ts +0 -885
- package/src/domains/test-generation/coordinator.ts +0 -656
- package/src/domains/test-generation/index.ts +0 -77
- package/src/domains/test-generation/interfaces.ts +0 -118
- package/src/domains/test-generation/plugin.ts +0 -397
- package/src/domains/test-generation/services/index.ts +0 -23
- package/src/domains/test-generation/services/pattern-matcher.ts +0 -1725
- package/src/domains/test-generation/services/test-generator.ts +0 -2750
- package/src/domains/visual-accessibility/coordinator.ts +0 -860
- package/src/domains/visual-accessibility/index.ts +0 -116
- package/src/domains/visual-accessibility/interfaces.ts +0 -435
- package/src/domains/visual-accessibility/plugin.ts +0 -568
- package/src/domains/visual-accessibility/services/accessibility-tester.ts +0 -982
- package/src/domains/visual-accessibility/services/axe-core-audit.ts +0 -630
- package/src/domains/visual-accessibility/services/index.ts +0 -28
- package/src/domains/visual-accessibility/services/responsive-tester.ts +0 -934
- package/src/domains/visual-accessibility/services/visual-tester.ts +0 -458
- package/src/early-exit/early-exit-controller.ts +0 -490
- package/src/early-exit/early-exit-decision.ts +0 -391
- package/src/early-exit/index.ts +0 -115
- package/src/early-exit/quality-signal.ts +0 -389
- package/src/early-exit/speculative-executor.ts +0 -505
- package/src/early-exit/types.ts +0 -407
- package/src/feedback/coverage-learner.ts +0 -456
- package/src/feedback/feedback-loop.ts +0 -426
- package/src/feedback/index.ts +0 -72
- package/src/feedback/pattern-promotion.ts +0 -373
- package/src/feedback/quality-score-calculator.ts +0 -334
- package/src/feedback/test-outcome-tracker.ts +0 -450
- package/src/feedback/types.ts +0 -497
- package/src/index.ts +0 -224
- package/src/init/agents-installer.ts +0 -536
- package/src/init/index.ts +0 -80
- package/src/init/init-wizard.ts +0 -1061
- package/src/init/project-analyzer.ts +0 -696
- package/src/init/self-configurator.ts +0 -488
- package/src/init/skills-installer.ts +0 -467
- package/src/init/types.ts +0 -432
- package/src/integrations/ruvector/ast-complexity.ts +0 -470
- package/src/integrations/ruvector/coverage-router.ts +0 -594
- package/src/integrations/ruvector/diff-risk-classifier.ts +0 -759
- package/src/integrations/ruvector/fallback.ts +0 -942
- package/src/integrations/ruvector/graph-boundaries.ts +0 -809
- package/src/integrations/ruvector/index.ts +0 -363
- package/src/integrations/ruvector/interfaces.ts +0 -609
- package/src/integrations/ruvector/q-learning-router.ts +0 -550
- package/src/kernel/agent-coordinator.ts +0 -165
- package/src/kernel/agentdb-backend.ts +0 -504
- package/src/kernel/event-bus.ts +0 -129
- package/src/kernel/hybrid-backend.ts +0 -538
- package/src/kernel/index.ts +0 -28
- package/src/kernel/interfaces.ts +0 -257
- package/src/kernel/kernel.ts +0 -285
- package/src/kernel/memory-backend.ts +0 -169
- package/src/kernel/memory-factory.ts +0 -293
- package/src/kernel/plugin-loader.ts +0 -179
- package/src/learning/index.ts +0 -219
- package/src/learning/pattern-store.ts +0 -990
- package/src/learning/qe-guidance.ts +0 -832
- package/src/learning/qe-hooks.ts +0 -644
- package/src/learning/qe-patterns.ts +0 -449
- package/src/learning/qe-reasoning-bank.ts +0 -951
- package/src/learning/real-embeddings.ts +0 -277
- package/src/learning/real-qe-reasoning-bank.ts +0 -833
- package/src/learning/sqlite-persistence.ts +0 -554
- package/src/mcp/entry.ts +0 -59
- package/src/mcp/handlers/agent-handlers.ts +0 -285
- package/src/mcp/handlers/core-handlers.ts +0 -317
- package/src/mcp/handlers/domain-handlers.ts +0 -1444
- package/src/mcp/handlers/index.ts +0 -57
- package/src/mcp/handlers/memory-handlers.ts +0 -338
- package/src/mcp/handlers/task-handlers.ts +0 -363
- package/src/mcp/index.ts +0 -30
- package/src/mcp/metrics/index.ts +0 -14
- package/src/mcp/metrics/metrics-collector.ts +0 -503
- package/src/mcp/protocol-server.ts +0 -752
- package/src/mcp/security/cve-prevention.ts +0 -742
- package/src/mcp/security/index.ts +0 -356
- package/src/mcp/security/oauth21-provider.ts +0 -821
- package/src/mcp/security/rate-limiter.ts +0 -615
- package/src/mcp/security/sampling-server.ts +0 -662
- package/src/mcp/security/schema-validator.ts +0 -855
- package/src/mcp/server.ts +0 -657
- package/src/mcp/tool-registry.ts +0 -391
- package/src/mcp/tools/base.ts +0 -399
- package/src/mcp/tools/chaos-resilience/inject.ts +0 -699
- package/src/mcp/tools/code-intelligence/analyze.ts +0 -745
- package/src/mcp/tools/contract-testing/validate.ts +0 -708
- package/src/mcp/tools/coverage-analysis/index.ts +0 -770
- package/src/mcp/tools/defect-intelligence/predict.ts +0 -466
- package/src/mcp/tools/index.ts +0 -214
- package/src/mcp/tools/learning-optimization/optimize.ts +0 -772
- package/src/mcp/tools/quality-assessment/evaluate.ts +0 -385
- package/src/mcp/tools/registry.ts +0 -248
- package/src/mcp/tools/requirements-validation/validate.ts +0 -394
- package/src/mcp/tools/security-compliance/scan.ts +0 -365
- package/src/mcp/tools/test-execution/execute.ts +0 -291
- package/src/mcp/tools/test-generation/generate.ts +0 -544
- package/src/mcp/tools/visual-accessibility/index.ts +0 -791
- package/src/mcp/transport/index.ts +0 -31
- package/src/mcp/transport/stdio.ts +0 -318
- package/src/mcp/types.ts +0 -543
- package/src/neural-optimizer/index.ts +0 -111
- package/src/neural-optimizer/replay-buffer.ts +0 -455
- package/src/neural-optimizer/swarm-topology.ts +0 -508
- package/src/neural-optimizer/topology-optimizer.ts +0 -828
- package/src/neural-optimizer/types.ts +0 -481
- package/src/neural-optimizer/value-network.ts +0 -351
- package/src/optimization/auto-tuner.ts +0 -817
- package/src/optimization/index.ts +0 -77
- package/src/optimization/metric-collectors.ts +0 -474
- package/src/optimization/qe-workers.ts +0 -704
- package/src/optimization/tuning-algorithm.ts +0 -401
- package/src/optimization/types.ts +0 -314
- package/src/routing/index.ts +0 -51
- package/src/routing/qe-agent-registry.ts +0 -963
- package/src/routing/qe-task-router.ts +0 -564
- package/src/routing/routing-feedback.ts +0 -365
- package/src/routing/types.ts +0 -406
- package/src/shared/embeddings/embedding-cache.ts +0 -157
- package/src/shared/embeddings/index.ts +0 -50
- package/src/shared/embeddings/nomic-embedder.ts +0 -404
- package/src/shared/embeddings/ollama-client.ts +0 -195
- package/src/shared/embeddings/types.ts +0 -147
- package/src/shared/entities/agent.ts +0 -141
- package/src/shared/entities/base-entity.ts +0 -79
- package/src/shared/entities/index.ts +0 -6
- package/src/shared/events/domain-events.ts +0 -259
- package/src/shared/events/index.ts +0 -5
- package/src/shared/git/git-analyzer.ts +0 -656
- package/src/shared/git/index.ts +0 -11
- package/src/shared/http/http-client.ts +0 -420
- package/src/shared/http/index.ts +0 -13
- package/src/shared/index.ts +0 -41
- package/src/shared/io/file-reader.ts +0 -525
- package/src/shared/io/index.ts +0 -25
- package/src/shared/llm/cache.ts +0 -473
- package/src/shared/llm/circuit-breaker.ts +0 -369
- package/src/shared/llm/cost-tracker.ts +0 -460
- package/src/shared/llm/index.ts +0 -140
- package/src/shared/llm/interfaces.ts +0 -629
- package/src/shared/llm/provider-manager.ts +0 -685
- package/src/shared/llm/providers/claude.ts +0 -524
- package/src/shared/llm/providers/index.ts +0 -8
- package/src/shared/llm/providers/ollama.ts +0 -575
- package/src/shared/llm/providers/openai.ts +0 -609
- package/src/shared/metrics/code-metrics.ts +0 -520
- package/src/shared/metrics/index.ts +0 -23
- package/src/shared/metrics/system-metrics.ts +0 -353
- package/src/shared/parsers/index.ts +0 -6
- package/src/shared/parsers/typescript-parser.ts +0 -841
- package/src/shared/security/compliance-patterns.ts +0 -666
- package/src/shared/security/index.ts +0 -30
- package/src/shared/security/osv-client.ts +0 -468
- package/src/shared/types/index.ts +0 -150
- package/src/shared/value-objects/index.ts +0 -273
- package/src/strange-loop/healing-controller.ts +0 -833
- package/src/strange-loop/index.ts +0 -104
- package/src/strange-loop/self-model.ts +0 -494
- package/src/strange-loop/strange-loop.ts +0 -446
- package/src/strange-loop/swarm-observer.ts +0 -448
- package/src/strange-loop/topology-analyzer.ts +0 -565
- package/src/strange-loop/types.ts +0 -640
- package/src/time-crystal/default-phases.ts +0 -520
- package/src/time-crystal/index.ts +0 -164
- package/src/time-crystal/oscillator.ts +0 -425
- package/src/time-crystal/phase-executor.ts +0 -521
- package/src/time-crystal/scheduler.ts +0 -1025
- package/src/time-crystal/test-runner.ts +0 -787
- package/src/time-crystal/types.ts +0 -421
- package/src/workers/base-worker.ts +0 -304
- package/src/workers/daemon.ts +0 -264
- package/src/workers/index.ts +0 -119
- package/src/workers/interfaces.ts +0 -393
- package/src/workers/worker-manager.ts +0 -424
- package/src/workers/workers/compliance-checker.ts +0 -445
- package/src/workers/workers/coverage-tracker.ts +0 -344
- package/src/workers/workers/defect-predictor.ts +0 -375
- package/src/workers/workers/flaky-detector.ts +0 -390
- package/src/workers/workers/index.ts +0 -17
- package/src/workers/workers/learning-consolidation.ts +0 -442
- package/src/workers/workers/performance-baseline.ts +0 -434
- package/src/workers/workers/quality-gate.ts +0 -419
- package/src/workers/workers/regression-monitor.ts +0 -357
- package/src/workers/workers/security-scan.ts +0 -349
- package/src/workers/workers/test-health.ts +0 -359
- package/tests/integration/code-intelligence/knowledge-graph-real.test.ts +0 -540
- package/tests/integration/coordination/cross-domain-router.test.ts +0 -403
- package/tests/integration/coordination/protocol-executor.test.ts +0 -454
- package/tests/integration/coordination/workflow-orchestrator.test.ts +0 -418
- package/tests/integration/feedback/feedback-loop-integration.test.ts +0 -560
- package/tests/integration/migration/v2-to-v3-migration.test.ts +0 -471
- package/tests/integration/parsers/typescript-parser.test.ts +0 -463
- package/tests/integration/security/vulnerability-detection.test.ts +0 -628
- package/tests/integration/test-execution/coordinator.test.ts +0 -410
- package/tests/integration/test-generation/coordinator.test.ts +0 -361
- package/tests/mocks/index.ts +0 -228
- package/tests/time-crystal/default-phases.test.ts +0 -476
- package/tests/time-crystal/oscillator.test.ts +0 -541
- package/tests/time-crystal/phase-executor.test.ts +0 -653
- package/tests/time-crystal/scheduler.test.ts +0 -626
- package/tests/time-crystal/test-runner.test.ts +0 -594
- package/tests/unit/causal-discovery/causal-graph.test.ts +0 -504
- package/tests/unit/causal-discovery/causal-root-cause-analyzer.test.ts +0 -347
- package/tests/unit/causal-discovery/discovery-engine.test.ts +0 -435
- package/tests/unit/causal-discovery/weight-matrix.test.ts +0 -328
- package/tests/unit/cli/cli.test.ts +0 -341
- package/tests/unit/cli/commands.test.ts +0 -414
- package/tests/unit/cli/init-command.test.ts +0 -274
- package/tests/unit/cli/migrate-command.test.ts +0 -396
- package/tests/unit/coordination/claims/claim-service.test.ts +0 -949
- package/tests/unit/coordination/claims/handoff-manager.test.ts +0 -773
- package/tests/unit/coordination/claims/work-stealing.test.ts +0 -492
- package/tests/unit/coordination/queen-coordinator.test.ts +0 -966
- package/tests/unit/coordination/result-saver.test.ts +0 -653
- package/tests/unit/coordination/task-executor.test.ts +0 -810
- package/tests/unit/domains/chaos-resilience/chaos-engineer.test.ts +0 -484
- package/tests/unit/domains/chaos-resilience/load-tester.test.ts +0 -559
- package/tests/unit/domains/chaos-resilience/performance-profiler.test.ts +0 -490
- package/tests/unit/domains/code-intelligence/impact-analyzer.test.ts +0 -560
- package/tests/unit/domains/code-intelligence/knowledge-graph.test.ts +0 -460
- package/tests/unit/domains/code-intelligence/semantic-analyzer.test.ts +0 -584
- package/tests/unit/domains/contract-testing/api-compatibility.test.ts +0 -483
- package/tests/unit/domains/contract-testing/contract-validator.test.ts +0 -370
- package/tests/unit/domains/contract-testing/schema-validator.test.ts +0 -610
- package/tests/unit/domains/coverage-analysis/coverage-embedder.test.ts +0 -298
- package/tests/unit/domains/coverage-analysis/hnsw-index.test.ts +0 -292
- package/tests/unit/domains/coverage-analysis/sublinear-analyzer.test.ts +0 -506
- package/tests/unit/domains/defect-intelligence/defect-predictor.test.ts +0 -370
- package/tests/unit/domains/defect-intelligence/pattern-learner.test.ts +0 -546
- package/tests/unit/domains/defect-intelligence/root-cause-analyzer.test.ts +0 -534
- package/tests/unit/domains/learning-optimization/learning-coordinator.test.ts +0 -541
- package/tests/unit/domains/learning-optimization/metrics-optimizer.test.ts +0 -552
- package/tests/unit/domains/learning-optimization/production-intel.test.ts +0 -589
- package/tests/unit/domains/learning-optimization/transfer-specialist.test.ts +0 -453
- package/tests/unit/domains/quality-assessment/coherence-gate.test.ts +0 -1006
- package/tests/unit/domains/quality-assessment/deployment-advisor.test.ts +0 -515
- package/tests/unit/domains/quality-assessment/quality-analyzer.test.ts +0 -401
- package/tests/unit/domains/quality-assessment/quality-gate.test.ts +0 -324
- package/tests/unit/domains/requirements-validation/bdd-scenario-writer.test.ts +0 -479
- package/tests/unit/domains/requirements-validation/requirements-validator.test.ts +0 -452
- package/tests/unit/domains/requirements-validation/testability-scorer.test.ts +0 -505
- package/tests/unit/domains/security-compliance/compliance-validator.test.ts +0 -500
- package/tests/unit/domains/security-compliance/security-auditor.test.ts +0 -498
- package/tests/unit/domains/security-compliance/security-scanner.test.ts +0 -412
- package/tests/unit/domains/visual-accessibility/accessibility-tester.test.ts +0 -432
- package/tests/unit/domains/visual-accessibility/responsive-tester.test.ts +0 -506
- package/tests/unit/domains/visual-accessibility/visual-tester.test.ts +0 -412
- package/tests/unit/early-exit/early-exit-controller.test.ts +0 -548
- package/tests/unit/early-exit/early-exit-decision.test.ts +0 -617
- package/tests/unit/early-exit/index.test.ts +0 -254
- package/tests/unit/early-exit/quality-signal.test.ts +0 -589
- package/tests/unit/early-exit/speculative-executor.test.ts +0 -453
- package/tests/unit/feedback/coverage-learner.test.ts +0 -288
- package/tests/unit/feedback/feedback-loop.test.ts +0 -458
- package/tests/unit/feedback/pattern-promotion.test.ts +0 -390
- package/tests/unit/feedback/quality-score-calculator.test.ts +0 -364
- package/tests/unit/feedback/test-outcome-tracker.test.ts +0 -243
- package/tests/unit/init/init-wizard.test.ts +0 -881
- package/tests/unit/init/project-analyzer.test.ts +0 -807
- package/tests/unit/init/self-configurator.test.ts +0 -493
- package/tests/unit/integrations/ruvector/ast-complexity.test.ts +0 -240
- package/tests/unit/integrations/ruvector/coverage-router.test.ts +0 -366
- package/tests/unit/integrations/ruvector/diff-risk-classifier.test.ts +0 -340
- package/tests/unit/integrations/ruvector/graph-boundaries.test.ts +0 -355
- package/tests/unit/integrations/ruvector/q-learning-router.test.ts +0 -314
- package/tests/unit/kernel/agent-coordinator.test.ts +0 -220
- package/tests/unit/kernel/event-bus.test.ts +0 -197
- package/tests/unit/learning/qe-reasoning-bank.test.ts +0 -666
- package/tests/unit/learning/real-qe-reasoning-bank.benchmark.test.ts +0 -415
- package/tests/unit/mcp/mcp-server.test.ts +0 -544
- package/tests/unit/mcp/metrics/metrics-collector.test.ts +0 -340
- package/tests/unit/mcp/security/cve-prevention.test.ts +0 -512
- package/tests/unit/mcp/security/oauth21-provider.test.ts +0 -624
- package/tests/unit/mcp/security/rate-limiter.test.ts +0 -410
- package/tests/unit/mcp/security/sampling-server.test.ts +0 -420
- package/tests/unit/mcp/security/schema-validator.test.ts +0 -494
- package/tests/unit/mcp/tools/base.test.ts +0 -336
- package/tests/unit/mcp/tools/domain-tools.test.ts +0 -759
- package/tests/unit/mcp/tools/registry.test.ts +0 -240
- package/tests/unit/neural-optimizer/replay-buffer.test.ts +0 -403
- package/tests/unit/neural-optimizer/swarm-topology.test.ts +0 -473
- package/tests/unit/neural-optimizer/topology-optimizer.test.ts +0 -595
- package/tests/unit/neural-optimizer/value-network.test.ts +0 -343
- package/tests/unit/optimization/auto-tuner.test.ts +0 -506
- package/tests/unit/optimization/metric-collectors.test.ts +0 -352
- package/tests/unit/optimization/qe-workers.test.ts +0 -407
- package/tests/unit/optimization/tuning-algorithm.test.ts +0 -467
- package/tests/unit/routing/qe-agent-registry.test.ts +0 -229
- package/tests/unit/routing/qe-task-router.test.ts +0 -390
- package/tests/unit/routing/routing-feedback.test.ts +0 -339
- package/tests/unit/shared/embeddings/nomic-embedder.test.ts +0 -419
- package/tests/unit/shared/http/http-client.test.ts +0 -719
- package/tests/unit/shared/io/file-reader.test.ts +0 -511
- package/tests/unit/shared/llm/cache.test.ts +0 -391
- package/tests/unit/shared/llm/circuit-breaker.test.ts +0 -293
- package/tests/unit/shared/llm/cost-tracker.test.ts +0 -431
- package/tests/unit/shared/llm/provider-manager.test.ts +0 -550
- package/tests/unit/shared/llm/providers.test.ts +0 -532
- package/tests/unit/shared/parsers/typescript-parser.test.ts +0 -693
- package/tests/unit/shared/value-objects.test.ts +0 -184
- package/tests/unit/strange-loop/strange-loop.test.ts +0 -1170
- package/tests/unit/workers/base-worker.test.ts +0 -341
- package/tests/unit/workers/daemon.test.ts +0 -291
- package/tests/unit/workers/worker-manager.test.ts +0 -284
- package/tsconfig.json +0 -32
- package/vitest.config.ts +0 -27
|
@@ -1,1025 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agentic QE v3 - Time Crystal Scheduler
|
|
3
|
-
* ADR-032: Kuramoto CPG oscillators for self-sustaining scheduling
|
|
4
|
-
*
|
|
5
|
-
* The Time Crystal Scheduler uses coupled oscillators (Central Pattern Generator)
|
|
6
|
-
* to create emergent, self-sustaining test execution schedules without external timing.
|
|
7
|
-
*
|
|
8
|
-
* Key features:
|
|
9
|
-
* - Kuramoto model for phase synchronization
|
|
10
|
-
* - Winner-take-all phase selection
|
|
11
|
-
* - Quality-gated phase transitions
|
|
12
|
-
* - Self-repair on quality failures
|
|
13
|
-
* - Crystal stability detection
|
|
14
|
-
*
|
|
15
|
-
* REAL TEST EXECUTION:
|
|
16
|
-
* For production use, provide a TestRunner via SchedulerOptions.testRunner:
|
|
17
|
-
* ```typescript
|
|
18
|
-
* import { VitestTestRunner } from './test-runner';
|
|
19
|
-
*
|
|
20
|
-
* const scheduler = new TimeCrystalScheduler(phases, config, {
|
|
21
|
-
* testRunner: new VitestTestRunner({ cwd: '/path/to/project' })
|
|
22
|
-
* });
|
|
23
|
-
* ```
|
|
24
|
-
*
|
|
25
|
-
* Without a TestRunner, the scheduler uses MOCK MODE with deterministic fake data.
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
import {
|
|
29
|
-
CPGConfig,
|
|
30
|
-
DEFAULT_CPG_CONFIG,
|
|
31
|
-
PhaseTransition,
|
|
32
|
-
PhaseResult,
|
|
33
|
-
TestPhase,
|
|
34
|
-
SchedulerState,
|
|
35
|
-
SchedulerOptions,
|
|
36
|
-
DEFAULT_SCHEDULER_OPTIONS,
|
|
37
|
-
CrystalHealth,
|
|
38
|
-
CrystalHealthStatus,
|
|
39
|
-
CrystalIssue,
|
|
40
|
-
TimeCrystalEvent,
|
|
41
|
-
} from './types';
|
|
42
|
-
import {
|
|
43
|
-
OscillatorNeuron,
|
|
44
|
-
computeOrderParameter,
|
|
45
|
-
createEvenlySpacedOscillators,
|
|
46
|
-
buildRingCouplingMatrix,
|
|
47
|
-
} from './oscillator';
|
|
48
|
-
import type { TestRunner, TestRunnerOptions, TestRunnerResult } from './phase-executor';
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Event emitter type for the scheduler
|
|
52
|
-
*/
|
|
53
|
-
export type TimeCrystalEventHandler = (event: TimeCrystalEvent) => void;
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Time Crystal Scheduler - CPG Controller for Test Execution
|
|
57
|
-
*
|
|
58
|
-
* Creates a self-sustaining schedule by using coupled oscillators that
|
|
59
|
-
* naturally cycle through test phases without external timing signals.
|
|
60
|
-
*/
|
|
61
|
-
export class TimeCrystalScheduler {
|
|
62
|
-
private readonly phases: TestPhase[];
|
|
63
|
-
private readonly config: CPGConfig;
|
|
64
|
-
private readonly options: SchedulerOptions;
|
|
65
|
-
|
|
66
|
-
private oscillators!: OscillatorNeuron[];
|
|
67
|
-
private coupling!: number[][];
|
|
68
|
-
private currentPhase: number = 0;
|
|
69
|
-
private time: number = 0;
|
|
70
|
-
private phaseHistory: number[] = [];
|
|
71
|
-
private running: boolean = false;
|
|
72
|
-
private paused: boolean = false;
|
|
73
|
-
|
|
74
|
-
// Phase tracking
|
|
75
|
-
private phaseStartTime: Map<number, number> = new Map();
|
|
76
|
-
private phaseResults: Map<number, PhaseResult[]> = new Map();
|
|
77
|
-
private cycleCount: number = 0;
|
|
78
|
-
private lastCycleStartTime: number = 0;
|
|
79
|
-
private cycleDurations: number[] = [];
|
|
80
|
-
|
|
81
|
-
// Event handlers
|
|
82
|
-
private eventHandlers: TimeCrystalEventHandler[] = [];
|
|
83
|
-
|
|
84
|
-
// Quality tracking
|
|
85
|
-
private qualityFailures: number = 0;
|
|
86
|
-
private consecutiveFailures: number = 0;
|
|
87
|
-
|
|
88
|
-
// Test execution
|
|
89
|
-
private readonly testRunner?: TestRunner;
|
|
90
|
-
private readonly mockMode: boolean;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Create a new Time Crystal Scheduler
|
|
94
|
-
*
|
|
95
|
-
* @param phases - Test execution phases
|
|
96
|
-
* @param config - CPG configuration (optional, uses DEFAULT_CPG_CONFIG)
|
|
97
|
-
* @param options - Scheduler options (include testRunner for REAL test execution)
|
|
98
|
-
*/
|
|
99
|
-
constructor(
|
|
100
|
-
phases: TestPhase[],
|
|
101
|
-
config: CPGConfig = DEFAULT_CPG_CONFIG,
|
|
102
|
-
options: Partial<SchedulerOptions> = {}
|
|
103
|
-
) {
|
|
104
|
-
if (phases.length === 0) {
|
|
105
|
-
throw new Error('At least one test phase is required');
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
this.phases = phases;
|
|
109
|
-
this.config = { ...config, numPhases: phases.length };
|
|
110
|
-
this.options = {
|
|
111
|
-
...DEFAULT_SCHEDULER_OPTIONS,
|
|
112
|
-
...options,
|
|
113
|
-
cpgConfig: this.config,
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
// Store test runner for real execution
|
|
117
|
-
this.testRunner = options.testRunner;
|
|
118
|
-
this.mockMode = !this.testRunner;
|
|
119
|
-
|
|
120
|
-
if (this.mockMode) {
|
|
121
|
-
console.warn(
|
|
122
|
-
'[TimeCrystalScheduler] MOCK MODE: No TestRunner provided. ' +
|
|
123
|
-
'Phase execution will use deterministic fake data. ' +
|
|
124
|
-
'For production, provide a TestRunner via options.testRunner.'
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
this.initializeOscillators();
|
|
129
|
-
this.initializeCoupling();
|
|
130
|
-
|
|
131
|
-
// Initialize phase results tracking
|
|
132
|
-
for (let i = 0; i < this.phases.length; i++) {
|
|
133
|
-
this.phaseResults.set(i, []);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Initialize oscillator neurons with evenly distributed phases
|
|
139
|
-
*/
|
|
140
|
-
private initializeOscillators(): void {
|
|
141
|
-
this.oscillators = createEvenlySpacedOscillators(
|
|
142
|
-
this.config.numPhases,
|
|
143
|
-
this.config.frequency
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Initialize coupling matrix with ring topology
|
|
149
|
-
*/
|
|
150
|
-
private initializeCoupling(): void {
|
|
151
|
-
this.coupling = buildRingCouplingMatrix(
|
|
152
|
-
this.config.numPhases,
|
|
153
|
-
this.config.coupling
|
|
154
|
-
);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Run one integration tick
|
|
159
|
-
*
|
|
160
|
-
* @returns PhaseTransition if a transition occurred, null otherwise
|
|
161
|
-
*/
|
|
162
|
-
tick(): PhaseTransition | null {
|
|
163
|
-
if (!this.running || this.paused) {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const dt = this.config.dt;
|
|
168
|
-
this.time += dt;
|
|
169
|
-
|
|
170
|
-
// 1. Compute Kuramoto coupling inputs
|
|
171
|
-
const n = this.oscillators.length;
|
|
172
|
-
const couplingInputs = new Array(n).fill(0);
|
|
173
|
-
|
|
174
|
-
for (let i = 0; i < n; i++) {
|
|
175
|
-
for (let j = 0; j < n; j++) {
|
|
176
|
-
if (i !== j && this.coupling[i][j] !== 0) {
|
|
177
|
-
couplingInputs[i] += this.oscillators[i].computeCouplingFrom(
|
|
178
|
-
this.oscillators[j],
|
|
179
|
-
this.coupling[i][j]
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// 2. Integrate oscillator dynamics
|
|
186
|
-
for (let i = 0; i < n; i++) {
|
|
187
|
-
this.oscillators[i].integrate(dt, couplingInputs[i]);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// 3. Winner-take-all: highest activity determines current phase
|
|
191
|
-
let winner = 0;
|
|
192
|
-
let maxActivity = this.oscillators[0].getActivity();
|
|
193
|
-
|
|
194
|
-
for (let i = 1; i < n; i++) {
|
|
195
|
-
const activity = this.oscillators[i].getActivity();
|
|
196
|
-
if (activity > maxActivity) {
|
|
197
|
-
maxActivity = activity;
|
|
198
|
-
winner = i;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Emit tick event
|
|
203
|
-
this.emitEvent('crystal:tick', {
|
|
204
|
-
time: this.time,
|
|
205
|
-
currentPhase: this.currentPhase,
|
|
206
|
-
winner,
|
|
207
|
-
maxActivity,
|
|
208
|
-
oscillatorStates: this.oscillators.map(o => o.getState()),
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
// 4. Check for phase transition
|
|
212
|
-
if (winner !== this.currentPhase && maxActivity >= this.config.transitionThreshold) {
|
|
213
|
-
const oldPhase = this.currentPhase;
|
|
214
|
-
this.currentPhase = winner;
|
|
215
|
-
this.phaseHistory.push(winner);
|
|
216
|
-
|
|
217
|
-
// Check for cycle completion (returned to phase 0)
|
|
218
|
-
if (winner === 0 && oldPhase === this.phases.length - 1) {
|
|
219
|
-
this.cycleCount++;
|
|
220
|
-
const cycleDuration = this.time - this.lastCycleStartTime;
|
|
221
|
-
this.cycleDurations.push(cycleDuration);
|
|
222
|
-
this.lastCycleStartTime = this.time;
|
|
223
|
-
|
|
224
|
-
// Keep only recent cycle durations
|
|
225
|
-
if (this.cycleDurations.length > 100) {
|
|
226
|
-
this.cycleDurations.shift();
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Prune history
|
|
231
|
-
if (this.phaseHistory.length > this.options.maxHistoryLength) {
|
|
232
|
-
this.phaseHistory.shift();
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const transition: PhaseTransition = {
|
|
236
|
-
from: oldPhase,
|
|
237
|
-
to: winner,
|
|
238
|
-
timestamp: this.time,
|
|
239
|
-
fromPhase: this.phases[oldPhase],
|
|
240
|
-
toPhase: this.phases[winner],
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
// Emit transition event
|
|
244
|
-
this.emitEvent('phase:transition', {
|
|
245
|
-
transition,
|
|
246
|
-
time: this.time,
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
return transition;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return null;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Start the crystal oscillation loop
|
|
257
|
-
*
|
|
258
|
-
* Runs asynchronously, calling tick() and executing phases on transitions
|
|
259
|
-
*/
|
|
260
|
-
async start(): Promise<void> {
|
|
261
|
-
if (this.running) {
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
this.running = true;
|
|
266
|
-
this.paused = false;
|
|
267
|
-
this.lastCycleStartTime = this.time;
|
|
268
|
-
|
|
269
|
-
this.emitEvent('crystal:started', {
|
|
270
|
-
time: this.time,
|
|
271
|
-
config: this.config,
|
|
272
|
-
phases: this.phases.map(p => p.name),
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
while (this.running) {
|
|
276
|
-
if (this.paused) {
|
|
277
|
-
await this.sleep(100);
|
|
278
|
-
continue;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
const transition = this.tick();
|
|
282
|
-
|
|
283
|
-
if (transition) {
|
|
284
|
-
// Execute the new phase
|
|
285
|
-
await this.executePhase(transition.toPhase);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
await this.sleep(this.config.dt);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Stop the crystal oscillation
|
|
294
|
-
*/
|
|
295
|
-
stop(): void {
|
|
296
|
-
this.running = false;
|
|
297
|
-
this.paused = false;
|
|
298
|
-
|
|
299
|
-
this.emitEvent('crystal:stopped', {
|
|
300
|
-
time: this.time,
|
|
301
|
-
cycleCount: this.cycleCount,
|
|
302
|
-
phaseHistory: this.phaseHistory.slice(-20),
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Pause the crystal (maintains state)
|
|
308
|
-
*/
|
|
309
|
-
pause(): void {
|
|
310
|
-
this.paused = true;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* Resume from pause
|
|
315
|
-
*/
|
|
316
|
-
resume(): void {
|
|
317
|
-
this.paused = false;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Execute tests for a specific phase
|
|
322
|
-
*
|
|
323
|
-
* @param phase - The phase to execute
|
|
324
|
-
* @returns Phase execution result
|
|
325
|
-
*/
|
|
326
|
-
async executePhase(phase: TestPhase): Promise<PhaseResult> {
|
|
327
|
-
this.phaseStartTime.set(phase.id, this.time);
|
|
328
|
-
|
|
329
|
-
this.emitEvent('phase:started', {
|
|
330
|
-
phaseId: phase.id,
|
|
331
|
-
phaseName: phase.name,
|
|
332
|
-
time: this.time,
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
let result: PhaseResult;
|
|
336
|
-
|
|
337
|
-
if (this.options.onPhaseExecute) {
|
|
338
|
-
// Use provided executor
|
|
339
|
-
result = await this.options.onPhaseExecute(phase);
|
|
340
|
-
} else {
|
|
341
|
-
// Default executor (simulated for testing)
|
|
342
|
-
result = await this.defaultPhaseExecutor(phase);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
// Store result
|
|
346
|
-
const results = this.phaseResults.get(phase.id) || [];
|
|
347
|
-
results.push(result);
|
|
348
|
-
if (results.length > 100) {
|
|
349
|
-
results.shift();
|
|
350
|
-
}
|
|
351
|
-
this.phaseResults.set(phase.id, results);
|
|
352
|
-
|
|
353
|
-
// Check quality thresholds
|
|
354
|
-
if (!result.qualityMet) {
|
|
355
|
-
this.qualityFailures++;
|
|
356
|
-
this.consecutiveFailures++;
|
|
357
|
-
|
|
358
|
-
this.emitEvent('quality:failure', {
|
|
359
|
-
phaseId: phase.id,
|
|
360
|
-
phaseName: phase.name,
|
|
361
|
-
result,
|
|
362
|
-
time: this.time,
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
// Invoke quality failure callback
|
|
366
|
-
if (this.options.onQualityFailure) {
|
|
367
|
-
await this.options.onQualityFailure(phase, result);
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// Repair crystal if too many consecutive failures
|
|
371
|
-
if (this.consecutiveFailures >= 3) {
|
|
372
|
-
await this.repairCrystal();
|
|
373
|
-
}
|
|
374
|
-
} else {
|
|
375
|
-
this.consecutiveFailures = 0;
|
|
376
|
-
|
|
377
|
-
this.emitEvent('phase:completed', {
|
|
378
|
-
phaseId: phase.id,
|
|
379
|
-
phaseName: phase.name,
|
|
380
|
-
result,
|
|
381
|
-
time: this.time,
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Invoke transition callback
|
|
386
|
-
if (this.options.onPhaseTransition) {
|
|
387
|
-
// Create a pseudo-transition for the callback
|
|
388
|
-
const nextPhaseIdx = (phase.id + 1) % this.phases.length;
|
|
389
|
-
const pseudoTransition: PhaseTransition = {
|
|
390
|
-
from: phase.id,
|
|
391
|
-
to: nextPhaseIdx,
|
|
392
|
-
timestamp: this.time,
|
|
393
|
-
fromPhase: phase,
|
|
394
|
-
toPhase: this.phases[nextPhaseIdx],
|
|
395
|
-
};
|
|
396
|
-
await this.options.onPhaseTransition(pseudoTransition);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
return result;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Default phase executor
|
|
404
|
-
*
|
|
405
|
-
* Uses real TestRunner if provided, otherwise falls back to MOCK MODE
|
|
406
|
-
* with deterministic fake data for development/testing.
|
|
407
|
-
*/
|
|
408
|
-
private async defaultPhaseExecutor(phase: TestPhase): Promise<PhaseResult> {
|
|
409
|
-
const startTime = Date.now();
|
|
410
|
-
|
|
411
|
-
if (this.testRunner) {
|
|
412
|
-
// REAL MODE: Execute actual tests via TestRunner
|
|
413
|
-
return this.executeRealTests(phase, startTime);
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// MOCK MODE: Use deterministic fake data (no Math.random())
|
|
417
|
-
return this.executeMockTests(phase, startTime);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
/**
|
|
421
|
-
* Execute REAL tests using the configured TestRunner
|
|
422
|
-
*/
|
|
423
|
-
private async executeRealTests(phase: TestPhase, startTime: number): Promise<PhaseResult> {
|
|
424
|
-
if (!this.testRunner) {
|
|
425
|
-
throw new Error('TestRunner not configured - cannot execute real tests');
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
const runnerResult = await this.testRunner.run(phase.testTypes, {
|
|
429
|
-
parallelism: phase.agentConfig.parallelism,
|
|
430
|
-
timeout: phase.expectedDuration * 2,
|
|
431
|
-
collectCoverage: true,
|
|
432
|
-
retryFailed: true,
|
|
433
|
-
maxRetries: 2,
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
const duration = Date.now() - startTime;
|
|
437
|
-
|
|
438
|
-
// Calculate metrics from real results
|
|
439
|
-
const passRate = runnerResult.total > 0
|
|
440
|
-
? runnerResult.passed / runnerResult.total
|
|
441
|
-
: 0;
|
|
442
|
-
|
|
443
|
-
const flakyRatio = runnerResult.total > 0
|
|
444
|
-
? runnerResult.flaky / runnerResult.total
|
|
445
|
-
: 0;
|
|
446
|
-
|
|
447
|
-
return {
|
|
448
|
-
phaseId: phase.id,
|
|
449
|
-
phaseName: phase.name,
|
|
450
|
-
passRate,
|
|
451
|
-
flakyRatio,
|
|
452
|
-
coverage: runnerResult.coverage,
|
|
453
|
-
duration,
|
|
454
|
-
testsRun: runnerResult.total,
|
|
455
|
-
testsPassed: runnerResult.passed,
|
|
456
|
-
testsFailed: runnerResult.failed,
|
|
457
|
-
testsSkipped: runnerResult.skipped,
|
|
458
|
-
qualityMet: this.evaluateQualityGates(phase, passRate, flakyRatio, runnerResult.coverage),
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
/**
|
|
463
|
-
* MOCK MODE: Generate deterministic fake test results.
|
|
464
|
-
*
|
|
465
|
-
* WARNING: For development/testing only. Does NOT run real tests.
|
|
466
|
-
* Provides deterministic values based on phase configuration.
|
|
467
|
-
*/
|
|
468
|
-
private async executeMockTests(phase: TestPhase, startTime: number): Promise<PhaseResult> {
|
|
469
|
-
// Shortened execution time for fast iteration in mock mode
|
|
470
|
-
const simulatedDuration = Math.min(phase.expectedDuration, 1000);
|
|
471
|
-
await this.sleep(simulatedDuration / 10);
|
|
472
|
-
|
|
473
|
-
const duration = Date.now() - startTime;
|
|
474
|
-
|
|
475
|
-
// DETERMINISTIC values based on phase configuration (no Math.random())
|
|
476
|
-
// Calculate base test count from phase test types
|
|
477
|
-
const testTypeCounts: Record<string, number> = {
|
|
478
|
-
unit: 100,
|
|
479
|
-
integration: 50,
|
|
480
|
-
e2e: 20,
|
|
481
|
-
performance: 10,
|
|
482
|
-
security: 15,
|
|
483
|
-
visual: 25,
|
|
484
|
-
accessibility: 30,
|
|
485
|
-
contract: 40,
|
|
486
|
-
};
|
|
487
|
-
|
|
488
|
-
const baseTests = phase.testTypes.reduce(
|
|
489
|
-
(sum, type) => sum + (testTypeCounts[type] || 30),
|
|
490
|
-
0
|
|
491
|
-
);
|
|
492
|
-
|
|
493
|
-
// Deterministic offset based on phase ID for variety
|
|
494
|
-
const deterministicOffset = (phase.id % 3) * 5;
|
|
495
|
-
const testsRun = baseTests + deterministicOffset;
|
|
496
|
-
|
|
497
|
-
// Deterministic pass rate based on test type
|
|
498
|
-
let passRate: number;
|
|
499
|
-
if (phase.testTypes.includes('unit')) {
|
|
500
|
-
passRate = 0.98;
|
|
501
|
-
} else if (phase.testTypes.includes('integration')) {
|
|
502
|
-
passRate = 0.95;
|
|
503
|
-
} else if (phase.testTypes.includes('e2e')) {
|
|
504
|
-
passRate = 0.90;
|
|
505
|
-
} else {
|
|
506
|
-
passRate = 0.93;
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
const testsPassed = Math.floor(testsRun * passRate);
|
|
510
|
-
const testsFailed = Math.floor((testsRun - testsPassed) * 0.8);
|
|
511
|
-
const testsSkipped = testsRun - testsPassed - testsFailed;
|
|
512
|
-
|
|
513
|
-
// Deterministic flaky ratio: 1 per 100 tests
|
|
514
|
-
const flakyRatio = 0.01;
|
|
515
|
-
|
|
516
|
-
// Deterministic coverage based on test type
|
|
517
|
-
let coverage: number;
|
|
518
|
-
if (phase.testTypes.includes('unit')) {
|
|
519
|
-
coverage = 0.85;
|
|
520
|
-
} else if (phase.testTypes.includes('integration')) {
|
|
521
|
-
coverage = 0.75;
|
|
522
|
-
} else if (phase.testTypes.includes('e2e')) {
|
|
523
|
-
coverage = 0.65;
|
|
524
|
-
} else {
|
|
525
|
-
coverage = 0.60;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
return {
|
|
529
|
-
phaseId: phase.id,
|
|
530
|
-
phaseName: phase.name,
|
|
531
|
-
passRate,
|
|
532
|
-
flakyRatio,
|
|
533
|
-
coverage,
|
|
534
|
-
duration,
|
|
535
|
-
testsRun,
|
|
536
|
-
testsPassed,
|
|
537
|
-
testsFailed,
|
|
538
|
-
testsSkipped,
|
|
539
|
-
qualityMet: this.evaluateQualityGates(phase, passRate, flakyRatio, coverage),
|
|
540
|
-
};
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
/**
|
|
544
|
-
* Evaluate quality gates for a phase
|
|
545
|
-
*/
|
|
546
|
-
private evaluateQualityGates(
|
|
547
|
-
phase: TestPhase,
|
|
548
|
-
passRate: number,
|
|
549
|
-
flakyRatio: number,
|
|
550
|
-
coverage: number
|
|
551
|
-
): boolean {
|
|
552
|
-
const thresholds = phase.qualityThresholds;
|
|
553
|
-
|
|
554
|
-
if (passRate < thresholds.minPassRate) {
|
|
555
|
-
return false;
|
|
556
|
-
}
|
|
557
|
-
if (flakyRatio > thresholds.maxFlakyRatio) {
|
|
558
|
-
return false;
|
|
559
|
-
}
|
|
560
|
-
if (coverage < thresholds.minCoverage) {
|
|
561
|
-
return false;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
return true;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
/**
|
|
568
|
-
* Repair crystal structure after quality failures
|
|
569
|
-
*
|
|
570
|
-
* Re-synchronizes oscillators to restore stable periodic behavior
|
|
571
|
-
*/
|
|
572
|
-
async repairCrystal(): Promise<void> {
|
|
573
|
-
this.emitEvent('crystal:repair', {
|
|
574
|
-
time: this.time,
|
|
575
|
-
consecutiveFailures: this.consecutiveFailures,
|
|
576
|
-
});
|
|
577
|
-
|
|
578
|
-
// Re-synchronize oscillators to their initial phase offsets
|
|
579
|
-
const n = this.oscillators.length;
|
|
580
|
-
for (let i = 0; i < n; i++) {
|
|
581
|
-
const targetPhase = (2 * Math.PI * i) / n;
|
|
582
|
-
this.oscillators[i].reset(targetPhase);
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
// Reset consecutive failures counter
|
|
586
|
-
this.consecutiveFailures = 0;
|
|
587
|
-
|
|
588
|
-
// Brief pause to let system stabilize
|
|
589
|
-
await this.sleep(this.config.dt * 2);
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
/**
|
|
593
|
-
* Check if crystal is exhibiting stable periodic behavior
|
|
594
|
-
*
|
|
595
|
-
* @returns True if the crystal is stable
|
|
596
|
-
*/
|
|
597
|
-
isStable(): boolean {
|
|
598
|
-
if (this.phaseHistory.length < this.config.numPhases * 2) {
|
|
599
|
-
return false;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
const period = this.config.numPhases;
|
|
603
|
-
const recent = this.phaseHistory.slice(-period * 2);
|
|
604
|
-
|
|
605
|
-
// Check if pattern repeats
|
|
606
|
-
for (let i = 0; i < period; i++) {
|
|
607
|
-
if (recent[i] !== recent[i + period]) {
|
|
608
|
-
return false;
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
// Also check order parameter for synchronization
|
|
613
|
-
const { r } = computeOrderParameter(this.oscillators);
|
|
614
|
-
if (r < 0.5) {
|
|
615
|
-
return false;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
return true;
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
/**
|
|
622
|
-
* Get the current test phase
|
|
623
|
-
*/
|
|
624
|
-
getCurrentPhase(): TestPhase {
|
|
625
|
-
return this.phases[this.currentPhase];
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
/**
|
|
629
|
-
* Get the current phase index
|
|
630
|
-
*/
|
|
631
|
-
getCurrentPhaseIndex(): number {
|
|
632
|
-
return this.currentPhase;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
/**
|
|
636
|
-
* Get all phases
|
|
637
|
-
*/
|
|
638
|
-
getPhases(): readonly TestPhase[] {
|
|
639
|
-
return this.phases;
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
/**
|
|
643
|
-
* Get current simulation time
|
|
644
|
-
*/
|
|
645
|
-
getTime(): number {
|
|
646
|
-
return this.time;
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
/**
|
|
650
|
-
* Get number of completed cycles
|
|
651
|
-
*/
|
|
652
|
-
getCycleCount(): number {
|
|
653
|
-
return this.cycleCount;
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
/**
|
|
657
|
-
* Get the complete scheduler state
|
|
658
|
-
*/
|
|
659
|
-
getState(): SchedulerState {
|
|
660
|
-
return {
|
|
661
|
-
running: this.running,
|
|
662
|
-
time: this.time,
|
|
663
|
-
currentPhase: this.currentPhase,
|
|
664
|
-
phaseHistory: [...this.phaseHistory],
|
|
665
|
-
oscillatorStates: this.oscillators.map(o => o.getState()),
|
|
666
|
-
isStable: this.isStable(),
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
/**
|
|
671
|
-
* Get crystal health status
|
|
672
|
-
*/
|
|
673
|
-
getHealth(): CrystalHealth {
|
|
674
|
-
const { r: orderParameter, psi: _psi } = computeOrderParameter(this.oscillators);
|
|
675
|
-
const issues: CrystalIssue[] = [];
|
|
676
|
-
|
|
677
|
-
// Determine health status
|
|
678
|
-
let status: CrystalHealthStatus = 'healthy';
|
|
679
|
-
|
|
680
|
-
if (orderParameter < 0.3) {
|
|
681
|
-
status = 'broken';
|
|
682
|
-
issues.push({
|
|
683
|
-
type: 'desynchronization',
|
|
684
|
-
severity: 'critical',
|
|
685
|
-
message: 'Oscillators are severely desynchronized',
|
|
686
|
-
timestamp: this.time,
|
|
687
|
-
});
|
|
688
|
-
} else if (orderParameter < 0.5) {
|
|
689
|
-
status = 'unstable';
|
|
690
|
-
issues.push({
|
|
691
|
-
type: 'desynchronization',
|
|
692
|
-
severity: 'high',
|
|
693
|
-
message: 'Oscillators are losing synchronization',
|
|
694
|
-
timestamp: this.time,
|
|
695
|
-
});
|
|
696
|
-
} else if (orderParameter < 0.7) {
|
|
697
|
-
status = 'degraded';
|
|
698
|
-
issues.push({
|
|
699
|
-
type: 'desynchronization',
|
|
700
|
-
severity: 'medium',
|
|
701
|
-
message: 'Oscillator synchronization is weakening',
|
|
702
|
-
timestamp: this.time,
|
|
703
|
-
});
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
// Check quality failure rate
|
|
707
|
-
const totalPhaseExecutions = Array.from(this.phaseResults.values())
|
|
708
|
-
.reduce((sum, results) => sum + results.length, 0);
|
|
709
|
-
const phaseSuccessRate = totalPhaseExecutions > 0
|
|
710
|
-
? (totalPhaseExecutions - this.qualityFailures) / totalPhaseExecutions
|
|
711
|
-
: 1;
|
|
712
|
-
|
|
713
|
-
if (phaseSuccessRate < 0.8) {
|
|
714
|
-
if (status === 'healthy') status = 'degraded';
|
|
715
|
-
issues.push({
|
|
716
|
-
type: 'quality_failure',
|
|
717
|
-
severity: 'medium',
|
|
718
|
-
message: `Phase success rate is ${(phaseSuccessRate * 100).toFixed(1)}%`,
|
|
719
|
-
timestamp: this.time,
|
|
720
|
-
});
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
// Check for stalls
|
|
724
|
-
if (this.running && this.phaseHistory.length > 0) {
|
|
725
|
-
const lastTransition = this.phaseHistory.length > 0
|
|
726
|
-
? this.time - (this.config.dt * 10)
|
|
727
|
-
: 0;
|
|
728
|
-
if (this.time - lastTransition > this.config.dt * 100) {
|
|
729
|
-
issues.push({
|
|
730
|
-
type: 'stall',
|
|
731
|
-
severity: 'high',
|
|
732
|
-
message: 'No phase transitions detected recently',
|
|
733
|
-
timestamp: this.time,
|
|
734
|
-
affectedPhase: this.currentPhase,
|
|
735
|
-
});
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
// Compute coherence from recent phases
|
|
740
|
-
const coherence = this.computeCoherence();
|
|
741
|
-
|
|
742
|
-
// Average cycle duration
|
|
743
|
-
const averageCycleDuration = this.cycleDurations.length > 0
|
|
744
|
-
? this.cycleDurations.reduce((a, b) => a + b, 0) / this.cycleDurations.length
|
|
745
|
-
: 0;
|
|
746
|
-
|
|
747
|
-
return {
|
|
748
|
-
status,
|
|
749
|
-
synchronized: orderParameter > 0.7,
|
|
750
|
-
orderParameter,
|
|
751
|
-
coherence,
|
|
752
|
-
completedCycles: this.cycleCount,
|
|
753
|
-
averageCycleDuration,
|
|
754
|
-
phaseSuccessRate,
|
|
755
|
-
issues,
|
|
756
|
-
};
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
/**
|
|
760
|
-
* Compute phase coherence from oscillator history
|
|
761
|
-
*/
|
|
762
|
-
private computeCoherence(): number {
|
|
763
|
-
if (this.phaseHistory.length < 4) {
|
|
764
|
-
return 0;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
// Check if phases cycle in order
|
|
768
|
-
const period = this.phases.length;
|
|
769
|
-
let correctTransitions = 0;
|
|
770
|
-
let totalTransitions = 0;
|
|
771
|
-
|
|
772
|
-
for (let i = 1; i < this.phaseHistory.length; i++) {
|
|
773
|
-
const prev = this.phaseHistory[i - 1];
|
|
774
|
-
const curr = this.phaseHistory[i];
|
|
775
|
-
const expected = (prev + 1) % period;
|
|
776
|
-
if (curr === expected) {
|
|
777
|
-
correctTransitions++;
|
|
778
|
-
}
|
|
779
|
-
totalTransitions++;
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
return totalTransitions > 0 ? correctTransitions / totalTransitions : 0;
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
/**
|
|
786
|
-
* Get phase execution results
|
|
787
|
-
*/
|
|
788
|
-
getPhaseResults(phaseId: number): readonly PhaseResult[] {
|
|
789
|
-
return this.phaseResults.get(phaseId) || [];
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
/**
|
|
793
|
-
* Register an event handler
|
|
794
|
-
*/
|
|
795
|
-
on(handler: TimeCrystalEventHandler): void {
|
|
796
|
-
this.eventHandlers.push(handler);
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
/**
|
|
800
|
-
* Remove an event handler
|
|
801
|
-
*/
|
|
802
|
-
off(handler: TimeCrystalEventHandler): void {
|
|
803
|
-
const index = this.eventHandlers.indexOf(handler);
|
|
804
|
-
if (index !== -1) {
|
|
805
|
-
this.eventHandlers.splice(index, 1);
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
/**
|
|
810
|
-
* Emit an event to all handlers
|
|
811
|
-
*/
|
|
812
|
-
private emitEvent(type: TimeCrystalEvent['type'], payload: Record<string, unknown>): void {
|
|
813
|
-
const event: TimeCrystalEvent = {
|
|
814
|
-
type,
|
|
815
|
-
timestamp: this.time,
|
|
816
|
-
payload,
|
|
817
|
-
};
|
|
818
|
-
|
|
819
|
-
for (const handler of this.eventHandlers) {
|
|
820
|
-
try {
|
|
821
|
-
handler(event);
|
|
822
|
-
} catch (e) {
|
|
823
|
-
console.error('[TimeCrystal] Event handler error:', e);
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
/**
|
|
829
|
-
* Get configuration
|
|
830
|
-
*/
|
|
831
|
-
getConfig(): CPGConfig {
|
|
832
|
-
return { ...this.config };
|
|
833
|
-
}
|
|
834
|
-
|
|
835
|
-
/**
|
|
836
|
-
* Check if scheduler is in mock mode (no real test execution)
|
|
837
|
-
*
|
|
838
|
-
* @returns true if no TestRunner was provided and mock data is being used
|
|
839
|
-
*/
|
|
840
|
-
isMockMode(): boolean {
|
|
841
|
-
return this.mockMode;
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
/**
|
|
845
|
-
* Get the configured test runner, if any
|
|
846
|
-
*/
|
|
847
|
-
getTestRunner(): TestRunner | undefined {
|
|
848
|
-
return this.testRunner;
|
|
849
|
-
}
|
|
850
|
-
|
|
851
|
-
/**
|
|
852
|
-
* Update coupling strength
|
|
853
|
-
*/
|
|
854
|
-
setCouplingStrength(strength: number): void {
|
|
855
|
-
for (let i = 0; i < this.coupling.length; i++) {
|
|
856
|
-
for (let j = 0; j < this.coupling[i].length; j++) {
|
|
857
|
-
if (this.coupling[i][j] !== 0) {
|
|
858
|
-
this.coupling[i][j] = strength;
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
/**
|
|
865
|
-
* Get the oscillator order parameter (synchronization measure)
|
|
866
|
-
*/
|
|
867
|
-
getOrderParameter(): number {
|
|
868
|
-
const { r } = computeOrderParameter(this.oscillators);
|
|
869
|
-
return r;
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
/**
|
|
873
|
-
* Force a phase transition (for testing/debugging)
|
|
874
|
-
*/
|
|
875
|
-
forcePhaseTransition(targetPhase: number): void {
|
|
876
|
-
if (targetPhase < 0 || targetPhase >= this.phases.length) {
|
|
877
|
-
throw new Error(`Invalid phase: ${targetPhase}`);
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
const oldPhase = this.currentPhase;
|
|
881
|
-
this.currentPhase = targetPhase;
|
|
882
|
-
this.phaseHistory.push(targetPhase);
|
|
883
|
-
|
|
884
|
-
// Reset oscillators to align with forced phase
|
|
885
|
-
const n = this.oscillators.length;
|
|
886
|
-
for (let i = 0; i < n; i++) {
|
|
887
|
-
const offset = ((i - targetPhase + n) % n) * (2 * Math.PI / n);
|
|
888
|
-
this.oscillators[i].reset(offset);
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
this.emitEvent('phase:transition', {
|
|
892
|
-
transition: {
|
|
893
|
-
from: oldPhase,
|
|
894
|
-
to: targetPhase,
|
|
895
|
-
timestamp: this.time,
|
|
896
|
-
fromPhase: this.phases[oldPhase],
|
|
897
|
-
toPhase: this.phases[targetPhase],
|
|
898
|
-
},
|
|
899
|
-
time: this.time,
|
|
900
|
-
forced: true,
|
|
901
|
-
});
|
|
902
|
-
}
|
|
903
|
-
|
|
904
|
-
/**
|
|
905
|
-
* Run for a specified number of ticks (for testing)
|
|
906
|
-
*
|
|
907
|
-
* @param ticks - Number of ticks to run
|
|
908
|
-
* @returns Array of phase transitions that occurred
|
|
909
|
-
*/
|
|
910
|
-
runTicks(ticks: number): PhaseTransition[] {
|
|
911
|
-
const wasRunning = this.running;
|
|
912
|
-
this.running = true;
|
|
913
|
-
this.paused = false;
|
|
914
|
-
|
|
915
|
-
const transitions: PhaseTransition[] = [];
|
|
916
|
-
|
|
917
|
-
for (let i = 0; i < ticks; i++) {
|
|
918
|
-
const transition = this.tick();
|
|
919
|
-
if (transition) {
|
|
920
|
-
transitions.push(transition);
|
|
921
|
-
}
|
|
922
|
-
}
|
|
923
|
-
|
|
924
|
-
if (!wasRunning) {
|
|
925
|
-
this.running = false;
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
return transitions;
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
/**
|
|
932
|
-
* Sleep helper
|
|
933
|
-
*/
|
|
934
|
-
private sleep(ms: number): Promise<void> {
|
|
935
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
/**
|
|
939
|
-
* Check if scheduler is running
|
|
940
|
-
*/
|
|
941
|
-
isRunning(): boolean {
|
|
942
|
-
return this.running;
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
/**
|
|
946
|
-
* Check if scheduler is paused
|
|
947
|
-
*/
|
|
948
|
-
isPaused(): boolean {
|
|
949
|
-
return this.paused;
|
|
950
|
-
}
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
/**
|
|
954
|
-
* Create a Time Crystal Scheduler with default test phases
|
|
955
|
-
*/
|
|
956
|
-
export function createDefaultScheduler(
|
|
957
|
-
config: CPGConfig = DEFAULT_CPG_CONFIG,
|
|
958
|
-
options: Partial<SchedulerOptions> = {}
|
|
959
|
-
): TimeCrystalScheduler {
|
|
960
|
-
// Import default phases - avoiding circular dependency
|
|
961
|
-
const defaultPhases: TestPhase[] = [
|
|
962
|
-
{
|
|
963
|
-
id: 0,
|
|
964
|
-
name: 'Unit',
|
|
965
|
-
testTypes: ['unit'],
|
|
966
|
-
expectedDuration: 30000,
|
|
967
|
-
qualityThresholds: {
|
|
968
|
-
minPassRate: 0.99,
|
|
969
|
-
maxFlakyRatio: 0.01,
|
|
970
|
-
minCoverage: 0.80,
|
|
971
|
-
},
|
|
972
|
-
agentConfig: {
|
|
973
|
-
agents: ['qe-test-executor'],
|
|
974
|
-
parallelism: 8,
|
|
975
|
-
},
|
|
976
|
-
},
|
|
977
|
-
{
|
|
978
|
-
id: 1,
|
|
979
|
-
name: 'Integration',
|
|
980
|
-
testTypes: ['integration', 'contract'],
|
|
981
|
-
expectedDuration: 120000,
|
|
982
|
-
qualityThresholds: {
|
|
983
|
-
minPassRate: 0.95,
|
|
984
|
-
maxFlakyRatio: 0.05,
|
|
985
|
-
minCoverage: 0.70,
|
|
986
|
-
},
|
|
987
|
-
agentConfig: {
|
|
988
|
-
agents: ['qe-test-executor', 'qe-api-contract-validator'],
|
|
989
|
-
parallelism: 4,
|
|
990
|
-
},
|
|
991
|
-
},
|
|
992
|
-
{
|
|
993
|
-
id: 2,
|
|
994
|
-
name: 'E2E',
|
|
995
|
-
testTypes: ['e2e', 'visual', 'accessibility'],
|
|
996
|
-
expectedDuration: 300000,
|
|
997
|
-
qualityThresholds: {
|
|
998
|
-
minPassRate: 0.90,
|
|
999
|
-
maxFlakyRatio: 0.10,
|
|
1000
|
-
minCoverage: 0.60,
|
|
1001
|
-
},
|
|
1002
|
-
agentConfig: {
|
|
1003
|
-
agents: ['qe-test-executor', 'qe-visual-tester'],
|
|
1004
|
-
parallelism: 2,
|
|
1005
|
-
},
|
|
1006
|
-
},
|
|
1007
|
-
{
|
|
1008
|
-
id: 3,
|
|
1009
|
-
name: 'Performance',
|
|
1010
|
-
testTypes: ['performance', 'security'],
|
|
1011
|
-
expectedDuration: 600000,
|
|
1012
|
-
qualityThresholds: {
|
|
1013
|
-
minPassRate: 0.95,
|
|
1014
|
-
maxFlakyRatio: 0.02,
|
|
1015
|
-
minCoverage: 0.50,
|
|
1016
|
-
},
|
|
1017
|
-
agentConfig: {
|
|
1018
|
-
agents: ['qe-performance-tester', 'qe-security-scanner'],
|
|
1019
|
-
parallelism: 1,
|
|
1020
|
-
},
|
|
1021
|
-
},
|
|
1022
|
-
];
|
|
1023
|
-
|
|
1024
|
-
return new TimeCrystalScheduler(defaultPhases, config, options);
|
|
1025
|
-
}
|