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
@@ -3,9 +3,10 @@
3
3
  * Appends hot memories to Obsidian daily notes
4
4
  * Format: YYYY-MM-DD.md with memory blocks
5
5
  */
6
- import { existsSync, mkdirSync, appendFileSync } from 'fs';
6
+ import { existsSync, mkdirSync, appendFileSync, readFileSync, readdirSync } from 'fs';
7
7
  import { join } from 'path';
8
- import { logger } from './logger.js';
8
+ import { randomUUID } from 'crypto';
9
+ import { logger } from '../logger.js';
9
10
  /**
10
11
  * Append a memory to the daily note in Obsidian vault
11
12
  * Creates YYYY-MM-DD.md file if it doesn't exist
@@ -83,12 +84,73 @@ export function isObsidianConnected(vaultPath) {
83
84
  return existsSync(parentDir) || true; // Assume creatable if parent exists
84
85
  }
85
86
  /**
86
- * Read existing memories from Obsidian vault (for future import feature)
87
+ * Read existing memories from Obsidian vault (for import feature)
88
+ * Scans vault for .md files and extracts memory blocks
87
89
  */
88
90
  export async function readFromVault(vaultPath) {
89
- // Future: Read .md files and parse memory blocks
90
- // For MVP, this is placeholder
91
- logger.info(`[Obsidian] readFromVault called for: ${vaultPath}`);
92
- return [];
91
+ if (!existsSync(vaultPath)) {
92
+ logger.warn(`[Obsidian] Vault path does not exist: ${vaultPath}`);
93
+ return [];
94
+ }
95
+ const memories = [];
96
+ // Recursively find all .md files
97
+ const mdFiles = await findMarkdownFiles(vaultPath);
98
+ for (const filePath of mdFiles) {
99
+ try {
100
+ const content = readFileSync(filePath, 'utf-8');
101
+ const filename = filePath.split(/[/\\]/).pop() || '';
102
+ // Extract frontmatter if present
103
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
104
+ let tags = [];
105
+ if (frontmatterMatch) {
106
+ const tagMatch = frontmatterMatch[1].match(/tags:\s*\[([^\]]*)\]/);
107
+ if (tagMatch) {
108
+ tags = tagMatch[1].split(',').map((t) => t.trim()).filter(Boolean);
109
+ }
110
+ }
111
+ // Extract content after frontmatter
112
+ const body = frontmatterMatch ? content.slice(frontmatterMatch[0].length).trim() : content;
113
+ // Skip empty files or very short ones
114
+ if (body.length < 10)
115
+ continue;
116
+ memories.push({
117
+ id: randomUUID(),
118
+ content: body,
119
+ tags,
120
+ type: 'observation'
121
+ });
122
+ }
123
+ catch (error) {
124
+ logger.warn(`[Obsidian] Failed to read file ${filePath}: ${error}`);
125
+ }
126
+ }
127
+ logger.info(`[Obsidian] Found ${memories.length} memories in vault`);
128
+ return memories;
129
+ }
130
+ /**
131
+ * Recursively find all markdown files in a directory
132
+ */
133
+ async function findMarkdownFiles(dir) {
134
+ const files = [];
135
+ try {
136
+ const entries = readdirSync(dir, { withFileTypes: true });
137
+ for (const entry of entries) {
138
+ const fullPath = join(dir, entry.name);
139
+ if (entry.isDirectory()) {
140
+ // Skip hidden directories
141
+ if (!entry.name.startsWith('.')) {
142
+ const subFiles = await findMarkdownFiles(fullPath);
143
+ files.push(...subFiles);
144
+ }
145
+ }
146
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
147
+ files.push(fullPath);
148
+ }
149
+ }
150
+ }
151
+ catch (error) {
152
+ logger.warn(`[Obsidian] Failed to read directory ${dir}: ${error}`);
153
+ }
154
+ return files;
93
155
  }
94
156
  //# sourceMappingURL=obsidian-vault.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parse embedding from various storage formats.
3
+ * Converted from 4 locations: hybrid-search.ts, consolidation.ts, memories.ts, entity-deduplicator.ts
4
+ *
5
+ * @param embeddingData - Input in Float32Array, Buffer, Uint8Array, JSON string, or Array format
6
+ * @returns Array of numbers or null if parsing fails
7
+ */
8
+ export declare function parseEmbedding(embeddingData: unknown): number[] | null;
9
+ //# sourceMappingURL=parse-embedding.d.ts.map
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Parse embedding from various storage formats.
3
+ * Converted from 4 locations: hybrid-search.ts, consolidation.ts, memories.ts, entity-deduplicator.ts
4
+ *
5
+ * @param embeddingData - Input in Float32Array, Buffer, Uint8Array, JSON string, or Array format
6
+ * @returns Array of numbers or null if parsing fails
7
+ */
8
+ export function parseEmbedding(embeddingData) {
9
+ if (!embeddingData)
10
+ return null;
11
+ // Handle Array directly (most common case)
12
+ if (Array.isArray(embeddingData)) {
13
+ return embeddingData;
14
+ }
15
+ // Handle Float32Array directly
16
+ if (embeddingData instanceof Float32Array) {
17
+ return Array.from(embeddingData);
18
+ }
19
+ // Handle Uint8Array and Buffer - try JSON first, then binary Float32
20
+ if (embeddingData instanceof Uint8Array || Buffer.isBuffer(embeddingData)) {
21
+ // Try to parse as JSON string first
22
+ try {
23
+ const json = JSON.parse(embeddingData.toString());
24
+ if (Array.isArray(json)) {
25
+ return json;
26
+ }
27
+ }
28
+ catch {
29
+ // Not JSON, try binary Float32
30
+ }
31
+ // Try to parse as binary Float32Array
32
+ try {
33
+ const buffer = embeddingData.buffer;
34
+ const arrayBuffer = buffer instanceof ArrayBuffer
35
+ ? buffer
36
+ : buffer;
37
+ const floatArray = new Float32Array(arrayBuffer);
38
+ return Array.from(floatArray);
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ // Handle JSON string
45
+ if (typeof embeddingData === 'string') {
46
+ try {
47
+ const parsed = JSON.parse(embeddingData);
48
+ if (Array.isArray(parsed)) {
49
+ return parsed;
50
+ }
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ //# sourceMappingURL=parse-embedding.js.map
@@ -25,13 +25,7 @@ export declare const memoryIdSchema: z.ZodString;
25
25
  export declare const paginationSchema: z.ZodObject<{
26
26
  limit: z.ZodDefault<z.ZodNumber>;
27
27
  offset: z.ZodDefault<z.ZodNumber>;
28
- }, "strip", z.ZodTypeAny, {
29
- limit: number;
30
- offset: number;
31
- }, {
32
- limit?: number | undefined;
33
- offset?: number | undefined;
34
- }>;
28
+ }, z.core.$strip>;
35
29
  /**
36
30
  * Search query schema: non-empty string
37
31
  */
@@ -39,11 +33,24 @@ export declare const searchQuerySchema: z.ZodString;
39
33
  /**
40
34
  * Memory type schema
41
35
  */
42
- export declare const memoryTypeSchema: z.ZodEnum<["observation", "fact", "decision", "context", "preference", "note"]>;
36
+ export declare const memoryTypeSchema: z.ZodEnum<{
37
+ observation: "observation";
38
+ fact: "fact";
39
+ decision: "decision";
40
+ context: "context";
41
+ preference: "preference";
42
+ note: "note";
43
+ }>;
43
44
  /**
44
45
  * Association type schema
45
46
  */
46
- export declare const associationTypeSchema: z.ZodEnum<["relates_to", "supports", "contradicts", "supersedes", "duplicate"]>;
47
+ export declare const associationTypeSchema: z.ZodEnum<{
48
+ supersedes: "supersedes";
49
+ contradicts: "contradicts";
50
+ supports: "supports";
51
+ relates_to: "relates_to";
52
+ duplicate: "duplicate";
53
+ }>;
47
54
  /**
48
55
  * Weight schema: number between 0 and 1
49
56
  */
@@ -51,15 +58,30 @@ export declare const weightSchema: z.ZodNumber;
51
58
  /**
52
59
  * Learning type schema
53
60
  */
54
- export declare const learningTypeSchema: z.ZodEnum<["success", "failure", "fix", "observation"]>;
61
+ export declare const learningTypeSchema: z.ZodEnum<{
62
+ observation: "observation";
63
+ success: "success";
64
+ failure: "failure";
65
+ fix: "fix";
66
+ }>;
55
67
  /**
56
68
  * Observation type schema
57
69
  */
58
- export declare const observationTypeSchema: z.ZodEnum<["tool_use", "file_change", "error", "pattern", "insight"]>;
70
+ export declare const observationTypeSchema: z.ZodEnum<{
71
+ error: "error";
72
+ insight: "insight";
73
+ pattern: "pattern";
74
+ tool_use: "tool_use";
75
+ file_change: "file_change";
76
+ }>;
59
77
  /**
60
78
  * Confidence level schema
61
79
  */
62
- export declare const confidenceLevelSchema: z.ZodEnum<["certain", "speculative", "outdated"]>;
80
+ export declare const confidenceLevelSchema: z.ZodEnum<{
81
+ certain: "certain";
82
+ speculative: "speculative";
83
+ outdated: "outdated";
84
+ }>;
63
85
  /**
64
86
  * Search input schema (common for search operations)
65
87
  */
@@ -68,20 +90,15 @@ export declare const searchInputSchema: z.ZodObject<{
68
90
  limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
69
91
  offset: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
70
92
  project: z.ZodOptional<z.ZodString>;
71
- type: z.ZodOptional<z.ZodEnum<["observation", "fact", "decision", "context", "preference", "note"]>>;
72
- }, "strip", z.ZodTypeAny, {
73
- query: string;
74
- project?: string | undefined;
75
- type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
76
- limit?: number | undefined;
77
- offset?: number | undefined;
78
- }, {
79
- query: string;
80
- project?: string | undefined;
81
- type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
82
- limit?: number | undefined;
83
- offset?: number | undefined;
84
- }>;
93
+ type: z.ZodOptional<z.ZodEnum<{
94
+ observation: "observation";
95
+ fact: "fact";
96
+ decision: "decision";
97
+ context: "context";
98
+ preference: "preference";
99
+ note: "note";
100
+ }>>;
101
+ }, z.core.$strip>;
85
102
  /**
86
103
  * Memory recall schema
87
104
  */
@@ -89,41 +106,27 @@ export declare const recallInputSchema: z.ZodObject<{
89
106
  memoryId: z.ZodString;
90
107
  limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
91
108
  project: z.ZodOptional<z.ZodString>;
92
- }, "strip", z.ZodTypeAny, {
93
- memoryId: string;
94
- project?: string | undefined;
95
- limit?: number | undefined;
96
- }, {
97
- memoryId: string;
98
- project?: string | undefined;
99
- limit?: number | undefined;
100
- }>;
109
+ }, z.core.$strip>;
101
110
  /**
102
111
  * Tag operation schema
103
112
  */
104
113
  export declare const tagOperationSchema: z.ZodObject<{
105
- action: z.ZodEnum<["add", "remove"]>;
114
+ action: z.ZodEnum<{
115
+ add: "add";
116
+ remove: "remove";
117
+ }>;
106
118
  tag: z.ZodString;
107
119
  search: z.ZodOptional<z.ZodString>;
108
120
  olderThan: z.ZodOptional<z.ZodString>;
109
- type: z.ZodOptional<z.ZodEnum<["observation", "fact", "decision", "context", "preference", "note"]>>;
121
+ type: z.ZodOptional<z.ZodEnum<{
122
+ observation: "observation";
123
+ fact: "fact";
124
+ decision: "decision";
125
+ context: "context";
126
+ preference: "preference";
127
+ note: "note";
128
+ }>>;
110
129
  limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
111
130
  project: z.ZodOptional<z.ZodString>;
112
- }, "strip", z.ZodTypeAny, {
113
- action: "add" | "remove";
114
- tag: string;
115
- search?: string | undefined;
116
- project?: string | undefined;
117
- type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
118
- limit?: number | undefined;
119
- olderThan?: string | undefined;
120
- }, {
121
- action: "add" | "remove";
122
- tag: string;
123
- search?: string | undefined;
124
- project?: string | undefined;
125
- type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
126
- limit?: number | undefined;
127
- olderThan?: string | undefined;
128
- }>;
131
+ }, z.core.$strip>;
129
132
  //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared type definitions for Squish Memory system
3
+ * Consolidated from core/memory/memories.ts and core/memory/normalization.ts
4
+ */
5
+ export type MemoryType = 'observation' | 'fact' | 'decision' | 'context' | 'preference' | 'note' | 'task';
6
+ /**
7
+ * Confidence level for memory records
8
+ * - certain: High confidence, verified information
9
+ * - speculative: Low confidence, unverified or uncertain
10
+ * - outdated: Information that may no longer be accurate
11
+ */
12
+ export type ConfidenceLevel = 'certain' | 'speculative' | 'outdated';
13
+ /**
14
+ * Unified MemoryRecord interface
15
+ * Used across memories.ts and normalization.ts
16
+ *
17
+ * Note: type is string to avoid circular dependency with memories.ts
18
+ * Use MemoryType for type checking when needed
19
+ */
20
+ export interface MemoryRecord {
21
+ id: string;
22
+ projectId?: string | null;
23
+ type: string;
24
+ content: string;
25
+ summary?: string | null;
26
+ tags: string[];
27
+ metadata?: Record<string, unknown> | null;
28
+ createdAt?: string | null;
29
+ validFrom?: string | null;
30
+ validTo?: string | null;
31
+ recordedAt?: string | null;
32
+ similarity?: number;
33
+ importance?: number;
34
+ confidenceLevel?: ConfidenceLevel | null;
35
+ }
36
+ /**
37
+ * Result of a safety check
38
+ * Used to determine if a merge action can proceed
39
+ */
40
+ export interface SafetyCheckResult {
41
+ passed: boolean;
42
+ warnings: string[];
43
+ blockers: string[];
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shared type definitions for Squish Memory system
3
+ * Consolidated from core/memory/memories.ts and core/memory/normalization.ts
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -11,4 +11,8 @@ export declare function prepareEmbedding(embedding: number[] | null): {
11
11
  embeddingJson?: string | null;
12
12
  };
13
13
  export declare function determineOverallStatus(dbStatus: string, redisOk: boolean): string;
14
+ export declare function parseDate(input: string): Date | null;
15
+ export declare function filterByDateRange<T extends {
16
+ createdAt?: string | null;
17
+ }>(items: T[], since?: string, until?: string): T[];
14
18
  //# sourceMappingURL=utils.d.ts.map
@@ -87,4 +87,59 @@ export function determineOverallStatus(dbStatus, redisOk) {
87
87
  }
88
88
  return 'error';
89
89
  }
90
+ // Date parsing utilities - shared between CLI and MCP
91
+ // ============================================================================
92
+ export function parseDate(input) {
93
+ if (!input)
94
+ return null;
95
+ const now = new Date();
96
+ const lower = input.toLowerCase().trim();
97
+ // Direct date parse
98
+ const parsed = new Date(input);
99
+ if (!isNaN(parsed.getTime()))
100
+ return parsed;
101
+ // Relative parsing
102
+ const dayMatch = lower.match(/(\d+)\s*day/i);
103
+ const weekMatch = lower.match(/(\d+)\s*week/i);
104
+ const monthMatch = lower.match(/(\d+)\s*month/i);
105
+ if (lower === 'today') {
106
+ const d = new Date(now);
107
+ d.setHours(0, 0, 0, 0);
108
+ return d;
109
+ }
110
+ if (lower === 'yesterday')
111
+ return new Date(now.getTime() - 86400000);
112
+ if (lower === 'thisweek' || lower === 'this week') {
113
+ const d = new Date(now);
114
+ d.setDate(d.getDate() - d.getDay());
115
+ d.setHours(0, 0, 0, 0);
116
+ return d;
117
+ }
118
+ if (lower === 'lastweek' || lower === 'last week') {
119
+ const d = new Date(now);
120
+ d.setDate(d.getDate() - d.getDay() - 7);
121
+ return d;
122
+ }
123
+ if (dayMatch)
124
+ return new Date(now.getTime() - parseInt(dayMatch[1]) * 86400000);
125
+ if (weekMatch)
126
+ return new Date(now.getTime() - parseInt(weekMatch[1]) * 604800000);
127
+ if (monthMatch)
128
+ return new Date(now.getTime() - parseInt(monthMatch[1]) * 2592000000);
129
+ return null;
130
+ }
131
+ export function filterByDateRange(items, since, until) {
132
+ const sinceDate = parseDate(since || '');
133
+ const untilDate = parseDate(until || '');
134
+ return items.filter(item => {
135
+ if (!item.createdAt)
136
+ return true;
137
+ const created = new Date(item.createdAt);
138
+ if (sinceDate && created < sinceDate)
139
+ return false;
140
+ if (untilDate && created > untilDate)
141
+ return false;
142
+ return true;
143
+ });
144
+ }
90
145
  //# sourceMappingURL=utils.js.map
@@ -14,7 +14,6 @@ export interface LifecycleStats {
14
14
  promoted: number;
15
15
  tierChanges: {
16
16
  hot: number;
17
- warm: number;
18
17
  cold: number;
19
18
  };
20
19
  expired: number;
@@ -17,13 +17,14 @@ import { triggerTierChange, triggerDecayApplied } from './memory/hooks.js';
17
17
  /**
18
18
  * Default decay intervals by sector (days until decay check)
19
19
  * These determine how often memories in each sector are evaluated for decay
20
+ * Can be configured via config.sectorDecayIntervals
20
21
  */
21
22
  const SECTOR_DECAY_INTERVAL_DAYS = {
22
- episodic: 30,
23
- semantic: 90,
24
- procedural: 180,
25
- autobiographical: 365,
26
- working: 7,
23
+ episodic: config.sectorDecayIntervals?.episodic || 30,
24
+ semantic: config.sectorDecayIntervals?.semantic || 90,
25
+ procedural: config.sectorDecayIntervals?.procedural || 180,
26
+ autobiographical: config.sectorDecayIntervals?.autobiographical || 365,
27
+ working: config.sectorDecayIntervals?.working || 7,
27
28
  };
28
29
  /**
29
30
  * Default decay rates by memory type (percentage per decay cycle)
@@ -40,7 +41,6 @@ const DEFAULT_DECAY_RATES = {
40
41
  };
41
42
  const TIER_THRESHOLDS = {
42
43
  hot: { recency: 7, coactivation: 10, salience: 70 },
43
- warm: { recency: 30, coactivation: 5, salience: 50 },
44
44
  cold: { recency: Infinity, coactivation: 0, salience: 0 },
45
45
  };
46
46
  /**
@@ -48,13 +48,13 @@ const TIER_THRESHOLDS = {
48
48
  */
49
49
  export async function runLifecycleMaintenance(projectId) {
50
50
  if (!config.lifecycleEnabled) {
51
- return { decayed: 0, evicted: 0, promoted: 0, tierChanges: { hot: 0, warm: 0, cold: 0 }, expired: 0 };
51
+ return { decayed: 0, evicted: 0, promoted: 0, tierChanges: { hot: 0, cold: 0 }, expired: 0 };
52
52
  }
53
53
  const stats = {
54
54
  decayed: 0,
55
55
  evicted: 0,
56
56
  promoted: 0,
57
- tierChanges: { hot: 0, warm: 0, cold: 0 },
57
+ tierChanges: { hot: 0, cold: 0 },
58
58
  expired: 0,
59
59
  };
60
60
  try {
@@ -187,9 +187,9 @@ async function updateTiers(projectId, stats) {
187
187
  .from(schema.memories)
188
188
  .where(where)
189
189
  .limit(10000); // Process larger batches now
190
- // Calculate tiers in memory
190
+ // Calculate tiers in memory (simplified: hot or cold only)
191
191
  const tierAssignments = new Map();
192
- const tierCounts = { hot: 0, warm: 0, cold: 0 };
192
+ const tierCounts = { hot: 0, cold: 0 };
193
193
  for (const memory of memories) {
194
194
  const recencyDays = (now.getTime() - new Date(memory.createdAt).getTime()) / (24 * 60 * 60 * 1000);
195
195
  const coactivation = memory.coactivationScore || 0;
@@ -200,11 +200,6 @@ async function updateTiers(projectId, stats) {
200
200
  salience >= TIER_THRESHOLDS.hot.salience) {
201
201
  newTier = 'hot';
202
202
  }
203
- else if (recencyDays <= TIER_THRESHOLDS.warm.recency &&
204
- coactivation >= TIER_THRESHOLDS.warm.coactivation &&
205
- salience >= TIER_THRESHOLDS.warm.salience) {
206
- newTier = 'warm';
207
- }
208
203
  if (newTier !== memory.tier) {
209
204
  tierAssignments.set(memory.id, newTier);
210
205
  tierCounts[newTier]++;
@@ -216,9 +211,6 @@ async function updateTiers(projectId, stats) {
216
211
  const hotIds = Array.from(tierAssignments.entries())
217
212
  .filter(([_, tier]) => tier === 'hot')
218
213
  .map(([id]) => id);
219
- const warmIds = Array.from(tierAssignments.entries())
220
- .filter(([_, tier]) => tier === 'warm')
221
- .map(([id]) => id);
222
214
  const coldIds = Array.from(tierAssignments.entries())
223
215
  .filter(([_, tier]) => tier === 'cold')
224
216
  .map(([id]) => id);
@@ -229,11 +221,11 @@ async function updateTiers(projectId, stats) {
229
221
  .set({ tier: 'hot', updatedAt: now })
230
222
  .where(inArray(schema.memories.id, hotIds));
231
223
  }
232
- if (warmIds.length > 0) {
224
+ if (coldIds.length > 0) {
233
225
  await db
234
226
  .update(schema.memories)
235
- .set({ tier: 'warm', updatedAt: now })
236
- .where(inArray(schema.memories.id, warmIds));
227
+ .set({ tier: 'cold', updatedAt: now })
228
+ .where(inArray(schema.memories.id, coldIds));
237
229
  }
238
230
  if (coldIds.length > 0) {
239
231
  await db
@@ -268,11 +260,9 @@ async function updateTiers(projectId, stats) {
268
260
  }
269
261
  // Update stats
270
262
  stats.tierChanges.hot = tierCounts.hot;
271
- stats.tierChanges.warm = tierCounts.warm;
272
263
  stats.tierChanges.cold = tierCounts.cold;
273
264
  logger.debug('Tier updates complete', {
274
265
  hot: tierCounts.hot,
275
- warm: tierCounts.warm,
276
266
  cold: tierCounts.cold,
277
267
  });
278
268
  }
@@ -6,6 +6,7 @@ declare class Logger {
6
6
  private debugEnabled;
7
7
  constructor(prefix?: string);
8
8
  private format;
9
+ private isQuiet;
9
10
  info(message: string, context?: LogContext): void;
10
11
  warn(message: string, context?: LogContext): void;
11
12
  error(message: string, error?: Error | any, context?: LogContext): void;
@@ -1,8 +1,3 @@
1
- function isQuietMode() {
2
- return process.env.SQUISH_QUIET !== 'false' &&
3
- process.env.DEBUG !== 'true' &&
4
- process.env.DEBUG !== '1';
5
- }
6
1
  class Logger {
7
2
  prefix;
8
3
  debugEnabled;
@@ -15,14 +10,25 @@ class Logger {
15
10
  const ctx = context ? ` ${JSON.stringify(context)}` : '';
16
11
  return `[${this.prefix}:${level}] ${message}${ctx}`;
17
12
  }
13
+ isQuiet() {
14
+ return process.env.SQUISH_QUIET === 'true' || process.env.SQUISH_QUIET === '1';
15
+ }
18
16
  info(message, context) {
19
- if (!isQuietMode())
20
- console.error(this.format('info', message, context));
17
+ if (this.isQuiet()) {
18
+ return;
19
+ }
20
+ console.error(this.format('info', message, context));
21
21
  }
22
22
  warn(message, context) {
23
+ if (this.isQuiet()) {
24
+ return;
25
+ }
23
26
  console.error(this.format('warn', message, context));
24
27
  }
25
28
  error(message, error, context) {
29
+ if (this.isQuiet()) {
30
+ return;
31
+ }
26
32
  const errorMsg = error instanceof Error ? error.message : error;
27
33
  const ctx = { ...context, error: errorMsg };
28
34
  console.error(this.format('error', message, ctx));
@@ -31,7 +37,7 @@ class Logger {
31
37
  }
32
38
  }
33
39
  debug(message, context) {
34
- if (this.debugEnabled) {
40
+ if (this.debugEnabled && !this.isQuiet()) {
35
41
  console.error(this.format('debug', message, context));
36
42
  }
37
43
  }
@@ -2,8 +2,6 @@ import { MCPToolDefinition } from './types.js';
2
2
  export declare const squishSearchTool: MCPToolDefinition;
3
3
  export declare const squishRememberTool: MCPToolDefinition;
4
4
  export declare const squishRecallTool: MCPToolDefinition;
5
- export declare const squishEmbedTool: MCPToolDefinition;
6
- export declare const squishQMDSearchTool: MCPToolDefinition;
7
5
  export declare const squishHealthTool: MCPToolDefinition;
8
6
  export declare function getAllSquishTools(): MCPToolDefinition[];
9
7
  //# sourceMappingURL=tools.d.ts.map