squish-memory 1.1.5 → 1.2.1

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 (646) 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 +44 -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/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  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/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  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/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  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/{dist/core/places/index.js → core/places/index.ts} +12 -12
  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 +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  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/{dist/core/search/index.js → core/search/index.ts} +4 -5
  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/{dist/core/session/index.js → core/session/index.ts} +7 -7
  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/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  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/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  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/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  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/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
@@ -1,739 +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 { writeFileSync } from "fs";
13
- import { join } from "path";
14
- import { hybridSearch } from "../../core/memory/hybrid-retrieval.js";
15
- import { rememberMemory, search as searchMemories, getMemory, getRecent } from "../../core/memory/memories.js";
16
- import { getQMDClient } from "../../core/embeddings/qmd-client.js";
17
- import { createAssociation, getRelatedMemories } from "../../core/associations.js";
18
- import { createLearning, getLearnings } from "../../core/ingestion/learnings.js";
19
- import { requireProject, getAllProjects } from "../../core/projects.js";
20
- import { getMemoryStats } from "../../core/memory/stats.js";
21
- import { getDb } from "../../db/index.js";
22
- import { getSchema } from "../../db/schema.js";
23
- import { eq } from "drizzle-orm";
24
- import { encrypt, decrypt } from "../../core/security/encrypt.js";
25
- import { startWorker, stopWorker } from "../../core/worker.js";
26
- import { initializeScheduler } from "../../core/scheduler/cron-scheduler.js";
27
- import { serializeTags } from "../../core/memory/serialization.js";
28
- const SERVER_NAME = "squish-memory";
29
- const SERVER_VERSION = "1.1.5";
30
- function parseArgs() {
31
- const args = process.argv.slice(2);
32
- let mode = "stdio";
33
- let port = config.mcpServerPort || 8767;
34
- let health = false;
35
- for (let i = 0; i < args.length; i++) {
36
- if (args[i] === "--http" || args[i] === "-h") {
37
- mode = "http";
38
- }
39
- else if (args[i] === "--stdio" || args[i] === "-s") {
40
- mode = "stdio";
41
- }
42
- else if (args[i] === "--port" || args[i] === "-p") {
43
- port = parseInt(args[i + 1], 10) || 8767;
44
- i++;
45
- }
46
- else if (args[i] === "--health" || args[i] === "--check") {
47
- health = true;
48
- }
49
- }
50
- if (process.env.SQUISH_MCP_MODE === "http") {
51
- mode = "http";
52
- }
53
- return { mode, port, health };
54
- }
55
- function safeRegisterTool(server, name, definition, handler) {
56
- try {
57
- server.registerTool(name, definition, handler);
58
- console.error(`[MCP] Registered tool: ${name}`);
59
- return true;
60
- }
61
- catch (error) {
62
- console.error(`[MCP] Failed to register tool ${name}:`, error);
63
- return false;
64
- }
65
- }
66
- function createSquishServer() {
67
- const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
68
- let toolCount = 0;
69
- console.error(`[MCP] Starting tool registration...`);
70
- if (safeRegisterTool(server, "squish_search", {
71
- description: "Hybrid search across QMD, SQLite DB, and embeddings with graph expansion",
72
- inputSchema: {
73
- query: z.string().describe("Search query"),
74
- limit: z.number().min(1).max(100).default(5).describe("Maximum results"),
75
- project: z.string().optional().describe("Project path filter"),
76
- mode: z.enum(["hybrid", "qmd", "db", "semantic"]).default("hybrid").describe("Search mode")
77
- }
78
- }, async ({ query, limit = 5, project, mode = "hybrid" }) => {
79
- const results = await hybridSearch({
80
- query,
81
- limit,
82
- project,
83
- candidateLimit: 50,
84
- resultLimit: limit
85
- });
86
- const formatted = results.map((r, i) => `${i + 1}. [${r.type || "memory"}] ${r.content?.substring(0, 200)}... (score: ${r.hybridScore?.toFixed(2)})`).join("\n");
87
- return { content: [{ type: "text", text: `Found ${results.length} memories:\n\n${formatted}` }] };
88
- }))
89
- toolCount++;
90
- // squish_timeline - 3-layer progressive disclosure
91
- if (safeRegisterTool(server, "squish_timeline", {
92
- description: "3-layer progressive disclosure - index (~50 tokens), timeline (~200 tokens), detail (~2000 tokens)",
93
- inputSchema: {
94
- query: z.string().describe("Search query"),
95
- depth: z.enum(["index", "timeline", "detail"]).default("index").describe("Progressive disclosure depth"),
96
- limit: z.number().min(1).max(100).default(10).describe("Max results"),
97
- project: z.string().optional().describe("Project path")
98
- }
99
- }, async ({ query, depth = "index", limit = 10, project }) => {
100
- const { getTimeline } = await import('../../core/adapters/timeline.js');
101
- const result = await getTimeline(query, depth, limit, project);
102
- const formatted = result.results.map((r, i) => {
103
- if (depth === "index") {
104
- return `${i + 1}. ${r.title}`;
105
- }
106
- else if (depth === "timeline") {
107
- return `${i + 1}. [${r.type}] ${r.content} (${r.tags?.join(', ') || 'no tags'})`;
108
- }
109
- else {
110
- return `${i + 1}. [${r.type}] ${r.content?.substring(0, 200)}...`;
111
- }
112
- }).join("\n");
113
- return { content: [{ type: "text", text: `Timeline (${depth}, ~${result.tokenEstimate} tokens):\n\n${formatted}` }] };
114
- }))
115
- toolCount++;
116
- // Note: For session context, use squish_context tool (already exists)
117
- // It provides project memories + observations + entities
118
- if (safeRegisterTool(server, "squish_remember", {
119
- description: "Store a new memory in Squish with automatic embedding",
120
- inputSchema: {
121
- content: z.string().describe("Memory content to store"),
122
- type: z.enum(["observation", "fact", "decision", "context", "preference"]).default("observation").describe("Memory type"),
123
- tags: z.array(z.string()).optional().describe("Optional tags"),
124
- project: z.string().optional().describe("Project path")
125
- }
126
- }, async ({ content, type = "observation", tags = [], project }) => {
127
- const memory = await rememberMemory({ content, type: type, tags, project });
128
- return { content: [{ type: "text", text: `Memory stored: ${memory.id}` }] };
129
- }))
130
- toolCount++;
131
- if (safeRegisterTool(server, "squish_recall", {
132
- description: "Retrieve a specific memory by ID",
133
- inputSchema: {
134
- memoryId: z.string().uuid().describe("Memory ID to retrieve")
135
- }
136
- }, async ({ memoryId }) => {
137
- const memory = await getMemory(memoryId);
138
- if (!memory) {
139
- return { content: [{ type: "text", text: `Memory not found: ${memoryId}` }], isError: true };
140
- }
141
- return { content: [{ type: "text", text: JSON.stringify(memory, null, 2) }] };
142
- }))
143
- toolCount++;
144
- if (safeRegisterTool(server, "squish_forget", {
145
- description: "Delete a memory by ID, or bulk delete with filters (older-than, search, type)",
146
- inputSchema: {
147
- memoryId: z.string().optional().describe("Memory ID to delete (single)"),
148
- olderThan: z.string().optional().describe("Bulk delete memories older than (e.g., '30 days', '6 months')"),
149
- search: z.string().optional().describe("Search query to match specific memories"),
150
- type: z.string().optional().describe("Filter by memory type"),
151
- confirm: z.boolean().optional().describe("Actually delete (default is dry-run)"),
152
- limit: z.number().optional().describe("Max memories to delete"),
153
- project: z.string().optional().describe("Project path (defaults to current)")
154
- }
155
- }, async ({ memoryId, olderThan, search, type, confirm = false, limit = 100, project }) => {
156
- const db = await getDb();
157
- const schema = await getSchema();
158
- const sqliteDb = db;
159
- const proj = project || process.cwd();
160
- // Single memory deletion
161
- if (memoryId) {
162
- await sqliteDb.delete(schema.memories).where(eq(schema.memories.id, memoryId));
163
- return { content: [{ type: "text", text: `Memory deleted: ${memoryId}` }] };
164
- }
165
- // Bulk deletion
166
- if (!olderThan && !search) {
167
- return { content: [{ type: "text", text: "Error: Provide memoryId or use --older-than / --search for bulk delete" }], isError: true };
168
- }
169
- const results = await searchMemories({ query: search || '', type: type, limit, project: proj });
170
- let filtered = results;
171
- if (olderThan) {
172
- filtered = filterByDateRange(results, '', olderThan);
173
- }
174
- const deleted = [];
175
- if (confirm) {
176
- for (const mem of filtered) {
177
- await sqliteDb.delete(schema.memories).where(eq(schema.memories.id, mem.id));
178
- deleted.push(mem.id);
179
- }
180
- }
181
- return { content: [{ type: "text", text: JSON.stringify({ ok: true, matched: filtered.length, deleted: deleted.length, dryRun: !confirm }, null, 2) }] };
182
- }))
183
- toolCount++;
184
- if (safeRegisterTool(server, "squish_update", {
185
- description: "Update an existing memory",
186
- inputSchema: {
187
- memoryId: z.string().uuid().describe("Memory ID to update"),
188
- content: z.string().optional().describe("New content"),
189
- tags: z.array(z.string()).optional().describe("New tags"),
190
- type: z.enum(["observation", "fact", "decision", "context", "preference"]).optional().describe("New type")
191
- }
192
- }, async ({ memoryId, content, tags, type }) => {
193
- const db = await getDb();
194
- const schema = await getSchema();
195
- const updates = {};
196
- if (content)
197
- updates.content = content;
198
- if (tags)
199
- updates.tags = serializeTags(tags);
200
- if (type)
201
- updates.type = type;
202
- if (Object.keys(updates).length === 0) {
203
- return { content: [{ type: "text", text: "No updates provided" }], isError: true };
204
- }
205
- // Cast to any to handle Drizzle ORM union type issue
206
- const sqliteDb2 = db;
207
- await sqliteDb2.update(schema.memories).set(updates).where(eq(schema.memories.id, memoryId));
208
- return { content: [{ type: "text", text: `Memory updated: ${memoryId}` }] };
209
- }))
210
- toolCount++;
211
- // squish_link - Unified graph operations (find related, add links, list)
212
- if (safeRegisterTool(server, "squish_link", {
213
- description: "Manage memory associations: find related memories, add links, or list associations",
214
- inputSchema: {
215
- action: z.enum(["find", "add", "list"]).describe("Action: find, add, or list"),
216
- memoryId: z.string().optional().describe("Memory ID (for find action)"),
217
- fromMemoryId: z.string().optional().describe("Source memory ID (for add action)"),
218
- toMemoryId: z.string().optional().describe("Target memory ID (for add action)"),
219
- type: z.string().optional().describe("Association type (for add action): relates_to, supports, contradicts, supersedes, duplicate"),
220
- weight: z.number().min(0).max(1).default(0.5).describe("Association strength (0-1)"),
221
- depth: z.number().min(1).max(5).default(2).describe("Graph traversal depth (for find action)"),
222
- minWeight: z.number().min(0).max(1).default(0.3).describe("Minimum weight (for find action)")
223
- }
224
- }, async ({ action, memoryId, fromMemoryId, toMemoryId, type = "relates_to", weight = 0.5, depth = 2, minWeight = 0.3 }) => {
225
- if (action === "find") {
226
- if (!memoryId) {
227
- return { content: [{ type: "text", text: "Error: memoryId required for find action" }], isError: true };
228
- }
229
- const related = await getRelatedMemories(memoryId, depth * 5);
230
- const filtered = related.filter((r) => r.weight >= minWeight);
231
- const formatted = filtered.map((r, i) => `${i + 1}. [${r.type || "memory"}] ${r.content?.substring(0, 100)}... (weight: ${r.weight?.toFixed(2)})`).join("\n");
232
- return { content: [{ type: "text", text: `Found ${filtered.length} related memories:\n\n${formatted}` }] };
233
- }
234
- if (action === "add") {
235
- if (!fromMemoryId || !toMemoryId) {
236
- return { content: [{ type: "text", text: "Error: fromMemoryId and toMemoryId required for add action" }], isError: true };
237
- }
238
- await createAssociation(fromMemoryId, toMemoryId, type, weight);
239
- return { content: [{ type: "text", text: `Association created: ${fromMemoryId} -> ${toMemoryId} (${type})` }] };
240
- }
241
- if (action === "list") {
242
- const db = await getDb();
243
- const schema = await getSchema();
244
- const sqliteDb = db;
245
- const associations = await sqliteDb.select().from(schema.memoryAssociations).limit(100);
246
- return { content: [{ type: "text", text: JSON.stringify({ ok: true, count: associations.length, associations }, null, 2) }] };
247
- }
248
- return { content: [{ type: "text", text: "Error: invalid action. Use find, add, or list" }], isError: true };
249
- }))
250
- toolCount++;
251
- if (safeRegisterTool(server, "squish_context", {
252
- description: "Get project context or list registered projects",
253
- inputSchema: {
254
- project: z.string().optional().describe("Project path"),
255
- limit: z.number().min(1).max(50).default(10).describe("Maximum memories to return"),
256
- listProjects: z.boolean().optional().describe("List registered projects instead of loading context")
257
- }
258
- }, async ({ project, limit = 10, listProjects = false }) => {
259
- if (listProjects) {
260
- const projects = await getAllProjects();
261
- const formatted = projects.map((p, i) => `${i + 1}. ${p.name}\n Path: ${p.path}\n ID: ${p.id}`).join("\n\n");
262
- return { content: [{ type: "text", text: `Found ${projects.length} projects:\n\n${formatted}` }] };
263
- }
264
- if (!project) {
265
- return { content: [{ type: "text", text: "Error: project is required unless listProjects=true" }], isError: true };
266
- }
267
- const projectRecord = await requireProject(project);
268
- const recentMemories = await searchMemories({ query: "", project, limit });
269
- const learnings = await getLearnings(project, 5);
270
- const context = {
271
- project: projectRecord,
272
- recentMemories: recentMemories.slice(0, limit),
273
- recentLearnings: learnings
274
- };
275
- return { content: [{ type: "text", text: JSON.stringify(context, null, 2) }] };
276
- }))
277
- toolCount++;
278
- if (safeRegisterTool(server, "squish_learn", {
279
- description: "Record learning: success, failure, fix, or insight. Auto-links to similar memories if above 85% similarity.",
280
- inputSchema: {
281
- type: z.enum(["success", "failure", "fix", "insight"]).describe("Learning type (required)"),
282
- content: z.string().describe("What happened or what was learned"),
283
- context: z.string().optional().describe("Additional context or result"),
284
- action: z.string().optional().describe("Action performed"),
285
- target: z.string().optional().describe("Target file or resource"),
286
- memoryId: z.string().uuid().optional().describe("Optional memory ID to link this learning to"),
287
- autoLink: z.boolean().optional().describe("Auto-link to similar memories (default: true)"),
288
- project: z.string().optional().describe("Project path")
289
- }
290
- }, async ({ type, content, context, action, target, memoryId, autoLink, project }) => {
291
- const learning = await createLearning({ type, content, context, action, target, project, memoryId, autoLink });
292
- return { content: [{ type: "text", text: `Learning recorded: ${learning.id}\nType: ${type}\nContent: ${content}${memoryId ? '\nLinked to memory: ' + memoryId : ''}` }] };
293
- }))
294
- toolCount++;
295
- if (safeRegisterTool(server, "squish_health", {
296
- description: "Check Squish system health status",
297
- inputSchema: {}
298
- }, async () => {
299
- const qmdClient = await getQMDClient();
300
- const qmdAvailable = await qmdClient.isAvailable();
301
- return { content: [{ type: "text", text: JSON.stringify({
302
- status: "ok",
303
- version: SERVER_VERSION,
304
- mode: config.isManagedMode ? "managed" : "local",
305
- embeddings: config.embeddingsProvider,
306
- qmd: qmdAvailable ? "available" : "unavailable",
307
- timestamp: new Date().toISOString()
308
- }, null, 2) }] };
309
- }))
310
- toolCount++;
311
- if (safeRegisterTool(server, "squish_stats", {
312
- description: "Get memory statistics for a project",
313
- inputSchema: {
314
- project: z.string().optional().describe("Project path (defaults to current)")
315
- }
316
- }, async ({ project }) => {
317
- const stats = await getMemoryStats(project || process.cwd());
318
- return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] };
319
- }))
320
- toolCount++;
321
- if (safeRegisterTool(server, "squish_confidence", {
322
- description: "Get or set confidence level for a memory (0-100)",
323
- inputSchema: {
324
- memoryId: z.string().uuid().describe("Memory ID"),
325
- level: z.number().min(0).max(100).optional().describe("Confidence level to set (0-100)")
326
- }
327
- }, async ({ memoryId, level }) => {
328
- const db = await getDb();
329
- const schema = await getSchema();
330
- if (level !== undefined) {
331
- const sqliteDb = db;
332
- await sqliteDb.update(schema.memories)
333
- .set({ confidence: level })
334
- .where(eq(schema.memories.id, memoryId));
335
- return { content: [{ type: "text", text: `Confidence set to ${level} for memory ${memoryId}` }] };
336
- }
337
- const sqliteDb2 = db;
338
- const result = await sqliteDb2.select().from(schema.memories).where(eq(schema.memories.id, memoryId));
339
- if (result.length === 0) {
340
- return { content: [{ type: "text", text: `Memory not found: ${memoryId}` }], isError: true };
341
- }
342
- return { content: [{ type: "text", text: `Confidence for memory ${memoryId}: ${result[0].confidence}` }] };
343
- }))
344
- toolCount++;
345
- if (safeRegisterTool(server, "squish_pin", {
346
- description: "Pin or unpin a memory to prevent consolidation",
347
- inputSchema: {
348
- memoryId: z.string().uuid().describe("Memory ID"),
349
- pinned: z.boolean().default(true).describe("Pin (true) or unpin (false)")
350
- }
351
- }, async ({ memoryId, pinned }) => {
352
- const db = await getDb();
353
- const schema = await getSchema();
354
- const sqliteDb = db;
355
- await sqliteDb.update(schema.memories)
356
- .set({ isPinned: pinned })
357
- .where(eq(schema.memories.id, memoryId));
358
- return { content: [{ type: "text", text: `Memory ${memoryId} ${pinned ? 'pinned' : 'unpinned'}` }] };
359
- }))
360
- toolCount++;
361
- // Register tool to set encryption passphrase
362
- if (safeRegisterTool(server, "squish_set_passphrase", {
363
- description: "Set the client-side encryption passphrase (writes to .env in data directory)",
364
- inputSchema: {
365
- passphrase: z.string().min(1).describe("Encryption passphrase to store")
366
- }
367
- }, async ({ passphrase }) => {
368
- const envPath = join(config.dataDir, ".env");
369
- try {
370
- writeFileSync(envPath, `SQUISH_ENCRYPTION_PASSPHRASE=${passphrase}\n`, { flag: "w" });
371
- return { content: [{ type: "text", text: `Passphrase written to ${envPath}` }] };
372
- }
373
- catch (error) {
374
- return { content: [{ type: "text", text: `Failed to write passphrase: ${error}` }], isError: true };
375
- }
376
- }))
377
- toolCount++;
378
- // Register tool to rotate encryption passphrase (re-encrypt all encrypted memories)
379
- if (safeRegisterTool(server, "squish_rotate_key", {
380
- description: "Rotate the encryption passphrase - re-encrypts all memories with a new passphrase",
381
- inputSchema: {
382
- oldPassphrase: z.string().min(1).describe("Current encryption passphrase"),
383
- newPassphrase: z.string().min(1).describe("New encryption passphrase")
384
- }
385
- }, async ({ oldPassphrase, newPassphrase }) => {
386
- try {
387
- const db = await getDb();
388
- const schema = await getSchema();
389
- // Fetch all encrypted memories
390
- const sqliteDb = db;
391
- const encryptedMemories = await sqliteDb
392
- .select()
393
- .from(schema.memories)
394
- .where(eq(schema.memories.isEncrypted, true));
395
- let rotated = 0;
396
- for (const mem of encryptedMemories) {
397
- try {
398
- // Decrypt with old passphrase
399
- const decrypted = decrypt(mem.encryptedContent, mem.encryptionNonce, oldPassphrase);
400
- // Re-encrypt with new passphrase
401
- const { ciphertext, nonce } = encrypt(decrypted, newPassphrase);
402
- // Update memory
403
- await sqliteDb
404
- .update(schema.memories)
405
- .set({
406
- encryptedContent: ciphertext,
407
- encryptionNonce: nonce
408
- })
409
- .where(eq(schema.memories.id, mem.id));
410
- rotated++;
411
- }
412
- catch (e) {
413
- // Skip memories that fail to decrypt (wrong passphrase)
414
- }
415
- }
416
- // Update .env file with new passphrase
417
- const envPath = join(config.dataDir, ".env");
418
- writeFileSync(envPath, `SQUISH_ENCRYPTION_PASSPHRASE=${newPassphrase}\n`, { flag: "w" });
419
- return { content: [{ type: "text", text: `Rotated encryption key for ${rotated} memories. New passphrase saved to ${envPath}` }] };
420
- }
421
- catch (error) {
422
- return { content: [{ type: "text", text: `Failed to rotate key: ${error.message}` }], isError: true };
423
- }
424
- }))
425
- toolCount++;
426
- // Helper function for date filtering (same as in index.ts)
427
- function parseDate(input) {
428
- if (!input)
429
- return null;
430
- const now = new Date();
431
- const lower = input.toLowerCase().trim();
432
- if (!lower)
433
- return null;
434
- const parsed = new Date(input);
435
- if (!isNaN(parsed.getTime()))
436
- return parsed;
437
- const dayMatch = lower.match(/(\d+)\s*day/i);
438
- const weekMatch = lower.match(/(\d+)\s*week/i);
439
- const monthMatch = lower.match(/(\d+)\s*month/i);
440
- if (lower === 'today') {
441
- const d = new Date(now);
442
- d.setHours(0, 0, 0, 0);
443
- return d;
444
- }
445
- if (lower === 'yesterday')
446
- return new Date(now.getTime() - 86400000);
447
- if (lower === 'thisweek' || lower === 'this week') {
448
- const d = new Date(now);
449
- d.setDate(d.getDate() - d.getDay());
450
- d.setHours(0, 0, 0, 0);
451
- return d;
452
- }
453
- if (dayMatch)
454
- return new Date(now.getTime() - parseInt(dayMatch[1]) * 86400000);
455
- if (weekMatch)
456
- return new Date(now.getTime() - parseInt(weekMatch[1]) * 604800000);
457
- if (monthMatch)
458
- return new Date(now.getTime() - parseInt(monthMatch[1]) * 2592000000);
459
- return null;
460
- }
461
- function filterByDateRange(items, since, until) {
462
- const sinceDate = parseDate(since || '');
463
- const untilDate = parseDate(until || '');
464
- return items.filter(item => {
465
- if (!item.createdAt)
466
- return true;
467
- const created = new Date(item.createdAt);
468
- if (sinceDate && created < sinceDate)
469
- return false;
470
- if (untilDate && created > untilDate)
471
- return false;
472
- return true;
473
- });
474
- }
475
- // squish_recent - Unified recent memories (replaces squish_today, squish_yesterday, squish_thisweek)
476
- if (safeRegisterTool(server, "squish_recent", {
477
- description: "Get recent memories by period (today, yesterday, thisweek, 7days, 30days, or custom)",
478
- inputSchema: {
479
- period: z.string().optional().describe("Period: today, yesterday, thisweek, 7days, 14days, 30days, 90days"),
480
- since: z.string().optional().describe("Start date (alternative to period, e.g., '3 days', '2026-01-01')"),
481
- until: z.string().optional().describe("End date (alternative to period, e.g., 'now', '2026-01-15')"),
482
- limit: z.number().optional().describe("Max results to return"),
483
- project: z.string().optional().describe("Project path (defaults to current)")
484
- }
485
- }, async ({ period = 'today', since, until, limit = 10, project }) => {
486
- const proj = project || process.cwd();
487
- let sinceDate, untilDate;
488
- if (since && until) {
489
- sinceDate = since;
490
- untilDate = until;
491
- }
492
- else if (since) {
493
- sinceDate = since;
494
- untilDate = 'now';
495
- }
496
- else {
497
- const periodMap = {
498
- today: ['today', 'now'],
499
- yesterday: ['yesterday', 'today'],
500
- thisweek: ['thisweek', 'now'],
501
- '7days': ['7 days', 'now'],
502
- '14days': ['14 days', 'now'],
503
- '30days': ['30 days', 'now'],
504
- '90days': ['90 days', 'now'],
505
- };
506
- const mapped = periodMap[period];
507
- if (mapped) {
508
- [sinceDate, untilDate] = mapped;
509
- }
510
- else {
511
- sinceDate = period;
512
- untilDate = 'now';
513
- }
514
- }
515
- const results = await getRecent(proj, 100);
516
- const filtered = filterByDateRange(results, sinceDate, untilDate);
517
- const limited = filtered.slice(0, limit);
518
- return { content: [{ type: "text", text: JSON.stringify({ ok: true, period, since: sinceDate, until: untilDate, count: limited.length, results: limited }, null, 2) }] };
519
- }))
520
- toolCount++;
521
- // squish_stale - Show stale memories
522
- if (safeRegisterTool(server, "squish_stale", {
523
- description: "Show stale memories (old, low-confidence, or rarely accessed)",
524
- inputSchema: {
525
- days: z.number().optional().describe("Show memories older than N days"),
526
- limit: z.number().optional().describe("Max results to return"),
527
- project: z.string().optional().describe("Project path (defaults to current)")
528
- }
529
- }, async ({ days = 30, limit = 20, project }) => {
530
- const proj = project || process.cwd();
531
- const cutoffDate = new Date(Date.now() - days * 86400000);
532
- const results = await getRecent(proj, 500);
533
- const stale = results.filter((m) => {
534
- const created = m.createdAt ? new Date(m.createdAt) : null;
535
- const isOld = created && created < cutoffDate;
536
- const isLowConfidence = m.confidenceLevel === 'outdated' || m.confidenceLevel === 'speculative';
537
- const hasLowImportance = (m.importance || 50) < 40;
538
- return isOld || isLowConfidence || hasLowImportance;
539
- });
540
- const limited = stale.slice(0, limit);
541
- const summary = {
542
- totalStale: stale.length,
543
- old: stale.filter((m) => m.createdAt && new Date(m.createdAt) < cutoffDate).length,
544
- lowConfidence: stale.filter((m) => m.confidenceLevel === 'outdated' || m.confidenceLevel === 'speculative').length,
545
- lowImportance: stale.filter((m) => (m.importance || 50) < 40).length,
546
- };
547
- return { content: [{ type: "text", text: JSON.stringify({ ok: true, summary, memories: limited }, null, 2) }] };
548
- }))
549
- toolCount++;
550
- // squish_note - Quick brain dump
551
- if (safeRegisterTool(server, "squish_note", {
552
- description: "Quick brain dump - store a raw memory to process later",
553
- inputSchema: {
554
- content: z.string().describe("The note content to store"),
555
- project: z.string().optional().describe("Project path (defaults to current)")
556
- }
557
- }, async ({ content, project }) => {
558
- const result = await rememberMemory({
559
- content,
560
- type: 'observation',
561
- tags: ['note', 'quick'],
562
- project: project || process.cwd(),
563
- });
564
- return { content: [{ type: "text", text: JSON.stringify({ ok: true, message: 'Note saved', id: result.id }, null, 2) }] };
565
- }))
566
- toolCount++;
567
- // squish_tag - Manage tags on memories
568
- if (safeRegisterTool(server, "squish_tag", {
569
- description: "Add or remove tags from memories",
570
- inputSchema: {
571
- action: z.enum(["add", "remove"]).describe("Action: add or remove"),
572
- tag: z.string().describe("Tag name to add or remove"),
573
- search: z.string().optional().describe("Search query to match memories"),
574
- olderThan: z.string().optional().describe("Only tag memories older than (e.g., '30 days')"),
575
- type: z.string().optional().describe("Filter by memory type"),
576
- confirm: z.boolean().optional().describe("Actually execute the changes (default is dry-run)"),
577
- limit: z.number().optional().describe("Max memories to process"),
578
- project: z.string().optional().describe("Project path (defaults to current)")
579
- }
580
- }, async ({ action, tag, search, olderThan, type, confirm = false, limit = 50, project }) => {
581
- const proj = project || process.cwd();
582
- const db = await getDb();
583
- const schema = await getSchema();
584
- const sqliteDb = db;
585
- let results = search
586
- ? await searchMemories({ query: search, type: type, limit: limit * 2, project: proj })
587
- : await getRecent(proj, limit * 2);
588
- if (olderThan) {
589
- results = filterByDateRange(results, '', olderThan);
590
- }
591
- const tagged = [];
592
- for (const mem of results.slice(0, limit)) {
593
- const currentTags = mem.tags || [];
594
- const newTags = action === 'add'
595
- ? [...new Set([...currentTags, tag])]
596
- : currentTags.filter((t) => t !== tag);
597
- await sqliteDb.update(schema.memories).set({ tags: serializeTags(newTags) }).where(eq(schema.memories.id, mem.id));
598
- tagged.push(mem.id);
599
- }
600
- return { content: [{ type: "text", text: JSON.stringify({ ok: true, action, tag, matched: results.length, processed: tagged.length, dryRun: !confirm }, null, 2) }] };
601
- }))
602
- toolCount++;
603
- console.error(`[MCP] Tool registration complete. Registered ${toolCount} tools.`);
604
- return { server, toolCount };
605
- }
606
- async function runStdio(server, toolCount) {
607
- console.error(`[MCP] Starting in STDIO mode...`);
608
- const transport = new StdioServerTransport();
609
- transport.onclose = () => {
610
- console.error(`[MCP] STDIO transport closed`);
611
- };
612
- await server.connect(transport);
613
- console.error(`[MCP] Connected via stdio. ${toolCount} tools available.`);
614
- // Keep process alive - wait for stdin to close or process signals
615
- await new Promise((resolve) => {
616
- process.stdin.on('close', () => {
617
- console.error(`[MCP] STDIO stdin closed, shutting down`);
618
- resolve();
619
- });
620
- process.on('SIGINT', () => {
621
- console.error(`[MCP] Received SIGINT, shutting down`);
622
- resolve();
623
- });
624
- process.on('SIGTERM', () => {
625
- console.error(`[MCP] Received SIGTERM, shutting down`);
626
- resolve();
627
- });
628
- });
629
- }
630
- async function runHttp(server, port) {
631
- console.error(`[MCP] Starting in HTTP mode on port ${port}...`);
632
- const app = express();
633
- app.use(express.json());
634
- const transports = new Map();
635
- app.get("/health", (req, res) => {
636
- res.json({ status: "ok", server: SERVER_NAME, version: SERVER_VERSION });
637
- });
638
- app.get("/sse", async (req, res) => {
639
- const transport = new SSEServerTransport("/message", res);
640
- const sessionId = Math.random().toString(36).substring(7);
641
- transports.set(sessionId, transport);
642
- console.error(`[MCP] SSE connection established: ${sessionId}`);
643
- await server.connect(transport);
644
- req.on("close", () => {
645
- console.error(`[MCP] SSE connection closed: ${sessionId}`);
646
- transports.delete(sessionId);
647
- });
648
- });
649
- app.post("/message", async (req, res) => {
650
- const sessionId = req.headers["mcp-session-id"] || "default";
651
- const transport = transports.get(sessionId);
652
- if (!transport) {
653
- res.status(400).json({ error: "No active session" });
654
- return;
655
- }
656
- try {
657
- await transport.handlePostMessage(req, res);
658
- }
659
- catch (error) {
660
- console.error(`[MCP] Error handling message:`, error);
661
- res.status(500).json({ error: "Internal server error" });
662
- }
663
- });
664
- await new Promise((resolve) => app.listen(port, () => {
665
- console.error(`[MCP] HTTP server listening on port ${port}`);
666
- console.error(`[MCP] SSE endpoint: http://localhost:${port}/sse`);
667
- console.error(`[MCP] Health: http://localhost:${port}/health`);
668
- resolve();
669
- }));
670
- }
671
- async function runHealthCheck() {
672
- console.error(`[MCP] Running health check...`);
673
- try {
674
- const { server, toolCount } = createSquishServer();
675
- console.error(`[MCP] Health check passed. Server initialized with ${toolCount} tools.`);
676
- process.exit(0);
677
- }
678
- catch (error) {
679
- console.error(`[MCP] Health check failed:`, error);
680
- process.exit(1);
681
- }
682
- }
683
- async function main() {
684
- try {
685
- console.error(`[${SERVER_NAME}] v${SERVER_VERSION} initializing...`);
686
- console.error(`[${SERVER_NAME}] Mode: ${config.isManagedMode ? "managed" : "local"}`);
687
- console.error(`[${SERVER_NAME}] Embeddings: ${config.embeddingsProvider}`);
688
- const { mode, port, health } = parseArgs();
689
- if (health) {
690
- await runHealthCheck();
691
- return;
692
- }
693
- const { server, toolCount } = createSquishServer();
694
- // Start background worker for lifecycle maintenance, decay, etc.
695
- try {
696
- await startWorker();
697
- console.error(`[${SERVER_NAME}] Background worker started`);
698
- }
699
- catch (error) {
700
- console.error(`[${SERVER_NAME}] Warning: Failed to start background worker:`, error);
701
- }
702
- // Initialize cron scheduler for scheduled jobs
703
- try {
704
- await initializeScheduler();
705
- console.error(`[${SERVER_NAME}] Cron scheduler initialized`);
706
- }
707
- catch (error) {
708
- console.error(`[${SERVER_NAME}] Warning: Failed to initialize scheduler:`, error);
709
- }
710
- const shutdown = async () => {
711
- console.error(`[${SERVER_NAME}] Shutting down...`);
712
- try {
713
- await stopWorker();
714
- console.error(`[${SERVER_NAME}] Background worker stopped`);
715
- }
716
- catch (error) {
717
- console.error(`[${SERVER_NAME}] Error stopping worker:`, error);
718
- }
719
- process.exit(0);
720
- };
721
- process.on("SIGINT", shutdown);
722
- process.on("SIGTERM", shutdown);
723
- if (mode === "stdio") {
724
- await runStdio(server, toolCount);
725
- }
726
- else {
727
- await runHttp(server, port);
728
- }
729
- }
730
- catch (error) {
731
- console.error(`[${SERVER_NAME}] Fatal error:`, error);
732
- process.exit(1);
733
- }
734
- }
735
- main().catch((error) => {
736
- console.error(`[${SERVER_NAME}] Fatal error:`, error);
737
- process.exit(1);
738
- });
739
- //# sourceMappingURL=mcp-server.js.map