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,119 @@
1
+ /**
2
+ * Folder Context Generation
3
+ * Generates and maintains per-folder CLAUDE.md files with session summaries
4
+ */
5
+ import { promises as fs } from 'fs';
6
+ import path from 'path';
7
+ import { getRecentConversations } from './conversations.js';
8
+ import { logger } from '../../core/logger.js';
9
+ function formatDate(dateStr) {
10
+ return new Date(dateStr).toLocaleDateString('en-US', {
11
+ year: 'numeric',
12
+ month: '2-digit',
13
+ day: '2-digit'
14
+ });
15
+ }
16
+ function generateClaudeMdContent(data) {
17
+ const lines = [
18
+ `# Squish Context - ${data.projectName}`,
19
+ '',
20
+ '<squish-context>',
21
+ '',
22
+ `**Project**: ${data.projectPath}`
23
+ ];
24
+ if (data.gitRemote) {
25
+ const gitInfo = data.gitBranch ? `${data.gitRemote} @ ${data.gitBranch}` : data.gitRemote;
26
+ lines.push(`**Git**: ${gitInfo}`);
27
+ }
28
+ lines.push(`**Last Updated**: ${data.lastUpdated}`, '');
29
+ if (data.recentConversations.length > 0) {
30
+ lines.push('## Recent Activity');
31
+ for (const conv of data.recentConversations) {
32
+ const date = formatDate(conv.timestamp);
33
+ const preview = conv.content.substring(0, 80).replace(/\n/g, ' ');
34
+ lines.push(`- [${date}] ${preview}...`);
35
+ }
36
+ lines.push('');
37
+ }
38
+ if (data.keyObservations.length > 0) {
39
+ lines.push('## Key Observations');
40
+ for (const obs of data.keyObservations) {
41
+ lines.push(`- ${obs.summary} (${obs.type})`);
42
+ }
43
+ lines.push('');
44
+ }
45
+ lines.push('## Previous Context', '*(Managed by Squish - do not edit this section)*', '', '</squish-context>', '', '<!-- You can add custom notes and project context here -->', '');
46
+ return lines.join('\n');
47
+ }
48
+ async function collectFolderContextData(projectPath) {
49
+ const recentConversations = await getRecentConversations({ n: 5, project: projectPath })
50
+ .catch(() => []);
51
+ return {
52
+ projectPath,
53
+ projectName: path.basename(projectPath),
54
+ recentConversations: (recentConversations || []).map((conv) => ({
55
+ content: conv?.summary || '',
56
+ timestamp: conv?.startedAt?.toISOString() || new Date().toISOString()
57
+ })),
58
+ keyObservations: [],
59
+ lastUpdated: new Date().toISOString()
60
+ };
61
+ }
62
+ async function preserveUserContent(claudeMdPath) {
63
+ try {
64
+ const existingContent = await fs.readFile(claudeMdPath, 'utf-8');
65
+ const match = existingContent.match(/<\/squish-context>([\s\S]*)/);
66
+ return match ? match[1] : '';
67
+ }
68
+ catch {
69
+ return '';
70
+ }
71
+ }
72
+ export async function generateAndInjectFolderContext(projectPath) {
73
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
74
+ const contextData = await collectFolderContextData(projectPath);
75
+ const newContent = generateClaudeMdContent(contextData);
76
+ const userContent = await preserveUserContent(claudeMdPath);
77
+ await fs.writeFile(claudeMdPath, newContent + userContent, 'utf-8');
78
+ logger.info(`Updated folder context: ${claudeMdPath}`);
79
+ }
80
+ export async function readFolderContext(projectPath) {
81
+ try {
82
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
83
+ const content = await fs.readFile(claudeMdPath, 'utf-8');
84
+ const contextMatch = content.match(/<squish-context>([\s\S]*?)<\/squish-context>/);
85
+ if (!contextMatch)
86
+ return null;
87
+ const contextContent = contextMatch[1];
88
+ const projectPathMatch = contextContent.match(/\*\*Project\*\*:\s*(.+)/);
89
+ const gitMatch = contextContent.match(/\*\*Git\*\*:\s*(.+)/);
90
+ const updatedMatch = contextContent.match(/\*\*Last Updated\*\*:\s*(.+)/);
91
+ return {
92
+ projectPath: projectPathMatch?.[1] || projectPath,
93
+ projectName: path.basename(projectPath),
94
+ gitRemote: gitMatch?.[1].split(' @')[0],
95
+ gitBranch: gitMatch?.[1].split('@ ')[1],
96
+ recentConversations: [],
97
+ keyObservations: [],
98
+ lastUpdated: updatedMatch?.[1] || new Date().toISOString()
99
+ };
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ export async function injectFolderContextIntoSession(projectPath) {
106
+ try {
107
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
108
+ const content = await fs.readFile(claudeMdPath, 'utf-8');
109
+ const match = content.match(/<squish-context>([\s\S]*?)<\/squish-context>/);
110
+ if (match) {
111
+ return `\n<squish-folder-context>\n${match[1]}\n</squish-folder-context>\n`;
112
+ }
113
+ }
114
+ catch {
115
+ // File doesn't exist or can't be read
116
+ }
117
+ return '';
118
+ }
119
+ //# sourceMappingURL=folder-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder-context.js","sourceRoot":"","sources":["../../../core/search/folder-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './conversations.js';
2
+ export * from './entities.js';
3
+ export * from './folder-context.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/search/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Search feature - Search and discovery
2
+ export * from './conversations.js';
3
+ export * from './entities.js';
4
+ export * from './folder-context.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../core/search/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * QMD Hybrid Search Integration
3
+ *
4
+ * Integrates QMD's BM25+vector+rerank pipeline with Squish memories.
5
+ * Provides enhanced search capabilities when QMD is available.
6
+ *
7
+ * QMD Search Pipeline:
8
+ * 1. Query Expansion (LLM generates alternative queries)
9
+ * 2. Parallel BM25 (FTS5) + Vector Search
10
+ * 3. RRF Fusion (Reciprocal Rank Fusion)
11
+ * 4. LLM Re-ranking (yes/no with logprobs)
12
+ * 5. Position-Aware Blending
13
+ *
14
+ * Installation: bun install -g qmd
15
+ * GitHub: https://github.com/tobi/qmd
16
+ */
17
+ import type { SearchInput, SearchResult } from '../memory/memories.js';
18
+ export interface QMDSearchOptions extends SearchInput {
19
+ useHybrid?: boolean;
20
+ collection?: string;
21
+ includeSquishResults?: boolean;
22
+ }
23
+ export interface QMDHybridSearchResult extends SearchResult {
24
+ qmdScore?: number;
25
+ source: 'squish' | 'qmd' | 'hybrid';
26
+ }
27
+ /**
28
+ * Search memories using QMD's hybrid search
29
+ *
30
+ * @param options - Search options including query, type, limit, etc.
31
+ * @returns QMD-enhanced search results
32
+ */
33
+ export declare function searchWithQMD(options: QMDSearchOptions): Promise<QMDHybridSearchResult[]>;
34
+ /**
35
+ * Fused search: combine Squish and QMD results
36
+ *
37
+ * Runs both searches in parallel and merges results with deduplication.
38
+ *
39
+ * @param options - Search options
40
+ * @returns Fused search results from both sources
41
+ */
42
+ export declare function fusedSearch(options: QMDSearchOptions): Promise<QMDHybridSearchResult[]>;
43
+ /**
44
+ * Check if QMD is available and configured
45
+ *
46
+ * @returns true if QMD is enabled and available
47
+ */
48
+ export declare function isQMDAvailable(): Promise<boolean>;
49
+ /**
50
+ * Get QMD status and collection info
51
+ *
52
+ * @returns QMD status or null if unavailable
53
+ */
54
+ export declare function getQMDStatus(): Promise<{
55
+ available: boolean;
56
+ collections: Array<{
57
+ name: string;
58
+ documentCount: number;
59
+ }>;
60
+ } | null>;
61
+ //# sourceMappingURL=qmd-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qmd-search.d.ts","sourceRoot":"","sources":["../../../core/search/qmd-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKvE,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA0DlC;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAuClC;AAmBD;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAWvD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D,GAAG,IAAI,CAAC,CAiBR"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * QMD Hybrid Search Integration
3
+ *
4
+ * Integrates QMD's BM25+vector+rerank pipeline with Squish memories.
5
+ * Provides enhanced search capabilities when QMD is available.
6
+ *
7
+ * QMD Search Pipeline:
8
+ * 1. Query Expansion (LLM generates alternative queries)
9
+ * 2. Parallel BM25 (FTS5) + Vector Search
10
+ * 3. RRF Fusion (Reciprocal Rank Fusion)
11
+ * 4. LLM Re-ranking (yes/no with logprobs)
12
+ * 5. Position-Aware Blending
13
+ *
14
+ * Installation: bun install -g qmd
15
+ * GitHub: https://github.com/tobi/qmd
16
+ */
17
+ import { getQMDClient } from '../embeddings/qmd-client.js';
18
+ import { searchMemories } from '../memory/memories.js';
19
+ import { logger } from '../logger.js';
20
+ import { config } from '../../config.js';
21
+ /**
22
+ * Search memories using QMD's hybrid search
23
+ *
24
+ * @param options - Search options including query, type, limit, etc.
25
+ * @returns QMD-enhanced search results
26
+ */
27
+ export async function searchWithQMD(options) {
28
+ const client = await getQMDClient();
29
+ if (!(await client.isAvailable())) {
30
+ logger.warn('QMD unavailable, falling back to Squish search');
31
+ // Fallback to Squish search
32
+ const squishResults = await searchMemories(options);
33
+ return squishResults.map((r) => ({
34
+ ...r,
35
+ source: 'squish'
36
+ }));
37
+ }
38
+ // Determine collection based on memory type mapping
39
+ const collection = options.collection || getCollectionForType(options.type);
40
+ try {
41
+ let qmdResults = [];
42
+ if (options.useHybrid !== false) {
43
+ // Use qmd_query (hybrid with reranking) - best quality
44
+ qmdResults = await client.query({
45
+ query: options.query,
46
+ collection,
47
+ limit: options.limit || 10,
48
+ minScore: 0.2
49
+ });
50
+ }
51
+ else {
52
+ // Use qmd_vsearch (semantic only) - faster
53
+ qmdResults = await client.vsearch({
54
+ query: options.query,
55
+ collection,
56
+ limit: options.limit || 10,
57
+ minScore: 0.2
58
+ });
59
+ }
60
+ // Map QMD results to Squish format
61
+ return qmdResults.map((result) => ({
62
+ id: result.docid || result.path,
63
+ content: result.snippet || result.title,
64
+ type: options.type || 'observation',
65
+ tags: [],
66
+ projectId: options.project ? options.project : null,
67
+ similarity: result.score,
68
+ qmdScore: result.score,
69
+ source: 'qmd',
70
+ createdAt: new Date().toISOString() // QMD doesn't provide timestamps
71
+ }));
72
+ }
73
+ catch (error) {
74
+ logger.error(`QMD search failed: ${error}`);
75
+ // Fallback to Squish search
76
+ const squishResults = await searchMemories(options);
77
+ return squishResults.map((r) => ({
78
+ ...r,
79
+ source: 'squish'
80
+ }));
81
+ }
82
+ }
83
+ /**
84
+ * Fused search: combine Squish and QMD results
85
+ *
86
+ * Runs both searches in parallel and merges results with deduplication.
87
+ *
88
+ * @param options - Search options
89
+ * @returns Fused search results from both sources
90
+ */
91
+ export async function fusedSearch(options) {
92
+ const client = await getQMDClient();
93
+ const qmdAvailable = await client.isAvailable();
94
+ // Run searches in parallel
95
+ const results = await Promise.allSettled([
96
+ searchMemories(options),
97
+ qmdAvailable ? searchWithQMD({ ...options, includeSquishResults: false }) : []
98
+ ]);
99
+ const squishResults = results[0].status === 'fulfilled'
100
+ ? results[0].value.map((r) => ({ ...r, source: 'squish' }))
101
+ : [];
102
+ const qmdResults = results[1].status === 'fulfilled'
103
+ ? results[1].value
104
+ : [];
105
+ // Deduplicate by content similarity
106
+ const seenContent = new Set();
107
+ const merged = [];
108
+ for (const result of [...squishResults, ...qmdResults]) {
109
+ // Create a content key for deduplication (first 100 chars)
110
+ const contentKey = result.content.substring(0, 100);
111
+ if (!seenContent.has(contentKey)) {
112
+ seenContent.add(contentKey);
113
+ merged.push(result);
114
+ }
115
+ }
116
+ // Re-rank by combined score
117
+ merged.sort((a, b) => {
118
+ const scoreA = (a.similarity || 0) + (a.qmdScore || 0) / 2;
119
+ const scoreB = (b.similarity || 0) + (b.qmdScore || 0) / 2;
120
+ return scoreB - scoreA;
121
+ });
122
+ return merged.slice(0, options.limit || 10);
123
+ }
124
+ /**
125
+ * Get QMD collection name for a memory type
126
+ *
127
+ * Uses the configured collection mapping from config.
128
+ *
129
+ * @param type - Memory type (observation, fact, decision, context, preference)
130
+ * @returns QMD collection name
131
+ */
132
+ function getCollectionForType(type) {
133
+ if (!type) {
134
+ return 'squish-all';
135
+ }
136
+ const mapping = config.qmdCollectionMapping || {};
137
+ return mapping[type] || `squish-${type}`;
138
+ }
139
+ /**
140
+ * Check if QMD is available and configured
141
+ *
142
+ * @returns true if QMD is enabled and available
143
+ */
144
+ export async function isQMDAvailable() {
145
+ if (!config.qmdEnabled) {
146
+ return false;
147
+ }
148
+ try {
149
+ const client = await getQMDClient();
150
+ return await client.isAvailable();
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
156
+ /**
157
+ * Get QMD status and collection info
158
+ *
159
+ * @returns QMD status or null if unavailable
160
+ */
161
+ export async function getQMDStatus() {
162
+ try {
163
+ const client = await getQMDClient();
164
+ const available = await client.isAvailable();
165
+ if (!available) {
166
+ return { available: false, collections: [] };
167
+ }
168
+ const status = await client.status();
169
+ return {
170
+ available: true,
171
+ collections: status?.collections || []
172
+ };
173
+ }
174
+ catch {
175
+ return null;
176
+ }
177
+ }
178
+ //# sourceMappingURL=qmd-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qmd-search.js","sourceRoot":"","sources":["../../../core/search/qmd-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Secret Detector
3
+ * Pattern-based detection of API keys, tokens, and credentials
4
+ */
5
+ export interface SecretMatch {
6
+ type: string;
7
+ pattern: string;
8
+ value: string;
9
+ start: number;
10
+ end: number;
11
+ confidence: 'high' | 'medium' | 'low';
12
+ }
13
+ type Confidence = SecretMatch['confidence'];
14
+ interface PatternConfig {
15
+ pattern: RegExp;
16
+ type: string;
17
+ confidence: Confidence;
18
+ }
19
+ export declare function detectSecrets(text: string, minConfidence?: Confidence): SecretMatch[];
20
+ export declare function likelyContainsSecrets(text: string): boolean;
21
+ export declare function getSecretSummary(text: string): {
22
+ count: number;
23
+ types: string[];
24
+ };
25
+ export declare function redactSecrets(text: string, replacement?: string): string;
26
+ export declare const SECRET_PATTERNS: {
27
+ high: PatternConfig[];
28
+ medium: PatternConfig[];
29
+ low: PatternConfig[];
30
+ };
31
+ export {};
32
+ //# sourceMappingURL=secret-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-detector.d.ts","sourceRoot":"","sources":["../../core/secret-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,KAAK,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAE5C,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB;AAkDD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,UAAqB,GAAG,WAAW,EAAE,CAqB/F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAMjF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,SAAe,GAAG,MAAM,CAU9E;AAED,eAAO,MAAM,eAAe;;;;CAI3B,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Secret Detector
3
+ * Pattern-based detection of API keys, tokens, and credentials
4
+ */
5
+ const HIGH_CONFIDENCE_PATTERNS = [
6
+ { pattern: /(?:AKIA|ASIA)[0-9A-Z]{16}/g, type: 'aws_access_key', confidence: 'high' },
7
+ { pattern: /aws_secret_access_key\s*=\s*[^\s]+/gi, type: 'aws_secret_key', confidence: 'high' },
8
+ { pattern: /-----BEGIN (?:RSA|OPENSSH|PRIVATE) KEY-----/g, type: 'ssh_private_key', confidence: 'high' },
9
+ { pattern: /-----BEGIN PGP PRIVATE KEY BLOCK-----/g, type: 'gpg_private_key', confidence: 'high' },
10
+ { pattern: /AIza[0-9A-Za-z\-_]{35}/g, type: 'google_api_key', confidence: 'high' },
11
+ { pattern: /gh[pousr]_[A-Za-z0-9_]{36,255}/g, type: 'github_token', confidence: 'high' },
12
+ { pattern: /xox[baprs]-[0-9]{10,13}-[0-9]{10,13}-[A-Za-z0-9_-]{24,34}/g, type: 'slack_token', confidence: 'high' },
13
+ { pattern: /sk_live_[0-9a-zA-Z]{20,}/g, type: 'stripe_api_key', confidence: 'high' },
14
+ { pattern: /(mongodb|postgres|mysql|redis|cassandra):\/\/[^\s]+@[^\s]+/gi, type: 'database_url', confidence: 'high' }
15
+ ];
16
+ const MEDIUM_CONFIDENCE_PATTERNS = [
17
+ { pattern: /(?:api[_-]?key|apikey|api_secret|secret_key)\s*[:=]\s*['""`]?[A-Za-z0-9_-]{20,}['""`]?/gi, type: 'api_key', confidence: 'medium' },
18
+ { pattern: /bearer\s+[A-Za-z0-9._-]+/gi, type: 'bearer_token', confidence: 'medium' },
19
+ { pattern: /eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, type: 'jwt_token', confidence: 'medium' },
20
+ { pattern: /basic\s+[A-Za-z0-9+/=]+/gi, type: 'basic_auth', confidence: 'medium' },
21
+ { pattern: /(?:password|passwd|pwd)\s*[:=]\s*['""`]?[^\s'""`]+['""`]?/gi, type: 'password', confidence: 'medium' },
22
+ { pattern: /(?:connection_string|connstr|conn_string)\s*[:=]\s*['""`][^'""`]+['""`]/gi, type: 'connection_string', confidence: 'medium' }
23
+ ];
24
+ const LOW_CONFIDENCE_PATTERNS = [
25
+ { pattern: /\b(?:token|auth_token|access_token|refresh_token)\b/gi, type: 'token_reference', confidence: 'low' },
26
+ { pattern: /\b(?:secret|secret_key|api_secret|client_secret)\b/gi, type: 'secret_reference', confidence: 'low' },
27
+ { pattern: /\b(?:credential|cred|credentials)\b/gi, type: 'credential_reference', confidence: 'low' }
28
+ ];
29
+ const CONFIDENCE_LEVELS = { high: 3, medium: 2, low: 1 };
30
+ function findMatches(text, config) {
31
+ const regex = new RegExp(config.pattern.source, config.pattern.flags);
32
+ const matches = [];
33
+ let match;
34
+ while ((match = regex.exec(text)) !== null) {
35
+ matches.push({
36
+ type: config.type,
37
+ pattern: config.pattern.source,
38
+ value: match[0],
39
+ start: match.index,
40
+ end: match.index + match[0].length,
41
+ confidence: config.confidence
42
+ });
43
+ }
44
+ return matches;
45
+ }
46
+ export function detectSecrets(text, minConfidence = 'medium') {
47
+ const minLevel = CONFIDENCE_LEVELS[minConfidence];
48
+ const matches = [];
49
+ for (const config of HIGH_CONFIDENCE_PATTERNS) {
50
+ matches.push(...findMatches(text, config));
51
+ }
52
+ if (minLevel <= 2) {
53
+ for (const config of MEDIUM_CONFIDENCE_PATTERNS) {
54
+ matches.push(...findMatches(text, config));
55
+ }
56
+ }
57
+ if (minLevel <= 1) {
58
+ for (const config of LOW_CONFIDENCE_PATTERNS) {
59
+ matches.push(...findMatches(text, config));
60
+ }
61
+ }
62
+ return matches;
63
+ }
64
+ export function likelyContainsSecrets(text) {
65
+ return detectSecrets(text, 'high').length > 0;
66
+ }
67
+ export function getSecretSummary(text) {
68
+ const secrets = detectSecrets(text);
69
+ return {
70
+ count: secrets.length,
71
+ types: [...new Set(secrets.map(s => s.type))]
72
+ };
73
+ }
74
+ export function redactSecrets(text, replacement = '[REDACTED]') {
75
+ const secrets = detectSecrets(text, 'high');
76
+ let result = text;
77
+ const sorted = [...secrets].sort((a, b) => b.start - a.start);
78
+ for (const secret of sorted) {
79
+ result = result.substring(0, secret.start) + replacement + result.substring(secret.end);
80
+ }
81
+ return result;
82
+ }
83
+ export const SECRET_PATTERNS = {
84
+ high: HIGH_CONFIDENCE_PATTERNS,
85
+ medium: MEDIUM_CONFIDENCE_PATTERNS,
86
+ low: LOW_CONFIDENCE_PATTERNS
87
+ };
88
+ //# sourceMappingURL=secret-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-detector.js","sourceRoot":"","sources":["../../core/secret-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Snapshot Cleanup Operations
3
+ * Maintenance and cleanup for snapshot data
4
+ */
5
+ /**
6
+ * Delete old snapshots
7
+ */
8
+ export declare function deleteOldSnapshots(olderThanDays?: number): Promise<number>;
9
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../core/snapshots/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Snapshot Cleanup Operations
3
+ * Maintenance and cleanup for snapshot data
4
+ */
5
+ import { cleanupOldMemorySnapshots } from '../utils/cleanup-operations.js';
6
+ /**
7
+ * Delete old snapshots
8
+ */
9
+ export async function deleteOldSnapshots(olderThanDays = 90) {
10
+ return cleanupOldMemorySnapshots(olderThanDays);
11
+ }
12
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../core/snapshots/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,gBAAwB,EAAE;IACjE,OAAO,yBAAyB,CAAC,aAAa,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Snapshot Comparison Operations
3
+ * Functions for comparing and diffing snapshots
4
+ */
5
+ export interface MemoryDiff {
6
+ added?: string[];
7
+ removed?: string[];
8
+ changed?: Record<string, {
9
+ from: unknown;
10
+ to: unknown;
11
+ }>;
12
+ }
13
+ export declare function calculateDiff(before: string, after: string): MemoryDiff;
14
+ export declare function compareSnapshots(snapshotId1: string, snapshotId2: string): Promise<{
15
+ diff: MemoryDiff;
16
+ contextBefore: string;
17
+ contextAfter: string;
18
+ }>;
19
+ //# sourceMappingURL=comparison.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison.d.ts","sourceRoot":"","sources":["../../../core/snapshots/comparison.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAcvE;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB5E"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Snapshot Comparison Operations
3
+ * Functions for comparing and diffing snapshots
4
+ */
5
+ import { getMemorySnapshot } from './retrieval.js';
6
+ import { logger } from '../logger.js';
7
+ export function calculateDiff(before, after) {
8
+ const beforeLines = before.split('\n');
9
+ const afterLines = after.split('\n');
10
+ const beforeSet = new Set(beforeLines);
11
+ const afterSet = new Set(afterLines);
12
+ const added = afterLines.filter(line => !beforeSet.has(line));
13
+ const removed = beforeLines.filter(line => !afterSet.has(line));
14
+ return {
15
+ added: added.length > 0 ? added : undefined,
16
+ removed: removed.length > 0 ? removed : undefined,
17
+ };
18
+ }
19
+ export async function compareSnapshots(snapshotId1, snapshotId2) {
20
+ try {
21
+ const snap1 = await getMemorySnapshot(snapshotId1);
22
+ const snap2 = await getMemorySnapshot(snapshotId2);
23
+ if (!snap1 || !snap2) {
24
+ throw new Error('One or both snapshots not found');
25
+ }
26
+ return {
27
+ diff: calculateDiff(snap1.content, snap2.content),
28
+ contextBefore: snap1.content.substring(0, 200),
29
+ contextAfter: snap2.content.substring(0, 200),
30
+ };
31
+ }
32
+ catch (error) {
33
+ logger.error('Error comparing snapshots', error);
34
+ throw error;
35
+ }
36
+ }
37
+ //# sourceMappingURL=comparison.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison.js","sourceRoot":"","sources":["../../../core/snapshots/comparison.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAa;IACzD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC3C,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACjD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;YAC9C,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;SAC9C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}