squish-memory 1.1.5 → 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 (646) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +44 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/{dist/core/places/index.js → core/places/index.ts} +12 -12
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/{dist/core/search/index.js → core/search/index.ts} +4 -5
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/{dist/core/session/index.js → core/session/index.ts} +7 -7
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
@@ -1,449 +0,0 @@
1
- import { randomUUID } from 'crypto';
2
- import { eq } from 'drizzle-orm';
3
- import { config } from '../../config.js';
4
- import { logger } from '../../core/logger.js';
5
- import { getOrCreateProject, requireProject } from '../../core/projects.js';
6
- import { getEmbedding } from '../../core/embeddings.js';
7
- import { normalizeTags, serializeTags, deserializeTags, serializeMetadata, deserializeMetadata } from '../../core/memory/serialization.js';
8
- import { normalizeTimestamp, clampLimit, prepareEmbedding } from '../lib/utils.js';
9
- import { requireUuid } from '../lib/validation.js';
10
- import { cosineSimilarity } from '../utils/vector-operations.js';
11
- import { hybridSearch as hybridSearchImpl } from './hybrid-search.js';
12
- import { calculateImportance } from './importance.js';
13
- import { detectMemorySignals } from './trigger-detector.js';
14
- import { resolveContradictions, applySupersession } from './contradiction-resolver.js';
15
- import { encrypt, decrypt } from '../security/encrypt.js';
16
- import { estimateTokens } from '../context/context-window.js';
17
- import { getDbClient } from '../lib/db-client.js';
18
- export async function rememberMemory(input) {
19
- const { db, schema } = await getDbClient();
20
- const tags = normalizeTags(input.tags);
21
- const project = await getOrCreateProject(input.project);
22
- const embedding = await getEmbedding(input.content);
23
- const id = randomUUID();
24
- const signals = detectMemorySignals(input.content);
25
- const type = input.type ?? signals.suggestedType;
26
- const baseValues = {
27
- id,
28
- projectId: project?.id ?? null,
29
- type,
30
- content: input.content,
31
- source: input.source ?? 'mcp',
32
- };
33
- // Calculate initial importance score
34
- const importance = calculateImportance({
35
- type,
36
- createdAt: new Date().toISOString(),
37
- accessCount: 0,
38
- usageCount: 0,
39
- isPinned: false,
40
- isProtected: false,
41
- isImmutable: false,
42
- });
43
- const embeddingValues = prepareEmbedding(embedding);
44
- const tokensEstimate = estimateTokens(input.content);
45
- let tagsValue = serializeTags(tags);
46
- const enrichedMetadata = {
47
- ...(input.metadata ?? {}),
48
- // Rich context fields (Agent 4 feedback)
49
- reasoning: input.reasoning,
50
- memoryContext: input.memoryContext,
51
- examples: input.examples,
52
- exceptions: input.exceptions,
53
- memorySignals: {
54
- explicitTriggers: signals.explicitTriggers,
55
- implicit: signals.implicit,
56
- priority: signals.priority,
57
- requiresConflictCheck: signals.implicit.correction,
58
- },
59
- };
60
- let metadataValue = serializeMetadata(enrichedMetadata);
61
- // Prepare fields for insertion, handling optional encryption
62
- let insertValues = {
63
- ...baseValues,
64
- tags: tagsValue,
65
- metadata: metadataValue,
66
- ...embeddingValues,
67
- importanceScore: importance.score,
68
- lastImportanceRecalc: new Date(),
69
- tokensEstimate,
70
- createdAt: new Date(),
71
- status: 'active',
72
- tier: input.tier || 'hot', // Default to hot tier
73
- };
74
- // Add namespace if specified
75
- if (input.namespaceId) {
76
- insertValues.namespaceId = input.namespaceId;
77
- }
78
- // For cold tier, store original content in metadata
79
- if (input.tier === 'cold') {
80
- enrichedMetadata.originalContent = input.content;
81
- }
82
- if (config.clientEncryptionEnabled) {
83
- const { ciphertext, nonce } = encrypt(input.content);
84
- insertValues.encrypted_content = ciphertext;
85
- insertValues.encryption_nonce = nonce;
86
- insertValues.is_encrypted = true;
87
- // Store empty placeholder for plain content
88
- insertValues.content = '';
89
- }
90
- else {
91
- insertValues.content = input.content;
92
- insertValues.is_encrypted = false;
93
- }
94
- await db.insert(schema.memories).values(insertValues);
95
- // Append to Obsidian vault if enabled and hot tier (NEW)
96
- if (config.obsidianEnabled && config.obsidianVaultPath && insertValues.tier === 'hot') {
97
- try {
98
- const { appendToObsidianVault } = await import('../obsidian-vault.js');
99
- await appendToObsidianVault({
100
- content: input.content,
101
- id,
102
- type,
103
- tags,
104
- reasoning: input.reasoning,
105
- memoryContext: input.memoryContext,
106
- examples: input.examples,
107
- exceptions: input.exceptions,
108
- source: input.source,
109
- }, config.obsidianVaultPath);
110
- }
111
- catch (error) {
112
- logger.warn(`[Obsidian] Failed to append to vault: ${error}`);
113
- }
114
- }
115
- // Write to external folder memory if enabled and hot tier
116
- if (config.externalMemoryEnabled && config.externalMemoryPath && insertValues.tier === 'hot') {
117
- try {
118
- const { getExternalMemory } = await import('../external-folder/index.js');
119
- const externalMemory = getExternalMemory();
120
- const memoryRecord = {
121
- id,
122
- projectId: project?.id ?? null,
123
- type,
124
- content: input.content,
125
- tags,
126
- createdAt: insertValues.createdAt?.toISOString(),
127
- confidenceLevel: null,
128
- };
129
- await externalMemory.writeMemory(externalMemory.toMarkdownFormat(memoryRecord));
130
- }
131
- catch (error) {
132
- logger.warn(`[ExternalMemory] Failed to write: ${error}`);
133
- }
134
- }
135
- // Resolve contradictions and supersede old memories (async, non-blocking)
136
- resolveContradictions(input.content, type, project?.id)
137
- .then(async (result) => {
138
- if (result.supersededIds.length > 0) {
139
- await applySupersession(id, result.supersededIds, result.confidence);
140
- // Update metadata with contradiction resolution info
141
- const updatedMetadata = {
142
- ...enrichedMetadata,
143
- contradictionResolution: {
144
- supersededCount: result.supersededIds.length,
145
- confidence: result.confidence,
146
- reason: result.reason,
147
- },
148
- };
149
- metadataValue = serializeMetadata(updatedMetadata);
150
- }
151
- })
152
- .catch((error) => {
153
- import('../logger.js').then(({ logger }) => {
154
- logger?.debug?.(`Contradiction resolution failed: ${error}`);
155
- });
156
- });
157
- // Sync to QMD if enabled (async, don't block)
158
- const memoryRecord = {
159
- id,
160
- projectId: project?.id ?? null,
161
- type,
162
- content: input.content,
163
- tags,
164
- metadata: enrichedMetadata,
165
- importance: importance.score,
166
- };
167
- return memoryRecord;
168
- }
169
- export async function getMemory(id, incrementAccess = true) {
170
- try {
171
- // Validate UUID
172
- requireUuid(id);
173
- const { db, schema } = await getDbClient();
174
- const rows = await db.select().from(schema.memories).where(eq(schema.memories.id, id)).limit(1);
175
- const row = rows[0];
176
- if (!row)
177
- return null;
178
- // Increment access count and update last accessed time
179
- if (incrementAccess) {
180
- await db.update(schema.memories)
181
- .set({
182
- accessCount: (row.accessCount ?? 0) + 1,
183
- lastAccessedAt: new Date(),
184
- })
185
- .where(eq(schema.memories.id, id));
186
- }
187
- let content = row.content;
188
- if (row.is_encrypted) {
189
- try {
190
- content = decrypt(row.encrypted_content, row.encryption_nonce);
191
- }
192
- catch (e) {
193
- console.warn('Failed to decrypt memory', e);
194
- content = row.content; // fall back to stored content
195
- }
196
- }
197
- const decryptedRow = { ...row, content };
198
- return normalizeMemory(decryptedRow);
199
- }
200
- catch (error) {
201
- throw error;
202
- }
203
- }
204
- export async function setConfidence(id, level) {
205
- try {
206
- // Validate UUID
207
- requireUuid(id);
208
- const { db, schema } = await getDbClient();
209
- await db.update(schema.memories)
210
- .set({ confidenceLevel: level, updatedAt: new Date() })
211
- .where(eq(schema.memories.id, id));
212
- return true;
213
- }
214
- catch (error) {
215
- throw error;
216
- }
217
- }
218
- export async function getRecent(projectPath, limit) {
219
- try {
220
- const { db } = await getDbClient();
221
- const sqlite = db.$client;
222
- const project = await requireProject(projectPath);
223
- // Use raw SQL to avoid drizzle column name issues
224
- const rows = sqlite.prepare(`
225
- SELECT * FROM memories
226
- WHERE project_id = ?
227
- ORDER BY created_at DESC
228
- LIMIT ?
229
- `).all(project.id, limit);
230
- return rows.map((row) => normalizeMemory(row));
231
- }
232
- catch (error) {
233
- throw error;
234
- }
235
- }
236
- export async function search(input) {
237
- const limit = clampLimit(input.limit, 10, 1, 100);
238
- const tags = normalizeTags(input.tags);
239
- // Get results from database (hybrid search: BM25 + vectors with RRF)
240
- let dbResults;
241
- if (config.isTeamMode) {
242
- dbResults = await searchMemoriesPostgres(input, tags, limit);
243
- }
244
- else {
245
- // Use hybrid search for SQLite (BM25 + vectors with RRF)
246
- dbResults = await hybridSearchImpl(input, { limit });
247
- }
248
- return dbResults.slice(0, limit);
249
- }
250
- /**
251
- * Parse embedding from SQLite storage
252
- */
253
- function parseEmbedding(embeddingData) {
254
- if (!embeddingData)
255
- return null;
256
- // If it's already an array
257
- if (Array.isArray(embeddingData))
258
- return embeddingData;
259
- // If it's a Buffer/Uint8Array
260
- if (embeddingData instanceof Uint8Array || Buffer.isBuffer(embeddingData)) {
261
- // Try to parse as JSON first
262
- try {
263
- const json = JSON.parse(embeddingData.toString());
264
- if (Array.isArray(json))
265
- return json;
266
- }
267
- catch {
268
- // Not JSON, try Float32Array
269
- try {
270
- const buffer = embeddingData.buffer;
271
- const arrayBuffer = buffer instanceof ArrayBuffer
272
- ? buffer
273
- : buffer;
274
- const floatArray = new Float32Array(arrayBuffer);
275
- return Array.from(floatArray);
276
- }
277
- catch {
278
- return null;
279
- }
280
- }
281
- }
282
- // If it's a string
283
- if (typeof embeddingData === 'string') {
284
- try {
285
- const parsed = JSON.parse(embeddingData);
286
- if (Array.isArray(parsed))
287
- return parsed;
288
- }
289
- catch {
290
- return null;
291
- }
292
- }
293
- return null;
294
- }
295
- async function searchMemoriesSqlite(input, tags, limit) {
296
- const { db } = await getDbClient();
297
- const sqlite = db.$client;
298
- // Get embedding for the query (for semantic search)
299
- const queryEmbedding = await getEmbedding(input.query);
300
- // Build the base query
301
- const conditions = [];
302
- const params = [];
303
- if (input.type) {
304
- conditions.push('m.type = ?');
305
- params.push(input.type);
306
- }
307
- if (tags.length) {
308
- conditions.push('m.tags IS NOT NULL AND (' + tags.map(() => 'm.tags LIKE ?').join(' OR ') + ')');
309
- params.push(...tags.map((tag) => `%${tag}%`));
310
- }
311
- let projectId = null;
312
- if (input.project) {
313
- const project = await requireProject(input.project);
314
- projectId = project.id;
315
- conditions.push('m.project_id = ?');
316
- params.push(project.id);
317
- }
318
- const whereClause = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : '';
319
- // Fetch memories with embeddings for semantic search
320
- const fetchLimit = Math.max(limit * 3, 50); // Fetch more for re-ranking
321
- const statement = sqlite.prepare(`
322
- SELECT
323
- m.id as id,
324
- m.project_id as projectId,
325
- m.type as type,
326
- m.content as content,
327
- m.summary as summary,
328
- m.tags as tags,
329
- m.metadata as metadata,
330
- m.embedding as embedding,
331
- m.embedding_json as embeddingJson,
332
- m.created_at as createdAt
333
- FROM memories m
334
- ${whereClause}
335
- ORDER BY m.created_at DESC
336
- LIMIT ?
337
- `);
338
- const rows = statement.all(...params, fetchLimit);
339
- if (rows.length === 0)
340
- return [];
341
- // If we have query embedding, do semantic ranking
342
- if (queryEmbedding) {
343
- const scored = rows.map((row) => {
344
- let embedding = parseEmbedding(row.embedding);
345
- // Fallback to embedding_json if embedding blob is null
346
- if (!embedding && row.embeddingJson) {
347
- embedding = parseEmbedding(row.embeddingJson);
348
- }
349
- const score = embedding ? cosineSimilarity(queryEmbedding, embedding) : 0;
350
- return { row, score };
351
- });
352
- // Sort by similarity score (descending)
353
- scored.sort((a, b) => b.score - a.score);
354
- // Return top results WITH their similarity scores
355
- return scored.slice(0, limit).map((item) => ({
356
- ...normalizeMemory(item.row),
357
- similarity: item.score,
358
- }));
359
- }
360
- // No embeddings available, return results with 0 similarity
361
- return rows.slice(0, limit).map((row, i) => ({
362
- ...normalizeMemory(row),
363
- similarity: 0,
364
- }));
365
- }
366
- async function searchMemoriesPostgres(input, tags, limit) {
367
- const { db } = await getDbClient();
368
- const values = [];
369
- const whereParts = [];
370
- values.push(`%${input.query}%`);
371
- whereParts.push(`content ILIKE $1`);
372
- if (input.type) {
373
- values.push(input.type);
374
- whereParts.push(`type = $${values.length}`);
375
- }
376
- if (tags.length) {
377
- values.push(tags);
378
- whereParts.push(`tags && $${values.length}::text[]`);
379
- }
380
- if (input.project) {
381
- const project = await requireProject(input.project);
382
- values.push(project.id);
383
- whereParts.push(`project_id = $${values.length}`);
384
- }
385
- const whereClause = whereParts.length ? `WHERE ${whereParts.join(' AND ')}` : '';
386
- const embedding = await getEmbedding(input.query);
387
- if (embedding) {
388
- const rows = await db.$client.query(`SELECT
389
- id,
390
- project_id as "projectId",
391
- type,
392
- content,
393
- summary,
394
- tags,
395
- metadata,
396
- created_at as "createdAt",
397
- valid_from as "validFrom",
398
- valid_to as "validTo",
399
- recorded_at as "recordedAt"
400
- FROM memories
401
- ${whereClause}
402
- ORDER BY created_at DESC
403
- LIMIT $${values.length + 1}`, [...values, limit]);
404
- return rows.rows.map((row) => ({
405
- ...normalizeMemory(row),
406
- similarity: row.similarity ?? 0,
407
- }));
408
- }
409
- const rows = await db.$client.query(`SELECT
410
- id,
411
- project_id as "projectId",
412
- type,
413
- content,
414
- summary,
415
- tags,
416
- metadata,
417
- created_at as "createdAt",
418
- valid_from as "validFrom",
419
- valid_to as "validTo",
420
- recorded_at as "recordedAt"
421
- FROM memories
422
- ${whereClause}
423
- ORDER BY created_at DESC
424
- LIMIT $${values.length + 1}`, [...values, limit]);
425
- return rows.rows.map((row) => ({
426
- ...normalizeMemory(row),
427
- similarity: 0,
428
- }));
429
- }
430
- function normalizeMemory(row) {
431
- const tags = deserializeTags(row.tags ?? null);
432
- const metadata = deserializeMetadata(row.metadata ?? null);
433
- const createdAtStr = normalizeTimestamp(row.createdAt ?? row.created_at);
434
- return {
435
- id: row.id,
436
- projectId: row.projectId ?? row.project_id ?? null,
437
- type: row.type,
438
- content: row.content,
439
- summary: row.summary ?? null,
440
- tags,
441
- metadata,
442
- createdAt: createdAtStr,
443
- validFrom: row.validFrom ?? row.valid_from ?? null,
444
- validTo: row.validTo ?? row.valid_to ?? null,
445
- recordedAt: row.recordedAt ?? row.recorded_at ?? null,
446
- confidenceLevel: row.confidenceLevel ?? row.confidence_level ?? null,
447
- };
448
- }
449
- //# sourceMappingURL=memories.js.map
@@ -1,8 +0,0 @@
1
- /** Promote a memory to a higher tier (hot -> warm -> cold) */
2
- export declare function promoteTier(memoryId: string): Promise<void>;
3
- /** Demote a memory tier or expire it based on decay */
4
- export declare function demoteTier(memoryId: string): Promise<void>;
5
- export declare function expireMemory(memoryId: string): Promise<void>;
6
- export declare function markMerged(memoryId: string, targetId: string): Promise<void>;
7
- export declare function markSuperseded(memoryId: string): Promise<void>;
8
- //# sourceMappingURL=memory-lifecycle.d.ts.map
@@ -1,55 +0,0 @@
1
- import { getDb } from '../../db/index.js';
2
- import { memories } from '../../db/drizzle/schema.js';
3
- import { eq } from 'drizzle-orm';
4
- import { logger } from '../logger.js';
5
- /** Promote a memory to a higher tier (hot -> warm -> cold) */
6
- export async function promoteTier(memoryId) {
7
- const db = await getDb();
8
- // @ts-ignore - drizzle overloads
9
- const row = await db.select().from(memories).where(eq(memories.id, memoryId)).limit(1);
10
- const mem = row[0];
11
- if (!mem)
12
- return;
13
- let newTier = mem.tier;
14
- if (mem.tier === 'warm')
15
- newTier = 'hot';
16
- else if (mem.tier === 'cold')
17
- newTier = 'warm';
18
- // @ts-ignore
19
- await db.update(memories).set({ tier: newTier }).where(eq(memories.id, memoryId));
20
- }
21
- /** Demote a memory tier or expire it based on decay */
22
- export async function demoteTier(memoryId) {
23
- const db = await getDb();
24
- // @ts-ignore
25
- const row = await db.select().from(memories).where(eq(memories.id, memoryId)).limit(1);
26
- const mem = row[0];
27
- if (!mem)
28
- return;
29
- let updates = {};
30
- if (mem.tier === 'hot')
31
- updates.tier = 'warm';
32
- else if (mem.tier === 'warm')
33
- updates.tier = 'cold';
34
- else
35
- updates.status = 'expired';
36
- // @ts-ignore
37
- await db.update(memories).set(updates).where(eq(memories.id, memoryId));
38
- }
39
- export async function expireMemory(memoryId) {
40
- const db = await getDb();
41
- // @ts-ignore
42
- await db.update(memories).set({ status: 'expired' }).where(eq(memories.id, memoryId));
43
- }
44
- export async function markMerged(memoryId, targetId) {
45
- const db = await getDb();
46
- // @ts-ignore
47
- await db.update(memories).set({ is_merged: true, merged_into_id: targetId }).where(eq(memories.id, memoryId));
48
- }
49
- export async function markSuperseded(memoryId) {
50
- const db = await getDb();
51
- // @ts-ignore
52
- await db.update(memories).set({ is_merged: true }).where(eq(memories.id, memoryId));
53
- }
54
- logger.info('Memory lifecycle helpers loaded');
55
- //# sourceMappingURL=memory-lifecycle.js.map
@@ -1,15 +0,0 @@
1
- declare class MemoryManager {
2
- private lastGcTime;
3
- private gcIntervalMs;
4
- shouldGc(): boolean;
5
- gc(): void;
6
- getStats(): {
7
- heapUsed: number;
8
- heapTotal: number;
9
- external: number;
10
- rss: number;
11
- };
12
- }
13
- export declare const memoryManager: MemoryManager;
14
- export {};
15
- //# sourceMappingURL=memory-manager.d.ts.map
@@ -1,46 +0,0 @@
1
- import { logger } from '../../core/logger.js';
2
- // Memory monitoring and optimization
3
- class MemoryManager {
4
- lastGcTime = 0;
5
- gcIntervalMs = 5 * 60 * 1000; // 5 minutes
6
- shouldGc() {
7
- const now = Date.now();
8
- if (now - this.lastGcTime > this.gcIntervalMs) {
9
- const usage = process.memoryUsage();
10
- const heapUsedMB = usage.heapUsed / 1024 / 1024;
11
- const heapTotalMB = usage.heapTotal / 1024 / 1024;
12
- // Trigger GC if heap usage is high (>80% of total)
13
- if (heapUsedMB > heapTotalMB * 0.8) {
14
- this.lastGcTime = now;
15
- return true;
16
- }
17
- }
18
- return false;
19
- }
20
- gc() {
21
- if (global.gc && this.shouldGc()) {
22
- if (process.env.NODE_ENV !== 'production') {
23
- logger.info('Running garbage collection');
24
- }
25
- global.gc();
26
- }
27
- }
28
- getStats() {
29
- const usage = process.memoryUsage();
30
- return {
31
- heapUsed: Math.round(usage.heapUsed / 1024 / 1024),
32
- heapTotal: Math.round(usage.heapTotal / 1024 / 1024),
33
- external: Math.round(usage.external / 1024 / 1024),
34
- rss: Math.round(usage.rss / 1024 / 1024),
35
- };
36
- }
37
- }
38
- export const memoryManager = new MemoryManager();
39
- // Periodic memory monitoring (production-safe)
40
- if (process.env.NODE_ENV !== 'production') {
41
- setInterval(() => {
42
- const stats = memoryManager.getStats();
43
- logger.info(`Memory: ${stats.heapUsed}MB used, ${stats.heapTotal}MB total`);
44
- }, 10 * 60 * 1000); // Every 10 minutes
45
- }
46
- //# sourceMappingURL=memory-manager.js.map
@@ -1,21 +0,0 @@
1
- /**
2
- * Memory Migration Module
3
- * Migrate memories between .squish directories/databases
4
- */
5
- export interface MigrateOptions {
6
- dryRun?: boolean;
7
- deleteSource?: boolean;
8
- }
9
- export interface MigrateResult {
10
- memoriesCopied: number;
11
- observationsCopied: number;
12
- associationsCopied: number;
13
- projectsMapped: number;
14
- sourceDeleted?: boolean;
15
- message: string;
16
- }
17
- /**
18
- * Migrate memories from one .squish directory to another
19
- */
20
- export declare function migrateMemories(sourceDir: string, targetDir: string, options?: MigrateOptions): Promise<MigrateResult>;
21
- //# sourceMappingURL=migrate.d.ts.map