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
@@ -1,17 +1,8 @@
1
1
  /**
2
2
  * Importance Scoring System
3
- *
4
- * Calculates and manages memory importance scores (0-100) with temporal decay.
5
- * Based on research from Mnemosyne architecture and ReMe (Memory Replay).
6
- *
7
- * Scoring factors:
8
- * - Base score: 50 (neutral)
9
- * - Recency boost: decays over time (exponential decay)
10
- * - Access frequency: more frequently accessed = higher importance
11
- * - Type weighting: decisions > facts > preferences > context > observations
12
- * - User flags: pinned/protected memories get maximum importance
3
+ * Calculates and manages memory importance scores (0-100) with temporal decay
13
4
  */
14
- import type { Memory } from '../../drizzle/schema.js';
5
+ import type { Memory } from '../../db/drizzle/schema.js';
15
6
  export interface ImportanceScore {
16
7
  score: number;
17
8
  components: {
@@ -35,14 +26,6 @@ export declare function calculateImportance(memory: Partial<Memory>): Importance
35
26
  * Used when memory is accessed or modified
36
27
  */
37
28
  export declare function updateImportanceScore(memoryId: string, incrementAccess?: boolean): Promise<number>;
38
- /**
39
- * Decay importance scores for old memories
40
- * Should be run periodically (e.g., daily) to reduce scores of stale memories
41
- *
42
- * This function applies exponential decay to all memories that haven't been
43
- * recalculated recently, keeping the system's importance scores current.
44
- */
45
- export declare function decayImportanceScores(projectId?: string): Promise<number>;
46
29
  /**
47
30
  * Get low-importance memories that are candidates for consolidation
48
31
  * These are old, rarely accessed memories with low importance scores
@@ -60,9 +43,4 @@ export declare function setImportanceScore(memoryId: string, score: number): Pro
60
43
  * Pin a memory to prevent decay and consolidation
61
44
  */
62
45
  export declare function pinMemory(memoryId: string, pinned?: boolean): Promise<void>;
63
- /**
64
- * Calculate cosine similarity between two vectors
65
- * Re-exported for use in consolidation
66
- */
67
- export declare function cosineSimilarity(vecA: number[], vecB: number[]): number;
68
46
  //# sourceMappingURL=importance.d.ts.map
@@ -1,20 +1,9 @@
1
1
  /**
2
2
  * Importance Scoring System
3
- *
4
- * Calculates and manages memory importance scores (0-100) with temporal decay.
5
- * Based on research from Mnemosyne architecture and ReMe (Memory Replay).
6
- *
7
- * Scoring factors:
8
- * - Base score: 50 (neutral)
9
- * - Recency boost: decays over time (exponential decay)
10
- * - Access frequency: more frequently accessed = higher importance
11
- * - Type weighting: decisions > facts > preferences > context > observations
12
- * - User flags: pinned/protected memories get maximum importance
3
+ * Calculates and manages memory importance scores (0-100) with temporal decay
13
4
  */
14
- import { createDatabaseClient } from '../database.js';
15
- import { getDb } from '../../db/index.js';
16
- import { getSchema } from '../../db/schema.js';
17
5
  import { eq } from 'drizzle-orm';
6
+ import { getDbClient } from '../lib/db-client.js';
18
7
  /**
19
8
  * Type weights for importance scoring
20
9
  * Higher values = more important memory types
@@ -151,8 +140,7 @@ function generateImportanceExplanation(components, memory) {
151
140
  * Used when memory is accessed or modified
152
141
  */
153
142
  export async function updateImportanceScore(memoryId, incrementAccess = false) {
154
- const db = createDatabaseClient(await getDb());
155
- const schema = await getSchema();
143
+ const { db, schema } = await getDbClient();
156
144
  // Get current memory
157
145
  const memories = await db
158
146
  .select()
@@ -181,60 +169,12 @@ export async function updateImportanceScore(memoryId, incrementAccess = false) {
181
169
  .where(eq(schema.memories.id, memoryId));
182
170
  return importance.score;
183
171
  }
184
- /**
185
- * Decay importance scores for old memories
186
- * Should be run periodically (e.g., daily) to reduce scores of stale memories
187
- *
188
- * This function applies exponential decay to all memories that haven't been
189
- * recalculated recently, keeping the system's importance scores current.
190
- */
191
- export async function decayImportanceScores(projectId) {
192
- const db = createDatabaseClient(await getDb());
193
- const schema = await getSchema();
194
- // Get memories that need recalculation
195
- // (those not recalculated in the last 24 hours)
196
- const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
197
- let memories;
198
- if (projectId) {
199
- memories = await db
200
- .select()
201
- .from(schema.memories)
202
- .where(eq(schema.memories.projectId, projectId))
203
- .all();
204
- }
205
- else {
206
- memories = await db.select().from(schema.memories).all();
207
- }
208
- let updatedCount = 0;
209
- for (const memory of memories) {
210
- // Skip pinned/protected memories (they don't decay)
211
- if (memory.isPinned || memory.isProtected) {
212
- continue;
213
- }
214
- // Skip consolidated memories
215
- if (memory.isConsolidated) {
216
- continue;
217
- }
218
- // Recalculate importance (which includes recency decay)
219
- const importance = calculateImportance(memory);
220
- await db
221
- .update(schema.memories)
222
- .set({
223
- importanceScore: importance.score,
224
- lastImportanceRecalc: new Date(),
225
- })
226
- .where(eq(schema.memories.id, memory.id));
227
- updatedCount++;
228
- }
229
- return updatedCount;
230
- }
231
172
  /**
232
173
  * Get low-importance memories that are candidates for consolidation
233
174
  * These are old, rarely accessed memories with low importance scores
234
175
  */
235
176
  export async function getLowImportanceMemories(projectId, options = {}) {
236
- const db = createDatabaseClient(await getDb());
237
- const schema = await getSchema();
177
+ const { db, schema } = await getDbClient();
238
178
  const { minAge = 90, // 90 days old by default
239
179
  maxImportance = 30, // importance score below 30
240
180
  limit = 100, } = options;
@@ -273,8 +213,7 @@ export async function setImportanceScore(memoryId, score) {
273
213
  if (score < 0 || score > 100) {
274
214
  throw new Error('Importance score must be between 0 and 100');
275
215
  }
276
- const db = createDatabaseClient(await getDb());
277
- const schema = await getSchema();
216
+ const { db, schema } = await getDbClient();
278
217
  await db
279
218
  .update(schema.memories)
280
219
  .set({
@@ -287,8 +226,7 @@ export async function setImportanceScore(memoryId, score) {
287
226
  * Pin a memory to prevent decay and consolidation
288
227
  */
289
228
  export async function pinMemory(memoryId, pinned = true) {
290
- const db = createDatabaseClient(await getDb());
291
- const schema = await getSchema();
229
+ const { db, schema } = await getDbClient();
292
230
  await db
293
231
  .update(schema.memories)
294
232
  .set({
@@ -299,27 +237,5 @@ export async function pinMemory(memoryId, pinned = true) {
299
237
  })
300
238
  .where(eq(schema.memories.id, memoryId));
301
239
  }
302
- /**
303
- * Calculate cosine similarity between two vectors
304
- * Re-exported for use in consolidation
305
- */
306
- export function cosineSimilarity(vecA, vecB) {
307
- if (vecA.length !== vecB.length) {
308
- return 0;
309
- }
310
- let dotProduct = 0;
311
- let magnitudeA = 0;
312
- let magnitudeB = 0;
313
- for (let i = 0; i < vecA.length; i++) {
314
- dotProduct += vecA[i] * vecB[i];
315
- magnitudeA += vecA[i] * vecA[i];
316
- magnitudeB += vecB[i] * vecB[i];
317
- }
318
- magnitudeA = Math.sqrt(magnitudeA);
319
- magnitudeB = Math.sqrt(magnitudeB);
320
- if (magnitudeA === 0 || magnitudeB === 0) {
321
- return 0;
322
- }
323
- return dotProduct / (magnitudeA * magnitudeB);
324
- }
240
+ // cosineSimilarity has been removed - import from core/utils/vector-operations.ts directly
325
241
  //# sourceMappingURL=importance.js.map
@@ -1,3 +1,4 @@
1
+ export * from './normalization.js';
1
2
  export * from './memories.js';
2
3
  export * from './memory-manager.js';
3
4
  export * from './serialization.js';
@@ -1,4 +1,5 @@
1
1
  // Memory feature - Store and manage memories
2
+ export * from './normalization.js';
2
3
  export * from './memories.js';
3
4
  export * from './memory-manager.js';
4
5
  export * from './serialization.js';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Memory Loading Abstraction
3
+ * Unified utilities for loading memories by ID with configurable options
4
+ */
5
+ import { type MemoryRecord } from './normalization.js';
6
+ export interface LoadMemoryOptions {
7
+ incrementAccess?: boolean;
8
+ decrypt?: boolean;
9
+ normalize?: boolean;
10
+ includeSensitive?: boolean;
11
+ }
12
+ /**
13
+ * Load a single memory by ID with configurable options
14
+ */
15
+ export declare function loadMemory(id: string, options?: LoadMemoryOptions): Promise<MemoryRecord | any | null>;
16
+ /**
17
+ * Load multiple memories by IDs efficiently
18
+ * Returns a Map keyed by memory ID
19
+ */
20
+ export declare function loadMemories(ids: string[], options?: LoadMemoryOptions): Promise<Map<string, any>>;
21
+ /**
22
+ * Load a memory by ID with raw database access, no processing.
23
+ *
24
+ * This is for special cases that need the raw database row without
25
+ * normalization, decryption, or access count updates.
26
+ *
27
+ * @param id - Memory UUID
28
+ * @returns Raw database row or null if not found
29
+ */
30
+ export declare function loadMemoryRaw(id: string): Promise<any | null>;
31
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Memory Loading Abstraction
3
+ * Unified utilities for loading memories by ID with configurable options
4
+ */
5
+ import { eq, inArray } from 'drizzle-orm';
6
+ import { getDbClient } from '../lib/db-client.js';
7
+ import { decrypt } from '../security/encrypt.js';
8
+ import { normalizeMemory } from './normalization.js';
9
+ import { requireUuid } from '../lib/validation.js';
10
+ /**
11
+ * Load a single memory by ID with configurable options
12
+ */
13
+ export async function loadMemory(id, options = {}) {
14
+ const { incrementAccess = true, decrypt: shouldDecrypt = true, normalize = true, includeSensitive = false } = options;
15
+ // Validate UUID
16
+ requireUuid(id);
17
+ const { db, schema } = await getDbClient();
18
+ // Query the memory
19
+ const rows = await db.select().from(schema.memories).where(eq(schema.memories.id, id)).limit(1);
20
+ const row = rows[0];
21
+ if (!row)
22
+ return null;
23
+ // Increment access count if needed
24
+ if (incrementAccess) {
25
+ await db.update(schema.memories)
26
+ .set({
27
+ accessCount: (row.accessCount ?? 0) + 1,
28
+ lastAccessedAt: new Date(),
29
+ })
30
+ .where(eq(schema.memories.id, id));
31
+ }
32
+ // Determine content: decrypt if needed
33
+ let content = row.content;
34
+ let encryptedContent = row.encrypted_content;
35
+ let encryptionNonce = row.encryption_nonce;
36
+ if (shouldDecrypt && row.is_encrypted) {
37
+ try {
38
+ content = decrypt(encryptedContent, encryptionNonce);
39
+ }
40
+ catch (e) {
41
+ console.warn('Failed to decrypt memory', e);
42
+ content = row.content; // fallback to stored content (encrypted)
43
+ }
44
+ }
45
+ // Build result object
46
+ let result = { ...row, content };
47
+ // If not decrypting and includeSensitive, keep encrypted fields
48
+ if (!shouldDecrypt && includeSensitive) {
49
+ result.encrypted_content = encryptedContent;
50
+ result.encryption_nonce = encryptionNonce;
51
+ }
52
+ // If normalize, convert to MemoryRecord shape
53
+ if (normalize) {
54
+ return normalizeMemory(result);
55
+ }
56
+ // Otherwise return raw-ish row (with content possibly decrypted)
57
+ return result;
58
+ }
59
+ /**
60
+ * Load multiple memories by IDs efficiently
61
+ * Returns a Map keyed by memory ID
62
+ */
63
+ export async function loadMemories(ids, options = {}) {
64
+ const { incrementAccess = true, decrypt: shouldDecrypt = true, normalize = true, includeSensitive = false } = options;
65
+ if (ids.length === 0) {
66
+ return new Map();
67
+ }
68
+ // Validate all UUIDs
69
+ for (const id of ids) {
70
+ requireUuid(id);
71
+ }
72
+ const { db, schema } = await getDbClient();
73
+ // Batch query using IN operator
74
+ const rows = await db
75
+ .select()
76
+ .from(schema.memories)
77
+ .where(inArray(schema.memories.id, ids));
78
+ // Create a map from id to row
79
+ const rowMap = new Map();
80
+ for (const row of rows) {
81
+ rowMap.set(row.id, row);
82
+ }
83
+ // Increment access counts if needed
84
+ if (incrementAccess) {
85
+ const now = new Date();
86
+ for (const row of rows) {
87
+ await db.update(schema.memories)
88
+ .set({
89
+ accessCount: (row.accessCount ?? 0) + 1,
90
+ lastAccessedAt: now,
91
+ })
92
+ .where(eq(schema.memories.id, row.id));
93
+ }
94
+ }
95
+ // Process each row according to options
96
+ const resultMap = new Map();
97
+ for (const row of rows) {
98
+ let content = row.content;
99
+ let encryptedContent = row.encrypted_content;
100
+ let encryptionNonce = row.encryption_nonce;
101
+ if (shouldDecrypt && row.is_encrypted) {
102
+ try {
103
+ content = decrypt(encryptedContent, encryptionNonce);
104
+ }
105
+ catch (e) {
106
+ console.warn('Failed to decrypt memory', e);
107
+ content = row.content;
108
+ }
109
+ }
110
+ let result = { ...row, content };
111
+ if (!shouldDecrypt && includeSensitive) {
112
+ result.encrypted_content = encryptedContent;
113
+ result.encryption_nonce = encryptionNonce;
114
+ }
115
+ if (normalize) {
116
+ resultMap.set(row.id, normalizeMemory(result));
117
+ }
118
+ else {
119
+ resultMap.set(row.id, result);
120
+ }
121
+ }
122
+ return resultMap;
123
+ }
124
+ /**
125
+ * Load a memory by ID with raw database access, no processing.
126
+ *
127
+ * This is for special cases that need the raw database row without
128
+ * normalization, decryption, or access count updates.
129
+ *
130
+ * @param id - Memory UUID
131
+ * @returns Raw database row or null if not found
132
+ */
133
+ export async function loadMemoryRaw(id) {
134
+ // Validate UUID
135
+ requireUuid(id);
136
+ const { db, schema } = await getDbClient();
137
+ // Direct query without any processing
138
+ const rows = await db.select().from(schema.memories).where(eq(schema.memories.id, id)).limit(1);
139
+ return rows[0] || null;
140
+ }
141
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Memory Markdown Storage
3
+ *
4
+ * Stores memories as markdown files in .squish/memory/
5
+ * Following Karpathy LLM Memory pattern:
6
+ * - raw/ : Append-only memory files (never edit)
7
+ * - processed/ : LLM-generated articles (future)
8
+ * - outputs/ : Query responses (future)
9
+ *
10
+ * Each memory = one .md file with YAML frontmatter
11
+ */
12
+ import type { MemoryType } from '../memories.js';
13
+ export interface MarkdownMemoryInput {
14
+ content: string;
15
+ type?: MemoryType;
16
+ tags?: string[];
17
+ reasoning?: string;
18
+ memoryContext?: string;
19
+ examples?: string;
20
+ exceptions?: string;
21
+ source?: string;
22
+ project?: string;
23
+ }
24
+ export interface MarkdownMemoryFile {
25
+ id: string;
26
+ type: MemoryType;
27
+ content: string;
28
+ tags: string[];
29
+ createdAt: string;
30
+ source?: string;
31
+ project?: string;
32
+ reasoning?: string;
33
+ memoryContext?: string;
34
+ examples?: string;
35
+ exceptions?: string;
36
+ }
37
+ /**
38
+ * Save a memory to memory raw folder
39
+ */
40
+ export declare function saveToMarkdown(input: MarkdownMemoryInput): Promise<MarkdownMemoryFile>;
41
+ /**
42
+ * Get all memories from memory raw folder
43
+ */
44
+ export declare function getMarkdownMemories(options?: {
45
+ since?: Date;
46
+ until?: Date;
47
+ tags?: string[];
48
+ type?: MemoryType;
49
+ project?: string;
50
+ }): Promise<MarkdownMemoryFile[]>;
51
+ /**
52
+ * Get a specific memory by ID
53
+ */
54
+ export declare function getMarkdownMemory(id: string): Promise<MarkdownMemoryFile | null>;
55
+ /**
56
+ * Delete a memory from memory
57
+ */
58
+ export declare function deleteMarkdownMemory(id: string): Promise<boolean>;
59
+ /**
60
+ * Get memory storage stats
61
+ */
62
+ export declare function getMemoryStats(): Promise<{
63
+ totalMemories: number;
64
+ byType: Record<string, number>;
65
+ byTag: Record<string, number>;
66
+ storageSizeBytes: number;
67
+ }>;
68
+ /**
69
+ * Check if memory storage is available
70
+ */
71
+ export declare function isMemoryStorageAvailable(): boolean;
72
+ //# sourceMappingURL=markdown-storage.d.ts.map
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Memory Markdown Storage
3
+ *
4
+ * Stores memories as markdown files in .squish/memory/
5
+ * Following Karpathy LLM Memory pattern:
6
+ * - raw/ : Append-only memory files (never edit)
7
+ * - processed/ : LLM-generated articles (future)
8
+ * - outputs/ : Query responses (future)
9
+ *
10
+ * Each memory = one .md file with YAML frontmatter
11
+ */
12
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, unlinkSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { randomUUID } from 'crypto';
15
+ import { logger } from '../../logger.js';
16
+ import { getDataDir } from '../../../config.js';
17
+ /**
18
+ * Get the memory base path (.squish/memory/)
19
+ */
20
+ function getMemoryPath() {
21
+ return join(getDataDir(), 'memory');
22
+ }
23
+ /**
24
+ * Get the raw memories path (.squish/memory/raw/)
25
+ */
26
+ function getRawPath() {
27
+ return join(getMemoryPath(), 'raw');
28
+ }
29
+ /**
30
+ * Ensure memory directory structure exists
31
+ */
32
+ function ensureMemoryStructure() {
33
+ const dirs = [getMemoryPath(), getRawPath()];
34
+ for (const dir of dirs) {
35
+ if (!existsSync(dir)) {
36
+ mkdirSync(dir, { recursive: true });
37
+ logger.info(`[MemoryStorage] Created directory: ${dir}`);
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * Format memory as markdown with YAML frontmatter
43
+ */
44
+ function formatMemoryAsMarkdown(memory) {
45
+ const lines = [];
46
+ // YAML frontmatter
47
+ lines.push('---');
48
+ lines.push(`id: ${memory.id}`);
49
+ lines.push(`type: ${memory.type}`);
50
+ lines.push(`created: ${memory.createdAt}`);
51
+ if (memory.tags && memory.tags.length > 0) {
52
+ lines.push(`tags: [${memory.tags.join(', ')}]`);
53
+ }
54
+ if (memory.source) {
55
+ lines.push(`source: ${memory.source}`);
56
+ }
57
+ if (memory.project) {
58
+ lines.push(`project: ${memory.project}`);
59
+ }
60
+ if (memory.reasoning) {
61
+ lines.push(`reasoning: |`);
62
+ lines.push(memory.reasoning.split('\n').map(l => ` ${l}`).join('\n'));
63
+ }
64
+ if (memory.memoryContext) {
65
+ lines.push(`context: |`);
66
+ lines.push(memory.memoryContext.split('\n').map(l => ` ${l}`).join('\n'));
67
+ }
68
+ if (memory.examples) {
69
+ lines.push(`examples: |`);
70
+ lines.push(memory.examples.split('\n').map(l => ` ${l}`).join('\n'));
71
+ }
72
+ if (memory.exceptions) {
73
+ lines.push(`exceptions: |`);
74
+ lines.push(memory.exceptions.split('\n').map(l => ` ${l}`).join('\n'));
75
+ }
76
+ lines.push('---');
77
+ lines.push('');
78
+ lines.push(memory.content);
79
+ return lines.join('\n');
80
+ }
81
+ /**
82
+ * Parse markdown file to MarkdownMemoryFile
83
+ */
84
+ function parseMarkdownFile(filePath) {
85
+ try {
86
+ const content = readFileSync(filePath, 'utf-8');
87
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
88
+ if (!match)
89
+ return null;
90
+ const frontmatter = match[1];
91
+ const body = content.slice(match[0].length).trim();
92
+ const memory = { content: body };
93
+ // Parse frontmatter lines
94
+ const lines = frontmatter.split('\n');
95
+ for (const line of lines) {
96
+ const colonIdx = line.indexOf(':');
97
+ if (colonIdx === -1)
98
+ continue;
99
+ const key = line.slice(0, colonIdx).trim();
100
+ let value = line.slice(colonIdx + 1).trim();
101
+ // Handle array values like tags: [tag1, tag2]
102
+ if (value.startsWith('[') && value.endsWith(']')) {
103
+ value = value.slice(1, -1);
104
+ memory[key] = value.split(',').map((t) => t.trim());
105
+ }
106
+ else if (value === 'true' || value === 'false') {
107
+ memory[key] = value === 'true';
108
+ }
109
+ else {
110
+ memory[key] = value;
111
+ }
112
+ }
113
+ return memory;
114
+ }
115
+ catch (error) {
116
+ logger.warn(`[MemoryStorage] Failed to parse ${filePath}: ${error}`);
117
+ return null;
118
+ }
119
+ }
120
+ /**
121
+ * Save a memory to memory raw folder
122
+ */
123
+ export async function saveToMarkdown(input) {
124
+ ensureMemoryStructure();
125
+ const id = randomUUID();
126
+ const createdAt = new Date().toISOString();
127
+ const memory = {
128
+ id,
129
+ type: input.type || 'observation',
130
+ content: input.content,
131
+ tags: input.tags || [],
132
+ createdAt,
133
+ source: input.source,
134
+ project: input.project,
135
+ reasoning: input.reasoning,
136
+ memoryContext: input.memoryContext,
137
+ examples: input.examples,
138
+ exceptions: input.exceptions,
139
+ };
140
+ const filePath = join(getRawPath(), `${id}.md`);
141
+ writeFileSync(filePath, formatMemoryAsMarkdown(memory), 'utf-8');
142
+ logger.info(`[MemoryStorage] Saved memory to ${filePath}`);
143
+ return memory;
144
+ }
145
+ /**
146
+ * Get all memories from memory raw folder
147
+ */
148
+ export async function getMarkdownMemories(options) {
149
+ ensureMemoryStructure();
150
+ const files = readdirSync(getRawPath()).filter(f => f.endsWith('.md'));
151
+ const memories = [];
152
+ for (const file of files) {
153
+ const filePath = join(getRawPath(), file);
154
+ const memory = parseMarkdownFile(filePath);
155
+ if (!memory)
156
+ continue;
157
+ const createdAt = new Date(memory.createdAt);
158
+ // Filter by date range
159
+ if (options?.since && createdAt < options.since)
160
+ continue;
161
+ if (options?.until && createdAt > options.until)
162
+ continue;
163
+ // Filter by tags
164
+ if (options?.tags && options.tags.length > 0) {
165
+ const hasTag = options.tags.some(t => memory.tags.includes(t));
166
+ if (!hasTag)
167
+ continue;
168
+ }
169
+ // Filter by type
170
+ if (options?.type && memory.type !== options.type)
171
+ continue;
172
+ // Filter by project
173
+ if (options?.project && memory.project !== options.project)
174
+ continue;
175
+ memories.push(memory);
176
+ }
177
+ // Sort by createdAt descending
178
+ memories.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
179
+ return memories;
180
+ }
181
+ /**
182
+ * Get a specific memory by ID
183
+ */
184
+ export async function getMarkdownMemory(id) {
185
+ const filePath = join(getRawPath(), `${id}.md`);
186
+ if (!existsSync(filePath)) {
187
+ return null;
188
+ }
189
+ return parseMarkdownFile(filePath);
190
+ }
191
+ /**
192
+ * Delete a memory from memory
193
+ */
194
+ export async function deleteMarkdownMemory(id) {
195
+ const filePath = join(getRawPath(), `${id}.md`);
196
+ if (!existsSync(filePath)) {
197
+ return false;
198
+ }
199
+ unlinkSync(filePath);
200
+ logger.info(`[MemoryStorage] Deleted memory ${id}`);
201
+ return true;
202
+ }
203
+ /**
204
+ * Get memory storage stats
205
+ */
206
+ export async function getMemoryStats() {
207
+ ensureMemoryStructure();
208
+ const files = readdirSync(getRawPath()).filter(f => f.endsWith('.md'));
209
+ const byType = {};
210
+ const byTag = {};
211
+ let storageSizeBytes = 0;
212
+ for (const file of files) {
213
+ const filePath = join(getRawPath(), file);
214
+ const stats = await import('fs').then(fs => fs.statSync(filePath));
215
+ storageSizeBytes += stats.size;
216
+ const memory = parseMarkdownFile(filePath);
217
+ if (!memory)
218
+ continue;
219
+ byType[memory.type] = (byType[memory.type] || 0) + 1;
220
+ for (const tag of memory.tags) {
221
+ byTag[tag] = (byTag[tag] || 0) + 1;
222
+ }
223
+ }
224
+ return {
225
+ totalMemories: files.length,
226
+ byType,
227
+ byTag,
228
+ storageSizeBytes,
229
+ };
230
+ }
231
+ /**
232
+ * Check if memory storage is available
233
+ */
234
+ export function isMemoryStorageAvailable() {
235
+ try {
236
+ ensureMemoryStructure();
237
+ return existsSync(getRawPath());
238
+ }
239
+ catch {
240
+ return false;
241
+ }
242
+ }
243
+ //# sourceMappingURL=markdown-storage.js.map