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,144 +0,0 @@
1
- /**
2
- * Remember Command - Unified memory write
3
- *
4
- * Single implementation for both CLI and MCP.
5
- */
6
- import { rememberMemory, findSimilarMemories } from '../memory/memories.js';
7
- import { createLearning } from '../ingestion/learnings.js';
8
- import { pinMemory, unpinMemory } from '../security/governance.js';
9
- import { detectMemorySignals } from '../memory/trigger-detector.js';
10
- export async function executeRemember(options) {
11
- const { content, project, tags, tier, type, learningType, source, route, pin, unpin } = options;
12
- const signals = detectMemorySignals(content);
13
- let routing = "memory";
14
- let inferredType = type || signals.suggestedType;
15
- let routingReason = "";
16
- // Check for learning patterns if auto mode
17
- if (route === "auto" || !route) {
18
- const hasLessonPattern = /(\bfailed\s+because\b|\blesson\s+learned\b|\bnext\s+time\b|\broot\s+cause\b|\bsuccess\b.*\bbecause\b|\bi\s+learned\b|\binsight\b)/i.test(content);
19
- const hasLearningType = /(\bsuccess\b|\bfailure\b|\bfix\b|\binsight\b)/i.test(content);
20
- const hasHackPattern = /(\bHACK\b|\bworkaround\b|\btemporary\s+fix\b)/i.test(content);
21
- const hasFixmePattern = /(\bFIXME\b|\bXXX\b|\bbug\b.*\bfix\b)/i.test(content);
22
- if (hasLessonPattern || hasLearningType || hasHackPattern || hasFixmePattern) {
23
- routing = "learning";
24
- if (hasHackPattern || hasFixmePattern) {
25
- routingReason = "Detected code pattern (HACK/FIXME)";
26
- }
27
- else {
28
- routingReason = "Detected learning pattern in content";
29
- }
30
- }
31
- else if (signals.suggestedType === 'task') {
32
- routing = "memory";
33
- routingReason = "Detected TODO pattern";
34
- }
35
- else if (signals.suggestedType === 'observation' && /\b(note|note\s+that|log|remember)\b/i.test(content)) {
36
- routing = "note";
37
- routingReason = "Detected note pattern";
38
- }
39
- else {
40
- routing = "memory";
41
- routingReason = `Detected as ${inferredType}`;
42
- }
43
- }
44
- else if (route === "learning") {
45
- routing = "learning";
46
- routingReason = "Override: forced to learning";
47
- }
48
- else if (route === "note") {
49
- routing = "note";
50
- routingReason = "Override: forced to note";
51
- }
52
- else {
53
- routing = "memory";
54
- routingReason = "Override: forced to memory";
55
- }
56
- let result;
57
- const parsedTags = tags ? tags.split(',').map((t) => t.trim()) : [];
58
- const parsedTier = tier === "cold" ? "cold" : "hot";
59
- if (routing === "learning") {
60
- let parsedLearningType = "insight";
61
- if (learningType) {
62
- parsedLearningType = learningType;
63
- }
64
- else {
65
- if (/(\bsuccess\b|\bworked\b|\bfinished\b)/i.test(content))
66
- parsedLearningType = "success";
67
- else if (/(\bfailed\b|\berror\b|\bbroke\b)/i.test(content))
68
- parsedLearningType = "failure";
69
- else if (/(\bfix\b|\b workaround\b|\bsolved\b)/i.test(content))
70
- parsedLearningType = "fix";
71
- }
72
- const learning = await createLearning({
73
- type: parsedLearningType,
74
- content,
75
- project,
76
- autoLink: true
77
- });
78
- result = { id: learning.id, type: "learning", learningType: parsedLearningType, content };
79
- }
80
- else {
81
- // Check for similar memories to avoid duplicates (deduplication)
82
- const similarMemories = await findSimilarMemories(content, 0.85, 3);
83
- const memory = await rememberMemory({
84
- content,
85
- type: inferredType,
86
- tags: parsedTags,
87
- project,
88
- tier: parsedTier,
89
- source: source || 'cli'
90
- });
91
- // If found similar memories, create association instead of duplicate
92
- if (similarMemories.length > 0) {
93
- const { createAssociation } = await import('../associations.js');
94
- for (const similar of similarMemories) {
95
- await createAssociation(memory.id, similar.id, 'duplicate', similar.similarity ?? 0.85);
96
- }
97
- memory.similarTo = similarMemories.map(s => s.id);
98
- }
99
- if (pin) {
100
- await pinMemory(memory.id);
101
- }
102
- else if (unpin) {
103
- await unpinMemory(memory.id);
104
- }
105
- result = { id: memory.id, type: "memory", memoryType: inferredType, tier: parsedTier, content, pinned: pin };
106
- // Auto-update knowledge graph (fire-and-forget, don't fail remember on graph error)
107
- const { addMemoryToGraph } = await import('../graph/graph-builder.js');
108
- const graphResult = await addMemoryToGraph(memory.id).catch((e) => {
109
- console.warn('[Graph] Auto-update failed:', e.message);
110
- return null;
111
- });
112
- if (graphResult) {
113
- result.graph = { entities: graphResult.entitiesCreated, relations: graphResult.relationsCreated };
114
- }
115
- // Auto-assign to place (fire-and-forget)
116
- const { autoAssignMemory } = await import('../places/memory-places.js');
117
- const projectId = memory.projectId || project;
118
- const placeResult = await autoAssignMemory({
119
- memoryId: memory.id,
120
- projectId: projectId,
121
- content: content,
122
- tags: parsedTags,
123
- memoryType: inferredType
124
- }).catch((e) => {
125
- console.warn('[Places] Auto-assign failed:', e.message);
126
- return null;
127
- });
128
- if (placeResult?.assigned && placeResult.placeId) {
129
- result.place = { id: placeResult.placeId, type: placeResult.placeType ?? 'inbox' };
130
- }
131
- }
132
- return {
133
- ok: true,
134
- id: result.id,
135
- routing,
136
- type: routing === "learning" ? result.learningType : result.memoryType,
137
- tier: routing === "memory" ? parsedTier : 'N/A',
138
- priority: signals.priority,
139
- confidence: signals.confidence,
140
- pinned: result.pinned,
141
- reason: routingReason
142
- };
143
- }
144
- //# sourceMappingURL=remember.js.map
@@ -1,45 +0,0 @@
1
- /**
2
- * TOON Compression - Token-efficient memory format
3
- *
4
- * Compact format for memory context using abbreviated notation.
5
- * Achieves efficient token usage for context injection.
6
- *
7
- * Format:
8
- * {
9
- * m:[type], // memory type (1-2 chars)
10
- * c:"...", // content (truncated)
11
- * t:[], // tags (array)
12
- * d:123 // days ago
13
- * }
14
- */
15
- /**
16
- * Compress a memory to TOON format
17
- */
18
- export declare function compressForContext(content: string): string;
19
- /**
20
- * Decompress TOON back to readable format
21
- */
22
- export declare function decompressFromContext(toonString: string): string;
23
- /**
24
- * Estimate compression ratio
25
- */
26
- export declare function estimateCompressionRatio(content: string): number;
27
- /**
28
- * Check if content is JSON
29
- */
30
- export declare function isJson(content: string): boolean;
31
- /**
32
- * Check if content is compressed format
33
- */
34
- export declare function isCompressed(content: string): boolean;
35
- /**
36
- * Count tokens (rough estimate)
37
- * Import from context-window.ts - single source of truth
38
- */
39
- import { estimateTokens } from './context/context-window.js';
40
- export { estimateTokens };
41
- /**
42
- * Truncate to token budget
43
- */
44
- export declare function truncateToTokenBudget(content: string, maxTokens: number): string;
45
- //# sourceMappingURL=compression.d.ts.map
@@ -1,160 +0,0 @@
1
- /**
2
- * TOON Compression - Token-efficient memory format
3
- *
4
- * Compact format for memory context using abbreviated notation.
5
- * Achieves efficient token usage for context injection.
6
- *
7
- * Format:
8
- * {
9
- * m:[type], // memory type (1-2 chars)
10
- * c:"...", // content (truncated)
11
- * t:[], // tags (array)
12
- * d:123 // days ago
13
- * }
14
- */
15
- const MAX_CONTENT_LENGTH = 80; // Max chars per content
16
- const MAX_TAGS = 3; // Max tags to include
17
- /**
18
- * Compress a memory to TOON format
19
- */
20
- export function compressForContext(content) {
21
- // If not JSON or already short, just return
22
- if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
23
- return content;
24
- }
25
- try {
26
- const parsed = JSON.parse(content);
27
- // Build compact TOON object
28
- const toon = {
29
- m: parsed.type?.substring(0, 2) || 'ob', // observation -> ob
30
- };
31
- // Truncate content
32
- if (parsed.content) {
33
- const truncated = parsed.content.substring(0, MAX_CONTENT_LENGTH);
34
- toon.c = truncated.length < parsed.content.length ? truncated + '..' : truncated;
35
- }
36
- // Add tags (limited)
37
- if (parsed.tags && Array.isArray(parsed.tags)) {
38
- toon.t = parsed.tags.slice(0, MAX_TAGS);
39
- }
40
- // Add days ago if there's a date
41
- if (parsed.createdAt) {
42
- const days = Math.floor((Date.now() - new Date(parsed.createdAt).getTime()) / (1000 * 60 * 60 * 24));
43
- if (days > 0) {
44
- toon.d = days;
45
- }
46
- }
47
- return JSON.stringify(toon);
48
- }
49
- catch {
50
- // Not parseable JSON, return truncated content
51
- return content.substring(0, MAX_CONTENT_LENGTH);
52
- }
53
- }
54
- /**
55
- * Decompress TOON back to readable format
56
- */
57
- export function decompressFromContext(toonString) {
58
- // Check if it's TOON format
59
- if (!isCompressed(toonString)) {
60
- return toonString;
61
- }
62
- try {
63
- const parsed = JSON.parse(toonString);
64
- // If it has TOON markers, expand it
65
- if (parsed.m || parsed.c || parsed.t) {
66
- const typeMap = {
67
- ob: 'observation',
68
- su: 'success',
69
- f: 'failure',
70
- fx: 'fix',
71
- i: 'insight',
72
- };
73
- const type = typeMap[parsed.m] || 'observation';
74
- const parts = [`[${type}]`];
75
- if (parsed.c) {
76
- parts.push(parsed.c);
77
- }
78
- if (parsed.t && parsed.t.length > 0) {
79
- parts.push(`#${parsed.t.join(' #')}`);
80
- }
81
- if (parsed.d) {
82
- parts.push(`(${parsed.d}d ago)`);
83
- }
84
- return parts.join(' ');
85
- }
86
- return toonString;
87
- }
88
- catch {
89
- // Not valid TOON, return as-is
90
- return toonString;
91
- }
92
- }
93
- /**
94
- * Estimate compression ratio
95
- */
96
- export function estimateCompressionRatio(content) {
97
- if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
98
- return 1.0;
99
- }
100
- const compressed = compressForContext(content);
101
- return compressed.length / content.length;
102
- }
103
- /**
104
- * Check if content is JSON
105
- */
106
- export function isJson(content) {
107
- try {
108
- JSON.parse(content);
109
- return true;
110
- }
111
- catch {
112
- return false;
113
- }
114
- }
115
- /**
116
- * Check if content is compressed format
117
- */
118
- export function isCompressed(content) {
119
- if (!content.startsWith('{') || !content.endsWith('}')) {
120
- return false;
121
- }
122
- try {
123
- const parsed = JSON.parse(content);
124
- // Has compressed markers
125
- return parsed.m !== undefined || parsed.c !== undefined;
126
- }
127
- catch {
128
- return false;
129
- }
130
- }
131
- /**
132
- * Count tokens (rough estimate)
133
- * Import from context-window.ts - single source of truth
134
- */
135
- import { estimateTokens } from './context/context-window.js';
136
- export { estimateTokens };
137
- /**
138
- * Truncate to token budget
139
- */
140
- export function truncateToTokenBudget(content, maxTokens) {
141
- const tokens = estimateTokens(content);
142
- if (tokens <= maxTokens) {
143
- return content;
144
- }
145
- // Binary search for the right length
146
- let low = 0;
147
- let high = content.length;
148
- while (low < high) {
149
- const mid = Math.floor((low + high) / 2);
150
- const estimated = estimateTokens(content.substring(0, mid));
151
- if (estimated <= maxTokens) {
152
- low = mid + 1;
153
- }
154
- else {
155
- high = mid;
156
- }
157
- }
158
- return content.substring(0, low) + '...';
159
- }
160
- //# sourceMappingURL=compression.js.map
@@ -1,37 +0,0 @@
1
- export interface ConsolidationStats {
2
- clustered: number;
3
- merged: number;
4
- tokensRecovered: number;
5
- deduped: number;
6
- consolidated: number;
7
- }
8
- export interface DeduplicationResult {
9
- duplicatesFound: number;
10
- mergedCount: number;
11
- tokensRecovered: number;
12
- groups: DuplicateGroup[];
13
- }
14
- export interface DuplicateGroup {
15
- canonicalId: string;
16
- duplicateIds: string[];
17
- similarity: number;
18
- reason: string;
19
- }
20
- /**
21
- * Run automated deduplication job
22
- * Finds and marks duplicates for review or auto-merges high-confidence duplicates
23
- */
24
- export declare function runDeduplicationJob(projectId?: string): Promise<DeduplicationResult>;
25
- /**
26
- * Run full consolidation job (dedup + memory consolidation)
27
- */
28
- export declare function runFullConsolidationJob(projectId?: string): Promise<ConsolidationStats>;
29
- /**
30
- * Get deduplication statistics
31
- */
32
- export declare function getDeduplicationStats(projectId?: string): Promise<{
33
- totalMemories: number;
34
- mergedMemories: number;
35
- pendingDuplicates: number;
36
- }>;
37
- //# sourceMappingURL=consolidation.d.ts.map
@@ -1,248 +0,0 @@
1
- // Memory Consolidation & Deduplication
2
- import { eq, inArray, and } from 'drizzle-orm';
3
- import { getDb } from '../db/index.js';
4
- import { getSchema } from '../db/schema.js';
5
- import { createAssociation } from './associations.js';
6
- import { logger } from './logger.js';
7
- import { consolidateMemories } from './memory/consolidation.js';
8
- /**
9
- * Run automated deduplication job
10
- * Finds and marks duplicates for review or auto-merges high-confidence duplicates
11
- */
12
- export async function runDeduplicationJob(projectId) {
13
- const result = {
14
- duplicatesFound: 0,
15
- mergedCount: 0,
16
- tokensRecovered: 0,
17
- groups: [],
18
- };
19
- try {
20
- const db = await getDb();
21
- const schema = await getSchema();
22
- // Get active memories for deduplication check
23
- const whereClause = projectId
24
- ? and(eq(schema.memories.projectId, projectId), eq(schema.memories.status, 'active'))
25
- : eq(schema.memories.status, 'active');
26
- const memories = await db
27
- .select()
28
- .from(schema.memories)
29
- .where(whereClause)
30
- .limit(500);
31
- if (memories.length < 2) {
32
- return result;
33
- }
34
- // Find duplicate groups using SimHash
35
- const duplicateGroups = await findDuplicatesBySimHash(memories);
36
- result.duplicatesFound = duplicateGroups.reduce((sum, g) => sum + g.duplicateIds.length, 0);
37
- // Auto-merge high-confidence duplicates (>0.95 similarity)
38
- for (const group of duplicateGroups) {
39
- if (group.similarity >= 0.95) {
40
- const tokensSaved = await autoMergeDuplicates(group.canonicalId, group.duplicateIds);
41
- result.mergedCount += group.duplicateIds.length;
42
- result.tokensRecovered += tokensSaved;
43
- }
44
- else {
45
- // Lower confidence - just create association for review
46
- for (const dupId of group.duplicateIds) {
47
- await createAssociation(group.canonicalId, dupId, 'duplicate', group.similarity);
48
- }
49
- }
50
- result.groups.push(group);
51
- }
52
- logger.info('Deduplication job completed', {
53
- duplicatesFound: result.duplicatesFound,
54
- mergedCount: result.mergedCount,
55
- tokensRecovered: result.tokensRecovered,
56
- });
57
- }
58
- catch (error) {
59
- logger.error('Deduplication job error', error);
60
- }
61
- return result;
62
- }
63
- /**
64
- * Find duplicates using SimHash (efficient near-duplicate detection)
65
- */
66
- async function findDuplicatesBySimHash(memories) {
67
- const groups = [];
68
- const processed = new Set();
69
- // Compute SimHash for each memory
70
- const hashes = memories.map(m => ({
71
- id: m.id,
72
- hash: computeSimHash(m.content),
73
- content: m.content,
74
- createdAt: m.createdAt,
75
- }));
76
- // Compare hashes to find similar content
77
- for (let i = 0; i < hashes.length; i++) {
78
- if (processed.has(hashes[i].id))
79
- continue;
80
- const duplicates = [];
81
- let maxSimilarity = 0;
82
- for (let j = i + 1; j < hashes.length; j++) {
83
- if (processed.has(hashes[j].id))
84
- continue;
85
- const hammingDistance = computeHammingDistance(hashes[i].hash, hashes[j].hash);
86
- const similarity = 1 - (hammingDistance / 64); // 64-bit hash
87
- if (similarity >= 0.85) {
88
- duplicates.push(hashes[j].id);
89
- maxSimilarity = Math.max(maxSimilarity, similarity);
90
- processed.add(hashes[j].id);
91
- }
92
- }
93
- if (duplicates.length > 0) {
94
- processed.add(hashes[i].id);
95
- groups.push({
96
- canonicalId: hashes[i].id, // Keep oldest as canonical
97
- duplicateIds: duplicates,
98
- similarity: maxSimilarity,
99
- reason: 'content-similarity',
100
- });
101
- }
102
- }
103
- return groups;
104
- }
105
- /**
106
- * Compute SimHash for text (64-bit fingerprint)
107
- */
108
- function computeSimHash(text) {
109
- const tokens = text.toLowerCase().split(/\s+/).filter(t => t.length > 2);
110
- const weights = new Array(64).fill(0);
111
- for (const token of tokens) {
112
- const hash = simpleHash(token);
113
- for (let i = 0; i < 64; i++) {
114
- if ((hash >> BigInt(i)) & 1n) {
115
- weights[i] += 1;
116
- }
117
- else {
118
- weights[i] -= 1;
119
- }
120
- }
121
- }
122
- let simHash = 0n;
123
- for (let i = 0; i < 64; i++) {
124
- if (weights[i] > 0) {
125
- simHash |= (1n << BigInt(i));
126
- }
127
- }
128
- return simHash;
129
- }
130
- /**
131
- * Simple hash function for strings
132
- */
133
- function simpleHash(str) {
134
- let hash = 0n;
135
- for (let i = 0; i < str.length; i++) {
136
- const char = BigInt(str.charCodeAt(i));
137
- hash = ((hash << 5n) - hash) + char;
138
- hash = hash & hash; // Convert to 64bit integer
139
- }
140
- return hash;
141
- }
142
- /**
143
- * Compute Hamming distance between two hashes
144
- */
145
- function computeHammingDistance(a, b) {
146
- let xor = a ^ b;
147
- let distance = 0;
148
- while (xor !== 0n) {
149
- distance += Number(xor & 1n);
150
- xor >>= 1n;
151
- }
152
- return distance;
153
- }
154
- /**
155
- * Auto-merge duplicates into canonical memory
156
- */
157
- async function autoMergeDuplicates(canonicalId, duplicateIds) {
158
- try {
159
- const db = await getDb();
160
- const schema = await getSchema();
161
- const now = new Date();
162
- // Calculate tokens recovered
163
- const duplicates = await db
164
- .select()
165
- .from(schema.memories)
166
- .where(inArray(schema.memories.id, duplicateIds));
167
- let tokensRecovered = 0;
168
- for (const dup of duplicates) {
169
- tokensRecovered += Math.ceil((dup.content?.length || 0) / 4);
170
- }
171
- // Mark duplicates as merged
172
- await db
173
- .update(schema.memories)
174
- .set({
175
- status: 'merged',
176
- mergedInto: canonicalId,
177
- mergedAt: now,
178
- updatedAt: now,
179
- })
180
- .where(inArray(schema.memories.id, duplicateIds));
181
- // Create associations for traceability
182
- for (const dupId of duplicateIds) {
183
- await createAssociation(canonicalId, dupId, 'merged', 0.95);
184
- }
185
- return tokensRecovered;
186
- }
187
- catch (error) {
188
- logger.error('Error auto-merging duplicates', error);
189
- return 0;
190
- }
191
- }
192
- /**
193
- * Run full consolidation job (dedup + memory consolidation)
194
- */
195
- export async function runFullConsolidationJob(projectId) {
196
- const stats = {
197
- clustered: 0,
198
- merged: 0,
199
- tokensRecovered: 0,
200
- deduped: 0,
201
- consolidated: 0,
202
- };
203
- // Run deduplication first
204
- const dedupResult = await runDeduplicationJob(projectId);
205
- stats.deduped = dedupResult.duplicatesFound;
206
- stats.merged = dedupResult.mergedCount;
207
- stats.tokensRecovered += dedupResult.tokensRecovered;
208
- // Run memory consolidation for each project
209
- if (projectId) {
210
- const consolidationResults = await consolidateMemories({
211
- projectId,
212
- minAge: 60,
213
- maxImportance: 25,
214
- minClusterSize: 3,
215
- limit: 100,
216
- });
217
- stats.consolidated = consolidationResults.length;
218
- stats.clustered = consolidationResults.reduce((sum, r) => sum + r.clusterSize, 0);
219
- }
220
- logger.info('Full consolidation job completed', stats);
221
- return stats;
222
- }
223
- /**
224
- * Get deduplication statistics
225
- */
226
- export async function getDeduplicationStats(projectId) {
227
- try {
228
- const db = await getDb();
229
- const schema = await getSchema();
230
- const whereClause = projectId
231
- ? eq(schema.memories.projectId, projectId)
232
- : undefined;
233
- const memories = await db
234
- .select()
235
- .from(schema.memories)
236
- .where(whereClause);
237
- return {
238
- totalMemories: memories.length,
239
- mergedMemories: memories.filter((m) => m.status === 'merged').length,
240
- pendingDuplicates: 0, // Would need to query associations
241
- };
242
- }
243
- catch (error) {
244
- logger.error('Error getting deduplication stats', error);
245
- return { totalMemories: 0, mergedMemories: 0, pendingDuplicates: 0 };
246
- }
247
- }
248
- //# sourceMappingURL=consolidation.js.map