squish-memory 0.7.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 (388) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +32 -0
  3. package/.mcp.json +14 -0
  4. package/LICENSE +21 -0
  5. package/README.md +556 -0
  6. package/commands/context-paging.md +51 -0
  7. package/commands/context-status.md +22 -0
  8. package/commands/context.md +5 -0
  9. package/commands/core-memory.md +56 -0
  10. package/commands/health.md +5 -0
  11. package/commands/init.md +39 -0
  12. package/commands/merge.md +113 -0
  13. package/commands/observe.md +5 -0
  14. package/commands/recall.md +5 -0
  15. package/commands/remember.md +11 -0
  16. package/commands/search.md +10 -0
  17. package/dist/adapters/claude-code/capture.d.ts +11 -0
  18. package/dist/adapters/claude-code/capture.d.ts.map +1 -0
  19. package/dist/adapters/claude-code/capture.js +100 -0
  20. package/dist/adapters/claude-code/capture.js.map +1 -0
  21. package/dist/adapters/claude-code/index.d.ts +5 -0
  22. package/dist/adapters/claude-code/index.d.ts.map +1 -0
  23. package/dist/adapters/claude-code/index.js +6 -0
  24. package/dist/adapters/claude-code/index.js.map +1 -0
  25. package/dist/adapters/claude-code/injection.d.ts +34 -0
  26. package/dist/adapters/claude-code/injection.d.ts.map +1 -0
  27. package/dist/adapters/claude-code/injection.js +127 -0
  28. package/dist/adapters/claude-code/injection.js.map +1 -0
  29. package/dist/adapters/claude-code/plugin-wrapper.d.ts +21 -0
  30. package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +1 -0
  31. package/dist/adapters/claude-code/plugin-wrapper.js +239 -0
  32. package/dist/adapters/claude-code/plugin-wrapper.js.map +1 -0
  33. package/dist/adapters/claude-code/types.d.ts +46 -0
  34. package/dist/adapters/claude-code/types.d.ts.map +1 -0
  35. package/dist/adapters/claude-code/types.js +6 -0
  36. package/dist/adapters/claude-code/types.js.map +1 -0
  37. package/dist/algorithms/merge/analytics/token-estimator.d.ts +50 -0
  38. package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +1 -0
  39. package/dist/algorithms/merge/analytics/token-estimator.js +154 -0
  40. package/dist/algorithms/merge/analytics/token-estimator.js.map +1 -0
  41. package/dist/algorithms/merge/detection/hash-filters.d.ts +47 -0
  42. package/dist/algorithms/merge/detection/hash-filters.d.ts.map +1 -0
  43. package/dist/algorithms/merge/detection/hash-filters.js +190 -0
  44. package/dist/algorithms/merge/detection/hash-filters.js.map +1 -0
  45. package/dist/algorithms/merge/detection/semantic-ranker.d.ts +32 -0
  46. package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +1 -0
  47. package/dist/algorithms/merge/detection/semantic-ranker.js +118 -0
  48. package/dist/algorithms/merge/detection/semantic-ranker.js.map +1 -0
  49. package/dist/algorithms/merge/detection/two-stage-detector.d.ts +49 -0
  50. package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -0
  51. package/dist/algorithms/merge/detection/two-stage-detector.js +185 -0
  52. package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -0
  53. package/dist/algorithms/merge/handlers/approve-merge.d.ts +22 -0
  54. package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +1 -0
  55. package/dist/algorithms/merge/handlers/approve-merge.js +179 -0
  56. package/dist/algorithms/merge/handlers/approve-merge.js.map +1 -0
  57. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts +47 -0
  58. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +1 -0
  59. package/dist/algorithms/merge/handlers/detect-duplicates.js +165 -0
  60. package/dist/algorithms/merge/handlers/detect-duplicates.js.map +1 -0
  61. package/dist/algorithms/merge/handlers/get-stats.d.ts +39 -0
  62. package/dist/algorithms/merge/handlers/get-stats.d.ts.map +1 -0
  63. package/dist/algorithms/merge/handlers/get-stats.js +88 -0
  64. package/dist/algorithms/merge/handlers/get-stats.js.map +1 -0
  65. package/dist/algorithms/merge/handlers/list-proposals.d.ts +45 -0
  66. package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +1 -0
  67. package/dist/algorithms/merge/handlers/list-proposals.js +83 -0
  68. package/dist/algorithms/merge/handlers/list-proposals.js.map +1 -0
  69. package/dist/algorithms/merge/handlers/preview-merge.d.ts +39 -0
  70. package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +1 -0
  71. package/dist/algorithms/merge/handlers/preview-merge.js +93 -0
  72. package/dist/algorithms/merge/handlers/preview-merge.js.map +1 -0
  73. package/dist/algorithms/merge/handlers/reject-merge.d.ts +28 -0
  74. package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +1 -0
  75. package/dist/algorithms/merge/handlers/reject-merge.js +69 -0
  76. package/dist/algorithms/merge/handlers/reject-merge.js.map +1 -0
  77. package/dist/algorithms/merge/handlers/reverse-merge.d.ts +21 -0
  78. package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +1 -0
  79. package/dist/algorithms/merge/handlers/reverse-merge.js +121 -0
  80. package/dist/algorithms/merge/handlers/reverse-merge.js.map +1 -0
  81. package/dist/algorithms/merge/safety/safety-checks.d.ts +22 -0
  82. package/dist/algorithms/merge/safety/safety-checks.d.ts.map +1 -0
  83. package/dist/algorithms/merge/safety/safety-checks.js +215 -0
  84. package/dist/algorithms/merge/safety/safety-checks.js.map +1 -0
  85. package/dist/algorithms/merge/strategies/merge-strategies.d.ts +32 -0
  86. package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +1 -0
  87. package/dist/algorithms/merge/strategies/merge-strategies.js +337 -0
  88. package/dist/algorithms/merge/strategies/merge-strategies.js.map +1 -0
  89. package/dist/api/web/web.d.ts +4 -0
  90. package/dist/api/web/web.d.ts.map +1 -0
  91. package/dist/api/web/web.js +484 -0
  92. package/dist/api/web/web.js.map +1 -0
  93. package/dist/config.d.ts +28 -0
  94. package/dist/config.d.ts.map +1 -0
  95. package/dist/config.js +83 -0
  96. package/dist/config.js.map +1 -0
  97. package/dist/core/agent-memory.d.ts +22 -0
  98. package/dist/core/agent-memory.d.ts.map +1 -0
  99. package/dist/core/agent-memory.js +111 -0
  100. package/dist/core/agent-memory.js.map +1 -0
  101. package/dist/core/associations.d.ts +32 -0
  102. package/dist/core/associations.d.ts.map +1 -0
  103. package/dist/core/associations.js +249 -0
  104. package/dist/core/associations.js.map +1 -0
  105. package/dist/core/cache.d.ts +13 -0
  106. package/dist/core/cache.d.ts.map +1 -0
  107. package/dist/core/cache.js +202 -0
  108. package/dist/core/cache.js.map +1 -0
  109. package/dist/core/consolidation.d.ts +6 -0
  110. package/dist/core/consolidation.d.ts.map +1 -0
  111. package/dist/core/consolidation.js +40 -0
  112. package/dist/core/consolidation.js.map +1 -0
  113. package/dist/core/context-paging.d.ts +90 -0
  114. package/dist/core/context-paging.d.ts.map +1 -0
  115. package/dist/core/context-paging.js +348 -0
  116. package/dist/core/context-paging.js.map +1 -0
  117. package/dist/core/context.d.ts +7 -0
  118. package/dist/core/context.d.ts.map +1 -0
  119. package/dist/core/context.js +24 -0
  120. package/dist/core/context.js.map +1 -0
  121. package/dist/core/core-memory.d.ts +73 -0
  122. package/dist/core/core-memory.d.ts.map +1 -0
  123. package/dist/core/core-memory.js +214 -0
  124. package/dist/core/core-memory.js.map +1 -0
  125. package/dist/core/database.d.ts +12 -0
  126. package/dist/core/database.d.ts.map +1 -0
  127. package/dist/core/database.js +12 -0
  128. package/dist/core/database.js.map +1 -0
  129. package/dist/core/embeddings/qmd-client.d.ts +136 -0
  130. package/dist/core/embeddings/qmd-client.d.ts.map +1 -0
  131. package/dist/core/embeddings/qmd-client.js +403 -0
  132. package/dist/core/embeddings/qmd-client.js.map +1 -0
  133. package/dist/core/embeddings/qmd-provider.d.ts +65 -0
  134. package/dist/core/embeddings/qmd-provider.d.ts.map +1 -0
  135. package/dist/core/embeddings/qmd-provider.js +133 -0
  136. package/dist/core/embeddings/qmd-provider.js.map +1 -0
  137. package/dist/core/embeddings.d.ts +19 -0
  138. package/dist/core/embeddings.d.ts.map +1 -0
  139. package/dist/core/embeddings.js +297 -0
  140. package/dist/core/embeddings.js.map +1 -0
  141. package/dist/core/governance.d.ts +21 -0
  142. package/dist/core/governance.d.ts.map +1 -0
  143. package/dist/core/governance.js +64 -0
  144. package/dist/core/governance.js.map +1 -0
  145. package/dist/core/index.d.ts +10 -0
  146. package/dist/core/index.d.ts.map +1 -0
  147. package/dist/core/index.js +14 -0
  148. package/dist/core/index.js.map +1 -0
  149. package/dist/core/lifecycle.d.ts +19 -0
  150. package/dist/core/lifecycle.d.ts.map +1 -0
  151. package/dist/core/lifecycle.js +182 -0
  152. package/dist/core/lifecycle.js.map +1 -0
  153. package/dist/core/local-embeddings.d.ts +14 -0
  154. package/dist/core/local-embeddings.d.ts.map +1 -0
  155. package/dist/core/local-embeddings.js +94 -0
  156. package/dist/core/local-embeddings.js.map +1 -0
  157. package/dist/core/logger.d.ts +16 -0
  158. package/dist/core/logger.d.ts.map +1 -0
  159. package/dist/core/logger.js +34 -0
  160. package/dist/core/logger.js.map +1 -0
  161. package/dist/core/memory/bridge-discovery.d.ts +50 -0
  162. package/dist/core/memory/bridge-discovery.d.ts.map +1 -0
  163. package/dist/core/memory/bridge-discovery.js +291 -0
  164. package/dist/core/memory/bridge-discovery.js.map +1 -0
  165. package/dist/core/memory/entity-extractor.d.ts +33 -0
  166. package/dist/core/memory/entity-extractor.d.ts.map +1 -0
  167. package/dist/core/memory/entity-extractor.js +336 -0
  168. package/dist/core/memory/entity-extractor.js.map +1 -0
  169. package/dist/core/memory/entity-resolver.d.ts +23 -0
  170. package/dist/core/memory/entity-resolver.d.ts.map +1 -0
  171. package/dist/core/memory/entity-resolver.js +64 -0
  172. package/dist/core/memory/entity-resolver.js.map +1 -0
  173. package/dist/core/memory/fact-extractor.d.ts +24 -0
  174. package/dist/core/memory/fact-extractor.d.ts.map +1 -0
  175. package/dist/core/memory/fact-extractor.js +89 -0
  176. package/dist/core/memory/fact-extractor.js.map +1 -0
  177. package/dist/core/memory/hybrid-retrieval.d.ts +30 -0
  178. package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -0
  179. package/dist/core/memory/hybrid-retrieval.js +63 -0
  180. package/dist/core/memory/hybrid-retrieval.js.map +1 -0
  181. package/dist/core/memory/hybrid-scorer.d.ts +51 -0
  182. package/dist/core/memory/hybrid-scorer.d.ts.map +1 -0
  183. package/dist/core/memory/hybrid-scorer.js +248 -0
  184. package/dist/core/memory/hybrid-scorer.js.map +1 -0
  185. package/dist/core/memory/index.d.ts +8 -0
  186. package/dist/core/memory/index.d.ts.map +1 -0
  187. package/dist/core/memory/index.js +10 -0
  188. package/dist/core/memory/index.js.map +1 -0
  189. package/dist/core/memory/memories.d.ts +35 -0
  190. package/dist/core/memory/memories.d.ts.map +1 -0
  191. package/dist/core/memory/memories.js +338 -0
  192. package/dist/core/memory/memories.js.map +1 -0
  193. package/dist/core/memory/memory-manager.d.ts +15 -0
  194. package/dist/core/memory/memory-manager.d.ts.map +1 -0
  195. package/dist/core/memory/memory-manager.js +46 -0
  196. package/dist/core/memory/memory-manager.js.map +1 -0
  197. package/dist/core/memory/query-processor.d.ts +21 -0
  198. package/dist/core/memory/query-processor.d.ts.map +1 -0
  199. package/dist/core/memory/query-processor.js +72 -0
  200. package/dist/core/memory/query-processor.js.map +1 -0
  201. package/dist/core/memory/serialization.d.ts +6 -0
  202. package/dist/core/memory/serialization.d.ts.map +1 -0
  203. package/dist/core/memory/serialization.js +35 -0
  204. package/dist/core/memory/serialization.js.map +1 -0
  205. package/dist/core/memory/temporal-parser.d.ts +32 -0
  206. package/dist/core/memory/temporal-parser.d.ts.map +1 -0
  207. package/dist/core/memory/temporal-parser.js +385 -0
  208. package/dist/core/memory/temporal-parser.js.map +1 -0
  209. package/dist/core/observations.d.ts +26 -0
  210. package/dist/core/observations.d.ts.map +1 -0
  211. package/dist/core/observations.js +118 -0
  212. package/dist/core/observations.js.map +1 -0
  213. package/dist/core/privacy.d.ts +23 -0
  214. package/dist/core/privacy.d.ts.map +1 -0
  215. package/dist/core/privacy.js +82 -0
  216. package/dist/core/privacy.js.map +1 -0
  217. package/dist/core/projects.d.ts +10 -0
  218. package/dist/core/projects.d.ts.map +1 -0
  219. package/dist/core/projects.js +66 -0
  220. package/dist/core/projects.js.map +1 -0
  221. package/dist/core/redis.d.ts +11 -0
  222. package/dist/core/redis.d.ts.map +1 -0
  223. package/dist/core/redis.js +69 -0
  224. package/dist/core/redis.js.map +1 -0
  225. package/dist/core/requirements.d.ts +20 -0
  226. package/dist/core/requirements.d.ts.map +1 -0
  227. package/dist/core/requirements.js +35 -0
  228. package/dist/core/requirements.js.map +1 -0
  229. package/dist/core/search/conversations.d.ts +25 -0
  230. package/dist/core/search/conversations.d.ts.map +1 -0
  231. package/dist/core/search/conversations.js +112 -0
  232. package/dist/core/search/conversations.js.map +1 -0
  233. package/dist/core/search/entities.d.ts +12 -0
  234. package/dist/core/search/entities.d.ts.map +1 -0
  235. package/dist/core/search/entities.js +34 -0
  236. package/dist/core/search/entities.js.map +1 -0
  237. package/dist/core/search/folder-context.d.ts +25 -0
  238. package/dist/core/search/folder-context.d.ts.map +1 -0
  239. package/dist/core/search/folder-context.js +119 -0
  240. package/dist/core/search/folder-context.js.map +1 -0
  241. package/dist/core/search/index.d.ts +4 -0
  242. package/dist/core/search/index.d.ts.map +1 -0
  243. package/dist/core/search/index.js +5 -0
  244. package/dist/core/search/index.js.map +1 -0
  245. package/dist/core/search/qmd-search.d.ts +61 -0
  246. package/dist/core/search/qmd-search.d.ts.map +1 -0
  247. package/dist/core/search/qmd-search.js +178 -0
  248. package/dist/core/search/qmd-search.js.map +1 -0
  249. package/dist/core/secret-detector.d.ts +32 -0
  250. package/dist/core/secret-detector.d.ts.map +1 -0
  251. package/dist/core/secret-detector.js +88 -0
  252. package/dist/core/secret-detector.js.map +1 -0
  253. package/dist/core/snapshots/cleanup.d.ts +9 -0
  254. package/dist/core/snapshots/cleanup.d.ts.map +1 -0
  255. package/dist/core/snapshots/cleanup.js +12 -0
  256. package/dist/core/snapshots/cleanup.js.map +1 -0
  257. package/dist/core/snapshots/comparison.d.ts +19 -0
  258. package/dist/core/snapshots/comparison.d.ts.map +1 -0
  259. package/dist/core/snapshots/comparison.js +37 -0
  260. package/dist/core/snapshots/comparison.js.map +1 -0
  261. package/dist/core/snapshots/creation.d.ts +19 -0
  262. package/dist/core/snapshots/creation.d.ts.map +1 -0
  263. package/dist/core/snapshots/creation.js +126 -0
  264. package/dist/core/snapshots/creation.js.map +1 -0
  265. package/dist/core/snapshots/retrieval.d.ts +7 -0
  266. package/dist/core/snapshots/retrieval.d.ts.map +1 -0
  267. package/dist/core/snapshots/retrieval.js +41 -0
  268. package/dist/core/snapshots/retrieval.js.map +1 -0
  269. package/dist/core/snapshots/stats.d.ts +11 -0
  270. package/dist/core/snapshots/stats.d.ts.map +1 -0
  271. package/dist/core/snapshots/stats.js +52 -0
  272. package/dist/core/snapshots/stats.js.map +1 -0
  273. package/dist/core/snapshots.d.ts +29 -0
  274. package/dist/core/snapshots.d.ts.map +1 -0
  275. package/dist/core/snapshots.js +220 -0
  276. package/dist/core/snapshots.js.map +1 -0
  277. package/dist/core/summarization/cleanup.d.ts +9 -0
  278. package/dist/core/summarization/cleanup.d.ts.map +1 -0
  279. package/dist/core/summarization/cleanup.js +12 -0
  280. package/dist/core/summarization/cleanup.js.map +1 -0
  281. package/dist/core/summarization/queries.d.ts +9 -0
  282. package/dist/core/summarization/queries.d.ts.map +1 -0
  283. package/dist/core/summarization/queries.js +28 -0
  284. package/dist/core/summarization/queries.js.map +1 -0
  285. package/dist/core/summarization/stats.d.ts +14 -0
  286. package/dist/core/summarization/stats.d.ts.map +1 -0
  287. package/dist/core/summarization/stats.js +52 -0
  288. package/dist/core/summarization/stats.js.map +1 -0
  289. package/dist/core/summarization/strategies.d.ts +24 -0
  290. package/dist/core/summarization/strategies.d.ts.map +1 -0
  291. package/dist/core/summarization/strategies.js +28 -0
  292. package/dist/core/summarization/strategies.js.map +1 -0
  293. package/dist/core/summarization.d.ts +37 -0
  294. package/dist/core/summarization.d.ts.map +1 -0
  295. package/dist/core/summarization.js +188 -0
  296. package/dist/core/summarization.js.map +1 -0
  297. package/dist/core/sync/qmd-sync.d.ts +106 -0
  298. package/dist/core/sync/qmd-sync.d.ts.map +1 -0
  299. package/dist/core/sync/qmd-sync.js +213 -0
  300. package/dist/core/sync/qmd-sync.js.map +1 -0
  301. package/dist/core/temporal-facts.d.ts +54 -0
  302. package/dist/core/temporal-facts.d.ts.map +1 -0
  303. package/dist/core/temporal-facts.js +193 -0
  304. package/dist/core/temporal-facts.js.map +1 -0
  305. package/dist/core/utils/cleanup-operations.d.ts +13 -0
  306. package/dist/core/utils/cleanup-operations.d.ts.map +1 -0
  307. package/dist/core/utils/cleanup-operations.js +44 -0
  308. package/dist/core/utils/cleanup-operations.js.map +1 -0
  309. package/dist/core/utils/content-extraction.d.ts +19 -0
  310. package/dist/core/utils/content-extraction.d.ts.map +1 -0
  311. package/dist/core/utils/content-extraction.js +65 -0
  312. package/dist/core/utils/content-extraction.js.map +1 -0
  313. package/dist/core/utils/filter-builder.d.ts +13 -0
  314. package/dist/core/utils/filter-builder.d.ts.map +1 -0
  315. package/dist/core/utils/filter-builder.js +44 -0
  316. package/dist/core/utils/filter-builder.js.map +1 -0
  317. package/dist/core/utils/history-traversal.d.ts +13 -0
  318. package/dist/core/utils/history-traversal.d.ts.map +1 -0
  319. package/dist/core/utils/history-traversal.js +50 -0
  320. package/dist/core/utils/history-traversal.js.map +1 -0
  321. package/dist/core/utils/memory-operations.d.ts +17 -0
  322. package/dist/core/utils/memory-operations.d.ts.map +1 -0
  323. package/dist/core/utils/memory-operations.js +41 -0
  324. package/dist/core/utils/memory-operations.js.map +1 -0
  325. package/dist/core/utils/query-operations.d.ts +18 -0
  326. package/dist/core/utils/query-operations.d.ts.map +1 -0
  327. package/dist/core/utils/query-operations.js +65 -0
  328. package/dist/core/utils/query-operations.js.map +1 -0
  329. package/dist/core/utils/summarization-helpers.d.ts +21 -0
  330. package/dist/core/utils/summarization-helpers.d.ts.map +1 -0
  331. package/dist/core/utils/summarization-helpers.js +35 -0
  332. package/dist/core/utils/summarization-helpers.js.map +1 -0
  333. package/dist/core/utils/temporal-queries.d.ts +13 -0
  334. package/dist/core/utils/temporal-queries.d.ts.map +1 -0
  335. package/dist/core/utils/temporal-queries.js +27 -0
  336. package/dist/core/utils/temporal-queries.js.map +1 -0
  337. package/dist/core/utils/version-management.d.ts +9 -0
  338. package/dist/core/utils/version-management.d.ts.map +1 -0
  339. package/dist/core/utils/version-management.js +61 -0
  340. package/dist/core/utils/version-management.js.map +1 -0
  341. package/dist/core/utils.d.ts +13 -0
  342. package/dist/core/utils.d.ts.map +1 -0
  343. package/dist/core/utils.js +51 -0
  344. package/dist/core/utils.js.map +1 -0
  345. package/dist/core/worker.d.ts +62 -0
  346. package/dist/core/worker.d.ts.map +1 -0
  347. package/dist/core/worker.js +186 -0
  348. package/dist/core/worker.js.map +1 -0
  349. package/dist/db/adapter.d.ts +6 -0
  350. package/dist/db/adapter.d.ts.map +1 -0
  351. package/dist/db/adapter.js +43 -0
  352. package/dist/db/adapter.js.map +1 -0
  353. package/dist/db/bootstrap.d.ts +9 -0
  354. package/dist/db/bootstrap.d.ts.map +1 -0
  355. package/dist/db/bootstrap.js +444 -0
  356. package/dist/db/bootstrap.js.map +1 -0
  357. package/dist/db/index.d.ts +11 -0
  358. package/dist/db/index.d.ts.map +1 -0
  359. package/dist/db/index.js +43 -0
  360. package/dist/db/index.js.map +1 -0
  361. package/dist/db/schema.d.ts +3 -0
  362. package/dist/db/schema.d.ts.map +1 -0
  363. package/dist/db/schema.js +11 -0
  364. package/dist/db/schema.js.map +1 -0
  365. package/dist/drizzle/schema-sqlite.d.ts +3046 -0
  366. package/dist/drizzle/schema-sqlite.d.ts.map +1 -0
  367. package/dist/drizzle/schema-sqlite.js +405 -0
  368. package/dist/drizzle/schema-sqlite.js.map +1 -0
  369. package/dist/drizzle/schema.d.ts +2969 -0
  370. package/dist/drizzle/schema.d.ts.map +1 -0
  371. package/dist/drizzle/schema.js +555 -0
  372. package/dist/drizzle/schema.js.map +1 -0
  373. package/dist/index.d.ts +34 -0
  374. package/dist/index.d.ts.map +1 -0
  375. package/dist/index.js +784 -0
  376. package/dist/index.js.map +1 -0
  377. package/hooks/hooks.json +52 -0
  378. package/hooks/post-tool-use.js +26 -0
  379. package/hooks/session-end.js +28 -0
  380. package/hooks/session-start.js +33 -0
  381. package/hooks/user-prompt-submit.js +26 -0
  382. package/hooks/utils.js +153 -0
  383. package/npx-installer.js +208 -0
  384. package/package.json +101 -0
  385. package/plugin.json +32 -0
  386. package/skills/memory-guide/SKILL.md +198 -0
  387. package/skills/squish-memory/SKILL.md +87 -0
  388. package/skills/squish-memory/install.sh +91 -0
@@ -0,0 +1,444 @@
1
+ import { existsSync, mkdirSync } from 'fs';
2
+ import { logger } from '../core/logger.js';
3
+ import { getDataDir } from '../config.js';
4
+ const sqliteSchemaSql = `
5
+ PRAGMA foreign_keys = ON;
6
+
7
+ CREATE TABLE IF NOT EXISTS users (
8
+ id TEXT PRIMARY KEY,
9
+ external_id TEXT UNIQUE,
10
+ name TEXT,
11
+ email TEXT,
12
+ preferences TEXT,
13
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
14
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
15
+ );
16
+
17
+ CREATE TABLE IF NOT EXISTS projects (
18
+ id TEXT PRIMARY KEY,
19
+ name TEXT NOT NULL,
20
+ path TEXT NOT NULL,
21
+ description TEXT,
22
+ metadata TEXT,
23
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
24
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
25
+ );
26
+
27
+ CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);
28
+
29
+ CREATE TABLE IF NOT EXISTS memories (
30
+ id TEXT PRIMARY KEY,
31
+ project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
32
+ user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
33
+ type TEXT NOT NULL,
34
+ content TEXT NOT NULL,
35
+ summary TEXT,
36
+ embedding_json TEXT,
37
+ embedding BLOB,
38
+ source TEXT,
39
+ confidence INTEGER DEFAULT 100,
40
+ tags TEXT,
41
+ metadata TEXT,
42
+ is_private INTEGER DEFAULT 0,
43
+ has_secrets INTEGER DEFAULT 0,
44
+ relevance_score INTEGER DEFAULT 50,
45
+ is_active INTEGER DEFAULT 1,
46
+ expires_at INTEGER,
47
+ access_count INTEGER DEFAULT 0,
48
+ last_accessed_at INTEGER,
49
+ is_merged INTEGER DEFAULT 0,
50
+ merged_into_id TEXT,
51
+ merged_at INTEGER,
52
+ is_canonical INTEGER DEFAULT 0,
53
+ merge_source_ids TEXT,
54
+ is_mergeable INTEGER DEFAULT 1,
55
+ merge_version INTEGER DEFAULT 1,
56
+ sector TEXT DEFAULT 'episodic',
57
+ tier TEXT DEFAULT 'hot',
58
+ context_status TEXT DEFAULT 'out-of-context',
59
+ decay_rate INTEGER DEFAULT 30,
60
+ coactivation_score INTEGER DEFAULT 0,
61
+ last_decay_at INTEGER DEFAULT (strftime('%s','now')),
62
+ agent_id TEXT,
63
+ agent_role TEXT,
64
+ visibility_scope TEXT DEFAULT 'private',
65
+ is_protected INTEGER DEFAULT 0,
66
+ is_pinned INTEGER DEFAULT 0,
67
+ is_immutable INTEGER DEFAULT 0,
68
+ write_scope TEXT,
69
+ read_scope TEXT,
70
+ triggered_by TEXT,
71
+ capture_reason TEXT,
72
+ last_used_at INTEGER,
73
+ usage_count INTEGER DEFAULT 0,
74
+ valid_from INTEGER,
75
+ valid_to INTEGER,
76
+ superseded_by TEXT,
77
+ version INTEGER DEFAULT 1,
78
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
79
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
80
+ );
81
+
82
+ CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);
83
+ CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);
84
+ CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);
85
+ CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories(tags);
86
+
87
+ CREATE TABLE IF NOT EXISTS conversations (
88
+ id TEXT PRIMARY KEY,
89
+ project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
90
+ user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
91
+ session_id TEXT NOT NULL,
92
+ title TEXT,
93
+ summary TEXT,
94
+ message_count INTEGER DEFAULT 0,
95
+ token_count INTEGER DEFAULT 0,
96
+ started_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
97
+ ended_at INTEGER,
98
+ metadata TEXT,
99
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
100
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
101
+ );
102
+
103
+ CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);
104
+ CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);
105
+ CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);
106
+
107
+ CREATE TABLE IF NOT EXISTS messages (
108
+ id TEXT PRIMARY KEY,
109
+ conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
110
+ role TEXT NOT NULL,
111
+ content TEXT NOT NULL,
112
+ embedding_json TEXT,
113
+ token_count INTEGER,
114
+ tool_calls TEXT,
115
+ metadata TEXT,
116
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
117
+ );
118
+
119
+ CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);
120
+ CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);
121
+ CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);
122
+
123
+ CREATE TABLE IF NOT EXISTS observations (
124
+ id TEXT PRIMARY KEY,
125
+ project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
126
+ conversation_id TEXT REFERENCES conversations(id) ON DELETE SET NULL,
127
+ type TEXT NOT NULL,
128
+ action TEXT NOT NULL,
129
+ target TEXT,
130
+ summary TEXT NOT NULL,
131
+ details TEXT,
132
+ embedding_json TEXT,
133
+ category TEXT,
134
+ importance INTEGER DEFAULT 50,
135
+ metadata TEXT,
136
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
137
+ );
138
+
139
+ CREATE INDEX IF NOT EXISTS observations_project_idx ON observations(project_id);
140
+ CREATE INDEX IF NOT EXISTS observations_type_idx ON observations(type);
141
+ CREATE INDEX IF NOT EXISTS observations_action_idx ON observations(action);
142
+ CREATE INDEX IF NOT EXISTS observations_created_idx ON observations(created_at);
143
+
144
+ CREATE TABLE IF NOT EXISTS entities (
145
+ id TEXT PRIMARY KEY,
146
+ project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
147
+ name TEXT NOT NULL,
148
+ type TEXT NOT NULL,
149
+ description TEXT,
150
+ embedding_json TEXT,
151
+ properties TEXT,
152
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
153
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
154
+ );
155
+
156
+ CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);
157
+ CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);
158
+ CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);
159
+
160
+ CREATE TABLE IF NOT EXISTS entity_relations (
161
+ id TEXT PRIMARY KEY,
162
+ from_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
163
+ to_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
164
+ type TEXT NOT NULL,
165
+ weight INTEGER DEFAULT 1,
166
+ properties TEXT,
167
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
168
+ );
169
+
170
+ CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);
171
+ CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);
172
+ CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);
173
+
174
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
175
+ content,
176
+ tags,
177
+ content='memories',
178
+ content_rowid='rowid'
179
+ );
180
+
181
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
182
+ INSERT INTO memories_fts(rowid, content, tags)
183
+ VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
184
+ END;
185
+
186
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
187
+ INSERT INTO memories_fts(memories_fts, rowid, content, tags)
188
+ VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
189
+ END;
190
+
191
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
192
+ INSERT INTO memories_fts(memories_fts, rowid, content, tags)
193
+ VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
194
+ INSERT INTO memories_fts(rowid, content, tags)
195
+ VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
196
+ END;
197
+
198
+ CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
199
+ content,
200
+ content='messages',
201
+ content_rowid='rowid'
202
+ );
203
+
204
+ CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
205
+ INSERT INTO messages_fts(rowid, content)
206
+ VALUES (new.rowid, new.content);
207
+ END;
208
+
209
+ CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
210
+ INSERT INTO messages_fts(messages_fts, rowid, content)
211
+ VALUES ('delete', old.rowid, old.content);
212
+ END;
213
+
214
+ CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
215
+ INSERT INTO messages_fts(messages_fts, rowid, content)
216
+ VALUES ('delete', old.rowid, old.content);
217
+ INSERT INTO messages_fts(rowid, content)
218
+ VALUES (new.rowid, new.content);
219
+ END;
220
+
221
+ CREATE TABLE IF NOT EXISTS core_memory (
222
+ id TEXT PRIMARY KEY,
223
+ project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
224
+ user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
225
+ section TEXT NOT NULL,
226
+ content TEXT NOT NULL DEFAULT '',
227
+ size_bytes INTEGER DEFAULT 0 NOT NULL,
228
+ version INTEGER DEFAULT 1 NOT NULL,
229
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
230
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
231
+ );
232
+
233
+ CREATE INDEX IF NOT EXISTS core_memory_project_idx ON core_memory(project_id);
234
+ CREATE INDEX IF NOT EXISTS core_memory_user_idx ON core_memory(user_id);
235
+ CREATE INDEX IF NOT EXISTS core_memory_section_idx ON core_memory(section);
236
+
237
+ CREATE TABLE IF NOT EXISTS context_sessions (
238
+ id TEXT PRIMARY KEY,
239
+ session_id TEXT NOT NULL UNIQUE,
240
+ project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
241
+ user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
242
+ loaded_memory_ids TEXT,
243
+ token_budget INTEGER DEFAULT 8000 NOT NULL,
244
+ tokens_used INTEGER DEFAULT 0 NOT NULL,
245
+ core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
246
+ loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
247
+ metadata TEXT,
248
+ created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
249
+ updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
250
+ );
251
+
252
+ CREATE INDEX IF NOT EXISTS context_sessions_session_idx ON context_sessions(session_id);
253
+ CREATE INDEX IF NOT EXISTS context_sessions_project_idx ON context_sessions(project_id);
254
+ CREATE INDEX IF NOT EXISTS context_sessions_created_idx ON context_sessions(created_at);
255
+ `;
256
+ const postgresStatements = [
257
+ `CREATE EXTENSION IF NOT EXISTS pgcrypto;`,
258
+ `CREATE EXTENSION IF NOT EXISTS vector;`,
259
+ `CREATE EXTENSION IF NOT EXISTS pg_trgm;`,
260
+ `CREATE TABLE IF NOT EXISTS users (
261
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
262
+ external_id TEXT UNIQUE,
263
+ name TEXT,
264
+ email TEXT,
265
+ preferences JSONB,
266
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
267
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
268
+ );`,
269
+ `CREATE TABLE IF NOT EXISTS projects (
270
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
271
+ name TEXT NOT NULL,
272
+ path TEXT NOT NULL,
273
+ description TEXT,
274
+ metadata JSONB,
275
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
276
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
277
+ );`,
278
+ `CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);`,
279
+ `CREATE TABLE IF NOT EXISTS memories (
280
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
281
+ project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
282
+ user_id UUID REFERENCES users(id) ON DELETE SET NULL,
283
+ type TEXT NOT NULL,
284
+ content TEXT NOT NULL,
285
+ summary TEXT,
286
+ embedding vector(1536),
287
+ source TEXT,
288
+ confidence INTEGER DEFAULT 100,
289
+ tags TEXT[],
290
+ metadata JSONB,
291
+ is_active BOOLEAN DEFAULT TRUE,
292
+ expires_at TIMESTAMPTZ,
293
+ access_count INTEGER DEFAULT 0,
294
+ last_accessed_at TIMESTAMPTZ,
295
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
296
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
297
+ );`,
298
+ `CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);`,
299
+ `CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);`,
300
+ `CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);`,
301
+ `CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories USING GIN(tags);`,
302
+ `CREATE INDEX IF NOT EXISTS memories_content_trgm_idx ON memories USING GIN (content gin_trgm_ops);`,
303
+ `CREATE TABLE IF NOT EXISTS conversations (
304
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
305
+ project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
306
+ user_id UUID REFERENCES users(id) ON DELETE SET NULL,
307
+ session_id TEXT NOT NULL,
308
+ title TEXT,
309
+ summary TEXT,
310
+ message_count INTEGER DEFAULT 0,
311
+ token_count INTEGER DEFAULT 0,
312
+ started_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
313
+ ended_at TIMESTAMPTZ,
314
+ metadata JSONB,
315
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
316
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
317
+ );`,
318
+ `CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);`,
319
+ `CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);`,
320
+ `CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);`,
321
+ `CREATE TABLE IF NOT EXISTS messages (
322
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
323
+ conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
324
+ role TEXT NOT NULL,
325
+ content TEXT NOT NULL,
326
+ embedding vector(1536),
327
+ token_count INTEGER,
328
+ tool_calls JSONB,
329
+ metadata JSONB,
330
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
331
+ );`,
332
+ `CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);`,
333
+ `CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);`,
334
+ `CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);`,
335
+ `CREATE INDEX IF NOT EXISTS messages_content_trgm_idx ON messages USING GIN (content gin_trgm_ops);`,
336
+ `CREATE TABLE IF NOT EXISTS observations (
337
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
338
+ project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
339
+ conversation_id UUID REFERENCES conversations(id) ON DELETE SET NULL,
340
+ type TEXT NOT NULL,
341
+ action TEXT NOT NULL,
342
+ target TEXT,
343
+ summary TEXT NOT NULL,
344
+ details JSONB,
345
+ embedding vector(1536),
346
+ category TEXT,
347
+ importance INTEGER DEFAULT 50,
348
+ metadata JSONB,
349
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
350
+ );`,
351
+ `CREATE INDEX IF NOT EXISTS observations_project_idx ON observations(project_id);`,
352
+ `CREATE INDEX IF NOT EXISTS observations_type_idx ON observations(type);`,
353
+ `CREATE INDEX IF NOT EXISTS observations_action_idx ON observations(action);`,
354
+ `CREATE INDEX IF NOT EXISTS observations_created_idx ON observations(created_at);`,
355
+ `CREATE TABLE IF NOT EXISTS entities (
356
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
357
+ project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
358
+ name TEXT NOT NULL,
359
+ type TEXT NOT NULL,
360
+ description TEXT,
361
+ embedding vector(1536),
362
+ properties JSONB,
363
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
364
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
365
+ );`,
366
+ `CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);`,
367
+ `CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);`,
368
+ `CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);`,
369
+ `CREATE TABLE IF NOT EXISTS entity_relations (
370
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
371
+ from_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
372
+ to_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
373
+ type TEXT NOT NULL,
374
+ weight INTEGER DEFAULT 1,
375
+ properties JSONB,
376
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
377
+ );`,
378
+ `CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);`,
379
+ `CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);`,
380
+ `CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);`
381
+ ];
382
+ /**
383
+ * Ensure the data directory exists (.squish folder in project root)
384
+ */
385
+ export async function ensureDataDirectory() {
386
+ try {
387
+ const dataDir = getDataDir();
388
+ if (!existsSync(dataDir)) {
389
+ mkdirSync(dataDir, { recursive: true });
390
+ logger.info(`Created data directory at: ${dataDir}`);
391
+ }
392
+ }
393
+ catch (error) {
394
+ logger.error('Failed to create data directory', error);
395
+ throw new Error(`Failed to initialize data directory: ${error instanceof Error ? error.message : 'Unknown error'}`);
396
+ }
397
+ }
398
+ export async function ensureSqliteSchema(sqlite) {
399
+ // Run schema creation FIRST (creates tables with latest schema)
400
+ sqlite.exec(sqliteSchemaSql);
401
+ // Run migrations AFTER (for existing databases that need column additions)
402
+ await runSqliteMigrations(sqlite);
403
+ }
404
+ async function runSqliteMigrations(sqlite) {
405
+ // Check if memories table exists
406
+ const tableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memories'").get();
407
+ if (!tableCheck) {
408
+ // Table doesn't exist yet - it will be created by schema SQL with all columns
409
+ // No migrations needed
410
+ return;
411
+ }
412
+ // Check what columns the table has
413
+ const tableInfo = sqlite.prepare("PRAGMA table_info(memories)").all();
414
+ const existingColumns = new Set(tableInfo.map(col => col.name));
415
+ // Add missing columns one by one (SQLite allows only one ALTER at a time)
416
+ const migrations = [
417
+ { col: 'embedding', sql: 'ALTER TABLE memories ADD COLUMN embedding BLOB' },
418
+ { col: 'is_private', sql: 'ALTER TABLE memories ADD COLUMN is_private INTEGER DEFAULT 0' },
419
+ { col: 'has_secrets', sql: 'ALTER TABLE memories ADD COLUMN has_secrets INTEGER DEFAULT 0' },
420
+ { col: 'relevance_score', sql: 'ALTER TABLE memories ADD COLUMN relevance_score INTEGER DEFAULT 50' },
421
+ { col: 'is_merged', sql: 'ALTER TABLE memories ADD COLUMN is_merged INTEGER DEFAULT 0' },
422
+ { col: 'merged_into_id', sql: 'ALTER TABLE memories ADD COLUMN merged_into_id TEXT' },
423
+ { col: 'is_mergeable', sql: 'ALTER TABLE memories ADD COLUMN is_mergeable INTEGER DEFAULT 1' },
424
+ { col: 'is_canonical', sql: 'ALTER TABLE memories ADD COLUMN is_canonical INTEGER DEFAULT 0' },
425
+ ];
426
+ for (const migration of migrations) {
427
+ if (!existingColumns.has(migration.col)) {
428
+ try {
429
+ sqlite.exec(migration.sql);
430
+ logger.info(`Migration: Added column ${migration.col} to memories table`);
431
+ }
432
+ catch (error) {
433
+ // Silent fail - column might already exist
434
+ logger.debug(`Migration skipped for ${migration.col}: ${error}`);
435
+ }
436
+ }
437
+ }
438
+ }
439
+ export async function ensurePostgresSchema(pool) {
440
+ for (const statement of postgresStatements) {
441
+ await pool.query(statement);
442
+ }
443
+ }
444
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../db/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { createDb } from './adapter.js';
2
+ import { config } from '../config.js';
3
+ export declare function getDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("../drizzle/schema.js")> & {
4
+ $client: import("pg").Pool;
5
+ }) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("../drizzle/schema-sqlite.js")> & {
6
+ $client: import("better-sqlite3").Database;
7
+ })>;
8
+ export declare function checkDatabaseHealth(): Promise<boolean>;
9
+ export { config };
10
+ export { createDb };
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMtC,wBAAsB,KAAK;;;;IAc1B;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAkB5D;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { createDb } from './adapter.js';
2
+ import { config } from '../config.js';
3
+ import { logger } from '../core/logger.js';
4
+ let db = null;
5
+ let dbError = null;
6
+ export async function getDb() {
7
+ if (dbError) {
8
+ throw new Error(dbError);
9
+ }
10
+ if (!db) {
11
+ try {
12
+ db = await createDb();
13
+ }
14
+ catch (error) {
15
+ dbError = error instanceof Error ? error.message : 'Database initialization failed';
16
+ throw new Error(dbError);
17
+ }
18
+ }
19
+ return db;
20
+ }
21
+ export async function checkDatabaseHealth() {
22
+ try {
23
+ const database = await getDb();
24
+ // Try a simple query on any table
25
+ const tables = Object.values(database._.schema || {});
26
+ if (tables.length > 0) {
27
+ await database.select().from(tables[0]).limit(1);
28
+ }
29
+ return true;
30
+ }
31
+ catch (error) {
32
+ // Check if it's a known database unavailability issue
33
+ if (error.message?.includes('not a valid Win32 application') ||
34
+ error.message?.includes('Database unavailable')) {
35
+ return false; // Graceful degradation - database unavailable but not an error
36
+ }
37
+ logger.error('Database health check failed', error);
38
+ return false;
39
+ }
40
+ }
41
+ export { config };
42
+ export { createDb };
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,IAAI,EAAE,GAAgD,IAAI,CAAC;AAC3D,IAAI,OAAO,GAAkB,IAAI,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,EAAE,CAAC;QAC/B,kCAAkC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAO,QAAgB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,sDAAsD;QACtD,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,+BAA+B,CAAC;YACxD,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,CAAC,+DAA+D;QAC/E,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type SchemaModule = typeof import('../drizzle/schema.js') | typeof import('../drizzle/schema-sqlite.js');
2
+ export declare function getSchema(): Promise<SchemaModule>;
3
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../db/schema.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,cAAc,sBAAsB,CAAC,GAAG,cAAc,6BAA6B,CAAC,CAAC;AAIhH,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAMvD"}
@@ -0,0 +1,11 @@
1
+ import { config } from '../config.js';
2
+ let cachedSchema = null;
3
+ export async function getSchema() {
4
+ if (cachedSchema)
5
+ return cachedSchema;
6
+ cachedSchema = config.isTeamMode
7
+ ? await import('../drizzle/schema.js')
8
+ : await import('../drizzle/schema-sqlite.js');
9
+ return cachedSchema;
10
+ }
11
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,YAAY,GAAG,MAAM,CAAC,UAAU;QAC9B,CAAC,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC;QACtC,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAChD,OAAO,YAAY,CAAC;AACtB,CAAC"}