squish-memory 1.1.5 → 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 (499) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +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 +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/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/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/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 +40 -17
  220. package/dist/config.js +150 -198
  221. package/dist/core/adapters/types.d.ts +13 -33
  222. package/dist/core/adapters/types.js +1 -1
  223. package/dist/core/agent-preferences.d.ts +16 -0
  224. package/dist/core/agent-preferences.js +124 -0
  225. package/dist/core/algorithms/safety/safety-checks.d.ts +1 -5
  226. package/dist/core/algorithms/types.d.ts +0 -8
  227. package/dist/core/associations.d.ts +3 -1
  228. package/dist/core/associations.js +37 -1
  229. package/dist/core/beliefs/decay.d.ts +27 -0
  230. package/dist/core/beliefs/decay.js +217 -0
  231. package/dist/core/beliefs/extractor.d.ts +9 -0
  232. package/dist/core/beliefs/extractor.js +113 -0
  233. package/dist/core/beliefs/store.d.ts +46 -0
  234. package/dist/core/beliefs/store.js +466 -0
  235. package/dist/core/beliefs/types.d.ts +28 -0
  236. package/dist/core/beliefs/types.js +2 -0
  237. package/dist/core/commands/mcp-server.d.ts +0 -1
  238. package/dist/core/commands/mcp-server.js +4 -737
  239. package/dist/core/commands/remember.d.ts +24 -0
  240. package/dist/core/commands/remember.js +144 -0
  241. package/dist/core/{toon.d.ts → compression.d.ts} +6 -4
  242. package/dist/core/{toon.js → compression.js} +8 -8
  243. package/dist/core/context/agent-context.js +1 -1
  244. package/dist/core/embeddings/embeddings.d.ts +29 -0
  245. package/dist/core/embeddings/embeddings.js +546 -0
  246. package/dist/core/embeddings/google-multimodal.js +6 -2
  247. package/dist/core/{local-embeddings.d.ts → embeddings/local-embeddings.d.ts} +1 -1
  248. package/dist/core/embeddings/local-embeddings.js +11 -0
  249. package/dist/core/embeddings/qmd-client.js +1 -1
  250. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  251. package/dist/core/embeddings/transformers-local.js +213 -0
  252. package/dist/core/embeddings.d.ts +1 -28
  253. package/dist/core/embeddings.js +2 -453
  254. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  255. package/dist/core/graph/entity-deduplicator.js +183 -0
  256. package/dist/core/graph/graph-builder.d.ts +46 -0
  257. package/dist/core/graph/graph-builder.js +174 -0
  258. package/dist/core/graph/graph-traversal.d.ts +80 -0
  259. package/dist/core/graph/graph-traversal.js +315 -0
  260. package/dist/core/graph/index.d.ts +19 -0
  261. package/dist/core/graph/index.js +13 -0
  262. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  263. package/dist/core/graph/llm-entity-extractor.js +313 -0
  264. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  265. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  266. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  267. package/dist/core/graph/relationship-extractor.js +351 -0
  268. package/dist/core/hooks/agent-hooks.d.ts +10 -1
  269. package/dist/core/hooks/agent-hooks.js +301 -24
  270. package/dist/core/hot-cache.d.ts +86 -0
  271. package/dist/core/hot-cache.js +285 -0
  272. package/dist/core/index.d.ts +9 -9
  273. package/dist/core/index.js +9 -12
  274. package/dist/core/ingestion/core-memory.d.ts +2 -2
  275. package/dist/core/ingestion/core-memory.js +3 -3
  276. package/dist/core/ingestion/learnings.js +3 -0
  277. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  278. package/dist/core/ingestion/signal-engine.js +201 -0
  279. package/dist/core/{obsidian-vault.d.ts → integrations/obsidian-vault.d.ts} +2 -1
  280. package/dist/core/{obsidian-vault.js → integrations/obsidian-vault.js} +69 -7
  281. package/dist/core/lib/parse-embedding.d.ts +9 -0
  282. package/dist/core/lib/parse-embedding.js +58 -0
  283. package/dist/core/lib/schemas.d.ts +57 -54
  284. package/dist/core/lib/types.d.ts +45 -0
  285. package/dist/core/lib/types.js +6 -0
  286. package/dist/core/lib/utils.d.ts +4 -0
  287. package/dist/core/lib/utils.js +55 -0
  288. package/dist/core/lifecycle.d.ts +0 -1
  289. package/dist/core/lifecycle.js +13 -23
  290. package/dist/core/logger.d.ts +1 -0
  291. package/dist/core/logger.js +14 -8
  292. package/dist/core/mcp/tools.d.ts +0 -2
  293. package/dist/core/mcp/tools.js +0 -87
  294. package/dist/core/mcp/types.d.ts +25 -253
  295. package/dist/core/mcp/types.js +2 -2
  296. package/dist/core/memory/categorizer.js +1 -0
  297. package/dist/core/memory/consolidation.js +2 -28
  298. package/dist/core/memory/entity-extractor.d.ts +4 -0
  299. package/dist/core/memory/entity-extractor.js +30 -16
  300. package/dist/core/memory/explain.d.ts +18 -0
  301. package/dist/core/memory/explain.js +92 -0
  302. package/dist/core/memory/fact-deriver.d.ts +31 -0
  303. package/dist/core/memory/fact-deriver.js +236 -0
  304. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  305. package/dist/core/memory/hybrid-retrieval.js +25 -127
  306. package/dist/core/memory/hybrid-scorer.js +6 -23
  307. package/dist/core/memory/hybrid-search.d.ts +10 -7
  308. package/dist/core/memory/hybrid-search.js +458 -221
  309. package/dist/core/memory/importance.d.ts +0 -17
  310. package/dist/core/memory/importance.js +1 -58
  311. package/dist/core/memory/index.d.ts +1 -0
  312. package/dist/core/memory/index.js +1 -0
  313. package/dist/core/memory/memories.d.ts +13 -17
  314. package/dist/core/memory/memories.js +78 -75
  315. package/dist/core/memory/memory-lifecycle.d.ts +2 -2
  316. package/dist/core/memory/memory-lifecycle.js +10 -18
  317. package/dist/core/memory/normalization.d.ts +1 -16
  318. package/dist/core/memory/path-strengthener.d.ts +39 -0
  319. package/dist/core/memory/path-strengthener.js +150 -0
  320. package/dist/core/memory/query-processor.js +37 -3
  321. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  322. package/dist/core/memory/retrieval-feedback.js +213 -0
  323. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  324. package/dist/core/memory/stale-cleaner.js +97 -0
  325. package/dist/core/memory/stats.d.ts +10 -0
  326. package/dist/core/memory/stats.js +8 -3
  327. package/dist/core/memory/trigger-detector.d.ts +8 -1
  328. package/dist/core/memory/trigger-detector.js +42 -5
  329. package/dist/core/places/index.d.ts +1 -1
  330. package/dist/core/places/index.js +1 -1
  331. package/dist/core/places/places.d.ts +13 -13
  332. package/dist/core/places/places.js +27 -27
  333. package/dist/core/places/rules.js +23 -23
  334. package/dist/core/places/walking.d.ts +3 -3
  335. package/dist/core/places/walking.js +7 -7
  336. package/dist/core/projects.js +8 -0
  337. package/dist/core/runtime/trust-report.d.ts +102 -0
  338. package/dist/core/runtime/trust-report.js +107 -0
  339. package/dist/core/runtime/trust-state.d.ts +12 -0
  340. package/dist/core/runtime/trust-state.js +309 -0
  341. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  342. package/dist/core/scheduler/cron-scheduler.js +164 -3
  343. package/dist/core/scheduler/job-runner.js +1 -1
  344. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  345. package/dist/core/search/qmd-wrapper.js +58 -0
  346. package/dist/core/session/auto-load.js +28 -3
  347. package/dist/core/session/entity-tracker.d.ts +62 -0
  348. package/dist/core/session/entity-tracker.js +287 -0
  349. package/dist/core/session/reference-resolver.d.ts +26 -0
  350. package/dist/core/session/reference-resolver.js +121 -0
  351. package/dist/core/session/self-iteration-job.d.ts +15 -0
  352. package/dist/core/session/self-iteration-job.js +163 -58
  353. package/dist/core/session/working-set.d.ts +50 -0
  354. package/dist/core/session/working-set.js +212 -0
  355. package/dist/core/snapshots/creation.d.ts +2 -8
  356. package/dist/core/snapshots/creation.js +3 -12
  357. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  358. package/dist/core/utils/summarization-helpers.js +1 -6
  359. package/dist/db/bootstrap.d.ts +2 -0
  360. package/dist/db/bootstrap.js +229 -280
  361. package/dist/db/drizzle/schema-sqlite.d.ts +702 -1
  362. package/dist/db/drizzle/schema-sqlite.js +83 -4
  363. package/dist/db/drizzle/schema.d.ts +653 -1
  364. package/dist/db/drizzle/schema.js +93 -4
  365. package/dist/db/migrations/associations.d.ts +6 -0
  366. package/dist/db/migrations/associations.js +29 -0
  367. package/dist/db/migrations/beliefs.d.ts +10 -0
  368. package/dist/db/migrations/beliefs.js +76 -0
  369. package/dist/db/migrations/core-memory.d.ts +6 -0
  370. package/dist/db/migrations/core-memory.js +29 -0
  371. package/dist/db/migrations/fts.d.ts +6 -0
  372. package/dist/db/migrations/fts.js +52 -0
  373. package/dist/db/migrations/index.d.ts +25 -0
  374. package/dist/db/migrations/index.js +51 -0
  375. package/dist/db/migrations/indexes.d.ts +6 -0
  376. package/dist/db/migrations/indexes.js +30 -0
  377. package/dist/db/migrations/learnings.d.ts +7 -0
  378. package/dist/db/migrations/learnings.js +26 -0
  379. package/dist/db/migrations/maintenance.d.ts +6 -0
  380. package/dist/db/migrations/maintenance.js +61 -0
  381. package/dist/db/migrations/memories.d.ts +7 -0
  382. package/dist/db/migrations/memories.js +16 -0
  383. package/dist/db/migrations/memory-places.d.ts +6 -0
  384. package/dist/db/migrations/memory-places.js +29 -0
  385. package/dist/db/migrations/places.d.ts +6 -0
  386. package/dist/db/migrations/places.js +43 -0
  387. package/dist/db/migrations/projects.d.ts +3 -0
  388. package/dist/db/migrations/projects.js +13 -0
  389. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  390. package/dist/db/migrations/tier-conversion.js +20 -0
  391. package/dist/db/schema/beliefs.d.ts +9 -0
  392. package/dist/db/schema/beliefs.js +46 -0
  393. package/dist/db/schema/generator.d.ts +38 -0
  394. package/dist/db/schema/generator.js +108 -0
  395. package/dist/db/schema/index.d.ts +19 -20
  396. package/dist/db/schema/index.js +25 -79
  397. package/dist/db/schema/learnings.d.ts +7 -0
  398. package/dist/db/schema/learnings.js +30 -0
  399. package/dist/db/schema/memories.d.ts +7 -0
  400. package/dist/db/schema/memories.js +81 -0
  401. package/dist/db/schema/projects.d.ts +4 -0
  402. package/dist/db/schema/projects.js +31 -0
  403. package/dist/packages/mcp/src/index.d.ts +3 -0
  404. package/dist/packages/mcp/src/index.js +733 -0
  405. package/mcp.json.example +8 -11
  406. package/package.json +57 -76
  407. package/packages/cli/package.json +22 -0
  408. package/packages/cli/src/commands/clean.ts +68 -0
  409. package/packages/cli/src/commands/context.ts +79 -0
  410. package/packages/cli/src/commands/doctor.ts +357 -0
  411. package/packages/cli/src/commands/forget.ts +72 -0
  412. package/packages/cli/src/commands/health.ts +36 -0
  413. package/packages/cli/src/commands/inspect.ts +41 -0
  414. package/packages/cli/src/commands/link.ts +50 -0
  415. package/packages/cli/src/commands/migrate.ts +93 -0
  416. package/packages/cli/src/commands/recall.ts +99 -0
  417. package/packages/cli/src/commands/recent.ts +57 -0
  418. package/packages/cli/src/commands/remember.ts +139 -0
  419. package/packages/cli/src/commands/run.ts +58 -0
  420. package/packages/cli/src/commands/stale.ts +43 -0
  421. package/packages/cli/src/commands/stats.ts +42 -0
  422. package/packages/cli/src/index.ts +57 -0
  423. package/packages/cli/tsconfig.json +24 -0
  424. package/packages/mcp/package.json +26 -0
  425. package/packages/mcp/src/index.ts +877 -0
  426. package/packages/mcp/tsconfig.json +20 -0
  427. package/skills/squish-memory/SKILL.md +38 -35
  428. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  429. package/skills/squish-memory/references/claude-desktop.json +12 -0
  430. package/skills/squish-memory/references/openclaw.json +13 -0
  431. package/skills/squish-memory/references/opencode.json +14 -0
  432. package/config/hooks/claude-code-hooks.json +0 -39
  433. package/config/hooks/cursor-hooks.json +0 -30
  434. package/config/hooks/opencode-hooks.json +0 -30
  435. package/config/hooks/windsurf-hooks.json +0 -30
  436. package/config/mcp-cli-fallback-policy.json +0 -22
  437. package/config/mcp.json +0 -38
  438. package/config/plugin-manifest.json +0 -101
  439. package/config/plugin-manifest.schema.json +0 -244
  440. package/config/plugin.json +0 -32
  441. package/config/remote-memory-policy.json +0 -32
  442. package/core/commands/context-paging.md +0 -51
  443. package/core/commands/context-status.md +0 -22
  444. package/core/commands/context.md +0 -5
  445. package/core/commands/core-memory.md +0 -56
  446. package/core/commands/health.md +0 -5
  447. package/core/commands/init.md +0 -39
  448. package/core/commands/merge.md +0 -113
  449. package/core/commands/recall.md +0 -5
  450. package/core/commands/remember.md +0 -11
  451. package/core/commands/search.md +0 -10
  452. package/dist/core/commands/managed-sync.d.ts +0 -10
  453. package/dist/core/commands/managed-sync.js +0 -64
  454. package/dist/core/external-folder/index.d.ts +0 -102
  455. package/dist/core/external-folder/index.js +0 -294
  456. package/dist/core/namespaces/index.d.ts +0 -71
  457. package/dist/core/namespaces/index.js +0 -305
  458. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  459. package/dist/core/namespaces/uri-parser.js +0 -74
  460. package/dist/core/search/qmd-search.d.ts +0 -61
  461. package/dist/core/search/qmd-search.js +0 -178
  462. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  463. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  464. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  465. package/dist/core/session-hooks/session-hooks.js +0 -58
  466. package/dist/core/snapshots.d.ts +0 -29
  467. package/dist/core/snapshots.js +0 -220
  468. package/dist/core/sync/qmd-sync.d.ts +0 -94
  469. package/dist/core/sync/qmd-sync.js +0 -201
  470. package/dist/index.d.ts +0 -7
  471. package/dist/index.js +0 -1677
  472. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  473. package/dist/webui/server.d.ts +0 -5
  474. package/dist/webui/server.js +0 -642
  475. package/generated/mcp/manifest.json +0 -23
  476. package/generated/mcp/mcp-servers.json +0 -25
  477. package/generated/mcp/mcporter.json +0 -34
  478. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  479. package/generated/mcp/runtime.json +0 -12
  480. package/scripts/README.md +0 -60
  481. package/scripts/build-release.sh +0 -36
  482. package/scripts/check-secrets.js +0 -132
  483. package/scripts/copy-runtime-assets.mjs +0 -26
  484. package/scripts/generate-mcp.mjs +0 -264
  485. package/scripts/github-release.sh +0 -77
  486. package/scripts/init-dirs.mjs +0 -13
  487. package/scripts/install-claude-code.sh +0 -85
  488. package/scripts/install-cursor.sh +0 -56
  489. package/scripts/install-hooks.sh +0 -73
  490. package/scripts/install-interactive.mjs +0 -357
  491. package/scripts/install-opencode.sh +0 -75
  492. package/scripts/install-plugin.mjs +0 -415
  493. package/scripts/install-windsurf.sh +0 -67
  494. package/scripts/remote-preflight.mjs +0 -62
  495. package/scripts/squish-fallback.mjs +0 -132
  496. package/scripts/test-interactive.mjs +0 -131
  497. package/scripts/verify-mcp.mjs +0 -214
  498. package/skills/squish-memory/scripts/install.mjs +0 -335
  499. package/skills/squish-memory/write_skill.js +0 -2
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Memory Migration Module
3
+ * Migrate memories between .squish directories/databases
4
+ */
5
+
6
+ import { randomUUID } from 'crypto';
7
+ import { existsSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { getDbClient } from '../lib/db-client.js';
10
+
11
+ export interface MigrateOptions {
12
+ dryRun?: boolean;
13
+ deleteSource?: boolean;
14
+ }
15
+
16
+ export interface MigrateResult {
17
+ memoriesCopied: number;
18
+ observationsCopied: number;
19
+ associationsCopied: number;
20
+ projectsMapped: number;
21
+ sourceDeleted?: boolean;
22
+ message: string;
23
+ }
24
+
25
+ /**
26
+ * Migrate memories from one .squish directory to another
27
+ */
28
+ export async function migrateMemories(
29
+ sourceDir: string,
30
+ targetDir: string,
31
+ options: MigrateOptions = {}
32
+ ): Promise<MigrateResult> {
33
+ const { dryRun = false, deleteSource = false } = options;
34
+
35
+ const sourceDbPath = join(sourceDir, 'squish.db');
36
+ const targetDbPath = join(targetDir, 'squish.db');
37
+
38
+ if (!existsSync(sourceDbPath)) {
39
+ throw new Error(`Source database not found: ${sourceDbPath}`);
40
+ }
41
+ if (!existsSync(targetDbPath)) {
42
+ throw new Error(`Target database not found: ${targetDbPath}`);
43
+ }
44
+
45
+ // Use bun:sqlite for direct source DB access
46
+ // @ts-ignore - bun:sqlite module not found in types but works at runtime
47
+ const SqliteDatabase = (await import('bun:sqlite')).default;
48
+ const sourceDb = new SqliteDatabase(sourceDbPath, { readonly: true });
49
+
50
+ // Get target DB through the app's existing mechanism
51
+ const { db: targetDb, schema } = await getDbClient();
52
+
53
+ // Get all projects from source
54
+ const sourceProjects = sourceDb.query('SELECT * FROM projects').all() as any[];
55
+
56
+ // Map old project IDs to new project IDs
57
+ const projectIdMap = new Map<string, string>();
58
+
59
+ for (const project of sourceProjects) {
60
+ // Check if project with same path exists in target
61
+ const existing = await targetDb.select()
62
+ .from(schema.projects)
63
+ .where((tbl: any, { eq }: any) => eq(tbl.path, project.path))
64
+ .limit(1);
65
+
66
+ if (existing.length > 0) {
67
+ projectIdMap.set(project.id, existing[0].id);
68
+ } else {
69
+ // Create new project in target
70
+ const newId = randomUUID();
71
+ await targetDb.insert(schema.projects).values({
72
+ id: newId,
73
+ path: project.path,
74
+ name: project.name || 'migrated',
75
+ createdAt: new Date(),
76
+ });
77
+ projectIdMap.set(project.id, newId);
78
+ }
79
+ }
80
+
81
+ // Migrate memories
82
+ const sourceMemories = sourceDb.query('SELECT * FROM memories').all() as any[];
83
+ let memoriesCopied = 0;
84
+
85
+ for (const mem of sourceMemories) {
86
+ const oldProjectId = mem.project_id;
87
+ const newProjectId = projectIdMap.get(oldProjectId);
88
+
89
+ if (!newProjectId) {
90
+ console.warn(`Skipping memory ${mem.id}: no project mapping found`);
91
+ continue;
92
+ }
93
+
94
+ if (!dryRun) {
95
+ // Add 'imported' tag to track migrated memories
96
+ const existingTags = mem.tags ? JSON.parse(mem.tags) : [];
97
+ const newTags = [...existingTags, 'imported'];
98
+
99
+ await targetDb.insert(schema.memories).values({
100
+ id: randomUUID(),
101
+ projectId: newProjectId,
102
+ type: mem.type,
103
+ content: mem.content,
104
+ summary: mem.summary,
105
+ source: mem.source || 'migrated',
106
+ confidence: mem.confidence ?? 50,
107
+ confidenceLevel: mem.confidence_level || 'speculative',
108
+ tags: newTags,
109
+ metadata: { ...mem.metadata, migratedAt: new Date().toISOString(), originalId: mem.id },
110
+ isActive: mem.is_active ?? 1,
111
+ createdAt: mem.created_at ? new Date(mem.created_at * 1000) : new Date(),
112
+ updatedAt: new Date(),
113
+ });
114
+ }
115
+ memoriesCopied++;
116
+ }
117
+
118
+ // Migrate learnings (renamed from observations)
119
+ const sourceLearnings = sourceDb.query('SELECT * FROM learnings').all() as any[];
120
+ let learningsCopied = 0;
121
+
122
+ for (const learn of sourceLearnings) {
123
+ const oldProjectId = learn.project_id;
124
+ const newProjectId = projectIdMap.get(oldProjectId);
125
+
126
+ if (!newProjectId) continue;
127
+
128
+ if (!dryRun) {
129
+ // Add is_imported flag to track migrated learnings
130
+ await targetDb.insert(schema.learnings).values({
131
+ id: randomUUID(),
132
+ projectId: newProjectId,
133
+ type: learn.type,
134
+ action: learn.action,
135
+ summary: learn.summary,
136
+ target: learn.target,
137
+ details: learn.details,
138
+ isImported: true,
139
+ createdAt: new Date(),
140
+ });
141
+ }
142
+ learningsCopied++;
143
+ }
144
+
145
+ // Migrate memory associations (simplified - skip for now)
146
+ const sourceAssoc = sourceDb.query('SELECT * FROM memory_associations').all() as any[];
147
+ let associationsCopied = 0;
148
+
149
+ if (!dryRun && sourceAssoc.length > 0) {
150
+ console.warn(`Note: ${sourceAssoc.length} associations not migrated (requires ID mapping)`);
151
+ }
152
+
153
+ // Close source DB
154
+ sourceDb.close();
155
+
156
+ // Delete source if requested
157
+ let sourceDeleted = false;
158
+ if (!dryRun && deleteSource && memoriesCopied > 0) {
159
+ // Implementation would delete the file
160
+ console.warn('Source deletion not implemented - requires manual removal');
161
+ }
162
+
163
+ return {
164
+ memoriesCopied,
165
+ observationsCopied: learningsCopied,
166
+ associationsCopied,
167
+ projectsMapped: projectIdMap.size,
168
+ sourceDeleted,
169
+ message: dryRun
170
+ ? 'Dry run complete - no changes made'
171
+ : `Successfully migrated ${memoriesCopied} memories, ${learningsCopied} learnings`
172
+ };
173
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Memory normalization utilities
3
+ * Shared between memories.ts and loader.ts to avoid circular dependencies
4
+ */
5
+
6
+ import { deserializeTags, deserializeMetadata } from './serialization.js';
7
+ import { normalizeTimestamp } from '../lib/utils.js';
8
+ import type { MemoryRecord } from '../lib/types.js';
9
+
10
+ export function normalizeMemory(row: any): MemoryRecord {
11
+ const tags = deserializeTags(row.tags ?? null);
12
+ const metadata = deserializeMetadata(row.metadata ?? null);
13
+
14
+ const createdAtStr = normalizeTimestamp(row.createdAt ?? row.created_at);
15
+
16
+ return {
17
+ id: row.id,
18
+ projectId: row.projectId ?? row.project_id ?? null,
19
+ type: row.type,
20
+ content: row.content,
21
+ summary: row.summary ?? null,
22
+ tags,
23
+ metadata,
24
+ createdAt: createdAtStr,
25
+ validFrom: row.validFrom ?? row.valid_from ?? null,
26
+ validTo: row.validTo ?? row.valid_to ?? null,
27
+ recordedAt: row.recordedAt ?? row.recorded_at ?? null,
28
+ confidenceLevel: row.confidenceLevel ?? row.confidence_level ?? null,
29
+ };
30
+ }
@@ -0,0 +1,211 @@
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
+
14
+ import { eq, and, or, sql, desc } from 'drizzle-orm';
15
+ import { getDb } from '../../db/index.js';
16
+ import { getSchema } from '../../db/schema.js';
17
+ import { logger } from '../logger.js';
18
+
19
+ export interface PathStrengthResult {
20
+ strengthened: number;
21
+ weakened: number;
22
+ pruned: number;
23
+ }
24
+
25
+ /**
26
+ * Strengthen the association path between memories that were
27
+ * retrieved together and found useful.
28
+ */
29
+ export async function strengthenPath(
30
+ memoryIds: string[],
31
+ boostAmount: number = 2
32
+ ): Promise<number> {
33
+ if (memoryIds.length < 2) return 0;
34
+
35
+ const db = await getDb();
36
+ const schema = await getSchema();
37
+ let strengthened = 0;
38
+
39
+ // Generate all pairs
40
+ for (let i = 0; i < memoryIds.length; i++) {
41
+ for (let j = i + 1; j < memoryIds.length; j++) {
42
+ try {
43
+ // Check if association exists
44
+ const existing = await (db as any)
45
+ .select()
46
+ .from(schema.memoryAssociations)
47
+ .where(
48
+ or(
49
+ and(
50
+ eq(schema.memoryAssociations.fromMemoryId, memoryIds[i]),
51
+ eq(schema.memoryAssociations.toMemoryId, memoryIds[j])
52
+ ),
53
+ and(
54
+ eq(schema.memoryAssociations.fromMemoryId, memoryIds[j]),
55
+ eq(schema.memoryAssociations.toMemoryId, memoryIds[i])
56
+ )
57
+ )
58
+ )
59
+ .limit(1);
60
+
61
+ if (existing.length > 0) {
62
+ // Strengthen existing association
63
+ await (db as any)
64
+ .update(schema.memoryAssociations)
65
+ .set({
66
+ weight: sql`${schema.memoryAssociations.weight} + ${boostAmount}`,
67
+ coactivationCount: sql`${schema.memoryAssociations.coactivationCount} + 1`,
68
+ lastCoactivatedAt: new Date(),
69
+ })
70
+ .where(eq(schema.memoryAssociations.id, existing[0].id));
71
+ } else {
72
+ // Create new association
73
+ await (db as any).insert(schema.memoryAssociations).values({
74
+ fromMemoryId: memoryIds[i],
75
+ toMemoryId: memoryIds[j],
76
+ associationType: 'co_occurred',
77
+ weight: boostAmount,
78
+ coactivationCount: 1,
79
+ lastCoactivatedAt: new Date(),
80
+ });
81
+ }
82
+
83
+ strengthened++;
84
+ } catch (error) {
85
+ logger.debug('Error strengthening path', {
86
+ from: memoryIds[i],
87
+ to: memoryIds[j],
88
+ error: error as Error,
89
+ });
90
+ }
91
+ }
92
+ }
93
+
94
+ return strengthened;
95
+ }
96
+
97
+ /**
98
+ * Weaken association paths that led to irrelevant results.
99
+ */
100
+ export async function weakenPath(
101
+ memoryIds: string[],
102
+ decayAmount: number = 0.5
103
+ ): Promise<number> {
104
+ if (memoryIds.length < 2) return 0;
105
+
106
+ const db = await getDb();
107
+ const schema = await getSchema();
108
+ let weakened = 0;
109
+
110
+ for (let i = 0; i < memoryIds.length; i++) {
111
+ for (let j = i + 1; j < memoryIds.length; j++) {
112
+ try {
113
+ const existing = await (db as any)
114
+ .select()
115
+ .from(schema.memoryAssociations)
116
+ .where(
117
+ or(
118
+ and(
119
+ eq(schema.memoryAssociations.fromMemoryId, memoryIds[i]),
120
+ eq(schema.memoryAssociations.toMemoryId, memoryIds[j])
121
+ ),
122
+ and(
123
+ eq(schema.memoryAssociations.fromMemoryId, memoryIds[j]),
124
+ eq(schema.memoryAssociations.toMemoryId, memoryIds[i])
125
+ )
126
+ )
127
+ )
128
+ .limit(1);
129
+
130
+ if (existing.length > 0) {
131
+ // Weaken but don't remove (minimum weight of 1)
132
+ await (db as any)
133
+ .update(schema.memoryAssociations)
134
+ .set({
135
+ weight: sql`GREATEST(${schema.memoryAssociations.weight} - ${decayAmount}, 1)`,
136
+ })
137
+ .where(eq(schema.memoryAssociations.id, existing[0].id));
138
+ weakened++;
139
+ }
140
+ } catch (error) {
141
+ logger.debug('Error weakening path', {
142
+ from: memoryIds[i],
143
+ to: memoryIds[j],
144
+ error: error as Error,
145
+ });
146
+ }
147
+ }
148
+ }
149
+
150
+ return weakened;
151
+ }
152
+
153
+ /**
154
+ * Prune associations that have decayed below a threshold.
155
+ */
156
+ export async function pruneWeakAssociations(
157
+ minWeight: number = 2,
158
+ maxAge: number = 90 // days
159
+ ): Promise<number> {
160
+ const db = await getDb();
161
+ const schema = await getSchema();
162
+
163
+ const cutoffDate = new Date();
164
+ cutoffDate.setDate(cutoffDate.getDate() - maxAge);
165
+
166
+ try {
167
+ // Delete associations that are weak AND old
168
+ const result = await (db as any)
169
+ .delete(schema.memoryAssociations)
170
+ .where(
171
+ and(
172
+ sql`${schema.memoryAssociations.weight} < ${minWeight}`,
173
+ sql`${schema.memoryAssociations.lastCoactivatedAt} < ${cutoffDate}`
174
+ )
175
+ );
176
+
177
+ const pruned = result?.rowCount ?? 0;
178
+ logger.info('Pruned weak associations', { pruned, minWeight, maxAge });
179
+ return pruned;
180
+ } catch (error) {
181
+ logger.error('Error pruning weak associations', { error: error as Error });
182
+ return 0;
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Run a full optimize cycle: strengthen useful paths, weaken unused ones,
188
+ * prune dead associations, and derive implicit facts.
189
+ */
190
+ export async function runPruneCycle(
191
+ options?: {
192
+ minWeight?: number;
193
+ maxAge?: number;
194
+ }
195
+ ): Promise<PathStrengthResult> {
196
+ const { minWeight = 2, maxAge = 90 } = options || {};
197
+
198
+ logger.info('Starting prune cycle', { minWeight, maxAge });
199
+
200
+ // Step 1: Prune weak associations
201
+ const pruned = await pruneWeakAssociations(minWeight, maxAge);
202
+
203
+ logger.info('Prune cycle completed', { pruned });
204
+
205
+ return {
206
+ strengthened: 0, // Strengthening happens via retrieval feedback
207
+ weakened: 0, // Weakening happens via retrieval feedback
208
+ pruned,
209
+ };
210
+ }
211
+