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,111 @@
1
+ /**
2
+ * Agent-Aware Memory Management
3
+ * Provides agent isolation and visibility rules
4
+ */
5
+ import { and, eq } from 'drizzle-orm';
6
+ import { randomUUID } from 'crypto';
7
+ import { getDb } from '../db/index.js';
8
+ import { getSchema } from '../db/schema.js';
9
+ import { config } from '../config.js';
10
+ import { getEmbedding } from './embeddings.js';
11
+ import { logger } from './logger.js';
12
+ /**
13
+ * Store a memory with agent context
14
+ */
15
+ export async function storeAgentMemory(content, context, options = {}) {
16
+ if (!config.agentIsolationEnabled) {
17
+ // Fall back to standard memory storage
18
+ return await storeStandardMemory(content, options);
19
+ }
20
+ try {
21
+ const db = await getDb();
22
+ const schema = await getSchema();
23
+ const memoryId = randomUUID();
24
+ const embedding = await getEmbedding(content);
25
+ const visibilityScope = options.visibilityScope || config.defaultVisibilityScope;
26
+ // Determine scopes based on visibility
27
+ const readScope = calculateReadScope(context, visibilityScope);
28
+ const writeScope = [`agent:${context.agentId}`];
29
+ await db.insert(schema.memories).values({
30
+ id: memoryId,
31
+ content,
32
+ type: options.type || 'observation',
33
+ sector: options.sector || 'episodic',
34
+ agentId: context.agentId,
35
+ agentRole: context.agentRole || 'general',
36
+ userId: context.userId || null,
37
+ projectId: context.projectId || null,
38
+ visibilityScope,
39
+ writeScope,
40
+ readScope,
41
+ tags: options.tags || [],
42
+ metadata: options.metadata || null,
43
+ embedding: embedding || null,
44
+ confidence: 100,
45
+ relevanceScore: 50,
46
+ createdAt: new Date(),
47
+ updatedAt: new Date(),
48
+ });
49
+ return memoryId;
50
+ }
51
+ catch (error) {
52
+ logger.error('Error storing agent memory', error);
53
+ throw error;
54
+ }
55
+ }
56
+ // ============================================================================
57
+ // Helper Functions
58
+ // ============================================================================
59
+ function calculateReadScope(context, visibility) {
60
+ switch (visibility) {
61
+ case 'private':
62
+ return [`agent:${context.agentId}`];
63
+ case 'project':
64
+ return [`agent:${context.agentId}`, `project:${context.projectId || '*'}`];
65
+ case 'team':
66
+ return [`agent:${context.agentId}`, 'team:*'];
67
+ case 'global':
68
+ return ['*'];
69
+ default:
70
+ return [`agent:${context.agentId}`];
71
+ }
72
+ }
73
+ async function storeStandardMemory(content, options = {}) {
74
+ // Fallback to standard memory storage if agent isolation is disabled
75
+ const db = await getDb();
76
+ const schema = await getSchema();
77
+ const memoryId = randomUUID();
78
+ const embedding = await getEmbedding(content);
79
+ await db.insert(schema.memories).values({
80
+ id: memoryId,
81
+ content,
82
+ type: options.type || 'observation',
83
+ sector: options.sector || 'episodic',
84
+ tags: options.tags || [],
85
+ metadata: options.metadata || null,
86
+ embedding: embedding || null,
87
+ confidence: 100,
88
+ relevanceScore: 50,
89
+ createdAt: new Date(),
90
+ updatedAt: new Date(),
91
+ });
92
+ return memoryId;
93
+ }
94
+ async function searchStandardMemories(query, options = {}) {
95
+ // Fallback to standard memory search if agent isolation is disabled
96
+ const db = await getDb();
97
+ const schema = await getSchema();
98
+ const limit = Math.min(options.limit || 10, 100);
99
+ let where = undefined;
100
+ if (options.type) {
101
+ where = eq(schema.memories.type, options.type);
102
+ }
103
+ return await db
104
+ .select()
105
+ .from(schema.memories)
106
+ .where(where
107
+ ? and(where, schema.memories.content.ilike(`%${query}%`))
108
+ : schema.memories.content.ilike(`%${query}%`))
109
+ .limit(limit);
110
+ }
111
+ //# sourceMappingURL=agent-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory.js","sourceRoot":"","sources":["../../core/agent-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Memory Association Graph (Waypoint Graph)
3
+ * Tracks co-occurrence and relationships between memories
4
+ */
5
+ export type AssociationType = 'co_occurred' | 'supersedes' | 'contradicts' | 'supports' | 'relates_to';
6
+ /**
7
+ * Create or update an association between two memories
8
+ */
9
+ export declare function createAssociation(fromMemoryId: string, toMemoryId: string, type: AssociationType, weight?: number): Promise<void>;
10
+ /**
11
+ * Track co-activation of multiple memories (they were used together)
12
+ * OPTIMIZED: Uses bulk upsert instead of N² individual database operations
13
+ */
14
+ export declare function trackCoactivation(memoryIds: string[]): Promise<void>;
15
+ /**
16
+ * Get related memories via the association graph
17
+ */
18
+ export declare function getRelatedMemories(memoryId: string, limit?: number): Promise<any[]>;
19
+ /**
20
+ * Prune weak associations (weight < threshold)
21
+ */
22
+ export declare function pruneWeakAssociations(weightThreshold?: number): Promise<number>;
23
+ /**
24
+ * Get association statistics
25
+ */
26
+ export declare function getAssociationStats(): Promise<{
27
+ totalAssociations: number;
28
+ byType: Record<string, number>;
29
+ avgWeight: number;
30
+ maxWeight: number;
31
+ }>;
32
+ //# sourceMappingURL=associations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"associations.d.ts","sourceRoot":"","sources":["../../core/associations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvG;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,MAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwI1E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,GAAG,EAAE,CAAC,CAiChB;AAID;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,eAAe,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAcxF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAoCD"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Memory Association Graph (Waypoint Graph)
3
+ * Tracks co-occurrence and relationships between memories
4
+ */
5
+ import { eq, and, or, desc, inArray, sql } from 'drizzle-orm';
6
+ import { getDb } from '../db/index.js';
7
+ import { getSchema } from '../db/schema.js';
8
+ import { logger } from './logger.js';
9
+ /**
10
+ * Create or update an association between two memories
11
+ */
12
+ export async function createAssociation(fromMemoryId, toMemoryId, type, weight = 1) {
13
+ try {
14
+ const db = await getDb();
15
+ const schema = await getSchema();
16
+ // Check if association already exists
17
+ const existing = await db
18
+ .select()
19
+ .from(schema.memoryAssociations)
20
+ .where(and(eq(schema.memoryAssociations.fromMemoryId, fromMemoryId), eq(schema.memoryAssociations.toMemoryId, toMemoryId)))
21
+ .limit(1);
22
+ if (existing.length > 0) {
23
+ // Update weight and coactivation count
24
+ await db
25
+ .update(schema.memoryAssociations)
26
+ .set({
27
+ weight: existing[0].weight + weight,
28
+ coactivationCount: existing[0].coactivationCount + 1,
29
+ lastCoactivatedAt: new Date(),
30
+ })
31
+ .where(eq(schema.memoryAssociations.id, existing[0].id));
32
+ }
33
+ else {
34
+ // Create new association
35
+ await db.insert(schema.memoryAssociations).values({
36
+ fromMemoryId,
37
+ toMemoryId,
38
+ associationType: type,
39
+ weight,
40
+ coactivationCount: 1,
41
+ lastCoactivatedAt: new Date(),
42
+ });
43
+ }
44
+ }
45
+ catch (error) {
46
+ logger.error('Error creating association', error);
47
+ }
48
+ }
49
+ /**
50
+ * Track co-activation of multiple memories (they were used together)
51
+ * OPTIMIZED: Uses bulk upsert instead of N² individual database operations
52
+ */
53
+ export async function trackCoactivation(memoryIds) {
54
+ if (memoryIds.length < 2)
55
+ return;
56
+ try {
57
+ const db = await getDb();
58
+ const schema = await getSchema();
59
+ const now = new Date();
60
+ // Generate all pairs
61
+ const pairs = [];
62
+ for (let i = 0; i < memoryIds.length; i++) {
63
+ for (let j = i + 1; j < memoryIds.length; j++) {
64
+ pairs.push({ from: memoryIds[i], to: memoryIds[j] });
65
+ pairs.push({ from: memoryIds[j], to: memoryIds[i] }); // Bidirectional
66
+ }
67
+ }
68
+ if (pairs.length === 0)
69
+ return;
70
+ // Batch check existing associations with single SELECT
71
+ const pairIds = pairs.map(p => ({ from: p.from, to: p.to }));
72
+ // Check which pairs already exist
73
+ const existingPairs = await db
74
+ .select({ fromId: schema.memoryAssociations.fromMemoryId, toId: schema.memoryAssociations.toMemoryId })
75
+ .from(schema.memoryAssociations)
76
+ .where(or(...pairIds.map((p) => and(eq(schema.memoryAssociations.fromMemoryId, p.from), eq(schema.memoryAssociations.toMemoryId, p.to)))));
77
+ const existingMap = new Set(existingPairs.map((p) => `${p.fromId}:${p.toId}`));
78
+ // Separate into new pairs and existing pairs
79
+ const newPairs = [];
80
+ const existingPairsToUpdate = [];
81
+ for (const pair of pairs) {
82
+ const key = `${pair.from}:${pair.to}`;
83
+ if (existingMap.has(key)) {
84
+ existingPairsToUpdate.push(key);
85
+ }
86
+ else {
87
+ newPairs.push({
88
+ fromMemoryId: pair.from,
89
+ toMemoryId: pair.to,
90
+ associationType: 'co_occurred',
91
+ weight: 1,
92
+ coactivationCount: 1,
93
+ lastCoactivatedAt: now,
94
+ });
95
+ }
96
+ }
97
+ // Bulk insert new associations
98
+ if (newPairs.length > 0) {
99
+ const BATCH_SIZE = 100;
100
+ for (let i = 0; i < newPairs.length; i += BATCH_SIZE) {
101
+ const batch = newPairs.slice(i, i + BATCH_SIZE);
102
+ try {
103
+ // For PostgreSQL with ON CONFLICT support
104
+ if (db.insert && db.onConflict) {
105
+ await db
106
+ .insert(schema.memoryAssociations)
107
+ .values(batch)
108
+ .onConflict({
109
+ target: [schema.memoryAssociations.fromMemoryId, schema.memoryAssociations.toMemoryId],
110
+ set: {
111
+ weight: sql `${schema.memoryAssociations.weight} + 1`,
112
+ coactivationCount: sql `${schema.memoryAssociations.coactivationCount} + 1`,
113
+ lastCoactivatedAt: now,
114
+ },
115
+ })
116
+ .catch(() => {
117
+ // Fallback for SQLite
118
+ return db.insert(schema.memoryAssociations).values(batch);
119
+ });
120
+ }
121
+ else {
122
+ // Direct insert for SQLite
123
+ await db.insert(schema.memoryAssociations).values(batch);
124
+ }
125
+ }
126
+ catch (error) {
127
+ logger.error('Error inserting batch of associations', { batchSize: batch.length, error });
128
+ }
129
+ }
130
+ }
131
+ // Bulk update existing associations
132
+ if (existingPairsToUpdate.length > 0) {
133
+ const BATCH_SIZE = 100;
134
+ for (let i = 0; i < existingPairsToUpdate.length; i += BATCH_SIZE) {
135
+ const batch = existingPairsToUpdate.slice(i, i + BATCH_SIZE);
136
+ // Extract from/to pairs for this batch
137
+ const batchPairs = batch.map(key => {
138
+ const [from, to] = key.split(':');
139
+ return { from, to };
140
+ });
141
+ try {
142
+ for (const pair of batchPairs) {
143
+ await db
144
+ .update(schema.memoryAssociations)
145
+ .set({
146
+ weight: sql `${schema.memoryAssociations.weight} + 1`,
147
+ coactivationCount: sql `${schema.memoryAssociations.coactivationCount} + 1`,
148
+ lastCoactivatedAt: now,
149
+ })
150
+ .where(and(eq(schema.memoryAssociations.fromMemoryId, pair.from), eq(schema.memoryAssociations.toMemoryId, pair.to)));
151
+ }
152
+ }
153
+ catch (error) {
154
+ logger.error('Error updating batch of associations', { batchSize: batch.length, error });
155
+ }
156
+ }
157
+ }
158
+ logger.debug('Coactivation tracked', {
159
+ totalPairs: pairs.length,
160
+ newAssociations: newPairs.length,
161
+ updatedAssociations: existingPairsToUpdate.length,
162
+ });
163
+ }
164
+ catch (error) {
165
+ logger.error('Error tracking coactivation', error);
166
+ }
167
+ }
168
+ /**
169
+ * Get related memories via the association graph
170
+ */
171
+ export async function getRelatedMemories(memoryId, limit = 10) {
172
+ try {
173
+ const db = await getDb();
174
+ const schema = await getSchema();
175
+ // Get all associated memories, sorted by weight
176
+ const associations = await db
177
+ .select()
178
+ .from(schema.memoryAssociations)
179
+ .where(or(eq(schema.memoryAssociations.fromMemoryId, memoryId), eq(schema.memoryAssociations.toMemoryId, memoryId)))
180
+ .orderBy(desc(schema.memoryAssociations.weight))
181
+ .limit(limit);
182
+ const relatedIds = associations.map((a) => a.fromMemoryId === memoryId ? a.toMemoryId : a.fromMemoryId);
183
+ if (relatedIds.length === 0)
184
+ return [];
185
+ // Fetch the actual memories
186
+ return await db
187
+ .select()
188
+ .from(schema.memories)
189
+ .where(inArray(schema.memories.id, relatedIds));
190
+ }
191
+ catch (error) {
192
+ logger.error('Error getting related memories', error);
193
+ return [];
194
+ }
195
+ }
196
+ /**
197
+ * Prune weak associations (weight < threshold)
198
+ */
199
+ export async function pruneWeakAssociations(weightThreshold = 5) {
200
+ try {
201
+ const db = await getDb();
202
+ const schema = await getSchema();
203
+ const result = await db
204
+ .delete(schema.memoryAssociations)
205
+ .where(schema.memoryAssociations.weight <= weightThreshold);
206
+ return result?.rowCount || 0;
207
+ }
208
+ catch (error) {
209
+ logger.error('Error pruning weak associations', error);
210
+ return 0;
211
+ }
212
+ }
213
+ /**
214
+ * Get association statistics
215
+ */
216
+ export async function getAssociationStats() {
217
+ try {
218
+ const db = await getDb();
219
+ const schema = await getSchema();
220
+ const associations = await db
221
+ .select()
222
+ .from(schema.memoryAssociations);
223
+ const stats = {
224
+ totalAssociations: associations.length,
225
+ byType: {},
226
+ avgWeight: 0,
227
+ maxWeight: 0,
228
+ };
229
+ let totalWeight = 0;
230
+ for (const assoc of associations) {
231
+ stats.byType[assoc.associationType] = (stats.byType[assoc.associationType] || 0) + 1;
232
+ totalWeight += assoc.weight;
233
+ if (assoc.weight > stats.maxWeight)
234
+ stats.maxWeight = assoc.weight;
235
+ }
236
+ stats.avgWeight = associations.length > 0 ? totalWeight / associations.length : 0;
237
+ return stats;
238
+ }
239
+ catch (error) {
240
+ logger.error('Error getting association stats', error);
241
+ return {
242
+ totalAssociations: 0,
243
+ byType: {},
244
+ avgWeight: 0,
245
+ maxWeight: 0,
246
+ };
247
+ }
248
+ }
249
+ //# sourceMappingURL=associations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"associations.js","sourceRoot":"","sources":["../../core/associations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function cacheGet<T>(key: string): Promise<T | null>;
2
+ export declare function cacheSet<T>(key: string, value: T, ttlMs?: number): Promise<void>;
3
+ export declare function getCacheStats(): {
4
+ entries: number;
5
+ sizeBytes: number;
6
+ maxSize: number;
7
+ maxSizeBytes: number;
8
+ utilizationPercent: number;
9
+ memoryUtilizationPercent: number;
10
+ };
11
+ export declare function closeCache(): Promise<void>;
12
+ export declare function checkRedisHealth(): Promise<boolean>;
13
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"AA0LA,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAahE;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAE,MAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F;AAED,wBAAgB,aAAa;;;;;;;EAE5B;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAOhD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAWzD"}
@@ -0,0 +1,202 @@
1
+ import { config } from '../config.js';
2
+ import { logger } from './logger.js';
3
+ let redis = null;
4
+ class LRUCache {
5
+ cache = new Map();
6
+ maxSize;
7
+ maxSizeBytes;
8
+ currentSizeBytes = 0;
9
+ cleanupTimer = null;
10
+ constructor(maxSize = 1000, maxSizeBytes = 50 * 1024 * 1024) {
11
+ this.maxSize = maxSize;
12
+ this.maxSizeBytes = maxSizeBytes; // 50MB default
13
+ this.startCleanupTimer();
14
+ }
15
+ get(key) {
16
+ const entry = this.cache.get(key);
17
+ if (!entry)
18
+ return null;
19
+ // Check expiration
20
+ if (entry.expires < Date.now()) {
21
+ this.delete(key);
22
+ return null;
23
+ }
24
+ // Update LRU access time
25
+ entry.lastAccessed = Date.now();
26
+ return entry.value;
27
+ }
28
+ set(key, value, ttlMs = 3600000) {
29
+ const size = this.estimateSize(value);
30
+ // Evict if needed
31
+ while ((this.cache.size >= this.maxSize || this.currentSizeBytes + size > this.maxSizeBytes) &&
32
+ this.cache.size > 0) {
33
+ this.evictLRU();
34
+ }
35
+ // Delete old entry if exists
36
+ if (this.cache.has(key)) {
37
+ this.delete(key);
38
+ }
39
+ // Add new entry
40
+ this.cache.set(key, {
41
+ value,
42
+ expires: Date.now() + ttlMs,
43
+ lastAccessed: Date.now(),
44
+ });
45
+ this.currentSizeBytes += size;
46
+ }
47
+ delete(key) {
48
+ const entry = this.cache.get(key);
49
+ if (entry) {
50
+ const size = this.estimateSize(entry.value);
51
+ this.currentSizeBytes = Math.max(0, this.currentSizeBytes - size);
52
+ }
53
+ return this.cache.delete(key);
54
+ }
55
+ clear() {
56
+ this.cache.clear();
57
+ this.currentSizeBytes = 0;
58
+ }
59
+ size() {
60
+ return this.cache.size;
61
+ }
62
+ sizeBytes() {
63
+ return this.currentSizeBytes;
64
+ }
65
+ evictLRU() {
66
+ let oldestKey = null;
67
+ let oldestTime = Infinity;
68
+ for (const [key, entry] of this.cache.entries()) {
69
+ if (entry.lastAccessed < oldestTime) {
70
+ oldestTime = entry.lastAccessed;
71
+ oldestKey = key;
72
+ }
73
+ }
74
+ if (oldestKey) {
75
+ logger.debug('Evicting LRU cache entry', { key: oldestKey });
76
+ this.delete(oldestKey);
77
+ }
78
+ }
79
+ estimateSize(value) {
80
+ try {
81
+ return JSON.stringify(value).length * 2; // UTF-16, rough estimate
82
+ }
83
+ catch {
84
+ return 1024; // Default 1KB for non-serializable objects
85
+ }
86
+ }
87
+ cleanup() {
88
+ const now = Date.now();
89
+ const toDelete = [];
90
+ for (const [key, entry] of this.cache.entries()) {
91
+ if (entry.expires < now) {
92
+ toDelete.push(key);
93
+ }
94
+ }
95
+ for (const key of toDelete) {
96
+ this.delete(key);
97
+ }
98
+ if (toDelete.length > 0) {
99
+ logger.debug('Cache cleanup removed expired entries', { count: toDelete.length });
100
+ }
101
+ }
102
+ startCleanupTimer() {
103
+ // Cleanup every 5 minutes
104
+ this.cleanupTimer = setInterval(() => this.cleanup(), 5 * 60 * 1000);
105
+ // Prevent timer from keeping process alive
106
+ if (this.cleanupTimer.unref) {
107
+ this.cleanupTimer.unref();
108
+ }
109
+ }
110
+ stopCleanupTimer() {
111
+ if (this.cleanupTimer) {
112
+ clearInterval(this.cleanupTimer);
113
+ this.cleanupTimer = null;
114
+ }
115
+ }
116
+ getStats() {
117
+ return {
118
+ entries: this.cache.size,
119
+ sizeBytes: this.currentSizeBytes,
120
+ maxSize: this.maxSize,
121
+ maxSizeBytes: this.maxSizeBytes,
122
+ utilizationPercent: (this.cache.size / this.maxSize) * 100,
123
+ memoryUtilizationPercent: (this.currentSizeBytes / this.maxSizeBytes) * 100,
124
+ };
125
+ }
126
+ }
127
+ // Create LRU cache with configurable limits
128
+ const memoryCache = new LRUCache(parseInt(process.env.SQUISH_CACHE_MAX_ENTRIES || '1000'), parseInt(process.env.SQUISH_CACHE_MAX_BYTES || '52428800') // 50MB
129
+ );
130
+ async function initRedis() {
131
+ if (!config.redisEnabled)
132
+ return null;
133
+ if (redis)
134
+ return redis;
135
+ try {
136
+ const { createClient } = await import('redis');
137
+ redis = createClient({ url: process.env.REDIS_URL });
138
+ await redis.connect();
139
+ logger.info('Redis connected');
140
+ return redis;
141
+ }
142
+ catch (error) {
143
+ logger.error('Failed to connect to Redis, using memory cache', error);
144
+ redis = null;
145
+ return null;
146
+ }
147
+ }
148
+ export async function cacheGet(key) {
149
+ try {
150
+ const r = await initRedis();
151
+ if (r) {
152
+ const value = await r.get(key);
153
+ return value ? JSON.parse(value) : null;
154
+ }
155
+ }
156
+ catch (error) {
157
+ logger.error('Redis GET failed, falling back to memory', error);
158
+ }
159
+ // Memory cache fallback with LRU
160
+ return memoryCache.get(key);
161
+ }
162
+ export async function cacheSet(key, value, ttlMs = 3600000) {
163
+ try {
164
+ const r = await initRedis();
165
+ if (r) {
166
+ await r.setEx(key, Math.floor(ttlMs / 1000), JSON.stringify(value));
167
+ return;
168
+ }
169
+ }
170
+ catch (error) {
171
+ logger.error('Redis SET failed, falling back to memory', error);
172
+ }
173
+ // Memory cache fallback with LRU
174
+ memoryCache.set(key, value, ttlMs);
175
+ }
176
+ export function getCacheStats() {
177
+ return memoryCache.getStats();
178
+ }
179
+ export async function closeCache() {
180
+ if (redis) {
181
+ await redis.quit();
182
+ redis = null;
183
+ }
184
+ memoryCache.stopCleanupTimer();
185
+ memoryCache.clear();
186
+ }
187
+ export async function checkRedisHealth() {
188
+ if (!config.redisEnabled)
189
+ return true;
190
+ try {
191
+ const r = await initRedis();
192
+ if (!r)
193
+ return false;
194
+ const pong = await r.ping();
195
+ return pong === 'PONG';
196
+ }
197
+ catch (error) {
198
+ logger.error('Redis health check failed', error);
199
+ return false;
200
+ }
201
+ }
202
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ConsolidationStats {
2
+ clustered: number;
3
+ merged: number;
4
+ tokensRecovered: number;
5
+ }
6
+ //# sourceMappingURL=consolidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidation.d.ts","sourceRoot":"","sources":["../../core/consolidation.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB"}