squish-memory 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  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 +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  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/core/algorithms/index.ts +39 -0
  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/core/embeddings/local-embeddings.ts +12 -0
  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/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  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/core/memory/index.ts +11 -0
  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/core/places/index.ts +14 -0
  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 +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  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/core/search/index.ts +4 -0
  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/core/session/index.ts +7 -0
  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/core/snapshots/cleanup.ts +13 -0
  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/core/summarization/cleanup.ts +13 -0
  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/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  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/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -0,0 +1,47 @@
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 (cold -> hot only, simplified from warm hierarchy) */
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
+ // Simplified: cold -> hot (no warm tier)
14
+ if (mem.tier === 'cold') {
15
+ await db.update(memories).set({ tier: 'hot' }).where(eq(memories.id, memoryId));
16
+ }
17
+ }
18
+ /** Demote a memory tier or expire it based on decay (simplified: hot -> cold only) */
19
+ export async function demoteTier(memoryId) {
20
+ const db = await getDb();
21
+ // @ts-ignore
22
+ const row = await db.select().from(memories).where(eq(memories.id, memoryId)).limit(1);
23
+ const mem = row[0];
24
+ if (!mem)
25
+ return;
26
+ // Simplified: hot -> cold (no warm tier)
27
+ if (mem.tier === 'hot') {
28
+ await db.update(memories).set({ tier: 'cold' }).where(eq(memories.id, memoryId));
29
+ }
30
+ }
31
+ export async function expireMemory(memoryId) {
32
+ const db = await getDb();
33
+ // @ts-ignore
34
+ await db.update(memories).set({ status: 'expired' }).where(eq(memories.id, memoryId));
35
+ }
36
+ export async function markMerged(memoryId, targetId) {
37
+ const db = await getDb();
38
+ // @ts-ignore
39
+ await db.update(memories).set({ is_merged: true, merged_into_id: targetId }).where(eq(memories.id, memoryId));
40
+ }
41
+ export async function markSuperseded(memoryId) {
42
+ const db = await getDb();
43
+ // @ts-ignore
44
+ await db.update(memories).set({ is_merged: true }).where(eq(memories.id, memoryId));
45
+ }
46
+ logger.info('Memory lifecycle helpers loaded');
47
+ //# sourceMappingURL=memory-lifecycle.js.map
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Memory Migration Module
3
+ * Migrate memories between .squish directories/databases
4
+ */
5
+ import { randomUUID } from 'crypto';
6
+ import { existsSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { getDbClient } from '../lib/db-client.js';
9
+ /**
10
+ * Migrate memories from one .squish directory to another
11
+ */
12
+ export async function migrateMemories(sourceDir, targetDir, options = {}) {
13
+ const { dryRun = false, deleteSource = false } = options;
14
+ const sourceDbPath = join(sourceDir, 'squish.db');
15
+ const targetDbPath = join(targetDir, 'squish.db');
16
+ if (!existsSync(sourceDbPath)) {
17
+ throw new Error(`Source database not found: ${sourceDbPath}`);
18
+ }
19
+ if (!existsSync(targetDbPath)) {
20
+ throw new Error(`Target database not found: ${targetDbPath}`);
21
+ }
22
+ // Use bun:sqlite for direct source DB access
23
+ // @ts-ignore - bun:sqlite module not found in types but works at runtime
24
+ const SqliteDatabase = (await import('bun:sqlite')).default;
25
+ const sourceDb = new SqliteDatabase(sourceDbPath, { readonly: true });
26
+ // Get target DB through the app's existing mechanism
27
+ const { db: targetDb, schema } = await getDbClient();
28
+ // Get all projects from source
29
+ const sourceProjects = sourceDb.query('SELECT * FROM projects').all();
30
+ // Map old project IDs to new project IDs
31
+ const projectIdMap = new Map();
32
+ for (const project of sourceProjects) {
33
+ // Check if project with same path exists in target
34
+ const existing = await targetDb.select()
35
+ .from(schema.projects)
36
+ .where((tbl, { eq }) => eq(tbl.path, project.path))
37
+ .limit(1);
38
+ if (existing.length > 0) {
39
+ projectIdMap.set(project.id, existing[0].id);
40
+ }
41
+ else {
42
+ // Create new project in target
43
+ const newId = randomUUID();
44
+ await targetDb.insert(schema.projects).values({
45
+ id: newId,
46
+ path: project.path,
47
+ name: project.name || 'migrated',
48
+ createdAt: new Date(),
49
+ });
50
+ projectIdMap.set(project.id, newId);
51
+ }
52
+ }
53
+ // Migrate memories
54
+ const sourceMemories = sourceDb.query('SELECT * FROM memories').all();
55
+ let memoriesCopied = 0;
56
+ for (const mem of sourceMemories) {
57
+ const oldProjectId = mem.project_id;
58
+ const newProjectId = projectIdMap.get(oldProjectId);
59
+ if (!newProjectId) {
60
+ console.warn(`Skipping memory ${mem.id}: no project mapping found`);
61
+ continue;
62
+ }
63
+ if (!dryRun) {
64
+ // Add 'imported' tag to track migrated memories
65
+ const existingTags = mem.tags ? JSON.parse(mem.tags) : [];
66
+ const newTags = [...existingTags, 'imported'];
67
+ await targetDb.insert(schema.memories).values({
68
+ id: randomUUID(),
69
+ projectId: newProjectId,
70
+ type: mem.type,
71
+ content: mem.content,
72
+ summary: mem.summary,
73
+ source: mem.source || 'migrated',
74
+ confidence: mem.confidence ?? 50,
75
+ confidenceLevel: mem.confidence_level || 'speculative',
76
+ tags: newTags,
77
+ metadata: { ...mem.metadata, migratedAt: new Date().toISOString(), originalId: mem.id },
78
+ isActive: mem.is_active ?? 1,
79
+ createdAt: mem.created_at ? new Date(mem.created_at * 1000) : new Date(),
80
+ updatedAt: new Date(),
81
+ });
82
+ }
83
+ memoriesCopied++;
84
+ }
85
+ // Migrate learnings (renamed from observations)
86
+ const sourceLearnings = sourceDb.query('SELECT * FROM learnings').all();
87
+ let learningsCopied = 0;
88
+ for (const learn of sourceLearnings) {
89
+ const oldProjectId = learn.project_id;
90
+ const newProjectId = projectIdMap.get(oldProjectId);
91
+ if (!newProjectId)
92
+ continue;
93
+ if (!dryRun) {
94
+ // Add is_imported flag to track migrated learnings
95
+ await targetDb.insert(schema.learnings).values({
96
+ id: randomUUID(),
97
+ projectId: newProjectId,
98
+ type: learn.type,
99
+ action: learn.action,
100
+ summary: learn.summary,
101
+ target: learn.target,
102
+ details: learn.details,
103
+ isImported: true,
104
+ createdAt: new Date(),
105
+ });
106
+ }
107
+ learningsCopied++;
108
+ }
109
+ // Migrate memory associations (simplified - skip for now)
110
+ const sourceAssoc = sourceDb.query('SELECT * FROM memory_associations').all();
111
+ let associationsCopied = 0;
112
+ if (!dryRun && sourceAssoc.length > 0) {
113
+ console.warn(`Note: ${sourceAssoc.length} associations not migrated (requires ID mapping)`);
114
+ }
115
+ // Close source DB
116
+ sourceDb.close();
117
+ // Delete source if requested
118
+ let sourceDeleted = false;
119
+ if (!dryRun && deleteSource && memoriesCopied > 0) {
120
+ // Implementation would delete the file
121
+ console.warn('Source deletion not implemented - requires manual removal');
122
+ }
123
+ return {
124
+ memoriesCopied,
125
+ observationsCopied: learningsCopied,
126
+ associationsCopied,
127
+ projectsMapped: projectIdMap.size,
128
+ sourceDeleted,
129
+ message: dryRun
130
+ ? 'Dry run complete - no changes made'
131
+ : `Successfully migrated ${memoriesCopied} memories, ${learningsCopied} learnings`
132
+ };
133
+ }
134
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Memory normalization utilities
3
+ * Shared between memories.ts and loader.ts to avoid circular dependencies
4
+ */
5
+ import type { MemoryRecord } from '../lib/types.js';
6
+ export declare function normalizeMemory(row: any): MemoryRecord;
7
+ //# sourceMappingURL=normalization.d.ts.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Memory normalization utilities
3
+ * Shared between memories.ts and loader.ts to avoid circular dependencies
4
+ */
5
+ import { deserializeTags, deserializeMetadata } from './serialization.js';
6
+ import { normalizeTimestamp } from '../lib/utils.js';
7
+ export function normalizeMemory(row) {
8
+ const tags = deserializeTags(row.tags ?? null);
9
+ const metadata = deserializeMetadata(row.metadata ?? null);
10
+ const createdAtStr = normalizeTimestamp(row.createdAt ?? row.created_at);
11
+ return {
12
+ id: row.id,
13
+ projectId: row.projectId ?? row.project_id ?? null,
14
+ type: row.type,
15
+ content: row.content,
16
+ summary: row.summary ?? null,
17
+ tags,
18
+ metadata,
19
+ createdAt: createdAtStr,
20
+ validFrom: row.validFrom ?? row.valid_from ?? null,
21
+ validTo: row.validTo ?? row.valid_to ?? null,
22
+ recordedAt: row.recordedAt ?? row.recorded_at ?? null,
23
+ confidenceLevel: row.confidenceLevel ?? row.confidence_level ?? null,
24
+ };
25
+ }
26
+ //# sourceMappingURL=normalization.js.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Path Strengthener
3
+ *
4
+ * Strengthens association paths that led to successful retrievals and
5
+ * weakens paths that led to irrelevant results. This implements the
6
+ * "optimize" concept: the graph develops its own sense of relevance
7
+ * over time based on actual usage patterns.
8
+ *
9
+ * A customer support agent's graph naturally strengthens paths through
10
+ * product docs and refund policies while letting rarely-queried HR
11
+ * edges decay.
12
+ */
13
+ export interface PathStrengthResult {
14
+ strengthened: number;
15
+ weakened: number;
16
+ pruned: number;
17
+ }
18
+ /**
19
+ * Strengthen the association path between memories that were
20
+ * retrieved together and found useful.
21
+ */
22
+ export declare function strengthenPath(memoryIds: string[], boostAmount?: number): Promise<number>;
23
+ /**
24
+ * Weaken association paths that led to irrelevant results.
25
+ */
26
+ export declare function weakenPath(memoryIds: string[], decayAmount?: number): Promise<number>;
27
+ /**
28
+ * Prune associations that have decayed below a threshold.
29
+ */
30
+ export declare function pruneWeakAssociations(minWeight?: number, maxAge?: number): Promise<number>;
31
+ /**
32
+ * Run a full optimize cycle: strengthen useful paths, weaken unused ones,
33
+ * prune dead associations, and derive implicit facts.
34
+ */
35
+ export declare function runPruneCycle(options?: {
36
+ minWeight?: number;
37
+ maxAge?: number;
38
+ }): Promise<PathStrengthResult>;
39
+ //# sourceMappingURL=path-strengthener.d.ts.map
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Path Strengthener
3
+ *
4
+ * Strengthens association paths that led to successful retrievals and
5
+ * weakens paths that led to irrelevant results. This implements the
6
+ * "optimize" concept: the graph develops its own sense of relevance
7
+ * over time based on actual usage patterns.
8
+ *
9
+ * A customer support agent's graph naturally strengthens paths through
10
+ * product docs and refund policies while letting rarely-queried HR
11
+ * edges decay.
12
+ */
13
+ import { eq, and, or, sql } from 'drizzle-orm';
14
+ import { getDb } from '../../db/index.js';
15
+ import { getSchema } from '../../db/schema.js';
16
+ import { logger } from '../logger.js';
17
+ /**
18
+ * Strengthen the association path between memories that were
19
+ * retrieved together and found useful.
20
+ */
21
+ export async function strengthenPath(memoryIds, boostAmount = 2) {
22
+ if (memoryIds.length < 2)
23
+ return 0;
24
+ const db = await getDb();
25
+ const schema = await getSchema();
26
+ let strengthened = 0;
27
+ // Generate all pairs
28
+ for (let i = 0; i < memoryIds.length; i++) {
29
+ for (let j = i + 1; j < memoryIds.length; j++) {
30
+ try {
31
+ // Check if association exists
32
+ const existing = await db
33
+ .select()
34
+ .from(schema.memoryAssociations)
35
+ .where(or(and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[i]), eq(schema.memoryAssociations.toMemoryId, memoryIds[j])), and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[j]), eq(schema.memoryAssociations.toMemoryId, memoryIds[i]))))
36
+ .limit(1);
37
+ if (existing.length > 0) {
38
+ // Strengthen existing association
39
+ await db
40
+ .update(schema.memoryAssociations)
41
+ .set({
42
+ weight: sql `${schema.memoryAssociations.weight} + ${boostAmount}`,
43
+ coactivationCount: sql `${schema.memoryAssociations.coactivationCount} + 1`,
44
+ lastCoactivatedAt: new Date(),
45
+ })
46
+ .where(eq(schema.memoryAssociations.id, existing[0].id));
47
+ }
48
+ else {
49
+ // Create new association
50
+ await db.insert(schema.memoryAssociations).values({
51
+ fromMemoryId: memoryIds[i],
52
+ toMemoryId: memoryIds[j],
53
+ associationType: 'co_occurred',
54
+ weight: boostAmount,
55
+ coactivationCount: 1,
56
+ lastCoactivatedAt: new Date(),
57
+ });
58
+ }
59
+ strengthened++;
60
+ }
61
+ catch (error) {
62
+ logger.debug('Error strengthening path', {
63
+ from: memoryIds[i],
64
+ to: memoryIds[j],
65
+ error: error,
66
+ });
67
+ }
68
+ }
69
+ }
70
+ return strengthened;
71
+ }
72
+ /**
73
+ * Weaken association paths that led to irrelevant results.
74
+ */
75
+ export async function weakenPath(memoryIds, decayAmount = 0.5) {
76
+ if (memoryIds.length < 2)
77
+ return 0;
78
+ const db = await getDb();
79
+ const schema = await getSchema();
80
+ let weakened = 0;
81
+ for (let i = 0; i < memoryIds.length; i++) {
82
+ for (let j = i + 1; j < memoryIds.length; j++) {
83
+ try {
84
+ const existing = await db
85
+ .select()
86
+ .from(schema.memoryAssociations)
87
+ .where(or(and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[i]), eq(schema.memoryAssociations.toMemoryId, memoryIds[j])), and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[j]), eq(schema.memoryAssociations.toMemoryId, memoryIds[i]))))
88
+ .limit(1);
89
+ if (existing.length > 0) {
90
+ // Weaken but don't remove (minimum weight of 1)
91
+ await db
92
+ .update(schema.memoryAssociations)
93
+ .set({
94
+ weight: sql `GREATEST(${schema.memoryAssociations.weight} - ${decayAmount}, 1)`,
95
+ })
96
+ .where(eq(schema.memoryAssociations.id, existing[0].id));
97
+ weakened++;
98
+ }
99
+ }
100
+ catch (error) {
101
+ logger.debug('Error weakening path', {
102
+ from: memoryIds[i],
103
+ to: memoryIds[j],
104
+ error: error,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ return weakened;
110
+ }
111
+ /**
112
+ * Prune associations that have decayed below a threshold.
113
+ */
114
+ export async function pruneWeakAssociations(minWeight = 2, maxAge = 90 // days
115
+ ) {
116
+ const db = await getDb();
117
+ const schema = await getSchema();
118
+ const cutoffDate = new Date();
119
+ cutoffDate.setDate(cutoffDate.getDate() - maxAge);
120
+ try {
121
+ // Delete associations that are weak AND old
122
+ const result = await db
123
+ .delete(schema.memoryAssociations)
124
+ .where(and(sql `${schema.memoryAssociations.weight} < ${minWeight}`, sql `${schema.memoryAssociations.lastCoactivatedAt} < ${cutoffDate}`));
125
+ const pruned = result?.rowCount ?? 0;
126
+ logger.info('Pruned weak associations', { pruned, minWeight, maxAge });
127
+ return pruned;
128
+ }
129
+ catch (error) {
130
+ logger.error('Error pruning weak associations', { error: error });
131
+ return 0;
132
+ }
133
+ }
134
+ /**
135
+ * Run a full optimize cycle: strengthen useful paths, weaken unused ones,
136
+ * prune dead associations, and derive implicit facts.
137
+ */
138
+ export async function runPruneCycle(options) {
139
+ const { minWeight = 2, maxAge = 90 } = options || {};
140
+ logger.info('Starting prune cycle', { minWeight, maxAge });
141
+ // Step 1: Prune weak associations
142
+ const pruned = await pruneWeakAssociations(minWeight, maxAge);
143
+ logger.info('Prune cycle completed', { pruned });
144
+ return {
145
+ strengthened: 0, // Strengthening happens via retrieval feedback
146
+ weakened: 0, // Weakening happens via retrieval feedback
147
+ pruned,
148
+ };
149
+ }
150
+ //# sourceMappingURL=path-strengthener.js.map
@@ -2,7 +2,7 @@ import { randomUUID } from 'crypto';
2
2
  import { eq, desc, and, sql } from 'drizzle-orm';
3
3
  import { getDb } from '../../db/index.js';
4
4
  import { getSchema } from '../../db/schema.js';
5
- import { createDatabaseClient } from '../../core/database.js';
5
+ import { createDatabaseClient } from '../storage/database.js';
6
6
  const PREVIEW_TOKENS = 50;
7
7
  const MAX_PRELOAD_CANDIDATES = 20;
8
8
  const TOKEN_ESTIMATE_CHARS = 4;
@@ -36,9 +36,43 @@ export function expandQuery(query) {
36
36
  }
37
37
  }
38
38
  }
39
- // Extract simple entities (capitalized words)
40
- const entityMatches = query.match(/\b[A-Z][a-z]+\b/g);
41
- const entities = entityMatches ? [...new Set(entityMatches)] : [];
39
+ // Extract entities (capitalized words), filtering common stopwords
40
+ const STOP_WORDS = new Set([
41
+ 'The', 'A', 'An', 'This', 'That', 'These', 'Those',
42
+ 'I', 'You', 'We', 'They', 'He', 'She', 'It',
43
+ 'What', 'When', 'Where', 'Why', 'How',
44
+ 'My', 'Your', 'Our', 'Their', 'Its',
45
+ 'If', 'But', 'Or', 'And', 'So', 'Then',
46
+ 'Just', 'Only', 'Also', 'Very', 'Too',
47
+ 'Has', 'Have', 'Had', 'Does', 'Did', 'Will', 'Would', 'Could', 'Should',
48
+ 'Can', 'May', 'Might', 'Must', 'Shall',
49
+ 'With', 'Without', 'From', 'Into', 'About', 'After', 'Before', 'Between',
50
+ 'During', 'Through', 'Under', 'Over', 'Above', 'Below',
51
+ 'All', 'Some', 'Any', 'No', 'Not', 'Each', 'Every', 'Most', 'Many', 'Much',
52
+ 'Few', 'Both', 'Either', 'Neither', 'Another', 'Other',
53
+ 'Such', 'Same', 'Different', 'New', 'Old', 'First', 'Last', 'Next', 'Last',
54
+ 'See', 'Get', 'Make', 'Do', 'Say', 'Tell', 'Know', 'Think', 'Want', 'Use',
55
+ 'Find', 'Give', 'Take', 'Show', 'Send', 'Put', 'Keep', 'Let', 'Begin', 'Seem',
56
+ ]);
57
+ // Common tech stack terms that ARE entities (preserves known entities)
58
+ const TECH_TERMS = new Set([
59
+ 'TypeScript', 'JavaScript', 'Python', 'Java', 'Go', 'Rust', 'Ruby', 'PHP',
60
+ 'React', 'Vue', 'Angular', 'Svelte', 'Next', 'Nuxt', 'Astro',
61
+ 'Node', 'Express', 'Fastify', 'Deno', 'Bun',
62
+ 'PostgreSQL', 'MySQL', 'MongoDB', 'Redis', 'SQLite', 'DynamoDB',
63
+ 'AWS', 'GCP', 'Azure', 'Docker', 'Kubernetes', 'Terraform',
64
+ 'OpenAI', 'Anthropic', 'Google', 'Meta', 'Microsoft', 'Apple',
65
+ 'HTML', 'CSS', 'Tailwind', 'GraphQL', 'REST', 'gRPC', 'WebSocket',
66
+ 'CI', 'CD', 'Git', 'GitHub', 'GitLab', 'Bitbucket',
67
+ ]);
68
+ const entityMatches = query.match(/\b[A-Z][a-z]{2,}\b/g) || [];
69
+ const entities = [...new Set(entityMatches)].filter(e => {
70
+ // Always include known tech terms
71
+ if (TECH_TERMS.has(e))
72
+ return true;
73
+ // Filter out stopwords
74
+ return !STOP_WORDS.has(e);
75
+ });
42
76
  return {
43
77
  original: query,
44
78
  expanded: [...new Set(expanded)], // Deduplicate
@@ -2,15 +2,15 @@
2
2
  import { logger } from '../logger.js';
3
3
  import { config } from '../../config.js';
4
4
  import { expandQuery } from './query-processor.js';
5
- const REWRITE_SYSTEM_PROMPT = `You are a search query optimizer. Given a conversation context and a user's latest message, rewrite the message into the single most effective search query to retrieve relevant memories.
6
-
7
- Rules:
8
- 1. Output ONLY the optimized search query - no explanations or extra text
9
- 2. Remove filler words (please, can you, etc.)
10
- 3. Focus on the core information need
11
- 4. Preserve important entities (names, dates, technical terms)
12
- 5. Add synonyms for key terms if helpful
13
- 6. Consider what memories would be most relevant
5
+ const REWRITE_SYSTEM_PROMPT = `You are a search query optimizer. Given a conversation context and a user's latest message, rewrite the message into the single most effective search query to retrieve relevant memories.
6
+
7
+ Rules:
8
+ 1. Output ONLY the optimized search query - no explanations or extra text
9
+ 2. Remove filler words (please, can you, etc.)
10
+ 3. Focus on the core information need
11
+ 4. Preserve important entities (names, dates, technical terms)
12
+ 5. Add synonyms for key terms if helpful
13
+ 6. Consider what memories would be most relevant
14
14
  7. If the message is about recalling something specific, include those details`;
15
15
  export async function rewriteQuery(query, context) {
16
16
  if (!config.queryRewritingEnabled) {
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Retrieval Feedback System
3
+ *
4
+ * Tracks whether retrieved memories were useful in responses.
5
+ * Strengthens useful paths, prunes stale nodes, tunes edge weights.
6
+ */
7
+ export interface RetrievalFeedback {
8
+ memoryId: string;
9
+ query: string;
10
+ wasUseful: boolean;
11
+ cited: boolean;
12
+ responseId?: string;
13
+ timestamp: Date;
14
+ }
15
+ export interface FeedbackStats {
16
+ totalRetrievals: number;
17
+ usefulRetrievals: number;
18
+ citedRetrievals: number;
19
+ usefulnessRate: number;
20
+ citationRate: number;
21
+ }
22
+ /**
23
+ * Record that a memory was retrieved for a query.
24
+ * Call this when a memory appears in search results.
25
+ */
26
+ export declare function recordRetrieval(memoryId: string, query: string, options?: {
27
+ sessionId?: string;
28
+ }): void;
29
+ /**
30
+ * Record that a retrieved memory was actually useful.
31
+ * Call this when a memory is cited or referenced in a response.
32
+ */
33
+ export declare function recordUsefulRetrieval(memoryId: string, query: string, options?: {
34
+ cited?: boolean;
35
+ responseId?: string;
36
+ sessionId?: string;
37
+ }): void;
38
+ /**
39
+ * Record that a memory was cited in a response.
40
+ * This is stronger feedback than just "useful" - it means the memory
41
+ * was explicitly referenced.
42
+ */
43
+ export declare function recordCitation(memoryId: string, responseId: string, options?: {
44
+ sessionId?: string;
45
+ }): void;
46
+ /**
47
+ * Get feedback statistics for a specific memory.
48
+ */
49
+ export declare function getRetrievalStats(memoryId: string): FeedbackStats;
50
+ /**
51
+ * Get overall feedback statistics.
52
+ */
53
+ export declare function getOverallFeedbackStats(): FeedbackStats;
54
+ /**
55
+ * Flush feedback to the database, updating association weights.
56
+ */
57
+ export declare function flushFeedback(): Promise<{
58
+ strengthened: number;
59
+ weakened: number;
60
+ total: number;
61
+ }>;
62
+ /**
63
+ * Start the periodic feedback flush timer.
64
+ */
65
+ export declare function startFeedbackFlushTimer(): void;
66
+ /**
67
+ * Stop the periodic feedback flush timer.
68
+ */
69
+ export declare function stopFeedbackFlushTimer(): void;
70
+ //# sourceMappingURL=retrieval-feedback.d.ts.map