squish-memory 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/core/embeddings/local-embeddings.ts +12 -0
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -1,64 +0,0 @@
1
- import { MCPClient } from '../core/mcp/client.js';
2
- import { config } from '../config.js';
3
- import { logger } from '../core/logger.js';
4
- import { searchMemories, rememberMemory } from '../core/memory/memories.js';
5
- export class ManagedSync {
6
- client;
7
- syncEnabled;
8
- constructor() {
9
- this.syncEnabled = config.managedMode && !!config.managedApiKey;
10
- this.client = new MCPClient(config.managedApiUrl);
11
- }
12
- async sync() {
13
- if (!this.syncEnabled) {
14
- logger.debug('Managed sync disabled');
15
- return;
16
- }
17
- try {
18
- await this.client.initialize();
19
- logger.info('Connected to managed storage');
20
- }
21
- catch (error) {
22
- logger.error('Managed sync connection failed:', error);
23
- }
24
- }
25
- async pushMemory(memoryId) {
26
- if (!this.syncEnabled)
27
- return;
28
- try {
29
- const memory = await searchMemories({ query: memoryId, limit: 1 });
30
- if (memory.length > 0) {
31
- await this.client.callTool('managed_memory_store', {
32
- memory: memory[0],
33
- });
34
- logger.debug(`Pushed memory ${memoryId} to managed storage`);
35
- }
36
- }
37
- catch (error) {
38
- logger.error(`Failed to push memory ${memoryId}:`, error);
39
- }
40
- }
41
- async pullMemory(memoryId) {
42
- if (!this.syncEnabled)
43
- return;
44
- try {
45
- const result = await this.client.callTool('managed_memory_retrieve', {
46
- memoryId,
47
- });
48
- if (result.content[0]?.text) {
49
- const memory = JSON.parse(result.content[0].text);
50
- await rememberMemory(memory);
51
- logger.debug(`Pulled memory ${memoryId} from managed storage`);
52
- }
53
- }
54
- catch (error) {
55
- logger.error(`Failed to pull memory ${memoryId}:`, error);
56
- }
57
- }
58
- }
59
- export async function startManagedSync() {
60
- const sync = new ManagedSync();
61
- await sync.sync();
62
- return sync;
63
- }
64
- //# sourceMappingURL=managed-sync.js.map
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=mcp-server.d.ts.map
@@ -1,393 +0,0 @@
1
- #!/usr/bin/env node
2
- // CRITICAL: Redirect console.log to stderr to prevent JSON-RPC stream corruption
3
- // MCP stdio requires stdout to contain ONLY valid JSON-RPC messages
4
- console.log = console.error;
5
- console.info = console.error;
6
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
9
- import express from "express";
10
- import { z } from "zod";
11
- import { config } from "../config.js";
12
- import { hybridSearch } from "../core/memory/hybrid-retrieval.js";
13
- import { rememberMemory, searchMemories, getMemoryById } from "../core/memory/memories.js";
14
- import { getEmbedding } from "../core/embeddings.js";
15
- import { getQMDClient } from "../core/embeddings/qmd-client.js";
16
- import { createAssociation, getRelatedMemories } from "../core/associations.js";
17
- import { createObservation, getObservationsForProject } from "../core/observations.js";
18
- import { getProjectByPath, getAllProjects } from "../core/projects.js";
19
- import { getMemoryStats } from "../core/memory/stats.js";
20
- import { getDb } from "../db/index.js";
21
- import { getSchema } from "../db/schema.js";
22
- import { eq } from "drizzle-orm";
23
- const SERVER_NAME = "squish-memory";
24
- const SERVER_VERSION = "1.0.2";
25
- function parseArgs() {
26
- const args = process.argv.slice(2);
27
- let mode = "stdio";
28
- let port = config.mcpServerPort || 8767;
29
- let health = false;
30
- for (let i = 0; i < args.length; i++) {
31
- if (args[i] === "--http" || args[i] === "-h") {
32
- mode = "http";
33
- }
34
- else if (args[i] === "--stdio" || args[i] === "-s") {
35
- mode = "stdio";
36
- }
37
- else if (args[i] === "--port" || args[i] === "-p") {
38
- port = parseInt(args[i + 1], 10) || 8767;
39
- i++;
40
- }
41
- else if (args[i] === "--health" || args[i] === "--check") {
42
- health = true;
43
- }
44
- }
45
- if (process.env.SQUISH_MCP_MODE === "http") {
46
- mode = "http";
47
- }
48
- return { mode, port, health };
49
- }
50
- function safeRegisterTool(server, name, definition, handler) {
51
- try {
52
- server.registerTool(name, definition, handler);
53
- console.error(`[MCP] Registered tool: ${name}`);
54
- return true;
55
- }
56
- catch (error) {
57
- console.error(`[MCP] Failed to register tool ${name}:`, error);
58
- return false;
59
- }
60
- }
61
- function createSquishServer() {
62
- const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
63
- let toolCount = 0;
64
- console.error(`[MCP] Starting tool registration...`);
65
- if (safeRegisterTool(server, "squish_search", {
66
- description: "Hybrid search across QMD, SQLite DB, and embeddings with graph expansion",
67
- inputSchema: {
68
- query: z.string().describe("Search query"),
69
- limit: z.number().min(1).max(100).default(5).describe("Maximum results"),
70
- project: z.string().optional().describe("Project path filter"),
71
- mode: z.enum(["hybrid", "qmd", "db", "semantic"]).default("hybrid").describe("Search mode")
72
- }
73
- }, async ({ query, limit = 5, project, mode = "hybrid" }) => {
74
- const results = await hybridSearch({
75
- query,
76
- limit,
77
- project,
78
- candidateLimit: 50,
79
- resultLimit: limit
80
- });
81
- const formatted = results.map((r, i) => `${i + 1}. [${r.type || "memory"}] ${r.content?.substring(0, 200)}... (score: ${r.hybridScore?.toFixed(2)})`).join("\n");
82
- return { content: [{ type: "text", text: `Found ${results.length} memories:\n\n${formatted}` }] };
83
- }))
84
- toolCount++;
85
- if (safeRegisterTool(server, "squish_remember", {
86
- description: "Store a new memory in Squish with automatic embedding",
87
- inputSchema: {
88
- content: z.string().describe("Memory content to store"),
89
- type: z.enum(["observation", "fact", "decision", "context", "preference"]).default("observation").describe("Memory type"),
90
- tags: z.array(z.string()).optional().describe("Optional tags"),
91
- project: z.string().optional().describe("Project path")
92
- }
93
- }, async ({ content, type = "observation", tags = [], project }) => {
94
- const memory = await rememberMemory({ content, type: type, tags, project });
95
- return { content: [{ type: "text", text: `Memory stored: ${memory.id}` }] };
96
- }))
97
- toolCount++;
98
- if (safeRegisterTool(server, "squish_recall", {
99
- description: "Retrieve a specific memory by ID",
100
- inputSchema: {
101
- memoryId: z.string().uuid().describe("Memory ID to retrieve")
102
- }
103
- }, async ({ memoryId }) => {
104
- const memory = await getMemoryById(memoryId);
105
- if (!memory) {
106
- return { content: [{ type: "text", text: `Memory not found: ${memoryId}` }], isError: true };
107
- }
108
- return { content: [{ type: "text", text: JSON.stringify(memory, null, 2) }] };
109
- }))
110
- toolCount++;
111
- if (safeRegisterTool(server, "squish_forget", {
112
- description: "Delete a memory by ID",
113
- inputSchema: {
114
- memoryId: z.string().uuid().describe("Memory ID to delete")
115
- }
116
- }, async ({ memoryId }) => {
117
- const db = await getDb();
118
- const schema = await getSchema();
119
- // Cast to any to handle Drizzle ORM union type issue
120
- const sqliteDb = db;
121
- const result = await sqliteDb.delete(schema.memories).where(eq(schema.memories.id, memoryId));
122
- return { content: [{ type: "text", text: `Memory deleted: ${memoryId}` }] };
123
- }))
124
- toolCount++;
125
- if (safeRegisterTool(server, "squish_update", {
126
- description: "Update an existing memory",
127
- inputSchema: {
128
- memoryId: z.string().uuid().describe("Memory ID to update"),
129
- content: z.string().optional().describe("New content"),
130
- tags: z.array(z.string()).optional().describe("New tags"),
131
- type: z.enum(["observation", "fact", "decision", "context", "preference"]).optional().describe("New type")
132
- }
133
- }, async ({ memoryId, content, tags, type }) => {
134
- const db = await getDb();
135
- const schema = await getSchema();
136
- const updates = {};
137
- if (content)
138
- updates.content = content;
139
- if (tags)
140
- updates.tags = config.isTeamMode ? tags : JSON.stringify(tags);
141
- if (type)
142
- updates.type = type;
143
- if (Object.keys(updates).length === 0) {
144
- return { content: [{ type: "text", text: "No updates provided" }], isError: true };
145
- }
146
- // Cast to any to handle Drizzle ORM union type issue
147
- const sqliteDb2 = db;
148
- await sqliteDb2.update(schema.memories).set(updates).where(eq(schema.memories.id, memoryId));
149
- return { content: [{ type: "text", text: `Memory updated: ${memoryId}` }] };
150
- }))
151
- toolCount++;
152
- if (safeRegisterTool(server, "squish_qmd_search", {
153
- description: "Search markdown files using QMD (BM25 + vector)",
154
- inputSchema: {
155
- query: z.string().describe("Search query"),
156
- collection: z.string().optional().describe("QMD collection name"),
157
- limit: z.number().min(1).max(100).default(10).describe("Maximum results")
158
- }
159
- }, async ({ query, collection, limit = 10 }) => {
160
- const client = await getQMDClient();
161
- const available = await client.isAvailable();
162
- if (!available) {
163
- return { content: [{ type: "text", text: "QMD not available. Install with: bun install -g qmd" }], isError: true };
164
- }
165
- const results = await client.search({ query, collection, limit });
166
- const formatted = results.map((r, i) => `${i + 1}. ${r.path || r.file} (score: ${r.score?.toFixed(2)})\n ${r.content?.substring(0, 150)}...`).join("\n\n");
167
- return { content: [{ type: "text", text: `QMD found ${results.length} results:\n\n${formatted}` }] };
168
- }))
169
- toolCount++;
170
- if (safeRegisterTool(server, "squish_associate", {
171
- description: "Create an association between two memories in the graph",
172
- inputSchema: {
173
- fromMemoryId: z.string().uuid().describe("Source memory ID"),
174
- toMemoryId: z.string().uuid().describe("Target memory ID"),
175
- type: z.enum(["relates_to", "supersedes", "contradicts", "supports", "duplicate", "merged"]).describe("Association type"),
176
- weight: z.number().min(0).max(1).default(0.5).describe("Association strength (0-1)")
177
- }
178
- }, async ({ fromMemoryId, toMemoryId, type, weight = 0.5 }) => {
179
- await createAssociation(fromMemoryId, toMemoryId, type, weight);
180
- return { content: [{ type: "text", text: `Association created: ${fromMemoryId} -> ${toMemoryId} (${type})` }] };
181
- }))
182
- toolCount++;
183
- if (safeRegisterTool(server, "squish_related", {
184
- description: "Get related memories via graph traversal",
185
- inputSchema: {
186
- memoryId: z.string().uuid().describe("Memory ID to find relations for"),
187
- depth: z.number().min(1).max(5).default(2).describe("Graph traversal depth"),
188
- minWeight: z.number().min(0).max(1).default(0.3).describe("Minimum association weight")
189
- }
190
- }, async ({ memoryId, depth = 2, minWeight = 0.3 }) => {
191
- const related = await getRelatedMemories(memoryId, depth * 5);
192
- const filtered = related.filter((r) => r.weight >= minWeight);
193
- const formatted = filtered.map((r, i) => `${i + 1}. [${r.type || "memory"}] ${r.content?.substring(0, 100)}... (weight: ${r.weight?.toFixed(2)})`).join("\n");
194
- return { content: [{ type: "text", text: `Found ${related.length} related memories:\n\n${formatted}` }] };
195
- }))
196
- toolCount++;
197
- if (safeRegisterTool(server, "squish_context", {
198
- description: "Get project context with relevant memories",
199
- inputSchema: {
200
- project: z.string().describe("Project path"),
201
- limit: z.number().min(1).max(50).default(10).describe("Maximum memories to return")
202
- }
203
- }, async ({ project, limit = 10 }) => {
204
- const projectRecord = await getProjectByPath(project);
205
- if (!projectRecord) {
206
- return { content: [{ type: "text", text: `Project not found: ${project}` }], isError: true };
207
- }
208
- const recentMemories = await searchMemories({ query: "", project, limit });
209
- const observations = await getObservationsForProject(project, 5);
210
- const context = {
211
- project: projectRecord,
212
- recentMemories: recentMemories.slice(0, limit),
213
- recentObservations: observations
214
- };
215
- return { content: [{ type: "text", text: JSON.stringify(context, null, 2) }] };
216
- }))
217
- toolCount++;
218
- if (safeRegisterTool(server, "squish_observe", {
219
- description: "Store an observation about tool usage, patterns, or insights",
220
- inputSchema: {
221
- type: z.enum(["tool_use", "file_change", "error", "pattern", "insight"]).describe("Observation type"),
222
- action: z.string().describe("Action performed"),
223
- summary: z.string().describe("Summary of observation"),
224
- target: z.string().optional().describe("Target file or resource"),
225
- project: z.string().optional().describe("Project path")
226
- }
227
- }, async ({ type, action, summary, target, project }) => {
228
- const observation = await createObservation({ type, action, summary, target, project });
229
- return { content: [{ type: "text", text: `Observation stored: ${observation.id}` }] };
230
- }))
231
- toolCount++;
232
- if (safeRegisterTool(server, "squish_embed", {
233
- description: "Generate embeddings for text using configured provider",
234
- inputSchema: {
235
- text: z.string().describe("Text to embed")
236
- }
237
- }, async ({ text }) => {
238
- const embedding = await getEmbedding(text);
239
- if (!embedding) {
240
- return { content: [{ type: "text", text: "Failed to generate embedding" }], isError: true };
241
- }
242
- return { content: [{ type: "text", text: JSON.stringify({ dimensions: embedding.length, preview: embedding.slice(0, 5) }, null, 2) }] };
243
- }))
244
- toolCount++;
245
- if (safeRegisterTool(server, "squish_health", {
246
- description: "Check Squish system health status",
247
- inputSchema: {}
248
- }, async () => {
249
- const qmdClient = await getQMDClient();
250
- const qmdAvailable = await qmdClient.isAvailable();
251
- return { content: [{ type: "text", text: JSON.stringify({
252
- status: "ok",
253
- version: SERVER_VERSION,
254
- mode: config.isManagedMode ? "managed" : "local",
255
- embeddings: config.embeddingsProvider,
256
- qmd: qmdAvailable ? "available" : "unavailable",
257
- timestamp: new Date().toISOString()
258
- }, null, 2) }] };
259
- }))
260
- toolCount++;
261
- if (safeRegisterTool(server, "squish_stats", {
262
- description: "Get memory statistics for a project",
263
- inputSchema: {
264
- project: z.string().optional().describe("Project path (defaults to current)")
265
- }
266
- }, async ({ project }) => {
267
- const stats = await getMemoryStats(project || process.cwd());
268
- return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] };
269
- }))
270
- toolCount++;
271
- if (safeRegisterTool(server, "squish_projects", {
272
- description: "List all registered projects",
273
- inputSchema: {}
274
- }, async () => {
275
- const projects = await getAllProjects();
276
- const formatted = projects.map((p, i) => `${i + 1}. ${p.name}\n Path: ${p.path}\n ID: ${p.id}`).join("\n\n");
277
- return { content: [{ type: "text", text: `Found ${projects.length} projects:\n\n${formatted}` }] };
278
- }))
279
- toolCount++;
280
- console.error(`[MCP] Tool registration complete. Registered ${toolCount} tools.`);
281
- return { server, toolCount };
282
- }
283
- async function runStdio(server, toolCount) {
284
- console.error(`[MCP] Starting in STDIO mode...`);
285
- const transport = new StdioServerTransport();
286
- transport.onclose = () => {
287
- console.error(`[MCP] STDIO transport closed`);
288
- };
289
- await server.connect(transport);
290
- console.error(`[MCP] Connected via stdio. ${toolCount} tools available.`);
291
- // Keep process alive - wait for stdin to close or process signals
292
- await new Promise((resolve) => {
293
- process.stdin.on('close', () => {
294
- console.error(`[MCP] STDIO stdin closed, shutting down`);
295
- resolve();
296
- });
297
- process.on('SIGINT', () => {
298
- console.error(`[MCP] Received SIGINT, shutting down`);
299
- resolve();
300
- });
301
- process.on('SIGTERM', () => {
302
- console.error(`[MCP] Received SIGTERM, shutting down`);
303
- resolve();
304
- });
305
- });
306
- }
307
- async function runHttp(server, port) {
308
- console.error(`[MCP] Starting in HTTP mode on port ${port}...`);
309
- const app = express();
310
- app.use(express.json());
311
- const transports = new Map();
312
- app.get("/health", (req, res) => {
313
- res.json({ status: "ok", server: SERVER_NAME, version: SERVER_VERSION });
314
- });
315
- app.get("/sse", async (req, res) => {
316
- const transport = new SSEServerTransport("/message", res);
317
- const sessionId = Math.random().toString(36).substring(7);
318
- transports.set(sessionId, transport);
319
- console.error(`[MCP] SSE connection established: ${sessionId}`);
320
- await server.connect(transport);
321
- req.on("close", () => {
322
- console.error(`[MCP] SSE connection closed: ${sessionId}`);
323
- transports.delete(sessionId);
324
- });
325
- });
326
- app.post("/message", async (req, res) => {
327
- const sessionId = req.headers["mcp-session-id"] || "default";
328
- const transport = transports.get(sessionId);
329
- if (!transport) {
330
- res.status(400).json({ error: "No active session" });
331
- return;
332
- }
333
- try {
334
- await transport.handlePostMessage(req, res);
335
- }
336
- catch (error) {
337
- console.error(`[MCP] Error handling message:`, error);
338
- res.status(500).json({ error: "Internal server error" });
339
- }
340
- });
341
- await new Promise((resolve) => app.listen(port, () => {
342
- console.error(`[MCP] HTTP server listening on port ${port}`);
343
- console.error(`[MCP] SSE endpoint: http://localhost:${port}/sse`);
344
- console.error(`[MCP] Health: http://localhost:${port}/health`);
345
- resolve();
346
- }));
347
- }
348
- async function runHealthCheck() {
349
- console.error(`[MCP] Running health check...`);
350
- try {
351
- const { server, toolCount } = createSquishServer();
352
- console.error(`[MCP] Health check passed. Server initialized with ${toolCount} tools.`);
353
- process.exit(0);
354
- }
355
- catch (error) {
356
- console.error(`[MCP] Health check failed:`, error);
357
- process.exit(1);
358
- }
359
- }
360
- async function main() {
361
- try {
362
- console.error(`[${SERVER_NAME}] v${SERVER_VERSION} initializing...`);
363
- console.error(`[${SERVER_NAME}] Mode: ${config.isManagedMode ? "managed" : "local"}`);
364
- console.error(`[${SERVER_NAME}] Embeddings: ${config.embeddingsProvider}`);
365
- const { mode, port, health } = parseArgs();
366
- if (health) {
367
- await runHealthCheck();
368
- return;
369
- }
370
- const { server, toolCount } = createSquishServer();
371
- const shutdown = async () => {
372
- console.error(`[${SERVER_NAME}] Shutting down...`);
373
- process.exit(0);
374
- };
375
- process.on("SIGINT", shutdown);
376
- process.on("SIGTERM", shutdown);
377
- if (mode === "stdio") {
378
- await runStdio(server, toolCount);
379
- }
380
- else {
381
- await runHttp(server, port);
382
- }
383
- }
384
- catch (error) {
385
- console.error(`[${SERVER_NAME}] Fatal error:`, error);
386
- process.exit(1);
387
- }
388
- }
389
- main().catch((error) => {
390
- console.error(`[${SERVER_NAME}] Fatal error:`, error);
391
- process.exit(1);
392
- });
393
- //# sourceMappingURL=mcp-server.js.map
@@ -1,24 +0,0 @@
1
- import { getProjectByPath } from './projects.js';
2
- import { getRecentMemories } from './memory/memories.js';
3
- import { getObservationsForProject } from './observations.js';
4
- import { getEntitiesForProject } from './search/entities.js';
5
- export async function getProjectContext(input) {
6
- const project = await getProjectByPath(input.project);
7
- const include = input.include ?? ['memories', 'observations'];
8
- const limit = Math.min(Math.max(input.limit ?? 10, 1), 100);
9
- if (!project) {
10
- return { project: null, memories: [], observations: [] };
11
- }
12
- const result = { project };
13
- if (include.includes('memories')) {
14
- result.memories = await getRecentMemories(project.path, limit);
15
- }
16
- if (include.includes('observations')) {
17
- result.observations = await getObservationsForProject(project.path, limit);
18
- }
19
- if (include.includes('entities')) {
20
- result.entities = await getEntitiesForProject(project.path, limit);
21
- }
22
- return result;
23
- }
24
- //# sourceMappingURL=context.js.map
@@ -1,64 +0,0 @@
1
- /**
2
- * Memory Governance
3
- * Implements protection, pinning, and immutability rules
4
- */
5
- import { eq } from 'drizzle-orm';
6
- import { getDb } from '../db/index.js';
7
- import { getSchema } from '../db/schema.js';
8
- import { config } from '../config.js';
9
- import { performMemoryOperation } from './utils/memory-operations.js';
10
- import { logger } from './logger.js';
11
- /**
12
- * Mark a memory as protected (cannot be evicted)
13
- */
14
- export async function protectMemory(memoryId, reason) {
15
- await performMemoryOperation(memoryId, {
16
- name: 'protecting memory',
17
- updates: {
18
- isProtected: true,
19
- metadata: { protectionReason: reason, protectedAt: new Date().toISOString() },
20
- },
21
- });
22
- }
23
- /**
24
- * Pin a memory for automatic injection into context
25
- */
26
- export async function pinMemory(memoryId) {
27
- await performMemoryOperation(memoryId, {
28
- name: 'pinning memory',
29
- updates: {
30
- isPinned: true,
31
- metadata: { pinnedAt: new Date().toISOString() },
32
- },
33
- });
34
- }
35
- /**
36
- * Unpin a memory
37
- */
38
- export async function unpinMemory(memoryId) {
39
- await performMemoryOperation(memoryId, {
40
- name: 'unpinning memory',
41
- updates: { isPinned: false },
42
- });
43
- }
44
- /**
45
- * Get all pinned memories for auto-injection into context
46
- */
47
- export async function getPinnedMemories() {
48
- if (!config.governanceEnabled)
49
- return [];
50
- try {
51
- const db = await getDb();
52
- const schema = await getSchema();
53
- return await db
54
- .select()
55
- .from(schema.memories)
56
- .where(eq(schema.memories.isPinned, true))
57
- .limit(50);
58
- }
59
- catch (error) {
60
- logger.error('Error retrieving pinned memories', error);
61
- return [];
62
- }
63
- }
64
- //# sourceMappingURL=governance.js.map
@@ -1,6 +0,0 @@
1
- /**
2
- * Utility functions for local embeddings
3
- * Note: Actual embedding generation is in core/embeddings.ts
4
- */
5
- export declare function cosineSimilarity(a: number[], b: number[]): number;
6
- //# sourceMappingURL=local-embeddings.d.ts.map
@@ -1,20 +0,0 @@
1
- /**
2
- * Utility functions for local embeddings
3
- * Note: Actual embedding generation is in core/embeddings.ts
4
- */
5
- export function cosineSimilarity(a, b) {
6
- if (a.length !== b.length) {
7
- throw new Error('Embeddings must have same dimensions');
8
- }
9
- let dotProduct = 0;
10
- let normA = 0;
11
- let normB = 0;
12
- for (let i = 0; i < a.length; i++) {
13
- dotProduct += a[i] * b[i];
14
- normA += a[i] * a[i];
15
- normB += b[i] * b[i];
16
- }
17
- const denominator = Math.sqrt(normA) * Math.sqrt(normB);
18
- return denominator === 0 ? 0 : dotProduct / denominator;
19
- }
20
- //# sourceMappingURL=local-embeddings.js.map
@@ -1,71 +0,0 @@
1
- /** Namespace Management - Hierarchical folder-like namespaces for memories */
2
- export type NamespaceType = 'root' | 'user' | 'agent' | 'project' | 'custom';
3
- export interface Namespace {
4
- id: string;
5
- projectId: string;
6
- name: string;
7
- parentId: string | null;
8
- type: NamespaceType;
9
- description: string | null;
10
- path: string;
11
- children?: Namespace[];
12
- createdAt: Date;
13
- updatedAt: Date;
14
- }
15
- export interface NamespaceCreateInput {
16
- projectId: string;
17
- name: string;
18
- type: NamespaceType;
19
- parentId?: string | null;
20
- description?: string;
21
- }
22
- export interface NamespaceTree {
23
- id: string;
24
- name: string;
25
- type: NamespaceType;
26
- description: string | null;
27
- path: string;
28
- children: NamespaceTree[];
29
- }
30
- /**
31
- * Create a new namespace
32
- */
33
- export declare function createNamespace(input: NamespaceCreateInput): Promise<Namespace>;
34
- /**
35
- * Get a namespace by ID
36
- */
37
- export declare function getNamespaceById(id: string): Promise<Namespace | null>;
38
- /**
39
- * Resolve a namespace path to a namespace ID
40
- * @example resolveNamespacePath('my-project', ['user', 'preferences']) -> namespaceId
41
- */
42
- export declare function resolveNamespacePath(projectId: string, path: string[]): Promise<string | null>;
43
- /**
44
- * Get namespace tree for a project
45
- */
46
- export declare function getNamespaceTree(projectId: string): Promise<NamespaceTree[]>;
47
- /**
48
- * Get or create default namespaces for a project
49
- */
50
- export declare function getDefaultNamespaces(projectId: string): Promise<Namespace[]>;
51
- /**
52
- * List namespaces with optional filtering
53
- */
54
- export declare function listNamespaces(options?: {
55
- projectId?: string;
56
- type?: NamespaceType;
57
- parentId?: string;
58
- recursive?: boolean;
59
- }): Promise<Namespace[]>;
60
- /**
61
- * Delete a namespace (cascades to child namespaces)
62
- */
63
- export declare function deleteNamespace(id: string): Promise<void>;
64
- /**
65
- * Update namespace
66
- */
67
- export declare function updateNamespace(id: string, updates: Partial<{
68
- name: string;
69
- description: string;
70
- }>): Promise<void>;
71
- //# sourceMappingURL=index.d.ts.map