cogmem 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/BENCHMARKS.md +62 -0
  2. package/CHANGELOG.md +215 -0
  3. package/CONCURRENT_ACCESS.md +27 -0
  4. package/CONTRIBUTING.md +32 -0
  5. package/LICENSE +21 -0
  6. package/MEMORY_ATLAS.md +101 -0
  7. package/MEMORY_MODEL.md +179 -0
  8. package/README.md +751 -0
  9. package/RECALL_EXPLAINABILITY.md +152 -0
  10. package/RELEASE_CHECKLIST.md +92 -0
  11. package/SECURITY.md +21 -0
  12. package/dist/adapters/MarkdownSourceLoader.d.ts +5 -0
  13. package/dist/adapters/MarkdownSourceLoader.js +19 -0
  14. package/dist/adapters/conversation/ConversationMarkdownAdapter.d.ts +9 -0
  15. package/dist/adapters/conversation/ConversationMarkdownAdapter.js +233 -0
  16. package/dist/adapters/hermes/HermesStateDbAdapter.d.ts +10 -0
  17. package/dist/adapters/hermes/HermesStateDbAdapter.js +268 -0
  18. package/dist/adapters/hermes/HermesWorkspaceProfile.d.ts +15 -0
  19. package/dist/adapters/hermes/HermesWorkspaceProfile.js +82 -0
  20. package/dist/adapters/index.d.ts +15 -0
  21. package/dist/adapters/index.js +12 -0
  22. package/dist/adapters/openclaw/OpenClawAdapterSupport.d.ts +14 -0
  23. package/dist/adapters/openclaw/OpenClawAdapterSupport.js +29 -0
  24. package/dist/adapters/openclaw/OpenClawDailyMemoryAdapter.d.ts +8 -0
  25. package/dist/adapters/openclaw/OpenClawDailyMemoryAdapter.js +35 -0
  26. package/dist/adapters/openclaw/OpenClawMemoryIndexAdapter.d.ts +8 -0
  27. package/dist/adapters/openclaw/OpenClawMemoryIndexAdapter.js +23 -0
  28. package/dist/adapters/openclaw/OpenClawPersonaAdapter.d.ts +8 -0
  29. package/dist/adapters/openclaw/OpenClawPersonaAdapter.js +24 -0
  30. package/dist/adapters/openclaw/OpenClawSessionAdapter.d.ts +8 -0
  31. package/dist/adapters/openclaw/OpenClawSessionAdapter.js +15 -0
  32. package/dist/adapters/openclaw/OpenClawUserProfileAdapter.d.ts +8 -0
  33. package/dist/adapters/openclaw/OpenClawUserProfileAdapter.js +24 -0
  34. package/dist/adapters/openclaw/OpenClawWorkspaceProfile.d.ts +38 -0
  35. package/dist/adapters/openclaw/OpenClawWorkspaceProfile.js +199 -0
  36. package/dist/adapters/soul/SoulMarkdownAdapter.d.ts +14 -0
  37. package/dist/adapters/soul/SoulMarkdownAdapter.js +255 -0
  38. package/dist/adapters/types.d.ts +97 -0
  39. package/dist/adapters/types.js +185 -0
  40. package/dist/agent/AgentMemoryBackend.d.ts +291 -0
  41. package/dist/agent/AgentMemoryBackend.js +1272 -0
  42. package/dist/agent/AgentRecallQueryCompiler.d.ts +20 -0
  43. package/dist/agent/AgentRecallQueryCompiler.js +289 -0
  44. package/dist/agent/ContextHygiene.d.ts +9 -0
  45. package/dist/agent/ContextHygiene.js +20 -0
  46. package/dist/agent/MemoryUsageReceipt.d.ts +35 -0
  47. package/dist/agent/MemoryUsageReceipt.js +136 -0
  48. package/dist/agent/SessionWorkingState.d.ts +20 -0
  49. package/dist/agent/SessionWorkingState.js +94 -0
  50. package/dist/agent/index.d.ts +6 -0
  51. package/dist/agent/index.js +5 -0
  52. package/dist/algorithm/AlgorithmReviewBackend.d.ts +84 -0
  53. package/dist/algorithm/AlgorithmReviewBackend.js +261 -0
  54. package/dist/algorithm/AlgorithmReviewMetrics.d.ts +23 -0
  55. package/dist/algorithm/AlgorithmReviewMetrics.js +25 -0
  56. package/dist/algorithm/Phase2ModelAlgorithmReviewBackend.d.ts +38 -0
  57. package/dist/algorithm/Phase2ModelAlgorithmReviewBackend.js +372 -0
  58. package/dist/assets/FileAssetIngestionService.d.ts +32 -0
  59. package/dist/assets/FileAssetIngestionService.js +133 -0
  60. package/dist/assets/FileAssetStore.d.ts +36 -0
  61. package/dist/assets/FileAssetStore.js +152 -0
  62. package/dist/assets/FileBlockStore.d.ts +12 -0
  63. package/dist/assets/FileBlockStore.js +110 -0
  64. package/dist/assets/FileChunkStore.d.ts +23 -0
  65. package/dist/assets/FileChunkStore.js +179 -0
  66. package/dist/assets/FileChunker.d.ts +10 -0
  67. package/dist/assets/FileChunker.js +69 -0
  68. package/dist/assets/FileLoaderRegistry.d.ts +8 -0
  69. package/dist/assets/FileLoaderRegistry.js +21 -0
  70. package/dist/assets/FileLoaders.d.ts +37 -0
  71. package/dist/assets/FileLoaders.js +268 -0
  72. package/dist/assets/index.d.ts +10 -0
  73. package/dist/assets/index.js +7 -0
  74. package/dist/assets/providers/types.d.ts +47 -0
  75. package/dist/assets/providers/types.js +1 -0
  76. package/dist/assets/types.d.ts +159 -0
  77. package/dist/assets/types.js +1 -0
  78. package/dist/atlas/ActionFrameExtractor.d.ts +15 -0
  79. package/dist/atlas/ActionFrameExtractor.js +135 -0
  80. package/dist/atlas/MemoryAtlasIndexer.d.ts +32 -0
  81. package/dist/atlas/MemoryAtlasIndexer.js +74 -0
  82. package/dist/atlas/MemoryAtlasQueryCompiler.d.ts +23 -0
  83. package/dist/atlas/MemoryAtlasQueryCompiler.js +55 -0
  84. package/dist/atlas/MemoryAtlasService.d.ts +25 -0
  85. package/dist/atlas/MemoryAtlasService.js +216 -0
  86. package/dist/atlas/MemoryAtlasTypes.d.ts +107 -0
  87. package/dist/atlas/MemoryAtlasTypes.js +1 -0
  88. package/dist/atlas/index.d.ts +6 -0
  89. package/dist/atlas/index.js +5 -0
  90. package/dist/backend/SemanticBackend.d.ts +40 -0
  91. package/dist/backend/SemanticBackend.js +107 -0
  92. package/dist/batch/IngestionCursorStore.d.ts +52 -0
  93. package/dist/batch/IngestionCursorStore.js +153 -0
  94. package/dist/batch/InstalledBatchProcessor.d.ts +88 -0
  95. package/dist/batch/InstalledBatchProcessor.js +179 -0
  96. package/dist/batch/SourceOnboarding.d.ts +56 -0
  97. package/dist/batch/SourceOnboarding.js +366 -0
  98. package/dist/belief/BeliefGovernanceService.d.ts +59 -0
  99. package/dist/belief/BeliefGovernanceService.js +183 -0
  100. package/dist/belief/BeliefStore.d.ts +78 -0
  101. package/dist/belief/BeliefStore.js +898 -0
  102. package/dist/benchmark/BenchmarkRegistry.d.ts +16 -0
  103. package/dist/benchmark/BenchmarkRegistry.js +97 -0
  104. package/dist/benchmark/BenchmarkReport.d.ts +23 -0
  105. package/dist/benchmark/BenchmarkReport.js +62 -0
  106. package/dist/benchmark/BenchmarkRunner.d.ts +27 -0
  107. package/dist/benchmark/BenchmarkRunner.js +64 -0
  108. package/dist/benchmark/BrainEval.d.ts +134 -0
  109. package/dist/benchmark/BrainEval.js +252 -0
  110. package/dist/benchmark/ExternalBenchmarkRunner.d.ts +8 -0
  111. package/dist/benchmark/ExternalBenchmarkRunner.js +12 -0
  112. package/dist/benchmark/LongMemEvalAdapter.d.ts +46 -0
  113. package/dist/benchmark/LongMemEvalAdapter.js +88 -0
  114. package/dist/benchmark/LongMemEvalCli.d.ts +6 -0
  115. package/dist/benchmark/LongMemEvalCli.js +26 -0
  116. package/dist/bin/CliJson.d.ts +17 -0
  117. package/dist/bin/CliJson.js +20 -0
  118. package/dist/bin/brain-eval.d.ts +3 -0
  119. package/dist/bin/brain-eval.js +46 -0
  120. package/dist/bin/cogmem.d.ts +3 -0
  121. package/dist/bin/cogmem.js +95 -0
  122. package/dist/bin/compact.d.ts +3 -0
  123. package/dist/bin/compact.js +96 -0
  124. package/dist/bin/connect.d.ts +3 -0
  125. package/dist/bin/connect.js +398 -0
  126. package/dist/bin/doctor.d.ts +3 -0
  127. package/dist/bin/doctor.js +171 -0
  128. package/dist/bin/dream.d.ts +3 -0
  129. package/dist/bin/dream.js +65 -0
  130. package/dist/bin/episode.d.ts +3 -0
  131. package/dist/bin/episode.js +268 -0
  132. package/dist/bin/explain-recall.d.ts +3 -0
  133. package/dist/bin/explain-recall.js +139 -0
  134. package/dist/bin/import-hermes.d.ts +3 -0
  135. package/dist/bin/import-hermes.js +6 -0
  136. package/dist/bin/import-openclaw.d.ts +3 -0
  137. package/dist/bin/import-openclaw.js +6 -0
  138. package/dist/bin/import-support.d.ts +43 -0
  139. package/dist/bin/import-support.js +528 -0
  140. package/dist/bin/init.d.ts +30 -0
  141. package/dist/bin/init.js +761 -0
  142. package/dist/bin/mcp.d.ts +3 -0
  143. package/dist/bin/mcp.js +52 -0
  144. package/dist/bin/memory.d.ts +3 -0
  145. package/dist/bin/memory.js +803 -0
  146. package/dist/bin/migrate-vectors.d.ts +3 -0
  147. package/dist/bin/migrate-vectors.js +74 -0
  148. package/dist/bin/migrate.d.ts +3 -0
  149. package/dist/bin/migrate.js +95 -0
  150. package/dist/bin/normalize-transcript.d.ts +16 -0
  151. package/dist/bin/normalize-transcript.js +153 -0
  152. package/dist/bin/openclaw.d.ts +3 -0
  153. package/dist/bin/openclaw.js +78 -0
  154. package/dist/bin/prospective.d.ts +3 -0
  155. package/dist/bin/prospective.js +115 -0
  156. package/dist/bin/re-embed.d.ts +3 -0
  157. package/dist/bin/re-embed.js +46 -0
  158. package/dist/bin/repair.d.ts +3 -0
  159. package/dist/bin/repair.js +118 -0
  160. package/dist/bin/snapshot.d.ts +3 -0
  161. package/dist/bin/snapshot.js +100 -0
  162. package/dist/bin/strategy.d.ts +3 -0
  163. package/dist/bin/strategy.js +66 -0
  164. package/dist/bin/update-release.d.ts +15 -0
  165. package/dist/bin/update-release.js +62 -0
  166. package/dist/bin/update.d.ts +3 -0
  167. package/dist/bin/update.js +215 -0
  168. package/dist/binding/BindingClassifier.d.ts +19 -0
  169. package/dist/binding/BindingClassifier.js +270 -0
  170. package/dist/binding/BindingDecisionEngine.d.ts +11 -0
  171. package/dist/binding/BindingDecisionEngine.js +13 -0
  172. package/dist/binding/ClaimKeyGenerator.d.ts +4 -0
  173. package/dist/binding/ClaimKeyGenerator.js +21 -0
  174. package/dist/binding/MemoryBindingService.d.ts +28 -0
  175. package/dist/binding/MemoryBindingService.js +283 -0
  176. package/dist/binding/MemoryBindingTypes.d.ts +140 -0
  177. package/dist/binding/MemoryBindingTypes.js +1 -0
  178. package/dist/binding/TopicPathRegistry.d.ts +5 -0
  179. package/dist/binding/TopicPathRegistry.js +33 -0
  180. package/dist/binding/index.d.ts +12 -0
  181. package/dist/binding/index.js +6 -0
  182. package/dist/boards/ApprovalBoard.d.ts +14 -0
  183. package/dist/boards/ApprovalBoard.js +32 -0
  184. package/dist/boards/Board.d.ts +23 -0
  185. package/dist/boards/Board.js +1 -0
  186. package/dist/boards/BoardEventBuffer.d.ts +10 -0
  187. package/dist/boards/BoardEventBuffer.js +22 -0
  188. package/dist/boards/BoardEventBus.d.ts +15 -0
  189. package/dist/boards/BoardEventBus.js +38 -0
  190. package/dist/boards/BoardEventFilter.d.ts +5 -0
  191. package/dist/boards/BoardEventFilter.js +1 -0
  192. package/dist/boards/BoardRegistry.d.ts +11 -0
  193. package/dist/boards/BoardRegistry.js +15 -0
  194. package/dist/boards/ContextBoard.d.ts +15 -0
  195. package/dist/boards/ContextBoard.js +33 -0
  196. package/dist/boards/MemoryBoard.d.ts +13 -0
  197. package/dist/boards/MemoryBoard.js +30 -0
  198. package/dist/boards/ProcessBoard.d.ts +16 -0
  199. package/dist/boards/ProcessBoard.js +56 -0
  200. package/dist/boards/ProposalBoard.d.ts +13 -0
  201. package/dist/boards/ProposalBoard.js +37 -0
  202. package/dist/boards/ReasoningTraceBoard.d.ts +11 -0
  203. package/dist/boards/ReasoningTraceBoard.js +34 -0
  204. package/dist/boards/TaskBoard.d.ts +14 -0
  205. package/dist/boards/TaskBoard.js +37 -0
  206. package/dist/boards/index.d.ts +13 -0
  207. package/dist/boards/index.js +12 -0
  208. package/dist/config/CogmemConfig.d.ts +43 -0
  209. package/dist/config/CogmemConfig.js +247 -0
  210. package/dist/config/VectorDimension.d.ts +13 -0
  211. package/dist/config/VectorDimension.js +53 -0
  212. package/dist/context/ContextCortex.d.ts +71 -0
  213. package/dist/context/ContextCortex.js +156 -0
  214. package/dist/context/index.d.ts +2 -0
  215. package/dist/context/index.js +1 -0
  216. package/dist/core/ImportanceLevels.d.ts +4 -0
  217. package/dist/core/ImportanceLevels.js +6 -0
  218. package/dist/core/IntentParser.d.ts +12 -0
  219. package/dist/core/IntentParser.js +211 -0
  220. package/dist/core/MemoryGraph.d.ts +100 -0
  221. package/dist/core/MemoryGraph.js +860 -0
  222. package/dist/core/Metabolism.d.ts +43 -0
  223. package/dist/core/Metabolism.js +196 -0
  224. package/dist/core/Neuron.d.ts +20 -0
  225. package/dist/core/Neuron.js +51 -0
  226. package/dist/core/QueryClassifier.d.ts +36 -0
  227. package/dist/core/QueryClassifier.js +161 -0
  228. package/dist/core/Reflection.d.ts +42 -0
  229. package/dist/core/Reflection.js +183 -0
  230. package/dist/core/ResonanceCore.d.ts +26 -0
  231. package/dist/core/ResonanceCore.js +115 -0
  232. package/dist/core/Synapse.d.ts +10 -0
  233. package/dist/core/Synapse.js +27 -0
  234. package/dist/core/TwoStagePulseRanker.d.ts +16 -0
  235. package/dist/core/TwoStagePulseRanker.js +120 -0
  236. package/dist/dream/DreamScheduler.d.ts +47 -0
  237. package/dist/dream/DreamScheduler.js +156 -0
  238. package/dist/dream/index.d.ts +2 -0
  239. package/dist/dream/index.js +1 -0
  240. package/dist/embedding/EmbeddingProvider.d.ts +16 -0
  241. package/dist/embedding/EmbeddingProvider.js +12 -0
  242. package/dist/embedding/NeuronEmbeddingStore.d.ts +38 -0
  243. package/dist/embedding/NeuronEmbeddingStore.js +193 -0
  244. package/dist/embedding/OllamaEmbeddingProvider.d.ts +21 -0
  245. package/dist/embedding/OllamaEmbeddingProvider.js +65 -0
  246. package/dist/embedding/QwenAPIEmbeddingProvider.d.ts +26 -0
  247. package/dist/embedding/QwenAPIEmbeddingProvider.js +53 -0
  248. package/dist/embedding/ReEmbeddingPipeline.d.ts +30 -0
  249. package/dist/embedding/ReEmbeddingPipeline.js +119 -0
  250. package/dist/embedding/ReEmbeddingStatus.d.ts +10 -0
  251. package/dist/embedding/ReEmbeddingStatus.js +1 -0
  252. package/dist/embedding/index.d.ts +11 -0
  253. package/dist/embedding/index.js +5 -0
  254. package/dist/encryption/AesGcmEncryptionProvider.d.ts +9 -0
  255. package/dist/encryption/AesGcmEncryptionProvider.js +42 -0
  256. package/dist/encryption/EncryptionProvider.d.ts +6 -0
  257. package/dist/encryption/EncryptionProvider.js +3 -0
  258. package/dist/encryption/index.d.ts +4 -0
  259. package/dist/encryption/index.js +2 -0
  260. package/dist/engine/BeliefExtractor.d.ts +48 -0
  261. package/dist/engine/BeliefExtractor.js +1189 -0
  262. package/dist/engine/CognitiveGraphCompiler.d.ts +24 -0
  263. package/dist/engine/CognitiveGraphCompiler.js +243 -0
  264. package/dist/engine/ConsolidationPipeline.d.ts +66 -0
  265. package/dist/engine/ConsolidationPipeline.js +376 -0
  266. package/dist/engine/ConsolidationTrigger.d.ts +18 -0
  267. package/dist/engine/ConsolidationTrigger.js +41 -0
  268. package/dist/engine/CrossTopicSynthesizer.d.ts +28 -0
  269. package/dist/engine/CrossTopicSynthesizer.js +70 -0
  270. package/dist/engine/CrossTopicTrigger.d.ts +17 -0
  271. package/dist/engine/CrossTopicTrigger.js +29 -0
  272. package/dist/engine/DeepWriteConfig.d.ts +14 -0
  273. package/dist/engine/DeepWriteConfig.js +37 -0
  274. package/dist/engine/DeepWriteMemoryCompiler.d.ts +43 -0
  275. package/dist/engine/DeepWriteMemoryCompiler.js +42 -0
  276. package/dist/engine/DeepWriteMemoryOrchestrator.d.ts +60 -0
  277. package/dist/engine/DeepWriteMemoryOrchestrator.js +175 -0
  278. package/dist/engine/DeepWritePromotionPolicy.d.ts +48 -0
  279. package/dist/engine/DeepWritePromotionPolicy.js +514 -0
  280. package/dist/engine/DeepWriteRedactor.d.ts +14 -0
  281. package/dist/engine/DeepWriteRedactor.js +53 -0
  282. package/dist/engine/DreamCuratorSchedule.d.ts +18 -0
  283. package/dist/engine/DreamCuratorSchedule.js +95 -0
  284. package/dist/engine/DreamCuratorWorker.d.ts +67 -0
  285. package/dist/engine/DreamCuratorWorker.js +908 -0
  286. package/dist/engine/EntityResolutionEngine.d.ts +45 -0
  287. package/dist/engine/EntityResolutionEngine.js +105 -0
  288. package/dist/engine/EpisodicSemanticDistiller.d.ts +25 -0
  289. package/dist/engine/EpisodicSemanticDistiller.js +68 -0
  290. package/dist/engine/EvolutionVerifier.d.ts +39 -0
  291. package/dist/engine/EvolutionVerifier.js +104 -0
  292. package/dist/engine/FactCompiler.d.ts +41 -0
  293. package/dist/engine/FactCompiler.js +820 -0
  294. package/dist/engine/GraphCommunityEngine.d.ts +20 -0
  295. package/dist/engine/GraphCommunityEngine.js +91 -0
  296. package/dist/engine/ImportanceSignalDetector.d.ts +11 -0
  297. package/dist/engine/ImportanceSignalDetector.js +51 -0
  298. package/dist/engine/IngestionEngine.d.ts +44 -0
  299. package/dist/engine/IngestionEngine.js +182 -0
  300. package/dist/engine/InteractionBinder.d.ts +16 -0
  301. package/dist/engine/InteractionBinder.js +87 -0
  302. package/dist/engine/LocalSemanticCompiler.d.ts +40 -0
  303. package/dist/engine/LocalSemanticCompiler.js +111 -0
  304. package/dist/engine/MemoryConsolidationEngine.d.ts +11 -0
  305. package/dist/engine/MemoryConsolidationEngine.js +21 -0
  306. package/dist/engine/MemoryGate.d.ts +10 -0
  307. package/dist/engine/MemoryGate.js +34 -0
  308. package/dist/engine/OfflineConsolidationPipeline.d.ts +148 -0
  309. package/dist/engine/OfflineConsolidationPipeline.js +670 -0
  310. package/dist/engine/OrphanCleaner.d.ts +15 -0
  311. package/dist/engine/OrphanCleaner.js +27 -0
  312. package/dist/engine/PipelineMetrics.d.ts +32 -0
  313. package/dist/engine/PipelineMetrics.js +126 -0
  314. package/dist/engine/PrincipleDecayPolicy.d.ts +17 -0
  315. package/dist/engine/PrincipleDecayPolicy.js +64 -0
  316. package/dist/engine/TopologyCompiler.d.ts +25 -0
  317. package/dist/engine/TopologyCompiler.js +276 -0
  318. package/dist/engine/WorkingMemoryDelta.d.ts +23 -0
  319. package/dist/engine/WorkingMemoryDelta.js +63 -0
  320. package/dist/entity/EntityGovernanceService.d.ts +47 -0
  321. package/dist/entity/EntityGovernanceService.js +215 -0
  322. package/dist/entity/index.d.ts +3 -0
  323. package/dist/entity/index.js +1 -0
  324. package/dist/episode/CogmemBlockStripper.d.ts +11 -0
  325. package/dist/episode/CogmemBlockStripper.js +58 -0
  326. package/dist/episode/CorrectionResolver.d.ts +30 -0
  327. package/dist/episode/CorrectionResolver.js +17 -0
  328. package/dist/episode/EpisodeAssembler.d.ts +54 -0
  329. package/dist/episode/EpisodeAssembler.js +203 -0
  330. package/dist/episode/EpisodeImportIdentity.d.ts +7 -0
  331. package/dist/episode/EpisodeImportIdentity.js +17 -0
  332. package/dist/episode/EpisodeSemanticSummarizer.d.ts +4 -0
  333. package/dist/episode/EpisodeSemanticSummarizer.js +31 -0
  334. package/dist/episode/EpisodeStore.d.ts +189 -0
  335. package/dist/episode/EpisodeStore.js +680 -0
  336. package/dist/episode/EpisodeTypes.d.ts +96 -0
  337. package/dist/episode/EpisodeTypes.js +1 -0
  338. package/dist/episode/TurnRelationClassifier.d.ts +40 -0
  339. package/dist/episode/TurnRelationClassifier.js +205 -0
  340. package/dist/episode/index.d.ts +9 -0
  341. package/dist/episode/index.js +8 -0
  342. package/dist/eval/datasets/contradiction_injection.d.ts +3 -0
  343. package/dist/eval/datasets/contradiction_injection.js +56 -0
  344. package/dist/eval/datasets/noisy_tool_output_corpus.d.ts +16 -0
  345. package/dist/eval/datasets/noisy_tool_output_corpus.js +59 -0
  346. package/dist/eval/datasets/synthetic_long_conversation.d.ts +40 -0
  347. package/dist/eval/datasets/synthetic_long_conversation.js +136 -0
  348. package/dist/eval/runners/EvalRunner.d.ts +12 -0
  349. package/dist/eval/runners/EvalRunner.js +66 -0
  350. package/dist/eval/runners/ReportFormatter.d.ts +13 -0
  351. package/dist/eval/runners/ReportFormatter.js +59 -0
  352. package/dist/eval/strategy/ContextOutcomeStore.d.ts +12 -0
  353. package/dist/eval/strategy/ContextOutcomeStore.js +44 -0
  354. package/dist/eval/strategy/ContextPolicyScorer.d.ts +25 -0
  355. package/dist/eval/strategy/ContextPolicyScorer.js +58 -0
  356. package/dist/eval/strategy/MemoryUseJudge.d.ts +49 -0
  357. package/dist/eval/strategy/MemoryUseJudge.js +75 -0
  358. package/dist/eval/strategy/StrategyDiversitySelector.d.ts +8 -0
  359. package/dist/eval/strategy/StrategyDiversitySelector.js +44 -0
  360. package/dist/eval/strategy/StrategyRolloutEvaluator.d.ts +15 -0
  361. package/dist/eval/strategy/StrategyRolloutEvaluator.js +30 -0
  362. package/dist/eval/strategy/index.d.ts +6 -0
  363. package/dist/eval/strategy/index.js +5 -0
  364. package/dist/factory.d.ts +726 -0
  365. package/dist/factory.js +2118 -0
  366. package/dist/governance/CandidateReviewService.d.ts +33 -0
  367. package/dist/governance/CandidateReviewService.js +126 -0
  368. package/dist/governance/ContradictionResolver.d.ts +22 -0
  369. package/dist/governance/ContradictionResolver.js +54 -0
  370. package/dist/governance/CredibilityScorer.d.ts +10 -0
  371. package/dist/governance/CredibilityScorer.js +29 -0
  372. package/dist/governance/DecayPolicy.d.ts +18 -0
  373. package/dist/governance/DecayPolicy.js +28 -0
  374. package/dist/governance/MemoryExplain.d.ts +46 -0
  375. package/dist/governance/MemoryExplain.js +62 -0
  376. package/dist/governance/MemoryGovernanceExecutor.d.ts +18 -0
  377. package/dist/governance/MemoryGovernanceExecutor.js +37 -0
  378. package/dist/governance/MemoryGovernancePlan.d.ts +36 -0
  379. package/dist/governance/MemoryGovernancePlan.js +1 -0
  380. package/dist/governance/MemoryGovernanceValidator.d.ts +13 -0
  381. package/dist/governance/MemoryGovernanceValidator.js +53 -0
  382. package/dist/governance/ObservationHygieneRules.d.ts +17 -0
  383. package/dist/governance/ObservationHygieneRules.js +28 -0
  384. package/dist/governance/PiiRedactor.d.ts +20 -0
  385. package/dist/governance/PiiRedactor.js +37 -0
  386. package/dist/governance/SupersedeChain.d.ts +21 -0
  387. package/dist/governance/SupersedeChain.js +107 -0
  388. package/dist/governance/index.d.ts +14 -0
  389. package/dist/governance/index.js +6 -0
  390. package/dist/graph/BrainGraphView.d.ts +20 -0
  391. package/dist/graph/BrainGraphView.js +45 -0
  392. package/dist/host/openclaw/AutoMemoryPluginInstaller.d.ts +45 -0
  393. package/dist/host/openclaw/AutoMemoryPluginInstaller.js +1904 -0
  394. package/dist/internal.d.ts +148 -0
  395. package/dist/internal.js +144 -0
  396. package/dist/lexicon/coreMemoryLexicon.d.ts +96 -0
  397. package/dist/lexicon/coreMemoryLexicon.js +525 -0
  398. package/dist/lexicon/language-packs/en.d.ts +42 -0
  399. package/dist/lexicon/language-packs/en.js +41 -0
  400. package/dist/lexicon/language-packs/zh.d.ts +42 -0
  401. package/dist/lexicon/language-packs/zh.js +41 -0
  402. package/dist/lexicon/zh/entities.d.ts +2 -0
  403. package/dist/lexicon/zh/entities.js +17 -0
  404. package/dist/lexicon/zh/index.d.ts +5 -0
  405. package/dist/lexicon/zh/index.js +3 -0
  406. package/dist/lexicon/zh/stopwords.d.ts +2 -0
  407. package/dist/lexicon/zh/stopwords.js +22 -0
  408. package/dist/lexicon/zh/topics.d.ts +6 -0
  409. package/dist/lexicon/zh/topics.js +52 -0
  410. package/dist/mcp/CoreMcpTools.d.ts +33 -0
  411. package/dist/mcp/CoreMcpTools.js +832 -0
  412. package/dist/mcp/server.d.ts +5 -0
  413. package/dist/mcp/server.js +29 -0
  414. package/dist/meta/MetaObservationCollector.d.ts +37 -0
  415. package/dist/meta/MetaObservationCollector.js +348 -0
  416. package/dist/meta/PolicyProposalGenerator.d.ts +11 -0
  417. package/dist/meta/PolicyProposalGenerator.js +159 -0
  418. package/dist/meta/ProposalApplier.d.ts +18 -0
  419. package/dist/meta/ProposalApplier.js +91 -0
  420. package/dist/meta/ProposalConfigOverlay.d.ts +13 -0
  421. package/dist/meta/ProposalConfigOverlay.js +27 -0
  422. package/dist/meta/ProposalEvalRunner.d.ts +31 -0
  423. package/dist/meta/ProposalEvalRunner.js +62 -0
  424. package/dist/meta/ProposalLedger.d.ts +34 -0
  425. package/dist/meta/ProposalLedger.js +242 -0
  426. package/dist/meta/types.d.ts +63 -0
  427. package/dist/meta/types.js +1 -0
  428. package/dist/migrations/0001_init.d.ts +4 -0
  429. package/dist/migrations/0001_init.js +67 -0
  430. package/dist/migrations/0002_v06_platform.d.ts +10 -0
  431. package/dist/migrations/0002_v06_platform.js +103 -0
  432. package/dist/migrations/0003_v07_dialogues.d.ts +9 -0
  433. package/dist/migrations/0003_v07_dialogues.js +53 -0
  434. package/dist/migrations/0004_v09_self_improvement.d.ts +9 -0
  435. package/dist/migrations/0004_v09_self_improvement.js +100 -0
  436. package/dist/migrations/0005_dialogue_buffer.d.ts +8 -0
  437. package/dist/migrations/0005_dialogue_buffer.js +44 -0
  438. package/dist/migrations/0006_deep_write_memory.d.ts +3 -0
  439. package/dist/migrations/0006_deep_write_memory.js +54 -0
  440. package/dist/migrations/0007_deep_write_summaries.d.ts +3 -0
  441. package/dist/migrations/0007_deep_write_summaries.js +24 -0
  442. package/dist/migrations/0009_memory_importance.d.ts +3 -0
  443. package/dist/migrations/0009_memory_importance.js +18 -0
  444. package/dist/migrations/0010_skill_neurons.d.ts +3 -0
  445. package/dist/migrations/0010_skill_neurons.js +19 -0
  446. package/dist/migrations/0011_topic_path.d.ts +3 -0
  447. package/dist/migrations/0011_topic_path.js +19 -0
  448. package/dist/migrations/0012_governance_security.d.ts +3 -0
  449. package/dist/migrations/0012_governance_security.js +23 -0
  450. package/dist/migrations/0015_memory_governance.d.ts +3 -0
  451. package/dist/migrations/0015_memory_governance.js +74 -0
  452. package/dist/migrations/0016_entity_governance.d.ts +3 -0
  453. package/dist/migrations/0016_entity_governance.js +40 -0
  454. package/dist/migrations/0017_belief_graph.d.ts +3 -0
  455. package/dist/migrations/0017_belief_graph.js +41 -0
  456. package/dist/migrations/0018_temporal_memory.d.ts +3 -0
  457. package/dist/migrations/0018_temporal_memory.js +25 -0
  458. package/dist/migrations/0019_context_cortex.d.ts +3 -0
  459. package/dist/migrations/0019_context_cortex.js +19 -0
  460. package/dist/migrations/0020_prospective_memory.d.ts +3 -0
  461. package/dist/migrations/0020_prospective_memory.js +42 -0
  462. package/dist/migrations/0021_strategy_cortex.d.ts +3 -0
  463. package/dist/migrations/0021_strategy_cortex.js +23 -0
  464. package/dist/migrations/0022_episode_dream_engine.d.ts +3 -0
  465. package/dist/migrations/0022_episode_dream_engine.js +74 -0
  466. package/dist/migrations/0023_episode_dream_hardening.d.ts +3 -0
  467. package/dist/migrations/0023_episode_dream_hardening.js +65 -0
  468. package/dist/migrations/0024_episode_ontology_reliability.d.ts +3 -0
  469. package/dist/migrations/0024_episode_ontology_reliability.js +70 -0
  470. package/dist/migrations/0025_memory_atlas.d.ts +6 -0
  471. package/dist/migrations/0025_memory_atlas.js +268 -0
  472. package/dist/migrations/0026_runtime_governance_atlas_reliability.d.ts +3 -0
  473. package/dist/migrations/0026_runtime_governance_atlas_reliability.js +72 -0
  474. package/dist/migrations/0027_openclaw_upgrade_hotfix.d.ts +3 -0
  475. package/dist/migrations/0027_openclaw_upgrade_hotfix.js +21 -0
  476. package/dist/migrations/SchemaMigrationRunner.d.ts +21 -0
  477. package/dist/migrations/SchemaMigrationRunner.js +67 -0
  478. package/dist/migrations/index.d.ts +36 -0
  479. package/dist/migrations/index.js +57 -0
  480. package/dist/models/ModelCapabilityRouter.d.ts +17 -0
  481. package/dist/models/ModelCapabilityRouter.js +75 -0
  482. package/dist/models/ModelRegistry.d.ts +15 -0
  483. package/dist/models/ModelRegistry.js +132 -0
  484. package/dist/models/ModelRole.d.ts +19 -0
  485. package/dist/models/ModelRole.js +1 -0
  486. package/dist/models/UserInsight.d.ts +16 -0
  487. package/dist/models/UserInsight.js +9 -0
  488. package/dist/models/UserInsightExtractor.d.ts +19 -0
  489. package/dist/models/UserInsightExtractor.js +99 -0
  490. package/dist/models/UserModelManager.d.ts +21 -0
  491. package/dist/models/UserModelManager.js +41 -0
  492. package/dist/models/UserModelStore.d.ts +20 -0
  493. package/dist/models/UserModelStore.js +136 -0
  494. package/dist/models/WorkingMemoryReporter.d.ts +16 -0
  495. package/dist/models/WorkingMemoryReporter.js +38 -0
  496. package/dist/models/adapters/MemoryReviewAdapter.d.ts +12 -0
  497. package/dist/models/adapters/MemoryReviewAdapter.js +77 -0
  498. package/dist/models/index.d.ts +8 -0
  499. package/dist/models/index.js +5 -0
  500. package/dist/models/providers/AnthropicClient.d.ts +17 -0
  501. package/dist/models/providers/AnthropicClient.js +40 -0
  502. package/dist/models/providers/OpenAICompatibleClient.d.ts +24 -0
  503. package/dist/models/providers/OpenAICompatibleClient.js +76 -0
  504. package/dist/observability/DecisionExplainer.d.ts +5 -0
  505. package/dist/observability/DecisionExplainer.js +62 -0
  506. package/dist/observability/TraceEvent.d.ts +11 -0
  507. package/dist/observability/TraceEvent.js +1 -0
  508. package/dist/observability/TraceQuery.d.ts +15 -0
  509. package/dist/observability/TraceQuery.js +28 -0
  510. package/dist/observability/TraceStore.d.ts +15 -0
  511. package/dist/observability/TraceStore.js +110 -0
  512. package/dist/observability/TraceWriter.d.ts +8 -0
  513. package/dist/observability/TraceWriter.js +14 -0
  514. package/dist/ontology/MemoryOntology.d.ts +4 -0
  515. package/dist/ontology/MemoryOntology.js +7 -0
  516. package/dist/prospective/ProspectiveMemoryService.d.ts +79 -0
  517. package/dist/prospective/ProspectiveMemoryService.js +258 -0
  518. package/dist/prospective/index.d.ts +2 -0
  519. package/dist/prospective/index.js +1 -0
  520. package/dist/public.d.ts +160 -0
  521. package/dist/public.js +115 -0
  522. package/dist/recall/BrainRecall.d.ts +96 -0
  523. package/dist/recall/BrainRecall.js +574 -0
  524. package/dist/recall/HierarchicalRecallRouter.d.ts +24 -0
  525. package/dist/recall/HierarchicalRecallRouter.js +62 -0
  526. package/dist/recall/RecallExplanation.d.ts +59 -0
  527. package/dist/recall/RecallExplanation.js +244 -0
  528. package/dist/recall/RecallGovernance.d.ts +10 -0
  529. package/dist/recall/RecallGovernance.js +83 -0
  530. package/dist/recall/RecallSufficiencyGate.d.ts +40 -0
  531. package/dist/recall/RecallSufficiencyGate.js +208 -0
  532. package/dist/recall/SourceContextMetadata.d.ts +49 -0
  533. package/dist/recall/SourceContextMetadata.js +134 -0
  534. package/dist/recall/TopicClassifier.d.ts +33 -0
  535. package/dist/recall/TopicClassifier.js +138 -0
  536. package/dist/recall/TopicDecayPolicy.d.ts +15 -0
  537. package/dist/recall/TopicDecayPolicy.js +46 -0
  538. package/dist/recall/TopicRegistry.d.ts +12 -0
  539. package/dist/recall/TopicRegistry.js +26 -0
  540. package/dist/recall/TopicSummaryBoard.d.ts +27 -0
  541. package/dist/recall/TopicSummaryBoard.js +139 -0
  542. package/dist/recall/VectorCandidateFilter.d.ts +50 -0
  543. package/dist/recall/VectorCandidateFilter.js +78 -0
  544. package/dist/retrieval/ConditionDslEvaluator.d.ts +33 -0
  545. package/dist/retrieval/ConditionDslEvaluator.js +160 -0
  546. package/dist/retrieval/EntityActivationIndex.d.ts +14 -0
  547. package/dist/retrieval/EntityActivationIndex.js +19 -0
  548. package/dist/retrieval/EvidenceFusionPolicy.d.ts +30 -0
  549. package/dist/retrieval/EvidenceFusionPolicy.js +112 -0
  550. package/dist/retrieval/EvidenceFusionRanker.d.ts +13 -0
  551. package/dist/retrieval/EvidenceFusionRanker.js +17 -0
  552. package/dist/retrieval/NarrativeRecallAssembler.d.ts +32 -0
  553. package/dist/retrieval/NarrativeRecallAssembler.js +27 -0
  554. package/dist/retrieval/NativeQueryParser.d.ts +23 -0
  555. package/dist/retrieval/NativeQueryParser.js +135 -0
  556. package/dist/retrieval/PlanDslExecutor.d.ts +67 -0
  557. package/dist/retrieval/PlanDslExecutor.js +194 -0
  558. package/dist/retrieval/PolicyRuntimeEvaluator.d.ts +48 -0
  559. package/dist/retrieval/PolicyRuntimeEvaluator.js +96 -0
  560. package/dist/retrieval/PolicySideEffectExecutor.d.ts +50 -0
  561. package/dist/retrieval/PolicySideEffectExecutor.js +202 -0
  562. package/dist/retrieval/PulseRetrievalEngine.d.ts +37 -0
  563. package/dist/retrieval/PulseRetrievalEngine.js +51 -0
  564. package/dist/retrieval/QueryCompiler.d.ts +18 -0
  565. package/dist/retrieval/QueryCompiler.js +97 -0
  566. package/dist/retrieval/QueryTimePendingEntityResolver.d.ts +67 -0
  567. package/dist/retrieval/QueryTimePendingEntityResolver.js +260 -0
  568. package/dist/retrieval/RetrievalPlanner.d.ts +42 -0
  569. package/dist/retrieval/RetrievalPlanner.js +209 -0
  570. package/dist/retrieval/TemporalBranchSearch.d.ts +38 -0
  571. package/dist/retrieval/TemporalBranchSearch.js +109 -0
  572. package/dist/retrieval/UniverseNavigator.d.ts +43 -0
  573. package/dist/retrieval/UniverseNavigator.js +75 -0
  574. package/dist/retrieval/UniverseTraversalExecutor.d.ts +21 -0
  575. package/dist/retrieval/UniverseTraversalExecutor.js +77 -0
  576. package/dist/routing/AnswerEvidenceTrace.d.ts +18 -0
  577. package/dist/routing/AnswerEvidenceTrace.js +1 -0
  578. package/dist/routing/BrainToolDispatcher.d.ts +37 -0
  579. package/dist/routing/BrainToolDispatcher.js +163 -0
  580. package/dist/routing/ConfidenceGate.d.ts +26 -0
  581. package/dist/routing/ConfidenceGate.js +40 -0
  582. package/dist/routing/ConfirmationPhraseMatcher.d.ts +9 -0
  583. package/dist/routing/ConfirmationPhraseMatcher.js +43 -0
  584. package/dist/routing/DirectReplyFormatter.d.ts +5 -0
  585. package/dist/routing/DirectReplyFormatter.js +55 -0
  586. package/dist/routing/EvidenceBudgetManager.d.ts +30 -0
  587. package/dist/routing/EvidenceBudgetManager.js +55 -0
  588. package/dist/routing/ExecutionLoop.d.ts +79 -0
  589. package/dist/routing/ExecutionLoop.js +234 -0
  590. package/dist/routing/IntentClassifier.d.ts +15 -0
  591. package/dist/routing/IntentClassifier.js +97 -0
  592. package/dist/routing/IntentPatternMatcher.d.ts +12 -0
  593. package/dist/routing/IntentPatternMatcher.js +206 -0
  594. package/dist/routing/IterativeLLMClarifier.d.ts +80 -0
  595. package/dist/routing/IterativeLLMClarifier.js +408 -0
  596. package/dist/routing/LLMToolSchema.d.ts +60 -0
  597. package/dist/routing/LLMToolSchema.js +143 -0
  598. package/dist/routing/MessageRouter.d.ts +20 -0
  599. package/dist/routing/MessageRouter.js +58 -0
  600. package/dist/routing/SessionContextSelector.d.ts +12 -0
  601. package/dist/routing/SessionContextSelector.js +86 -0
  602. package/dist/routing/SystemIntentClassifier.d.ts +15 -0
  603. package/dist/routing/SystemIntentClassifier.js +50 -0
  604. package/dist/routing/TaskPlan.d.ts +31 -0
  605. package/dist/routing/TaskPlan.js +1 -0
  606. package/dist/routing/TaskRouter.d.ts +13 -0
  607. package/dist/routing/TaskRouter.js +111 -0
  608. package/dist/routing/ToolCallParser.d.ts +16 -0
  609. package/dist/routing/ToolCallParser.js +123 -0
  610. package/dist/routing/ToolEvidenceNormalizer.d.ts +13 -0
  611. package/dist/routing/ToolEvidenceNormalizer.js +96 -0
  612. package/dist/routing/ToolEvidencePack.d.ts +36 -0
  613. package/dist/routing/ToolEvidencePack.js +84 -0
  614. package/dist/routing/ToolResultSanitizer.d.ts +19 -0
  615. package/dist/routing/ToolResultSanitizer.js +58 -0
  616. package/dist/routing/ToolUsePolicy.d.ts +78 -0
  617. package/dist/routing/ToolUsePolicy.js +163 -0
  618. package/dist/routing/index.d.ts +32 -0
  619. package/dist/routing/index.js +19 -0
  620. package/dist/routing/templates/ability_template.d.ts +2 -0
  621. package/dist/routing/templates/ability_template.js +34 -0
  622. package/dist/routing/templates/approvals_template.d.ts +2 -0
  623. package/dist/routing/templates/approvals_template.js +43 -0
  624. package/dist/routing/templates/context_template.d.ts +2 -0
  625. package/dist/routing/templates/context_template.js +25 -0
  626. package/dist/routing/templates/contradictions_template.d.ts +2 -0
  627. package/dist/routing/templates/contradictions_template.js +36 -0
  628. package/dist/routing/templates/importance_template.d.ts +2 -0
  629. package/dist/routing/templates/importance_template.js +23 -0
  630. package/dist/routing/templates/memory_template.d.ts +2 -0
  631. package/dist/routing/templates/memory_template.js +37 -0
  632. package/dist/routing/templates/self_manifest_template.d.ts +5 -0
  633. package/dist/routing/templates/self_manifest_template.js +64 -0
  634. package/dist/routing/templates/tasks_template.d.ts +2 -0
  635. package/dist/routing/templates/tasks_template.js +41 -0
  636. package/dist/routing/templates/trace_template.d.ts +2 -0
  637. package/dist/routing/templates/trace_template.js +37 -0
  638. package/dist/routing/tools/EntityExpandTool.d.ts +25 -0
  639. package/dist/routing/tools/EntityExpandTool.js +59 -0
  640. package/dist/routing/tools/NeuronContextTool.d.ts +32 -0
  641. package/dist/routing/tools/NeuronContextTool.js +66 -0
  642. package/dist/routing/tools/SecondaryRecallTool.d.ts +27 -0
  643. package/dist/routing/tools/SecondaryRecallTool.js +30 -0
  644. package/dist/routing/tools/SkillDiscoveryTool.d.ts +13 -0
  645. package/dist/routing/tools/SkillDiscoveryTool.js +11 -0
  646. package/dist/snapshot/SnapshotExporter.d.ts +13 -0
  647. package/dist/snapshot/SnapshotExporter.js +70 -0
  648. package/dist/snapshot/SnapshotHeader.d.ts +15 -0
  649. package/dist/snapshot/SnapshotHeader.js +1 -0
  650. package/dist/snapshot/SnapshotImporter.d.ts +20 -0
  651. package/dist/snapshot/SnapshotImporter.js +40 -0
  652. package/dist/snapshot/errors.d.ts +18 -0
  653. package/dist/snapshot/errors.js +34 -0
  654. package/dist/snapshot/index.d.ts +5 -0
  655. package/dist/snapshot/index.js +3 -0
  656. package/dist/storage/StorageCompactor.d.ts +30 -0
  657. package/dist/storage/StorageCompactor.js +95 -0
  658. package/dist/store/ActivationStore.d.ts +45 -0
  659. package/dist/store/ActivationStore.js +135 -0
  660. package/dist/store/BackgroundJobStore.d.ts +49 -0
  661. package/dist/store/BackgroundJobStore.js +156 -0
  662. package/dist/store/CandidateReviewStore.d.ts +33 -0
  663. package/dist/store/CandidateReviewStore.js +67 -0
  664. package/dist/store/CognitiveGraphStore.d.ts +42 -0
  665. package/dist/store/CognitiveGraphStore.js +193 -0
  666. package/dist/store/CompilerConfidenceStore.d.ts +20 -0
  667. package/dist/store/CompilerConfidenceStore.js +76 -0
  668. package/dist/store/DeepWriteCandidateStore.d.ts +94 -0
  669. package/dist/store/DeepWriteCandidateStore.js +290 -0
  670. package/dist/store/DeterministicEmbedder.d.ts +10 -0
  671. package/dist/store/DeterministicEmbedder.js +24 -0
  672. package/dist/store/DreamLedgerStore.d.ts +22 -0
  673. package/dist/store/DreamLedgerStore.js +84 -0
  674. package/dist/store/Embedder.d.ts +14 -0
  675. package/dist/store/Embedder.js +52 -0
  676. package/dist/store/EmbedderFactory.d.ts +12 -0
  677. package/dist/store/EmbedderFactory.js +51 -0
  678. package/dist/store/EntityStore.d.ts +195 -0
  679. package/dist/store/EntityStore.js +941 -0
  680. package/dist/store/EventStore.d.ts +118 -0
  681. package/dist/store/EventStore.js +699 -0
  682. package/dist/store/FactStore.d.ts +76 -0
  683. package/dist/store/FactStore.js +356 -0
  684. package/dist/store/HnswlibVectorStore.d.ts +2 -0
  685. package/dist/store/HnswlibVectorStore.js +1 -0
  686. package/dist/store/IVectorStore.d.ts +32 -0
  687. package/dist/store/IVectorStore.js +1 -0
  688. package/dist/store/InteractionUnitStore.d.ts +52 -0
  689. package/dist/store/InteractionUnitStore.js +167 -0
  690. package/dist/store/MemoryAtlasStore.d.ts +60 -0
  691. package/dist/store/MemoryAtlasStore.js +500 -0
  692. package/dist/store/MemoryBindingStore.d.ts +77 -0
  693. package/dist/store/MemoryBindingStore.js +608 -0
  694. package/dist/store/MemoryGovernanceStore.d.ts +23 -0
  695. package/dist/store/MemoryGovernanceStore.js +103 -0
  696. package/dist/store/MemoryInspectionStore.d.ts +61 -0
  697. package/dist/store/MemoryInspectionStore.js +215 -0
  698. package/dist/store/PlanRuntimeStore.d.ts +83 -0
  699. package/dist/store/PlanRuntimeStore.js +257 -0
  700. package/dist/store/PolicyExecutionProjector.d.ts +17 -0
  701. package/dist/store/PolicyExecutionProjector.js +115 -0
  702. package/dist/store/PolicyExecutionStore.d.ts +62 -0
  703. package/dist/store/PolicyExecutionStore.js +290 -0
  704. package/dist/store/PolicyProjectionStore.d.ts +18 -0
  705. package/dist/store/PolicyProjectionStore.js +61 -0
  706. package/dist/store/ProjectionObservabilityStore.d.ts +38 -0
  707. package/dist/store/ProjectionObservabilityStore.js +310 -0
  708. package/dist/store/ReasoningChainStore.d.ts +13 -0
  709. package/dist/store/ReasoningChainStore.js +74 -0
  710. package/dist/store/RuntimeProjectionStore.d.ts +18 -0
  711. package/dist/store/RuntimeProjectionStore.js +61 -0
  712. package/dist/store/RuntimeProjector.d.ts +17 -0
  713. package/dist/store/RuntimeProjector.js +119 -0
  714. package/dist/store/SqliteVecStore.d.ts +25 -0
  715. package/dist/store/SqliteVecStore.js +126 -0
  716. package/dist/store/SummaryStore.d.ts +56 -0
  717. package/dist/store/SummaryStore.js +225 -0
  718. package/dist/store/TemporalAdjacencyStore.d.ts +49 -0
  719. package/dist/store/TemporalAdjacencyStore.js +300 -0
  720. package/dist/store/TopologyStore.d.ts +89 -0
  721. package/dist/store/TopologyStore.js +657 -0
  722. package/dist/store/VectorProjector.d.ts +22 -0
  723. package/dist/store/VectorProjector.js +125 -0
  724. package/dist/store/VectorStore.d.ts +35 -0
  725. package/dist/store/VectorStore.js +201 -0
  726. package/dist/strategy/StrategyCapsule.d.ts +44 -0
  727. package/dist/strategy/StrategyCapsule.js +1 -0
  728. package/dist/strategy/StrategyConditionedCandidateBuilder.d.ts +9 -0
  729. package/dist/strategy/StrategyConditionedCandidateBuilder.js +11 -0
  730. package/dist/strategy/StrategyContextFormatter.d.ts +3 -0
  731. package/dist/strategy/StrategyContextFormatter.js +25 -0
  732. package/dist/strategy/StrategyCortex.d.ts +28 -0
  733. package/dist/strategy/StrategyCortex.js +78 -0
  734. package/dist/strategy/StrategyTemplateRegistry.d.ts +9 -0
  735. package/dist/strategy/StrategyTemplateRegistry.js +78 -0
  736. package/dist/strategy/index.d.ts +6 -0
  737. package/dist/strategy/index.js +5 -0
  738. package/dist/temporal/TemporalMemoryService.d.ts +62 -0
  739. package/dist/temporal/TemporalMemoryService.js +128 -0
  740. package/dist/temporal/index.d.ts +2 -0
  741. package/dist/temporal/index.js +1 -0
  742. package/dist/topic/TopicAliasRegistry.d.ts +21 -0
  743. package/dist/topic/TopicAliasRegistry.js +67 -0
  744. package/dist/topic/TopicGovernance.d.ts +21 -0
  745. package/dist/topic/TopicGovernance.js +173 -0
  746. package/dist/topic/TopicPathRegistry.d.ts +36 -0
  747. package/dist/topic/TopicPathRegistry.js +105 -0
  748. package/dist/topic/TopicRelationGraph.d.ts +23 -0
  749. package/dist/topic/TopicRelationGraph.js +55 -0
  750. package/dist/topic/TopicTypes.d.ts +73 -0
  751. package/dist/topic/TopicTypes.js +1 -0
  752. package/dist/topic/index.d.ts +6 -0
  753. package/dist/topic/index.js +5 -0
  754. package/dist/types/AsyncEnrichment.d.ts +62 -0
  755. package/dist/types/AsyncEnrichment.js +7 -0
  756. package/dist/types/BrainRecallResult.d.ts +66 -0
  757. package/dist/types/BrainRecallResult.js +1 -0
  758. package/dist/types/ExtensionPoints.d.ts +116 -0
  759. package/dist/types/ExtensionPoints.js +1 -0
  760. package/dist/types/Migration.d.ts +22 -0
  761. package/dist/types/Migration.js +1 -0
  762. package/dist/types/QueryTimePendingEntityResolution.d.ts +11 -0
  763. package/dist/types/QueryTimePendingEntityResolution.js +23 -0
  764. package/dist/types/index.d.ts +855 -0
  765. package/dist/types/index.js +24 -0
  766. package/dist/types/query-ir.d.ts +71 -0
  767. package/dist/types/query-ir.js +4 -0
  768. package/dist/types/reasoning.d.ts +16 -0
  769. package/dist/types/reasoning.js +4 -0
  770. package/dist/utils/AAAKGenerator.d.ts +57 -0
  771. package/dist/utils/AAAKGenerator.js +212 -0
  772. package/dist/utils/Config.d.ts +78 -0
  773. package/dist/utils/Config.js +91 -0
  774. package/dist/utils/ConversationMarkdownNormalization.d.ts +88 -0
  775. package/dist/utils/ConversationMarkdownNormalization.js +567 -0
  776. package/dist/utils/Logger.d.ts +22 -0
  777. package/dist/utils/Logger.js +77 -0
  778. package/dist/utils/hash.d.ts +33 -0
  779. package/dist/utils/hash.js +53 -0
  780. package/dist/utils/text.d.ts +2 -0
  781. package/dist/utils/text.js +19 -0
  782. package/dist/utils/vector.d.ts +26 -0
  783. package/dist/utils/vector.js +38 -0
  784. package/examples/hermes-backend/AGENTS.md +218 -0
  785. package/examples/hermes-backend/README.md +153 -0
  786. package/examples/hermes-backend/SKILL.md +365 -0
  787. package/examples/hermes-backend/references/operations.md +202 -0
  788. package/examples/openclaw-backend/AGENTS.md +195 -0
  789. package/examples/openclaw-backend/README.md +228 -0
  790. package/examples/openclaw-backend/SKILL.md +464 -0
  791. package/examples/openclaw-backend/references/operations.md +269 -0
  792. package/install.sh +84 -0
  793. package/package.json +90 -0
@@ -0,0 +1,941 @@
1
+ import Database from 'bun:sqlite';
2
+ import { randomUUID } from 'crypto';
3
+ import { extractDeviceCandidate, extractProjectCandidate, extractRelativeReferences, inferReferenceType, isLatestReference, isPreviousReference, normalizeLexiconText } from '../lexicon/coreMemoryLexicon.js';
4
+ export class EntityStore {
5
+ db;
6
+ ownsDb;
7
+ constructor(dbOrPath = ':memory:') {
8
+ if (typeof dbOrPath === 'string') {
9
+ this.db = new Database(dbOrPath);
10
+ this.ownsDb = true;
11
+ }
12
+ else {
13
+ this.db = dbOrPath;
14
+ this.ownsDb = false;
15
+ }
16
+ this.initializeSchema();
17
+ }
18
+ getDatabase() {
19
+ return this.db;
20
+ }
21
+ initializeSchema() {
22
+ this.db.exec(`
23
+ CREATE TABLE IF NOT EXISTS entities (
24
+ entity_id TEXT PRIMARY KEY,
25
+ canonical_name TEXT NOT NULL,
26
+ type TEXT NOT NULL,
27
+ aliases_json TEXT NOT NULL,
28
+ status TEXT NOT NULL,
29
+ created_from TEXT,
30
+ metadata_json TEXT,
31
+ created_at INTEGER NOT NULL,
32
+ updated_at INTEGER NOT NULL
33
+ );
34
+
35
+ CREATE INDEX IF NOT EXISTS idx_entities_name_type
36
+ ON entities(canonical_name, type, updated_at DESC);
37
+
38
+ CREATE TABLE IF NOT EXISTS entity_instances (
39
+ instance_id TEXT PRIMARY KEY,
40
+ canonical_entity_id TEXT NOT NULL,
41
+ canonical_name TEXT NOT NULL,
42
+ type TEXT NOT NULL,
43
+ aliases_json TEXT NOT NULL,
44
+ status TEXT NOT NULL,
45
+ created_from TEXT,
46
+ metadata_json TEXT,
47
+ created_at INTEGER NOT NULL,
48
+ updated_at INTEGER NOT NULL
49
+ );
50
+
51
+ CREATE INDEX IF NOT EXISTS idx_entity_instances_name_type
52
+ ON entity_instances(canonical_name, type, updated_at DESC);
53
+
54
+ CREATE TABLE IF NOT EXISTS entity_aliases (
55
+ alias_id TEXT PRIMARY KEY,
56
+ entity_id TEXT NOT NULL,
57
+ alias_text TEXT NOT NULL,
58
+ normalized_alias TEXT NOT NULL,
59
+ created_at INTEGER NOT NULL,
60
+ updated_at INTEGER NOT NULL,
61
+ UNIQUE(entity_id, normalized_alias)
62
+ );
63
+
64
+ CREATE INDEX IF NOT EXISTS idx_entity_aliases_lookup
65
+ ON entity_aliases(normalized_alias, updated_at DESC);
66
+
67
+ CREATE TABLE IF NOT EXISTS entity_attributes (
68
+ attribute_id TEXT PRIMARY KEY,
69
+ entity_id TEXT NOT NULL,
70
+ attribute_key TEXT NOT NULL,
71
+ attribute_value TEXT NOT NULL,
72
+ normalized_value TEXT NOT NULL,
73
+ source_neuron_id TEXT,
74
+ created_at INTEGER NOT NULL,
75
+ updated_at INTEGER NOT NULL
76
+ );
77
+
78
+ CREATE INDEX IF NOT EXISTS idx_entity_attributes_lookup
79
+ ON entity_attributes(entity_id, attribute_key, updated_at DESC);
80
+
81
+ CREATE TABLE IF NOT EXISTS entity_relations (
82
+ relation_id TEXT PRIMARY KEY,
83
+ source_entity_id TEXT NOT NULL,
84
+ target_entity_id TEXT NOT NULL,
85
+ relation_type TEXT NOT NULL,
86
+ source_neuron_id TEXT,
87
+ created_at INTEGER NOT NULL,
88
+ UNIQUE(source_entity_id, target_entity_id, relation_type)
89
+ );
90
+
91
+ CREATE TABLE IF NOT EXISTS pending_entity_resolution (
92
+ pending_id TEXT PRIMARY KEY,
93
+ reference_text TEXT NOT NULL,
94
+ entity_type TEXT,
95
+ context_neuron_id TEXT,
96
+ resolved_entity_id TEXT,
97
+ status TEXT NOT NULL,
98
+ created_at INTEGER NOT NULL,
99
+ updated_at INTEGER NOT NULL
100
+ );
101
+
102
+ CREATE INDEX IF NOT EXISTS idx_pending_entity_resolution_status
103
+ ON pending_entity_resolution(status, updated_at DESC);
104
+
105
+ CREATE TABLE IF NOT EXISTS entity_mentions (
106
+ mention_id TEXT PRIMARY KEY,
107
+ entity_id TEXT NOT NULL,
108
+ neuron_id TEXT,
109
+ project_id TEXT,
110
+ mention_type TEXT NOT NULL,
111
+ created_at INTEGER NOT NULL
112
+ );
113
+
114
+ CREATE INDEX IF NOT EXISTS idx_entity_mentions_entity
115
+ ON entity_mentions(entity_id, created_at DESC);
116
+
117
+ CREATE INDEX IF NOT EXISTS idx_entity_mentions_project
118
+ ON entity_mentions(project_id, created_at DESC);
119
+
120
+ CREATE TABLE IF NOT EXISTS entity_alias_conflicts (
121
+ conflict_id TEXT PRIMARY KEY,
122
+ normalized_alias TEXT NOT NULL,
123
+ entity_type TEXT NOT NULL,
124
+ entity_ids_json TEXT NOT NULL,
125
+ policy TEXT NOT NULL,
126
+ status TEXT NOT NULL,
127
+ created_at INTEGER NOT NULL,
128
+ updated_at INTEGER NOT NULL,
129
+ UNIQUE(normalized_alias, entity_type)
130
+ );
131
+
132
+ CREATE INDEX IF NOT EXISTS idx_entity_alias_conflicts_lookup
133
+ ON entity_alias_conflicts(normalized_alias, entity_type, status);
134
+ `);
135
+ }
136
+ upsertEntity(input) {
137
+ const now = input.createdAt ?? Date.now();
138
+ const rawMention = typeof input.metadata?.rawMention === 'string'
139
+ ? String(input.metadata.rawMention)
140
+ : undefined;
141
+ const answerDisplayName = typeof input.metadata?.answerDisplayName === 'string'
142
+ ? String(input.metadata.answerDisplayName)
143
+ : undefined;
144
+ const aliases = Array.from(new Set([
145
+ ...(input.aliases || []),
146
+ answerDisplayName
147
+ ].filter((value) => Boolean(value && value.trim()))));
148
+ const metadata = {
149
+ ...(input.metadata || {}),
150
+ ens1CanonicalIdentityName: input.canonicalName,
151
+ ens1IdentityFields: ['canonicalName', 'type', 'canonicalEntityId', 'entityId'],
152
+ ens1DisplayFields: ['answerDisplayName'],
153
+ ...(rawMention ? { ens1RawMention: rawMention } : {}),
154
+ ...(rawMention ? { ens1RawMentions: [rawMention] } : {}),
155
+ ...(answerDisplayName ? { ens1AnswerDisplayName: answerDisplayName } : {})
156
+ };
157
+ const canonicalEntityId = this.ensureCanonicalEntity({
158
+ canonicalName: input.canonicalName,
159
+ type: input.type,
160
+ aliases,
161
+ status: input.status,
162
+ createdFrom: input.createdFrom,
163
+ metadata,
164
+ createdAt: now
165
+ });
166
+ const existing = this.findExistingInstance(input);
167
+ if (existing) {
168
+ const mergedAliases = Array.from(new Set([...(existing.aliases || []), ...aliases]));
169
+ const existingRawMentions = Array.isArray(existing.metadata?.ens1RawMentions)
170
+ ? existing.metadata.ens1RawMentions.filter((value) => typeof value === 'string')
171
+ : [];
172
+ const mergedMetadata = {
173
+ ...(existing.metadata || {}),
174
+ ...metadata,
175
+ ens1RawMentions: Array.from(new Set([
176
+ ...existingRawMentions,
177
+ ...(rawMention ? [rawMention] : [])
178
+ ]))
179
+ };
180
+ this.db.prepare(`
181
+ UPDATE entity_instances
182
+ SET aliases_json = ?, status = ?, metadata_json = ?, updated_at = ?
183
+ WHERE instance_id = ?
184
+ `).run(JSON.stringify(mergedAliases), input.status || existing.status, JSON.stringify(mergedMetadata), now, existing.entityId);
185
+ this.upsertAliases(existing.entityId, input.type, mergedAliases, now);
186
+ return this.findByEntityId(existing.entityId);
187
+ }
188
+ const record = {
189
+ entityId: `entity-${randomUUID()}`,
190
+ canonicalEntityId,
191
+ canonicalName: input.canonicalName,
192
+ type: input.type,
193
+ aliases,
194
+ status: input.status || 'active',
195
+ createdFrom: input.createdFrom,
196
+ metadata,
197
+ createdAt: now,
198
+ updatedAt: now
199
+ };
200
+ this.db.prepare(`
201
+ INSERT INTO entity_instances (
202
+ instance_id, canonical_entity_id, canonical_name, type, aliases_json, status, created_from, metadata_json, created_at, updated_at
203
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
204
+ `).run(record.entityId, canonicalEntityId, record.canonicalName, record.type, JSON.stringify(record.aliases), record.status, record.createdFrom || null, record.metadata ? JSON.stringify(record.metadata) : null, record.createdAt, record.updatedAt);
205
+ this.upsertAliases(record.entityId, input.type, [record.canonicalName, ...(record.aliases || [])], now);
206
+ return record;
207
+ }
208
+ findByAlias(aliasText, type) {
209
+ const matches = this.listByAlias(aliasText, type);
210
+ return matches[0] || null;
211
+ }
212
+ listByAlias(aliasText, type) {
213
+ const normalizedAlias = this.normalizeAlias(aliasText);
214
+ const rows = type
215
+ ? this.db.prepare(`
216
+ SELECT e.*
217
+ FROM entity_aliases ea
218
+ JOIN entity_instances e ON e.instance_id = ea.entity_id
219
+ WHERE ea.normalized_alias = ? AND e.type = ?
220
+ ORDER BY ea.updated_at DESC
221
+ LIMIT 12
222
+ `).all(normalizedAlias, type)
223
+ : this.db.prepare(`
224
+ SELECT e.*
225
+ FROM entity_aliases ea
226
+ JOIN entity_instances e ON e.instance_id = ea.entity_id
227
+ WHERE ea.normalized_alias = ?
228
+ ORDER BY ea.updated_at DESC
229
+ LIMIT 12
230
+ `).all(normalizedAlias);
231
+ return rows.map((row) => this.mapRow(row));
232
+ }
233
+ findByCanonicalName(canonicalName, type) {
234
+ const row = type
235
+ ? this.db.prepare(`
236
+ SELECT * FROM entity_instances WHERE canonical_name = ? AND type = ? ORDER BY updated_at DESC LIMIT 1
237
+ `).get(canonicalName, type)
238
+ : this.db.prepare(`
239
+ SELECT * FROM entity_instances WHERE canonical_name = ? ORDER BY updated_at DESC LIMIT 1
240
+ `).get(canonicalName);
241
+ return row ? this.mapRow(row) : null;
242
+ }
243
+ findByEntityId(entityId) {
244
+ const row = this.db.prepare(`
245
+ SELECT * FROM entity_instances WHERE instance_id = ?
246
+ `).get(entityId);
247
+ return row ? this.mapRow(row) : null;
248
+ }
249
+ findLatestByType(type) {
250
+ const row = this.db.prepare(`
251
+ SELECT * FROM entity_instances WHERE type = ? ORDER BY updated_at DESC, created_at DESC LIMIT 1
252
+ `).get(type);
253
+ return row ? this.mapRow(row) : null;
254
+ }
255
+ listRecentByType(type, limit = 8) {
256
+ const rows = this.db.prepare(`
257
+ SELECT * FROM entity_instances
258
+ WHERE type = ?
259
+ ORDER BY updated_at DESC, created_at DESC
260
+ LIMIT ?
261
+ `).all(type, limit);
262
+ return rows.map((row) => this.mapRow(row));
263
+ }
264
+ listByCreationOrder(type, limit = 8) {
265
+ const rows = this.db.prepare(`
266
+ SELECT * FROM entity_instances
267
+ WHERE type = ?
268
+ ORDER BY created_at DESC, updated_at DESC
269
+ LIMIT ?
270
+ `).all(type, limit);
271
+ return rows.map((row) => this.mapRow(row));
272
+ }
273
+ listRelations(entityId, relationType) {
274
+ const rows = relationType
275
+ ? this.db.prepare(`
276
+ SELECT * FROM entity_relations
277
+ WHERE (source_entity_id = ? OR target_entity_id = ?)
278
+ AND relation_type = ?
279
+ ORDER BY created_at DESC
280
+ `).all(entityId, entityId, relationType)
281
+ : this.db.prepare(`
282
+ SELECT * FROM entity_relations
283
+ WHERE source_entity_id = ? OR target_entity_id = ?
284
+ ORDER BY created_at DESC
285
+ `).all(entityId, entityId);
286
+ return rows.map((row) => ({
287
+ relationId: row.relation_id,
288
+ sourceEntityId: row.source_entity_id,
289
+ targetEntityId: row.target_entity_id,
290
+ relationType: row.relation_type,
291
+ sourceNeuronId: row.source_neuron_id || undefined,
292
+ createdAt: row.created_at
293
+ }));
294
+ }
295
+ resolveReference(referenceText, typeHint, options) {
296
+ const disambiguation = this.listDisambiguationCandidates(referenceText, typeHint, options);
297
+ if (disambiguation.length > 0)
298
+ return disambiguation[0].entity;
299
+ const directMatches = [
300
+ ...this.listByAlias(referenceText, typeHint),
301
+ ...(typeHint
302
+ ? (() => {
303
+ const exact = this.findByCanonicalName(referenceText, typeHint);
304
+ return exact ? [exact] : [];
305
+ })()
306
+ : [])
307
+ ];
308
+ const direct = this.pickBestEntity(directMatches, options);
309
+ if (direct)
310
+ return direct;
311
+ const normalized = this.normalizeAlias(referenceText);
312
+ if (normalized === '之前那个') {
313
+ return null;
314
+ }
315
+ const relativeReference = extractRelativeReferences(normalized)[0];
316
+ if (relativeReference) {
317
+ return this.resolveRelativeReference(relativeReference, typeHint || inferReferenceType(relativeReference, referenceText) || 'device', options);
318
+ }
319
+ if (typeHint) {
320
+ return this.resolveRelativeReference('最新', typeHint, options);
321
+ }
322
+ return null;
323
+ }
324
+ listDisambiguationCandidates(referenceText, typeHint, options) {
325
+ const directMatches = [
326
+ ...this.listByAlias(referenceText, typeHint),
327
+ ...(typeHint
328
+ ? (() => {
329
+ const exact = this.findByCanonicalName(referenceText, typeHint);
330
+ return exact ? [exact] : [];
331
+ })()
332
+ : [])
333
+ ];
334
+ const uniqueCandidates = Array.from(new Map(directMatches.map((entity) => [entity.entityId, entity])).values());
335
+ if (uniqueCandidates.length === 0)
336
+ return [];
337
+ const normalizedAlias = this.normalizeAlias(referenceText);
338
+ const conflicts = typeHint
339
+ ? this.listAliasConflicts(typeHint).filter((conflict) => conflict.normalizedAlias === normalizedAlias)
340
+ : this.listAliasConflicts().filter((conflict) => conflict.normalizedAlias === normalizedAlias);
341
+ const conflictPolicy = conflicts[0]?.policy;
342
+ const scored = uniqueCandidates.map((entity) => this.scoreDisambiguationCandidate(entity, normalizedAlias, conflictPolicy, options));
343
+ scored.sort((a, b) => b.score - a.score);
344
+ return scored;
345
+ }
346
+ listReferenceCandidatesWithRelativeSupport(referenceText, typeHint, options) {
347
+ const direct = this.listDisambiguationCandidates(referenceText, typeHint, options);
348
+ if (direct.length > 0)
349
+ return direct;
350
+ const normalized = this.normalizeAlias(referenceText);
351
+ const effectiveType = typeHint || inferReferenceType(normalized, referenceText) || 'device';
352
+ const explicitNameHint = this.extractRelativeNameHint(referenceText, effectiveType);
353
+ const recent = this.listByCreationOrder(effectiveType, 12)
354
+ .filter((entity) => this.matchesResolutionOptions(entity.entityId, options))
355
+ .filter((entity) => !this.isBareRelativeEntity(entity, effectiveType))
356
+ .filter((entity) => this.matchesExplicitRelativeHint(entity, explicitNameHint))
357
+ .slice(0, 4);
358
+ if (recent.length === 0)
359
+ return [];
360
+ const relativeReference = extractRelativeReferences(normalized)[0];
361
+ if (relativeReference && isPreviousReference(relativeReference)) {
362
+ return [recent[1], recent[0]]
363
+ .filter((entity) => Boolean(entity))
364
+ .map((entity, index) => ({
365
+ entity,
366
+ score: index === 0 ? 0.72 : 0.42,
367
+ reasons: ['relative_reference_previous'],
368
+ mentionCount: this.listTimeline({ entityId: entity.entityId, limit: 8 }).length,
369
+ latestMentionAt: this.listTimeline({ entityId: entity.entityId, limit: 1 })[0]?.createdAt
370
+ }));
371
+ }
372
+ if (relativeReference && isLatestReference(relativeReference) && !isWeakAmbiguousRelativeReference(relativeReference)) {
373
+ return recent
374
+ .slice(0, 2)
375
+ .map((entity, index) => ({
376
+ entity,
377
+ score: index === 0 ? 0.74 : 0.38,
378
+ reasons: ['relative_reference_latest'],
379
+ mentionCount: this.listTimeline({ entityId: entity.entityId, limit: 8 }).length,
380
+ latestMentionAt: this.listTimeline({ entityId: entity.entityId, limit: 1 })[0]?.createdAt
381
+ }));
382
+ }
383
+ return recent
384
+ .slice(0, 2)
385
+ .map((entity, index, items) => ({
386
+ entity,
387
+ score: items.length === 1
388
+ ? 0.71
389
+ : index === 0
390
+ ? 0.58
391
+ : 0.52,
392
+ reasons: items.length === 1
393
+ ? ['relative_reference_ambiguous_single_candidate']
394
+ : ['relative_reference_ambiguous_scope_only'],
395
+ mentionCount: this.listTimeline({ entityId: entity.entityId, limit: 8 }).length,
396
+ latestMentionAt: this.listTimeline({ entityId: entity.entityId, limit: 1 })[0]?.createdAt
397
+ }));
398
+ }
399
+ recordMention(input) {
400
+ const record = {
401
+ mentionId: `ement-${randomUUID()}`,
402
+ entityId: input.entityId,
403
+ neuronId: input.neuronId,
404
+ projectId: input.projectId,
405
+ mentionType: input.mentionType || 'referenced',
406
+ createdAt: input.createdAt ?? Date.now()
407
+ };
408
+ this.db.prepare(`
409
+ INSERT INTO entity_mentions (
410
+ mention_id, entity_id, neuron_id, project_id, mention_type, created_at
411
+ ) VALUES (?, ?, ?, ?, ?, ?)
412
+ `).run(record.mentionId, record.entityId, record.neuronId || null, record.projectId || null, record.mentionType, record.createdAt);
413
+ this.touchEntity(record.entityId, record.createdAt);
414
+ const entity = this.findByEntityId(record.entityId);
415
+ if (entity) {
416
+ for (const alias of [entity.canonicalName, ...(entity.aliases || [])]) {
417
+ this.refreshAliasConflict(this.normalizeAlias(alias), entity.type, record.createdAt);
418
+ }
419
+ }
420
+ return record;
421
+ }
422
+ listTimeline(input) {
423
+ const limit = input.limit ?? 50;
424
+ let sql = `
425
+ SELECT em.*
426
+ FROM entity_mentions em
427
+ JOIN entity_instances e ON e.instance_id = em.entity_id
428
+ WHERE 1 = 1
429
+ `;
430
+ const params = [];
431
+ if (input.entityId) {
432
+ sql += ` AND em.entity_id = ?`;
433
+ params.push(input.entityId);
434
+ }
435
+ if (input.type) {
436
+ sql += ` AND e.type = ?`;
437
+ params.push(input.type);
438
+ }
439
+ if (input.projectId) {
440
+ sql += ` AND em.project_id = ?`;
441
+ params.push(input.projectId);
442
+ }
443
+ sql += ` ORDER BY em.created_at DESC LIMIT ?`;
444
+ params.push(limit);
445
+ const rows = this.db.prepare(sql).all(...params);
446
+ return rows.map((row) => ({
447
+ mentionId: row.mention_id,
448
+ entityId: row.entity_id,
449
+ neuronId: row.neuron_id || undefined,
450
+ projectId: row.project_id || undefined,
451
+ mentionType: row.mention_type,
452
+ createdAt: row.created_at
453
+ }));
454
+ }
455
+ getEntityTimeline(input) {
456
+ const limit = input.limit ?? 50;
457
+ let sql = `
458
+ SELECT em.*, e.canonical_name, e.type
459
+ FROM entity_mentions em
460
+ JOIN entity_instances e ON e.instance_id = em.entity_id
461
+ WHERE 1 = 1
462
+ `;
463
+ const params = [];
464
+ if (input.type) {
465
+ sql += ` AND e.type = ?`;
466
+ params.push(input.type);
467
+ }
468
+ if (input.projectId) {
469
+ sql += ` AND em.project_id = ?`;
470
+ params.push(input.projectId);
471
+ }
472
+ if (input.entityIds?.length) {
473
+ sql += ` AND em.entity_id IN (${input.entityIds.map(() => '?').join(', ')})`;
474
+ params.push(...input.entityIds);
475
+ }
476
+ sql += ` ORDER BY em.created_at DESC LIMIT ?`;
477
+ params.push(limit);
478
+ const rows = this.db.prepare(sql).all(...params);
479
+ return rows.map((row) => ({
480
+ entityId: row.entity_id,
481
+ canonicalName: row.canonical_name,
482
+ type: row.type,
483
+ mentionId: row.mention_id,
484
+ neuronId: row.neuron_id || undefined,
485
+ projectId: row.project_id || undefined,
486
+ mentionType: row.mention_type,
487
+ createdAt: row.created_at
488
+ }));
489
+ }
490
+ listEntitiesUpdatedInRange(startTime, endTime, type) {
491
+ const rows = type
492
+ ? this.db.prepare(`
493
+ SELECT *
494
+ FROM entity_instances
495
+ WHERE updated_at >= ? AND updated_at < ? AND type = ?
496
+ ORDER BY updated_at DESC, created_at DESC
497
+ `).all(startTime, endTime, type)
498
+ : this.db.prepare(`
499
+ SELECT *
500
+ FROM entity_instances
501
+ WHERE updated_at >= ? AND updated_at < ?
502
+ ORDER BY updated_at DESC, created_at DESC
503
+ `).all(startTime, endTime);
504
+ return rows.map((row) => this.mapRow(row));
505
+ }
506
+ archiveEntity(entityId, updatedAt = Date.now()) {
507
+ this.db.prepare(`
508
+ UPDATE entity_instances
509
+ SET status = 'archived', updated_at = ?
510
+ WHERE instance_id = ?
511
+ `).run(updatedAt, entityId);
512
+ }
513
+ addAttribute(input) {
514
+ const now = input.createdAt ?? Date.now();
515
+ const record = {
516
+ attributeId: `eattr-${randomUUID()}`,
517
+ entityId: input.entityId,
518
+ attributeKey: input.attributeKey,
519
+ attributeValue: input.attributeValue,
520
+ normalizedValue: this.normalizeAlias(input.attributeValue),
521
+ sourceNeuronId: input.sourceNeuronId,
522
+ createdAt: now,
523
+ updatedAt: now
524
+ };
525
+ this.db.prepare(`
526
+ INSERT INTO entity_attributes (
527
+ attribute_id, entity_id, attribute_key, attribute_value, normalized_value, source_neuron_id, created_at, updated_at
528
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
529
+ `).run(record.attributeId, record.entityId, record.attributeKey, record.attributeValue, record.normalizedValue, record.sourceNeuronId || null, record.createdAt, record.updatedAt);
530
+ this.touchEntity(record.entityId, now);
531
+ return record;
532
+ }
533
+ listAttributes(entityId, attributeKey) {
534
+ const rows = attributeKey
535
+ ? this.db.prepare(`
536
+ SELECT * FROM entity_attributes
537
+ WHERE entity_id = ? AND attribute_key = ?
538
+ ORDER BY updated_at DESC
539
+ `).all(entityId, attributeKey)
540
+ : this.db.prepare(`
541
+ SELECT * FROM entity_attributes
542
+ WHERE entity_id = ?
543
+ ORDER BY updated_at DESC
544
+ `).all(entityId);
545
+ return rows.map((row) => ({
546
+ attributeId: row.attribute_id,
547
+ entityId: row.entity_id,
548
+ attributeKey: row.attribute_key,
549
+ attributeValue: row.attribute_value,
550
+ normalizedValue: row.normalized_value,
551
+ sourceNeuronId: row.source_neuron_id || undefined,
552
+ createdAt: row.created_at,
553
+ updatedAt: row.updated_at
554
+ }));
555
+ }
556
+ addRelation(input) {
557
+ const createdAt = input.createdAt ?? Date.now();
558
+ const existing = this.db.prepare(`
559
+ SELECT relation_id, created_at
560
+ FROM entity_relations
561
+ WHERE source_entity_id = ? AND target_entity_id = ? AND relation_type = ?
562
+ `).get(input.sourceEntityId, input.targetEntityId, input.relationType);
563
+ const relationId = existing?.relation_id || `erel-${randomUUID()}`;
564
+ this.db.prepare(`
565
+ INSERT OR REPLACE INTO entity_relations (
566
+ relation_id, source_entity_id, target_entity_id, relation_type, source_neuron_id, created_at
567
+ ) VALUES (?, ?, ?, ?, ?, ?)
568
+ `).run(relationId, input.sourceEntityId, input.targetEntityId, input.relationType, input.sourceNeuronId || null, existing?.created_at || createdAt);
569
+ return {
570
+ relationId,
571
+ sourceEntityId: input.sourceEntityId,
572
+ targetEntityId: input.targetEntityId,
573
+ relationType: input.relationType,
574
+ sourceNeuronId: input.sourceNeuronId,
575
+ createdAt: existing?.created_at || createdAt
576
+ };
577
+ }
578
+ registerPendingResolution(input) {
579
+ const now = input.createdAt ?? Date.now();
580
+ const record = {
581
+ pendingId: `eper-${randomUUID()}`,
582
+ referenceText: input.referenceText,
583
+ entityType: input.entityType,
584
+ contextNeuronId: input.contextNeuronId,
585
+ status: 'pending',
586
+ createdAt: now,
587
+ updatedAt: now
588
+ };
589
+ this.db.prepare(`
590
+ INSERT INTO pending_entity_resolution (
591
+ pending_id, reference_text, entity_type, context_neuron_id, resolved_entity_id, status, created_at, updated_at
592
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
593
+ `).run(record.pendingId, record.referenceText, record.entityType || null, record.contextNeuronId || null, null, record.status, record.createdAt, record.updatedAt);
594
+ return record;
595
+ }
596
+ resolvePendingReference(pendingId, entityId, resolvedAt = Date.now()) {
597
+ const row = this.db.prepare(`
598
+ SELECT * FROM pending_entity_resolution WHERE pending_id = ?
599
+ `).get(pendingId);
600
+ if (!row)
601
+ return null;
602
+ this.db.prepare(`
603
+ UPDATE pending_entity_resolution
604
+ SET resolved_entity_id = ?, status = 'resolved', updated_at = ?
605
+ WHERE pending_id = ?
606
+ `).run(entityId, resolvedAt, pendingId);
607
+ return {
608
+ pendingId,
609
+ referenceText: row.reference_text,
610
+ entityType: row.entity_type || undefined,
611
+ contextNeuronId: row.context_neuron_id || undefined,
612
+ resolvedEntityId: entityId,
613
+ status: 'resolved',
614
+ createdAt: row.created_at,
615
+ updatedAt: resolvedAt
616
+ };
617
+ }
618
+ listPendingResolutions(filter) {
619
+ const rows = this.db.prepare(`
620
+ SELECT *
621
+ FROM pending_entity_resolution
622
+ WHERE (? IS NULL OR status = ?)
623
+ AND (? IS NULL OR entity_type = ?)
624
+ ORDER BY updated_at DESC, created_at DESC
625
+ `).all(filter?.status || null, filter?.status || null, filter?.entityType || null, filter?.entityType || null);
626
+ return rows.map((row) => ({
627
+ pendingId: row.pending_id,
628
+ referenceText: row.reference_text,
629
+ entityType: row.entity_type || undefined,
630
+ contextNeuronId: row.context_neuron_id || undefined,
631
+ resolvedEntityId: row.resolved_entity_id || undefined,
632
+ status: row.status,
633
+ createdAt: row.created_at,
634
+ updatedAt: row.updated_at
635
+ }));
636
+ }
637
+ listAliasConflicts(type) {
638
+ const rows = type
639
+ ? this.db.prepare(`
640
+ SELECT * FROM entity_alias_conflicts
641
+ WHERE entity_type = ? AND status = 'active'
642
+ ORDER BY updated_at DESC
643
+ `).all(type)
644
+ : this.db.prepare(`
645
+ SELECT * FROM entity_alias_conflicts
646
+ WHERE status = 'active'
647
+ ORDER BY updated_at DESC
648
+ `).all();
649
+ return rows.map((row) => ({
650
+ conflictId: row.conflict_id,
651
+ normalizedAlias: row.normalized_alias,
652
+ entityType: row.entity_type,
653
+ entityIds: row.entity_ids_json ? JSON.parse(row.entity_ids_json) : [],
654
+ policy: row.policy,
655
+ status: row.status,
656
+ createdAt: row.created_at,
657
+ updatedAt: row.updated_at
658
+ }));
659
+ }
660
+ close() {
661
+ if (this.ownsDb)
662
+ this.db.close();
663
+ }
664
+ addAlias(entityId, alias, updatedAt = Date.now()) {
665
+ const entity = this.findByEntityId(entityId);
666
+ if (!entity || !alias.trim())
667
+ return;
668
+ const aliases = Array.from(new Set([...entity.aliases, alias.trim()]));
669
+ this.db.prepare(`UPDATE entity_instances SET aliases_json = ?, updated_at = ? WHERE instance_id = ?`)
670
+ .run(JSON.stringify(aliases), updatedAt, entityId);
671
+ this.upsertAliases(entityId, entity.type, [alias], updatedAt);
672
+ }
673
+ removeAlias(entityId, alias, updatedAt = Date.now()) {
674
+ const entity = this.findByEntityId(entityId);
675
+ if (!entity || entity.canonicalName === alias)
676
+ return;
677
+ const normalized = this.normalizeAlias(alias);
678
+ const aliases = entity.aliases.filter((item) => this.normalizeAlias(item) !== normalized);
679
+ this.db.prepare(`UPDATE entity_instances SET aliases_json = ?, updated_at = ? WHERE instance_id = ?`)
680
+ .run(JSON.stringify(aliases), updatedAt, entityId);
681
+ this.db.prepare(`DELETE FROM entity_aliases WHERE entity_id = ? AND normalized_alias = ?`).run(entityId, normalized);
682
+ this.refreshAliasConflict(normalized, entity.type, updatedAt);
683
+ }
684
+ redirectInstance(input) {
685
+ this.db.prepare(`
686
+ UPDATE entity_instances
687
+ SET canonical_entity_id = ?, status = ?, updated_at = ?
688
+ WHERE instance_id = ?
689
+ `).run(input.targetCanonicalEntityId, input.status || 'archived', input.updatedAt ?? Date.now(), input.sourceEntityId);
690
+ }
691
+ restoreInstance(input) {
692
+ this.db.prepare(`
693
+ UPDATE entity_instances
694
+ SET canonical_entity_id = ?, status = ?, updated_at = ?
695
+ WHERE instance_id = ?
696
+ `).run(input.canonicalEntityId, input.status, input.updatedAt ?? Date.now(), input.entityId);
697
+ }
698
+ upsertAliases(entityId, entityType, aliases, timestamp) {
699
+ const stmt = this.db.prepare(`
700
+ INSERT OR IGNORE INTO entity_aliases (
701
+ alias_id, entity_id, alias_text, normalized_alias, created_at, updated_at
702
+ ) VALUES (?, ?, ?, ?, ?, ?)
703
+ `);
704
+ for (const alias of Array.from(new Set(aliases.map((item) => item.trim()).filter(Boolean)))) {
705
+ stmt.run(`ealias-${randomUUID()}`, entityId, alias, this.normalizeAlias(alias), timestamp, timestamp);
706
+ this.refreshAliasConflict(this.normalizeAlias(alias), entityType, timestamp);
707
+ }
708
+ }
709
+ touchEntity(entityId, updatedAt) {
710
+ this.db.prepare(`
711
+ UPDATE entity_instances SET updated_at = ? WHERE instance_id = ?
712
+ `).run(updatedAt, entityId);
713
+ }
714
+ ensureCanonicalEntity(input) {
715
+ const existing = this.db.prepare(`
716
+ SELECT entity_id, aliases_json, metadata_json
717
+ FROM entities
718
+ WHERE canonical_name = ? AND type = ?
719
+ ORDER BY updated_at DESC
720
+ LIMIT 1
721
+ `).get(input.canonicalName, input.type);
722
+ if (existing) {
723
+ const existingAliases = existing.aliases_json ? JSON.parse(existing.aliases_json) : [];
724
+ const existingMetadata = existing.metadata_json ? JSON.parse(existing.metadata_json) : {};
725
+ this.db.prepare(`
726
+ UPDATE entities
727
+ SET aliases_json = ?, metadata_json = ?, updated_at = ?
728
+ WHERE entity_id = ?
729
+ `).run(JSON.stringify(Array.from(new Set([...existingAliases, ...(input.aliases || [])]))), JSON.stringify({ ...existingMetadata, ...(input.metadata || {}) }), input.createdAt, existing.entity_id);
730
+ return existing.entity_id;
731
+ }
732
+ const canonicalEntityId = `ecanon-${randomUUID()}`;
733
+ this.db.prepare(`
734
+ INSERT INTO entities (
735
+ entity_id, canonical_name, type, aliases_json, status, created_from, metadata_json, created_at, updated_at
736
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
737
+ `).run(canonicalEntityId, input.canonicalName, input.type, JSON.stringify(Array.from(new Set(input.aliases || []))), input.status || 'active', input.createdFrom || null, input.metadata ? JSON.stringify(input.metadata) : null, input.createdAt, input.createdAt);
738
+ return canonicalEntityId;
739
+ }
740
+ findExistingInstance(input) {
741
+ if (input.instanceMode === 'new_instance')
742
+ return null;
743
+ const projectId = typeof input.metadata?.projectId === 'string' ? String(input.metadata.projectId) : undefined;
744
+ const rows = this.db.prepare(`
745
+ SELECT *
746
+ FROM entity_instances
747
+ WHERE canonical_name = ? AND type = ?
748
+ ORDER BY updated_at DESC, created_at DESC
749
+ LIMIT 12
750
+ `).all(input.canonicalName, input.type);
751
+ const candidates = rows.map((row) => this.mapRow(row));
752
+ if (input.instanceMode === 'canonical')
753
+ return candidates[0] || null;
754
+ if (input.createdFrom) {
755
+ const exact = candidates.find((candidate) => candidate.createdFrom === input.createdFrom);
756
+ if (exact)
757
+ return exact;
758
+ }
759
+ if (projectId) {
760
+ const inProject = candidates.find((candidate) => candidate.metadata?.projectId === projectId);
761
+ if (inProject)
762
+ return inProject;
763
+ return null;
764
+ }
765
+ return candidates[0] || null;
766
+ }
767
+ refreshAliasConflict(normalizedAlias, entityType, timestamp) {
768
+ const rows = this.db.prepare(`
769
+ SELECT DISTINCT ei.instance_id
770
+ FROM entity_aliases ea
771
+ JOIN entity_instances ei ON ei.instance_id = ea.entity_id
772
+ WHERE ea.normalized_alias = ?
773
+ AND ei.type = ?
774
+ AND ei.status = 'active'
775
+ ORDER BY ei.updated_at DESC
776
+ `).all(normalizedAlias, entityType);
777
+ const entityIds = rows.map((row) => row.instance_id);
778
+ if (entityIds.length <= 1) {
779
+ this.db.prepare(`
780
+ UPDATE entity_alias_conflicts
781
+ SET status = 'resolved', updated_at = ?
782
+ WHERE normalized_alias = ? AND entity_type = ?
783
+ `).run(timestamp, normalizedAlias, entityType);
784
+ return;
785
+ }
786
+ const policy = this.inferAliasConflictPolicy(entityIds);
787
+ const existing = this.db.prepare(`
788
+ SELECT conflict_id, created_at
789
+ FROM entity_alias_conflicts
790
+ WHERE normalized_alias = ? AND entity_type = ?
791
+ `).get(normalizedAlias, entityType);
792
+ this.db.prepare(`
793
+ INSERT OR REPLACE INTO entity_alias_conflicts (
794
+ conflict_id, normalized_alias, entity_type, entity_ids_json, policy, status, created_at, updated_at
795
+ ) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)
796
+ `).run(existing?.conflict_id || `econf-${randomUUID()}`, normalizedAlias, entityType, JSON.stringify(entityIds), policy, existing?.created_at || timestamp, timestamp);
797
+ }
798
+ inferAliasConflictPolicy(entityIds) {
799
+ const projectIds = new Set();
800
+ for (const entityId of entityIds) {
801
+ const mentions = this.listTimeline({ entityId, limit: 8 });
802
+ for (const mention of mentions) {
803
+ if (mention.projectId)
804
+ projectIds.add(mention.projectId);
805
+ }
806
+ }
807
+ if (projectIds.size > 1)
808
+ return 'prefer_project_context';
809
+ if (entityIds.length > 2)
810
+ return 'require_explicit_disambiguation';
811
+ return 'prefer_recent_mention';
812
+ }
813
+ resolveRelativeReference(referenceText, type, options) {
814
+ const explicitNameHint = this.extractRelativeNameHint(referenceText, type);
815
+ const recent = this.listByCreationOrder(type, 12)
816
+ .filter((entity) => this.matchesResolutionOptions(entity.entityId, options))
817
+ .filter((entity) => this.matchesExplicitRelativeHint(entity, explicitNameHint))
818
+ .slice(0, 4);
819
+ if (recent.length === 0)
820
+ return null;
821
+ const normalizedReference = this.normalizeAlias(referenceText);
822
+ const relativeReference = extractRelativeReferences(normalizedReference)[0] || normalizedReference;
823
+ if (isLatestReference(relativeReference))
824
+ return recent[0] || null;
825
+ if (isPreviousReference(relativeReference))
826
+ return recent[1] || recent[0] || null;
827
+ return recent[0] || null;
828
+ }
829
+ pickBestEntity(candidates, options) {
830
+ if (candidates.length === 0)
831
+ return null;
832
+ const scored = candidates.map((entity) => this.scoreDisambiguationCandidate(entity, undefined, undefined, options));
833
+ scored.sort((a, b) => b.score - a.score);
834
+ return scored[0]?.entity || null;
835
+ }
836
+ matchesResolutionOptions(entityId, options) {
837
+ if (!options?.projectId && !options?.beforeTime)
838
+ return true;
839
+ const mentions = this.listTimeline({ entityId, limit: 12 });
840
+ if (options.projectId && !mentions.some((mention) => mention.projectId === options.projectId))
841
+ return false;
842
+ if (options.beforeTime && !mentions.some((mention) => mention.createdAt <= options.beforeTime))
843
+ return false;
844
+ return true;
845
+ }
846
+ normalizeAlias(value) {
847
+ return normalizeLexiconText(value).toLowerCase();
848
+ }
849
+ scoreDisambiguationCandidate(entity, normalizedAlias, conflictPolicy, options) {
850
+ const mentions = this.listTimeline({ entityId: entity.entityId, limit: 12 });
851
+ const attributes = this.listAttributes(entity.entityId);
852
+ const reasons = [];
853
+ let score = 0.2;
854
+ if (!normalizedAlias || this.normalizeAlias(entity.canonicalName) === normalizedAlias) {
855
+ score += 1.2;
856
+ reasons.push('canonical_name_match');
857
+ }
858
+ if (normalizedAlias && entity.aliases.some((alias) => this.normalizeAlias(alias) === normalizedAlias)) {
859
+ score += 1.1;
860
+ reasons.push('alias_match');
861
+ }
862
+ if (mentions.length > 0) {
863
+ score += Math.min(1.2, 0.2 + mentions.length * 0.12);
864
+ reasons.push('mention_history');
865
+ }
866
+ const latestMention = mentions[0];
867
+ if (latestMention) {
868
+ score += latestMention.createdAt / 1e13;
869
+ reasons.push('recent_mention');
870
+ }
871
+ if (options?.projectId && mentions.some((mention) => mention.projectId === options.projectId)) {
872
+ score += 2.1;
873
+ reasons.push('project_context_match');
874
+ }
875
+ if (options?.beforeTime && mentions.some((mention) => mention.createdAt <= options.beforeTime)) {
876
+ score += 0.9;
877
+ reasons.push('historical_match');
878
+ }
879
+ if (attributes.some((attribute) => /bluetooth|issue|device|topic/i.test(attribute.attributeKey) || /bluetooth|disconnect|断连/i.test(attribute.attributeValue))) {
880
+ score += 0.35;
881
+ reasons.push('attribute_support');
882
+ }
883
+ if (conflictPolicy === 'prefer_project_context' && options?.projectId && !mentions.some((mention) => mention.projectId === options.projectId)) {
884
+ score -= 0.6;
885
+ reasons.push('project_conflict_penalty');
886
+ }
887
+ if (conflictPolicy === 'require_explicit_disambiguation' && !options?.projectId && mentions.length > 1) {
888
+ score -= 0.25;
889
+ reasons.push('ambiguous_without_context');
890
+ }
891
+ return {
892
+ entity,
893
+ score,
894
+ reasons,
895
+ mentionCount: mentions.length,
896
+ latestMentionAt: latestMention?.createdAt
897
+ };
898
+ }
899
+ extractRelativeNameHint(referenceText, type) {
900
+ if (type === 'device')
901
+ return extractDeviceCandidate(referenceText);
902
+ if (type === 'project')
903
+ return extractProjectCandidate(referenceText);
904
+ return undefined;
905
+ }
906
+ matchesExplicitRelativeHint(entity, explicitNameHint) {
907
+ if (!explicitNameHint)
908
+ return true;
909
+ const normalizedHint = this.normalizeAlias(explicitNameHint);
910
+ return this.normalizeAlias(entity.canonicalName).includes(normalizedHint)
911
+ || entity.aliases.some((alias) => this.normalizeAlias(alias).includes(normalizedHint));
912
+ }
913
+ isBareRelativeEntity(entity, type) {
914
+ const normalizedName = this.normalizeAlias(entity.canonicalName);
915
+ const relativeRefs = extractRelativeReferences(normalizedName).map((reference) => this.normalizeAlias(reference));
916
+ if (!relativeRefs.includes(normalizedName))
917
+ return false;
918
+ if (type === 'device')
919
+ return !extractDeviceCandidate(entity.canonicalName);
920
+ if (type === 'project')
921
+ return !extractProjectCandidate(entity.canonicalName);
922
+ return false;
923
+ }
924
+ mapRow(row) {
925
+ return {
926
+ entityId: row.entity_id || row.instance_id,
927
+ canonicalEntityId: row.canonical_entity_id || undefined,
928
+ canonicalName: row.canonical_name,
929
+ type: row.type,
930
+ aliases: row.aliases_json ? JSON.parse(row.aliases_json) : [],
931
+ status: row.status,
932
+ createdFrom: row.created_from || undefined,
933
+ metadata: row.metadata_json ? JSON.parse(row.metadata_json) : undefined,
934
+ createdAt: row.created_at,
935
+ updatedAt: row.updated_at
936
+ };
937
+ }
938
+ }
939
+ function isWeakAmbiguousRelativeReference(reference) {
940
+ return /^(that project|this project|that one|this one|那个项目|这个项目|那个耳机|这个耳机|那个设备|这个设备)$/i.test(normalizeLexiconText(reference).toLowerCase());
941
+ }