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,142 +0,0 @@
1
- import { logger } from '../logger.js';
2
- import { config } from '../../config.js';
3
- export async function getGoogleMultimodalEmbedding(input) {
4
- if (!config.googleCloudApiKey && !config.googleCloudProject) {
5
- logger.debug('Google Cloud credentials not configured');
6
- return null;
7
- }
8
- try {
9
- const endpoint = config.googleCloudLocation === 'global'
10
- ? `https://aiplatform.googleapis.com/v1/projects/${config.googleCloudProject}/locations/${config.googleCloudLocation}/publishers/google/models/multimodalembedding@001:predict`
11
- : `https://${config.googleCloudLocation}-aiplatform.googleapis.com/v1/projects/${config.googleCloudProject}/locations/${config.googleCloudLocation}/publishers/google/models/multimodalembedding@001:predict`;
12
- const instances = [];
13
- if (input.text) {
14
- instances.push({ text: input.text });
15
- }
16
- if (input.image) {
17
- const imageBytes = typeof input.image === 'string'
18
- ? input.image
19
- : input.image.toString('base64');
20
- instances.push({
21
- image: {
22
- bytesBase64Encoded: imageBytes,
23
- },
24
- });
25
- }
26
- if (input.video) {
27
- instances.push({
28
- video: {
29
- gcsUri: input.video,
30
- },
31
- });
32
- }
33
- if (instances.length === 0) {
34
- return null;
35
- }
36
- const response = await fetch(endpoint, {
37
- method: 'POST',
38
- headers: {
39
- 'Content-Type': 'application/json',
40
- 'Authorization': `Bearer ${await getGoogleAccessToken()}`,
41
- },
42
- body: JSON.stringify({
43
- instances,
44
- parameters: {
45
- dimension: 1408,
46
- },
47
- }),
48
- });
49
- if (!response.ok) {
50
- const errorText = await response.text();
51
- logger.warn(`Google Multimodal embeddings failed: ${response.status} ${errorText}`);
52
- return null;
53
- }
54
- const data = await response.json();
55
- const predictions = data.predictions || [];
56
- const result = {
57
- embedding: predictions[0]?.embedding || [],
58
- };
59
- if (input.text && predictions[0]?.textEmbedding) {
60
- result.textEmbedding = predictions[0].textEmbedding;
61
- }
62
- if (input.image && predictions[0]?.imageEmbedding) {
63
- result.imageEmbedding = predictions[0].imageEmbedding;
64
- }
65
- if (input.video && predictions[0]?.videoEmbedding) {
66
- result.videoEmbedding = predictions[0].videoEmbedding;
67
- }
68
- return result.embedding.length > 0 ? result : null;
69
- }
70
- catch (error) {
71
- logger.error('Google Multimodal embedding error:', error);
72
- return null;
73
- }
74
- }
75
- let cachedAccessToken = null;
76
- let tokenExpiry = 0;
77
- async function getGoogleAccessToken() {
78
- if (config.googleCloudApiKey) {
79
- return config.googleCloudApiKey;
80
- }
81
- if (cachedAccessToken && Date.now() < tokenExpiry) {
82
- return cachedAccessToken;
83
- }
84
- if (!process.env.GOOGLE_APPLICATION_CREDENTIALS) {
85
- throw new Error('Google Application Credentials not set');
86
- }
87
- try {
88
- const credentials = JSON.parse(await import('fs').then(fs => fs.promises.readFile(process.env.GOOGLE_APPLICATION_CREDENTIALS, 'utf-8')));
89
- const now = Math.floor(Date.now() / 1000);
90
- const jwt = await createJWT(credentials);
91
- const tokenResponse = await fetch('https://oauth2.googleapis.com/token', {
92
- method: 'POST',
93
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
94
- body: new URLSearchParams({
95
- grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
96
- assertion: jwt,
97
- }),
98
- });
99
- if (!tokenResponse.ok) {
100
- throw new Error('Failed to get Google access token');
101
- }
102
- const tokenData = await tokenResponse.json();
103
- cachedAccessToken = tokenData.access_token;
104
- tokenExpiry = now + tokenData.expires_in - 60;
105
- return cachedAccessToken;
106
- }
107
- catch (error) {
108
- logger.error('Failed to get Google access token:', error);
109
- throw error;
110
- }
111
- }
112
- async function createJWT(credentials) {
113
- const now = Math.floor(Date.now() / 1000);
114
- const header = {
115
- alg: 'RS256',
116
- typ: 'JWT',
117
- };
118
- const payload = {
119
- iss: credentials.client_email,
120
- sub: credentials.client_email,
121
- aud: 'https://oauth2.googleapis.com/token',
122
- iat: now,
123
- exp: now + 3600,
124
- scope: 'https://www.googleapis.com/auth/cloud-platform',
125
- };
126
- const crypto = await import('crypto');
127
- const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64url');
128
- const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64url');
129
- const signatureInput = `${encodedHeader}.${encodedPayload}`;
130
- const sign = crypto.createSign('RSA-SHA256');
131
- sign.update(signatureInput);
132
- const signature = sign.sign(credentials.private_key, 'base64url');
133
- return `${signatureInput}.${signature}`;
134
- }
135
- export function isMultimodalInput(input) {
136
- return (typeof input === 'object' &&
137
- (typeof input.text === 'string' ||
138
- Buffer.isBuffer(input.image) ||
139
- typeof input.image === 'string' ||
140
- typeof input.video === 'string'));
141
- }
142
- //# sourceMappingURL=google-multimodal.js.map
@@ -1,136 +0,0 @@
1
- /**
2
- * QMD MCP Client
3
- *
4
- * Connects to QMD (Quick Markdown Search) MCP server for hybrid search capabilities.
5
- * QMD provides BM25 full-text search, vector semantic search, and LLM re-ranking.
6
- *
7
- * Installation: bun install -g qmd
8
- * GitHub: https://github.com/tobi/qmd
9
- *
10
- * QMD MCP Tools:
11
- * - qmd_search: Fast BM25 keyword search
12
- * - qmd_vsearch: Semantic vector search
13
- * - qmd_query: Hybrid search with re-ranking (best quality)
14
- * - qmd_get: Retrieve document by path or docid
15
- * - qmd_multi_get: Retrieve multiple documents
16
- * - qmd_status: Index health and collection info
17
- */
18
- export interface QMDSearchOptions {
19
- query: string;
20
- collection?: string;
21
- limit?: number;
22
- minScore?: number;
23
- }
24
- export interface QMDSearchResult {
25
- docid: string;
26
- path: string;
27
- title: string;
28
- context: string;
29
- score: number;
30
- snippet: string;
31
- }
32
- export interface QMDStatusResult {
33
- indexHealth: string;
34
- collections: Array<{
35
- name: string;
36
- path: string;
37
- documentCount: number;
38
- }>;
39
- }
40
- export interface QMDGetOptions {
41
- pathOrDocid: string;
42
- full?: boolean;
43
- maxBytes?: number;
44
- }
45
- /**
46
- * QMD MCP Client class
47
- *
48
- * Manages connection to QMD MCP server and provides methods for
49
- * search, document retrieval, and status checking.
50
- */
51
- export declare class QMDClient {
52
- private client;
53
- private transport;
54
- private connected;
55
- private connecting;
56
- /**
57
- * Check if QMD is installed on the system
58
- */
59
- checkQMDInstalled(): Promise<boolean>;
60
- /**
61
- * Connect to QMD MCP server
62
- * QMD must be installed: bun install -g qmd
63
- */
64
- connect(): Promise<boolean>;
65
- /**
66
- * Check if QMD is available
67
- */
68
- isAvailable(): Promise<boolean>;
69
- /**
70
- * Fast BM25 keyword search
71
- * Uses SQLite FTS5 for fast full-text search
72
- */
73
- search(options: QMDSearchOptions): Promise<QMDSearchResult[]>;
74
- /**
75
- * Semantic vector search
76
- * Uses embedding-based similarity search
77
- */
78
- vsearch(options: QMDSearchOptions): Promise<QMDSearchResult[]>;
79
- /**
80
- * Hybrid search with re-ranking (best quality)
81
- * Combines BM25 + vector search + LLM re-ranking
82
- */
83
- query(options: QMDSearchOptions): Promise<QMDSearchResult[]>;
84
- /**
85
- * Get QMD index status and collection info
86
- */
87
- status(): Promise<QMDStatusResult | null>;
88
- /**
89
- * Get document by path or docid
90
- */
91
- get(options: QMDGetOptions): Promise<string>;
92
- /**
93
- * Get multiple documents by glob pattern or list
94
- */
95
- multiGet(patternOrList: string | string[], options?: {
96
- maxBytes?: number;
97
- limit?: number;
98
- }): Promise<string[]>;
99
- /**
100
- * Disconnect from QMD MCP server
101
- */
102
- disconnect(): Promise<void>;
103
- /**
104
- * Parse search results from QMD response
105
- */
106
- private parseSearchResults;
107
- /**
108
- * Parse QMD's text output format into structured results
109
- */
110
- private parseTextSearchResults;
111
- /**
112
- * Finalize a parsed result with defaults
113
- */
114
- private finalizeResult;
115
- /**
116
- * Parse status result
117
- */
118
- private parseStatusResult;
119
- /**
120
- * Parse get result
121
- */
122
- private parseGetResult;
123
- /**
124
- * Parse multi-get result
125
- */
126
- private parseMultiGetResult;
127
- }
128
- /**
129
- * Get the singleton QMD client instance
130
- */
131
- export declare function getQMDClient(): Promise<QMDClient>;
132
- /**
133
- * Reset the singleton QMD client (useful for testing)
134
- */
135
- export declare function resetQMDClient(): void;
136
- //# sourceMappingURL=qmd-client.d.ts.map
@@ -1,403 +0,0 @@
1
- /**
2
- * QMD MCP Client
3
- *
4
- * Connects to QMD (Quick Markdown Search) MCP server for hybrid search capabilities.
5
- * QMD provides BM25 full-text search, vector semantic search, and LLM re-ranking.
6
- *
7
- * Installation: bun install -g qmd
8
- * GitHub: https://github.com/tobi/qmd
9
- *
10
- * QMD MCP Tools:
11
- * - qmd_search: Fast BM25 keyword search
12
- * - qmd_vsearch: Semantic vector search
13
- * - qmd_query: Hybrid search with re-ranking (best quality)
14
- * - qmd_get: Retrieve document by path or docid
15
- * - qmd_multi_get: Retrieve multiple documents
16
- * - qmd_status: Index health and collection info
17
- */
18
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
19
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
20
- import { spawn } from 'child_process';
21
- import { logger } from '../logger.js';
22
- /**
23
- * QMD MCP Client class
24
- *
25
- * Manages connection to QMD MCP server and provides methods for
26
- * search, document retrieval, and status checking.
27
- */
28
- export class QMDClient {
29
- client = null;
30
- transport = null;
31
- connected = false;
32
- connecting = false;
33
- /**
34
- * Check if QMD is installed on the system
35
- */
36
- async checkQMDInstalled() {
37
- return new Promise((resolve) => {
38
- const process = spawn('qmd', ['--version'], {
39
- stdio: 'ignore',
40
- shell: true
41
- });
42
- process.on('close', (code) => {
43
- resolve(code === 0);
44
- });
45
- process.on('error', () => {
46
- resolve(false);
47
- });
48
- // Timeout after 5 seconds
49
- setTimeout(() => {
50
- process.kill();
51
- resolve(false);
52
- }, 5000);
53
- });
54
- }
55
- /**
56
- * Connect to QMD MCP server
57
- * QMD must be installed: bun install -g qmd
58
- */
59
- async connect() {
60
- if (this.connected || this.connecting) {
61
- return this.connected;
62
- }
63
- this.connecting = true;
64
- try {
65
- // Check if QMD is installed
66
- const installed = await this.checkQMDInstalled();
67
- if (!installed) {
68
- logger.warn('QMD is not installed. Install with: bun install -g qmd');
69
- this.connecting = false;
70
- return false;
71
- }
72
- this.transport = new StdioClientTransport({
73
- command: 'qmd',
74
- args: ['mcp'],
75
- stderr: 'inherit'
76
- });
77
- this.client = new Client({ name: 'squish-qmd-client', version: '1.0.0' }, { capabilities: {} });
78
- await this.client.connect(this.transport);
79
- this.connected = true;
80
- this.connecting = false;
81
- logger.info('Connected to QMD MCP server');
82
- return true;
83
- }
84
- catch (error) {
85
- logger.warn(`QMD MCP connection failed: ${error}`);
86
- this.connected = false;
87
- this.connecting = false;
88
- return false;
89
- }
90
- }
91
- /**
92
- * Check if QMD is available
93
- */
94
- async isAvailable() {
95
- if (this.connected && this.client) {
96
- return true;
97
- }
98
- return await this.connect();
99
- }
100
- /**
101
- * Fast BM25 keyword search
102
- * Uses SQLite FTS5 for fast full-text search
103
- */
104
- async search(options) {
105
- if (!this.connected || !this.client) {
106
- throw new Error('QMD client not connected');
107
- }
108
- const result = await this.client.callTool({
109
- name: 'qmd_search',
110
- arguments: {
111
- query: options.query,
112
- collection: options.collection,
113
- n: options.limit || 10,
114
- minScore: options.minScore || 0
115
- }
116
- });
117
- return this.parseSearchResults(result);
118
- }
119
- /**
120
- * Semantic vector search
121
- * Uses embedding-based similarity search
122
- */
123
- async vsearch(options) {
124
- if (!this.connected || !this.client) {
125
- throw new Error('QMD client not connected');
126
- }
127
- const result = await this.client.callTool({
128
- name: 'qmd_vsearch',
129
- arguments: {
130
- query: options.query,
131
- collection: options.collection,
132
- n: options.limit || 10,
133
- minScore: options.minScore || 0
134
- }
135
- });
136
- return this.parseSearchResults(result);
137
- }
138
- /**
139
- * Hybrid search with re-ranking (best quality)
140
- * Combines BM25 + vector search + LLM re-ranking
141
- */
142
- async query(options) {
143
- if (!this.connected || !this.client) {
144
- throw new Error('QMD client not connected');
145
- }
146
- const result = await this.client.callTool({
147
- name: 'qmd_query',
148
- arguments: {
149
- query: options.query,
150
- collection: options.collection,
151
- n: options.limit || 10,
152
- minScore: options.minScore || 0
153
- }
154
- });
155
- return this.parseSearchResults(result);
156
- }
157
- /**
158
- * Get QMD index status and collection info
159
- */
160
- async status() {
161
- if (!this.connected || !this.client) {
162
- return null;
163
- }
164
- try {
165
- const result = await this.client.callTool({
166
- name: 'qmd_status',
167
- arguments: {}
168
- });
169
- return this.parseStatusResult(result);
170
- }
171
- catch (error) {
172
- logger.debug(`QMD status check failed: ${error}`);
173
- return null;
174
- }
175
- }
176
- /**
177
- * Get document by path or docid
178
- */
179
- async get(options) {
180
- if (!this.connected || !this.client) {
181
- throw new Error('QMD client not connected');
182
- }
183
- const args = {
184
- path: options.pathOrDocid
185
- };
186
- if (options.full !== undefined) {
187
- args.full = options.full;
188
- }
189
- if (options.maxBytes !== undefined) {
190
- args['max-bytes'] = options.maxBytes;
191
- }
192
- const result = await this.client.callTool({
193
- name: 'qmd_get',
194
- arguments: args
195
- });
196
- return this.parseGetResult(result);
197
- }
198
- /**
199
- * Get multiple documents by glob pattern or list
200
- */
201
- async multiGet(patternOrList, options) {
202
- if (!this.connected || !this.client) {
203
- throw new Error('QMD client not connected');
204
- }
205
- const args = {
206
- pattern: Array.isArray(patternOrList) ? patternOrList.join(',') : patternOrList
207
- };
208
- if (options?.maxBytes !== undefined) {
209
- args['max-bytes'] = options.maxBytes;
210
- }
211
- if (options?.limit !== undefined) {
212
- args.l = options.limit;
213
- }
214
- const result = await this.client.callTool({
215
- name: 'qmd_multi_get',
216
- arguments: args
217
- });
218
- return this.parseMultiGetResult(result);
219
- }
220
- /**
221
- * Disconnect from QMD MCP server
222
- */
223
- async disconnect() {
224
- if (this.client) {
225
- try {
226
- await this.client.close();
227
- }
228
- catch (error) {
229
- logger.debug(`Error closing QMD client: ${error}`);
230
- }
231
- this.connected = false;
232
- this.client = null;
233
- this.transport = null;
234
- }
235
- }
236
- /**
237
- * Parse search results from QMD response
238
- */
239
- parseSearchResults(result) {
240
- if (!result || !result.content) {
241
- return [];
242
- }
243
- const content = result.content;
244
- // Handle text output format
245
- if (typeof content === 'string') {
246
- return this.parseTextSearchResults(content);
247
- }
248
- // Handle array content format
249
- if (Array.isArray(content)) {
250
- const textContent = content
251
- .filter((item) => item.type === 'text')
252
- .map((item) => item.text)
253
- .join('\n');
254
- return this.parseTextSearchResults(textContent);
255
- }
256
- return [];
257
- }
258
- /**
259
- * Parse QMD's text output format into structured results
260
- */
261
- parseTextSearchResults(text) {
262
- const results = [];
263
- const lines = text.split('\n');
264
- let currentResult = null;
265
- for (const line of lines) {
266
- // Match path line: "docs/guide.md:42 #a1b2c3"
267
- const pathMatch = line.match(/^([^\s:]+):(\d+)\s+([#a-zA-Z0-9]+)?/);
268
- if (pathMatch) {
269
- if (currentResult && currentResult.path) {
270
- results.push(this.finalizeResult(currentResult));
271
- }
272
- currentResult = {
273
- path: pathMatch[1],
274
- docid: pathMatch[3] || '',
275
- score: 0,
276
- snippet: ''
277
- };
278
- continue;
279
- }
280
- // Match score line: "Score: 93%"
281
- const scoreMatch = line.match(/^Score:\s+(\d+)%/);
282
- if (scoreMatch && currentResult) {
283
- currentResult.score = parseInt(scoreMatch[1]) / 100;
284
- continue;
285
- }
286
- // Match title line: "Title: Some Title"
287
- const titleMatch = line.match(/^Title:\s+(.+)/);
288
- if (titleMatch && currentResult) {
289
- currentResult.title = titleMatch[1];
290
- continue;
291
- }
292
- // Match context line: "Context: Some context"
293
- const contextMatch = line.match(/^Context:\s+(.+)/);
294
- if (contextMatch && currentResult) {
295
- currentResult.context = contextMatch[1];
296
- continue;
297
- }
298
- // Collect snippet content
299
- if (currentResult && line.trim() && !line.startsWith('---')) {
300
- currentResult.snippet += line + '\n';
301
- }
302
- }
303
- // Don't forget the last result
304
- if (currentResult && currentResult.path) {
305
- results.push(this.finalizeResult(currentResult));
306
- }
307
- return results;
308
- }
309
- /**
310
- * Finalize a parsed result with defaults
311
- */
312
- finalizeResult(result) {
313
- return {
314
- path: result.path || '',
315
- docid: result.docid || '',
316
- title: result.title || result.path?.split('/').pop() || '',
317
- context: result.context || '',
318
- score: result.score || 0,
319
- snippet: (result.snippet || '').trim()
320
- };
321
- }
322
- /**
323
- * Parse status result
324
- */
325
- parseStatusResult(result) {
326
- if (!result || !result.content) {
327
- return null;
328
- }
329
- const content = result.content;
330
- if (typeof content === 'string') {
331
- try {
332
- return JSON.parse(content);
333
- }
334
- catch {
335
- return null;
336
- }
337
- }
338
- if (Array.isArray(content)) {
339
- const textContent = content
340
- .filter((item) => item.type === 'text')
341
- .map((item) => item.text)
342
- .join('');
343
- try {
344
- return JSON.parse(textContent);
345
- }
346
- catch {
347
- return null;
348
- }
349
- }
350
- return null;
351
- }
352
- /**
353
- * Parse get result
354
- */
355
- parseGetResult(result) {
356
- if (!result || !result.content) {
357
- return '';
358
- }
359
- const content = result.content;
360
- if (typeof content === 'string') {
361
- return content;
362
- }
363
- if (Array.isArray(content)) {
364
- return content
365
- .filter((item) => item.type === 'text')
366
- .map((item) => item.text)
367
- .join('\n');
368
- }
369
- return '';
370
- }
371
- /**
372
- * Parse multi-get result
373
- */
374
- parseMultiGetResult(result) {
375
- const text = this.parseGetResult(result);
376
- if (!text) {
377
- return [];
378
- }
379
- // Split by document separators and return individual documents
380
- return text.split(/\n---+\n/).filter(doc => doc.trim());
381
- }
382
- }
383
- // Singleton instance
384
- let qmdClientInstance = null;
385
- /**
386
- * Get the singleton QMD client instance
387
- */
388
- export async function getQMDClient() {
389
- if (!qmdClientInstance) {
390
- qmdClientInstance = new QMDClient();
391
- }
392
- return qmdClientInstance;
393
- }
394
- /**
395
- * Reset the singleton QMD client (useful for testing)
396
- */
397
- export function resetQMDClient() {
398
- if (qmdClientInstance) {
399
- qmdClientInstance.disconnect().catch(() => { });
400
- qmdClientInstance = null;
401
- }
402
- }
403
- //# sourceMappingURL=qmd-client.js.map
@@ -1,29 +0,0 @@
1
- import { MultimodalInput } from './embeddings/google-multimodal.js';
2
- export type EmbeddingProvider = 'local' | 'openai' | 'ollama' | 'lmstudio' | 'google' | 'none' | 'auto';
3
- export declare function getEmbedding(input: string | MultimodalInput): Promise<number[] | null>;
4
- /**
5
- * Get embeddings for multiple inputs in parallel batches
6
- * Processes inputs in batches to respect rate limits while parallelizing
7
- */
8
- export declare function getBatchEmbeddings(inputs: string[], batchSize?: number): Promise<Array<number[] | null>>;
9
- /**
10
- * Clear the embedding cache
11
- */
12
- export declare function clearEmbeddingCache(): void;
13
- /**
14
- * Get embedding cache statistics
15
- */
16
- export declare function getEmbeddingCacheStats(): {
17
- size: number;
18
- maxSize: number;
19
- };
20
- /**
21
- * Check health of all configured embedding providers
22
- * Returns availability and latency for each provider
23
- */
24
- export declare function checkEmbeddingProviderHealth(): Promise<Map<string, {
25
- available: boolean;
26
- latencyMs?: number;
27
- error?: string;
28
- }>>;
29
- //# sourceMappingURL=embeddings.d.ts.map