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,213 @@
1
+ /**
2
+ * QMD Memory Synchronization
3
+ *
4
+ * Syncs Squish memories to QMD collections for hybrid search.
5
+ * Writes memories as markdown files to QMD collection directories.
6
+ *
7
+ * QMD automatically indexes files in collection directories, so we just
8
+ * need to write files to the right location.
9
+ *
10
+ * Collection Structure:
11
+ * - qmd-collections/squish-observations/ - Observation memories
12
+ * - qmd-collections/squish-facts/ - Fact memories
13
+ * - qmd-collections/squish-decisions/ - Decision memories
14
+ * - qmd-collections/squish-context/ - Context memories
15
+ * - qmd-collections/squish-preferences/ - Preference memories
16
+ */
17
+ import { mkdir, writeFile } from 'fs/promises';
18
+ import { join } from 'path';
19
+ import { getQMDClient } from '../embeddings/qmd-client.js';
20
+ import { config } from '../../config.js';
21
+ import { logger } from '../logger.js';
22
+ /**
23
+ * QMD Memory Sync class
24
+ *
25
+ * Manages synchronization of Squish memories to QMD collections.
26
+ */
27
+ export class QMDMemorySync {
28
+ collectionsPath;
29
+ client;
30
+ initialized = false;
31
+ constructor() {
32
+ this.collectionsPath = config.qmdCollectionsPath;
33
+ }
34
+ /**
35
+ * Initialize the sync layer
36
+ *
37
+ * Creates collection directories and verifies QMD connection.
38
+ */
39
+ async initialize() {
40
+ if (this.initialized) {
41
+ return;
42
+ }
43
+ this.initialized = true;
44
+ try {
45
+ // Ensure collections directory exists
46
+ await mkdir(this.collectionsPath, { recursive: true });
47
+ // Initialize QMD client (but don't fail if QMD isn't installed)
48
+ try {
49
+ this.client = await getQMDClient();
50
+ const available = await this.client.isAvailable();
51
+ if (available) {
52
+ logger.info('QMD sync initialized with available QMD server');
53
+ }
54
+ else {
55
+ logger.info('QMD sync initialized (QMD server not available)');
56
+ }
57
+ }
58
+ catch (error) {
59
+ logger.debug('QMD client unavailable, sync will be deferred');
60
+ }
61
+ // Create collection directories for each memory type
62
+ for (const [memoryType, collectionName] of Object.entries(config.qmdCollectionMapping)) {
63
+ await this.createCollection(String(collectionName));
64
+ }
65
+ }
66
+ catch (error) {
67
+ logger.error(`Failed to initialize QMD sync: ${error}`);
68
+ }
69
+ }
70
+ /**
71
+ * Sync a memory to QMD
72
+ *
73
+ * Writes memory as markdown to the appropriate collection directory.
74
+ * QMD will automatically index the file on its next update cycle.
75
+ *
76
+ * @param memory - Memory record to sync
77
+ */
78
+ async syncMemory(memory) {
79
+ // Lazy initialization
80
+ if (!this.initialized) {
81
+ await this.initialize();
82
+ }
83
+ // Check if QMD is available
84
+ if (this.client && !(await this.client.isAvailable())) {
85
+ logger.debug('QMD unavailable, skipping sync');
86
+ return;
87
+ }
88
+ const collection = this.getCollectionForMemory(memory);
89
+ const filename = this.getFilenameForMemory(memory);
90
+ const content = this.formatMemoryAsMarkdown(memory);
91
+ const filepath = join(this.collectionsPath, collection, filename);
92
+ try {
93
+ await mkdir(join(this.collectionsPath, collection), { recursive: true });
94
+ await writeFile(filepath, content, 'utf-8');
95
+ logger.debug(`Synced memory ${memory.id} to QMD collection ${collection}`);
96
+ }
97
+ catch (error) {
98
+ logger.error(`Failed to sync memory to QMD: ${error}`);
99
+ }
100
+ }
101
+ /**
102
+ * Batch sync multiple memories
103
+ *
104
+ * @param memories - Array of memory records to sync
105
+ */
106
+ async syncMemories(memories) {
107
+ for (const memory of memories) {
108
+ await this.syncMemory(memory);
109
+ }
110
+ }
111
+ /**
112
+ * Trigger QMD re-index
113
+ *
114
+ * Note: This would typically call `qmd update` or `qmd embed`.
115
+ * For now, we just log that documents are ready for indexing.
116
+ */
117
+ async reindex() {
118
+ if (!this.client || !(await this.client.isAvailable())) {
119
+ logger.debug('QMD unavailable, skipping reindex');
120
+ return;
121
+ }
122
+ // In a full implementation, this would spawn a qmd process
123
+ // to update the index. For now, we rely on QMD's background indexing.
124
+ logger.info('QMD collections updated, ready for indexing');
125
+ }
126
+ /**
127
+ * Get collection name for a memory
128
+ *
129
+ * @param memory - Memory record
130
+ * @returns QMD collection name
131
+ */
132
+ getCollectionForMemory(memory) {
133
+ const mapping = config.qmdCollectionMapping || {};
134
+ return mapping[memory.type] || 'squish-default';
135
+ }
136
+ /**
137
+ * Generate filename for memory
138
+ *
139
+ * Uses a docid-like format (6-char hash) for consistent naming.
140
+ *
141
+ * @param memory - Memory record
142
+ * @returns Filename for the memory
143
+ */
144
+ getFilenameForMemory(memory) {
145
+ // Create a short hash from the memory ID (like QMD's docid)
146
+ const hash = Buffer.from(memory.id.replace(/-/g, '')).toString('base64')
147
+ .replace(/[+/=]/g, '')
148
+ .substring(0, 6);
149
+ // Format: type-hash.md
150
+ return `${memory.type}-${hash}.md`;
151
+ }
152
+ /**
153
+ * Format memory as markdown for QMD indexing
154
+ *
155
+ * Uses frontmatter for metadata and standard markdown for content.
156
+ *
157
+ * @param memory - Memory record
158
+ * @returns Markdown formatted string
159
+ */
160
+ formatMemoryAsMarkdown(memory) {
161
+ const frontmatter = [
162
+ '---',
163
+ `id: ${memory.id}`,
164
+ `type: ${memory.type}`,
165
+ memory.tags && memory.tags.length > 0 ? `tags: ${memory.tags.join(', ')}` : '',
166
+ memory.createdAt ? `created: ${memory.createdAt}` : '',
167
+ memory.metadata ? `metadata: ${JSON.stringify(memory.metadata)}` : '',
168
+ '---',
169
+ '',
170
+ `# ${this.capitalize(memory.type)}`,
171
+ ''
172
+ ].filter(line => line !== '').join('\n');
173
+ return frontmatter + memory.content;
174
+ }
175
+ /**
176
+ * Capitalize first letter of a string
177
+ */
178
+ capitalize(str) {
179
+ return str.charAt(0).toUpperCase() + str.slice(1);
180
+ }
181
+ /**
182
+ * Create a QMD collection directory
183
+ *
184
+ * @param name - Collection name
185
+ */
186
+ async createCollection(name) {
187
+ const collectionPath = join(this.collectionsPath, name);
188
+ await mkdir(collectionPath, { recursive: true });
189
+ logger.debug(`QMD collection prepared: ${name}`);
190
+ }
191
+ }
192
+ // Singleton instance
193
+ let syncInstance = null;
194
+ /**
195
+ * Get the singleton QMD memory sync instance
196
+ *
197
+ * @returns QMDMemorySync instance
198
+ */
199
+ export async function getQMDMemorySync() {
200
+ if (!syncInstance) {
201
+ syncInstance = new QMDMemorySync();
202
+ await syncInstance.initialize();
203
+ }
204
+ return syncInstance;
205
+ }
206
+ /**
207
+ * Reset the singleton sync instance
208
+ * Useful for testing or when configuration changes.
209
+ */
210
+ export function resetQMDMemorySync() {
211
+ syncInstance = null;
212
+ }
213
+ //# sourceMappingURL=qmd-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qmd-sync.js","sourceRoot":"","sources":["../../../core/sync/qmd-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Temporal Facts System
3
+ * Manages versioned facts with validity windows
4
+ */
5
+ /**
6
+ * Store a new fact with temporal validity
7
+ */
8
+ export declare function storeFact(content: string, options?: {
9
+ validFrom?: Date;
10
+ validTo?: Date;
11
+ confidence?: number;
12
+ tags?: string[];
13
+ projectId?: string;
14
+ }): Promise<string>;
15
+ /**
16
+ * Update a fact by creating a new version
17
+ */
18
+ export declare function updateFact(previousFactId: string, newContent: string, reason: string): Promise<string>;
19
+ /**
20
+ * Query facts valid at a specific point in time
21
+ */
22
+ export declare function queryFactsAtTime(timestamp?: Date, options?: {
23
+ minConfidence?: number;
24
+ tags?: string[];
25
+ projectId?: string;
26
+ limit?: number;
27
+ }): Promise<any[]>;
28
+ /**
29
+ * Get the complete version history of a fact
30
+ */
31
+ export declare function getFactHistory(factId: string): Promise<any[]>;
32
+ /**
33
+ * Apply confidence decay based on temporal distance
34
+ */
35
+ export declare function applyConfidenceDecay(factId: string, ageDays: number): Promise<void>;
36
+ /**
37
+ * Invalidate a fact (mark as no longer valid)
38
+ */
39
+ export declare function invalidateFact(factId: string, reason: string): Promise<void>;
40
+ /**
41
+ * Check if a fact is currently valid
42
+ */
43
+ export declare function isFactValid(factId: string, atTime?: Date): Promise<boolean>;
44
+ /**
45
+ * Get statistics about facts
46
+ */
47
+ export declare function getFactStats(projectId?: string): Promise<{
48
+ totalFacts: number;
49
+ activeFacts: number;
50
+ expiredFacts: number;
51
+ avgConfidence: number;
52
+ avgAge: number;
53
+ }>;
54
+ //# sourceMappingURL=temporal-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-facts.d.ts","sourceRoot":"","sources":["../../core/temporal-facts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,GAAE,IAAiB,EAC5B,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GACL,OAAO,CAAC,GAAG,EAAE,CAAC,CA2BhB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BzF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAelF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,IAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB7F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CA8CD"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Temporal Facts System
3
+ * Manages versioned facts with validity windows
4
+ */
5
+ import { and, eq, gte, desc } from 'drizzle-orm';
6
+ import { randomUUID } from 'crypto';
7
+ import { getDb } from '../db/index.js';
8
+ import { getSchema } from '../db/schema.js';
9
+ import { traverseSupersededChain } from './utils/history-traversal.js';
10
+ import { createNewFactVersion } from './utils/version-management.js';
11
+ import { buildFactAtTimeQuery } from './utils/temporal-queries.js';
12
+ import { logger } from './logger.js';
13
+ /**
14
+ * Store a new fact with temporal validity
15
+ */
16
+ export async function storeFact(content, options = {}) {
17
+ try {
18
+ const db = await getDb();
19
+ const schema = await getSchema();
20
+ const factId = randomUUID();
21
+ await db.insert(schema.memories).values({
22
+ id: factId,
23
+ type: 'fact',
24
+ sector: 'semantic',
25
+ content,
26
+ confidence: options.confidence || 100,
27
+ validFrom: options.validFrom || new Date(),
28
+ validTo: options.validTo || null,
29
+ version: 1,
30
+ tags: options.tags || [],
31
+ projectId: options.projectId || null,
32
+ createdAt: new Date(),
33
+ updatedAt: new Date(),
34
+ });
35
+ return factId;
36
+ }
37
+ catch (error) {
38
+ logger.error('Error storing fact', error);
39
+ throw error;
40
+ }
41
+ }
42
+ /**
43
+ * Update a fact by creating a new version
44
+ */
45
+ export async function updateFact(previousFactId, newContent, reason) {
46
+ return createNewFactVersion(previousFactId, newContent, {}, reason);
47
+ }
48
+ /**
49
+ * Query facts valid at a specific point in time
50
+ */
51
+ export async function queryFactsAtTime(timestamp = new Date(), options = {}) {
52
+ try {
53
+ const db = await getDb();
54
+ const schema = await getSchema();
55
+ const minConfidence = options.minConfidence || 0;
56
+ const limit = options.limit || 100;
57
+ const additionalFilters = [gte(schema.memories.confidence, minConfidence)];
58
+ if (options.projectId) {
59
+ additionalFilters.push(eq(schema.memories.projectId, options.projectId));
60
+ }
61
+ const where = buildFactAtTimeQuery(schema, timestamp, additionalFilters);
62
+ const results = await db
63
+ .select()
64
+ .from(schema.memories)
65
+ .where(where)
66
+ .orderBy(desc(schema.memories.confidence))
67
+ .limit(limit);
68
+ return results;
69
+ }
70
+ catch (error) {
71
+ logger.error('Error querying facts at time', error);
72
+ return [];
73
+ }
74
+ }
75
+ /**
76
+ * Get the complete version history of a fact
77
+ */
78
+ export async function getFactHistory(factId) {
79
+ return traverseSupersededChain(factId);
80
+ }
81
+ /**
82
+ * Apply confidence decay based on temporal distance
83
+ */
84
+ export async function applyConfidenceDecay(factId, ageDays) {
85
+ try {
86
+ const db = await getDb();
87
+ const schema = await getSchema();
88
+ // Confidence decays exponentially: newConfidence = originalConfidence * e^(-lambda * ageDays)
89
+ // Using lambda = 0.01 for moderate decay
90
+ const decayFactor = Math.exp(-0.01 * ageDays);
91
+ const fact = await db
92
+ .select()
93
+ .from(schema.memories)
94
+ .where(eq(schema.memories.id, factId))
95
+ .limit(1);
96
+ if (fact.length === 0)
97
+ return;
98
+ const newConfidence = Math.max(0, Math.floor(fact[0].confidence * decayFactor));
99
+ await db
100
+ .update(schema.memories)
101
+ .set({ confidence: newConfidence })
102
+ .where(eq(schema.memories.id, factId));
103
+ }
104
+ catch (error) {
105
+ logger.error('Error applying confidence decay', error);
106
+ }
107
+ }
108
+ /**
109
+ * Invalidate a fact (mark as no longer valid)
110
+ */
111
+ export async function invalidateFact(factId, reason) {
112
+ try {
113
+ const db = await getDb();
114
+ const schema = await getSchema();
115
+ await db
116
+ .update(schema.memories)
117
+ .set({
118
+ validTo: new Date(),
119
+ metadata: { invalidationReason: reason, invalidatedAt: new Date().toISOString() },
120
+ })
121
+ .where(eq(schema.memories.id, factId));
122
+ }
123
+ catch (error) {
124
+ logger.error('Error invalidating fact', error);
125
+ }
126
+ }
127
+ /**
128
+ * Check if a fact is currently valid
129
+ */
130
+ export async function isFactValid(factId, atTime = new Date()) {
131
+ try {
132
+ const db = await getDb();
133
+ const schema = await getSchema();
134
+ const additionalFilters = [eq(schema.memories.id, factId)];
135
+ const where = buildFactAtTimeQuery(schema, atTime, additionalFilters);
136
+ const fact = await db
137
+ .select()
138
+ .from(schema.memories)
139
+ .where(where)
140
+ .limit(1);
141
+ return fact.length > 0;
142
+ }
143
+ catch (error) {
144
+ logger.error('Error checking fact validity', error);
145
+ return false;
146
+ }
147
+ }
148
+ /**
149
+ * Get statistics about facts
150
+ */
151
+ export async function getFactStats(projectId) {
152
+ try {
153
+ const db = await getDb();
154
+ const schema = await getSchema();
155
+ const now = new Date();
156
+ const where = projectId
157
+ ? and(eq(schema.memories.type, 'fact'), eq(schema.memories.projectId, projectId))
158
+ : eq(schema.memories.type, 'fact');
159
+ const facts = await db.select().from(schema.memories).where(where);
160
+ let active = 0;
161
+ let expired = 0;
162
+ let totalConfidence = 0;
163
+ let totalAge = 0;
164
+ for (const fact of facts) {
165
+ totalConfidence += fact.confidence || 0;
166
+ if (fact.validTo && new Date(fact.validTo) < now) {
167
+ expired++;
168
+ }
169
+ else if (!fact.validTo || new Date(fact.validTo) >= now) {
170
+ active++;
171
+ }
172
+ totalAge += (now.getTime() - new Date(fact.createdAt).getTime()) / (1000 * 60 * 60 * 24);
173
+ }
174
+ return {
175
+ totalFacts: facts.length,
176
+ activeFacts: active,
177
+ expiredFacts: expired,
178
+ avgConfidence: facts.length > 0 ? totalConfidence / facts.length : 0,
179
+ avgAge: facts.length > 0 ? totalAge / facts.length : 0,
180
+ };
181
+ }
182
+ catch (error) {
183
+ logger.error('Error getting fact stats', error);
184
+ return {
185
+ totalFacts: 0,
186
+ activeFacts: 0,
187
+ expiredFacts: 0,
188
+ avgConfidence: 0,
189
+ avgAge: 0,
190
+ };
191
+ }
192
+ }
193
+ //# sourceMappingURL=temporal-facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-facts.js","sourceRoot":"","sources":["../../core/temporal-facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared Cleanup Operations Utilities
3
+ * Common patterns for age-based cleanup operations
4
+ */
5
+ /**
6
+ * Cleanup old session summaries
7
+ */
8
+ export declare function cleanupOldSessionSummaries(olderThanDays?: number): Promise<number>;
9
+ /**
10
+ * Cleanup old memory snapshots
11
+ */
12
+ export declare function cleanupOldMemorySnapshots(olderThanDays?: number): Promise<number>;
13
+ //# sourceMappingURL=cleanup-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-operations.d.ts","sourceRoot":"","sources":["../../../core/utils/cleanup-operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB5F;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3F"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared Cleanup Operations Utilities
3
+ * Common patterns for age-based cleanup operations
4
+ */
5
+ import { getDb } from '../../db/index.js';
6
+ import { getSchema } from '../../db/schema.js';
7
+ import { logger } from '../logger.js';
8
+ /**
9
+ * Cleanup old session summaries
10
+ */
11
+ export async function cleanupOldSessionSummaries(olderThanDays = 30) {
12
+ try {
13
+ const db = await getDb();
14
+ const schema = await getSchema();
15
+ const threshold = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000);
16
+ const result = await db
17
+ .delete(schema.sessionSummaries)
18
+ .where(schema.sessionSummaries.createdAt < threshold);
19
+ return result?.rowCount || 0;
20
+ }
21
+ catch (error) {
22
+ logger.error('Error pruning old summaries', error);
23
+ return 0;
24
+ }
25
+ }
26
+ /**
27
+ * Cleanup old memory snapshots
28
+ */
29
+ export async function cleanupOldMemorySnapshots(olderThanDays = 90) {
30
+ try {
31
+ const db = await getDb();
32
+ const schema = await getSchema();
33
+ const threshold = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000);
34
+ const result = await db
35
+ .delete(schema.memorySnapshots)
36
+ .where(schema.memorySnapshots.createdAt < threshold);
37
+ return result?.rowCount || 0;
38
+ }
39
+ catch (error) {
40
+ logger.error('Error deleting old snapshots', error);
41
+ return 0;
42
+ }
43
+ }
44
+ //# sourceMappingURL=cleanup-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-operations.js","sourceRoot":"","sources":["../../../core/utils/cleanup-operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,gBAAwB,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE7E,MAAM,MAAM,GAAG,MAAO,EAAU;aAC7B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;aAC/B,KAAK,CAAE,MAAM,CAAC,gBAAgB,CAAC,SAAiB,GAAG,SAAS,CAAC,CAAC;QAEjE,OAAO,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,gBAAwB,EAAE;IACxE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE7E,MAAM,MAAM,GAAG,MAAO,EAAU;aAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;aAC9B,KAAK,CAAE,MAAM,CAAC,eAAe,CAAC,SAAiB,GAAG,SAAS,CAAC,CAAC;QAEhE,OAAO,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared Content Extraction Utilities
3
+ * Common patterns for extracting information from messages
4
+ */
5
+ /**
6
+ * Extract key information from conversation messages
7
+ */
8
+ export declare function extractMessageContent(messages: any[]): {
9
+ userMessages: any[];
10
+ assistantMessages: any[];
11
+ toolCalls: Set<string>;
12
+ topics: Set<string>;
13
+ timestamp: string;
14
+ };
15
+ /**
16
+ * Generate basic extractive summary from extracted content
17
+ */
18
+ export declare function generateExtractiveSummary(extracted: ReturnType<typeof extractMessageContent>): string;
19
+ //# sourceMappingURL=content-extraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-extraction.d.ts","sourceRoot":"","sources":["../../../core/utils/content-extraction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG;IACtD,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,iBAAiB,EAAE,GAAG,EAAE,CAAC;IACzB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAwCA;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,GAAG,MAAM,CAsBrG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared Content Extraction Utilities
3
+ * Common patterns for extracting information from messages
4
+ */
5
+ /**
6
+ * Extract key information from conversation messages
7
+ */
8
+ export function extractMessageContent(messages) {
9
+ // Extract key information from messages
10
+ const userMessages = messages.filter((m) => m.role === 'user');
11
+ const assistantMessages = messages.filter((m) => m.role === 'assistant');
12
+ // Extract tool calls
13
+ const toolCalls = new Set();
14
+ for (const msg of messages) {
15
+ if (msg.toolCalls && Array.isArray(msg.toolCalls)) {
16
+ for (const tc of msg.toolCalls) {
17
+ toolCalls.add(tc.name);
18
+ }
19
+ }
20
+ }
21
+ // Extract topics from first and last user messages
22
+ const topics = new Set();
23
+ if (userMessages.length > 0) {
24
+ const firstUser = userMessages[0].content || '';
25
+ const lastUser = userMessages[userMessages.length - 1].content || '';
26
+ // Simple topic extraction (first 10 words)
27
+ const extractTopics = (text) => {
28
+ const words = text.split(/\s+/).slice(0, 10);
29
+ return words.join(' ');
30
+ };
31
+ if (firstUser)
32
+ topics.add(extractTopics(firstUser));
33
+ if (lastUser && lastUser !== firstUser)
34
+ topics.add(extractTopics(lastUser));
35
+ }
36
+ const timestamp = messages.length > 0 ? messages[messages.length - 1].createdAt : 'unknown';
37
+ return {
38
+ userMessages,
39
+ assistantMessages,
40
+ toolCalls,
41
+ topics,
42
+ timestamp,
43
+ };
44
+ }
45
+ /**
46
+ * Generate basic extractive summary from extracted content
47
+ */
48
+ export function generateExtractiveSummary(extracted) {
49
+ const parts = [];
50
+ if (extracted.userMessages.length > 0) {
51
+ parts.push(`User prompts: ${extracted.userMessages.length}`);
52
+ }
53
+ if (extracted.assistantMessages.length > 0) {
54
+ parts.push(`Assistant responses: ${extracted.assistantMessages.length}`);
55
+ }
56
+ if (extracted.toolCalls.size > 0) {
57
+ parts.push(`Tools used: ${Array.from(extracted.toolCalls).join(', ')}`);
58
+ }
59
+ if (extracted.topics.size > 0) {
60
+ parts.push(`Topics: ${Array.from(extracted.topics).join('; ')}`);
61
+ }
62
+ parts.push(`Last activity: ${extracted.timestamp}`);
63
+ return parts.join('. ');
64
+ }
65
+ //# sourceMappingURL=content-extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-extraction.js","sourceRoot":"","sources":["../../../core/utils/content-extraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared Requirements Filter Builder
3
+ * Common patterns for building database filters from criteria objects
4
+ */
5
+ /**
6
+ * Build database filter array from MemoryCriteria
7
+ */
8
+ export declare function buildMemoryFilters(criteria: any, schema: any): any[];
9
+ /**
10
+ * Build database filter array from partial criteria (for assertions)
11
+ */
12
+ export declare function buildMemoryFiltersPartial(criteria: any, schema: any): any[];
13
+ //# sourceMappingURL=filter-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-builder.d.ts","sourceRoot":"","sources":["../../../core/utils/filter-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAgCpE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAQ3E"}