@agentic-qe/v3 3.0.0-alpha.6 → 3.0.0-alpha.8
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 +23 -13
- package/dist/init/agents-installer.js +4 -4
- package/dist/init/agents-installer.js.map +1 -1
- package/dist/init/init-wizard.d.ts.map +1 -1
- package/dist/init/init-wizard.js +15 -5
- package/dist/init/init-wizard.js.map +1 -1
- package/dist/init/skills-installer.js +4 -4
- package/dist/init/skills-installer.js.map +1 -1
- package/package.json +7 -1
- 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,972 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agentic QE v3 - Learning Coordinator Service
|
|
3
|
-
* Orchestrates learning across all QE domains
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
-
import { Result, ok, err, DomainName } from '../../../shared/types/index.js';
|
|
8
|
-
import { MemoryBackend } from '../../../kernel/interfaces.js';
|
|
9
|
-
import { TimeRange } from '../../../shared/value-objects/index.js';
|
|
10
|
-
import {
|
|
11
|
-
LearnedPattern,
|
|
12
|
-
PatternType,
|
|
13
|
-
PatternContext,
|
|
14
|
-
PatternTemplate,
|
|
15
|
-
TemplateVariable,
|
|
16
|
-
Experience,
|
|
17
|
-
ExperienceResult,
|
|
18
|
-
StateSnapshot,
|
|
19
|
-
MinedInsights,
|
|
20
|
-
ExperienceCluster,
|
|
21
|
-
ExperienceAnomaly,
|
|
22
|
-
PatternStats,
|
|
23
|
-
IPatternLearningService,
|
|
24
|
-
IExperienceMiningService,
|
|
25
|
-
OptimizationObjective,
|
|
26
|
-
} from '../interfaces.js';
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Configuration for the learning coordinator
|
|
30
|
-
*/
|
|
31
|
-
export interface LearningCoordinatorConfig {
|
|
32
|
-
minExperiencesForPattern: number;
|
|
33
|
-
patternConfidenceThreshold: number;
|
|
34
|
-
maxPatternsPerDomain: number;
|
|
35
|
-
anomalyDeviationThreshold: number;
|
|
36
|
-
clusterSimilarityThreshold: number;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const DEFAULT_CONFIG: LearningCoordinatorConfig = {
|
|
40
|
-
minExperiencesForPattern: 5,
|
|
41
|
-
patternConfidenceThreshold: 0.7,
|
|
42
|
-
maxPatternsPerDomain: 100,
|
|
43
|
-
anomalyDeviationThreshold: 2.0,
|
|
44
|
-
clusterSimilarityThreshold: 0.8,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Learning Coordinator Service
|
|
49
|
-
* Implements pattern learning and experience mining capabilities
|
|
50
|
-
*/
|
|
51
|
-
export class LearningCoordinatorService
|
|
52
|
-
implements IPatternLearningService, IExperienceMiningService
|
|
53
|
-
{
|
|
54
|
-
private readonly config: LearningCoordinatorConfig;
|
|
55
|
-
|
|
56
|
-
constructor(
|
|
57
|
-
private readonly memory: MemoryBackend,
|
|
58
|
-
config: Partial<LearningCoordinatorConfig> = {}
|
|
59
|
-
) {
|
|
60
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// ============================================================================
|
|
64
|
-
// IPatternLearningService Implementation
|
|
65
|
-
// ============================================================================
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Learn a pattern from a set of experiences
|
|
69
|
-
*/
|
|
70
|
-
async learnPattern(experiences: Experience[]): Promise<Result<LearnedPattern>> {
|
|
71
|
-
try {
|
|
72
|
-
if (experiences.length < this.config.minExperiencesForPattern) {
|
|
73
|
-
return err(
|
|
74
|
-
new Error(
|
|
75
|
-
`Need at least ${this.config.minExperiencesForPattern} experiences to learn a pattern`
|
|
76
|
-
)
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Analyze experiences to extract common patterns
|
|
81
|
-
const commonActions = this.extractCommonActions(experiences);
|
|
82
|
-
const successRate = this.calculateSuccessRate(experiences);
|
|
83
|
-
|
|
84
|
-
if (successRate < this.config.patternConfidenceThreshold) {
|
|
85
|
-
return err(
|
|
86
|
-
new Error(
|
|
87
|
-
`Success rate ${successRate} below threshold ${this.config.patternConfidenceThreshold}`
|
|
88
|
-
)
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Determine pattern type from experiences
|
|
93
|
-
const patternType = this.inferPatternType(experiences);
|
|
94
|
-
const domain = experiences[0].domain;
|
|
95
|
-
|
|
96
|
-
// Generate pattern template
|
|
97
|
-
const template = this.generatePatternTemplate(experiences, commonActions);
|
|
98
|
-
const context = this.extractPatternContext(experiences);
|
|
99
|
-
|
|
100
|
-
const pattern: LearnedPattern = {
|
|
101
|
-
id: uuidv4(),
|
|
102
|
-
type: patternType,
|
|
103
|
-
domain,
|
|
104
|
-
name: `${patternType}-${domain}-${Date.now()}`,
|
|
105
|
-
description: `Learned pattern from ${experiences.length} experiences with ${successRate * 100}% success rate`,
|
|
106
|
-
confidence: successRate,
|
|
107
|
-
usageCount: 0,
|
|
108
|
-
successRate,
|
|
109
|
-
context,
|
|
110
|
-
template,
|
|
111
|
-
createdAt: new Date(),
|
|
112
|
-
lastUsedAt: new Date(),
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
// Store pattern in memory
|
|
116
|
-
await this.storePattern(pattern);
|
|
117
|
-
|
|
118
|
-
// Record pattern creation for future analysis
|
|
119
|
-
await this.recordPatternCreation(pattern, experiences);
|
|
120
|
-
|
|
121
|
-
return ok(pattern);
|
|
122
|
-
} catch (error) {
|
|
123
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Find patterns matching the given context
|
|
129
|
-
*/
|
|
130
|
-
async findMatchingPatterns(
|
|
131
|
-
context: PatternContext,
|
|
132
|
-
limit = 10
|
|
133
|
-
): Promise<Result<LearnedPattern[]>> {
|
|
134
|
-
try {
|
|
135
|
-
const patterns: LearnedPattern[] = [];
|
|
136
|
-
const keys = await this.memory.search('learning:pattern:*', 100);
|
|
137
|
-
|
|
138
|
-
for (const key of keys) {
|
|
139
|
-
const pattern = await this.memory.get<LearnedPattern>(key);
|
|
140
|
-
if (pattern && this.matchesContext(pattern, context)) {
|
|
141
|
-
patterns.push(pattern);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// Sort by confidence and usage
|
|
146
|
-
patterns.sort((a, b) => {
|
|
147
|
-
const scoreA = a.confidence * 0.6 + (a.successRate * 0.4);
|
|
148
|
-
const scoreB = b.confidence * 0.6 + (b.successRate * 0.4);
|
|
149
|
-
return scoreB - scoreA;
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
return ok(patterns.slice(0, limit));
|
|
153
|
-
} catch (error) {
|
|
154
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Apply a pattern to generate output
|
|
160
|
-
*/
|
|
161
|
-
async applyPattern(
|
|
162
|
-
pattern: LearnedPattern,
|
|
163
|
-
variables: Record<string, unknown>
|
|
164
|
-
): Promise<Result<string>> {
|
|
165
|
-
try {
|
|
166
|
-
let output = pattern.template.content;
|
|
167
|
-
|
|
168
|
-
// Replace template variables
|
|
169
|
-
for (const variable of pattern.template.variables) {
|
|
170
|
-
const value = variables[variable.name] ?? variable.defaultValue;
|
|
171
|
-
if (variable.required && value === undefined) {
|
|
172
|
-
return err(new Error(`Required variable ${variable.name} not provided`));
|
|
173
|
-
}
|
|
174
|
-
output = output.replace(
|
|
175
|
-
new RegExp(`\\{\\{${variable.name}\\}\\}`, 'g'),
|
|
176
|
-
String(value ?? '')
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Update pattern usage stats
|
|
181
|
-
await this.updatePatternUsage(pattern.id);
|
|
182
|
-
|
|
183
|
-
return ok(output);
|
|
184
|
-
} catch (error) {
|
|
185
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Update pattern based on application feedback
|
|
191
|
-
*/
|
|
192
|
-
async updatePatternFeedback(
|
|
193
|
-
patternId: string,
|
|
194
|
-
success: boolean
|
|
195
|
-
): Promise<Result<void>> {
|
|
196
|
-
try {
|
|
197
|
-
const key = `learning:pattern:${patternId}`;
|
|
198
|
-
const pattern = await this.memory.get<LearnedPattern>(key);
|
|
199
|
-
|
|
200
|
-
if (!pattern) {
|
|
201
|
-
return err(new Error(`Pattern ${patternId} not found`));
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Update success rate using exponential moving average
|
|
205
|
-
const alpha = 0.1;
|
|
206
|
-
const newSuccessRate =
|
|
207
|
-
alpha * (success ? 1 : 0) + (1 - alpha) * pattern.successRate;
|
|
208
|
-
|
|
209
|
-
// Update confidence based on usage count
|
|
210
|
-
const usageWeight = Math.min(pattern.usageCount / 100, 1);
|
|
211
|
-
const newConfidence = newSuccessRate * 0.7 + usageWeight * 0.3;
|
|
212
|
-
|
|
213
|
-
const updatedPattern: LearnedPattern = {
|
|
214
|
-
...pattern,
|
|
215
|
-
successRate: newSuccessRate,
|
|
216
|
-
confidence: newConfidence,
|
|
217
|
-
usageCount: pattern.usageCount + 1,
|
|
218
|
-
lastUsedAt: new Date(),
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
await this.memory.set(key, updatedPattern, {
|
|
222
|
-
namespace: 'learning-optimization',
|
|
223
|
-
persist: true,
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
return ok(undefined);
|
|
227
|
-
} catch (error) {
|
|
228
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Consolidate similar patterns into a single improved pattern
|
|
234
|
-
*/
|
|
235
|
-
async consolidatePatterns(patternIds: string[]): Promise<Result<LearnedPattern>> {
|
|
236
|
-
try {
|
|
237
|
-
if (patternIds.length < 2) {
|
|
238
|
-
return err(new Error('Need at least 2 patterns to consolidate'));
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
const patterns: LearnedPattern[] = [];
|
|
242
|
-
for (const id of patternIds) {
|
|
243
|
-
const pattern = await this.memory.get<LearnedPattern>(
|
|
244
|
-
`learning:pattern:${id}`
|
|
245
|
-
);
|
|
246
|
-
if (pattern) {
|
|
247
|
-
patterns.push(pattern);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (patterns.length < 2) {
|
|
252
|
-
return err(new Error('Not enough valid patterns found'));
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Merge patterns - take best template, combine contexts
|
|
256
|
-
const bestPattern = patterns.reduce((best, current) =>
|
|
257
|
-
current.successRate > best.successRate ? current : best
|
|
258
|
-
);
|
|
259
|
-
|
|
260
|
-
const mergedContext: PatternContext = {
|
|
261
|
-
language: bestPattern.context.language,
|
|
262
|
-
framework: bestPattern.context.framework,
|
|
263
|
-
testType: bestPattern.context.testType,
|
|
264
|
-
codeContext: bestPattern.context.codeContext,
|
|
265
|
-
tags: [...new Set(patterns.flatMap((p) => p.context.tags))],
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
const consolidatedPattern: LearnedPattern = {
|
|
269
|
-
id: uuidv4(),
|
|
270
|
-
type: bestPattern.type,
|
|
271
|
-
domain: bestPattern.domain,
|
|
272
|
-
name: `consolidated-${bestPattern.name}`,
|
|
273
|
-
description: `Consolidated from ${patterns.length} patterns`,
|
|
274
|
-
confidence: this.calculateConsolidatedConfidence(patterns),
|
|
275
|
-
usageCount: patterns.reduce((sum, p) => sum + p.usageCount, 0),
|
|
276
|
-
successRate: this.calculateWeightedSuccessRate(patterns),
|
|
277
|
-
context: mergedContext,
|
|
278
|
-
template: bestPattern.template,
|
|
279
|
-
createdAt: new Date(),
|
|
280
|
-
lastUsedAt: new Date(),
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
// Store consolidated pattern
|
|
284
|
-
await this.storePattern(consolidatedPattern);
|
|
285
|
-
|
|
286
|
-
// Archive old patterns
|
|
287
|
-
for (const pattern of patterns) {
|
|
288
|
-
await this.archivePattern(pattern.id);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
return ok(consolidatedPattern);
|
|
292
|
-
} catch (error) {
|
|
293
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Get statistics about patterns
|
|
299
|
-
*/
|
|
300
|
-
async getPatternStats(domain?: DomainName): Promise<Result<PatternStats>> {
|
|
301
|
-
try {
|
|
302
|
-
const keys = await this.memory.search('learning:pattern:*', 500);
|
|
303
|
-
const patterns: LearnedPattern[] = [];
|
|
304
|
-
|
|
305
|
-
for (const key of keys) {
|
|
306
|
-
const pattern = await this.memory.get<LearnedPattern>(key);
|
|
307
|
-
if (pattern && (!domain || pattern.domain === domain)) {
|
|
308
|
-
patterns.push(pattern);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
const byType: Record<PatternType, number> = {
|
|
313
|
-
'test-pattern': 0,
|
|
314
|
-
'fix-pattern': 0,
|
|
315
|
-
'optimization-pattern': 0,
|
|
316
|
-
'detection-pattern': 0,
|
|
317
|
-
'workflow-pattern': 0,
|
|
318
|
-
'failure-pattern': 0,
|
|
319
|
-
};
|
|
320
|
-
|
|
321
|
-
const byDomain: Record<DomainName, number> = {
|
|
322
|
-
'test-generation': 0,
|
|
323
|
-
'test-execution': 0,
|
|
324
|
-
'coverage-analysis': 0,
|
|
325
|
-
'quality-assessment': 0,
|
|
326
|
-
'defect-intelligence': 0,
|
|
327
|
-
'requirements-validation': 0,
|
|
328
|
-
'code-intelligence': 0,
|
|
329
|
-
'security-compliance': 0,
|
|
330
|
-
'contract-testing': 0,
|
|
331
|
-
'visual-accessibility': 0,
|
|
332
|
-
'chaos-resilience': 0,
|
|
333
|
-
'learning-optimization': 0,
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
let totalConfidence = 0;
|
|
337
|
-
let totalSuccessRate = 0;
|
|
338
|
-
|
|
339
|
-
for (const pattern of patterns) {
|
|
340
|
-
byType[pattern.type]++;
|
|
341
|
-
byDomain[pattern.domain]++;
|
|
342
|
-
totalConfidence += pattern.confidence;
|
|
343
|
-
totalSuccessRate += pattern.successRate;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
const topPatterns = patterns
|
|
347
|
-
.sort((a, b) => b.successRate - a.successRate)
|
|
348
|
-
.slice(0, 10);
|
|
349
|
-
|
|
350
|
-
return ok({
|
|
351
|
-
totalPatterns: patterns.length,
|
|
352
|
-
byType,
|
|
353
|
-
byDomain,
|
|
354
|
-
avgConfidence: patterns.length > 0 ? totalConfidence / patterns.length : 0,
|
|
355
|
-
avgSuccessRate:
|
|
356
|
-
patterns.length > 0 ? totalSuccessRate / patterns.length : 0,
|
|
357
|
-
topPatterns,
|
|
358
|
-
});
|
|
359
|
-
} catch (error) {
|
|
360
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// ============================================================================
|
|
365
|
-
// IExperienceMiningService Implementation
|
|
366
|
-
// ============================================================================
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* Record a new experience
|
|
370
|
-
*/
|
|
371
|
-
async recordExperience(
|
|
372
|
-
experience: Omit<Experience, 'id' | 'timestamp'>
|
|
373
|
-
): Promise<Result<string>> {
|
|
374
|
-
try {
|
|
375
|
-
const id = uuidv4();
|
|
376
|
-
const fullExperience: Experience = {
|
|
377
|
-
...experience,
|
|
378
|
-
id,
|
|
379
|
-
timestamp: new Date(),
|
|
380
|
-
};
|
|
381
|
-
|
|
382
|
-
await this.memory.set(`learning:experience:${id}`, fullExperience, {
|
|
383
|
-
namespace: 'learning-optimization',
|
|
384
|
-
ttl: 86400 * 30, // 30 days
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
// Index by agent and domain for faster retrieval
|
|
388
|
-
await this.indexExperience(fullExperience);
|
|
389
|
-
|
|
390
|
-
return ok(id);
|
|
391
|
-
} catch (error) {
|
|
392
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
/**
|
|
397
|
-
* Mine experiences for insights
|
|
398
|
-
*/
|
|
399
|
-
async mineExperiences(
|
|
400
|
-
domain: DomainName,
|
|
401
|
-
timeRange: TimeRange
|
|
402
|
-
): Promise<Result<MinedInsights>> {
|
|
403
|
-
try {
|
|
404
|
-
const experiences = await this.getExperiencesByDomainAndTime(
|
|
405
|
-
domain,
|
|
406
|
-
timeRange
|
|
407
|
-
);
|
|
408
|
-
|
|
409
|
-
if (experiences.length === 0) {
|
|
410
|
-
return ok({
|
|
411
|
-
experienceCount: 0,
|
|
412
|
-
successRate: 0,
|
|
413
|
-
avgReward: 0,
|
|
414
|
-
patterns: [],
|
|
415
|
-
anomalies: [],
|
|
416
|
-
recommendations: ['No experiences found in the given time range'],
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
const successRate = this.calculateSuccessRate(experiences);
|
|
421
|
-
const avgReward = this.calculateAverageReward(experiences);
|
|
422
|
-
const patterns = await this.extractPatternsFromExperiences(experiences);
|
|
423
|
-
const anomalies = this.detectAnomalies(experiences);
|
|
424
|
-
const recommendations = this.generateRecommendations(
|
|
425
|
-
experiences,
|
|
426
|
-
successRate,
|
|
427
|
-
anomalies
|
|
428
|
-
);
|
|
429
|
-
|
|
430
|
-
return ok({
|
|
431
|
-
experienceCount: experiences.length,
|
|
432
|
-
successRate,
|
|
433
|
-
avgReward,
|
|
434
|
-
patterns,
|
|
435
|
-
anomalies,
|
|
436
|
-
recommendations,
|
|
437
|
-
});
|
|
438
|
-
} catch (error) {
|
|
439
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
/**
|
|
444
|
-
* Calculate reward for an experience result
|
|
445
|
-
*/
|
|
446
|
-
calculateReward(result: ExperienceResult, objective: OptimizationObjective): number {
|
|
447
|
-
const metricValue = (result.outcome[objective.metric] as number) ?? 0;
|
|
448
|
-
|
|
449
|
-
// Normalize based on direction
|
|
450
|
-
let normalizedValue: number;
|
|
451
|
-
if (objective.direction === 'maximize') {
|
|
452
|
-
normalizedValue = Math.min(metricValue / 100, 1);
|
|
453
|
-
} else {
|
|
454
|
-
normalizedValue = Math.max(1 - metricValue / 100, 0);
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
// Apply constraints as penalties
|
|
458
|
-
let penalty = 0;
|
|
459
|
-
for (const constraint of objective.constraints) {
|
|
460
|
-
const constraintValue = (result.outcome[constraint.metric] as number) ?? 0;
|
|
461
|
-
const violated = this.isConstraintViolated(constraint, constraintValue);
|
|
462
|
-
if (violated) {
|
|
463
|
-
penalty += 0.2;
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
// Base reward on success and metric value
|
|
468
|
-
const successBonus = result.success ? 0.5 : 0;
|
|
469
|
-
const reward = Math.max(0, normalizedValue + successBonus - penalty);
|
|
470
|
-
|
|
471
|
-
return Math.min(1, reward);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* Get experience replay buffer for an agent
|
|
476
|
-
*/
|
|
477
|
-
async getReplayBuffer(
|
|
478
|
-
agentId: { value: string; domain: DomainName; type: string },
|
|
479
|
-
limit = 100
|
|
480
|
-
): Promise<Result<Experience[]>> {
|
|
481
|
-
try {
|
|
482
|
-
const keys = await this.memory.search(
|
|
483
|
-
`learning:experience:index:agent:${agentId.value}:*`,
|
|
484
|
-
limit
|
|
485
|
-
);
|
|
486
|
-
const experiences: Experience[] = [];
|
|
487
|
-
|
|
488
|
-
for (const key of keys) {
|
|
489
|
-
const experienceId = await this.memory.get<string>(key);
|
|
490
|
-
if (experienceId) {
|
|
491
|
-
const experience = await this.memory.get<Experience>(
|
|
492
|
-
`learning:experience:${experienceId}`
|
|
493
|
-
);
|
|
494
|
-
if (experience) {
|
|
495
|
-
experiences.push(experience);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// Sort by timestamp descending (most recent first)
|
|
501
|
-
experiences.sort(
|
|
502
|
-
(a, b) => b.timestamp.getTime() - a.timestamp.getTime()
|
|
503
|
-
);
|
|
504
|
-
|
|
505
|
-
return ok(experiences.slice(0, limit));
|
|
506
|
-
} catch (error) {
|
|
507
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
/**
|
|
512
|
-
* Cluster similar experiences
|
|
513
|
-
*/
|
|
514
|
-
async clusterExperiences(
|
|
515
|
-
experiences: Experience[]
|
|
516
|
-
): Promise<Result<ExperienceCluster[]>> {
|
|
517
|
-
try {
|
|
518
|
-
if (experiences.length === 0) {
|
|
519
|
-
return ok([]);
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
// Simple clustering based on action similarity
|
|
523
|
-
const clusters: Map<string, Experience[]> = new Map();
|
|
524
|
-
|
|
525
|
-
for (const exp of experiences) {
|
|
526
|
-
let assigned = false;
|
|
527
|
-
for (const [action, cluster] of clusters) {
|
|
528
|
-
if (this.actionsSimilar(exp.action, action)) {
|
|
529
|
-
cluster.push(exp);
|
|
530
|
-
assigned = true;
|
|
531
|
-
break;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
if (!assigned) {
|
|
535
|
-
clusters.set(exp.action, [exp]);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
// Convert to ExperienceCluster format
|
|
540
|
-
const result: ExperienceCluster[] = [];
|
|
541
|
-
let clusterId = 0;
|
|
542
|
-
|
|
543
|
-
for (const [_, clusterExperiences] of clusters) {
|
|
544
|
-
if (clusterExperiences.length >= 2) {
|
|
545
|
-
const centroid = this.calculateCentroid(clusterExperiences);
|
|
546
|
-
const commonActions = this.extractCommonActions(clusterExperiences);
|
|
547
|
-
const avgReward = this.calculateAverageReward(clusterExperiences);
|
|
548
|
-
|
|
549
|
-
result.push({
|
|
550
|
-
id: `cluster-${clusterId++}`,
|
|
551
|
-
centroid,
|
|
552
|
-
experiences: clusterExperiences,
|
|
553
|
-
commonActions,
|
|
554
|
-
avgReward,
|
|
555
|
-
});
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
return ok(result);
|
|
560
|
-
} catch (error) {
|
|
561
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
// ============================================================================
|
|
566
|
-
// Private Helper Methods
|
|
567
|
-
// ============================================================================
|
|
568
|
-
|
|
569
|
-
private async storePattern(pattern: LearnedPattern): Promise<void> {
|
|
570
|
-
await this.memory.set(`learning:pattern:${pattern.id}`, pattern, {
|
|
571
|
-
namespace: 'learning-optimization',
|
|
572
|
-
persist: true,
|
|
573
|
-
});
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
private async archivePattern(patternId: string): Promise<void> {
|
|
577
|
-
const key = `learning:pattern:${patternId}`;
|
|
578
|
-
const pattern = await this.memory.get<LearnedPattern>(key);
|
|
579
|
-
if (pattern) {
|
|
580
|
-
await this.memory.set(`learning:pattern:archived:${patternId}`, pattern, {
|
|
581
|
-
namespace: 'learning-optimization',
|
|
582
|
-
persist: true,
|
|
583
|
-
});
|
|
584
|
-
await this.memory.delete(key);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
private async updatePatternUsage(patternId: string): Promise<void> {
|
|
589
|
-
const key = `learning:pattern:${patternId}`;
|
|
590
|
-
const pattern = await this.memory.get<LearnedPattern>(key);
|
|
591
|
-
if (pattern) {
|
|
592
|
-
const updated: LearnedPattern = {
|
|
593
|
-
...pattern,
|
|
594
|
-
usageCount: pattern.usageCount + 1,
|
|
595
|
-
lastUsedAt: new Date(),
|
|
596
|
-
};
|
|
597
|
-
await this.memory.set(key, updated, {
|
|
598
|
-
namespace: 'learning-optimization',
|
|
599
|
-
persist: true,
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
private async recordPatternCreation(
|
|
605
|
-
pattern: LearnedPattern,
|
|
606
|
-
experiences: Experience[]
|
|
607
|
-
): Promise<void> {
|
|
608
|
-
await this.memory.set(
|
|
609
|
-
`learning:pattern:creation:${pattern.id}`,
|
|
610
|
-
{
|
|
611
|
-
patternId: pattern.id,
|
|
612
|
-
experienceIds: experiences.map((e) => e.id),
|
|
613
|
-
createdAt: new Date(),
|
|
614
|
-
},
|
|
615
|
-
{ namespace: 'learning-optimization', persist: true }
|
|
616
|
-
);
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
private async indexExperience(experience: Experience): Promise<void> {
|
|
620
|
-
// Index by agent
|
|
621
|
-
await this.memory.set(
|
|
622
|
-
`learning:experience:index:agent:${experience.agentId.value}:${experience.id}`,
|
|
623
|
-
experience.id,
|
|
624
|
-
{ namespace: 'learning-optimization', ttl: 86400 * 30 }
|
|
625
|
-
);
|
|
626
|
-
|
|
627
|
-
// Index by domain
|
|
628
|
-
await this.memory.set(
|
|
629
|
-
`learning:experience:index:domain:${experience.domain}:${experience.id}`,
|
|
630
|
-
experience.id,
|
|
631
|
-
{ namespace: 'learning-optimization', ttl: 86400 * 30 }
|
|
632
|
-
);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
private async getExperiencesByDomainAndTime(
|
|
636
|
-
domain: DomainName,
|
|
637
|
-
timeRange: TimeRange
|
|
638
|
-
): Promise<Experience[]> {
|
|
639
|
-
const keys = await this.memory.search(
|
|
640
|
-
`learning:experience:index:domain:${domain}:*`,
|
|
641
|
-
1000
|
|
642
|
-
);
|
|
643
|
-
const experiences: Experience[] = [];
|
|
644
|
-
|
|
645
|
-
for (const key of keys) {
|
|
646
|
-
const experienceId = await this.memory.get<string>(key);
|
|
647
|
-
if (experienceId) {
|
|
648
|
-
const experience = await this.memory.get<Experience>(
|
|
649
|
-
`learning:experience:${experienceId}`
|
|
650
|
-
);
|
|
651
|
-
if (experience && timeRange.contains(experience.timestamp)) {
|
|
652
|
-
experiences.push(experience);
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
return experiences;
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
private async extractPatternsFromExperiences(
|
|
661
|
-
experiences: Experience[]
|
|
662
|
-
): Promise<LearnedPattern[]> {
|
|
663
|
-
// Group successful experiences by action type
|
|
664
|
-
const successfulExperiences = experiences.filter((e) => e.result.success);
|
|
665
|
-
const actionGroups: Map<string, Experience[]> = new Map();
|
|
666
|
-
|
|
667
|
-
for (const exp of successfulExperiences) {
|
|
668
|
-
const existing = actionGroups.get(exp.action) || [];
|
|
669
|
-
existing.push(exp);
|
|
670
|
-
actionGroups.set(exp.action, existing);
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
const patterns: LearnedPattern[] = [];
|
|
674
|
-
for (const [_, groupExperiences] of actionGroups) {
|
|
675
|
-
if (groupExperiences.length >= this.config.minExperiencesForPattern) {
|
|
676
|
-
const result = await this.learnPattern(groupExperiences);
|
|
677
|
-
if (result.success) {
|
|
678
|
-
patterns.push(result.value);
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
return patterns;
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
private matchesContext(
|
|
687
|
-
pattern: LearnedPattern,
|
|
688
|
-
context: PatternContext
|
|
689
|
-
): boolean {
|
|
690
|
-
if (context.language && pattern.context.language !== context.language) {
|
|
691
|
-
return false;
|
|
692
|
-
}
|
|
693
|
-
if (context.framework && pattern.context.framework !== context.framework) {
|
|
694
|
-
return false;
|
|
695
|
-
}
|
|
696
|
-
if (context.testType && pattern.context.testType !== context.testType) {
|
|
697
|
-
return false;
|
|
698
|
-
}
|
|
699
|
-
if (context.tags.length > 0) {
|
|
700
|
-
const hasMatchingTag = context.tags.some((tag) =>
|
|
701
|
-
pattern.context.tags.includes(tag)
|
|
702
|
-
);
|
|
703
|
-
if (!hasMatchingTag) {
|
|
704
|
-
return false;
|
|
705
|
-
}
|
|
706
|
-
}
|
|
707
|
-
return true;
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
private extractCommonActions(experiences: Experience[]): string[] {
|
|
711
|
-
const actionCounts: Map<string, number> = new Map();
|
|
712
|
-
for (const exp of experiences) {
|
|
713
|
-
const count = actionCounts.get(exp.action) || 0;
|
|
714
|
-
actionCounts.set(exp.action, count + 1);
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
return Array.from(actionCounts.entries())
|
|
718
|
-
.filter(([_, count]) => count >= experiences.length * 0.3)
|
|
719
|
-
.map(([action]) => action);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
private calculateAverageReward(experiences: Experience[]): number {
|
|
723
|
-
if (experiences.length === 0) return 0;
|
|
724
|
-
const sum = experiences.reduce((acc, exp) => acc + exp.reward, 0);
|
|
725
|
-
return sum / experiences.length;
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
private calculateSuccessRate(experiences: Experience[]): number {
|
|
729
|
-
if (experiences.length === 0) return 0;
|
|
730
|
-
const successCount = experiences.filter((e) => e.result.success).length;
|
|
731
|
-
return successCount / experiences.length;
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
private inferPatternType(experiences: Experience[]): PatternType {
|
|
735
|
-
const actions = experiences.map((e) => e.action.toLowerCase());
|
|
736
|
-
|
|
737
|
-
if (actions.some((a) => a.includes('test') || a.includes('generate'))) {
|
|
738
|
-
return 'test-pattern';
|
|
739
|
-
}
|
|
740
|
-
if (actions.some((a) => a.includes('fix') || a.includes('repair'))) {
|
|
741
|
-
return 'fix-pattern';
|
|
742
|
-
}
|
|
743
|
-
if (actions.some((a) => a.includes('optimize') || a.includes('improve'))) {
|
|
744
|
-
return 'optimization-pattern';
|
|
745
|
-
}
|
|
746
|
-
if (actions.some((a) => a.includes('detect') || a.includes('find'))) {
|
|
747
|
-
return 'detection-pattern';
|
|
748
|
-
}
|
|
749
|
-
if (actions.some((a) => a.includes('workflow') || a.includes('process'))) {
|
|
750
|
-
return 'workflow-pattern';
|
|
751
|
-
}
|
|
752
|
-
if (actions.some((a) => a.includes('fail') || a.includes('error'))) {
|
|
753
|
-
return 'failure-pattern';
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
return 'workflow-pattern';
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
private generatePatternTemplate(
|
|
760
|
-
experiences: Experience[],
|
|
761
|
-
commonActions: string[]
|
|
762
|
-
): PatternTemplate {
|
|
763
|
-
const variables: TemplateVariable[] = [
|
|
764
|
-
{
|
|
765
|
-
name: 'domain',
|
|
766
|
-
type: 'string',
|
|
767
|
-
required: true,
|
|
768
|
-
description: 'Target domain for the pattern',
|
|
769
|
-
},
|
|
770
|
-
{
|
|
771
|
-
name: 'action',
|
|
772
|
-
type: 'string',
|
|
773
|
-
required: true,
|
|
774
|
-
defaultValue: commonActions[0],
|
|
775
|
-
description: 'Primary action to execute',
|
|
776
|
-
},
|
|
777
|
-
];
|
|
778
|
-
|
|
779
|
-
const content = `// Pattern learned from ${experiences.length} experiences
|
|
780
|
-
// Common actions: ${commonActions.join(', ')}
|
|
781
|
-
// Apply to domain: {{domain}}
|
|
782
|
-
// Execute action: {{action}}`;
|
|
783
|
-
|
|
784
|
-
return {
|
|
785
|
-
type: 'workflow',
|
|
786
|
-
content,
|
|
787
|
-
variables,
|
|
788
|
-
};
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
private extractPatternContext(experiences: Experience[]): PatternContext {
|
|
792
|
-
const tags = new Set<string>();
|
|
793
|
-
let language: string | undefined;
|
|
794
|
-
let framework: string | undefined;
|
|
795
|
-
|
|
796
|
-
for (const exp of experiences) {
|
|
797
|
-
const context = exp.state.context;
|
|
798
|
-
if (context.language) {
|
|
799
|
-
language = context.language as string;
|
|
800
|
-
}
|
|
801
|
-
if (context.framework) {
|
|
802
|
-
framework = context.framework as string;
|
|
803
|
-
}
|
|
804
|
-
if (context.tags && Array.isArray(context.tags)) {
|
|
805
|
-
for (const tag of context.tags) {
|
|
806
|
-
tags.add(tag as string);
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
return {
|
|
812
|
-
language,
|
|
813
|
-
framework,
|
|
814
|
-
tags: Array.from(tags),
|
|
815
|
-
};
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
private calculateConsolidatedConfidence(patterns: LearnedPattern[]): number {
|
|
819
|
-
const totalUsage = patterns.reduce((sum, p) => sum + p.usageCount, 0);
|
|
820
|
-
let weightedConfidence = 0;
|
|
821
|
-
|
|
822
|
-
for (const pattern of patterns) {
|
|
823
|
-
const weight = totalUsage > 0 ? pattern.usageCount / totalUsage : 1 / patterns.length;
|
|
824
|
-
weightedConfidence += pattern.confidence * weight;
|
|
825
|
-
}
|
|
826
|
-
|
|
827
|
-
return weightedConfidence;
|
|
828
|
-
}
|
|
829
|
-
|
|
830
|
-
private calculateWeightedSuccessRate(patterns: LearnedPattern[]): number {
|
|
831
|
-
const totalUsage = patterns.reduce((sum, p) => sum + p.usageCount, 0);
|
|
832
|
-
let weightedRate = 0;
|
|
833
|
-
|
|
834
|
-
for (const pattern of patterns) {
|
|
835
|
-
const weight = totalUsage > 0 ? pattern.usageCount / totalUsage : 1 / patterns.length;
|
|
836
|
-
weightedRate += pattern.successRate * weight;
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
return weightedRate;
|
|
840
|
-
}
|
|
841
|
-
|
|
842
|
-
private detectAnomalies(experiences: Experience[]): ExperienceAnomaly[] {
|
|
843
|
-
const anomalies: ExperienceAnomaly[] = [];
|
|
844
|
-
const avgReward = this.calculateAverageReward(experiences);
|
|
845
|
-
const rewardStdDev = this.calculateStdDev(experiences.map((e) => e.reward));
|
|
846
|
-
|
|
847
|
-
for (const exp of experiences) {
|
|
848
|
-
const deviation = Math.abs(exp.reward - avgReward) / (rewardStdDev || 1);
|
|
849
|
-
|
|
850
|
-
if (deviation > this.config.anomalyDeviationThreshold) {
|
|
851
|
-
let type: ExperienceAnomaly['type'] = 'outlier-reward';
|
|
852
|
-
if (exp.result.success && exp.reward < avgReward) {
|
|
853
|
-
type = 'unexpected-success';
|
|
854
|
-
} else if (!exp.result.success && exp.reward > avgReward) {
|
|
855
|
-
type = 'unexpected-failure';
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
anomalies.push({
|
|
859
|
-
experienceId: exp.id,
|
|
860
|
-
type,
|
|
861
|
-
description: `Reward ${exp.reward.toFixed(2)} deviates ${deviation.toFixed(2)} std from mean ${avgReward.toFixed(2)}`,
|
|
862
|
-
deviation,
|
|
863
|
-
});
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
return anomalies;
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
private calculateStdDev(values: number[]): number {
|
|
871
|
-
if (values.length === 0) return 0;
|
|
872
|
-
const mean = values.reduce((a, b) => a + b, 0) / values.length;
|
|
873
|
-
const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));
|
|
874
|
-
return Math.sqrt(squaredDiffs.reduce((a, b) => a + b, 0) / values.length);
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
private generateRecommendations(
|
|
878
|
-
experiences: Experience[],
|
|
879
|
-
successRate: number,
|
|
880
|
-
anomalies: ExperienceAnomaly[]
|
|
881
|
-
): string[] {
|
|
882
|
-
const recommendations: string[] = [];
|
|
883
|
-
|
|
884
|
-
if (successRate < 0.5) {
|
|
885
|
-
recommendations.push(
|
|
886
|
-
'Low success rate detected. Consider reviewing the approach or gathering more training data.'
|
|
887
|
-
);
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
if (anomalies.length > experiences.length * 0.1) {
|
|
891
|
-
recommendations.push(
|
|
892
|
-
'High anomaly rate detected. Investigate unexpected outcomes for potential improvements.'
|
|
893
|
-
);
|
|
894
|
-
}
|
|
895
|
-
|
|
896
|
-
const avgDuration =
|
|
897
|
-
experiences.reduce((sum, e) => sum + e.result.duration, 0) /
|
|
898
|
-
experiences.length;
|
|
899
|
-
if (avgDuration > 60000) {
|
|
900
|
-
recommendations.push(
|
|
901
|
-
'Average operation duration is high. Consider optimizing performance.'
|
|
902
|
-
);
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
if (experiences.length < 10) {
|
|
906
|
-
recommendations.push(
|
|
907
|
-
'Limited experience data. Collect more data points for better insights.'
|
|
908
|
-
);
|
|
909
|
-
}
|
|
910
|
-
|
|
911
|
-
if (recommendations.length === 0) {
|
|
912
|
-
recommendations.push(
|
|
913
|
-
'Performance metrics are within acceptable ranges. Continue monitoring.'
|
|
914
|
-
);
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
return recommendations;
|
|
918
|
-
}
|
|
919
|
-
|
|
920
|
-
private actionsSimilar(action1: string, action2: string): boolean {
|
|
921
|
-
const normalize = (s: string) => s.toLowerCase().replace(/[^a-z]/g, '');
|
|
922
|
-
const n1 = normalize(action1);
|
|
923
|
-
const n2 = normalize(action2);
|
|
924
|
-
|
|
925
|
-
// Simple similarity check - could be improved with edit distance
|
|
926
|
-
if (n1 === n2) return true;
|
|
927
|
-
if (n1.includes(n2) || n2.includes(n1)) return true;
|
|
928
|
-
|
|
929
|
-
return false;
|
|
930
|
-
}
|
|
931
|
-
|
|
932
|
-
private calculateCentroid(experiences: Experience[]): StateSnapshot {
|
|
933
|
-
const avgMetrics: Record<string, number> = {};
|
|
934
|
-
const metricCounts: Record<string, number> = {};
|
|
935
|
-
|
|
936
|
-
for (const exp of experiences) {
|
|
937
|
-
for (const [key, value] of Object.entries(exp.state.metrics)) {
|
|
938
|
-
avgMetrics[key] = (avgMetrics[key] || 0) + value;
|
|
939
|
-
metricCounts[key] = (metricCounts[key] || 0) + 1;
|
|
940
|
-
}
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
for (const key of Object.keys(avgMetrics)) {
|
|
944
|
-
avgMetrics[key] /= metricCounts[key];
|
|
945
|
-
}
|
|
946
|
-
|
|
947
|
-
return {
|
|
948
|
-
context: {},
|
|
949
|
-
metrics: avgMetrics,
|
|
950
|
-
};
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
private isConstraintViolated(
|
|
954
|
-
constraint: { metric: string; operator: string; value: number },
|
|
955
|
-
actualValue: number
|
|
956
|
-
): boolean {
|
|
957
|
-
switch (constraint.operator) {
|
|
958
|
-
case 'lt':
|
|
959
|
-
return actualValue >= constraint.value;
|
|
960
|
-
case 'gt':
|
|
961
|
-
return actualValue <= constraint.value;
|
|
962
|
-
case 'lte':
|
|
963
|
-
return actualValue > constraint.value;
|
|
964
|
-
case 'gte':
|
|
965
|
-
return actualValue < constraint.value;
|
|
966
|
-
case 'eq':
|
|
967
|
-
return actualValue !== constraint.value;
|
|
968
|
-
default:
|
|
969
|
-
return false;
|
|
970
|
-
}
|
|
971
|
-
}
|
|
972
|
-
}
|