squish-memory 1.2.0 → 1.2.1

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 (449) hide show
  1. package/bin/squish-mcp.mjs +40 -42
  2. package/core/scheduler/cron-scheduler.ts +10 -1
  3. package/core/worker.ts +10 -1
  4. package/package.json +119 -119
  5. package/packages/mcp/src/index.ts +99 -36
  6. package/dist/config.d.ts +0 -106
  7. package/dist/config.js +0 -194
  8. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  9. package/dist/core/adapters/config/claude-code.js +0 -113
  10. package/dist/core/adapters/config/cursor.d.ts +0 -26
  11. package/dist/core/adapters/config/cursor.js +0 -74
  12. package/dist/core/adapters/config/opencode.d.ts +0 -23
  13. package/dist/core/adapters/config/opencode.js +0 -73
  14. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  15. package/dist/core/adapters/config/windsurf.js +0 -74
  16. package/dist/core/adapters/index.d.ts +0 -45
  17. package/dist/core/adapters/index.js +0 -84
  18. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  19. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  20. package/dist/core/adapters/timeline.d.ts +0 -23
  21. package/dist/core/adapters/timeline.js +0 -88
  22. package/dist/core/adapters/types.d.ts +0 -137
  23. package/dist/core/adapters/types.js +0 -50
  24. package/dist/core/agent-preferences.d.ts +0 -16
  25. package/dist/core/agent-preferences.js +0 -124
  26. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  27. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  28. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  29. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  30. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  31. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  32. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  33. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  34. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  35. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  36. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  37. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  38. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  39. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  40. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  41. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  42. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  43. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  44. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  45. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  46. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  47. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  48. package/dist/core/algorithms/index.d.ts +0 -21
  49. package/dist/core/algorithms/index.js +0 -26
  50. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  51. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  52. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -18
  53. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  54. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  55. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  56. package/dist/core/algorithms/types.d.ts +0 -125
  57. package/dist/core/algorithms/types.js +0 -5
  58. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  59. package/dist/core/algorithms/utils/response-builder.js +0 -37
  60. package/dist/core/associations.d.ts +0 -33
  61. package/dist/core/associations.js +0 -284
  62. package/dist/core/autosave.d.ts +0 -19
  63. package/dist/core/autosave.js +0 -16
  64. package/dist/core/beliefs/decay.d.ts +0 -27
  65. package/dist/core/beliefs/decay.js +0 -217
  66. package/dist/core/beliefs/extractor.d.ts +0 -9
  67. package/dist/core/beliefs/extractor.js +0 -113
  68. package/dist/core/beliefs/store.d.ts +0 -46
  69. package/dist/core/beliefs/store.js +0 -466
  70. package/dist/core/beliefs/types.d.ts +0 -28
  71. package/dist/core/beliefs/types.js +0 -2
  72. package/dist/core/commands/mcp-server.d.ts +0 -2
  73. package/dist/core/commands/mcp-server.js +0 -6
  74. package/dist/core/commands/remember.d.ts +0 -24
  75. package/dist/core/commands/remember.js +0 -144
  76. package/dist/core/compression.d.ts +0 -45
  77. package/dist/core/compression.js +0 -160
  78. package/dist/core/consolidation.d.ts +0 -37
  79. package/dist/core/consolidation.js +0 -248
  80. package/dist/core/context/agent-context.d.ts +0 -106
  81. package/dist/core/context/agent-context.js +0 -274
  82. package/dist/core/context/context-paging.d.ts +0 -80
  83. package/dist/core/context/context-paging.js +0 -328
  84. package/dist/core/context/context-window.d.ts +0 -40
  85. package/dist/core/context/context-window.js +0 -177
  86. package/dist/core/context/context.d.ts +0 -7
  87. package/dist/core/context/context.js +0 -22
  88. package/dist/core/embeddings/embeddings.d.ts +0 -29
  89. package/dist/core/embeddings/embeddings.js +0 -546
  90. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  91. package/dist/core/embeddings/google-multimodal.js +0 -146
  92. package/dist/core/embeddings/local-embeddings.d.ts +0 -11
  93. package/dist/core/embeddings/local-embeddings.js +0 -11
  94. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  95. package/dist/core/embeddings/qmd-client.js +0 -403
  96. package/dist/core/embeddings/transformers-local.d.ts +0 -64
  97. package/dist/core/embeddings/transformers-local.js +0 -213
  98. package/dist/core/embeddings.d.ts +0 -2
  99. package/dist/core/embeddings.js +0 -3
  100. package/dist/core/error-handling.d.ts +0 -63
  101. package/dist/core/error-handling.js +0 -173
  102. package/dist/core/graph/entity-deduplicator.d.ts +0 -24
  103. package/dist/core/graph/entity-deduplicator.js +0 -183
  104. package/dist/core/graph/graph-builder.d.ts +0 -46
  105. package/dist/core/graph/graph-builder.js +0 -174
  106. package/dist/core/graph/graph-traversal.d.ts +0 -80
  107. package/dist/core/graph/graph-traversal.js +0 -315
  108. package/dist/core/graph/index.d.ts +0 -19
  109. package/dist/core/graph/index.js +0 -13
  110. package/dist/core/graph/llm-entity-extractor.d.ts +0 -49
  111. package/dist/core/graph/llm-entity-extractor.js +0 -313
  112. package/dist/core/graph/multi-hop-retrieval.d.ts +0 -48
  113. package/dist/core/graph/multi-hop-retrieval.js +0 -215
  114. package/dist/core/graph/relationship-extractor.d.ts +0 -48
  115. package/dist/core/graph/relationship-extractor.js +0 -351
  116. package/dist/core/hooks/agent-hooks.d.ts +0 -83
  117. package/dist/core/hooks/agent-hooks.js +0 -521
  118. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  119. package/dist/core/hooks/auto-tagger.js +0 -155
  120. package/dist/core/hooks/capture-filter.d.ts +0 -41
  121. package/dist/core/hooks/capture-filter.js +0 -128
  122. package/dist/core/hot-cache.d.ts +0 -86
  123. package/dist/core/hot-cache.js +0 -285
  124. package/dist/core/index.d.ts +0 -10
  125. package/dist/core/index.js +0 -11
  126. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  127. package/dist/core/ingestion/agent-memory.js +0 -109
  128. package/dist/core/ingestion/core-memory.d.ts +0 -78
  129. package/dist/core/ingestion/core-memory.js +0 -226
  130. package/dist/core/ingestion/learnings.d.ts +0 -57
  131. package/dist/core/ingestion/learnings.js +0 -205
  132. package/dist/core/ingestion/signal-engine.d.ts +0 -41
  133. package/dist/core/ingestion/signal-engine.js +0 -201
  134. package/dist/core/integrations/obsidian-vault.d.ts +0 -31
  135. package/dist/core/integrations/obsidian-vault.js +0 -156
  136. package/dist/core/layers/generator.d.ts +0 -25
  137. package/dist/core/layers/generator.js +0 -76
  138. package/dist/core/lib/db-client.d.ts +0 -114
  139. package/dist/core/lib/db-client.js +0 -130
  140. package/dist/core/lib/parse-embedding.d.ts +0 -9
  141. package/dist/core/lib/parse-embedding.js +0 -58
  142. package/dist/core/lib/schemas.d.ts +0 -132
  143. package/dist/core/lib/schemas.js +0 -87
  144. package/dist/core/lib/types.d.ts +0 -45
  145. package/dist/core/lib/types.js +0 -6
  146. package/dist/core/lib/utils.d.ts +0 -18
  147. package/dist/core/lib/utils.js +0 -145
  148. package/dist/core/lib/validation.d.ts +0 -38
  149. package/dist/core/lib/validation.js +0 -151
  150. package/dist/core/lifecycle.d.ts +0 -25
  151. package/dist/core/lifecycle.js +0 -292
  152. package/dist/core/logger.d.ts +0 -17
  153. package/dist/core/logger.js +0 -46
  154. package/dist/core/mcp/client.d.ts +0 -17
  155. package/dist/core/mcp/client.js +0 -101
  156. package/dist/core/mcp/index.d.ts +0 -6
  157. package/dist/core/mcp/index.js +0 -6
  158. package/dist/core/mcp/server.d.ts +0 -18
  159. package/dist/core/mcp/server.js +0 -157
  160. package/dist/core/mcp/standalone-server.d.ts +0 -13
  161. package/dist/core/mcp/standalone-server.js +0 -46
  162. package/dist/core/mcp/tools.d.ts +0 -7
  163. package/dist/core/mcp/tools.js +0 -278
  164. package/dist/core/mcp/types.d.ts +0 -87
  165. package/dist/core/mcp/types.js +0 -48
  166. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  167. package/dist/core/memory/bridge-discovery.js +0 -291
  168. package/dist/core/memory/categorizer.d.ts +0 -27
  169. package/dist/core/memory/categorizer.js +0 -306
  170. package/dist/core/memory/conflict-detector.d.ts +0 -7
  171. package/dist/core/memory/conflict-detector.js +0 -43
  172. package/dist/core/memory/consolidation.d.ts +0 -42
  173. package/dist/core/memory/consolidation.js +0 -277
  174. package/dist/core/memory/context-collector.d.ts +0 -10
  175. package/dist/core/memory/context-collector.js +0 -56
  176. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  177. package/dist/core/memory/contradiction-resolver.js +0 -368
  178. package/dist/core/memory/edit-workflow.d.ts +0 -19
  179. package/dist/core/memory/edit-workflow.js +0 -120
  180. package/dist/core/memory/entity-extractor.d.ts +0 -37
  181. package/dist/core/memory/entity-extractor.js +0 -350
  182. package/dist/core/memory/entity-resolver.d.ts +0 -23
  183. package/dist/core/memory/entity-resolver.js +0 -64
  184. package/dist/core/memory/explain.d.ts +0 -18
  185. package/dist/core/memory/explain.js +0 -92
  186. package/dist/core/memory/fact-deriver.d.ts +0 -31
  187. package/dist/core/memory/fact-deriver.js +0 -236
  188. package/dist/core/memory/fact-extractor.d.ts +0 -24
  189. package/dist/core/memory/fact-extractor.js +0 -89
  190. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  191. package/dist/core/memory/feedback-tracker.js +0 -155
  192. package/dist/core/memory/hooks.d.ts +0 -88
  193. package/dist/core/memory/hooks.js +0 -174
  194. package/dist/core/memory/hybrid-retrieval.d.ts +0 -27
  195. package/dist/core/memory/hybrid-retrieval.js +0 -37
  196. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  197. package/dist/core/memory/hybrid-scorer.js +0 -267
  198. package/dist/core/memory/hybrid-search.d.ts +0 -23
  199. package/dist/core/memory/hybrid-search.js +0 -596
  200. package/dist/core/memory/importance.d.ts +0 -46
  201. package/dist/core/memory/importance.js +0 -241
  202. package/dist/core/memory/index.d.ts +0 -9
  203. package/dist/core/memory/index.js +0 -11
  204. package/dist/core/memory/loader.d.ts +0 -31
  205. package/dist/core/memory/loader.js +0 -141
  206. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  207. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  208. package/dist/core/memory/memories.d.ts +0 -43
  209. package/dist/core/memory/memories.js +0 -452
  210. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  211. package/dist/core/memory/memory-lifecycle.js +0 -47
  212. package/dist/core/memory/memory-manager.d.ts +0 -15
  213. package/dist/core/memory/memory-manager.js +0 -46
  214. package/dist/core/memory/migrate.d.ts +0 -21
  215. package/dist/core/memory/migrate.js +0 -134
  216. package/dist/core/memory/normalization.d.ts +0 -7
  217. package/dist/core/memory/normalization.js +0 -26
  218. package/dist/core/memory/path-strengthener.d.ts +0 -39
  219. package/dist/core/memory/path-strengthener.js +0 -150
  220. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  221. package/dist/core/memory/progressive-disclosure.js +0 -280
  222. package/dist/core/memory/query-processor.d.ts +0 -21
  223. package/dist/core/memory/query-processor.js +0 -106
  224. package/dist/core/memory/query-rewriter.d.ts +0 -13
  225. package/dist/core/memory/query-rewriter.js +0 -118
  226. package/dist/core/memory/response-analyzer.d.ts +0 -9
  227. package/dist/core/memory/response-analyzer.js +0 -61
  228. package/dist/core/memory/retrieval-feedback.d.ts +0 -70
  229. package/dist/core/memory/retrieval-feedback.js +0 -213
  230. package/dist/core/memory/serialization.d.ts +0 -10
  231. package/dist/core/memory/serialization.js +0 -84
  232. package/dist/core/memory/stale-cleaner.d.ts +0 -26
  233. package/dist/core/memory/stale-cleaner.js +0 -97
  234. package/dist/core/memory/stats.d.ts +0 -32
  235. package/dist/core/memory/stats.js +0 -143
  236. package/dist/core/memory/telemetry.d.ts +0 -69
  237. package/dist/core/memory/telemetry.js +0 -313
  238. package/dist/core/memory/temporal-facts.d.ts +0 -41
  239. package/dist/core/memory/temporal-facts.js +0 -283
  240. package/dist/core/memory/temporal-parser.d.ts +0 -32
  241. package/dist/core/memory/temporal-parser.js +0 -385
  242. package/dist/core/memory/trigger-detector.d.ts +0 -21
  243. package/dist/core/memory/trigger-detector.js +0 -79
  244. package/dist/core/memory/write-gate.d.ts +0 -54
  245. package/dist/core/memory/write-gate.js +0 -210
  246. package/dist/core/places/index.d.ts +0 -14
  247. package/dist/core/places/index.js +0 -14
  248. package/dist/core/places/memory-places.d.ts +0 -68
  249. package/dist/core/places/memory-places.js +0 -261
  250. package/dist/core/places/places.d.ts +0 -88
  251. package/dist/core/places/places.js +0 -314
  252. package/dist/core/places/rules.d.ts +0 -74
  253. package/dist/core/places/rules.js +0 -240
  254. package/dist/core/places/walking.d.ts +0 -56
  255. package/dist/core/places/walking.js +0 -121
  256. package/dist/core/projects.d.ts +0 -17
  257. package/dist/core/projects.js +0 -116
  258. package/dist/core/redis.d.ts +0 -11
  259. package/dist/core/redis.js +0 -69
  260. package/dist/core/responses.d.ts +0 -96
  261. package/dist/core/responses.js +0 -122
  262. package/dist/core/runtime/trust-report.d.ts +0 -102
  263. package/dist/core/runtime/trust-report.js +0 -107
  264. package/dist/core/runtime/trust-state.d.ts +0 -12
  265. package/dist/core/runtime/trust-state.js +0 -309
  266. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  267. package/dist/core/scheduler/cron-scheduler.js +0 -493
  268. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  269. package/dist/core/scheduler/heartbeat.js +0 -73
  270. package/dist/core/scheduler/index.d.ts +0 -8
  271. package/dist/core/scheduler/index.js +0 -8
  272. package/dist/core/scheduler/job-runner.d.ts +0 -11
  273. package/dist/core/scheduler/job-runner.js +0 -164
  274. package/dist/core/search/conversations.d.ts +0 -25
  275. package/dist/core/search/conversations.js +0 -110
  276. package/dist/core/search/entities.d.ts +0 -12
  277. package/dist/core/search/entities.js +0 -31
  278. package/dist/core/search/folder-context.d.ts +0 -25
  279. package/dist/core/search/folder-context.js +0 -119
  280. package/dist/core/search/graph-boost.d.ts +0 -7
  281. package/dist/core/search/graph-boost.js +0 -23
  282. package/dist/core/search/index.d.ts +0 -4
  283. package/dist/core/search/index.js +0 -5
  284. package/dist/core/search/qmd-wrapper.d.ts +0 -36
  285. package/dist/core/search/qmd-wrapper.js +0 -58
  286. package/dist/core/security/encrypt.d.ts +0 -6
  287. package/dist/core/security/encrypt.js +0 -47
  288. package/dist/core/security/governance.d.ts +0 -26
  289. package/dist/core/security/governance.js +0 -79
  290. package/dist/core/security/privacy.d.ts +0 -23
  291. package/dist/core/security/privacy.js +0 -82
  292. package/dist/core/security/secret-detector.d.ts +0 -32
  293. package/dist/core/security/secret-detector.js +0 -88
  294. package/dist/core/session/auto-load.d.ts +0 -6
  295. package/dist/core/session/auto-load.js +0 -144
  296. package/dist/core/session/entity-tracker.d.ts +0 -62
  297. package/dist/core/session/entity-tracker.js +0 -287
  298. package/dist/core/session/index.d.ts +0 -7
  299. package/dist/core/session/index.js +0 -7
  300. package/dist/core/session/reference-resolver.d.ts +0 -26
  301. package/dist/core/session/reference-resolver.js +0 -121
  302. package/dist/core/session/self-iteration-job.d.ts +0 -35
  303. package/dist/core/session/self-iteration-job.js +0 -387
  304. package/dist/core/session/session-hooks.d.ts +0 -18
  305. package/dist/core/session/session-hooks.js +0 -58
  306. package/dist/core/session/types.d.ts +0 -26
  307. package/dist/core/session/types.js +0 -10
  308. package/dist/core/session/working-set.d.ts +0 -50
  309. package/dist/core/session/working-set.js +0 -212
  310. package/dist/core/snapshots/cleanup.d.ts +0 -9
  311. package/dist/core/snapshots/cleanup.js +0 -12
  312. package/dist/core/snapshots/comparison.d.ts +0 -19
  313. package/dist/core/snapshots/comparison.js +0 -43
  314. package/dist/core/snapshots/creation.d.ts +0 -13
  315. package/dist/core/snapshots/creation.js +0 -117
  316. package/dist/core/snapshots/retrieval.d.ts +0 -7
  317. package/dist/core/snapshots/retrieval.js +0 -41
  318. package/dist/core/snapshots/stats.d.ts +0 -11
  319. package/dist/core/snapshots/stats.js +0 -52
  320. package/dist/core/storage/cache.d.ts +0 -13
  321. package/dist/core/storage/cache.js +0 -202
  322. package/dist/core/storage/database.d.ts +0 -12
  323. package/dist/core/storage/database.js +0 -12
  324. package/dist/core/summarization/cleanup.d.ts +0 -9
  325. package/dist/core/summarization/cleanup.js +0 -12
  326. package/dist/core/summarization/queries.d.ts +0 -9
  327. package/dist/core/summarization/queries.js +0 -28
  328. package/dist/core/summarization/stats.d.ts +0 -14
  329. package/dist/core/summarization/stats.js +0 -52
  330. package/dist/core/summarization/strategies.d.ts +0 -24
  331. package/dist/core/summarization/strategies.js +0 -28
  332. package/dist/core/summarization.d.ts +0 -37
  333. package/dist/core/summarization.js +0 -188
  334. package/dist/core/temporal-facts.d.ts +0 -54
  335. package/dist/core/temporal-facts.js +0 -193
  336. package/dist/core/tracing/collector.d.ts +0 -111
  337. package/dist/core/tracing/collector.js +0 -350
  338. package/dist/core/tracing/visualizer.d.ts +0 -32
  339. package/dist/core/tracing/visualizer.js +0 -165
  340. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  341. package/dist/core/utils/cleanup-operations.js +0 -44
  342. package/dist/core/utils/content-extraction.d.ts +0 -19
  343. package/dist/core/utils/content-extraction.js +0 -75
  344. package/dist/core/utils/filter-builder.d.ts +0 -13
  345. package/dist/core/utils/filter-builder.js +0 -44
  346. package/dist/core/utils/history-traversal.d.ts +0 -13
  347. package/dist/core/utils/history-traversal.js +0 -50
  348. package/dist/core/utils/memory-operations.d.ts +0 -17
  349. package/dist/core/utils/memory-operations.js +0 -43
  350. package/dist/core/utils/query-operations.d.ts +0 -18
  351. package/dist/core/utils/query-operations.js +0 -65
  352. package/dist/core/utils/summarization-helpers.d.ts +0 -17
  353. package/dist/core/utils/summarization-helpers.js +0 -33
  354. package/dist/core/utils/temporal-queries.d.ts +0 -13
  355. package/dist/core/utils/temporal-queries.js +0 -27
  356. package/dist/core/utils/vector-operations.d.ts +0 -71
  357. package/dist/core/utils/vector-operations.js +0 -129
  358. package/dist/core/utils/version-management.d.ts +0 -9
  359. package/dist/core/utils/version-management.js +0 -61
  360. package/dist/core/worker.d.ts +0 -82
  361. package/dist/core/worker.js +0 -272
  362. package/dist/db/adapter.d.ts +0 -7
  363. package/dist/db/adapter.js +0 -175
  364. package/dist/db/bootstrap.d.ts +0 -11
  365. package/dist/db/bootstrap.js +0 -1034
  366. package/dist/db/drizzle/schema-sqlite.d.ts +0 -5538
  367. package/dist/db/drizzle/schema-sqlite.js +0 -763
  368. package/dist/db/drizzle/schema.d.ts +0 -4734
  369. package/dist/db/drizzle/schema.js +0 -859
  370. package/dist/db/drizzle.config.d.ts +0 -3
  371. package/dist/db/drizzle.config.js +0 -12
  372. package/dist/db/index.d.ts +0 -7
  373. package/dist/db/index.js +0 -89
  374. package/dist/db/migrations/associations.d.ts +0 -6
  375. package/dist/db/migrations/associations.js +0 -29
  376. package/dist/db/migrations/beliefs.d.ts +0 -10
  377. package/dist/db/migrations/beliefs.js +0 -76
  378. package/dist/db/migrations/core-memory.d.ts +0 -6
  379. package/dist/db/migrations/core-memory.js +0 -29
  380. package/dist/db/migrations/fts.d.ts +0 -6
  381. package/dist/db/migrations/fts.js +0 -52
  382. package/dist/db/migrations/index.d.ts +0 -25
  383. package/dist/db/migrations/index.js +0 -51
  384. package/dist/db/migrations/indexes.d.ts +0 -6
  385. package/dist/db/migrations/indexes.js +0 -30
  386. package/dist/db/migrations/learnings.d.ts +0 -7
  387. package/dist/db/migrations/learnings.js +0 -26
  388. package/dist/db/migrations/maintenance.d.ts +0 -6
  389. package/dist/db/migrations/maintenance.js +0 -61
  390. package/dist/db/migrations/memories.d.ts +0 -7
  391. package/dist/db/migrations/memories.js +0 -16
  392. package/dist/db/migrations/memory-places.d.ts +0 -6
  393. package/dist/db/migrations/memory-places.js +0 -29
  394. package/dist/db/migrations/places.d.ts +0 -6
  395. package/dist/db/migrations/places.js +0 -43
  396. package/dist/db/migrations/projects.d.ts +0 -3
  397. package/dist/db/migrations/projects.js +0 -13
  398. package/dist/db/migrations/tier-conversion.d.ts +0 -7
  399. package/dist/db/migrations/tier-conversion.js +0 -20
  400. package/dist/db/neon.d.ts +0 -8
  401. package/dist/db/neon.js +0 -20
  402. package/dist/db/schema/beliefs.d.ts +0 -9
  403. package/dist/db/schema/beliefs.js +0 -46
  404. package/dist/db/schema/generator.d.ts +0 -38
  405. package/dist/db/schema/generator.js +0 -108
  406. package/dist/db/schema/index.d.ts +0 -39
  407. package/dist/db/schema/index.js +0 -51
  408. package/dist/db/schema/learnings.d.ts +0 -7
  409. package/dist/db/schema/learnings.js +0 -30
  410. package/dist/db/schema/memories.d.ts +0 -7
  411. package/dist/db/schema/memories.js +0 -81
  412. package/dist/db/schema/projects.d.ts +0 -4
  413. package/dist/db/schema/projects.js +0 -31
  414. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  415. package/dist/db/schema/tables/context-sessions.js +0 -37
  416. package/dist/db/schema/tables/conversations.d.ts +0 -9
  417. package/dist/db/schema/tables/conversations.js +0 -47
  418. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  419. package/dist/db/schema/tables/core-memory.js +0 -41
  420. package/dist/db/schema/tables/entities.d.ts +0 -9
  421. package/dist/db/schema/tables/entities.js +0 -39
  422. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  423. package/dist/db/schema/tables/entity-relations.js +0 -31
  424. package/dist/db/schema/tables/learnings.d.ts +0 -9
  425. package/dist/db/schema/tables/learnings.js +0 -66
  426. package/dist/db/schema/tables/memories.d.ts +0 -9
  427. package/dist/db/schema/tables/memories.js +0 -161
  428. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  429. package/dist/db/schema/tables/memory-associations.js +0 -39
  430. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  431. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  432. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  433. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  434. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  435. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  436. package/dist/db/schema/tables/messages.d.ts +0 -9
  437. package/dist/db/schema/tables/messages.js +0 -41
  438. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  439. package/dist/db/schema/tables/namespaces.js +0 -37
  440. package/dist/db/schema/tables/projects.d.ts +0 -9
  441. package/dist/db/schema/tables/projects.js +0 -31
  442. package/dist/db/schema/tables/users.d.ts +0 -9
  443. package/dist/db/schema/tables/users.js +0 -27
  444. package/dist/db/schema.d.ts +0 -3
  445. package/dist/db/schema.js +0 -11
  446. package/dist/db/supabase.d.ts +0 -9
  447. package/dist/db/supabase.js +0 -24
  448. package/dist/packages/mcp/src/index.d.ts +0 -3
  449. package/dist/packages/mcp/src/index.js +0 -733
@@ -1,596 +0,0 @@
1
- /**
2
- * Vector Search - Pure semantic search with optional graph boosting + multi-session support
3
- *
4
- * Uses cosine similarity on embeddings + optional graph boost
5
- * BM25 removed - use qmd-client for hot tier (BM25 + vectors + reranking)
6
- */
7
- import { getDb } from '../../db/index.js';
8
- import { createDatabaseClient } from '../storage/database.js';
9
- import { getEmbedding } from '../../core/embeddings.js';
10
- import { requireProject } from '../../core/projects.js';
11
- import { deserializeTags, deserializeMetadata, normalizeTags } from './serialization.js';
12
- import { computeGraphBoost } from '../search/graph-boost.js';
13
- import { normalizeTimestamp } from '../lib/utils.js';
14
- import { parseEmbedding } from '../lib/parse-embedding.js';
15
- import { cosineSimilarity } from '../utils/vector-operations.js';
16
- import config from '../../config.js';
17
- import { getRelatedMemories } from '../associations.js';
18
- import { getPlaceMemories } from '../places/memory-places.js';
19
- import { getPlaceByType } from '../places/places.js';
20
- import { multiHopSearch } from '../graph/multi-hop-retrieval.js';
21
- import { logger } from '../logger.js';
22
- /**
23
- * Detect if query asks about time (temporal queries)
24
- */
25
- function isTemporalQuery(query) {
26
- const temporalIndicators = [
27
- 'when', 'how long', 'how many', 'ago', 'since', 'until',
28
- 'before', 'after', 'earlier', 'later', 'yesterday', 'tomorrow',
29
- 'last week', 'next week', 'last month', 'next month'
30
- ];
31
- const lower = query.toLowerCase();
32
- return temporalIndicators.some(w => lower.includes(w));
33
- }
34
- /**
35
- * Detect if query spans multiple sessions (multi-hop queries)
36
- */
37
- function isMultiSessionQuery(query) {
38
- const multiSessionIndicators = [
39
- 'when', 'then', 'before', 'after', 'earlier', 'later',
40
- 'previous', 'next', 'first', 'later', 'subsequently',
41
- 'across', 'between', 'both', 'another', 'different'
42
- ];
43
- const lower = query.toLowerCase();
44
- return multiSessionIndicators.some(w => lower.includes(w));
45
- }
46
- /**
47
- * Check if content contains date/time references
48
- */
49
- function hasDateReference(content) {
50
- const datePatterns = [
51
- /\b\d{4}\b/, // Years: 2023, 2022
52
- /\b\d{1,2}\s+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\b/i, // Month dates
53
- /\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s+\d{1,2}\b/i,
54
- /\b\d{1,2}\/\d{1,2}\/\d{2,4}\b/, // Dates: 5/7/2023
55
- /\b(yesterday|today|tomorrow|last week|last month|last year)\b/i,
56
- /\b(\d+)\s+(day|week|month|year)s?\s+(ago|before)\b/i,
57
- ];
58
- const lower = content.toLowerCase();
59
- return datePatterns.some(p => p.test(content) || p.test(lower));
60
- }
61
- /**
62
- * Expand query for multi-session retrieval
63
- */
64
- function expandQueryForMultiSession(query) {
65
- const expansions = [query];
66
- const lower = query.toLowerCase();
67
- // Add time-based expansions
68
- if (lower.includes('when')) {
69
- expansions.push(query.replace(/when/i, '').trim());
70
- }
71
- if (lower.includes('before') || lower.includes('after')) {
72
- expansions.push(query.replace(/before|after/i, '').trim());
73
- }
74
- if (lower.includes('earlier') || lower.includes('later')) {
75
- expansions.push(query.replace(/earlier|later/i, '').trim());
76
- }
77
- // Add "mentioning" expansions for factual queries
78
- if (lower.includes('what') || lower.includes('how')) {
79
- expansions.push(query + ' mentioned');
80
- expansions.push(query + ' said');
81
- }
82
- return [...new Set(expansions.filter(e => e.length > 2))];
83
- }
84
- /**
85
- * Expand query for temporal retrieval - add date/temporal context
86
- */
87
- function expandQueryForTemporal(query) {
88
- const expansions = [query];
89
- const lower = query.toLowerCase();
90
- // For "when" questions, search with entity + date context
91
- if (lower.includes('when')) {
92
- // Extract entity name (everything after "when did" or "when is")
93
- const entityMatch = query.match(/when\s+(?:did|is|was|were)\s+(\w+)/i);
94
- if (entityMatch) {
95
- const entity = entityMatch[1];
96
- // Search with entity name alone (might match date mentions)
97
- expansions.push(entity);
98
- expansions.push(query.replace(/when\s+(?:did|is|was|were)\s+/i, '').trim());
99
- }
100
- }
101
- // Add "date" and "time" expansions
102
- if (lower.includes('when') || lower.includes('how long') || lower.includes('ago')) {
103
- expansions.push(query + ' date');
104
- expansions.push(query + ' time');
105
- }
106
- return [...new Set(expansions.filter(e => e.length > 2))];
107
- }
108
- /**
109
- * Score with recency + similarity + entity boost (NO LLM required)
110
- */
111
- function scoreWithHeuristics(result, query, now) {
112
- let score = result.similarity ?? 0;
113
- // 1. Recency boost: Recent = higher (up to +0.1)
114
- if (result.createdAt) {
115
- const created = new Date(result.createdAt).getTime();
116
- const ageHours = (now - created) / (1000 * 60 * 60);
117
- const recencyScore = Math.max(0, 0.1 * Math.exp(-ageHours / 720)); // Decay over 30 days
118
- score += recencyScore;
119
- }
120
- // 2. Entity overlap: Query words appearing in content = boost
121
- const queryWords = new Set(query.toLowerCase().split(/\s+/).filter(w => w.length > 3));
122
- const contentWords = new Set((result.content ?? "").toLowerCase().split(/\s+/));
123
- const overlap = [...queryWords].filter(w => contentWords.has(w)).length;
124
- score += overlap * 0.02; // Small boost per matching word
125
- return score;
126
- }
127
- /**
128
- * Main search function - vectors + graph boost + heuristics + places + sessions
129
- * Unified search integrating Places, Graph, and Memory
130
- */
131
- export async function hybridSearch(input, options = {}) {
132
- const limit = options.limit ?? input.limit ?? 10;
133
- const enableMultiSession = options.enableMultiSession !== false;
134
- const enableHeuristics = options.enableHeuristics !== false;
135
- const isMultiHop = enableMultiSession && isMultiSessionQuery(input.query);
136
- const isTemporal = isTemporalQuery(input.query);
137
- let vectorResults;
138
- if (isMultiHop) {
139
- // Multi-hop: use expansion to get more coverage
140
- const expandedQueries = expandQueryForMultiSession(input.query);
141
- const allResults = [];
142
- for (const expQuery of expandedQueries) {
143
- const expResults = await vectorSearch({ ...input, query: expQuery }, { ...options, limit: Math.ceil(limit * 2) });
144
- allResults.push(...expResults);
145
- }
146
- const byId = new Map();
147
- for (const r of allResults) {
148
- const existing = byId.get(r.id);
149
- if (!existing || (r.similarity ?? 0) > (existing.similarity ?? 0)) {
150
- byId.set(r.id, r);
151
- }
152
- }
153
- vectorResults = Array.from(byId.values());
154
- }
155
- else if (isTemporal) {
156
- // Temporal: fetch more results
157
- vectorResults = await vectorSearch(input, { ...options, limit: limit * 4 });
158
- }
159
- else {
160
- // Regular query
161
- vectorResults = await vectorSearch(input, { ...options, limit: limit * 2 });
162
- }
163
- // Task 2: Integrate Places into retrieval
164
- // If placeId or placeType specified, filter/boost results from that place
165
- if (input.placeId || input.placeType) {
166
- vectorResults = await applyPlaceFilterAndBoost(vectorResults, input, limit);
167
- }
168
- // Task 3: Add session temporal scope
169
- // If sessionId specified, boost memories from same session
170
- if (input.sessionId) {
171
- vectorResults = applySessionBoost(vectorResults, input.sessionId);
172
- }
173
- // TEMPORAL: Boost results with dates for temporal queries
174
- if (isTemporal) {
175
- vectorResults = applyTemporalBoost(vectorResults);
176
- }
177
- // Apply heuristics if enabled (recency + entity overlap)
178
- if (enableHeuristics) {
179
- const now = Date.now();
180
- vectorResults = vectorResults.map(r => ({
181
- ...r,
182
- similarity: scoreWithHeuristics(r, input.query, now)
183
- }));
184
- }
185
- // Graph boost
186
- const graphWeight = config.scoringWeights.graphBoost;
187
- const candidateIds = vectorResults.map(r => r.id);
188
- const graphBoostMap = await computeGraphBoost(candidateIds);
189
- let results = applyGraphBoostWithWeight(vectorResults, graphBoostMap, limit, graphWeight);
190
- // Expand with associated memories for better coverage
191
- if (options.includeAssociations !== false) {
192
- results = await expandWithAssociations(results, limit);
193
- }
194
- // Task 4: Enable multi-hop graph traversal by default
195
- // If query is detected as multi-hop, use actual graph traversal
196
- if (isMultiHop && options.enableGraphTraversal !== false && input.project) {
197
- try {
198
- const graphResults = await multiHopSearch({
199
- query: input.query,
200
- project: input.project,
201
- limit: limit,
202
- includeVectorResults: false,
203
- includeGraphResults: true,
204
- });
205
- // Merge graph results with vector results
206
- const existingIds = new Set(results.map(r => r.id));
207
- for (const gr of graphResults) {
208
- if (!existingIds.has(gr.id)) {
209
- results.push({
210
- ...gr,
211
- similarity: (gr.similarity ?? 0) * 0.9 // Slightly lower weight
212
- });
213
- }
214
- }
215
- // Re-sort
216
- results.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
217
- }
218
- catch (e) {
219
- // Multi-hop failed, continue with vector results
220
- logger.debug(`[HybridSearch] Multi-hop failed: ${e}`);
221
- }
222
- }
223
- return results;
224
- }
225
- /**
226
- * Task 2: Filter and boost results by place
227
- */
228
- async function applyPlaceFilterAndBoost(results, input, limit) {
229
- let placeIds = [];
230
- // Get place IDs from placeId or placeType
231
- if (input.placeType && input.project) {
232
- const project = await requireProject(input.project);
233
- const place = await getPlaceByType(project.id, input.placeType);
234
- if (place) {
235
- placeIds = [place.id];
236
- }
237
- }
238
- else if (input.placeId) {
239
- placeIds = [input.placeId];
240
- }
241
- if (placeIds.length === 0) {
242
- return results;
243
- }
244
- // Get memories in this place
245
- const placeMemories = new Set();
246
- for (const pid of placeIds) {
247
- const memIds = await getPlaceMemories(pid, limit * 3);
248
- for (const mid of memIds) {
249
- placeMemories.add(mid);
250
- }
251
- }
252
- // Boost memories from the specified place
253
- const PLACE_BOOST = 0.15;
254
- const boosted = results.map(r => {
255
- if (placeMemories.has(r.id)) {
256
- return {
257
- ...r,
258
- similarity: (r.similarity ?? 0) + PLACE_BOOST
259
- };
260
- }
261
- return r;
262
- });
263
- // Re-sort with place boost
264
- boosted.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
265
- return boosted;
266
- }
267
- /**
268
- * Task 3: Boost memories from the same session (temporal)
269
- */
270
- function applySessionBoost(results, sessionId) {
271
- const SESSION_BOOST = 0.1;
272
- const boosted = results.map(r => {
273
- // Check if memory's session matches query's session
274
- const memSession = r.metadata?.sessionMetadata?.sessionId;
275
- if (memSession === sessionId) {
276
- return {
277
- ...r,
278
- similarity: (r.similarity ?? 0) + SESSION_BOOST
279
- };
280
- }
281
- return r;
282
- });
283
- // Re-sort with session boost
284
- boosted.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
285
- return boosted;
286
- }
287
- /**
288
- * TEMPORAL FIX: Boost memories that contain date references for "when" questions
289
- * Also boost by date RECENCY - closer to today = higher for temporal queries
290
- */
291
- function applyTemporalBoost(results) {
292
- const TEMPORAL_BOOST = 0.25; // Moderate boost for date-containing memories
293
- const boosted = results.map(r => {
294
- let boost = 0;
295
- // Boost 1: Has date reference - high priority for temporal
296
- if (hasDateReference(r.content ?? "")) {
297
- boost += TEMPORAL_BOOST;
298
- }
299
- return {
300
- ...r,
301
- similarity: (r.similarity ?? 0) + boost
302
- };
303
- });
304
- // Re-sort with temporal boost
305
- boosted.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
306
- return boosted;
307
- }
308
- /**
309
- * MULTI-HOP FIX: Get memories from adjacent sessions using DB query
310
- * This provides actual cross-session retrieval for multi-hop queries
311
- */
312
- async function applySessionAdjacencyBoost(results, input, limit) {
313
- if (!input.project)
314
- return results;
315
- // Extract session tags from top results
316
- const sessionTags = new Set();
317
- for (const r of results.slice(0, 5)) {
318
- const sessionTag = extractSessionTag(r.tags);
319
- if (sessionTag) {
320
- sessionTags.add(sessionTag);
321
- }
322
- }
323
- if (sessionTags.size === 0) {
324
- return results;
325
- }
326
- // Get adjacent session tags
327
- const adjacentSessionTags = new Set();
328
- for (const tag of sessionTags) {
329
- const adjacent = getAdjacentSessionTags(tag);
330
- for (const adj of adjacent) {
331
- adjacentSessionTags.add(adj);
332
- }
333
- }
334
- if (adjacentSessionTags.size === 0) {
335
- return results;
336
- }
337
- // Fetch memories from adjacent sessions
338
- const project = await requireProject(input.project);
339
- const adjacentMemories = [];
340
- for (const sessionTag of adjacentSessionTags) {
341
- const memories = await getMemoriesBySession(project.id, sessionTag, limit);
342
- adjacentMemories.push(...memories);
343
- }
344
- if (adjacentMemories.length === 0) {
345
- return results;
346
- }
347
- // Merge with boost
348
- const existingIds = new Set(results.map(r => r.id));
349
- const ADJACENT_BOOST = 0.3;
350
- const merged = [...results];
351
- for (const mem of adjacentMemories) {
352
- if (!existingIds.has(mem.id)) {
353
- merged.push({
354
- ...mem,
355
- similarity: (mem.similarity ?? 0) + ADJACENT_BOOST
356
- });
357
- }
358
- }
359
- // Re-sort
360
- merged.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
361
- return merged.slice(0, limit * 2);
362
- }
363
- /**
364
- * Expand results with directly associated memories
365
- */
366
- async function expandWithAssociations(results, limit) {
367
- const allIds = new Set(results.map(r => r.id));
368
- const expanded = [...results];
369
- // Get related for top results only
370
- for (const r of results.slice(0, 3)) {
371
- try {
372
- const related = await getRelatedMemories(r.id, 5);
373
- for (const rel of related) {
374
- if (!allIds.has(rel.id)) {
375
- allIds.add(rel.id);
376
- expanded.push({
377
- ...rel,
378
- similarity: (rel.similarity ?? 0) * 0.8 // Slightly lower weight
379
- });
380
- }
381
- }
382
- }
383
- catch (e) {
384
- // Skip errors
385
- }
386
- }
387
- // Re-sort and return top results
388
- expanded.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
389
- return expanded.slice(0, limit);
390
- }
391
- /**
392
- * Get memories by session ID (stored in tags as "dialogue-1", "session-2", etc.)
393
- */
394
- async function getMemoriesBySession(projectId, sessionTag, limit) {
395
- try {
396
- const db = createDatabaseClient(await getDb());
397
- const sqlite = db.$client;
398
- // Query memories where tags contain the session tag
399
- const statement = sqlite.prepare(`
400
- SELECT
401
- m.id as id,
402
- m.project_id as projectId,
403
- m.type as type,
404
- m.content as content,
405
- m.summary as summary,
406
- m.tags as tags,
407
- m.metadata as metadata,
408
- m.embedding as embedding,
409
- m.embedding_json as embeddingJson,
410
- m.created_at as createdAt
411
- FROM memories m
412
- WHERE m.project_id = ? AND m.tags LIKE ?
413
- ORDER BY m.created_at DESC
414
- LIMIT ?
415
- `);
416
- const rows = statement.all(projectId, `%${sessionTag}%`, limit);
417
- return rows.map((row) => ({
418
- id: row.id,
419
- projectId: row.projectId,
420
- type: row.type,
421
- content: row.content,
422
- summary: row.summary ?? undefined,
423
- tags: deserializeTags(row.tags ?? null),
424
- metadata: deserializeMetadata(row.metadata ?? null),
425
- createdAt: row.createdAt ? (normalizeTimestamp(Number(row.createdAt)) ?? undefined) : undefined,
426
- similarity: 0.5, // Default similarity for fetched memories
427
- }));
428
- }
429
- catch (error) {
430
- logger.debug(`[HybridSearch] getMemoriesBySession failed: ${error}`);
431
- return [];
432
- }
433
- }
434
- /**
435
- * Extract session tag from memory tags (e.g., "dialogue-1", "session_1", "D1", "D2")
436
- */
437
- function extractSessionTag(tags) {
438
- if (!tags)
439
- return null;
440
- // Look for patterns:
441
- // - "dialogue-1", "dialogue_1", "dialogue1"
442
- // - "session-2", "session_2", "session2"
443
- // - "conv-1", "conv_1", "conv1"
444
- // - "D1", "D2" (capital D followed by number)
445
- for (const tag of tags) {
446
- const lower = tag.toLowerCase();
447
- if (/^(dialogue|session|conv|d)[_-]?\d+$/.test(lower)) {
448
- return tag;
449
- }
450
- }
451
- return null;
452
- }
453
- /**
454
- * Get adjacent session tags (e.g., dialogue-1 -> dialogue-2, D1 -> D2)
455
- */
456
- function getAdjacentSessionTags(currentTag) {
457
- const adjacent = [];
458
- // Pattern: dialogue-N, session-N, D-N, conv-N (with or without hyphen)
459
- const match = currentTag.match(/^(.*?)(\d+)$/i);
460
- if (match) {
461
- const prefix = match[1];
462
- const num = parseInt(match[2], 10);
463
- // Adjacent: previous and next
464
- if (num > 1) {
465
- adjacent.push(`${prefix}${num - 1}`);
466
- }
467
- adjacent.push(`${prefix}${num + 1}`);
468
- }
469
- return adjacent;
470
- }
471
- /**
472
- * Vector semantic search using cosine similarity
473
- */
474
- async function vectorSearch(input, options) {
475
- try {
476
- const db = createDatabaseClient(await getDb());
477
- const sqlite = db.$client;
478
- const limit = options.limit ?? 10;
479
- const tags = normalizeTags(options.tags ?? input.tags);
480
- // Check for empty query
481
- const isEmptyQuery = !input.query || input.query.trim() === '';
482
- // Get query embedding (only for non-empty queries)
483
- let queryEmbedding = null;
484
- if (!isEmptyQuery) {
485
- queryEmbedding = await getEmbedding(input.query);
486
- }
487
- // Build WHERE conditions
488
- const conditions = [];
489
- const params = [];
490
- if (input.type) {
491
- conditions.push('m.type = ?');
492
- params.push(input.type);
493
- }
494
- if (tags.length) {
495
- conditions.push('(' + tags.map(() => 'm.tags LIKE ?').join(' OR ') + ')');
496
- params.push(...tags.map((tag) => `%${tag}%`));
497
- }
498
- let projectId = null;
499
- if (input.project) {
500
- const project = await requireProject(input.project);
501
- projectId = project.id;
502
- conditions.push('m.project_id = ?');
503
- params.push(project.id);
504
- }
505
- const whereClause = conditions.length > 0
506
- ? 'WHERE ' + conditions.join(' AND ')
507
- : '';
508
- // Fetch candidates for vector search
509
- const statement = sqlite.prepare(`
510
- SELECT
511
- m.id as id,
512
- m.project_id as projectId,
513
- m.type as type,
514
- m.content as content,
515
- m.summary as summary,
516
- m.tags as tags,
517
- m.metadata as metadata,
518
- m.embedding as embedding,
519
- m.embedding_json as embeddingJson,
520
- m.created_at as createdAt
521
- FROM memories m
522
- ${whereClause}
523
- ORDER BY m.created_at DESC
524
- LIMIT ?
525
- `);
526
- const rows = statement.all(...params, limit * 3);
527
- // If no embedding available, return results ordered by recency
528
- if (!queryEmbedding) {
529
- return rows.slice(0, limit * 2).map((item) => ({
530
- id: item.id,
531
- projectId: item.projectId,
532
- type: item.type,
533
- content: item.content,
534
- summary: item.summary ?? undefined,
535
- tags: deserializeTags(item.tags ?? null),
536
- metadata: deserializeMetadata(item.metadata ?? null),
537
- createdAt: item.createdAt ? (normalizeTimestamp(Number(item.createdAt)) ?? undefined) : undefined,
538
- similarity: 0,
539
- }));
540
- }
541
- // Calculate cosine similarity for each result
542
- const scored = rows
543
- .map((row) => {
544
- const embedding = parseEmbedding(row.embedding) ?? parseEmbedding(row.embeddingJson);
545
- if (!embedding)
546
- return null;
547
- const similarity = cosineSimilarity(queryEmbedding, embedding);
548
- return {
549
- id: row.id,
550
- projectId: row.projectId,
551
- type: row.type,
552
- content: row.content,
553
- summary: row.summary,
554
- tags: row.tags,
555
- metadata: row.metadata,
556
- createdAt: row.createdAt,
557
- similarity,
558
- };
559
- })
560
- .filter((item) => item !== null);
561
- // Sort by similarity (descending) and return
562
- scored.sort((a, b) => b.similarity - a.similarity);
563
- return scored.slice(0, limit * 2).map((item) => ({
564
- id: item.id,
565
- projectId: item.projectId,
566
- type: item.type,
567
- content: item.content,
568
- summary: item.summary ?? undefined,
569
- tags: deserializeTags(item.tags ?? null),
570
- metadata: deserializeMetadata(item.metadata ?? null),
571
- createdAt: item.createdAt ? (normalizeTimestamp(Number(item.createdAt)) ?? undefined) : undefined,
572
- similarity: item.similarity,
573
- }));
574
- }
575
- catch (error) {
576
- throw error;
577
- }
578
- }
579
- /**
580
- * Apply small graph boost to results
581
- * Graph boost is ADDITIVE (not dominating)
582
- */
583
- function applyGraphBoostWithWeight(results, graphBoostMap, limit, graphWeight) {
584
- // Apply SMALL additive boost to each result
585
- // graphWeight should be 0.1-0.3, not > 1
586
- const boosted = results.map(result => {
587
- const boost = graphBoostMap[result.id] ?? 0;
588
- // Add small nudge, don't replace similarity
589
- const boostedSimilarity = (result.similarity ?? 0) + (boost * graphWeight);
590
- return { ...result, similarity: boostedSimilarity };
591
- });
592
- // Re-sort by boosted similarity
593
- boosted.sort((a, b) => (b.similarity ?? 0) - (a.similarity ?? 0));
594
- return boosted.slice(0, limit);
595
- }
596
- //# sourceMappingURL=hybrid-search.js.map
@@ -1,46 +0,0 @@
1
- /**
2
- * Importance Scoring System
3
- * Calculates and manages memory importance scores (0-100) with temporal decay
4
- */
5
- import type { Memory } from '../../db/drizzle/schema.js';
6
- export interface ImportanceScore {
7
- score: number;
8
- components: {
9
- base: number;
10
- recency: number;
11
- accessFrequency: number;
12
- typeWeight: number;
13
- userFlags: number;
14
- };
15
- explanation: string;
16
- }
17
- /**
18
- * Calculate importance score for a memory
19
- *
20
- * Formula: base + recency + accessFrequency + typeWeight + userFlags
21
- * All values are clamped to 0-100 range
22
- */
23
- export declare function calculateImportance(memory: Partial<Memory>): ImportanceScore;
24
- /**
25
- * Update importance score for a memory
26
- * Used when memory is accessed or modified
27
- */
28
- export declare function updateImportanceScore(memoryId: string, incrementAccess?: boolean): Promise<number>;
29
- /**
30
- * Get low-importance memories that are candidates for consolidation
31
- * These are old, rarely accessed memories with low importance scores
32
- */
33
- export declare function getLowImportanceMemories(projectId: string, options?: {
34
- minAge?: number;
35
- maxImportance?: number;
36
- limit?: number;
37
- }): Promise<any[]>;
38
- /**
39
- * Set importance score manually (for user override)
40
- */
41
- export declare function setImportanceScore(memoryId: string, score: number): Promise<void>;
42
- /**
43
- * Pin a memory to prevent decay and consolidation
44
- */
45
- export declare function pinMemory(memoryId: string, pinned?: boolean): Promise<void>;
46
- //# sourceMappingURL=importance.d.ts.map