@gsep/core 0.8.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/LICENSE +21 -0
- package/README.md +286 -0
- package/dist/PGA.d.ts +288 -0
- package/dist/PGA.d.ts.map +1 -0
- package/dist/PGA.js +2228 -0
- package/dist/PGA.js.map +1 -0
- package/dist/advanced-ai/AgentStateVector.d.ts +66 -0
- package/dist/advanced-ai/AgentStateVector.d.ts.map +1 -0
- package/dist/advanced-ai/AgentStateVector.js +127 -0
- package/dist/advanced-ai/AgentStateVector.js.map +1 -0
- package/dist/advanced-ai/AgentVitals.d.ts +23 -0
- package/dist/advanced-ai/AgentVitals.d.ts.map +1 -0
- package/dist/advanced-ai/AgentVitals.js +13 -0
- package/dist/advanced-ai/AgentVitals.js.map +1 -0
- package/dist/advanced-ai/AutonomousLoop.d.ts +57 -0
- package/dist/advanced-ai/AutonomousLoop.d.ts.map +1 -0
- package/dist/advanced-ai/AutonomousLoop.js +207 -0
- package/dist/advanced-ai/AutonomousLoop.js.map +1 -0
- package/dist/advanced-ai/CalibratedAutonomy.d.ts +37 -0
- package/dist/advanced-ai/CalibratedAutonomy.d.ts.map +1 -0
- package/dist/advanced-ai/CalibratedAutonomy.js +151 -0
- package/dist/advanced-ai/CalibratedAutonomy.js.map +1 -0
- package/dist/advanced-ai/EmotionalModel.d.ts +27 -0
- package/dist/advanced-ai/EmotionalModel.d.ts.map +1 -0
- package/dist/advanced-ai/EmotionalModel.js +206 -0
- package/dist/advanced-ai/EmotionalModel.js.map +1 -0
- package/dist/advanced-ai/EnhancedSelfModel.d.ts +53 -0
- package/dist/advanced-ai/EnhancedSelfModel.d.ts.map +1 -0
- package/dist/advanced-ai/EnhancedSelfModel.js +189 -0
- package/dist/advanced-ai/EnhancedSelfModel.js.map +1 -0
- package/dist/advanced-ai/ModelRouter.d.ts +82 -0
- package/dist/advanced-ai/ModelRouter.d.ts.map +1 -0
- package/dist/advanced-ai/ModelRouter.js +280 -0
- package/dist/advanced-ai/ModelRouter.js.map +1 -0
- package/dist/advanced-ai/SelfModel.d.ts +29 -0
- package/dist/advanced-ai/SelfModel.d.ts.map +1 -0
- package/dist/advanced-ai/SelfModel.js +91 -0
- package/dist/advanced-ai/SelfModel.js.map +1 -0
- package/dist/advanced-ai/StrategicAutonomy.d.ts +41 -0
- package/dist/advanced-ai/StrategicAutonomy.d.ts.map +1 -0
- package/dist/advanced-ai/StrategicAutonomy.js +148 -0
- package/dist/advanced-ai/StrategicAutonomy.js.map +1 -0
- package/dist/advanced-ai/ThinkingEngine.d.ts +50 -0
- package/dist/advanced-ai/ThinkingEngine.d.ts.map +1 -0
- package/dist/advanced-ai/ThinkingEngine.js +179 -0
- package/dist/advanced-ai/ThinkingEngine.js.map +1 -0
- package/dist/core/ContextMemory.d.ts +56 -0
- package/dist/core/ContextMemory.d.ts.map +1 -0
- package/dist/core/ContextMemory.js +253 -0
- package/dist/core/ContextMemory.js.map +1 -0
- package/dist/core/DNAProfile.d.ts +19 -0
- package/dist/core/DNAProfile.d.ts.map +1 -0
- package/dist/core/DNAProfile.js +141 -0
- package/dist/core/DNAProfile.js.map +1 -0
- package/dist/core/FitnessTracker.d.ts +13 -0
- package/dist/core/FitnessTracker.d.ts.map +1 -0
- package/dist/core/FitnessTracker.js +96 -0
- package/dist/core/FitnessTracker.js.map +1 -0
- package/dist/core/GSEPActivityFooter.d.ts +15 -0
- package/dist/core/GSEPActivityFooter.d.ts.map +1 -0
- package/dist/core/GSEPActivityFooter.js +42 -0
- package/dist/core/GSEPActivityFooter.js.map +1 -0
- package/dist/core/GSEPIdentitySection.d.ts +23 -0
- package/dist/core/GSEPIdentitySection.d.ts.map +1 -0
- package/dist/core/GSEPIdentitySection.js +64 -0
- package/dist/core/GSEPIdentitySection.js.map +1 -0
- package/dist/core/GenesisBootstrap.d.ts +18 -0
- package/dist/core/GenesisBootstrap.d.ts.map +1 -0
- package/dist/core/GenesisBootstrap.js +95 -0
- package/dist/core/GenesisBootstrap.js.map +1 -0
- package/dist/core/GenomeKernel.d.ts +57 -0
- package/dist/core/GenomeKernel.d.ts.map +1 -0
- package/dist/core/GenomeKernel.js +296 -0
- package/dist/core/GenomeKernel.js.map +1 -0
- package/dist/core/GenomeManager.d.ts +21 -0
- package/dist/core/GenomeManager.d.ts.map +1 -0
- package/dist/core/GenomeManager.js +123 -0
- package/dist/core/GenomeManager.js.map +1 -0
- package/dist/core/LearningAnnouncer.d.ts +18 -0
- package/dist/core/LearningAnnouncer.d.ts.map +1 -0
- package/dist/core/LearningAnnouncer.js +182 -0
- package/dist/core/LearningAnnouncer.js.map +1 -0
- package/dist/core/ProactiveSuggestions.d.ts +25 -0
- package/dist/core/ProactiveSuggestions.d.ts.map +1 -0
- package/dist/core/ProactiveSuggestions.js +238 -0
- package/dist/core/ProactiveSuggestions.js.map +1 -0
- package/dist/core/PromptAssembler.d.ts +58 -0
- package/dist/core/PromptAssembler.d.ts.map +1 -0
- package/dist/core/PromptAssembler.js +265 -0
- package/dist/core/PromptAssembler.js.map +1 -0
- package/dist/enterprise/AuthManager.d.ts +71 -0
- package/dist/enterprise/AuthManager.d.ts.map +1 -0
- package/dist/enterprise/AuthManager.js +216 -0
- package/dist/enterprise/AuthManager.js.map +1 -0
- package/dist/enterprise/RateLimiter.d.ts +50 -0
- package/dist/enterprise/RateLimiter.d.ts.map +1 -0
- package/dist/enterprise/RateLimiter.js +199 -0
- package/dist/enterprise/RateLimiter.js.map +1 -0
- package/dist/evaluation/BenchmarkSuites.d.ts +29 -0
- package/dist/evaluation/BenchmarkSuites.d.ts.map +1 -0
- package/dist/evaluation/BenchmarkSuites.js +72 -0
- package/dist/evaluation/BenchmarkSuites.js.map +1 -0
- package/dist/evaluation/CalibrationManager.d.ts +66 -0
- package/dist/evaluation/CalibrationManager.d.ts.map +1 -0
- package/dist/evaluation/CalibrationManager.js +157 -0
- package/dist/evaluation/CalibrationManager.js.map +1 -0
- package/dist/evaluation/Evaluator.d.ts +79 -0
- package/dist/evaluation/Evaluator.d.ts.map +1 -0
- package/dist/evaluation/Evaluator.js +360 -0
- package/dist/evaluation/Evaluator.js.map +1 -0
- package/dist/evaluation/EvolutionGuardrails.d.ts +29 -0
- package/dist/evaluation/EvolutionGuardrails.d.ts.map +1 -0
- package/dist/evaluation/EvolutionGuardrails.js +166 -0
- package/dist/evaluation/EvolutionGuardrails.js.map +1 -0
- package/dist/evaluation/ProofOfValueRunner.d.ts +41 -0
- package/dist/evaluation/ProofOfValueRunner.d.ts.map +1 -0
- package/dist/evaluation/ProofOfValueRunner.js +177 -0
- package/dist/evaluation/ProofOfValueRunner.js.map +1 -0
- package/dist/evaluation/SandboxSuites.d.ts +26 -0
- package/dist/evaluation/SandboxSuites.d.ts.map +1 -0
- package/dist/evaluation/SandboxSuites.js +252 -0
- package/dist/evaluation/SandboxSuites.js.map +1 -0
- package/dist/evaluation/SemanticJudge.d.ts +21 -0
- package/dist/evaluation/SemanticJudge.d.ts.map +1 -0
- package/dist/evaluation/SemanticJudge.js +138 -0
- package/dist/evaluation/SemanticJudge.js.map +1 -0
- package/dist/evaluation/fixtures/core-coding-v1.json +68 -0
- package/dist/evaluation/fixtures/core-general-v1.json +68 -0
- package/dist/evaluation/fixtures/proof-of-value-v1.json +178 -0
- package/dist/evolution/CanaryDeployment.d.ts +78 -0
- package/dist/evolution/CanaryDeployment.d.ts.map +1 -0
- package/dist/evolution/CanaryDeployment.js +262 -0
- package/dist/evolution/CanaryDeployment.js.map +1 -0
- package/dist/evolution/DriftAnalyzer.d.ts +64 -0
- package/dist/evolution/DriftAnalyzer.d.ts.map +1 -0
- package/dist/evolution/DriftAnalyzer.js +288 -0
- package/dist/evolution/DriftAnalyzer.js.map +1 -0
- package/dist/evolution/FitnessCalculator.d.ts +47 -0
- package/dist/evolution/FitnessCalculator.d.ts.map +1 -0
- package/dist/evolution/FitnessCalculator.js +176 -0
- package/dist/evolution/FitnessCalculator.js.map +1 -0
- package/dist/evolution/MutationOperator.d.ts +102 -0
- package/dist/evolution/MutationOperator.d.ts.map +1 -0
- package/dist/evolution/MutationOperator.js +458 -0
- package/dist/evolution/MutationOperator.js.map +1 -0
- package/dist/evolution/PromotionGate.d.ts +45 -0
- package/dist/evolution/PromotionGate.d.ts.map +1 -0
- package/dist/evolution/PromotionGate.js +248 -0
- package/dist/evolution/PromotionGate.js.map +1 -0
- package/dist/evolution/PurposeSurvival.d.ts +68 -0
- package/dist/evolution/PurposeSurvival.d.ts.map +1 -0
- package/dist/evolution/PurposeSurvival.js +199 -0
- package/dist/evolution/PurposeSurvival.js.map +1 -0
- package/dist/evolution/boost/EvolutionBoostEngine.d.ts +70 -0
- package/dist/evolution/boost/EvolutionBoostEngine.d.ts.map +1 -0
- package/dist/evolution/boost/EvolutionBoostEngine.js +178 -0
- package/dist/evolution/boost/EvolutionBoostEngine.js.map +1 -0
- package/dist/evolution/boost/GeneticRecombinator.d.ts +26 -0
- package/dist/evolution/boost/GeneticRecombinator.d.ts.map +1 -0
- package/dist/evolution/boost/GeneticRecombinator.js +190 -0
- package/dist/evolution/boost/GeneticRecombinator.js.map +1 -0
- package/dist/evolution/boost/MetaEvolutionEngine.d.ts +69 -0
- package/dist/evolution/boost/MetaEvolutionEngine.d.ts.map +1 -0
- package/dist/evolution/boost/MetaEvolutionEngine.js +317 -0
- package/dist/evolution/boost/MetaEvolutionEngine.js.map +1 -0
- package/dist/evolution/boost/ParallelEvolutionEngine.d.ts +44 -0
- package/dist/evolution/boost/ParallelEvolutionEngine.d.ts.map +1 -0
- package/dist/evolution/boost/ParallelEvolutionEngine.js +134 -0
- package/dist/evolution/boost/ParallelEvolutionEngine.js.map +1 -0
- package/dist/evolution/boost/ParetoOptimizer.d.ts +42 -0
- package/dist/evolution/boost/ParetoOptimizer.d.ts.map +1 -0
- package/dist/evolution/boost/ParetoOptimizer.js +167 -0
- package/dist/evolution/boost/ParetoOptimizer.js.map +1 -0
- package/dist/evolution/boost/operators/BreakthroughOperator.d.ts +19 -0
- package/dist/evolution/boost/operators/BreakthroughOperator.d.ts.map +1 -0
- package/dist/evolution/boost/operators/BreakthroughOperator.js +229 -0
- package/dist/evolution/boost/operators/BreakthroughOperator.js.map +1 -0
- package/dist/evolution/boost/operators/CrossoverMutationOperator.d.ts +21 -0
- package/dist/evolution/boost/operators/CrossoverMutationOperator.d.ts.map +1 -0
- package/dist/evolution/boost/operators/CrossoverMutationOperator.js +207 -0
- package/dist/evolution/boost/operators/CrossoverMutationOperator.js.map +1 -0
- package/dist/evolution/boost/operators/PatternExtractionOperator.d.ts +21 -0
- package/dist/evolution/boost/operators/PatternExtractionOperator.d.ts.map +1 -0
- package/dist/evolution/boost/operators/PatternExtractionOperator.js +215 -0
- package/dist/evolution/boost/operators/PatternExtractionOperator.js.map +1 -0
- package/dist/evolution/boost/operators/SemanticRestructuringOperator.d.ts +18 -0
- package/dist/evolution/boost/operators/SemanticRestructuringOperator.d.ts.map +1 -0
- package/dist/evolution/boost/operators/SemanticRestructuringOperator.js +188 -0
- package/dist/evolution/boost/operators/SemanticRestructuringOperator.js.map +1 -0
- package/dist/evolution/boost/utils/llmHelper.d.ts +10 -0
- package/dist/evolution/boost/utils/llmHelper.d.ts.map +1 -0
- package/dist/evolution/boost/utils/llmHelper.js +13 -0
- package/dist/evolution/boost/utils/llmHelper.js.map +1 -0
- package/dist/firewall/ContentFirewall.d.ts +31 -0
- package/dist/firewall/ContentFirewall.d.ts.map +1 -0
- package/dist/firewall/ContentFirewall.js +252 -0
- package/dist/firewall/ContentFirewall.js.map +1 -0
- package/dist/firewall/DefaultPatterns.d.ts +8 -0
- package/dist/firewall/DefaultPatterns.d.ts.map +1 -0
- package/dist/firewall/DefaultPatterns.js +624 -0
- package/dist/firewall/DefaultPatterns.js.map +1 -0
- package/dist/firewall/index.d.ts +3 -0
- package/dist/firewall/index.d.ts.map +1 -0
- package/dist/firewall/index.js +3 -0
- package/dist/firewall/index.js.map +1 -0
- package/dist/gene-bank/CognitiveGene.d.ts +799 -0
- package/dist/gene-bank/CognitiveGene.d.ts.map +1 -0
- package/dist/gene-bank/CognitiveGene.js +128 -0
- package/dist/gene-bank/CognitiveGene.js.map +1 -0
- package/dist/gene-bank/GeneAdopter.d.ts +76 -0
- package/dist/gene-bank/GeneAdopter.d.ts.map +1 -0
- package/dist/gene-bank/GeneAdopter.js +290 -0
- package/dist/gene-bank/GeneAdopter.js.map +1 -0
- package/dist/gene-bank/GeneBank.d.ts +124 -0
- package/dist/gene-bank/GeneBank.d.ts.map +1 -0
- package/dist/gene-bank/GeneBank.js +261 -0
- package/dist/gene-bank/GeneBank.js.map +1 -0
- package/dist/gene-bank/GeneExtractor.d.ts +59 -0
- package/dist/gene-bank/GeneExtractor.d.ts.map +1 -0
- package/dist/gene-bank/GeneExtractor.js +311 -0
- package/dist/gene-bank/GeneExtractor.js.map +1 -0
- package/dist/gene-bank/GeneMatcher.d.ts +83 -0
- package/dist/gene-bank/GeneMatcher.d.ts.map +1 -0
- package/dist/gene-bank/GeneMatcher.js +233 -0
- package/dist/gene-bank/GeneMatcher.js.map +1 -0
- package/dist/gene-bank/MarketplaceClient.d.ts +26 -0
- package/dist/gene-bank/MarketplaceClient.d.ts.map +1 -0
- package/dist/gene-bank/MarketplaceClient.js +147 -0
- package/dist/gene-bank/MarketplaceClient.js.map +1 -0
- package/dist/gene-bank/PGAIntegration.d.ts +68 -0
- package/dist/gene-bank/PGAIntegration.d.ts.map +1 -0
- package/dist/gene-bank/PGAIntegration.js +181 -0
- package/dist/gene-bank/PGAIntegration.js.map +1 -0
- package/dist/gene-bank/SandboxTester.d.ts +92 -0
- package/dist/gene-bank/SandboxTester.d.ts.map +1 -0
- package/dist/gene-bank/SandboxTester.js +262 -0
- package/dist/gene-bank/SandboxTester.js.map +1 -0
- package/dist/gene-bank/adapters/InMemoryGeneStorage.d.ts +21 -0
- package/dist/gene-bank/adapters/InMemoryGeneStorage.d.ts.map +1 -0
- package/dist/gene-bank/adapters/InMemoryGeneStorage.js +115 -0
- package/dist/gene-bank/adapters/InMemoryGeneStorage.js.map +1 -0
- package/dist/gene-bank/adapters/PostgresGeneStorage.d.ts +21 -0
- package/dist/gene-bank/adapters/PostgresGeneStorage.d.ts.map +1 -0
- package/dist/gene-bank/adapters/PostgresGeneStorage.js +272 -0
- package/dist/gene-bank/adapters/PostgresGeneStorage.js.map +1 -0
- package/dist/gene-bank/index.d.ts +8 -0
- package/dist/gene-bank/index.d.ts.map +1 -0
- package/dist/gene-bank/index.js +8 -0
- package/dist/gene-bank/index.js.map +1 -0
- package/dist/immune/BehavioralImmuneSystem.d.ts +68 -0
- package/dist/immune/BehavioralImmuneSystem.d.ts.map +1 -0
- package/dist/immune/BehavioralImmuneSystem.js +253 -0
- package/dist/immune/BehavioralImmuneSystem.js.map +1 -0
- package/dist/index.d.ts +135 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/LLMAdapter.d.ts +31 -0
- package/dist/interfaces/LLMAdapter.d.ts.map +1 -0
- package/dist/interfaces/LLMAdapter.js +2 -0
- package/dist/interfaces/LLMAdapter.js.map +1 -0
- package/dist/interfaces/StorageAdapter.d.ts +82 -0
- package/dist/interfaces/StorageAdapter.d.ts.map +1 -0
- package/dist/interfaces/StorageAdapter.js +2 -0
- package/dist/interfaces/StorageAdapter.js.map +1 -0
- package/dist/memory/AnalyticMemoryEngine.d.ts +106 -0
- package/dist/memory/AnalyticMemoryEngine.d.ts.map +1 -0
- package/dist/memory/AnalyticMemoryEngine.js +440 -0
- package/dist/memory/AnalyticMemoryEngine.js.map +1 -0
- package/dist/memory/CuriosityEngine.d.ts +34 -0
- package/dist/memory/CuriosityEngine.d.ts.map +1 -0
- package/dist/memory/CuriosityEngine.js +143 -0
- package/dist/memory/CuriosityEngine.js.map +1 -0
- package/dist/memory/GrowthJournal.d.ts +46 -0
- package/dist/memory/GrowthJournal.d.ts.map +1 -0
- package/dist/memory/GrowthJournal.js +241 -0
- package/dist/memory/GrowthJournal.js.map +1 -0
- package/dist/memory/LayeredMemory.d.ts +114 -0
- package/dist/memory/LayeredMemory.d.ts.map +1 -0
- package/dist/memory/LayeredMemory.js +406 -0
- package/dist/memory/LayeredMemory.js.map +1 -0
- package/dist/memory/PatternMemory.d.ts +38 -0
- package/dist/memory/PatternMemory.d.ts.map +1 -0
- package/dist/memory/PatternMemory.js +161 -0
- package/dist/memory/PatternMemory.js.map +1 -0
- package/dist/memory/PersonalNarrative.d.ts +51 -0
- package/dist/memory/PersonalNarrative.d.ts.map +1 -0
- package/dist/memory/PersonalNarrative.js +172 -0
- package/dist/memory/PersonalNarrative.js.map +1 -0
- package/dist/memory-compaction/MemoryCompactor.d.ts +18 -0
- package/dist/memory-compaction/MemoryCompactor.d.ts.map +1 -0
- package/dist/memory-compaction/MemoryCompactor.js +156 -0
- package/dist/memory-compaction/MemoryCompactor.js.map +1 -0
- package/dist/memory-compaction/index.d.ts +6 -0
- package/dist/memory-compaction/index.d.ts.map +1 -0
- package/dist/memory-compaction/index.js +5 -0
- package/dist/memory-compaction/index.js.map +1 -0
- package/dist/memory-compaction/strategies/BaseStrategy.d.ts +9 -0
- package/dist/memory-compaction/strategies/BaseStrategy.d.ts.map +1 -0
- package/dist/memory-compaction/strategies/BaseStrategy.js +50 -0
- package/dist/memory-compaction/strategies/BaseStrategy.js.map +1 -0
- package/dist/memory-compaction/strategies/ImportanceBasedStrategy.d.ts +9 -0
- package/dist/memory-compaction/strategies/ImportanceBasedStrategy.d.ts.map +1 -0
- package/dist/memory-compaction/strategies/ImportanceBasedStrategy.js +101 -0
- package/dist/memory-compaction/strategies/ImportanceBasedStrategy.js.map +1 -0
- package/dist/memory-compaction/strategies/SlidingWindowStrategy.d.ts +9 -0
- package/dist/memory-compaction/strategies/SlidingWindowStrategy.d.ts.map +1 -0
- package/dist/memory-compaction/strategies/SlidingWindowStrategy.js +87 -0
- package/dist/memory-compaction/strategies/SlidingWindowStrategy.js.map +1 -0
- package/dist/memory-compaction/types.d.ts +78 -0
- package/dist/memory-compaction/types.d.ts.map +1 -0
- package/dist/memory-compaction/types.js +2 -0
- package/dist/memory-compaction/types.js.map +1 -0
- package/dist/monitoring/AlertWebhooks.d.ts +57 -0
- package/dist/monitoring/AlertWebhooks.d.ts.map +1 -0
- package/dist/monitoring/AlertWebhooks.js +207 -0
- package/dist/monitoring/AlertWebhooks.js.map +1 -0
- package/dist/monitoring/MetricsCollector.d.ts +120 -0
- package/dist/monitoring/MetricsCollector.d.ts.map +1 -0
- package/dist/monitoring/MetricsCollector.js +274 -0
- package/dist/monitoring/MetricsCollector.js.map +1 -0
- package/dist/monitoring/MonitoringDashboard.d.ts +38 -0
- package/dist/monitoring/MonitoringDashboard.d.ts.map +1 -0
- package/dist/monitoring/MonitoringDashboard.js +271 -0
- package/dist/monitoring/MonitoringDashboard.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +61 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +153 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/presets/ConfigPresets.d.ts +11 -0
- package/dist/presets/ConfigPresets.d.ts.map +1 -0
- package/dist/presets/ConfigPresets.js +113 -0
- package/dist/presets/ConfigPresets.js.map +1 -0
- package/dist/rag/RAGEngine.d.ts +54 -0
- package/dist/rag/RAGEngine.d.ts.map +1 -0
- package/dist/rag/RAGEngine.js +162 -0
- package/dist/rag/RAGEngine.js.map +1 -0
- package/dist/rag/VectorStoreAdapter.d.ts +40 -0
- package/dist/rag/VectorStoreAdapter.d.ts.map +1 -0
- package/dist/rag/VectorStoreAdapter.js +106 -0
- package/dist/rag/VectorStoreAdapter.js.map +1 -0
- package/dist/realtime/EventEmitter.d.ts +86 -0
- package/dist/realtime/EventEmitter.d.ts.map +1 -0
- package/dist/realtime/EventEmitter.js +171 -0
- package/dist/realtime/EventEmitter.js.map +1 -0
- package/dist/realtime/StreamingManager.d.ts +26 -0
- package/dist/realtime/StreamingManager.d.ts.map +1 -0
- package/dist/realtime/StreamingManager.js +175 -0
- package/dist/realtime/StreamingManager.js.map +1 -0
- package/dist/reasoning/Metacognition.d.ts +50 -0
- package/dist/reasoning/Metacognition.d.ts.map +1 -0
- package/dist/reasoning/Metacognition.js +347 -0
- package/dist/reasoning/Metacognition.js.map +1 -0
- package/dist/reasoning/ReasoningEngine.d.ts +57 -0
- package/dist/reasoning/ReasoningEngine.d.ts.map +1 -0
- package/dist/reasoning/ReasoningEngine.js +316 -0
- package/dist/reasoning/ReasoningEngine.js.map +1 -0
- package/dist/resilience/CircuitBreaker.d.ts +41 -0
- package/dist/resilience/CircuitBreaker.d.ts.map +1 -0
- package/dist/resilience/CircuitBreaker.js +108 -0
- package/dist/resilience/CircuitBreaker.js.map +1 -0
- package/dist/resilience/RetryManager.d.ts +14 -0
- package/dist/resilience/RetryManager.d.ts.map +1 -0
- package/dist/resilience/RetryManager.js +35 -0
- package/dist/resilience/RetryManager.js.map +1 -0
- package/dist/types/GenomeV2.d.ts +321 -0
- package/dist/types/GenomeV2.d.ts.map +1 -0
- package/dist/types/GenomeV2.js +2 -0
- package/dist/types/GenomeV2.js.map +1 -0
- package/dist/types/index.d.ts +401 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/tokens.d.ts +4 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +16 -0
- package/dist/utils/tokens.js.map +1 -0
- package/dist/wrap/FunctionLLMAdapter.d.ts +9 -0
- package/dist/wrap/FunctionLLMAdapter.d.ts.map +1 -0
- package/dist/wrap/FunctionLLMAdapter.js +26 -0
- package/dist/wrap/FunctionLLMAdapter.js.map +1 -0
- package/dist/wrap/GenomeBuilder.d.ts +13 -0
- package/dist/wrap/GenomeBuilder.d.ts.map +1 -0
- package/dist/wrap/GenomeBuilder.js +223 -0
- package/dist/wrap/GenomeBuilder.js.map +1 -0
- package/dist/wrap/InMemoryStorageAdapter.d.ts +97 -0
- package/dist/wrap/InMemoryStorageAdapter.d.ts.map +1 -0
- package/dist/wrap/InMemoryStorageAdapter.js +178 -0
- package/dist/wrap/InMemoryStorageAdapter.js.map +1 -0
- package/dist/wrap/WrapOptions.d.ts +47 -0
- package/dist/wrap/WrapOptions.d.ts.map +1 -0
- package/dist/wrap/WrapOptions.js +2 -0
- package/dist/wrap/WrapOptions.js.map +1 -0
- package/dist/wrap/WrappedAgent.d.ts +77 -0
- package/dist/wrap/WrappedAgent.d.ts.map +1 -0
- package/dist/wrap/WrappedAgent.js +143 -0
- package/dist/wrap/WrappedAgent.js.map +1 -0
- package/dist/wrap/index.d.ts +6 -0
- package/dist/wrap/index.d.ts.map +1 -0
- package/dist/wrap/index.js +5 -0
- package/dist/wrap/index.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Genome, UserDNA, MutationLog, GeneRegistryEntry } from '../types/index.js';
|
|
2
|
+
import type { SemanticFact } from '../memory/LayeredMemory.js';
|
|
3
|
+
export interface StorageAdapter {
|
|
4
|
+
initialize(): Promise<void>;
|
|
5
|
+
saveGenome(genome: Genome): Promise<void>;
|
|
6
|
+
loadGenome(genomeId: string): Promise<Genome | null>;
|
|
7
|
+
deleteGenome(genomeId: string): Promise<void>;
|
|
8
|
+
listGenomes(): Promise<Genome[]>;
|
|
9
|
+
saveDNA(userId: string, genomeId: string, dna: UserDNA): Promise<void>;
|
|
10
|
+
loadDNA(userId: string, genomeId: string): Promise<UserDNA | null>;
|
|
11
|
+
logMutation(mutation: MutationLog): Promise<void>;
|
|
12
|
+
getMutationHistory(genomeId: string, limit?: number): Promise<MutationLog[]>;
|
|
13
|
+
getGeneMutationHistory(genomeId: string, gene: string, limit?: number): Promise<MutationLog[]>;
|
|
14
|
+
recordInteraction(interaction: {
|
|
15
|
+
genomeId: string;
|
|
16
|
+
userId: string;
|
|
17
|
+
userMessage: string;
|
|
18
|
+
assistantResponse: string;
|
|
19
|
+
toolCalls: unknown[];
|
|
20
|
+
score?: number;
|
|
21
|
+
timestamp: Date;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
getRecentInteractions(genomeId: string, userId: string, limit?: number): Promise<unknown[]>;
|
|
24
|
+
recordFeedback(feedback: {
|
|
25
|
+
genomeId: string;
|
|
26
|
+
userId: string;
|
|
27
|
+
gene: string;
|
|
28
|
+
sentiment: 'positive' | 'negative' | 'neutral';
|
|
29
|
+
timestamp: Date;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
getAnalytics(genomeId: string): Promise<{
|
|
32
|
+
totalMutations: number;
|
|
33
|
+
totalInteractions: number;
|
|
34
|
+
avgFitnessImprovement: number;
|
|
35
|
+
userSatisfaction: number;
|
|
36
|
+
topGenes: Array<{
|
|
37
|
+
gene: string;
|
|
38
|
+
fitness: number;
|
|
39
|
+
}>;
|
|
40
|
+
}>;
|
|
41
|
+
saveFact(fact: SemanticFact, userId: string, genomeId: string): Promise<void>;
|
|
42
|
+
getFacts(userId: string, genomeId: string, includeExpired?: boolean): Promise<SemanticFact[]>;
|
|
43
|
+
getFact(factId: string): Promise<SemanticFact | null>;
|
|
44
|
+
updateFact(factId: string, updates: Partial<SemanticFact>): Promise<void>;
|
|
45
|
+
deleteFact(factId: string): Promise<void>;
|
|
46
|
+
deleteUserFacts(userId: string, genomeId: string): Promise<void>;
|
|
47
|
+
cleanExpiredFacts(userId: string, genomeId: string): Promise<number>;
|
|
48
|
+
saveToGeneRegistry?(entry: GeneRegistryEntry): Promise<void>;
|
|
49
|
+
queryGeneRegistry?(familyId: string, gene?: string, minFitness?: number): Promise<GeneRegistryEntry[]>;
|
|
50
|
+
getBestRegistryGene?(familyId: string, gene: string): Promise<GeneRegistryEntry | null>;
|
|
51
|
+
saveCalibrationPoint?(point: {
|
|
52
|
+
contextKey: string;
|
|
53
|
+
layer?: 0 | 1 | 2;
|
|
54
|
+
operator?: string;
|
|
55
|
+
taskType?: string;
|
|
56
|
+
threshold: number;
|
|
57
|
+
totalCandidates: number;
|
|
58
|
+
passedSandbox: number;
|
|
59
|
+
deployedSuccessfully: number;
|
|
60
|
+
rolledBack: number;
|
|
61
|
+
falsePositiveRate: number;
|
|
62
|
+
falseNegativeRate: number;
|
|
63
|
+
optimalThreshold: number;
|
|
64
|
+
timestamp: Date;
|
|
65
|
+
}): Promise<void>;
|
|
66
|
+
getCalibrationHistory?(contextKey: string, limit?: number): Promise<Array<{
|
|
67
|
+
contextKey: string;
|
|
68
|
+
layer?: number;
|
|
69
|
+
operator?: string;
|
|
70
|
+
taskType?: string;
|
|
71
|
+
threshold: number;
|
|
72
|
+
totalCandidates: number;
|
|
73
|
+
passedSandbox: number;
|
|
74
|
+
deployedSuccessfully: number;
|
|
75
|
+
rolledBack: number;
|
|
76
|
+
falsePositiveRate: number;
|
|
77
|
+
falseNegativeRate: number;
|
|
78
|
+
optimalThreshold: number;
|
|
79
|
+
timestamp: Date;
|
|
80
|
+
}>>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=StorageAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageAdapter.d.ts","sourceRoot":"","sources":["../../src/interfaces/StorageAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageAdapter.js","sourceRoot":"","sources":["../../src/interfaces/StorageAdapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
export interface Entity {
|
|
2
|
+
id: string;
|
|
3
|
+
type: 'user' | 'tool' | 'concept' | 'project' | 'skill' | 'preference';
|
|
4
|
+
name: string;
|
|
5
|
+
attributes: Record<string, unknown>;
|
|
6
|
+
confidence: number;
|
|
7
|
+
firstSeen: Date;
|
|
8
|
+
lastSeen: Date;
|
|
9
|
+
mentionCount: number;
|
|
10
|
+
}
|
|
11
|
+
export interface Relation {
|
|
12
|
+
id: string;
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
type: RelationType;
|
|
16
|
+
weight: number;
|
|
17
|
+
evidence: string;
|
|
18
|
+
confidence: number;
|
|
19
|
+
createdAt: Date;
|
|
20
|
+
}
|
|
21
|
+
export type RelationType = 'prefers' | 'uses' | 'works-on' | 'skilled-in' | 'related-to' | 'requires' | 'follows' | 'implies' | 'part-of';
|
|
22
|
+
export interface Inference {
|
|
23
|
+
conclusion: string;
|
|
24
|
+
basis: string[];
|
|
25
|
+
confidence: number;
|
|
26
|
+
createdAt: Date;
|
|
27
|
+
}
|
|
28
|
+
export interface MemoryQueryResult {
|
|
29
|
+
entities: Entity[];
|
|
30
|
+
relations: Relation[];
|
|
31
|
+
inferences: Inference[];
|
|
32
|
+
relevanceScore: number;
|
|
33
|
+
}
|
|
34
|
+
export interface TemporalPattern {
|
|
35
|
+
id: string;
|
|
36
|
+
description: string;
|
|
37
|
+
dayOfWeek?: number;
|
|
38
|
+
hourOfDay?: number;
|
|
39
|
+
frequency: number;
|
|
40
|
+
confidence: number;
|
|
41
|
+
prediction?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface KnowledgeSummary {
|
|
44
|
+
topEntities: Array<{
|
|
45
|
+
name: string;
|
|
46
|
+
type: Entity['type'];
|
|
47
|
+
mentionCount: number;
|
|
48
|
+
recency: 'recent' | 'month' | 'historical';
|
|
49
|
+
}>;
|
|
50
|
+
topRelations: Array<{
|
|
51
|
+
from: string;
|
|
52
|
+
to: string;
|
|
53
|
+
type: RelationType;
|
|
54
|
+
weight: number;
|
|
55
|
+
}>;
|
|
56
|
+
topInferences: Array<{
|
|
57
|
+
conclusion: string;
|
|
58
|
+
confidence: number;
|
|
59
|
+
}>;
|
|
60
|
+
interactionPatterns: string[];
|
|
61
|
+
summary: string;
|
|
62
|
+
}
|
|
63
|
+
export declare class AnalyticMemoryEngine {
|
|
64
|
+
private entities;
|
|
65
|
+
private relations;
|
|
66
|
+
private inferences;
|
|
67
|
+
private temporalPatterns;
|
|
68
|
+
private observationLog;
|
|
69
|
+
recordObservation(observation: {
|
|
70
|
+
subject: string;
|
|
71
|
+
action: string;
|
|
72
|
+
object?: string;
|
|
73
|
+
context?: Record<string, unknown>;
|
|
74
|
+
timestamp?: Date;
|
|
75
|
+
}): void;
|
|
76
|
+
recordFact(fact: {
|
|
77
|
+
subject: string;
|
|
78
|
+
predicate: string;
|
|
79
|
+
value: string;
|
|
80
|
+
confidence?: number;
|
|
81
|
+
}): void;
|
|
82
|
+
query(question: string): MemoryQueryResult;
|
|
83
|
+
detectTemporalPatterns(): TemporalPattern[];
|
|
84
|
+
predict(context: {
|
|
85
|
+
dayOfWeek?: number;
|
|
86
|
+
currentTopic?: string;
|
|
87
|
+
}): Array<{
|
|
88
|
+
prediction: string;
|
|
89
|
+
confidence: number;
|
|
90
|
+
}>;
|
|
91
|
+
getEntities(): Entity[];
|
|
92
|
+
getRelations(): Relation[];
|
|
93
|
+
getInferences(): Inference[];
|
|
94
|
+
toPromptSection(currentTopic?: string): string | null;
|
|
95
|
+
getKnowledgeSummary(userId?: string): KnowledgeSummary;
|
|
96
|
+
private upsertEntity;
|
|
97
|
+
private addRelation;
|
|
98
|
+
private inferRelations;
|
|
99
|
+
private getRelatedEntities;
|
|
100
|
+
private classifyEntityType;
|
|
101
|
+
private actionToRelation;
|
|
102
|
+
private predicateToRelation;
|
|
103
|
+
private computeEffectiveConfidence;
|
|
104
|
+
private getRecencyLabel;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=AnalyticMemoryEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticMemoryEngine.d.ts","sourceRoot":"","sources":["../../src/memory/AnalyticMemoryEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
const MAX_ENTITIES = 200;
|
|
2
|
+
const MAX_RELATIONS = 500;
|
|
3
|
+
const MAX_INFERENCES = 100;
|
|
4
|
+
const MIN_CONFIDENCE_FOR_INFERENCE = 0.4;
|
|
5
|
+
const HALF_LIFE_DAYS = 30;
|
|
6
|
+
const DOMAIN_IMPLICATIONS = {
|
|
7
|
+
'fintech': [
|
|
8
|
+
{ entity: 'security', relation: 'implies', confidence: 0.85 },
|
|
9
|
+
{ entity: 'compliance', relation: 'implies', confidence: 0.80 },
|
|
10
|
+
{ entity: 'precision', relation: 'implies', confidence: 0.75 },
|
|
11
|
+
],
|
|
12
|
+
'healthcare': [
|
|
13
|
+
{ entity: 'privacy', relation: 'implies', confidence: 0.90 },
|
|
14
|
+
{ entity: 'compliance', relation: 'implies', confidence: 0.85 },
|
|
15
|
+
],
|
|
16
|
+
'devops': [
|
|
17
|
+
{ entity: 'automation', relation: 'implies', confidence: 0.80 },
|
|
18
|
+
{ entity: 'monitoring', relation: 'implies', confidence: 0.75 },
|
|
19
|
+
],
|
|
20
|
+
'frontend': [
|
|
21
|
+
{ entity: 'accessibility', relation: 'implies', confidence: 0.65 },
|
|
22
|
+
{ entity: 'responsive-design', relation: 'implies', confidence: 0.70 },
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
export class AnalyticMemoryEngine {
|
|
26
|
+
entities = new Map();
|
|
27
|
+
relations = [];
|
|
28
|
+
inferences = [];
|
|
29
|
+
temporalPatterns = [];
|
|
30
|
+
observationLog = [];
|
|
31
|
+
recordObservation(observation) {
|
|
32
|
+
const ts = observation.timestamp ?? new Date();
|
|
33
|
+
this.upsertEntity({
|
|
34
|
+
id: observation.subject,
|
|
35
|
+
type: this.classifyEntityType(observation.subject),
|
|
36
|
+
name: observation.subject,
|
|
37
|
+
});
|
|
38
|
+
if (observation.object) {
|
|
39
|
+
this.upsertEntity({
|
|
40
|
+
id: observation.object,
|
|
41
|
+
type: this.classifyEntityType(observation.object),
|
|
42
|
+
name: observation.object,
|
|
43
|
+
});
|
|
44
|
+
const relationType = this.actionToRelation(observation.action);
|
|
45
|
+
this.addRelation(observation.subject, observation.object, relationType, observation.action);
|
|
46
|
+
}
|
|
47
|
+
this.observationLog.push({ action: observation.action, timestamp: ts });
|
|
48
|
+
if (this.observationLog.length > 500) {
|
|
49
|
+
this.observationLog = this.observationLog.slice(-250);
|
|
50
|
+
}
|
|
51
|
+
if (this.entities.size % 5 === 0) {
|
|
52
|
+
this.inferRelations();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
recordFact(fact) {
|
|
56
|
+
const entity = this.upsertEntity({
|
|
57
|
+
id: fact.subject,
|
|
58
|
+
type: this.classifyEntityType(fact.subject),
|
|
59
|
+
name: fact.subject,
|
|
60
|
+
});
|
|
61
|
+
entity.attributes[fact.predicate] = fact.value;
|
|
62
|
+
const valueEntity = this.upsertEntity({
|
|
63
|
+
id: fact.value.toLowerCase().replace(/\s+/g, '-'),
|
|
64
|
+
type: this.classifyEntityType(fact.value),
|
|
65
|
+
name: fact.value,
|
|
66
|
+
});
|
|
67
|
+
const relationType = this.predicateToRelation(fact.predicate);
|
|
68
|
+
this.addRelation(entity.id, valueEntity.id, relationType, `${fact.subject} ${fact.predicate} ${fact.value}`, fact.confidence);
|
|
69
|
+
}
|
|
70
|
+
query(question) {
|
|
71
|
+
const lower = question.toLowerCase();
|
|
72
|
+
const tokens = lower.split(/\s+/);
|
|
73
|
+
const matchingEntities = [];
|
|
74
|
+
for (const entity of this.entities.values()) {
|
|
75
|
+
const nameMatch = tokens.some(t => entity.name.toLowerCase().includes(t) || t.includes(entity.name.toLowerCase()));
|
|
76
|
+
const attrMatch = Object.values(entity.attributes).some(v => typeof v === 'string' && tokens.some(t => v.toLowerCase().includes(t)));
|
|
77
|
+
if (nameMatch || attrMatch) {
|
|
78
|
+
matchingEntities.push({
|
|
79
|
+
...entity,
|
|
80
|
+
attributes: { ...entity.attributes },
|
|
81
|
+
confidence: this.computeEffectiveConfidence(entity.confidence, entity.lastSeen),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const entityIds = new Set(matchingEntities.map(e => e.id));
|
|
86
|
+
const matchingRelations = this.relations.filter(r => entityIds.has(r.from) || entityIds.has(r.to));
|
|
87
|
+
const matchingInferences = this.inferences.filter(inf => tokens.some(t => inf.conclusion.toLowerCase().includes(t)));
|
|
88
|
+
const relevanceScore = matchingEntities.length > 0
|
|
89
|
+
? Math.min(1, (matchingEntities.length * 0.3 + matchingRelations.length * 0.2) / 3)
|
|
90
|
+
: 0;
|
|
91
|
+
return {
|
|
92
|
+
entities: matchingEntities,
|
|
93
|
+
relations: matchingRelations,
|
|
94
|
+
inferences: matchingInferences,
|
|
95
|
+
relevanceScore,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
detectTemporalPatterns() {
|
|
99
|
+
const dayFrequency = new Map();
|
|
100
|
+
for (const obs of this.observationLog) {
|
|
101
|
+
const day = obs.timestamp.getDay();
|
|
102
|
+
if (!dayFrequency.has(obs.action)) {
|
|
103
|
+
dayFrequency.set(obs.action, new Map());
|
|
104
|
+
}
|
|
105
|
+
const counts = dayFrequency.get(obs.action);
|
|
106
|
+
counts.set(day, (counts.get(day) || 0) + 1);
|
|
107
|
+
}
|
|
108
|
+
const patterns = [];
|
|
109
|
+
for (const [action, dayCounts] of dayFrequency) {
|
|
110
|
+
const entries = Array.from(dayCounts.entries());
|
|
111
|
+
const totalOccurrences = entries.reduce((sum, [, c]) => sum + c, 0);
|
|
112
|
+
if (totalOccurrences < 3)
|
|
113
|
+
continue;
|
|
114
|
+
const [peakDay, peakCount] = entries.sort((a, b) => b[1] - a[1])[0];
|
|
115
|
+
const confidence = peakCount / totalOccurrences;
|
|
116
|
+
if (confidence >= 0.4) {
|
|
117
|
+
const dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
118
|
+
patterns.push({
|
|
119
|
+
id: `temporal_${action}_${peakDay}`,
|
|
120
|
+
description: `${action} tends to happen on ${dayNames[peakDay]}`,
|
|
121
|
+
dayOfWeek: peakDay,
|
|
122
|
+
frequency: peakCount,
|
|
123
|
+
confidence,
|
|
124
|
+
prediction: `User may need help with ${action} on ${dayNames[peakDay]}`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.temporalPatterns = patterns;
|
|
129
|
+
return patterns;
|
|
130
|
+
}
|
|
131
|
+
predict(context) {
|
|
132
|
+
const predictions = [];
|
|
133
|
+
if (context.dayOfWeek !== undefined) {
|
|
134
|
+
for (const pattern of this.temporalPatterns) {
|
|
135
|
+
if (pattern.dayOfWeek === context.dayOfWeek && pattern.prediction) {
|
|
136
|
+
predictions.push({
|
|
137
|
+
prediction: pattern.prediction,
|
|
138
|
+
confidence: pattern.confidence,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (context.currentTopic) {
|
|
144
|
+
const relatedEntities = this.getRelatedEntities(context.currentTopic);
|
|
145
|
+
for (const { entity, relation } of relatedEntities) {
|
|
146
|
+
if (relation.type === 'follows') {
|
|
147
|
+
predictions.push({
|
|
148
|
+
prediction: `Based on history, ${entity.name} typically follows ${context.currentTopic}`,
|
|
149
|
+
confidence: relation.confidence,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return predictions.sort((a, b) => b.confidence - a.confidence);
|
|
155
|
+
}
|
|
156
|
+
getEntities() {
|
|
157
|
+
return Array.from(this.entities.values());
|
|
158
|
+
}
|
|
159
|
+
getRelations() {
|
|
160
|
+
return [...this.relations];
|
|
161
|
+
}
|
|
162
|
+
getInferences() {
|
|
163
|
+
return [...this.inferences];
|
|
164
|
+
}
|
|
165
|
+
toPromptSection(currentTopic) {
|
|
166
|
+
if (this.entities.size === 0 && this.inferences.length === 0) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const lines = ['## Knowledge Context'];
|
|
170
|
+
const relevantEntities = currentTopic
|
|
171
|
+
? this.getRelatedEntities(currentTopic).map(r => r.entity)
|
|
172
|
+
: Array.from(this.entities.values()).sort((a, b) => b.mentionCount - a.mentionCount).slice(0, 5);
|
|
173
|
+
if (relevantEntities.length > 0) {
|
|
174
|
+
lines.push('**Known facts:**');
|
|
175
|
+
for (const entity of relevantEntities.slice(0, 5)) {
|
|
176
|
+
const recencyLabel = this.getRecencyLabel(entity.lastSeen);
|
|
177
|
+
const attrs = Object.entries(entity.attributes)
|
|
178
|
+
.map(([k, v]) => `${k}=${String(v)}`)
|
|
179
|
+
.join(', ');
|
|
180
|
+
lines.push(`- ${entity.name} (${recencyLabel}): ${attrs || entity.type}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const activeInferences = this.inferences.filter(i => i.confidence >= 0.6);
|
|
184
|
+
if (activeInferences.length > 0) {
|
|
185
|
+
lines.push('**Inferences:**');
|
|
186
|
+
for (const inf of activeInferences.slice(0, 3)) {
|
|
187
|
+
lines.push(`- ${inf.conclusion} (confidence: ${(inf.confidence * 100).toFixed(0)}%)`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const predictions = this.predict({
|
|
191
|
+
dayOfWeek: new Date().getDay(),
|
|
192
|
+
currentTopic,
|
|
193
|
+
});
|
|
194
|
+
if (predictions.length > 0) {
|
|
195
|
+
lines.push('**Predictions:**');
|
|
196
|
+
for (const pred of predictions.slice(0, 2)) {
|
|
197
|
+
lines.push(`- ${pred.prediction}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return lines.length > 1 ? lines.join('\n') : null;
|
|
201
|
+
}
|
|
202
|
+
getKnowledgeSummary(userId) {
|
|
203
|
+
const entitiesWithDecay = Array.from(this.entities.values())
|
|
204
|
+
.filter(e => !userId || e.id !== userId)
|
|
205
|
+
.map(e => ({
|
|
206
|
+
...e,
|
|
207
|
+
effectiveConfidence: this.computeEffectiveConfidence(e.confidence, e.lastSeen),
|
|
208
|
+
recency: this.getRecencyLabel(e.lastSeen),
|
|
209
|
+
}))
|
|
210
|
+
.sort((a, b) => b.effectiveConfidence * b.mentionCount - a.effectiveConfidence * a.mentionCount);
|
|
211
|
+
const topEntities = entitiesWithDecay.slice(0, 5).map(e => ({
|
|
212
|
+
name: e.name,
|
|
213
|
+
type: e.type,
|
|
214
|
+
mentionCount: e.mentionCount,
|
|
215
|
+
recency: e.recency,
|
|
216
|
+
}));
|
|
217
|
+
const topRelations = this.relations
|
|
218
|
+
.sort((a, b) => b.weight - a.weight)
|
|
219
|
+
.slice(0, 5)
|
|
220
|
+
.map(r => ({ from: r.from, to: r.to, type: r.type, weight: r.weight }));
|
|
221
|
+
const topInferences = this.inferences
|
|
222
|
+
.filter(i => i.confidence >= 0.5)
|
|
223
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
224
|
+
.slice(0, 3)
|
|
225
|
+
.map(i => ({ conclusion: i.conclusion, confidence: i.confidence }));
|
|
226
|
+
const interactionPatterns = [];
|
|
227
|
+
if (this.temporalPatterns.length > 0) {
|
|
228
|
+
for (const p of this.temporalPatterns.slice(0, 2)) {
|
|
229
|
+
interactionPatterns.push(p.description);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const summaryParts = [];
|
|
233
|
+
const recentEntities = entitiesWithDecay.filter(e => e.recency === 'recent');
|
|
234
|
+
if (recentEntities.length > 0) {
|
|
235
|
+
summaryParts.push(`Recently active in: ${recentEntities.slice(0, 3).map(e => e.name).join(', ')}`);
|
|
236
|
+
}
|
|
237
|
+
const totalTopics = entitiesWithDecay.filter(e => e.type === 'concept' || e.type === 'tool').length;
|
|
238
|
+
if (totalTopics > 0) {
|
|
239
|
+
summaryParts.push(`${totalTopics} known topic${totalTopics > 1 ? 's' : ''}`);
|
|
240
|
+
}
|
|
241
|
+
if (topInferences.length > 0) {
|
|
242
|
+
summaryParts.push(`${topInferences.length} active inference${topInferences.length > 1 ? 's' : ''}`);
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
topEntities,
|
|
246
|
+
topRelations,
|
|
247
|
+
topInferences,
|
|
248
|
+
interactionPatterns,
|
|
249
|
+
summary: summaryParts.length > 0 ? summaryParts.join('. ') + '.' : '',
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
upsertEntity(data) {
|
|
253
|
+
const existing = this.entities.get(data.id);
|
|
254
|
+
if (existing) {
|
|
255
|
+
existing.lastSeen = new Date();
|
|
256
|
+
existing.mentionCount++;
|
|
257
|
+
return existing;
|
|
258
|
+
}
|
|
259
|
+
const entity = {
|
|
260
|
+
id: data.id,
|
|
261
|
+
type: data.type,
|
|
262
|
+
name: data.name,
|
|
263
|
+
attributes: {},
|
|
264
|
+
confidence: 0.7,
|
|
265
|
+
firstSeen: new Date(),
|
|
266
|
+
lastSeen: new Date(),
|
|
267
|
+
mentionCount: 1,
|
|
268
|
+
};
|
|
269
|
+
if (this.entities.size >= MAX_ENTITIES) {
|
|
270
|
+
const sorted = Array.from(this.entities.entries())
|
|
271
|
+
.sort((a, b) => a[1].mentionCount - b[1].mentionCount);
|
|
272
|
+
if (sorted.length > 0) {
|
|
273
|
+
this.entities.delete(sorted[0][0]);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
this.entities.set(data.id, entity);
|
|
277
|
+
return entity;
|
|
278
|
+
}
|
|
279
|
+
addRelation(fromId, toId, type, evidence, confidence) {
|
|
280
|
+
const existing = this.relations.find(r => r.from === fromId && r.to === toId && r.type === type);
|
|
281
|
+
if (existing) {
|
|
282
|
+
existing.weight = Math.min(1, existing.weight + 0.1);
|
|
283
|
+
existing.confidence = Math.min(1, (existing.confidence + (confidence ?? 0.7)) / 2);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
if (this.relations.length >= MAX_RELATIONS) {
|
|
287
|
+
this.relations.sort((a, b) => a.weight - b.weight);
|
|
288
|
+
this.relations.shift();
|
|
289
|
+
}
|
|
290
|
+
this.relations.push({
|
|
291
|
+
id: `rel_${fromId}_${toId}_${type}`,
|
|
292
|
+
from: fromId,
|
|
293
|
+
to: toId,
|
|
294
|
+
type,
|
|
295
|
+
weight: 0.5,
|
|
296
|
+
evidence,
|
|
297
|
+
confidence: confidence ?? 0.7,
|
|
298
|
+
createdAt: new Date(),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
inferRelations() {
|
|
302
|
+
const newInferences = [];
|
|
303
|
+
for (const entity of this.entities.values()) {
|
|
304
|
+
const implications = DOMAIN_IMPLICATIONS[entity.name.toLowerCase()];
|
|
305
|
+
if (!implications)
|
|
306
|
+
continue;
|
|
307
|
+
for (const impl of implications) {
|
|
308
|
+
const impliedEntity = this.upsertEntity({
|
|
309
|
+
id: impl.entity,
|
|
310
|
+
type: 'concept',
|
|
311
|
+
name: impl.entity,
|
|
312
|
+
});
|
|
313
|
+
this.addRelation(entity.id, impliedEntity.id, impl.relation, `${entity.name} implies ${impl.entity}`, impl.confidence);
|
|
314
|
+
newInferences.push({
|
|
315
|
+
conclusion: `Since user works in ${entity.name}, ${impl.entity} is likely important`,
|
|
316
|
+
basis: [entity.id, impliedEntity.id],
|
|
317
|
+
confidence: impl.confidence,
|
|
318
|
+
createdAt: new Date(),
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
for (const relAB of this.relations) {
|
|
323
|
+
if (relAB.confidence < MIN_CONFIDENCE_FOR_INFERENCE)
|
|
324
|
+
continue;
|
|
325
|
+
for (const relBC of this.relations) {
|
|
326
|
+
if (relBC.from !== relAB.to)
|
|
327
|
+
continue;
|
|
328
|
+
if (relBC.confidence < MIN_CONFIDENCE_FOR_INFERENCE)
|
|
329
|
+
continue;
|
|
330
|
+
if (relAB.type !== relBC.type)
|
|
331
|
+
continue;
|
|
332
|
+
if (relAB.from === relBC.to)
|
|
333
|
+
continue;
|
|
334
|
+
const existingAC = this.relations.find(r => r.from === relAB.from && r.to === relBC.to && r.type === relAB.type);
|
|
335
|
+
if (existingAC)
|
|
336
|
+
continue;
|
|
337
|
+
const inferredConfidence = relAB.confidence * relBC.confidence * 0.8;
|
|
338
|
+
if (inferredConfidence < MIN_CONFIDENCE_FOR_INFERENCE)
|
|
339
|
+
continue;
|
|
340
|
+
const fromEntity = this.entities.get(relAB.from);
|
|
341
|
+
const toEntity = this.entities.get(relBC.to);
|
|
342
|
+
newInferences.push({
|
|
343
|
+
conclusion: `${fromEntity?.name || relAB.from} ${relAB.type} ${toEntity?.name || relBC.to} (inferred)`,
|
|
344
|
+
basis: [relAB.id, relBC.id],
|
|
345
|
+
confidence: inferredConfidence,
|
|
346
|
+
createdAt: new Date(),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
for (const inf of newInferences) {
|
|
351
|
+
const exists = this.inferences.some(i => i.conclusion === inf.conclusion);
|
|
352
|
+
if (!exists) {
|
|
353
|
+
this.inferences.push(inf);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (this.inferences.length > MAX_INFERENCES) {
|
|
357
|
+
this.inferences.sort((a, b) => b.confidence - a.confidence);
|
|
358
|
+
this.inferences = this.inferences.slice(0, MAX_INFERENCES);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
getRelatedEntities(topic) {
|
|
362
|
+
const topicLower = topic.toLowerCase();
|
|
363
|
+
const results = [];
|
|
364
|
+
let topicEntityId = null;
|
|
365
|
+
for (const entity of this.entities.values()) {
|
|
366
|
+
if (entity.name.toLowerCase().includes(topicLower) || topicLower.includes(entity.name.toLowerCase())) {
|
|
367
|
+
topicEntityId = entity.id;
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
if (!topicEntityId)
|
|
372
|
+
return results;
|
|
373
|
+
for (const relation of this.relations) {
|
|
374
|
+
if (relation.from === topicEntityId) {
|
|
375
|
+
const entity = this.entities.get(relation.to);
|
|
376
|
+
if (entity)
|
|
377
|
+
results.push({ entity, relation });
|
|
378
|
+
}
|
|
379
|
+
else if (relation.to === topicEntityId) {
|
|
380
|
+
const entity = this.entities.get(relation.from);
|
|
381
|
+
if (entity)
|
|
382
|
+
results.push({ entity, relation });
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return results.sort((a, b) => b.relation.confidence - a.relation.confidence);
|
|
386
|
+
}
|
|
387
|
+
classifyEntityType(name) {
|
|
388
|
+
const lower = name.toLowerCase();
|
|
389
|
+
if (lower.startsWith('user') || lower === 'luis')
|
|
390
|
+
return 'user';
|
|
391
|
+
if (['python', 'javascript', 'typescript', 'react', 'vue', 'docker', 'kubernetes'].includes(lower))
|
|
392
|
+
return 'tool';
|
|
393
|
+
if (['fintech', 'healthcare', 'devops', 'frontend', 'backend'].includes(lower))
|
|
394
|
+
return 'concept';
|
|
395
|
+
return 'concept';
|
|
396
|
+
}
|
|
397
|
+
actionToRelation(action) {
|
|
398
|
+
const lower = action.toLowerCase();
|
|
399
|
+
if (lower.includes('prefer'))
|
|
400
|
+
return 'prefers';
|
|
401
|
+
if (lower.includes('use') || lower.includes('uses'))
|
|
402
|
+
return 'uses';
|
|
403
|
+
if (lower.includes('work'))
|
|
404
|
+
return 'works-on';
|
|
405
|
+
if (lower.includes('skill') || lower.includes('knows'))
|
|
406
|
+
return 'skilled-in';
|
|
407
|
+
if (lower.includes('require') || lower.includes('need'))
|
|
408
|
+
return 'requires';
|
|
409
|
+
if (lower.includes('follow') || lower.includes('then') || lower.includes('after'))
|
|
410
|
+
return 'follows';
|
|
411
|
+
return 'related-to';
|
|
412
|
+
}
|
|
413
|
+
predicateToRelation(predicate) {
|
|
414
|
+
const lower = predicate.toLowerCase();
|
|
415
|
+
if (lower.includes('prefer'))
|
|
416
|
+
return 'prefers';
|
|
417
|
+
if (lower.includes('use'))
|
|
418
|
+
return 'uses';
|
|
419
|
+
if (lower.includes('work'))
|
|
420
|
+
return 'works-on';
|
|
421
|
+
if (lower.includes('skill') || lower.includes('expert'))
|
|
422
|
+
return 'skilled-in';
|
|
423
|
+
if (lower.includes('part') || lower.includes('component'))
|
|
424
|
+
return 'part-of';
|
|
425
|
+
return 'related-to';
|
|
426
|
+
}
|
|
427
|
+
computeEffectiveConfidence(storedConfidence, lastSeen) {
|
|
428
|
+
const daysSinceLastSeen = (Date.now() - lastSeen.getTime()) / (1000 * 60 * 60 * 24);
|
|
429
|
+
return storedConfidence * Math.exp(-daysSinceLastSeen / HALF_LIFE_DAYS);
|
|
430
|
+
}
|
|
431
|
+
getRecencyLabel(lastSeen) {
|
|
432
|
+
const daysSince = (Date.now() - lastSeen.getTime()) / (1000 * 60 * 60 * 24);
|
|
433
|
+
if (daysSince <= 7)
|
|
434
|
+
return 'recent';
|
|
435
|
+
if (daysSince <= 30)
|
|
436
|
+
return 'month';
|
|
437
|
+
return 'historical';
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=AnalyticMemoryEngine.js.map
|