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,135 @@
1
+ /**
2
+ * Vector Operations Utilities
3
+ *
4
+ * Provides mathematical operations for vector computations, primarily focused on
5
+ * cosine similarity calculations for embedding comparisons.
6
+ *
7
+ * All functions handle edge cases gracefully and are optimized for performance.
8
+ */
9
+
10
+ /**
11
+ * Calculates the cosine similarity between two vectors.
12
+ *
13
+ * Cosine similarity measures the cosine of the angle between two vectors,
14
+ * providing a normalized measure of similarity that ranges from -1 (opposite)
15
+ * to 1 (identical), with 0 indicating orthogonality (no similarity).
16
+ *
17
+ * The implementation uses the standard formula:
18
+ * cos(θ) = (A · B) / (||A|| * ||B||)
19
+ *
20
+ * Edge case handling:
21
+ * - Returns 0 if either vector is null/undefined
22
+ * - Returns 0 if vectors have different lengths
23
+ * - Returns 0 if either vector has zero magnitude (norm = 0)
24
+ *
25
+ * @param a - First vector as array of numbers
26
+ * @param b - Second vector as array of numbers
27
+ * @returns Cosine similarity value in range [-1, 1], or 0 for invalid inputs
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const vec1 = [1, 2, 3];
32
+ * const vec2 = [4, 5, 6];
33
+ * const similarity = cosineSimilarity(vec1, vec2); // ~0.974
34
+ * ```
35
+ *
36
+ * @performance
37
+ * - Time complexity: O(n) where n is vector length
38
+ * - Space complexity: O(1) - uses only accumulator variables
39
+ * - Optimized with single-pass computation of dot product and norms
40
+ */
41
+ export function cosineSimilarity(a: number[] | null | undefined, b: number[] | null | undefined): number {
42
+ // Guard against null/undefined inputs
43
+ if (!a || !b) return 0;
44
+
45
+ // Vectors must have same dimensions
46
+ if (a.length !== b.length) return 0;
47
+
48
+ let dotProduct = 0;
49
+ let normA = 0;
50
+ let normB = 0;
51
+
52
+ // Single pass to compute dot product and norms
53
+ for (let i = 0; i < a.length; i++) {
54
+ dotProduct += a[i] * b[i];
55
+ normA += a[i] * a[i];
56
+ normB += b[i] * b[i];
57
+ }
58
+
59
+ // Handle zero vectors (avoid division by zero)
60
+ if (normA === 0 || normB === 0) return 0;
61
+
62
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
63
+ }
64
+
65
+ /**
66
+ * Calculates the Euclidean distance between two vectors.
67
+ *
68
+ * @param a - First vector
69
+ * @param b - Second vector
70
+ * @returns Euclidean distance, or Infinity if vectors have different lengths
71
+ */
72
+ export function euclideanDistance(a: number[] | null | undefined, b: number[] | null | undefined): number {
73
+ if (!a || !b) return Infinity;
74
+ if (a.length !== b.length) return Infinity;
75
+
76
+ let sum = 0;
77
+ for (let i = 0; i < a.length; i++) {
78
+ const diff = a[i] - b[i];
79
+ sum += diff * diff;
80
+ }
81
+ return Math.sqrt(sum);
82
+ }
83
+
84
+ /**
85
+ * Normalizes a vector to unit length (magnitude = 1).
86
+ *
87
+ * @param vec - Input vector
88
+ * @returns Normalized vector, or null if input is null or zero vector
89
+ */
90
+ export function normalizeVector(vec: number[] | null | undefined): number[] | null {
91
+ if (!vec) return null;
92
+
93
+ let norm = 0;
94
+ for (let i = 0; i < vec.length; i++) {
95
+ norm += vec[i] * vec[i];
96
+ }
97
+
98
+ if (norm === 0) return null;
99
+
100
+ const magnitude = Math.sqrt(norm);
101
+ return vec.map(val => val / magnitude);
102
+ }
103
+
104
+ /**
105
+ * Computes the dot product of two vectors.
106
+ *
107
+ * @param a - First vector
108
+ * @param b - Second vector
109
+ * @returns Dot product, or 0 if vectors are invalid or different lengths
110
+ */
111
+ export function dotProduct(a: number[] | null | undefined, b: number[] | null | undefined): number {
112
+ if (!a || !b || a.length !== b.length) return 0;
113
+
114
+ let result = 0;
115
+ for (let i = 0; i < a.length; i++) {
116
+ result += a[i] * b[i];
117
+ }
118
+ return result;
119
+ }
120
+
121
+ /**
122
+ * Calculates the magnitude (L2 norm) of a vector.
123
+ *
124
+ * @param vec - Input vector
125
+ * @returns Magnitude of the vector, or 0 if input is null
126
+ */
127
+ export function magnitude(vec: number[] | null | undefined): number {
128
+ if (!vec) return 0;
129
+
130
+ let sum = 0;
131
+ for (let i = 0; i < vec.length; i++) {
132
+ sum += vec[i] * vec[i];
133
+ }
134
+ return Math.sqrt(sum);
135
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Shared Version Management Utilities
3
+ * Common patterns for versioning and updating records
4
+ */
5
+
6
+ import { eq } from 'drizzle-orm';
7
+ import { randomUUID } from 'crypto';
8
+ import { getDb } from '../../db/index.js';
9
+ import { getSchema } from '../../db/schema.js';
10
+ import { logger } from '../logger.js';
11
+
12
+ /**
13
+ * Create a new version of a fact by expiring the old one
14
+ */
15
+ export async function createNewFactVersion(
16
+ oldFactId: string,
17
+ newContent: string,
18
+ additionalFields: Record<string, any> = {},
19
+ reason?: string
20
+ ): Promise<string> {
21
+ try {
22
+ const db = await getDb();
23
+ const schema = await getSchema();
24
+
25
+ // Get the old fact
26
+ const oldFacts = await (db as any)
27
+ .select()
28
+ .from(schema.memories)
29
+ .where(eq(schema.memories.id, oldFactId))
30
+ .limit(1);
31
+
32
+ if (oldFacts.length === 0) {
33
+ throw new Error('Previous fact not found');
34
+ }
35
+
36
+ const oldFact = oldFacts[0];
37
+ const now = new Date();
38
+ const newFactId = randomUUID();
39
+
40
+ // Expire the old fact
41
+ await (db as any)
42
+ .update(schema.memories)
43
+ .set({ validTo: now, supersededBy: newFactId })
44
+ .where(eq(schema.memories.id, oldFactId));
45
+
46
+ // Create new version
47
+ const newFact: any = {
48
+ id: newFactId,
49
+ type: 'fact',
50
+ sector: 'semantic',
51
+ content: newContent,
52
+ confidence: oldFact.confidence,
53
+ validFrom: now,
54
+ validTo: null,
55
+ version: (oldFact.version || 1) + 1,
56
+ tags: oldFact.tags,
57
+ projectId: oldFact.projectId,
58
+ createdAt: now,
59
+ updatedAt: now,
60
+ ...additionalFields,
61
+ };
62
+
63
+ if (reason) {
64
+ newFact.metadata = { supersedes: oldFactId, reason };
65
+ }
66
+
67
+ await (db as any).insert(schema.memories).values(newFact);
68
+
69
+ return newFactId;
70
+ } catch (error) {
71
+ logger.error('Error creating new fact version', error);
72
+ throw error;
73
+ }
74
+ }
package/core/worker.ts ADDED
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Background Worker
3
+ * Handles lifecycle maintenance, summarization, and other async tasks
4
+ */
5
+
6
+ import { config } from '../config.js';
7
+ import { runLifecycleMaintenance } from './lifecycle.js';
8
+ import { pruneWeakAssociations, getAssociationStats } from './associations.js';
9
+ import { pruneOldSummaries, getSummarizationStats } from './summarization.js';
10
+ import { runFullConsolidationJob, getDeduplicationStats } from './consolidation.js';
11
+ import { logger } from './logger.js';
12
+
13
+ interface WorkerConfig {
14
+ lifecycleInterval: number;
15
+ pruningInterval: number;
16
+ summarizationCheckInterval: number;
17
+ consolidationInterval: number;
18
+ dedupInterval: number;
19
+ associationPruningThreshold: number;
20
+ summaryPruningAge: number;
21
+ }
22
+
23
+ const DEFAULT_WORKER_CONFIG: WorkerConfig = {
24
+ lifecycleInterval: config.lifecycleInterval || 3600000,
25
+ pruningInterval: 7 * 24 * 60 * 60 * 1000,
26
+ summarizationCheckInterval: 5 * 60 * 1000,
27
+ consolidationInterval: 24 * 60 * 60 * 1000, // Daily
28
+ dedupInterval: 12 * 60 * 60 * 1000, // Twice daily
29
+ associationPruningThreshold: 5,
30
+ summaryPruningAge: 30,
31
+ };
32
+
33
+ class SquishWorker {
34
+ private lifecycleTimer?: NodeJS.Timeout;
35
+ private pruningTimer?: NodeJS.Timeout;
36
+ private summarizationTimer?: NodeJS.Timeout;
37
+ private consolidationTimer?: NodeJS.Timeout;
38
+ private dedupTimer?: NodeJS.Timeout;
39
+ private config: WorkerConfig;
40
+ private isRunning: boolean = false;
41
+ private stats = {
42
+ lifecycleRuns: 0,
43
+ pruningRuns: 0,
44
+ summarizationRuns: 0,
45
+ consolidationRuns: 0,
46
+ dedupRuns: 0,
47
+ lastLifecycle: null as any,
48
+ lastAssociation: null as any,
49
+ lastSummarization: null as any,
50
+ lastConsolidation: null as any,
51
+ lastDedup: null as any,
52
+ };
53
+
54
+ constructor(customConfig: Partial<WorkerConfig> = {}) {
55
+ this.config = { ...DEFAULT_WORKER_CONFIG, ...customConfig };
56
+ }
57
+
58
+ async start(): Promise<void> {
59
+ if (this.isRunning) {
60
+ logger.warn('Worker already running');
61
+ return;
62
+ }
63
+
64
+ this.isRunning = true;
65
+ logger.info('Starting background worker');
66
+
67
+ if (config.lifecycleEnabled) {
68
+ this.scheduleLifecycleMaintenance();
69
+ }
70
+
71
+ this.schedulePruning();
72
+
73
+ if (config.summarizationEnabled) {
74
+ this.scheduleSummarizationCheck();
75
+ }
76
+
77
+ // Schedule consolidation and dedup jobs
78
+ this.scheduleConsolidation();
79
+ this.scheduleDedup();
80
+
81
+ logger.info('Background worker started');
82
+ }
83
+
84
+ async stop(): Promise<void> {
85
+ if (!this.isRunning) {
86
+ return;
87
+ }
88
+
89
+ this.isRunning = false;
90
+
91
+ if (this.lifecycleTimer) clearInterval(this.lifecycleTimer);
92
+ if (this.pruningTimer) clearInterval(this.pruningTimer);
93
+ if (this.summarizationTimer) clearInterval(this.summarizationTimer);
94
+ if (this.consolidationTimer) clearInterval(this.consolidationTimer);
95
+ if (this.dedupTimer) clearInterval(this.dedupTimer);
96
+
97
+ logger.info('Background worker stopped');
98
+ }
99
+
100
+ private scheduleLifecycleMaintenance(): void {
101
+ this.runLifecycleMaintenance().catch((err) => {
102
+ logger.error('Initial lifecycle maintenance failed:', err);
103
+ });
104
+
105
+ this.lifecycleTimer = setInterval(() => {
106
+ this.runLifecycleMaintenance().catch((err) => {
107
+ logger.error('Scheduled lifecycle maintenance failed:', err);
108
+ });
109
+ }, this.config.lifecycleInterval);
110
+ }
111
+
112
+ private async runLifecycleMaintenance(): Promise<void> {
113
+ try {
114
+ const stats = await runLifecycleMaintenance();
115
+ this.stats.lifecycleRuns++;
116
+ this.stats.lastLifecycle = {
117
+ timestamp: new Date().toISOString(),
118
+ ...stats,
119
+ };
120
+
121
+ logger.info('Lifecycle maintenance completed', {
122
+ decayed: stats.decayed,
123
+ evicted: stats.evicted,
124
+ promoted: stats.promoted,
125
+ });
126
+ } catch (error) {
127
+ logger.error('Lifecycle maintenance error:', error);
128
+ }
129
+ }
130
+
131
+ private schedulePruning(): void {
132
+ this.runPruning().catch((err) => {
133
+ logger.error('Initial pruning failed:', err);
134
+ });
135
+
136
+ this.pruningTimer = setInterval(() => {
137
+ this.runPruning().catch((err) => {
138
+ logger.error('Scheduled pruning failed:', err);
139
+ });
140
+ }, this.config.pruningInterval);
141
+ }
142
+
143
+ private async runPruning(): Promise<void> {
144
+ try {
145
+ this.stats.pruningRuns++;
146
+
147
+ const prunedAssociations = await pruneWeakAssociations(
148
+ this.config.associationPruningThreshold
149
+ );
150
+
151
+ const assocStats = await getAssociationStats();
152
+ this.stats.lastAssociation = {
153
+ timestamp: new Date().toISOString(),
154
+ pruned: prunedAssociations,
155
+ ...assocStats,
156
+ };
157
+
158
+ const prunedSummaries = await pruneOldSummaries(this.config.summaryPruningAge);
159
+
160
+ logger.info('Pruning completed', {
161
+ associationsPruned: prunedAssociations,
162
+ summariesPruned: prunedSummaries,
163
+ });
164
+ } catch (error) {
165
+ logger.error('Pruning error:', error);
166
+ }
167
+ }
168
+
169
+ private scheduleSummarizationCheck(): void {
170
+ this.summarizationTimer = setInterval(() => {
171
+ this.runSummarizationCheck().catch((err) => {
172
+ logger.error('Summarization check failed:', err);
173
+ });
174
+ }, this.config.summarizationCheckInterval);
175
+ }
176
+
177
+ private async runSummarizationCheck(): Promise<void> {
178
+ try {
179
+ this.stats.summarizationRuns++;
180
+ const stats = await getSummarizationStats();
181
+ this.stats.lastSummarization = {
182
+ timestamp: new Date().toISOString(),
183
+ ...stats,
184
+ };
185
+ } catch (error) {
186
+ logger.error('Summarization check error:', error);
187
+ }
188
+ }
189
+
190
+ private scheduleConsolidation(): void {
191
+ // Run immediately on start
192
+ this.runConsolidation().catch((err) => {
193
+ logger.error('Initial consolidation failed:', err);
194
+ });
195
+
196
+ this.consolidationTimer = setInterval(() => {
197
+ this.runConsolidation().catch((err) => {
198
+ logger.error('Scheduled consolidation failed:', err);
199
+ });
200
+ }, this.config.consolidationInterval);
201
+ }
202
+
203
+ private async runConsolidation(): Promise<void> {
204
+ try {
205
+ this.stats.consolidationRuns++;
206
+ const stats = await runFullConsolidationJob();
207
+ this.stats.lastConsolidation = {
208
+ timestamp: new Date().toISOString(),
209
+ ...stats,
210
+ };
211
+
212
+ logger.info('Consolidation completed', {
213
+ clustered: stats.clustered,
214
+ merged: stats.merged,
215
+ deduped: stats.deduped,
216
+ consolidated: stats.consolidated,
217
+ tokensRecovered: stats.tokensRecovered,
218
+ });
219
+ } catch (error) {
220
+ logger.error('Consolidation error:', error);
221
+ }
222
+ }
223
+
224
+ private scheduleDedup(): void {
225
+ // Run immediately on start
226
+ this.runDedup().catch((err) => {
227
+ logger.error('Initial dedup failed:', err);
228
+ });
229
+
230
+ this.dedupTimer = setInterval(() => {
231
+ this.runDedup().catch((err) => {
232
+ logger.error('Scheduled dedup failed:', err);
233
+ });
234
+ }, this.config.dedupInterval);
235
+ }
236
+
237
+ private async runDedup(): Promise<void> {
238
+ try {
239
+ this.stats.dedupRuns++;
240
+ const dedupStats = await getDeduplicationStats();
241
+ this.stats.lastDedup = {
242
+ timestamp: new Date().toISOString(),
243
+ ...dedupStats,
244
+ };
245
+ } catch (error) {
246
+ logger.error('Dedup check error:', error);
247
+ }
248
+ }
249
+
250
+ getStats() {
251
+ return {
252
+ isRunning: this.isRunning,
253
+ stats: this.stats,
254
+ config: this.config,
255
+ };
256
+ }
257
+
258
+ async forceLifecycleMaintenance(projectId?: string): Promise<any> {
259
+ return await runLifecycleMaintenance(projectId);
260
+ }
261
+
262
+ async forcePruning(): Promise<any> {
263
+ return await this.runPruning();
264
+ }
265
+
266
+ async forceConsolidation(projectId?: string): Promise<any> {
267
+ return await runFullConsolidationJob(projectId);
268
+ }
269
+
270
+ async forceDedup(projectId?: string): Promise<any> {
271
+ const { runDeduplicationJob } = await import('./consolidation.js');
272
+ return await runDeduplicationJob(projectId);
273
+ }
274
+ }
275
+
276
+ let globalWorker: SquishWorker | null = null;
277
+
278
+ export function getWorker(customConfig?: Partial<WorkerConfig>): SquishWorker {
279
+ if (!globalWorker) {
280
+ globalWorker = new SquishWorker(customConfig);
281
+ }
282
+ return globalWorker;
283
+ }
284
+
285
+ export async function startWorker(): Promise<void> {
286
+ const worker = getWorker();
287
+ await worker.start();
288
+ }
289
+
290
+ export async function stopWorker(): Promise<void> {
291
+ if (globalWorker) {
292
+ await globalWorker.stop();
293
+ }
294
+ }
295
+
296
+ export function getWorkerStats() {
297
+ if (!globalWorker) {
298
+ return null;
299
+ }
300
+ return globalWorker.getStats();
301
+ }
302
+
303
+ export async function forceLifecycleMaintenance(projectId?: string): Promise<any> {
304
+ const worker = getWorker();
305
+ return await worker.forceLifecycleMaintenance(projectId);
306
+ }
307
+
308
+ export async function forcePruning(): Promise<any> {
309
+ const worker = getWorker();
310
+ return await worker.forcePruning();
311
+ }
312
+
313
+ export async function forceConsolidation(projectId?: string): Promise<any> {
314
+ const worker = getWorker();
315
+ return await worker.forceConsolidation(projectId);
316
+ }
317
+
318
+ export async function forceDedup(projectId?: string): Promise<any> {
319
+ const worker = getWorker();
320
+ return await worker.forceDedup(projectId);
321
+ }
322
+
323
+ export type { WorkerConfig };
324
+ export { SquishWorker };