squish-memory 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/core/embeddings/local-embeddings.ts +12 -0
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -10,10 +10,6 @@ export declare function chunkMessages(messages: any[], chunkSize: number): any[]
10
10
  * Get rolling window of messages
11
11
  */
12
12
  export declare function getRollingWindow(messages: any[], windowSize: number): any[];
13
- /**
14
- * Estimate tokens in text (rough approximation)
15
- */
16
- export declare function estimateTokens(text: string): number;
17
13
  /**
18
14
  * Calculate tokens saved by summarization
19
15
  */
@@ -2,6 +2,7 @@
2
2
  * Shared Summarization Strategy Utilities
3
3
  * Common patterns for different summarization approaches
4
4
  */
5
+ import { estimateTokens } from '../context/context-window.js';
5
6
  /**
6
7
  * Chunk messages for incremental summarization
7
8
  */
@@ -21,12 +22,6 @@ export function getRollingWindow(messages, windowSize) {
21
22
  }
22
23
  return messages.slice(-windowSize);
23
24
  }
24
- /**
25
- * Estimate tokens in text (rough approximation)
26
- */
27
- export function estimateTokens(text) {
28
- return Math.round(text.length / 4);
29
- }
30
25
  /**
31
26
  * Calculate tokens saved by summarization
32
27
  */
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Vector Operations Utilities
3
+ *
4
+ * Provides mathematical operations for vector computations, primarily focused on
5
+ * cosine similarity calculations for embedding comparisons.
6
+ *
7
+ * All functions handle edge cases gracefully and are optimized for performance.
8
+ */
9
+ /**
10
+ * Calculates the cosine similarity between two vectors.
11
+ *
12
+ * Cosine similarity measures the cosine of the angle between two vectors,
13
+ * providing a normalized measure of similarity that ranges from -1 (opposite)
14
+ * to 1 (identical), with 0 indicating orthogonality (no similarity).
15
+ *
16
+ * The implementation uses the standard formula:
17
+ * cos(θ) = (A · B) / (||A|| * ||B||)
18
+ *
19
+ * Edge case handling:
20
+ * - Returns 0 if either vector is null/undefined
21
+ * - Returns 0 if vectors have different lengths
22
+ * - Returns 0 if either vector has zero magnitude (norm = 0)
23
+ *
24
+ * @param a - First vector as array of numbers
25
+ * @param b - Second vector as array of numbers
26
+ * @returns Cosine similarity value in range [-1, 1], or 0 for invalid inputs
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const vec1 = [1, 2, 3];
31
+ * const vec2 = [4, 5, 6];
32
+ * const similarity = cosineSimilarity(vec1, vec2); // ~0.974
33
+ * ```
34
+ *
35
+ * @performance
36
+ * - Time complexity: O(n) where n is vector length
37
+ * - Space complexity: O(1) - uses only accumulator variables
38
+ * - Optimized with single-pass computation of dot product and norms
39
+ */
40
+ export declare function cosineSimilarity(a: number[] | null | undefined, b: number[] | null | undefined): number;
41
+ /**
42
+ * Calculates the Euclidean distance between two vectors.
43
+ *
44
+ * @param a - First vector
45
+ * @param b - Second vector
46
+ * @returns Euclidean distance, or Infinity if vectors have different lengths
47
+ */
48
+ export declare function euclideanDistance(a: number[] | null | undefined, b: number[] | null | undefined): number;
49
+ /**
50
+ * Normalizes a vector to unit length (magnitude = 1).
51
+ *
52
+ * @param vec - Input vector
53
+ * @returns Normalized vector, or null if input is null or zero vector
54
+ */
55
+ export declare function normalizeVector(vec: number[] | null | undefined): number[] | null;
56
+ /**
57
+ * Computes the dot product of two vectors.
58
+ *
59
+ * @param a - First vector
60
+ * @param b - Second vector
61
+ * @returns Dot product, or 0 if vectors are invalid or different lengths
62
+ */
63
+ export declare function dotProduct(a: number[] | null | undefined, b: number[] | null | undefined): number;
64
+ /**
65
+ * Calculates the magnitude (L2 norm) of a vector.
66
+ *
67
+ * @param vec - Input vector
68
+ * @returns Magnitude of the vector, or 0 if input is null
69
+ */
70
+ export declare function magnitude(vec: number[] | null | undefined): number;
71
+ //# sourceMappingURL=vector-operations.d.ts.map
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Vector Operations Utilities
3
+ *
4
+ * Provides mathematical operations for vector computations, primarily focused on
5
+ * cosine similarity calculations for embedding comparisons.
6
+ *
7
+ * All functions handle edge cases gracefully and are optimized for performance.
8
+ */
9
+ /**
10
+ * Calculates the cosine similarity between two vectors.
11
+ *
12
+ * Cosine similarity measures the cosine of the angle between two vectors,
13
+ * providing a normalized measure of similarity that ranges from -1 (opposite)
14
+ * to 1 (identical), with 0 indicating orthogonality (no similarity).
15
+ *
16
+ * The implementation uses the standard formula:
17
+ * cos(θ) = (A · B) / (||A|| * ||B||)
18
+ *
19
+ * Edge case handling:
20
+ * - Returns 0 if either vector is null/undefined
21
+ * - Returns 0 if vectors have different lengths
22
+ * - Returns 0 if either vector has zero magnitude (norm = 0)
23
+ *
24
+ * @param a - First vector as array of numbers
25
+ * @param b - Second vector as array of numbers
26
+ * @returns Cosine similarity value in range [-1, 1], or 0 for invalid inputs
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const vec1 = [1, 2, 3];
31
+ * const vec2 = [4, 5, 6];
32
+ * const similarity = cosineSimilarity(vec1, vec2); // ~0.974
33
+ * ```
34
+ *
35
+ * @performance
36
+ * - Time complexity: O(n) where n is vector length
37
+ * - Space complexity: O(1) - uses only accumulator variables
38
+ * - Optimized with single-pass computation of dot product and norms
39
+ */
40
+ export function cosineSimilarity(a, b) {
41
+ // Guard against null/undefined inputs
42
+ if (!a || !b)
43
+ return 0;
44
+ // Vectors must have same dimensions
45
+ if (a.length !== b.length)
46
+ return 0;
47
+ let dotProduct = 0;
48
+ let normA = 0;
49
+ let normB = 0;
50
+ // Single pass to compute dot product and norms
51
+ for (let i = 0; i < a.length; i++) {
52
+ dotProduct += a[i] * b[i];
53
+ normA += a[i] * a[i];
54
+ normB += b[i] * b[i];
55
+ }
56
+ // Handle zero vectors (avoid division by zero)
57
+ if (normA === 0 || normB === 0)
58
+ return 0;
59
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
60
+ }
61
+ /**
62
+ * Calculates the Euclidean distance between two vectors.
63
+ *
64
+ * @param a - First vector
65
+ * @param b - Second vector
66
+ * @returns Euclidean distance, or Infinity if vectors have different lengths
67
+ */
68
+ export function euclideanDistance(a, b) {
69
+ if (!a || !b)
70
+ return Infinity;
71
+ if (a.length !== b.length)
72
+ return Infinity;
73
+ let sum = 0;
74
+ for (let i = 0; i < a.length; i++) {
75
+ const diff = a[i] - b[i];
76
+ sum += diff * diff;
77
+ }
78
+ return Math.sqrt(sum);
79
+ }
80
+ /**
81
+ * Normalizes a vector to unit length (magnitude = 1).
82
+ *
83
+ * @param vec - Input vector
84
+ * @returns Normalized vector, or null if input is null or zero vector
85
+ */
86
+ export function normalizeVector(vec) {
87
+ if (!vec)
88
+ return null;
89
+ let norm = 0;
90
+ for (let i = 0; i < vec.length; i++) {
91
+ norm += vec[i] * vec[i];
92
+ }
93
+ if (norm === 0)
94
+ return null;
95
+ const magnitude = Math.sqrt(norm);
96
+ return vec.map(val => val / magnitude);
97
+ }
98
+ /**
99
+ * Computes the dot product of two vectors.
100
+ *
101
+ * @param a - First vector
102
+ * @param b - Second vector
103
+ * @returns Dot product, or 0 if vectors are invalid or different lengths
104
+ */
105
+ export function dotProduct(a, b) {
106
+ if (!a || !b || a.length !== b.length)
107
+ return 0;
108
+ let result = 0;
109
+ for (let i = 0; i < a.length; i++) {
110
+ result += a[i] * b[i];
111
+ }
112
+ return result;
113
+ }
114
+ /**
115
+ * Calculates the magnitude (L2 norm) of a vector.
116
+ *
117
+ * @param vec - Input vector
118
+ * @returns Magnitude of the vector, or 0 if input is null
119
+ */
120
+ export function magnitude(vec) {
121
+ if (!vec)
122
+ return 0;
123
+ let sum = 0;
124
+ for (let i = 0; i < vec.length; i++) {
125
+ sum += vec[i] * vec[i];
126
+ }
127
+ return Math.sqrt(sum);
128
+ }
129
+ //# sourceMappingURL=vector-operations.js.map
@@ -1,7 +1,7 @@
1
- export declare function createDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("../drizzle/schema.js")> & {
1
+ export declare function createDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("./drizzle/schema.js")> & {
2
2
  $client: import("pg").Pool;
3
- }) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("../drizzle/schema-sqlite.js")> & {
3
+ }) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("./drizzle/schema-sqlite.js")> & {
4
4
  $client: import("better-sqlite3").Database;
5
- }) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("../drizzle/schema-sqlite.js")>>;
5
+ }) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("./drizzle/schema-sqlite.js")>>;
6
6
  export default createDb;
7
7
  //# sourceMappingURL=adapter.d.ts.map
@@ -1,10 +1,54 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
1
4
  import { config, getDataDir } from '../config.js';
2
5
  import { ensurePostgresSchema, ensureSqliteSchema } from './bootstrap.js';
3
6
  import { logger } from '../core/logger.js';
7
+ const SQL_JS_WASM_RELATIVE_PATH = '../vendor/sql.js/sql-wasm.wasm';
8
+ function isBunRuntime() {
9
+ return typeof globalThis.Bun !== 'undefined';
10
+ }
11
+ function formatInitializationError(label, error) {
12
+ const message = error instanceof Error ? error.message : String(error);
13
+ return `${label}: ${message}`;
14
+ }
15
+ function shouldPersistSql(query) {
16
+ return /^\s*(insert|update|delete|create|alter|drop|replace|pragma|begin|commit|rollback|vacuum|reindex)\b/i.test(query);
17
+ }
18
+ function persistSqlJsDatabase(sqlite, dbPath) {
19
+ fs.mkdirSync(path.dirname(dbPath), { recursive: true });
20
+ fs.writeFileSync(dbPath, Buffer.from(sqlite.export()));
21
+ }
22
+ function resolveSqlJsWasmPath() {
23
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
24
+ const candidates = [
25
+ path.resolve(currentDir, SQL_JS_WASM_RELATIVE_PATH),
26
+ path.resolve(currentDir, '../../node_modules/sql.js/dist/sql-wasm.wasm'),
27
+ path.resolve(process.cwd(), 'node_modules/sql.js/dist/sql-wasm.wasm'),
28
+ ];
29
+ for (const candidate of candidates) {
30
+ if (fs.existsSync(candidate)) {
31
+ return candidate;
32
+ }
33
+ }
34
+ throw new Error(`sql.js wasm asset not found. Looked in: ${candidates.join(', ')}`);
35
+ }
36
+ function wrapSqlJsStatement(stmt, sqlite, dbPath, query) {
37
+ const persistAfterRun = shouldPersistSql(query);
38
+ if (persistAfterRun && typeof stmt.run === 'function') {
39
+ const originalRun = stmt.run.bind(stmt);
40
+ stmt.run = (...args) => {
41
+ const result = originalRun(...args);
42
+ persistSqlJsDatabase(sqlite, dbPath);
43
+ return result;
44
+ };
45
+ }
46
+ return stmt;
47
+ }
4
48
  async function createBunSqliteDb(dbPath) {
5
49
  // @ts-ignore - bun:sqlite module not found in types but works at runtime
6
50
  const { drizzle } = await import('drizzle-orm/bun-sqlite');
7
- const schemaModule = await import('../drizzle/schema-sqlite.js');
51
+ const schemaModule = await import('./drizzle/schema-sqlite.js');
8
52
  // Bun SQLite doesn't need file path for in-memory, but we'll use file path for persistence
9
53
  // @ts-ignore - bun:sqlite module not found in types but works at runtime
10
54
  const sqlite = new (await import('bun:sqlite')).default(dbPath);
@@ -25,7 +69,7 @@ export async function createDb() {
25
69
  async function createPostgresDb() {
26
70
  const { Pool } = await import('pg');
27
71
  const { drizzle } = await import('drizzle-orm/node-postgres');
28
- const schemaModule = await import('../drizzle/schema.js');
72
+ const schemaModule = await import('./drizzle/schema.js');
29
73
  const pool = new Pool({
30
74
  connectionString: process.env.DATABASE_URL,
31
75
  max: 20,
@@ -35,49 +79,46 @@ async function createPostgresDb() {
35
79
  }
36
80
  async function createSqliteDb() {
37
81
  const dbPath = `${getDataDir()}/squish.db`;
38
- // Try bun:sqlite first (Bun's built-in SQLite)
39
- try {
40
- return await createBunSqliteDb(dbPath);
41
- }
42
- catch (bunSqliteError) {
43
- logger.warn('bun:sqlite failed, trying better-sqlite3', {
44
- error: bunSqliteError.message
45
- });
46
- // Try better-sqlite3 second (best performance)
82
+ const errors = [];
83
+ if (isBunRuntime()) {
47
84
  try {
48
- return await createBetterSqliteDb(dbPath);
85
+ return await createBunSqliteDb(dbPath);
49
86
  }
50
- catch (betterSqliteError) {
51
- logger.warn('better-sqlite3 failed, trying sql.js fallback', {
52
- error: betterSqliteError.message
53
- });
54
- // Fallback to sql.js (pure JavaScript, no native module)
55
- try {
56
- return await createSqlJsDb(dbPath);
57
- }
58
- catch (sqlJsError) {
59
- // All failed - this is critical, Squish cannot work without DB
60
- logger.error('CRITICAL: SQLite database initialization failed', {
61
- bunSqliteError: bunSqliteError.message,
62
- betterSqliteError: betterSqliteError.message,
63
- sqlJsError: sqlJsError.message
87
+ catch (error) {
88
+ errors.push(formatInitializationError('bun:sqlite', error));
89
+ if (process.env.DEBUG === 'true') {
90
+ logger.warn('bun:sqlite failed, trying Node-compatible drivers', {
91
+ error: error instanceof Error ? error.message : String(error),
64
92
  });
65
- throw new Error(`Squish requires SQLite to function. Database initialization failed.\n` +
66
- `Primary error (bun:sqlite): ${bunSqliteError.message}\n` +
67
- `Secondary error (better-sqlite3): ${betterSqliteError.message}\n` +
68
- `Fallback error (sql.js): ${sqlJsError.message}\n\n` +
69
- `Solutions:\n` +
70
- `1. Install build tools: npm install -g windows-build-tools (Windows)\n` +
71
- `2. Or use PostgreSQL instead by setting DATABASE_URL environment variable`);
72
93
  }
73
94
  }
74
95
  }
96
+ try {
97
+ return await createBetterSqliteDb(dbPath);
98
+ }
99
+ catch (error) {
100
+ errors.push(formatInitializationError('better-sqlite3', error));
101
+ if (process.env.DEBUG === 'true') {
102
+ logger.warn('better-sqlite3 failed, trying sql.js fallback', {
103
+ error: error instanceof Error ? error.message : String(error),
104
+ });
105
+ }
106
+ }
107
+ try {
108
+ return await createSqlJsDb(dbPath);
109
+ }
110
+ catch (error) {
111
+ errors.push(formatInitializationError('sql.js', error));
112
+ }
113
+ logger.error('CRITICAL: SQLite database initialization failed', { errors });
114
+ throw new Error('Squish requires a working local SQLite driver. Initialization failed.\n' +
115
+ errors.map((entry, index) => `${index + 1}. ${entry}`).join('\n'));
75
116
  }
76
117
  async function createBetterSqliteDb(dbPath) {
77
118
  const DatabaseModule = await import('better-sqlite3');
78
119
  const Database = DatabaseModule.default;
79
120
  const { drizzle } = await import('drizzle-orm/better-sqlite3');
80
- const schemaModule = await import('../drizzle/schema-sqlite.js');
121
+ const schemaModule = await import('./drizzle/schema-sqlite.js');
81
122
  const sqlite = new Database(dbPath);
82
123
  // Enable foreign keys
83
124
  sqlite.pragma('foreign_keys = ON');
@@ -89,73 +130,43 @@ async function createSqlJsDb(dbPath) {
89
130
  // @ts-ignore - sql.js has no types but works fine
90
131
  const initSqlJs = await import('sql.js');
91
132
  const { drizzle } = await import('drizzle-orm/sql-js');
92
- const schemaModule = await import('../drizzle/schema-sqlite.js');
93
- const fs = await import('fs');
94
- const path = await import('path');
95
- const SQL = await initSqlJs.default();
133
+ const schemaModule = await import('./drizzle/schema-sqlite.js');
134
+ const wasmPath = resolveSqlJsWasmPath();
135
+ const SQL = await initSqlJs.default({
136
+ locateFile: (file) => (file.endsWith('.wasm') ? wasmPath : file),
137
+ });
96
138
  let data;
97
- // Try to load existing database
98
139
  if (fs.existsSync(dbPath)) {
99
140
  data = fs.readFileSync(dbPath);
100
141
  }
101
142
  const sqlite = new SQL.Database(data);
102
- // Enable foreign keys
103
143
  sqlite.exec('PRAGMA foreign_keys = ON');
104
- // Schema bootstrap
105
144
  await ensureSqliteSchema(sqlite);
106
- // Persist database on changes (sql.js is in-memory by default)
145
+ persistSqlJsDatabase(sqlite, dbPath);
107
146
  const originalExec = sqlite.exec.bind(sqlite);
108
- sqlite.exec = function (...args) {
147
+ sqlite.exec = (...args) => {
148
+ const [query] = args;
109
149
  const result = originalExec(...args);
110
- // Save after each exec
111
- const data = sqlite.export();
112
- fs.writeFileSync(dbPath, Buffer.from(data));
150
+ if (typeof query === 'string' && shouldPersistSql(query)) {
151
+ persistSqlJsDatabase(sqlite, dbPath);
152
+ }
113
153
  return result;
114
154
  };
115
- // Add prepare method for compatibility with drizzle-orm/sql-js
116
- sqlite.prepare = (query) => {
117
- const stmt = sqlite.prepare(query);
118
- const preparedStatement = {};
119
- preparedStatement.bind = (bindParams) => {
120
- bindParams.forEach((param, index) => {
121
- stmt.bind(param, index + 1);
122
- });
123
- return preparedStatement;
124
- };
125
- preparedStatement.step = () => {
126
- return stmt.step();
127
- };
128
- preparedStatement.getAsObject = () => {
129
- return stmt.getAsObject();
130
- };
131
- preparedStatement.free = () => {
132
- stmt.free();
133
- };
134
- preparedStatement.run = () => {
135
- const result = stmt.step() ? { changes: sqlite.changes() } : { changes: 0 };
136
- stmt.reset();
137
- return result;
138
- };
139
- preparedStatement.get = (bindParams = []) => {
140
- if (bindParams.length > 0) {
141
- preparedStatement.bind(bindParams);
155
+ if (typeof sqlite.run === 'function') {
156
+ const originalRun = sqlite.run.bind(sqlite);
157
+ sqlite.run = (...args) => {
158
+ const [query] = args;
159
+ const result = originalRun(...args);
160
+ if (typeof query === 'string' && shouldPersistSql(query)) {
161
+ persistSqlJsDatabase(sqlite, dbPath);
142
162
  }
143
- const row = stmt.step() ? stmt.getAsObject() : undefined;
144
- stmt.reset();
145
- return row;
146
- };
147
- preparedStatement.all = (bindParams = []) => {
148
- if (bindParams.length > 0) {
149
- preparedStatement.bind(bindParams);
150
- }
151
- const rows = [];
152
- while (stmt.step()) {
153
- rows.push(stmt.getAsObject());
154
- }
155
- stmt.reset();
156
- return rows;
163
+ return result;
157
164
  };
158
- return preparedStatement;
165
+ }
166
+ const originalPrepare = sqlite.prepare.bind(sqlite);
167
+ sqlite.prepare = (query, ...args) => {
168
+ const stmt = originalPrepare(query, ...args);
169
+ return wrapSqlJsStatement(stmt, sqlite, dbPath, query);
159
170
  };
160
171
  logger.info('SQLite initialized with sql.js (pure JavaScript fallback)');
161
172
  return drizzle(sqlite, { schema: schemaModule });
@@ -5,5 +5,7 @@ import type { Pool } from 'pg';
5
5
  */
6
6
  export declare function ensureDataDirectory(): Promise<void>;
7
7
  export declare function ensureSqliteSchema(sqlite: Database): Promise<void>;
8
+ export declare function getSchemaVersion(sqlite: Database): Promise<string | null>;
9
+ export declare function runMigrationsForVersion(sqlite: Database, targetVersion: string): Promise<void>;
8
10
  export declare function ensurePostgresSchema(pool: Pool): Promise<void>;
9
11
  //# sourceMappingURL=bootstrap.d.ts.map