squish-memory 1.0.1 → 1.1.5

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 (601) hide show
  1. package/.env.example +130 -0
  2. package/CHANGELOG.md +55 -0
  3. package/README.md +155 -274
  4. package/config/hooks/claude-code-hooks.json +39 -0
  5. package/config/hooks/cursor-hooks.json +30 -0
  6. package/config/hooks/opencode-hooks.json +30 -0
  7. package/config/hooks/windsurf-hooks.json +30 -0
  8. package/config/mcp-mode-semantics.json +23 -21
  9. package/config/plugin-manifest.json +101 -152
  10. package/{plugin.json → config/plugin.json} +2 -2
  11. package/config/settings.json +52 -51
  12. package/{commands → core/commands}/init.md +39 -39
  13. package/dist/config.d.ts +28 -4
  14. package/dist/config.js +97 -29
  15. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  16. package/dist/core/adapters/config/claude-code.js +113 -0
  17. package/dist/core/adapters/config/cursor.d.ts +26 -0
  18. package/dist/core/adapters/config/cursor.js +74 -0
  19. package/dist/core/adapters/config/opencode.d.ts +23 -0
  20. package/dist/core/adapters/config/opencode.js +73 -0
  21. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  22. package/dist/core/adapters/config/windsurf.js +74 -0
  23. package/dist/core/adapters/index.d.ts +45 -0
  24. package/dist/core/adapters/index.js +84 -0
  25. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  26. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  27. package/dist/core/adapters/timeline.d.ts +23 -0
  28. package/dist/core/adapters/timeline.js +88 -0
  29. package/dist/core/adapters/types.d.ts +157 -0
  30. package/dist/core/adapters/types.js +50 -0
  31. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  32. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  33. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  34. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  35. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  36. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  37. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  38. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  39. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  40. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  41. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  42. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  43. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  44. package/dist/core/algorithms/index.d.ts +21 -0
  45. package/dist/core/algorithms/index.js +26 -0
  46. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  47. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  48. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +1 -1
  49. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  50. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  51. package/dist/core/algorithms/types.d.ts +133 -0
  52. package/dist/core/algorithms/types.js +5 -0
  53. package/dist/core/associations.d.ts +1 -2
  54. package/dist/core/associations.js +1 -2
  55. package/dist/core/autosave.d.ts +19 -0
  56. package/dist/core/autosave.js +16 -0
  57. package/dist/{commands → core/commands}/managed-sync.js +5 -5
  58. package/dist/core/commands/mcp-server.js +739 -0
  59. package/dist/core/context/agent-context.d.ts +106 -0
  60. package/dist/core/context/agent-context.js +274 -0
  61. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  62. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  63. package/dist/core/context/context-window.d.ts +40 -0
  64. package/dist/core/context/context-window.js +177 -0
  65. package/dist/core/context/context.js +22 -0
  66. package/dist/core/embeddings.d.ts +1 -1
  67. package/dist/core/embeddings.js +54 -2
  68. package/dist/core/error-handling.d.ts +63 -0
  69. package/dist/core/error-handling.js +173 -0
  70. package/dist/core/external-folder/index.d.ts +102 -0
  71. package/dist/core/external-folder/index.js +294 -0
  72. package/dist/core/hooks/agent-hooks.d.ts +74 -0
  73. package/dist/core/hooks/agent-hooks.js +244 -0
  74. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  75. package/dist/core/hooks/auto-tagger.js +155 -0
  76. package/dist/core/hooks/capture-filter.d.ts +41 -0
  77. package/dist/core/hooks/capture-filter.js +128 -0
  78. package/dist/core/index.d.ts +6 -6
  79. package/dist/core/index.js +6 -6
  80. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  81. package/dist/core/{core-memory.js → ingestion/core-memory.js} +4 -4
  82. package/dist/core/ingestion/learnings.d.ts +57 -0
  83. package/dist/core/ingestion/learnings.js +202 -0
  84. package/dist/core/lib/db-client.d.ts +114 -0
  85. package/dist/core/lib/db-client.js +130 -0
  86. package/dist/core/lib/schemas.d.ts +129 -0
  87. package/dist/core/lib/schemas.js +87 -0
  88. package/dist/core/{utils.d.ts → lib/utils.d.ts} +1 -0
  89. package/dist/core/{utils.js → lib/utils.js} +31 -15
  90. package/dist/core/lib/validation.d.ts +38 -0
  91. package/dist/core/lib/validation.js +151 -0
  92. package/dist/core/lifecycle.d.ts +7 -0
  93. package/dist/core/lifecycle.js +140 -20
  94. package/dist/core/local-embeddings.d.ts +6 -1
  95. package/dist/core/local-embeddings.js +6 -15
  96. package/dist/core/logger.js +7 -1
  97. package/dist/core/mcp/server.js +27 -1
  98. package/dist/core/mcp/tools.js +35 -3
  99. package/dist/core/mcp/types.d.ts +4 -4
  100. package/dist/core/memory/categorizer.js +1 -0
  101. package/dist/core/memory/conflict-detector.js +1 -1
  102. package/dist/core/memory/consolidation.d.ts +1 -10
  103. package/dist/core/memory/consolidation.js +2 -11
  104. package/dist/core/memory/context-collector.js +1 -1
  105. package/dist/core/memory/edit-workflow.js +1 -1
  106. package/dist/core/memory/entity-resolver.js +7 -7
  107. package/dist/core/memory/fact-extractor.js +12 -12
  108. package/dist/core/memory/feedback-tracker.js +1 -1
  109. package/dist/core/memory/hooks.d.ts +88 -0
  110. package/dist/core/memory/hooks.js +174 -0
  111. package/dist/core/memory/hybrid-retrieval.js +2 -2
  112. package/dist/core/memory/hybrid-search.d.ts +1 -6
  113. package/dist/core/memory/hybrid-search.js +70 -84
  114. package/dist/core/memory/importance.d.ts +8 -13
  115. package/dist/core/memory/importance.js +47 -74
  116. package/dist/core/memory/loader.d.ts +31 -0
  117. package/dist/core/memory/loader.js +141 -0
  118. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  119. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  120. package/dist/core/memory/memories.d.ts +12 -4
  121. package/dist/core/memory/memories.js +196 -181
  122. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  123. package/dist/core/memory/memory-lifecycle.js +55 -0
  124. package/dist/core/memory/migrate.d.ts +21 -0
  125. package/dist/core/memory/migrate.js +134 -0
  126. package/dist/core/memory/normalization.d.ts +22 -0
  127. package/dist/core/memory/normalization.js +26 -0
  128. package/dist/core/memory/progressive-disclosure.js +1 -1
  129. package/dist/core/memory/query-rewriter.js +9 -9
  130. package/dist/core/memory/serialization.d.ts +4 -0
  131. package/dist/core/memory/serialization.js +49 -0
  132. package/dist/core/memory/stats.d.ts +5 -0
  133. package/dist/core/memory/stats.js +63 -12
  134. package/dist/core/memory/temporal-facts.js +21 -0
  135. package/dist/core/memory/write-gate.js +1 -1
  136. package/dist/core/obsidian-vault.d.ts +30 -0
  137. package/dist/core/obsidian-vault.js +94 -0
  138. package/dist/core/places/index.d.ts +14 -0
  139. package/dist/core/places/index.js +14 -0
  140. package/dist/core/places/memory-places.d.ts +68 -0
  141. package/dist/core/places/memory-places.js +261 -0
  142. package/dist/core/places/places.d.ts +88 -0
  143. package/dist/core/places/places.js +314 -0
  144. package/dist/core/places/rules.d.ts +74 -0
  145. package/dist/core/places/rules.js +240 -0
  146. package/dist/core/places/walking.d.ts +56 -0
  147. package/dist/core/places/walking.js +121 -0
  148. package/dist/core/projects.d.ts +5 -0
  149. package/dist/core/projects.js +39 -18
  150. package/dist/core/responses.d.ts +96 -0
  151. package/dist/core/responses.js +122 -0
  152. package/dist/core/scheduler/cron-scheduler.js +89 -14
  153. package/dist/core/scheduler/index.d.ts +1 -1
  154. package/dist/core/scheduler/index.js +1 -1
  155. package/dist/core/scheduler/job-runner.js +1 -1
  156. package/dist/core/search/conversations.js +40 -42
  157. package/dist/core/search/entities.js +6 -9
  158. package/dist/core/search/graph-boost.d.ts +7 -0
  159. package/dist/core/search/graph-boost.js +23 -0
  160. package/dist/core/search/qmd-search.js +4 -4
  161. package/dist/core/security/encrypt.d.ts +6 -0
  162. package/dist/core/security/encrypt.js +47 -0
  163. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  164. package/dist/core/security/governance.js +79 -0
  165. package/dist/core/session/auto-load.js +6 -6
  166. package/dist/core/session/index.d.ts +1 -1
  167. package/dist/core/session/index.js +1 -1
  168. package/dist/core/session/self-iteration-job.d.ts +20 -0
  169. package/dist/core/session/self-iteration-job.js +282 -0
  170. package/dist/core/session/session-hooks.d.ts +18 -0
  171. package/dist/core/session/session-hooks.js +58 -0
  172. package/dist/core/session-hooks/self-iteration-job.js +35 -35
  173. package/dist/core/{cache.js → storage/cache.js} +2 -2
  174. package/dist/core/sync/qmd-sync.d.ts +1 -13
  175. package/dist/core/sync/qmd-sync.js +1 -13
  176. package/dist/core/toon.d.ts +43 -0
  177. package/dist/core/toon.js +160 -0
  178. package/dist/core/utils/memory-operations.js +1 -1
  179. package/dist/core/utils/vector-operations.d.ts +71 -0
  180. package/dist/core/utils/vector-operations.js +129 -0
  181. package/dist/db/adapter.d.ts +3 -3
  182. package/dist/db/adapter.js +115 -36
  183. package/dist/db/bootstrap.js +927 -555
  184. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +74 -25
  185. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +91 -24
  186. package/dist/{drizzle → db/drizzle}/schema.d.ts +79 -32
  187. package/dist/{drizzle → db/drizzle}/schema.js +106 -35
  188. package/dist/db/drizzle.config.d.ts +3 -0
  189. package/dist/db/drizzle.config.js +12 -0
  190. package/dist/db/index.d.ts +1 -5
  191. package/dist/db/index.js +51 -8
  192. package/dist/db/neon.d.ts +8 -0
  193. package/dist/db/neon.js +20 -0
  194. package/dist/db/schema/index.d.ts +40 -0
  195. package/dist/db/schema/index.js +105 -0
  196. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  197. package/dist/db/schema/tables/context-sessions.js +37 -0
  198. package/dist/db/schema/tables/conversations.d.ts +9 -0
  199. package/dist/db/schema/tables/conversations.js +47 -0
  200. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  201. package/dist/db/schema/tables/core-memory.js +41 -0
  202. package/dist/db/schema/tables/entities.d.ts +9 -0
  203. package/dist/db/schema/tables/entities.js +39 -0
  204. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  205. package/dist/db/schema/tables/entity-relations.js +31 -0
  206. package/dist/db/schema/tables/learnings.d.ts +9 -0
  207. package/dist/db/schema/tables/learnings.js +66 -0
  208. package/dist/db/schema/tables/memories.d.ts +9 -0
  209. package/dist/db/schema/tables/memories.js +161 -0
  210. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  211. package/dist/db/schema/tables/memory-associations.js +39 -0
  212. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  213. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  214. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  215. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  216. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  217. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  218. package/dist/db/schema/tables/messages.d.ts +9 -0
  219. package/dist/db/schema/tables/messages.js +41 -0
  220. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  221. package/dist/db/schema/tables/namespaces.js +37 -0
  222. package/dist/db/schema/tables/projects.d.ts +9 -0
  223. package/dist/db/schema/tables/projects.js +31 -0
  224. package/dist/db/schema/tables/users.d.ts +9 -0
  225. package/dist/db/schema/tables/users.js +27 -0
  226. package/dist/db/schema.d.ts +1 -1
  227. package/dist/db/schema.js +2 -2
  228. package/dist/db/supabase.d.ts +9 -0
  229. package/dist/db/supabase.js +24 -0
  230. package/dist/index.d.ts +2 -14
  231. package/dist/index.js +1457 -631
  232. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  233. package/dist/webui/server.d.ts +5 -0
  234. package/dist/{api/web/web.js → webui/server.js} +538 -509
  235. package/generated/mcp/manifest.json +23 -23
  236. package/{.mcp.json → mcp.json.example} +1 -1
  237. package/package.json +159 -169
  238. package/scripts/README.md +60 -0
  239. package/scripts/copy-runtime-assets.mjs +26 -0
  240. package/scripts/generate-mcp.mjs +264 -264
  241. package/scripts/github-release.sh +4 -4
  242. package/scripts/install-claude-code.sh +85 -0
  243. package/scripts/install-cursor.sh +56 -0
  244. package/scripts/install-hooks.sh +73 -0
  245. package/scripts/install-interactive.mjs +357 -674
  246. package/scripts/install-opencode.sh +75 -0
  247. package/scripts/install-windsurf.sh +67 -0
  248. package/skills/squish-memory/SKILL.md +104 -100
  249. package/skills/squish-memory/{install.mjs → scripts/install.mjs} +2 -2
  250. package/skills/squish-memory/{install.sh → scripts/install.sh} +2 -2
  251. package/skills/squish-memory/write_skill.js +2 -0
  252. package/.claude-plugin/marketplace.json +0 -20
  253. package/.claude-plugin/plugin.json +0 -32
  254. package/.env.mcp.example +0 -56
  255. package/QUICK-START.md +0 -71
  256. package/bin/squish-add.mjs +0 -32
  257. package/bin/squish-rm.mjs +0 -21
  258. package/commands/observe.md +0 -5
  259. package/dist/algorithms/analytics/token-estimator.d.ts.map +0 -1
  260. package/dist/algorithms/analytics/token-estimator.js.map +0 -1
  261. package/dist/algorithms/detection/hash-filters.d.ts.map +0 -1
  262. package/dist/algorithms/detection/hash-filters.js.map +0 -1
  263. package/dist/algorithms/detection/semantic-ranker.d.ts.map +0 -1
  264. package/dist/algorithms/detection/semantic-ranker.js.map +0 -1
  265. package/dist/algorithms/detection/two-stage-detector.d.ts.map +0 -1
  266. package/dist/algorithms/detection/two-stage-detector.js.map +0 -1
  267. package/dist/algorithms/handlers/approve-merge.d.ts.map +0 -1
  268. package/dist/algorithms/handlers/approve-merge.js.map +0 -1
  269. package/dist/algorithms/handlers/detect-duplicates.d.ts.map +0 -1
  270. package/dist/algorithms/handlers/detect-duplicates.js.map +0 -1
  271. package/dist/algorithms/handlers/get-stats.d.ts.map +0 -1
  272. package/dist/algorithms/handlers/get-stats.js.map +0 -1
  273. package/dist/algorithms/handlers/list-proposals.d.ts.map +0 -1
  274. package/dist/algorithms/handlers/list-proposals.js.map +0 -1
  275. package/dist/algorithms/handlers/preview-merge.d.ts.map +0 -1
  276. package/dist/algorithms/handlers/preview-merge.js.map +0 -1
  277. package/dist/algorithms/handlers/reject-merge.d.ts.map +0 -1
  278. package/dist/algorithms/handlers/reject-merge.js.map +0 -1
  279. package/dist/algorithms/handlers/reverse-merge.d.ts.map +0 -1
  280. package/dist/algorithms/handlers/reverse-merge.js.map +0 -1
  281. package/dist/algorithms/safety/safety-checks.d.ts.map +0 -1
  282. package/dist/algorithms/safety/safety-checks.js.map +0 -1
  283. package/dist/algorithms/strategies/merge-strategies.d.ts.map +0 -1
  284. package/dist/algorithms/strategies/merge-strategies.js.map +0 -1
  285. package/dist/algorithms/utils/response-builder.d.ts.map +0 -1
  286. package/dist/algorithms/utils/response-builder.js.map +0 -1
  287. package/dist/api/web/index.d.ts +0 -3
  288. package/dist/api/web/index.d.ts.map +0 -1
  289. package/dist/api/web/index.js +0 -4
  290. package/dist/api/web/index.js.map +0 -1
  291. package/dist/api/web/web-server.d.ts +0 -3
  292. package/dist/api/web/web-server.d.ts.map +0 -1
  293. package/dist/api/web/web-server.js +0 -6
  294. package/dist/api/web/web-server.js.map +0 -1
  295. package/dist/api/web/web.d.ts +0 -4
  296. package/dist/api/web/web.d.ts.map +0 -1
  297. package/dist/api/web/web.js.map +0 -1
  298. package/dist/commands/managed-sync.d.ts.map +0 -1
  299. package/dist/commands/managed-sync.js.map +0 -1
  300. package/dist/commands/mcp-server.d.ts.map +0 -1
  301. package/dist/commands/mcp-server.js +0 -393
  302. package/dist/commands/mcp-server.js.map +0 -1
  303. package/dist/config.d.ts.map +0 -1
  304. package/dist/config.js.map +0 -1
  305. package/dist/core/agent-memory.d.ts.map +0 -1
  306. package/dist/core/agent-memory.js.map +0 -1
  307. package/dist/core/associations.d.ts.map +0 -1
  308. package/dist/core/associations.js.map +0 -1
  309. package/dist/core/cache.d.ts.map +0 -1
  310. package/dist/core/cache.js.map +0 -1
  311. package/dist/core/consolidation.d.ts.map +0 -1
  312. package/dist/core/consolidation.js.map +0 -1
  313. package/dist/core/context-paging.d.ts.map +0 -1
  314. package/dist/core/context-paging.js.map +0 -1
  315. package/dist/core/context.d.ts.map +0 -1
  316. package/dist/core/context.js +0 -24
  317. package/dist/core/context.js.map +0 -1
  318. package/dist/core/core-memory.d.ts.map +0 -1
  319. package/dist/core/core-memory.js.map +0 -1
  320. package/dist/core/database.d.ts.map +0 -1
  321. package/dist/core/database.js.map +0 -1
  322. package/dist/core/embeddings/google-multimodal.d.ts.map +0 -1
  323. package/dist/core/embeddings/google-multimodal.js.map +0 -1
  324. package/dist/core/embeddings/qmd-client.d.ts.map +0 -1
  325. package/dist/core/embeddings/qmd-client.js.map +0 -1
  326. package/dist/core/embeddings.d.ts.map +0 -1
  327. package/dist/core/embeddings.js.map +0 -1
  328. package/dist/core/governance.d.ts.map +0 -1
  329. package/dist/core/governance.js +0 -64
  330. package/dist/core/governance.js.map +0 -1
  331. package/dist/core/index.d.ts.map +0 -1
  332. package/dist/core/index.js.map +0 -1
  333. package/dist/core/layers/generator.d.ts.map +0 -1
  334. package/dist/core/layers/generator.js.map +0 -1
  335. package/dist/core/lifecycle.d.ts.map +0 -1
  336. package/dist/core/lifecycle.js.map +0 -1
  337. package/dist/core/local-embeddings.d.ts.map +0 -1
  338. package/dist/core/local-embeddings.js.map +0 -1
  339. package/dist/core/logger.d.ts.map +0 -1
  340. package/dist/core/logger.js.map +0 -1
  341. package/dist/core/mcp/client.d.ts.map +0 -1
  342. package/dist/core/mcp/client.js.map +0 -1
  343. package/dist/core/mcp/index.d.ts.map +0 -1
  344. package/dist/core/mcp/index.js.map +0 -1
  345. package/dist/core/mcp/server.d.ts.map +0 -1
  346. package/dist/core/mcp/server.js.map +0 -1
  347. package/dist/core/mcp/standalone-server.d.ts.map +0 -1
  348. package/dist/core/mcp/standalone-server.js.map +0 -1
  349. package/dist/core/mcp/tools.d.ts.map +0 -1
  350. package/dist/core/mcp/tools.js.map +0 -1
  351. package/dist/core/mcp/types.d.ts.map +0 -1
  352. package/dist/core/mcp/types.js.map +0 -1
  353. package/dist/core/memory/bridge-discovery.d.ts.map +0 -1
  354. package/dist/core/memory/bridge-discovery.js.map +0 -1
  355. package/dist/core/memory/categorizer.d.ts.map +0 -1
  356. package/dist/core/memory/categorizer.js.map +0 -1
  357. package/dist/core/memory/conflict-detector.d.ts.map +0 -1
  358. package/dist/core/memory/conflict-detector.js.map +0 -1
  359. package/dist/core/memory/consolidation.d.ts.map +0 -1
  360. package/dist/core/memory/consolidation.js.map +0 -1
  361. package/dist/core/memory/context-collector.d.ts.map +0 -1
  362. package/dist/core/memory/context-collector.js.map +0 -1
  363. package/dist/core/memory/contradiction-resolver.d.ts.map +0 -1
  364. package/dist/core/memory/contradiction-resolver.js.map +0 -1
  365. package/dist/core/memory/edit-workflow.d.ts.map +0 -1
  366. package/dist/core/memory/edit-workflow.js.map +0 -1
  367. package/dist/core/memory/entity-extractor.d.ts.map +0 -1
  368. package/dist/core/memory/entity-extractor.js.map +0 -1
  369. package/dist/core/memory/entity-resolver.d.ts.map +0 -1
  370. package/dist/core/memory/entity-resolver.js.map +0 -1
  371. package/dist/core/memory/fact-extractor.d.ts.map +0 -1
  372. package/dist/core/memory/fact-extractor.js.map +0 -1
  373. package/dist/core/memory/feedback-tracker.d.ts.map +0 -1
  374. package/dist/core/memory/feedback-tracker.js.map +0 -1
  375. package/dist/core/memory/hybrid-retrieval.d.ts.map +0 -1
  376. package/dist/core/memory/hybrid-retrieval.js.map +0 -1
  377. package/dist/core/memory/hybrid-scorer.d.ts.map +0 -1
  378. package/dist/core/memory/hybrid-scorer.js.map +0 -1
  379. package/dist/core/memory/hybrid-search.d.ts.map +0 -1
  380. package/dist/core/memory/hybrid-search.js.map +0 -1
  381. package/dist/core/memory/importance.d.ts.map +0 -1
  382. package/dist/core/memory/importance.js.map +0 -1
  383. package/dist/core/memory/index.d.ts.map +0 -1
  384. package/dist/core/memory/index.js.map +0 -1
  385. package/dist/core/memory/memories.d.ts.map +0 -1
  386. package/dist/core/memory/memories.js.map +0 -1
  387. package/dist/core/memory/memory-manager.d.ts.map +0 -1
  388. package/dist/core/memory/memory-manager.js.map +0 -1
  389. package/dist/core/memory/progressive-disclosure.d.ts.map +0 -1
  390. package/dist/core/memory/progressive-disclosure.js.map +0 -1
  391. package/dist/core/memory/query-processor.d.ts.map +0 -1
  392. package/dist/core/memory/query-processor.js.map +0 -1
  393. package/dist/core/memory/query-rewriter.d.ts.map +0 -1
  394. package/dist/core/memory/query-rewriter.js.map +0 -1
  395. package/dist/core/memory/response-analyzer.d.ts.map +0 -1
  396. package/dist/core/memory/response-analyzer.js.map +0 -1
  397. package/dist/core/memory/serialization.d.ts.map +0 -1
  398. package/dist/core/memory/serialization.js.map +0 -1
  399. package/dist/core/memory/stats.d.ts.map +0 -1
  400. package/dist/core/memory/stats.js.map +0 -1
  401. package/dist/core/memory/telemetry.d.ts.map +0 -1
  402. package/dist/core/memory/telemetry.js.map +0 -1
  403. package/dist/core/memory/temporal-facts.d.ts.map +0 -1
  404. package/dist/core/memory/temporal-facts.js.map +0 -1
  405. package/dist/core/memory/temporal-parser.d.ts.map +0 -1
  406. package/dist/core/memory/temporal-parser.js.map +0 -1
  407. package/dist/core/memory/trigger-detector.d.ts.map +0 -1
  408. package/dist/core/memory/trigger-detector.js.map +0 -1
  409. package/dist/core/memory/write-gate.d.ts.map +0 -1
  410. package/dist/core/memory/write-gate.js.map +0 -1
  411. package/dist/core/namespaces/index.d.ts.map +0 -1
  412. package/dist/core/namespaces/index.js.map +0 -1
  413. package/dist/core/namespaces/uri-parser.d.ts.map +0 -1
  414. package/dist/core/namespaces/uri-parser.js.map +0 -1
  415. package/dist/core/observations.d.ts +0 -26
  416. package/dist/core/observations.d.ts.map +0 -1
  417. package/dist/core/observations.js +0 -110
  418. package/dist/core/observations.js.map +0 -1
  419. package/dist/core/privacy.d.ts.map +0 -1
  420. package/dist/core/privacy.js.map +0 -1
  421. package/dist/core/projects.d.ts.map +0 -1
  422. package/dist/core/projects.js.map +0 -1
  423. package/dist/core/redis.d.ts.map +0 -1
  424. package/dist/core/redis.js.map +0 -1
  425. package/dist/core/requirements.d.ts +0 -20
  426. package/dist/core/requirements.d.ts.map +0 -1
  427. package/dist/core/requirements.js +0 -35
  428. package/dist/core/requirements.js.map +0 -1
  429. package/dist/core/scheduler/cron-scheduler.d.ts.map +0 -1
  430. package/dist/core/scheduler/cron-scheduler.js.map +0 -1
  431. package/dist/core/scheduler/heartbeat.d.ts.map +0 -1
  432. package/dist/core/scheduler/heartbeat.js.map +0 -1
  433. package/dist/core/scheduler/index.d.ts.map +0 -1
  434. package/dist/core/scheduler/index.js.map +0 -1
  435. package/dist/core/scheduler/job-runner.d.ts.map +0 -1
  436. package/dist/core/scheduler/job-runner.js.map +0 -1
  437. package/dist/core/search/conversations.d.ts.map +0 -1
  438. package/dist/core/search/conversations.js.map +0 -1
  439. package/dist/core/search/entities.d.ts.map +0 -1
  440. package/dist/core/search/entities.js.map +0 -1
  441. package/dist/core/search/folder-context.d.ts.map +0 -1
  442. package/dist/core/search/folder-context.js.map +0 -1
  443. package/dist/core/search/index.d.ts.map +0 -1
  444. package/dist/core/search/index.js.map +0 -1
  445. package/dist/core/search/qmd-search.d.ts.map +0 -1
  446. package/dist/core/search/qmd-search.js.map +0 -1
  447. package/dist/core/secret-detector.d.ts.map +0 -1
  448. package/dist/core/secret-detector.js.map +0 -1
  449. package/dist/core/session/auto-load.d.ts.map +0 -1
  450. package/dist/core/session/auto-load.js.map +0 -1
  451. package/dist/core/session/index.d.ts.map +0 -1
  452. package/dist/core/session/index.js.map +0 -1
  453. package/dist/core/session/types.d.ts.map +0 -1
  454. package/dist/core/session/types.js.map +0 -1
  455. package/dist/core/session-hooks/self-iteration-job.d.ts.map +0 -1
  456. package/dist/core/session-hooks/self-iteration-job.js.map +0 -1
  457. package/dist/core/session-hooks/session-hooks.d.ts.map +0 -1
  458. package/dist/core/session-hooks/session-hooks.js.map +0 -1
  459. package/dist/core/snapshots/cleanup.d.ts.map +0 -1
  460. package/dist/core/snapshots/cleanup.js.map +0 -1
  461. package/dist/core/snapshots/comparison.d.ts.map +0 -1
  462. package/dist/core/snapshots/comparison.js.map +0 -1
  463. package/dist/core/snapshots/creation.d.ts.map +0 -1
  464. package/dist/core/snapshots/creation.js.map +0 -1
  465. package/dist/core/snapshots/retrieval.d.ts.map +0 -1
  466. package/dist/core/snapshots/retrieval.js.map +0 -1
  467. package/dist/core/snapshots/stats.d.ts.map +0 -1
  468. package/dist/core/snapshots/stats.js.map +0 -1
  469. package/dist/core/snapshots.d.ts.map +0 -1
  470. package/dist/core/snapshots.js.map +0 -1
  471. package/dist/core/summarization/cleanup.d.ts.map +0 -1
  472. package/dist/core/summarization/cleanup.js.map +0 -1
  473. package/dist/core/summarization/queries.d.ts.map +0 -1
  474. package/dist/core/summarization/queries.js.map +0 -1
  475. package/dist/core/summarization/stats.d.ts.map +0 -1
  476. package/dist/core/summarization/stats.js.map +0 -1
  477. package/dist/core/summarization/strategies.d.ts.map +0 -1
  478. package/dist/core/summarization/strategies.js.map +0 -1
  479. package/dist/core/summarization.d.ts.map +0 -1
  480. package/dist/core/summarization.js.map +0 -1
  481. package/dist/core/sync/qmd-sync.d.ts.map +0 -1
  482. package/dist/core/sync/qmd-sync.js.map +0 -1
  483. package/dist/core/temporal-facts.d.ts.map +0 -1
  484. package/dist/core/temporal-facts.js.map +0 -1
  485. package/dist/core/tracing/collector.d.ts.map +0 -1
  486. package/dist/core/tracing/collector.js.map +0 -1
  487. package/dist/core/tracing/visualizer.d.ts.map +0 -1
  488. package/dist/core/tracing/visualizer.js.map +0 -1
  489. package/dist/core/utils/cleanup-operations.d.ts.map +0 -1
  490. package/dist/core/utils/cleanup-operations.js.map +0 -1
  491. package/dist/core/utils/content-extraction.d.ts.map +0 -1
  492. package/dist/core/utils/content-extraction.js.map +0 -1
  493. package/dist/core/utils/filter-builder.d.ts.map +0 -1
  494. package/dist/core/utils/filter-builder.js.map +0 -1
  495. package/dist/core/utils/history-traversal.d.ts.map +0 -1
  496. package/dist/core/utils/history-traversal.js.map +0 -1
  497. package/dist/core/utils/memory-operations.d.ts.map +0 -1
  498. package/dist/core/utils/memory-operations.js.map +0 -1
  499. package/dist/core/utils/query-operations.d.ts.map +0 -1
  500. package/dist/core/utils/query-operations.js.map +0 -1
  501. package/dist/core/utils/summarization-helpers.d.ts.map +0 -1
  502. package/dist/core/utils/summarization-helpers.js.map +0 -1
  503. package/dist/core/utils/temporal-queries.d.ts.map +0 -1
  504. package/dist/core/utils/temporal-queries.js.map +0 -1
  505. package/dist/core/utils/version-management.d.ts.map +0 -1
  506. package/dist/core/utils/version-management.js.map +0 -1
  507. package/dist/core/utils.d.ts.map +0 -1
  508. package/dist/core/utils.js.map +0 -1
  509. package/dist/core/worker.d.ts.map +0 -1
  510. package/dist/core/worker.js.map +0 -1
  511. package/dist/db/adapter.d.ts.map +0 -1
  512. package/dist/db/adapter.js.map +0 -1
  513. package/dist/db/bootstrap.d.ts.map +0 -1
  514. package/dist/db/bootstrap.js.map +0 -1
  515. package/dist/db/index.d.ts.map +0 -1
  516. package/dist/db/index.js.map +0 -1
  517. package/dist/db/schema.d.ts.map +0 -1
  518. package/dist/db/schema.js.map +0 -1
  519. package/dist/drizzle/schema-sqlite.d.ts.map +0 -1
  520. package/dist/drizzle/schema-sqlite.js.map +0 -1
  521. package/dist/drizzle/schema.d.ts.map +0 -1
  522. package/dist/drizzle/schema.js.map +0 -1
  523. package/dist/index.d.ts.map +0 -1
  524. package/dist/index.js.map +0 -1
  525. package/hooks/hooks.json +0 -52
  526. package/hooks/post-tool-use.js +0 -26
  527. package/hooks/session-end.js +0 -28
  528. package/hooks/session-start.js +0 -33
  529. package/hooks/user-prompt-submit.js +0 -26
  530. package/hooks/utils.js +0 -153
  531. package/npx-installer.js +0 -208
  532. package/packages/plugin-claude-code/README.md +0 -73
  533. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  534. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +0 -1
  535. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  536. package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +0 -1
  537. package/packages/plugin-claude-code/package.json +0 -31
  538. package/packages/plugin-openclaw/README.md +0 -70
  539. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  540. package/packages/plugin-openclaw/dist/index.d.ts.map +0 -1
  541. package/packages/plugin-openclaw/dist/index.js +0 -262
  542. package/packages/plugin-openclaw/dist/index.js.map +0 -1
  543. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  544. package/packages/plugin-openclaw/package.json +0 -31
  545. package/packages/plugin-opencode/install.mjs +0 -217
  546. package/packages/plugin-opencode/package.json +0 -21
  547. package/scripts/db/check-db.mjs +0 -88
  548. package/scripts/db/fix-all-columns.mjs +0 -52
  549. package/scripts/db/fix-schema-all.mjs +0 -55
  550. package/scripts/db/fix-schema-full.mjs +0 -46
  551. package/scripts/db/fix-schema.mjs +0 -38
  552. package/scripts/db/init-db.mjs +0 -13
  553. package/scripts/db/recreate-db.mjs +0 -14
  554. package/scripts/install-mcp.mjs +0 -116
  555. package/scripts/install-web.sh +0 -120
  556. package/scripts/install.mjs +0 -340
  557. package/scripts/openclaw-bootstrap.mjs +0 -127
  558. package/scripts/package-release.sh +0 -71
  559. package/scripts/test/test-all-systems.mjs +0 -139
  560. package/scripts/test/test-memory-system.mjs +0 -139
  561. package/scripts/test/test-v0.5.0.mjs +0 -210
  562. package/skills/memory-guide/SKILL.md +0 -256
  563. package/skills/squish-cli/SKILL.md +0 -200
  564. package/skills/squish-mcp/SKILL.md +0 -311
  565. package/skills/squish-memory/claude-desktop.json +0 -12
  566. package/skills/squish-memory/openclaw.json +0 -13
  567. package/skills/squish-memory/opencode.json +0 -14
  568. package/skills/squish-memory/skill.json +0 -32
  569. /package/{commands → core/commands}/context-paging.md +0 -0
  570. /package/{commands → core/commands}/context-status.md +0 -0
  571. /package/{commands → core/commands}/context.md +0 -0
  572. /package/{commands → core/commands}/core-memory.md +0 -0
  573. /package/{commands → core/commands}/health.md +0 -0
  574. /package/{commands → core/commands}/merge.md +0 -0
  575. /package/{commands → core/commands}/recall.md +0 -0
  576. /package/{commands → core/commands}/remember.md +0 -0
  577. /package/{commands → core/commands}/search.md +0 -0
  578. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  579. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  580. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  581. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  582. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  583. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  584. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  585. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  586. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  587. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  588. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  589. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  590. /package/dist/{commands → core/commands}/managed-sync.d.ts +0 -0
  591. /package/dist/{commands → core/commands}/mcp-server.d.ts +0 -0
  592. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  593. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  594. /package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +0 -0
  595. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  596. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  597. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  598. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  599. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  600. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  601. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * TOON Compression - Token-efficient memory format
3
+ *
4
+ * Compact format for memory context using abbreviated notation.
5
+ * Achieves efficient token usage for context injection.
6
+ *
7
+ * Format:
8
+ * {
9
+ * m:[type], // memory type (1-2 chars)
10
+ * c:"...", // content (truncated)
11
+ * t:[], // tags (array)
12
+ * d:123 // days ago
13
+ * }
14
+ */
15
+ const MAX_CONTENT_LENGTH = 80; // Max chars per content
16
+ const MAX_TAGS = 3; // Max tags to include
17
+ /**
18
+ * Compress a memory to TOON format
19
+ */
20
+ export function compressForContext(content) {
21
+ // If not JSON or already short, just return
22
+ if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
23
+ return content;
24
+ }
25
+ try {
26
+ const parsed = JSON.parse(content);
27
+ // Build compact TOON object
28
+ const toon = {
29
+ m: parsed.type?.substring(0, 2) || 'ob', // observation -> ob
30
+ };
31
+ // Truncate content
32
+ if (parsed.content) {
33
+ const truncated = parsed.content.substring(0, MAX_CONTENT_LENGTH);
34
+ toon.c = truncated.length < parsed.content.length ? truncated + '..' : truncated;
35
+ }
36
+ // Add tags (limited)
37
+ if (parsed.tags && Array.isArray(parsed.tags)) {
38
+ toon.t = parsed.tags.slice(0, MAX_TAGS);
39
+ }
40
+ // Add days ago if there's a date
41
+ if (parsed.createdAt) {
42
+ const days = Math.floor((Date.now() - new Date(parsed.createdAt).getTime()) / (1000 * 60 * 60 * 24));
43
+ if (days > 0) {
44
+ toon.d = days;
45
+ }
46
+ }
47
+ return JSON.stringify(toon);
48
+ }
49
+ catch {
50
+ // Not parseable JSON, return truncated content
51
+ return content.substring(0, MAX_CONTENT_LENGTH);
52
+ }
53
+ }
54
+ /**
55
+ * Decompress TOON back to readable format
56
+ */
57
+ export function decompressFromContext(toonString) {
58
+ // Check if it's TOON format
59
+ if (!isToon(toonString)) {
60
+ return toonString;
61
+ }
62
+ try {
63
+ const parsed = JSON.parse(toonString);
64
+ // If it has TOON markers, expand it
65
+ if (parsed.m || parsed.c || parsed.t) {
66
+ const typeMap = {
67
+ ob: 'observation',
68
+ su: 'success',
69
+ f: 'failure',
70
+ fx: 'fix',
71
+ i: 'insight',
72
+ };
73
+ const type = typeMap[parsed.m] || 'observation';
74
+ const parts = [`[${type}]`];
75
+ if (parsed.c) {
76
+ parts.push(parsed.c);
77
+ }
78
+ if (parsed.t && parsed.t.length > 0) {
79
+ parts.push(`#${parsed.t.join(' #')}`);
80
+ }
81
+ if (parsed.d) {
82
+ parts.push(`(${parsed.d}d ago)`);
83
+ }
84
+ return parts.join(' ');
85
+ }
86
+ return toonString;
87
+ }
88
+ catch {
89
+ // Not valid TOON, return as-is
90
+ return toonString;
91
+ }
92
+ }
93
+ /**
94
+ * Estimate compression ratio
95
+ */
96
+ export function estimateCompressionRatio(content) {
97
+ if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
98
+ return 1.0;
99
+ }
100
+ const compressed = compressForContext(content);
101
+ return compressed.length / content.length;
102
+ }
103
+ /**
104
+ * Check if content is JSON
105
+ */
106
+ export function isJson(content) {
107
+ try {
108
+ JSON.parse(content);
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ /**
116
+ * Check if content is TOON format
117
+ */
118
+ export function isToon(content) {
119
+ if (!content.startsWith('{') || !content.endsWith('}')) {
120
+ return false;
121
+ }
122
+ try {
123
+ const parsed = JSON.parse(content);
124
+ // Has TOON markers
125
+ return parsed.m !== undefined || parsed.c !== undefined;
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ /**
132
+ * Count tokens (rough estimate)
133
+ */
134
+ export function estimateTokens(text) {
135
+ return Math.ceil(text.length / 4);
136
+ }
137
+ /**
138
+ * Truncate to token budget
139
+ */
140
+ export function truncateToTokenBudget(content, maxTokens) {
141
+ const tokens = estimateTokens(content);
142
+ if (tokens <= maxTokens) {
143
+ return content;
144
+ }
145
+ // Binary search for the right length
146
+ let low = 0;
147
+ let high = content.length;
148
+ while (low < high) {
149
+ const mid = Math.floor((low + high) / 2);
150
+ const estimated = estimateTokens(content.substring(0, mid));
151
+ if (estimated <= maxTokens) {
152
+ low = mid + 1;
153
+ }
154
+ else {
155
+ high = mid;
156
+ }
157
+ }
158
+ return content.substring(0, low) + '...';
159
+ }
160
+ //# sourceMappingURL=toon.js.map
@@ -5,7 +5,7 @@
5
5
  import { eq } from 'drizzle-orm';
6
6
  import { getDb } from '../../db/index.js';
7
7
  import { getSchema } from '../../db/schema.js';
8
- import { createDatabaseClient } from '../database.js';
8
+ import { createDatabaseClient } from '../storage/database.js';
9
9
  import { config } from '../../config.js';
10
10
  import { logger } from '../logger.js';
11
11
  /**
@@ -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,6 +1,63 @@
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
+ }
48
+ async function createBunSqliteDb(dbPath) {
49
+ // @ts-ignore - bun:sqlite module not found in types but works at runtime
50
+ const { drizzle } = await import('drizzle-orm/bun-sqlite');
51
+ const schemaModule = await import('./drizzle/schema-sqlite.js');
52
+ // Bun SQLite doesn't need file path for in-memory, but we'll use file path for persistence
53
+ // @ts-ignore - bun:sqlite module not found in types but works at runtime
54
+ const sqlite = new (await import('bun:sqlite')).default(dbPath);
55
+ // Enable foreign keys
56
+ sqlite.exec('PRAGMA foreign_keys = ON');
57
+ await ensureSqliteSchema(sqlite);
58
+ logger.info('SQLite initialized with bun:sqlite');
59
+ return drizzle(sqlite, { schema: schemaModule });
60
+ }
4
61
  export async function createDb() {
5
62
  if (config.isTeamMode) {
6
63
  return createPostgresDb();
@@ -12,7 +69,7 @@ export async function createDb() {
12
69
  async function createPostgresDb() {
13
70
  const { Pool } = await import('pg');
14
71
  const { drizzle } = await import('drizzle-orm/node-postgres');
15
- const schemaModule = await import('../drizzle/schema.js');
72
+ const schemaModule = await import('./drizzle/schema.js');
16
73
  const pool = new Pool({
17
74
  connectionString: process.env.DATABASE_URL,
18
75
  max: 20,
@@ -22,39 +79,46 @@ async function createPostgresDb() {
22
79
  }
23
80
  async function createSqliteDb() {
24
81
  const dbPath = `${getDataDir()}/squish.db`;
25
- // Try better-sqlite3 first (best performance)
82
+ const errors = [];
83
+ if (isBunRuntime()) {
84
+ try {
85
+ return await createBunSqliteDb(dbPath);
86
+ }
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),
92
+ });
93
+ }
94
+ }
95
+ }
26
96
  try {
27
97
  return await createBetterSqliteDb(dbPath);
28
98
  }
29
- catch (betterSqliteError) {
30
- logger.warn('better-sqlite3 failed, trying sql.js fallback', {
31
- error: betterSqliteError.message
32
- });
33
- // Fallback to sql.js (pure JavaScript, no native module)
34
- try {
35
- return await createSqlJsDb(dbPath);
36
- }
37
- catch (sqlJsError) {
38
- // Both failed - this is critical, Squish cannot work without DB
39
- logger.error('CRITICAL: SQLite database initialization failed', {
40
- betterSqliteError: betterSqliteError.message,
41
- sqlJsError: sqlJsError.message
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),
42
104
  });
43
- throw new Error(`Squish requires SQLite to function. Database initialization failed.\n` +
44
- `Primary error (better-sqlite3): ${betterSqliteError.message}\n` +
45
- `Fallback error (sql.js): ${sqlJsError.message}\n\n` +
46
- `Solutions:\n` +
47
- `1. Rebuild native module: npm rebuild better-sqlite3\n` +
48
- `2. Install build tools: npm install -g windows-build-tools (Windows)\n` +
49
- `3. Or use PostgreSQL instead by setting DATABASE_URL environment variable`);
50
105
  }
51
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'));
52
116
  }
53
117
  async function createBetterSqliteDb(dbPath) {
54
118
  const DatabaseModule = await import('better-sqlite3');
55
119
  const Database = DatabaseModule.default;
56
120
  const { drizzle } = await import('drizzle-orm/better-sqlite3');
57
- const schemaModule = await import('../drizzle/schema-sqlite.js');
121
+ const schemaModule = await import('./drizzle/schema-sqlite.js');
58
122
  const sqlite = new Database(dbPath);
59
123
  // Enable foreign keys
60
124
  sqlite.pragma('foreign_keys = ON');
@@ -66,29 +130,44 @@ async function createSqlJsDb(dbPath) {
66
130
  // @ts-ignore - sql.js has no types but works fine
67
131
  const initSqlJs = await import('sql.js');
68
132
  const { drizzle } = await import('drizzle-orm/sql-js');
69
- const schemaModule = await import('../drizzle/schema-sqlite.js');
70
- const fs = await import('fs');
71
- const path = await import('path');
72
- 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
+ });
73
138
  let data;
74
- // Try to load existing database
75
139
  if (fs.existsSync(dbPath)) {
76
140
  data = fs.readFileSync(dbPath);
77
141
  }
78
142
  const sqlite = new SQL.Database(data);
79
- // Enable foreign keys
80
- sqlite.run('PRAGMA foreign_keys = ON');
81
- // Schema bootstrap
143
+ sqlite.exec('PRAGMA foreign_keys = ON');
82
144
  await ensureSqliteSchema(sqlite);
83
- // Persist database on changes (sql.js is in-memory by default)
145
+ persistSqlJsDatabase(sqlite, dbPath);
84
146
  const originalExec = sqlite.exec.bind(sqlite);
85
- sqlite.exec = function (...args) {
147
+ sqlite.exec = (...args) => {
148
+ const [query] = args;
86
149
  const result = originalExec(...args);
87
- // Save after each exec
88
- const data = sqlite.export();
89
- fs.writeFileSync(dbPath, Buffer.from(data));
150
+ if (typeof query === 'string' && shouldPersistSql(query)) {
151
+ persistSqlJsDatabase(sqlite, dbPath);
152
+ }
90
153
  return result;
91
154
  };
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);
162
+ }
163
+ return result;
164
+ };
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);
170
+ };
92
171
  logger.info('SQLite initialized with sql.js (pure JavaScript fallback)');
93
172
  return drizzle(sqlite, { schema: schemaModule });
94
173
  }