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
@@ -0,0 +1,197 @@
1
+ /** Obsidian Vault Integration
2
+ *
3
+ * Appends hot memories to Obsidian daily notes
4
+ * Format: YYYY-MM-DD.md with memory blocks
5
+ */
6
+
7
+ import { existsSync, mkdirSync, appendFileSync, readFileSync, readdirSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { randomUUID } from 'crypto';
10
+ import { logger } from '../logger.js';
11
+
12
+ export interface ObsidianMemoryInput {
13
+ content: string;
14
+ id: string;
15
+ type: string;
16
+ tags: string[];
17
+ reasoning?: string;
18
+ memoryContext?: string;
19
+ examples?: string;
20
+ exceptions?: string;
21
+ source?: string;
22
+ }
23
+
24
+ /**
25
+ * Append a memory to the daily note in Obsidian vault
26
+ * Creates YYYY-MM-DD.md file if it doesn't exist
27
+ */
28
+ export async function appendToObsidianVault(
29
+ memory: ObsidianMemoryInput,
30
+ vaultPath: string
31
+ ): Promise<void> {
32
+ const today = new Date();
33
+ const year = today.getFullYear();
34
+ const month = String(today.getMonth() + 1).padStart(2, '0');
35
+ const day = String(today.getDate()).padStart(2, '0');
36
+ const dateStr = `${year}-${month}-${day}`;
37
+
38
+ const dailyNotePath = join(vaultPath, `${dateStr}.md`);
39
+
40
+ // Ensure vault directory exists
41
+ if (!existsSync(vaultPath)) {
42
+ mkdirSync(vaultPath, { recursive: true });
43
+ logger.info(`[Obsidian] Created vault directory: ${vaultPath}`);
44
+ }
45
+
46
+ // Build memory block content
47
+ const memoryBlock = formatMemoryAsBlock(memory);
48
+
49
+ // Check if daily note exists, if not create with header
50
+ if (!existsSync(dailyNotePath)) {
51
+ const header = `# ${dateStr}\n\n## Squish Memories\n\n`;
52
+ appendFileSync(dailyNotePath, header, 'utf-8');
53
+ logger.info(`[Obsidian] Created daily note: ${dailyNotePath}`);
54
+ }
55
+
56
+ // Append memory block
57
+ appendFileSync(dailyNotePath, memoryBlock + '\n\n', 'utf-8');
58
+ logger.info(`[Obsidian] Appended memory to ${dateStr}.md`);
59
+ }
60
+
61
+ /**
62
+ * Format memory as Obsidian-compatible block
63
+ */
64
+ function formatMemoryAsBlock(memory: ObsidianMemoryInput): string {
65
+ const lines: string[] = [];
66
+
67
+ // Memory content as checkbox (can be toggled in Obsidian)
68
+ lines.push(`- [ ] "${memory.content}"`);
69
+
70
+ // Add ID reference for linking
71
+ lines.push(` - **id:** \`${memory.id}\``);
72
+
73
+ // Type and tags
74
+ if (memory.type) {
75
+ lines.push(` - **type:** ${memory.type}`);
76
+ }
77
+ if (memory.tags && memory.tags.length > 0) {
78
+ const tagList = memory.tags.map(t => `#${t.replace(/\s+/g, '-')}`).join(' ');
79
+ lines.push(` - **tags:** ${tagList}`);
80
+ }
81
+
82
+ // Rich context fields
83
+ if (memory.source) {
84
+ lines.push(` - **source:** ${memory.source}`);
85
+ }
86
+ if (memory.reasoning) {
87
+ lines.push(` - **reasoning:** ${memory.reasoning}`);
88
+ }
89
+ if (memory.memoryContext) {
90
+ lines.push(` - **context:** ${memory.memoryContext}`);
91
+ }
92
+ if (memory.examples) {
93
+ lines.push(` - **examples:** ${memory.examples}`);
94
+ }
95
+ if (memory.exceptions) {
96
+ lines.push(` - **exceptions:** ${memory.exceptions}`);
97
+ }
98
+
99
+ return lines.join('\n');
100
+ }
101
+
102
+ /**
103
+ * Check if Obsidian vault is connected and accessible
104
+ */
105
+ export function isObsidianConnected(vaultPath: string): boolean {
106
+ if (!vaultPath || vaultPath === '') {
107
+ return false;
108
+ }
109
+
110
+ // Check if path exists or can be created
111
+ const parentDir = vaultPath.includes('/')
112
+ ? vaultPath.split('/').slice(0, -1).join('/')
113
+ : vaultPath.split('\\').slice(0, -1).join('\\');
114
+
115
+ return existsSync(parentDir) || true; // Assume creatable if parent exists
116
+ }
117
+
118
+ /**
119
+ * Read existing memories from Obsidian vault (for import feature)
120
+ * Scans vault for .md files and extracts memory blocks
121
+ */
122
+ export async function readFromVault(vaultPath: string): Promise<ObsidianMemoryInput[]> {
123
+ if (!existsSync(vaultPath)) {
124
+ logger.warn(`[Obsidian] Vault path does not exist: ${vaultPath}`);
125
+ return [];
126
+ }
127
+
128
+ const memories: ObsidianMemoryInput[] = [];
129
+
130
+ // Recursively find all .md files
131
+ const mdFiles = await findMarkdownFiles(vaultPath);
132
+
133
+ for (const filePath of mdFiles) {
134
+ try {
135
+ const content = readFileSync(filePath, 'utf-8');
136
+ const filename = filePath.split(/[/\\]/).pop() || '';
137
+
138
+ // Extract frontmatter if present
139
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
140
+ let tags: string[] = [];
141
+
142
+ if (frontmatterMatch) {
143
+ const tagMatch = frontmatterMatch[1].match(/tags:\s*\[([^\]]*)\]/);
144
+ if (tagMatch) {
145
+ tags = tagMatch[1].split(',').map((t: string) => t.trim()).filter(Boolean);
146
+ }
147
+ }
148
+
149
+ // Extract content after frontmatter
150
+ const body = frontmatterMatch ? content.slice(frontmatterMatch[0].length).trim() : content;
151
+
152
+ // Skip empty files or very short ones
153
+ if (body.length < 10) continue;
154
+
155
+ memories.push({
156
+ id: randomUUID(),
157
+ content: body,
158
+ tags,
159
+ type: 'observation'
160
+ });
161
+ } catch (error) {
162
+ logger.warn(`[Obsidian] Failed to read file ${filePath}: ${error}`);
163
+ }
164
+ }
165
+
166
+ logger.info(`[Obsidian] Found ${memories.length} memories in vault`);
167
+ return memories;
168
+ }
169
+
170
+ /**
171
+ * Recursively find all markdown files in a directory
172
+ */
173
+ async function findMarkdownFiles(dir: string): Promise<string[]> {
174
+ const files: string[] = [];
175
+
176
+ try {
177
+ const entries = readdirSync(dir, { withFileTypes: true });
178
+
179
+ for (const entry of entries) {
180
+ const fullPath = join(dir, entry.name);
181
+
182
+ if (entry.isDirectory()) {
183
+ // Skip hidden directories
184
+ if (!entry.name.startsWith('.')) {
185
+ const subFiles = await findMarkdownFiles(fullPath);
186
+ files.push(...subFiles);
187
+ }
188
+ } else if (entry.isFile() && entry.name.endsWith('.md')) {
189
+ files.push(fullPath);
190
+ }
191
+ }
192
+ } catch (error) {
193
+ logger.warn(`[Obsidian] Failed to read directory ${dir}: ${error}`);
194
+ }
195
+
196
+ return files;
197
+ }
@@ -0,0 +1,115 @@
1
+ /** Layer Extractor - Creates L0/L1 truncated layers for token-efficient hierarchical retrieval */
2
+
3
+ import { getDb } from '../../db/index.js';
4
+ import { getSchema } from '../../db/schema.js';
5
+
6
+ export interface LayerGenerationConfig {
7
+ l0MaxLength?: number; // Default: 50 chars (truncated preview)
8
+ l1MaxLength?: number; // Default: 300 chars (first 2 sentences truncated)
9
+ autoGenerate?: boolean; // Default: true for content > 500 chars
10
+ }
11
+
12
+ export interface LayerGenerationResult {
13
+ l0?: string; // Ultra-short truncated preview
14
+ l1?: string; // Short truncated preview (first 2 sentences)
15
+ l2?: string; // Full content (reference)
16
+ tokenCounts: { l0: number; l1: number; l2: number };
17
+ }
18
+
19
+ const DEFAULT_CONFIG: LayerGenerationConfig = {
20
+ l0MaxLength: 50,
21
+ l1MaxLength: 300,
22
+ autoGenerate: true,
23
+ };
24
+
25
+ /**
26
+ * Extract L0/L1/L2 layers for content via truncation
27
+ */
28
+ export async function extractLayers(
29
+ content: string,
30
+ config: LayerGenerationConfig = {}
31
+ ): Promise<LayerGenerationResult> {
32
+ const l0MaxLength = config.l0MaxLength ?? DEFAULT_CONFIG.l0MaxLength;
33
+ const l1MaxLength = config.l1MaxLength ?? DEFAULT_CONFIG.l1MaxLength;
34
+
35
+ // Extract L0 and L1 in parallel
36
+ const [l0, l1] = await Promise.all([
37
+ extractL0Truncation(content, l0MaxLength!),
38
+ extractL1Truncation(content, l1MaxLength!),
39
+ ]);
40
+
41
+ const l2Tokens = countTokens(content);
42
+ const l0Tokens = countTokens(l0 || '');
43
+ const l1Tokens = countTokens(l1 || '');
44
+
45
+ return {
46
+ l0: l0 ?? '',
47
+ l1: l1 ?? '',
48
+ l2: content,
49
+ tokenCounts: {
50
+ l0: l0Tokens,
51
+ l1: l1Tokens,
52
+ l2: l2Tokens,
53
+ },
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Extract L0: Ultra-short truncated preview (first sentence or chars)
59
+ */
60
+ async function extractL0Truncation(
61
+ content: string,
62
+ maxLength: number
63
+ ): Promise<string> {
64
+ // Simple truncation for L0 (first sentence or chars)
65
+ const trimmed = content.trim();
66
+ const sentences = trimmed.split(/[.!?]/).filter(s => s.trim().length > 0);
67
+
68
+ // Take first non-empty sentence and truncate if needed
69
+ let result = sentences.length > 0 ? sentences[0] : trimmed.substring(0, maxLength);
70
+
71
+ if (result.length > maxLength) {
72
+ result = result.substring(0, maxLength - 3) + '...';
73
+ }
74
+
75
+ return result.trim();
76
+ }
77
+
78
+ /**
79
+ * Extract L1: Short truncated preview (first 2 meaningful sentences)
80
+ */
81
+ async function extractL1Truncation(
82
+ content: string,
83
+ maxLength: number
84
+ ): Promise<string> {
85
+ // Simple truncation for L1 (first 2 meaningful sentences)
86
+ const trimmed = content.trim();
87
+ const sentences = trimmed.split(/[.!?]/).filter(s => s.trim().length > 10);
88
+
89
+ // Take first meaningful sentences and truncate if needed
90
+ let result = sentences.length > 0
91
+ ? sentences.slice(0, 2).join(' ').trim()
92
+ : trimmed.substring(0, maxLength);
93
+
94
+ if (result.length > maxLength) {
95
+ result = result.substring(0, maxLength - 3) + '...';
96
+ }
97
+
98
+ return result.trim();
99
+ }
100
+
101
+ /**
102
+ * Count tokens (approximate, 4 chars = 1 token for English)
103
+ */
104
+ function countTokens(text: string): number {
105
+ // Simple approximation: 4 chars per token
106
+ return Math.ceil(text.length / 4);
107
+ }
108
+
109
+ /**
110
+ * Check if content should have layers auto-extracted
111
+ */
112
+ export function shouldAutoGenerate(contentLength: number): boolean {
113
+ const threshold = 500;
114
+ return contentLength > threshold;
115
+ }
@@ -1,114 +1,168 @@
1
- /**
2
- * Database Client & Schema Loading Abstraction
3
- *
4
- * Provides a unified interface for accessing both the database client and schema
5
- * in a single call, eliminating repetitive patterns of:
6
- * `const db = createDatabaseClient(await getDb()); const schema = await getSchema();`
7
- *
8
- * Features:
9
- * - Single async call to get both db and schema
10
- * - Consistent error handling with clear messages
11
- * - Preserves schema caching
12
- * - Provides raw connection for special cases
13
- * - Helper `withDbClient` for functional programming patterns
14
- *
15
- * @example
16
- * ```typescript
17
- * // Old pattern (repetitive)
18
- * const db = createDatabaseClient(await getDb());
19
- * const schema = await getSchema();
20
- *
21
- * // New pattern (unified)
22
- * const { db, schema } = await getDbClient();
23
- *
24
- * // With helper
25
- * const result = await withDbClient(async (client) => {
26
- * return await client.db.select().from(client.schema.memories);
27
- * });
28
- * ```
29
- */
30
- import type { DatabaseClient } from '../storage/database.js';
31
- import type { SchemaModule } from '../../db/schema.js';
32
- /**
33
- * Unified database client interface combining:
34
- * - `db`: Wrapped database client with select/insert/update/delete methods
35
- * - `schema`: Drizzle schema module with table definitions
36
- * - `raw`: Raw underlying connection for special cases (mcp-server, index, etc.)
37
- */
38
- export interface DbClient {
39
- /**
40
- * Wrapped database client with unified API
41
- * Provides select(), insert(), update(), delete() methods
42
- */
43
- db: DatabaseClient;
44
- /**
45
- * Schema module containing table definitions
46
- * Access tables via schema.tableName (e.g., schema.memories, schema.users)
47
- */
48
- schema: SchemaModule;
49
- /**
50
- * Raw underlying database connection
51
- * Use for special cases that require direct access to the native driver
52
- * (e.g., raw SQL queries, specific driver features)
53
- */
54
- raw: any;
55
- }
56
- /**
57
- * Get a unified database client with both db and schema.
58
- *
59
- * This function:
60
- * 1. Calls getDb() to initialize/retrieve the database connection
61
- * 2. Calls getSchema() to get the appropriate schema (with caching)
62
- * 3. Wraps the db with createDatabaseClient() for unified API
63
- * 4. Returns all three as a single DbClient object
64
- *
65
- * Error handling:
66
- * - Wraps any database initialization errors with a clear message
67
- * - Preserves the original error as `cause` property
68
- *
69
- * Schema caching:
70
- * - Uses the same caching mechanism as getSchema()
71
- * - Multiple calls to getDbClient() will return the same schema reference
72
- *
73
- * @returns Promise<DbClient> Unified client with db, schema, and raw
74
- * @throws {Error} When database initialization fails, with cause attached
75
- *
76
- * @example
77
- * ```typescript
78
- * const { db, schema, raw } = await getDbClient();
79
- *
80
- * // Use db for queries
81
- * const memories = await db.select().from(schema.memories).limit(10);
82
- *
83
- * // Use raw for special cases
84
- * const client = (raw as any).$client;
85
- * if (client && typeof client.exec === 'function') {
86
- * client.exec('VACUUM');
87
- * }
88
- * ```
89
- */
90
- export declare function getDbClient(): Promise<DbClient>;
91
- /**
92
- * Execute an operation with a unified database client.
93
- *
94
- * Convenience wrapper that:
95
- * 1. Calls getDbClient() to obtain client
96
- * 2. Executes the provided operation
97
- * 3. Ensures proper cleanup if needed (no-op currently, for future extension)
98
- *
99
- * @param operation - Async function that receives the DbClient and returns a result
100
- * @returns Promise<T> The result returned by the operation
101
- * @throws {Error} When database initialization or operation fails
102
- *
103
- * @example
104
- * ```typescript
105
- * const count = await withDbClient(async (client) => {
106
- * const result = await client.db
107
- * .select({ count: sql`count(*)` })
108
- * .from(client.schema.memories);
109
- * return result[0].count;
110
- * });
111
- * ```
112
- */
113
- export declare function withDbClient<T>(operation: (client: DbClient) => Promise<T>): Promise<T>;
114
- //# sourceMappingURL=db-client.d.ts.map
1
+ /**
2
+ * Database Client & Schema Loading Abstraction
3
+ *
4
+ * Provides a unified interface for accessing both the database client and schema
5
+ * in a single call, eliminating repetitive patterns of:
6
+ * `const db = createDatabaseClient(await getDb()); const schema = await getSchema();`
7
+ *
8
+ * Features:
9
+ * - Single async call to get both db and schema
10
+ * - Consistent error handling with clear messages
11
+ * - Preserves schema caching
12
+ * - Provides raw connection for special cases
13
+ * - Helper `withDbClient` for functional programming patterns
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // Old pattern (repetitive)
18
+ * const db = createDatabaseClient(await getDb());
19
+ * const schema = await getSchema();
20
+ *
21
+ * // New pattern (unified)
22
+ * const { db, schema } = await getDbClient();
23
+ *
24
+ * // With helper
25
+ * const result = await withDbClient(async (client) => {
26
+ * return await client.db.select().from(client.schema.memories);
27
+ * });
28
+ * ```
29
+ */
30
+
31
+ import { getDb } from '../../db/index.js';
32
+ import { getSchema } from '../../db/schema.js';
33
+ import { createDatabaseClient } from '../storage/database.js';
34
+ import type { DatabaseClient } from '../storage/database.js';
35
+ import type { SchemaModule } from '../../db/schema.js';
36
+
37
+ /**
38
+ * Unified database client interface combining:
39
+ * - `db`: Wrapped database client with select/insert/update/delete methods
40
+ * - `schema`: Drizzle schema module with table definitions
41
+ * - `raw`: Raw underlying connection for special cases (mcp-server, index, etc.)
42
+ */
43
+ export interface DbClient {
44
+ /**
45
+ * Wrapped database client with unified API
46
+ * Provides select(), insert(), update(), delete() methods
47
+ */
48
+ db: DatabaseClient;
49
+
50
+ /**
51
+ * Schema module containing table definitions
52
+ * Access tables via schema.tableName (e.g., schema.memories, schema.users)
53
+ */
54
+ schema: SchemaModule;
55
+
56
+ /**
57
+ * Raw underlying database connection
58
+ * Use for special cases that require direct access to the native driver
59
+ * (e.g., raw SQL queries, specific driver features)
60
+ */
61
+ raw: any;
62
+ }
63
+
64
+ /**
65
+ * Internal cached schema to preserve getSchema() caching behavior
66
+ */
67
+ let cachedSchema: SchemaModule | null = null;
68
+
69
+ /**
70
+ * Get a unified database client with both db and schema.
71
+ *
72
+ * This function:
73
+ * 1. Calls getDb() to initialize/retrieve the database connection
74
+ * 2. Calls getSchema() to get the appropriate schema (with caching)
75
+ * 3. Wraps the db with createDatabaseClient() for unified API
76
+ * 4. Returns all three as a single DbClient object
77
+ *
78
+ * Error handling:
79
+ * - Wraps any database initialization errors with a clear message
80
+ * - Preserves the original error as `cause` property
81
+ *
82
+ * Schema caching:
83
+ * - Uses the same caching mechanism as getSchema()
84
+ * - Multiple calls to getDbClient() will return the same schema reference
85
+ *
86
+ * @returns Promise<DbClient> Unified client with db, schema, and raw
87
+ * @throws {Error} When database initialization fails, with cause attached
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const { db, schema, raw } = await getDbClient();
92
+ *
93
+ * // Use db for queries
94
+ * const memories = await db.select().from(schema.memories).limit(10);
95
+ *
96
+ * // Use raw for special cases
97
+ * const client = (raw as any).$client;
98
+ * if (client && typeof client.exec === 'function') {
99
+ * client.exec('VACUUM');
100
+ * }
101
+ * ```
102
+ */
103
+ export async function getDbClient(): Promise<DbClient> {
104
+ try {
105
+ // Get raw database connection
106
+ const rawDb = await getDb();
107
+
108
+ // Get schema (with caching)
109
+ if (!cachedSchema) {
110
+ cachedSchema = await getSchema();
111
+ }
112
+
113
+ // Create wrapped database client
114
+ const db = createDatabaseClient(rawDb);
115
+
116
+ return {
117
+ db,
118
+ schema: cachedSchema,
119
+ raw: rawDb,
120
+ };
121
+ } catch (error) {
122
+ const message =
123
+ error instanceof Error
124
+ ? `Database initialization failed: ${error.message}`
125
+ : 'Database initialization failed';
126
+
127
+ // Wrap error with clear message while preserving cause
128
+ const wrappedError = new Error(message);
129
+ // @ts-ignore - TypeScript doesn't allow 'cause' on Error, but it's valid
130
+ wrappedError.cause = error;
131
+
132
+ throw wrappedError;
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Execute an operation with a unified database client.
138
+ *
139
+ * Convenience wrapper that:
140
+ * 1. Calls getDbClient() to obtain client
141
+ * 2. Executes the provided operation
142
+ * 3. Ensures proper cleanup if needed (no-op currently, for future extension)
143
+ *
144
+ * @param operation - Async function that receives the DbClient and returns a result
145
+ * @returns Promise<T> The result returned by the operation
146
+ * @throws {Error} When database initialization or operation fails
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const count = await withDbClient(async (client) => {
151
+ * const result = await client.db
152
+ * .select({ count: sql`count(*)` })
153
+ * .from(client.schema.memories);
154
+ * return result[0].count;
155
+ * });
156
+ * ```
157
+ */
158
+ export async function withDbClient<T>(
159
+ operation: (client: DbClient) => Promise<T>
160
+ ): Promise<T> {
161
+ const client = await getDbClient();
162
+ try {
163
+ return await operation(client);
164
+ } finally {
165
+ // Future: Add cleanup logic if needed (connection pooling, etc.)
166
+ // Currently getDb() handles connection pooling and reuse
167
+ }
168
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Parse embedding from various storage formats.
3
+ * Converted from 4 locations: hybrid-search.ts, consolidation.ts, memories.ts, entity-deduplicator.ts
4
+ *
5
+ * @param embeddingData - Input in Float32Array, Buffer, Uint8Array, JSON string, or Array format
6
+ * @returns Array of numbers or null if parsing fails
7
+ */
8
+ export function parseEmbedding(embeddingData: unknown): number[] | null {
9
+ if (!embeddingData) return null;
10
+
11
+ // Handle Array directly (most common case)
12
+ if (Array.isArray(embeddingData)) {
13
+ return embeddingData;
14
+ }
15
+
16
+ // Handle Float32Array directly
17
+ if (embeddingData instanceof Float32Array) {
18
+ return Array.from(embeddingData);
19
+ }
20
+
21
+ // Handle Uint8Array and Buffer - try JSON first, then binary Float32
22
+ if (embeddingData instanceof Uint8Array || Buffer.isBuffer(embeddingData)) {
23
+ // Try to parse as JSON string first
24
+ try {
25
+ const json = JSON.parse(embeddingData.toString());
26
+ if (Array.isArray(json)) {
27
+ return json;
28
+ }
29
+ } catch {
30
+ // Not JSON, try binary Float32
31
+ }
32
+
33
+ // Try to parse as binary Float32Array
34
+ try {
35
+ const buffer = embeddingData.buffer;
36
+ const arrayBuffer = buffer instanceof ArrayBuffer
37
+ ? buffer
38
+ : (buffer as unknown as ArrayBuffer);
39
+ const floatArray = new Float32Array(arrayBuffer);
40
+ return Array.from(floatArray);
41
+ } catch {
42
+ return null;
43
+ }
44
+ }
45
+
46
+ // Handle JSON string
47
+ if (typeof embeddingData === 'string') {
48
+ try {
49
+ const parsed = JSON.parse(embeddingData);
50
+ if (Array.isArray(parsed)) {
51
+ return parsed;
52
+ }
53
+ } catch {
54
+ return null;
55
+ }
56
+ }
57
+
58
+ return null;
59
+ }