agentic-qe 1.0.5 → 1.2.0
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/.claude/agents/qe-coverage-analyzer.md +8 -0
- package/.claude/agents/qe-flaky-test-hunter.md +9 -1
- package/.claude/agents/qe-quality-analyzer.md +405 -0
- package/.claude/agents/qe-test-generator.md +7 -0
- package/.claude/agents/reasoning/agent.md +816 -0
- package/.claude/agents/reasoning/goal-planner.md +73 -0
- package/.claude/settings.json +21 -20
- package/.claude/skills/README.md +124 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
- package/.claude/skills/agentdb-learning/SKILL.md +545 -0
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
- package/.claude/skills/agentic-quality-engineering/SKILL.md +604 -0
- package/.claude/skills/api-testing-patterns/SKILL.md +686 -0
- package/.claude/skills/bug-reporting-excellence/SKILL.md +632 -0
- package/.claude/skills/code-review-quality/SKILL.md +683 -0
- package/.claude/skills/consultancy-practices/SKILL.md +540 -0
- package/.claude/skills/context-driven-testing/SKILL.md +466 -0
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +676 -0
- package/.claude/skills/flow-nexus-neural/SKILL.md +738 -0
- package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -0
- package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -0
- package/.claude/skills/github-code-review/SKILL.md +1140 -0
- package/.claude/skills/github-multi-repo/SKILL.md +874 -0
- package/.claude/skills/github-project-management/SKILL.md +1277 -0
- package/.claude/skills/github-release-management/SKILL.md +1081 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -0
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -0
- package/.claude/skills/holistic-testing-pact/SKILL.md +225 -0
- package/.claude/skills/hooks-automation/SKILL.md +1201 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/performance-analysis/SKILL.md +563 -0
- package/.claude/skills/performance-testing/SKILL.md +662 -0
- package/.claude/skills/quality-metrics/SKILL.md +592 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/.claude/skills/refactoring-patterns/SKILL.md +778 -0
- package/.claude/skills/risk-based-testing/SKILL.md +721 -0
- package/.claude/skills/security-testing/SKILL.md +651 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -0
- package/.claude/skills/stream-chain/SKILL.md +563 -0
- package/.claude/skills/swarm-advanced/SKILL.md +973 -0
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
- package/.claude/skills/tdd-london-chicago/SKILL.md +567 -0
- package/.claude/skills/technical-writing/SKILL.md +235 -0
- package/.claude/skills/test-automation-strategy/SKILL.md +842 -0
- package/.claude/skills/verification-quality/SKILL.md +649 -0
- package/.claude/skills/xp-practices/SKILL.md +671 -0
- package/.claude/statusline-command.sh +176 -0
- package/CHANGELOG.md +645 -1
- package/CONTRIBUTING.md +51 -0
- package/README.md +758 -162
- package/bin/aqe +90 -938
- package/config/improvement-loop.config.ts +323 -0
- package/config/neural-agent.config.ts +197 -0
- package/dist/adapters/MemoryStoreAdapter.d.ts +16 -16
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +22 -16
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts +69 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +382 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +69 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +418 -51
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +13 -13
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +76 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +375 -13
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +2 -2
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +84 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +197 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/NeuralAgentExtension.d.ts +117 -0
- package/dist/agents/NeuralAgentExtension.d.ts.map +1 -0
- package/dist/agents/NeuralAgentExtension.js +288 -0
- package/dist/agents/NeuralAgentExtension.js.map +1 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +4 -3
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +7 -7
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +2 -2
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.js +5 -5
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +7 -7
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +1 -1
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +6 -6
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +1 -3
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +53 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +372 -31
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/mixins/NeuralCapableMixin.d.ts +130 -0
- package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +1 -0
- package/dist/agents/mixins/NeuralCapableMixin.js +358 -0
- package/dist/agents/mixins/NeuralCapableMixin.js.map +1 -0
- package/dist/agents/mixins/QUICCapableMixin.d.ts +34 -0
- package/dist/agents/mixins/QUICCapableMixin.d.ts.map +1 -0
- package/dist/agents/mixins/QUICCapableMixin.js +346 -0
- package/dist/agents/mixins/QUICCapableMixin.js.map +1 -0
- package/dist/cli/commands/agent/index.d.ts +5 -0
- package/dist/cli/commands/agent/index.d.ts.map +1 -1
- package/dist/cli/commands/agent/index.js +11 -6
- package/dist/cli/commands/agent/index.js.map +1 -1
- package/dist/cli/commands/agent/kill.d.ts +13 -0
- package/dist/cli/commands/agent/kill.d.ts.map +1 -0
- package/dist/cli/commands/agent/kill.js +65 -0
- package/dist/cli/commands/agent/kill.js.map +1 -0
- package/dist/cli/commands/agent/list.d.ts +19 -0
- package/dist/cli/commands/agent/list.d.ts.map +1 -0
- package/dist/cli/commands/agent/list.js +92 -0
- package/dist/cli/commands/agent/list.js.map +1 -0
- package/dist/cli/commands/agent/logs.d.ts +14 -0
- package/dist/cli/commands/agent/logs.d.ts.map +1 -0
- package/dist/cli/commands/agent/logs.js +77 -0
- package/dist/cli/commands/agent/logs.js.map +1 -0
- package/dist/cli/commands/agent/metrics.d.ts +21 -0
- package/dist/cli/commands/agent/metrics.d.ts.map +1 -0
- package/dist/cli/commands/agent/metrics.js +87 -0
- package/dist/cli/commands/agent/metrics.js.map +1 -0
- package/dist/cli/commands/agent/spawn.d.ts +28 -0
- package/dist/cli/commands/agent/spawn.d.ts.map +1 -0
- package/dist/cli/commands/agent/spawn.js +83 -0
- package/dist/cli/commands/agent/spawn.js.map +1 -0
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +57 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1127 -42
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/commands/skills/index.d.ts +51 -0
- package/dist/cli/commands/skills/index.d.ts.map +1 -0
- package/dist/cli/commands/skills/index.js +364 -0
- package/dist/cli/commands/skills/index.js.map +1 -0
- package/dist/cli/index.js +458 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/EventBus.d.ts +38 -0
- package/dist/core/EventBus.d.ts.map +1 -1
- package/dist/core/EventBus.js +176 -31
- package/dist/core/EventBus.js.map +1 -1
- package/dist/core/FleetManager.d.ts +35 -1
- package/dist/core/FleetManager.d.ts.map +1 -1
- package/dist/core/FleetManager.js +121 -45
- package/dist/core/FleetManager.js.map +1 -1
- package/dist/core/MemoryManager.d.ts +19 -1
- package/dist/core/MemoryManager.d.ts.map +1 -1
- package/dist/core/MemoryManager.js +25 -1
- package/dist/core/MemoryManager.js.map +1 -1
- package/dist/core/embeddings/EmbeddingCache.d.ts +134 -0
- package/dist/core/embeddings/EmbeddingCache.d.ts.map +1 -0
- package/dist/core/embeddings/EmbeddingCache.js +239 -0
- package/dist/core/embeddings/EmbeddingCache.js.map +1 -0
- package/dist/core/embeddings/EmbeddingGenerator.d.ts +224 -0
- package/dist/core/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/core/embeddings/EmbeddingGenerator.js +459 -0
- package/dist/core/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/core/embeddings/index.d.ts +15 -0
- package/dist/core/embeddings/index.d.ts.map +1 -0
- package/dist/core/embeddings/index.js +22 -0
- package/dist/core/embeddings/index.js.map +1 -0
- package/dist/core/memory/AgentDBIntegration.d.ts +35 -0
- package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -0
- package/dist/core/memory/AgentDBIntegration.js +75 -0
- package/dist/core/memory/AgentDBIntegration.js.map +1 -0
- package/dist/core/memory/AgentDBManager.d.ts +200 -0
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -0
- package/dist/core/memory/AgentDBManager.js +263 -0
- package/dist/core/memory/AgentDBManager.js.map +1 -0
- package/dist/core/memory/AgentDBService.d.ts +160 -0
- package/dist/core/memory/AgentDBService.d.ts.map +1 -0
- package/dist/core/memory/AgentDBService.js +450 -0
- package/dist/core/memory/AgentDBService.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +51 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.js +230 -0
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts +58 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -0
- package/dist/core/memory/ReasoningBankAdapter.js +80 -0
- package/dist/core/memory/ReasoningBankAdapter.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +79 -2
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +243 -52
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +4 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +9 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/neural/NeuralTrainer.d.ts +137 -0
- package/dist/core/neural/NeuralTrainer.d.ts.map +1 -0
- package/dist/core/neural/NeuralTrainer.js +543 -0
- package/dist/core/neural/NeuralTrainer.js.map +1 -0
- package/dist/core/neural/index.d.ts +8 -0
- package/dist/core/neural/index.d.ts.map +1 -0
- package/dist/core/neural/index.js +24 -0
- package/dist/core/neural/index.js.map +1 -0
- package/dist/core/neural/types.d.ts +216 -0
- package/dist/core/neural/types.d.ts.map +1 -0
- package/dist/core/neural/types.js +8 -0
- package/dist/core/neural/types.js.map +1 -0
- package/dist/core/security/CertificateValidator.d.ts +130 -0
- package/dist/core/security/CertificateValidator.d.ts.map +1 -0
- package/dist/core/security/CertificateValidator.js +376 -0
- package/dist/core/security/CertificateValidator.js.map +1 -0
- package/dist/core/transport/QUICTransport.d.ts +62 -0
- package/dist/core/transport/QUICTransport.d.ts.map +1 -0
- package/dist/core/transport/QUICTransport.js +381 -0
- package/dist/core/transport/QUICTransport.js.map +1 -0
- package/dist/core/transport/SecureQUICTransport.d.ts +71 -0
- package/dist/core/transport/SecureQUICTransport.d.ts.map +1 -0
- package/dist/core/transport/SecureQUICTransport.js +253 -0
- package/dist/core/transport/SecureQUICTransport.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/AdvancedFeatureExtractor.d.ts +123 -0
- package/dist/learning/AdvancedFeatureExtractor.d.ts.map +1 -0
- package/dist/learning/AdvancedFeatureExtractor.js +423 -0
- package/dist/learning/AdvancedFeatureExtractor.js.map +1 -0
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +67 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +336 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +55 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +237 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +133 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +412 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/ImprovementWorker.d.ts +83 -0
- package/dist/learning/ImprovementWorker.d.ts.map +1 -0
- package/dist/learning/ImprovementWorker.js +164 -0
- package/dist/learning/ImprovementWorker.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/NeuralPatternMatcher.d.ts +184 -0
- package/dist/learning/NeuralPatternMatcher.d.ts.map +1 -0
- package/dist/learning/NeuralPatternMatcher.js +702 -0
- package/dist/learning/NeuralPatternMatcher.js.map +1 -0
- package/dist/learning/NeuralTrainer.d.ts +209 -0
- package/dist/learning/NeuralTrainer.d.ts.map +1 -0
- package/dist/learning/NeuralTrainer.js +478 -0
- package/dist/learning/NeuralTrainer.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +16 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +32 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +289 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +25 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/MCPToolRegistry.d.ts +34 -0
- package/dist/mcp/MCPToolRegistry.d.ts.map +1 -0
- package/dist/mcp/MCPToolRegistry.js +48 -0
- package/dist/mcp/MCPToolRegistry.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -4
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +94 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +7 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +17 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/transport/QUICTransport.d.ts +340 -0
- package/dist/transport/QUICTransport.d.ts.map +1 -0
- package/dist/transport/QUICTransport.js +814 -0
- package/dist/transport/QUICTransport.js.map +1 -0
- package/dist/transport/UDPTransport.d.ts +348 -0
- package/dist/transport/UDPTransport.d.ts.map +1 -0
- package/dist/transport/UDPTransport.js +820 -0
- package/dist/transport/UDPTransport.js.map +1 -0
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/dist/types/quic.d.ts +339 -0
- package/dist/types/quic.d.ts.map +1 -0
- package/dist/types/quic.js +48 -0
- package/dist/types/quic.js.map +1 -0
- package/dist/utils/Config.js +1 -1
- package/dist/utils/Config.js.map +1 -1
- package/dist/utils/Database.d.ts +14 -0
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +51 -4
- package/dist/utils/Database.js.map +1 -1
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +111 -26
- package/dist/utils/Logger.js.map +1 -1
- package/package.json +54 -9
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Generator - Convert patterns into vector embeddings
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Phase 1 (Simple): Hash-based embeddings for quick start
|
|
6
|
+
* - Phase 2 (ML): Transformers.js for production embeddings
|
|
7
|
+
* - Caching for performance optimization
|
|
8
|
+
* - Batch processing support
|
|
9
|
+
* - Graceful fallback if ML models unavailable
|
|
10
|
+
*
|
|
11
|
+
* Models:
|
|
12
|
+
* - Text: "Xenova/all-MiniLM-L6-v2" (384 dimensions)
|
|
13
|
+
* - Code: "microsoft/codebert-base" (768 dimensions)
|
|
14
|
+
*
|
|
15
|
+
* Performance:
|
|
16
|
+
* - Hash-based: ~50µs per embedding
|
|
17
|
+
* - ML-based: ~5-10ms per embedding (cached)
|
|
18
|
+
* - Batch: ~2ms per embedding (10+ texts)
|
|
19
|
+
*
|
|
20
|
+
* @module EmbeddingGenerator
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Embedding generation options
|
|
24
|
+
*/
|
|
25
|
+
export interface EmbeddingOptions {
|
|
26
|
+
/** Use ML-based embeddings (default: true) */
|
|
27
|
+
useML?: boolean;
|
|
28
|
+
/** Cache embeddings for performance (default: true) */
|
|
29
|
+
useCache?: boolean;
|
|
30
|
+
/** Normalize embeddings to unit length (default: true) */
|
|
31
|
+
normalize?: boolean;
|
|
32
|
+
/** Language for code embeddings (e.g., 'typescript', 'python') */
|
|
33
|
+
language?: string;
|
|
34
|
+
/** Model to use ('text' | 'code') */
|
|
35
|
+
model?: 'text' | 'code';
|
|
36
|
+
/** Target dimension (for hash-based only) */
|
|
37
|
+
dimension?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Embedding result
|
|
41
|
+
*/
|
|
42
|
+
export interface EmbeddingResult {
|
|
43
|
+
/** Vector embedding */
|
|
44
|
+
embedding: number[];
|
|
45
|
+
/** Embedding dimension */
|
|
46
|
+
dimension: number;
|
|
47
|
+
/** Method used ('hash' | 'ml') */
|
|
48
|
+
method: 'hash' | 'ml';
|
|
49
|
+
/** Generation time in milliseconds */
|
|
50
|
+
generationTime: number;
|
|
51
|
+
/** Whether result was cached */
|
|
52
|
+
cached: boolean;
|
|
53
|
+
/** Model name used */
|
|
54
|
+
model: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Batch embedding result
|
|
58
|
+
*/
|
|
59
|
+
export interface BatchEmbeddingResult {
|
|
60
|
+
/** Array of embeddings */
|
|
61
|
+
embeddings: number[][];
|
|
62
|
+
/** Total generation time */
|
|
63
|
+
totalTime: number;
|
|
64
|
+
/** Average time per embedding */
|
|
65
|
+
avgTime: number;
|
|
66
|
+
/** Number of cache hits */
|
|
67
|
+
cacheHits: number;
|
|
68
|
+
/** Method used */
|
|
69
|
+
method: 'hash' | 'ml';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Embedding Generator
|
|
73
|
+
*
|
|
74
|
+
* Provides both simple hash-based and ML-based embedding generation
|
|
75
|
+
* with intelligent fallback and caching.
|
|
76
|
+
*/
|
|
77
|
+
export declare class EmbeddingGenerator {
|
|
78
|
+
private cacheSize;
|
|
79
|
+
private autoInitML;
|
|
80
|
+
private cache;
|
|
81
|
+
private mlAvailable;
|
|
82
|
+
private pipeline;
|
|
83
|
+
private codePipeline;
|
|
84
|
+
private initPromise;
|
|
85
|
+
private readonly TEXT_MODEL;
|
|
86
|
+
private readonly CODE_MODEL;
|
|
87
|
+
private readonly TEXT_DIMENSION;
|
|
88
|
+
private readonly CODE_DIMENSION;
|
|
89
|
+
private readonly DEFAULT_HASH_DIMENSION;
|
|
90
|
+
/**
|
|
91
|
+
* Create a new embedding generator
|
|
92
|
+
*
|
|
93
|
+
* @param cacheSize - Maximum number of cached embeddings (default: 10000)
|
|
94
|
+
* @param autoInitML - Automatically initialize ML models (default: false)
|
|
95
|
+
*/
|
|
96
|
+
constructor(cacheSize?: number, autoInitML?: boolean);
|
|
97
|
+
/**
|
|
98
|
+
* Initialize ML models
|
|
99
|
+
*
|
|
100
|
+
* Lazy-loads Transformers.js models for production embeddings.
|
|
101
|
+
* Falls back to hash-based if models unavailable.
|
|
102
|
+
*/
|
|
103
|
+
initializeML(): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Initialize code embedding model
|
|
106
|
+
*
|
|
107
|
+
* Separate initialization for code model to avoid loading if not needed.
|
|
108
|
+
*/
|
|
109
|
+
initializeCodeModel(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Generate text embedding
|
|
112
|
+
*
|
|
113
|
+
* @param text - Text to embed
|
|
114
|
+
* @param options - Embedding options
|
|
115
|
+
* @returns Embedding result with vector and metadata
|
|
116
|
+
*/
|
|
117
|
+
generateTextEmbedding(text: string, options?: EmbeddingOptions): Promise<EmbeddingResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Generate code embedding
|
|
120
|
+
*
|
|
121
|
+
* @param code - Code to embed
|
|
122
|
+
* @param language - Programming language
|
|
123
|
+
* @param options - Embedding options
|
|
124
|
+
* @returns Embedding result
|
|
125
|
+
*/
|
|
126
|
+
generateCodeEmbedding(code: string, language: string, options?: EmbeddingOptions): Promise<EmbeddingResult>;
|
|
127
|
+
/**
|
|
128
|
+
* Generate batch text embeddings
|
|
129
|
+
*
|
|
130
|
+
* More efficient than generating one at a time.
|
|
131
|
+
*
|
|
132
|
+
* @param texts - Array of texts to embed
|
|
133
|
+
* @param options - Embedding options
|
|
134
|
+
* @returns Batch embedding result
|
|
135
|
+
*/
|
|
136
|
+
generateBatchTextEmbeddings(texts: string[], options?: EmbeddingOptions): Promise<BatchEmbeddingResult>;
|
|
137
|
+
/**
|
|
138
|
+
* Generate hash-based embedding
|
|
139
|
+
*
|
|
140
|
+
* Fast, deterministic embedding using cryptographic hashing.
|
|
141
|
+
* Suitable for testing and development.
|
|
142
|
+
*
|
|
143
|
+
* @param text - Text to embed
|
|
144
|
+
* @param dimension - Target dimension (default: 256)
|
|
145
|
+
* @param salt - Optional salt for different embeddings (default: '')
|
|
146
|
+
* @returns Vector embedding
|
|
147
|
+
*/
|
|
148
|
+
generateHashEmbedding(text: string, dimension?: number, salt?: string): number[];
|
|
149
|
+
/**
|
|
150
|
+
* Generate ML-based text embedding
|
|
151
|
+
*
|
|
152
|
+
* Uses Transformers.js for production-quality embeddings.
|
|
153
|
+
*
|
|
154
|
+
* @param text - Text to embed
|
|
155
|
+
* @returns Vector embedding
|
|
156
|
+
*/
|
|
157
|
+
private generateMLTextEmbedding;
|
|
158
|
+
/**
|
|
159
|
+
* Generate ML-based code embedding
|
|
160
|
+
*
|
|
161
|
+
* Uses CodeBERT for code-specific embeddings.
|
|
162
|
+
*
|
|
163
|
+
* @param code - Code to embed
|
|
164
|
+
* @param language - Programming language
|
|
165
|
+
* @returns Vector embedding
|
|
166
|
+
*/
|
|
167
|
+
private generateMLCodeEmbedding;
|
|
168
|
+
/**
|
|
169
|
+
* Normalize embedding to unit length
|
|
170
|
+
*
|
|
171
|
+
* @param embedding - Vector to normalize
|
|
172
|
+
* @returns Normalized vector
|
|
173
|
+
*/
|
|
174
|
+
private normalizeEmbedding;
|
|
175
|
+
/**
|
|
176
|
+
* Get cached embedding
|
|
177
|
+
*
|
|
178
|
+
* @param key - Cache key
|
|
179
|
+
* @param type - Embedding type ('text' | 'code')
|
|
180
|
+
* @returns Cached embedding or null
|
|
181
|
+
*/
|
|
182
|
+
getCachedEmbedding(key: string, type?: 'text' | 'code'): number[] | null;
|
|
183
|
+
/**
|
|
184
|
+
* Cache embedding manually
|
|
185
|
+
*
|
|
186
|
+
* @param key - Cache key
|
|
187
|
+
* @param embedding - Vector embedding
|
|
188
|
+
* @param type - Embedding type
|
|
189
|
+
*/
|
|
190
|
+
cacheEmbedding(key: string, embedding: number[], type?: 'text' | 'code'): void;
|
|
191
|
+
/**
|
|
192
|
+
* Clear cache
|
|
193
|
+
*
|
|
194
|
+
* @param type - Type to clear ('text' | 'code' | 'all')
|
|
195
|
+
*/
|
|
196
|
+
clearCache(type?: 'text' | 'code' | 'all'): void;
|
|
197
|
+
/**
|
|
198
|
+
* Get cache statistics
|
|
199
|
+
*
|
|
200
|
+
* @returns Cache stats
|
|
201
|
+
*/
|
|
202
|
+
getCacheStats(): import("./EmbeddingCache").CacheStats;
|
|
203
|
+
/**
|
|
204
|
+
* Check if ML models are available
|
|
205
|
+
*
|
|
206
|
+
* @returns True if ML models initialized
|
|
207
|
+
*/
|
|
208
|
+
isMLAvailable(): boolean;
|
|
209
|
+
/**
|
|
210
|
+
* Get model information
|
|
211
|
+
*
|
|
212
|
+
* @returns Model info
|
|
213
|
+
*/
|
|
214
|
+
getModelInfo(): {
|
|
215
|
+
textModel: string;
|
|
216
|
+
codeModel: string;
|
|
217
|
+
textDimension: number;
|
|
218
|
+
codeDimension: number;
|
|
219
|
+
hashDimension: number;
|
|
220
|
+
mlAvailable: boolean;
|
|
221
|
+
cacheSize: number;
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=EmbeddingGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingGenerator.d.ts","sourceRoot":"","sources":["../../../src/core/embeddings/EmbeddingGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IAEvB,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAEhB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IAEvB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAqB3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IArBpB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAA8B;IAGjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAO;IAE9C;;;;;OAKG;gBAEO,SAAS,GAAE,MAAc,EACzB,UAAU,GAAE,OAAe;IAarC;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBnC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAe1C;;;;;;OAMG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC;IAmE3B;;;;;;;OAOG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC;IAyE3B;;;;;;;;OAQG;IACG,2BAA2B,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAoChC;;;;;;;;;;OAUG;IACH,qBAAqB,CACnB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAoC,EAC/C,IAAI,GAAE,MAAW,GAChB,MAAM,EAAE;IAuBX;;;;;;;OAOG;YACW,uBAAuB;IAoBrC;;;;;;;;OAQG;YACW,uBAAuB;IAgBrC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;;OAMG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,MAAe,GAAG,MAAM,EAAE,GAAG,IAAI;IAIhF;;;;;;OAMG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,MAAM,GAAG,MAAe,GAAG,IAAI;IAItF;;;;OAIG;IACH,UAAU,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,GAAG,KAAa,GAAG,IAAI;IAIvD;;;;OAIG;IACH,aAAa;IAIb;;;;OAIG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;OAIG;IACH,YAAY;;;;;;;;;CAWb"}
|
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding Generator - Convert patterns into vector embeddings
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Phase 1 (Simple): Hash-based embeddings for quick start
|
|
7
|
+
* - Phase 2 (ML): Transformers.js for production embeddings
|
|
8
|
+
* - Caching for performance optimization
|
|
9
|
+
* - Batch processing support
|
|
10
|
+
* - Graceful fallback if ML models unavailable
|
|
11
|
+
*
|
|
12
|
+
* Models:
|
|
13
|
+
* - Text: "Xenova/all-MiniLM-L6-v2" (384 dimensions)
|
|
14
|
+
* - Code: "microsoft/codebert-base" (768 dimensions)
|
|
15
|
+
*
|
|
16
|
+
* Performance:
|
|
17
|
+
* - Hash-based: ~50µs per embedding
|
|
18
|
+
* - ML-based: ~5-10ms per embedding (cached)
|
|
19
|
+
* - Batch: ~2ms per embedding (10+ texts)
|
|
20
|
+
*
|
|
21
|
+
* @module EmbeddingGenerator
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
+
var ownKeys = function(o) {
|
|
41
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
+
__setModuleDefault(result, mod);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
})();
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.EmbeddingGenerator = void 0;
|
|
58
|
+
const crypto_1 = require("crypto");
|
|
59
|
+
const EmbeddingCache_1 = require("./EmbeddingCache");
|
|
60
|
+
/**
|
|
61
|
+
* Embedding Generator
|
|
62
|
+
*
|
|
63
|
+
* Provides both simple hash-based and ML-based embedding generation
|
|
64
|
+
* with intelligent fallback and caching.
|
|
65
|
+
*/
|
|
66
|
+
class EmbeddingGenerator {
|
|
67
|
+
/**
|
|
68
|
+
* Create a new embedding generator
|
|
69
|
+
*
|
|
70
|
+
* @param cacheSize - Maximum number of cached embeddings (default: 10000)
|
|
71
|
+
* @param autoInitML - Automatically initialize ML models (default: false)
|
|
72
|
+
*/
|
|
73
|
+
constructor(cacheSize = 10000, autoInitML = false) {
|
|
74
|
+
this.cacheSize = cacheSize;
|
|
75
|
+
this.autoInitML = autoInitML;
|
|
76
|
+
this.mlAvailable = false;
|
|
77
|
+
this.pipeline = null;
|
|
78
|
+
this.codePipeline = null;
|
|
79
|
+
this.initPromise = null;
|
|
80
|
+
// Model configurations
|
|
81
|
+
this.TEXT_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
82
|
+
this.CODE_MODEL = 'microsoft/codebert-base';
|
|
83
|
+
this.TEXT_DIMENSION = 384;
|
|
84
|
+
this.CODE_DIMENSION = 768;
|
|
85
|
+
this.DEFAULT_HASH_DIMENSION = 256;
|
|
86
|
+
this.cache = new EmbeddingCache_1.EmbeddingCache(cacheSize);
|
|
87
|
+
// Auto-initialize ML models if requested
|
|
88
|
+
if (autoInitML) {
|
|
89
|
+
this.initPromise = this.initializeML().catch((error) => {
|
|
90
|
+
console.warn('ML initialization failed, falling back to hash-based:', error.message);
|
|
91
|
+
this.mlAvailable = false;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Initialize ML models
|
|
97
|
+
*
|
|
98
|
+
* Lazy-loads Transformers.js models for production embeddings.
|
|
99
|
+
* Falls back to hash-based if models unavailable.
|
|
100
|
+
*/
|
|
101
|
+
async initializeML() {
|
|
102
|
+
if (this.mlAvailable) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
// Dynamic import to avoid bundling if not needed
|
|
107
|
+
const { pipeline } = await Promise.resolve().then(() => __importStar(require('@xenova/transformers')));
|
|
108
|
+
// Initialize text embedding pipeline
|
|
109
|
+
this.pipeline = await pipeline('feature-extraction', this.TEXT_MODEL);
|
|
110
|
+
console.log(`✓ ML text model loaded: ${this.TEXT_MODEL} (${this.TEXT_DIMENSION}D)`);
|
|
111
|
+
this.mlAvailable = true;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.warn('ML models not available, using hash-based embeddings:', error.message);
|
|
115
|
+
this.mlAvailable = false;
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Initialize code embedding model
|
|
121
|
+
*
|
|
122
|
+
* Separate initialization for code model to avoid loading if not needed.
|
|
123
|
+
*/
|
|
124
|
+
async initializeCodeModel() {
|
|
125
|
+
if (this.codePipeline) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const { pipeline } = await Promise.resolve().then(() => __importStar(require('@xenova/transformers')));
|
|
130
|
+
this.codePipeline = await pipeline('feature-extraction', this.CODE_MODEL);
|
|
131
|
+
console.log(`✓ ML code model loaded: ${this.CODE_MODEL} (${this.CODE_DIMENSION}D)`);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.warn('Code model not available:', error.message);
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Generate text embedding
|
|
140
|
+
*
|
|
141
|
+
* @param text - Text to embed
|
|
142
|
+
* @param options - Embedding options
|
|
143
|
+
* @returns Embedding result with vector and metadata
|
|
144
|
+
*/
|
|
145
|
+
async generateTextEmbedding(text, options = {}) {
|
|
146
|
+
const startTime = Date.now();
|
|
147
|
+
const { useML = true, useCache = true, normalize = true, dimension = this.DEFAULT_HASH_DIMENSION } = options;
|
|
148
|
+
// Check cache first
|
|
149
|
+
if (useCache) {
|
|
150
|
+
const cached = this.cache.get(text, 'text');
|
|
151
|
+
if (cached) {
|
|
152
|
+
return {
|
|
153
|
+
embedding: cached,
|
|
154
|
+
dimension: cached.length,
|
|
155
|
+
method: cached.length === dimension ? 'hash' : 'ml',
|
|
156
|
+
generationTime: Date.now() - startTime,
|
|
157
|
+
cached: true,
|
|
158
|
+
model: cached.length === this.TEXT_DIMENSION ? this.TEXT_MODEL : 'hash'
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
let embedding;
|
|
163
|
+
let method;
|
|
164
|
+
let modelName;
|
|
165
|
+
// Try ML-based embedding first if available
|
|
166
|
+
if (useML && this.mlAvailable && this.pipeline) {
|
|
167
|
+
try {
|
|
168
|
+
embedding = await this.generateMLTextEmbedding(text);
|
|
169
|
+
method = 'ml';
|
|
170
|
+
modelName = this.TEXT_MODEL;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.warn('ML embedding failed, falling back to hash:', error);
|
|
174
|
+
embedding = this.generateHashEmbedding(text, dimension);
|
|
175
|
+
method = 'hash';
|
|
176
|
+
modelName = 'hash';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// Use hash-based embedding
|
|
181
|
+
embedding = this.generateHashEmbedding(text, dimension);
|
|
182
|
+
method = 'hash';
|
|
183
|
+
modelName = 'hash';
|
|
184
|
+
}
|
|
185
|
+
// Normalize if requested
|
|
186
|
+
if (normalize && method === 'hash') {
|
|
187
|
+
embedding = this.normalizeEmbedding(embedding);
|
|
188
|
+
}
|
|
189
|
+
// Cache result
|
|
190
|
+
if (useCache) {
|
|
191
|
+
this.cache.set(text, embedding, 'text');
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
embedding,
|
|
195
|
+
dimension: embedding.length,
|
|
196
|
+
method,
|
|
197
|
+
generationTime: Date.now() - startTime,
|
|
198
|
+
cached: false,
|
|
199
|
+
model: modelName
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Generate code embedding
|
|
204
|
+
*
|
|
205
|
+
* @param code - Code to embed
|
|
206
|
+
* @param language - Programming language
|
|
207
|
+
* @param options - Embedding options
|
|
208
|
+
* @returns Embedding result
|
|
209
|
+
*/
|
|
210
|
+
async generateCodeEmbedding(code, language, options = {}) {
|
|
211
|
+
const startTime = Date.now();
|
|
212
|
+
const { useML = true, useCache = true, normalize = true, dimension = this.DEFAULT_HASH_DIMENSION } = options;
|
|
213
|
+
// Cache key includes language
|
|
214
|
+
const cacheKey = `${language}:${code}`;
|
|
215
|
+
// Check cache first
|
|
216
|
+
if (useCache) {
|
|
217
|
+
const cached = this.cache.get(cacheKey, 'code');
|
|
218
|
+
if (cached) {
|
|
219
|
+
return {
|
|
220
|
+
embedding: cached,
|
|
221
|
+
dimension: cached.length,
|
|
222
|
+
method: cached.length === dimension ? 'hash' : 'ml',
|
|
223
|
+
generationTime: Date.now() - startTime,
|
|
224
|
+
cached: true,
|
|
225
|
+
model: cached.length === this.CODE_DIMENSION ? this.CODE_MODEL : 'hash'
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
let embedding;
|
|
230
|
+
let method;
|
|
231
|
+
let modelName;
|
|
232
|
+
// Try ML-based code embedding
|
|
233
|
+
if (useML && this.mlAvailable) {
|
|
234
|
+
try {
|
|
235
|
+
if (!this.codePipeline) {
|
|
236
|
+
await this.initializeCodeModel();
|
|
237
|
+
}
|
|
238
|
+
embedding = await this.generateMLCodeEmbedding(code, language);
|
|
239
|
+
method = 'ml';
|
|
240
|
+
modelName = this.CODE_MODEL;
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.warn('ML code embedding failed, falling back to hash:', error);
|
|
244
|
+
embedding = this.generateHashEmbedding(code, dimension);
|
|
245
|
+
method = 'hash';
|
|
246
|
+
modelName = 'hash';
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// Use hash-based embedding with language as salt for differentiation
|
|
251
|
+
embedding = this.generateHashEmbedding(code, dimension, language);
|
|
252
|
+
method = 'hash';
|
|
253
|
+
modelName = 'hash';
|
|
254
|
+
}
|
|
255
|
+
// Normalize if requested
|
|
256
|
+
if (normalize && method === 'hash') {
|
|
257
|
+
embedding = this.normalizeEmbedding(embedding);
|
|
258
|
+
}
|
|
259
|
+
// Cache result
|
|
260
|
+
if (useCache) {
|
|
261
|
+
this.cache.set(cacheKey, embedding, 'code');
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
embedding,
|
|
265
|
+
dimension: embedding.length,
|
|
266
|
+
method,
|
|
267
|
+
generationTime: Date.now() - startTime,
|
|
268
|
+
cached: false,
|
|
269
|
+
model: modelName
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Generate batch text embeddings
|
|
274
|
+
*
|
|
275
|
+
* More efficient than generating one at a time.
|
|
276
|
+
*
|
|
277
|
+
* @param texts - Array of texts to embed
|
|
278
|
+
* @param options - Embedding options
|
|
279
|
+
* @returns Batch embedding result
|
|
280
|
+
*/
|
|
281
|
+
async generateBatchTextEmbeddings(texts, options = {}) {
|
|
282
|
+
const startTime = Date.now();
|
|
283
|
+
const { useML = true, useCache = true } = options;
|
|
284
|
+
const embeddings = [];
|
|
285
|
+
let cacheHits = 0;
|
|
286
|
+
let method = 'hash';
|
|
287
|
+
// Process each text
|
|
288
|
+
for (const text of texts) {
|
|
289
|
+
const result = await this.generateTextEmbedding(text, {
|
|
290
|
+
...options,
|
|
291
|
+
useML,
|
|
292
|
+
useCache
|
|
293
|
+
});
|
|
294
|
+
embeddings.push(result.embedding);
|
|
295
|
+
if (result.cached) {
|
|
296
|
+
cacheHits++;
|
|
297
|
+
}
|
|
298
|
+
if (result.method === 'ml') {
|
|
299
|
+
method = 'ml';
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const totalTime = Date.now() - startTime;
|
|
303
|
+
return {
|
|
304
|
+
embeddings,
|
|
305
|
+
totalTime,
|
|
306
|
+
avgTime: texts.length > 0 ? totalTime / texts.length : 0,
|
|
307
|
+
cacheHits,
|
|
308
|
+
method
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Generate hash-based embedding
|
|
313
|
+
*
|
|
314
|
+
* Fast, deterministic embedding using cryptographic hashing.
|
|
315
|
+
* Suitable for testing and development.
|
|
316
|
+
*
|
|
317
|
+
* @param text - Text to embed
|
|
318
|
+
* @param dimension - Target dimension (default: 256)
|
|
319
|
+
* @param salt - Optional salt for different embeddings (default: '')
|
|
320
|
+
* @returns Vector embedding
|
|
321
|
+
*/
|
|
322
|
+
generateHashEmbedding(text, dimension = this.DEFAULT_HASH_DIMENSION, salt = '') {
|
|
323
|
+
const embedding = new Array(dimension);
|
|
324
|
+
// Use multiple hash passes for better distribution
|
|
325
|
+
const passes = Math.ceil(dimension / 32); // SHA-256 produces 32 bytes
|
|
326
|
+
for (let pass = 0; pass < passes; pass++) {
|
|
327
|
+
const hash = (0, crypto_1.createHash)('sha256')
|
|
328
|
+
.update(`${salt}:${pass}:${text}`)
|
|
329
|
+
.digest();
|
|
330
|
+
const startIdx = pass * 32;
|
|
331
|
+
const endIdx = Math.min(startIdx + 32, dimension);
|
|
332
|
+
for (let i = startIdx; i < endIdx; i++) {
|
|
333
|
+
// Convert byte to [-1, 1] range
|
|
334
|
+
embedding[i] = (hash[i - startIdx] / 127.5) - 1;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return embedding;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Generate ML-based text embedding
|
|
341
|
+
*
|
|
342
|
+
* Uses Transformers.js for production-quality embeddings.
|
|
343
|
+
*
|
|
344
|
+
* @param text - Text to embed
|
|
345
|
+
* @returns Vector embedding
|
|
346
|
+
*/
|
|
347
|
+
async generateMLTextEmbedding(text) {
|
|
348
|
+
if (!this.pipeline) {
|
|
349
|
+
throw new Error('ML pipeline not initialized');
|
|
350
|
+
}
|
|
351
|
+
// Wait for initialization if in progress
|
|
352
|
+
if (this.initPromise) {
|
|
353
|
+
await this.initPromise;
|
|
354
|
+
}
|
|
355
|
+
// Generate embedding using transformer
|
|
356
|
+
const result = await this.pipeline(text, {
|
|
357
|
+
pooling: 'mean',
|
|
358
|
+
normalize: true
|
|
359
|
+
});
|
|
360
|
+
// Convert to regular array
|
|
361
|
+
return Array.from(result.data);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Generate ML-based code embedding
|
|
365
|
+
*
|
|
366
|
+
* Uses CodeBERT for code-specific embeddings.
|
|
367
|
+
*
|
|
368
|
+
* @param code - Code to embed
|
|
369
|
+
* @param language - Programming language
|
|
370
|
+
* @returns Vector embedding
|
|
371
|
+
*/
|
|
372
|
+
async generateMLCodeEmbedding(code, language) {
|
|
373
|
+
if (!this.codePipeline) {
|
|
374
|
+
throw new Error('Code pipeline not initialized');
|
|
375
|
+
}
|
|
376
|
+
// Prepend language token for context
|
|
377
|
+
const input = `[${language}] ${code}`;
|
|
378
|
+
const result = await this.codePipeline(input, {
|
|
379
|
+
pooling: 'mean',
|
|
380
|
+
normalize: true
|
|
381
|
+
});
|
|
382
|
+
return Array.from(result.data);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Normalize embedding to unit length
|
|
386
|
+
*
|
|
387
|
+
* @param embedding - Vector to normalize
|
|
388
|
+
* @returns Normalized vector
|
|
389
|
+
*/
|
|
390
|
+
normalizeEmbedding(embedding) {
|
|
391
|
+
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
392
|
+
if (magnitude === 0) {
|
|
393
|
+
return embedding;
|
|
394
|
+
}
|
|
395
|
+
return embedding.map(val => val / magnitude);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Get cached embedding
|
|
399
|
+
*
|
|
400
|
+
* @param key - Cache key
|
|
401
|
+
* @param type - Embedding type ('text' | 'code')
|
|
402
|
+
* @returns Cached embedding or null
|
|
403
|
+
*/
|
|
404
|
+
getCachedEmbedding(key, type = 'text') {
|
|
405
|
+
return this.cache.get(key, type);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Cache embedding manually
|
|
409
|
+
*
|
|
410
|
+
* @param key - Cache key
|
|
411
|
+
* @param embedding - Vector embedding
|
|
412
|
+
* @param type - Embedding type
|
|
413
|
+
*/
|
|
414
|
+
cacheEmbedding(key, embedding, type = 'text') {
|
|
415
|
+
this.cache.set(key, embedding, type);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Clear cache
|
|
419
|
+
*
|
|
420
|
+
* @param type - Type to clear ('text' | 'code' | 'all')
|
|
421
|
+
*/
|
|
422
|
+
clearCache(type = 'all') {
|
|
423
|
+
this.cache.clear(type);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Get cache statistics
|
|
427
|
+
*
|
|
428
|
+
* @returns Cache stats
|
|
429
|
+
*/
|
|
430
|
+
getCacheStats() {
|
|
431
|
+
return this.cache.getStats();
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Check if ML models are available
|
|
435
|
+
*
|
|
436
|
+
* @returns True if ML models initialized
|
|
437
|
+
*/
|
|
438
|
+
isMLAvailable() {
|
|
439
|
+
return this.mlAvailable;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Get model information
|
|
443
|
+
*
|
|
444
|
+
* @returns Model info
|
|
445
|
+
*/
|
|
446
|
+
getModelInfo() {
|
|
447
|
+
return {
|
|
448
|
+
textModel: this.TEXT_MODEL,
|
|
449
|
+
codeModel: this.CODE_MODEL,
|
|
450
|
+
textDimension: this.TEXT_DIMENSION,
|
|
451
|
+
codeDimension: this.CODE_DIMENSION,
|
|
452
|
+
hashDimension: this.DEFAULT_HASH_DIMENSION,
|
|
453
|
+
mlAvailable: this.mlAvailable,
|
|
454
|
+
cacheSize: this.cacheSize
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
exports.EmbeddingGenerator = EmbeddingGenerator;
|
|
459
|
+
//# sourceMappingURL=EmbeddingGenerator.js.map
|