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
package/core/logger.ts ADDED
@@ -0,0 +1,59 @@
1
+ type LogLevel = 'info' | 'warn' | 'error' | 'debug';
2
+
3
+ interface LogContext {
4
+ [key: string]: any;
5
+ }
6
+
7
+ class Logger {
8
+ private prefix: string;
9
+ private debugEnabled: boolean;
10
+
11
+ constructor(prefix: string = 'squish') {
12
+ this.prefix = prefix;
13
+ this.debugEnabled = process.env.DEBUG === 'true' || process.env.DEBUG === '1';
14
+ }
15
+
16
+ private format(level: LogLevel, message: string, context?: LogContext): string {
17
+ const timestamp = new Date().toISOString();
18
+ const ctx = context ? ` ${JSON.stringify(context)}` : '';
19
+ return `[${this.prefix}:${level}] ${message}${ctx}`;
20
+ }
21
+
22
+ private isQuiet(): boolean {
23
+ return process.env.SQUISH_QUIET === 'true' || process.env.SQUISH_QUIET === '1';
24
+ }
25
+
26
+ info(message: string, context?: LogContext): void {
27
+ if (this.isQuiet()) {
28
+ return;
29
+ }
30
+ console.error(this.format('info', message, context));
31
+ }
32
+
33
+ warn(message: string, context?: LogContext): void {
34
+ if (this.isQuiet()) {
35
+ return;
36
+ }
37
+ console.error(this.format('warn', message, context));
38
+ }
39
+
40
+ error(message: string, error?: Error | any, context?: LogContext): void {
41
+ if (this.isQuiet()) {
42
+ return;
43
+ }
44
+ const errorMsg = error instanceof Error ? error.message : error;
45
+ const ctx = { ...context, error: errorMsg };
46
+ console.error(this.format('error', message, ctx));
47
+ if (error instanceof Error && error.stack) {
48
+ console.error(error.stack);
49
+ }
50
+ }
51
+
52
+ debug(message: string, context?: LogContext): void {
53
+ if (this.debugEnabled && !this.isQuiet()) {
54
+ console.error(this.format('debug', message, context));
55
+ }
56
+ }
57
+ }
58
+
59
+ export const logger = new Logger();
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Bridge Discovery
3
+ * Discovers indirect connections between memories through shared associations
4
+ * Uses bidirectional BFS with Dijkstra-style weight prioritization
5
+ * Finds "waypoint" memories that connect otherwise distant memory clusters
6
+ */
7
+
8
+ import { getDb } from '../../db/index.js';
9
+ import { getSchema } from '../../db/schema.js';
10
+ import { eq } from 'drizzle-orm';
11
+ import { logger } from '../../core/logger.js';
12
+
13
+ export interface BridgePath {
14
+ route: string[]; // Memory IDs in path
15
+ distance: number; // Number of hops
16
+ weight: number; // Sum of association weights
17
+ associationTypes: string[];
18
+ }
19
+
20
+ export interface BridgeMemory {
21
+ memoryId: string;
22
+ memory: any;
23
+ bridgeScore: number; // Betweenness centrality (0-100)
24
+ pathsThrough: number; // Number of shortest paths through this memory
25
+ examplePaths: BridgePath[];
26
+ connectionDensity: number; // How many pairs it connects
27
+ importance: 'critical' | 'major' | 'minor';
28
+ }
29
+
30
+ export interface BridgeOptions {
31
+ maxPathLength?: number; // Maximum hops to search (default 4)
32
+ topBridges?: number; // Number of bridge memories to return (default 10)
33
+ minPathWeight?: number; // Minimum weight to consider (default 1)
34
+ includeExamplePaths?: boolean; // Include detailed paths (default true)
35
+ }
36
+
37
+ /**
38
+ * Discover bridge memories connecting seed memory clusters
39
+ */
40
+ export async function discoverBridges(
41
+ seedMemoryIds: string[],
42
+ projectId: string,
43
+ options: BridgeOptions = {}
44
+ ): Promise<BridgeMemory[]> {
45
+ if (seedMemoryIds.length < 2) {
46
+ return [];
47
+ }
48
+
49
+ const maxPathLength = options.maxPathLength ?? 4;
50
+ const topBridges = options.topBridges ?? 10;
51
+ const minPathWeight = options.minPathWeight ?? 1;
52
+
53
+ try {
54
+ const db = await getDb();
55
+ const schema = await getSchema();
56
+
57
+ // Fetch all associations for this project
58
+ const allMemories = await (db as any)
59
+ .select()
60
+ .from(schema.memories)
61
+ .where(eq(schema.memories.projectId, projectId));
62
+
63
+ const memoriesById = new Map(allMemories.map((m: any) => [m.id, m]));
64
+
65
+ // Get all associations
66
+ const associations = await (db as any).select().from(schema.memoryAssociations);
67
+
68
+ // Build adjacency list graph
69
+ const graph = new Map<string, Array<{ toId: string; weight: number; type: string }>>();
70
+
71
+ for (const assoc of associations) {
72
+ if (!graph.has(assoc.fromMemoryId)) {
73
+ graph.set(assoc.fromMemoryId, []);
74
+ }
75
+ const edges = graph.get(assoc.fromMemoryId);
76
+ if (edges) {
77
+ edges.push({
78
+ toId: assoc.toMemoryId,
79
+ weight: assoc.weight || 1,
80
+ type: assoc.associationType,
81
+ });
82
+ }
83
+ }
84
+
85
+ // Find all paths between seed memories
86
+ const pathMetrics = new Map<string, { pathsThrough: number; weight: number }>();
87
+ const allPaths: BridgePath[] = [];
88
+
89
+ for (let i = 0; i < seedMemoryIds.length; i++) {
90
+ for (let j = i + 1; j < seedMemoryIds.length; j++) {
91
+ const start = seedMemoryIds[i];
92
+ const end = seedMemoryIds[j];
93
+
94
+ const paths = findPaths(graph, start, end, maxPathLength, minPathWeight);
95
+
96
+ for (const path of paths) {
97
+ // Record intermediate nodes (not start or end)
98
+ for (let k = 1; k < path.route.length - 1; k++) {
99
+ const nodeId = path.route[k];
100
+ if (!pathMetrics.has(nodeId)) {
101
+ pathMetrics.set(nodeId, { pathsThrough: 0, weight: 0 });
102
+ }
103
+ const metrics = pathMetrics.get(nodeId)!;
104
+ metrics.pathsThrough++;
105
+ metrics.weight += path.weight;
106
+ }
107
+
108
+ if (options.includeExamplePaths !== false) {
109
+ allPaths.push(path);
110
+ }
111
+ }
112
+ }
113
+ }
114
+
115
+ // Calculate bridge scores and convert to BridgeMemory objects
116
+ const bridges: BridgeMemory[] = [];
117
+
118
+ for (const [memoryId, metrics] of pathMetrics.entries()) {
119
+ const memory = memoriesById.get(memoryId);
120
+ if (!memory) continue;
121
+
122
+ // Calculate betweenness centrality normalized to 0-100
123
+ const bridgeScore = Math.min(
124
+ 100,
125
+ (metrics.pathsThrough / (seedMemoryIds.length * (seedMemoryIds.length - 1))) * 1000
126
+ );
127
+
128
+ // Calculate connection density: how many unique memories it connects
129
+ const connectedMemories = new Set<string>();
130
+ const neighbors = graph.get(memoryId) || [];
131
+ for (const neighbor of neighbors) {
132
+ connectedMemories.add(neighbor.toId);
133
+ }
134
+ // Include reverse connections
135
+ for (const [fromId, edges] of graph.entries()) {
136
+ for (const edge of edges) {
137
+ if (edge.toId === memoryId && fromId !== memoryId) {
138
+ connectedMemories.add(fromId);
139
+ }
140
+ }
141
+ }
142
+
143
+ const connectionDensity = connectedMemories.size / Math.max(1, allMemories.length);
144
+
145
+ // Determine importance level
146
+ let importance: 'critical' | 'major' | 'minor';
147
+ if (bridgeScore >= 50) {
148
+ importance = 'critical';
149
+ } else if (bridgeScore >= 20) {
150
+ importance = 'major';
151
+ } else {
152
+ importance = 'minor';
153
+ }
154
+
155
+ // Get example paths through this bridge
156
+ const examplePaths = allPaths
157
+ .filter(
158
+ (p) =>
159
+ p.route.includes(memoryId) &&
160
+ p.route.length > 1
161
+ )
162
+ .slice(0, 3);
163
+
164
+ bridges.push({
165
+ memoryId,
166
+ memory,
167
+ bridgeScore,
168
+ pathsThrough: metrics.pathsThrough,
169
+ examplePaths,
170
+ connectionDensity: Math.round(connectionDensity * 1000) / 1000,
171
+ importance,
172
+ });
173
+ }
174
+
175
+ // Sort by bridge score descending
176
+ bridges.sort((a, b) => b.bridgeScore - a.bridgeScore);
177
+
178
+ logger.debug('Bridges discovered', {
179
+ seedMemoryCount: seedMemoryIds.length,
180
+ bridgeCount: bridges.length,
181
+ topBridges: bridges.slice(0, topBridges).map((b) => ({
182
+ id: b.memoryId,
183
+ score: b.bridgeScore,
184
+ importance: b.importance,
185
+ })),
186
+ });
187
+
188
+ return bridges.slice(0, topBridges);
189
+ } catch (error) {
190
+ logger.error('Error discovering bridges', error);
191
+ return [];
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Find all shortest paths between two memories up to maxLength
197
+ * Uses BFS with weight-based distance metric
198
+ */
199
+ function findPaths(
200
+ graph: Map<string, Array<{ toId: string; weight: number; type: string }>>,
201
+ start: string,
202
+ end: string,
203
+ maxLength: number,
204
+ minWeight: number
205
+ ): BridgePath[] {
206
+ const paths: BridgePath[] = [];
207
+ const queue: {
208
+ current: string;
209
+ route: string[];
210
+ weight: number;
211
+ types: string[];
212
+ }[] = [{ current: start, route: [start], weight: 0, types: [] }];
213
+
214
+ const visited = new Set<string>();
215
+
216
+ while (queue.length > 0) {
217
+ const { current, route, weight, types } = queue.shift()!;
218
+
219
+ // Stop if we've exceeded max path length
220
+ if (route.length > maxLength) continue;
221
+
222
+ // Skip if already visited in shorter path
223
+ const routeKey = route.join('->');
224
+ if (visited.has(routeKey)) continue;
225
+ visited.add(routeKey);
226
+
227
+ // Check if we reached the destination
228
+ if (current === end && route.length > 1) {
229
+ paths.push({
230
+ route,
231
+ distance: route.length - 1,
232
+ weight,
233
+ associationTypes: types,
234
+ });
235
+ continue;
236
+ }
237
+
238
+ // Explore neighbors
239
+ const neighbors = graph.get(current) || [];
240
+
241
+ for (const neighbor of neighbors) {
242
+ // Skip if creating a cycle (except for final destination)
243
+ if (neighbor.toId !== end && route.includes(neighbor.toId)) continue;
244
+
245
+ // Skip if weight below threshold
246
+ if (neighbor.weight < minWeight) continue;
247
+
248
+ queue.push({
249
+ current: neighbor.toId,
250
+ route: [...route, neighbor.toId],
251
+ weight: weight + neighbor.weight,
252
+ types: [...types, neighbor.type],
253
+ });
254
+ }
255
+ }
256
+
257
+ // Sort by weight (distance metric) and keep top paths
258
+ paths.sort((a, b) => b.weight - a.weight);
259
+ return paths.slice(0, 5); // Return top 5 paths
260
+ }
261
+
262
+ /**
263
+ * Get bridge memories for a single memory (find what it connects to)
264
+ */
265
+ export async function getMemoryBridges(
266
+ memoryId: string,
267
+ projectId: string,
268
+ topK: number = 5
269
+ ): Promise<BridgeMemory[]> {
270
+ try {
271
+ const db = await getDb();
272
+ const schema = await getSchema();
273
+
274
+ // Find memories connected to this one
275
+ const associations = await (db as any)
276
+ .select()
277
+ .from(schema.memoryAssociations)
278
+ .where(eq(schema.memoryAssociations.fromMemoryId, memoryId));
279
+
280
+ if (associations.length === 0) {
281
+ return [];
282
+ }
283
+
284
+ // Get connected memory IDs
285
+ const connectedIds = new Set<string>();
286
+ for (const assoc of associations) {
287
+ connectedIds.add(assoc.toMemoryId);
288
+ }
289
+
290
+ if (connectedIds.size < 2) {
291
+ return [];
292
+ }
293
+
294
+ // Discover bridges between connected memories
295
+ const seedIds = Array.from(connectedIds);
296
+ const bridges = await discoverBridges(seedIds, projectId, { topBridges: topK });
297
+
298
+ return bridges;
299
+ } catch (error) {
300
+ logger.error('Error getting memory bridges', error);
301
+ return [];
302
+ }
303
+ }
304
+
305
+ /**
306
+ * Analyze overall network connectivity using bridge metrics
307
+ */
308
+ export async function analyzeNetworkConnectivity(
309
+ projectId: string,
310
+ topBridges: number = 20
311
+ ): Promise<{
312
+ totalMemories: number;
313
+ totalConnections: number;
314
+ averageDegree: number;
315
+ bridgeMemories: BridgeMemory[];
316
+ networkDensity: number;
317
+ clustering: {
318
+ tightClusters: number;
319
+ looseClusters: number;
320
+ };
321
+ }> {
322
+ try {
323
+ const db = await getDb();
324
+ const schema = await getSchema();
325
+
326
+ // Get all memories
327
+ const allMemories = await (db as any)
328
+ .select()
329
+ .from(schema.memories)
330
+ .where(eq(schema.memories.projectId, projectId));
331
+
332
+ if (allMemories.length < 2) {
333
+ return {
334
+ totalMemories: allMemories.length,
335
+ totalConnections: 0,
336
+ averageDegree: 0,
337
+ bridgeMemories: [],
338
+ networkDensity: 0,
339
+ clustering: { tightClusters: 0, looseClusters: 0 },
340
+ };
341
+ }
342
+
343
+ // Get all associations
344
+ const associations = await (db as any).select().from(schema.memoryAssociations);
345
+
346
+ // Calculate graph metrics
347
+ const degree = new Map<string, number>();
348
+ for (const memory of allMemories) {
349
+ degree.set(memory.id, 0);
350
+ }
351
+
352
+ for (const assoc of associations) {
353
+ degree.set(assoc.fromMemoryId, (degree.get(assoc.fromMemoryId) || 0) + 1);
354
+ }
355
+
356
+ const avgDegree = Array.from(degree.values()).reduce((a, b) => a + b, 0) / allMemories.length;
357
+ const networkDensity = (associations.length * 2) / (allMemories.length * (allMemories.length - 1));
358
+
359
+ // Discover bridges for all memories
360
+ const seedIds = allMemories.slice(0, Math.min(10, allMemories.length)).map((m: any) => m.id);
361
+ const bridges = await discoverBridges(seedIds, projectId, { topBridges });
362
+
363
+ // Cluster analysis based on connectivity
364
+ let tightClusters = 0;
365
+ let looseClusters = 0;
366
+
367
+ for (const memory of allMemories) {
368
+ const connectionCount = degree.get(memory.id) || 0;
369
+ if (connectionCount > avgDegree * 1.5) {
370
+ tightClusters++;
371
+ } else if (connectionCount < avgDegree * 0.5) {
372
+ looseClusters++;
373
+ }
374
+ }
375
+
376
+ return {
377
+ totalMemories: allMemories.length,
378
+ totalConnections: associations.length,
379
+ averageDegree: Math.round(avgDegree * 100) / 100,
380
+ bridgeMemories: bridges,
381
+ networkDensity: Math.round(networkDensity * 10000) / 10000,
382
+ clustering: { tightClusters, looseClusters },
383
+ };
384
+ } catch (error) {
385
+ logger.error('Error analyzing network connectivity', error);
386
+ return {
387
+ totalMemories: 0,
388
+ totalConnections: 0,
389
+ averageDegree: 0,
390
+ bridgeMemories: [],
391
+ networkDensity: 0,
392
+ clustering: { tightClusters: 0, looseClusters: 0 },
393
+ };
394
+ }
395
+ }