universal-agent-protocol 0.5.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 (415) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +462 -0
  3. package/dist/analyzers/index.d.ts +3 -0
  4. package/dist/analyzers/index.d.ts.map +1 -0
  5. package/dist/analyzers/index.js +656 -0
  6. package/dist/analyzers/index.js.map +1 -0
  7. package/dist/bin/cli.d.ts +3 -0
  8. package/dist/bin/cli.d.ts.map +1 -0
  9. package/dist/bin/cli.js +506 -0
  10. package/dist/bin/cli.js.map +1 -0
  11. package/dist/bin/tool-calls.d.ts +3 -0
  12. package/dist/bin/tool-calls.d.ts.map +1 -0
  13. package/dist/bin/tool-calls.js +4 -0
  14. package/dist/bin/tool-calls.js.map +1 -0
  15. package/dist/cli/agent.d.ts +20 -0
  16. package/dist/cli/agent.d.ts.map +1 -0
  17. package/dist/cli/agent.js +434 -0
  18. package/dist/cli/agent.js.map +1 -0
  19. package/dist/cli/analyze.d.ts +7 -0
  20. package/dist/cli/analyze.d.ts.map +1 -0
  21. package/dist/cli/analyze.js +103 -0
  22. package/dist/cli/analyze.js.map +1 -0
  23. package/dist/cli/coord.d.ts +7 -0
  24. package/dist/cli/coord.d.ts.map +1 -0
  25. package/dist/cli/coord.js +138 -0
  26. package/dist/cli/coord.js.map +1 -0
  27. package/dist/cli/dashboard.d.ts +8 -0
  28. package/dist/cli/dashboard.d.ts.map +1 -0
  29. package/dist/cli/dashboard.js +704 -0
  30. package/dist/cli/dashboard.js.map +1 -0
  31. package/dist/cli/deploy.d.ts +19 -0
  32. package/dist/cli/deploy.d.ts.map +1 -0
  33. package/dist/cli/deploy.js +267 -0
  34. package/dist/cli/deploy.js.map +1 -0
  35. package/dist/cli/droids.d.ts +9 -0
  36. package/dist/cli/droids.d.ts.map +1 -0
  37. package/dist/cli/droids.js +227 -0
  38. package/dist/cli/droids.js.map +1 -0
  39. package/dist/cli/generate.d.ts +17 -0
  40. package/dist/cli/generate.d.ts.map +1 -0
  41. package/dist/cli/generate.js +432 -0
  42. package/dist/cli/generate.js.map +1 -0
  43. package/dist/cli/hooks.d.ts +9 -0
  44. package/dist/cli/hooks.d.ts.map +1 -0
  45. package/dist/cli/hooks.js +374 -0
  46. package/dist/cli/hooks.js.map +1 -0
  47. package/dist/cli/init.d.ts +11 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +316 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/mcp-router.d.ts +16 -0
  52. package/dist/cli/mcp-router.d.ts.map +1 -0
  53. package/dist/cli/mcp-router.js +143 -0
  54. package/dist/cli/mcp-router.js.map +1 -0
  55. package/dist/cli/memory.d.ts +24 -0
  56. package/dist/cli/memory.d.ts.map +1 -0
  57. package/dist/cli/memory.js +877 -0
  58. package/dist/cli/memory.js.map +1 -0
  59. package/dist/cli/model.d.ts +15 -0
  60. package/dist/cli/model.d.ts.map +1 -0
  61. package/dist/cli/model.js +270 -0
  62. package/dist/cli/model.js.map +1 -0
  63. package/dist/cli/patterns.d.ts +26 -0
  64. package/dist/cli/patterns.d.ts.map +1 -0
  65. package/dist/cli/patterns.js +587 -0
  66. package/dist/cli/patterns.js.map +1 -0
  67. package/dist/cli/setup-mcp-router.d.ts +8 -0
  68. package/dist/cli/setup-mcp-router.d.ts.map +1 -0
  69. package/dist/cli/setup-mcp-router.js +163 -0
  70. package/dist/cli/setup-mcp-router.js.map +1 -0
  71. package/dist/cli/setup.d.ts +13 -0
  72. package/dist/cli/setup.d.ts.map +1 -0
  73. package/dist/cli/setup.js +146 -0
  74. package/dist/cli/setup.js.map +1 -0
  75. package/dist/cli/sync.d.ts +7 -0
  76. package/dist/cli/sync.d.ts.map +1 -0
  77. package/dist/cli/sync.js +26 -0
  78. package/dist/cli/sync.js.map +1 -0
  79. package/dist/cli/task.d.ts +33 -0
  80. package/dist/cli/task.d.ts.map +1 -0
  81. package/dist/cli/task.js +616 -0
  82. package/dist/cli/task.js.map +1 -0
  83. package/dist/cli/tool-calls.d.ts +8 -0
  84. package/dist/cli/tool-calls.d.ts.map +1 -0
  85. package/dist/cli/tool-calls.js +239 -0
  86. package/dist/cli/tool-calls.js.map +1 -0
  87. package/dist/cli/update.d.ts +10 -0
  88. package/dist/cli/update.d.ts.map +1 -0
  89. package/dist/cli/update.js +300 -0
  90. package/dist/cli/update.js.map +1 -0
  91. package/dist/cli/visualize.d.ts +77 -0
  92. package/dist/cli/visualize.d.ts.map +1 -0
  93. package/dist/cli/visualize.js +287 -0
  94. package/dist/cli/visualize.js.map +1 -0
  95. package/dist/cli/worktree.d.ts +9 -0
  96. package/dist/cli/worktree.d.ts.map +1 -0
  97. package/dist/cli/worktree.js +175 -0
  98. package/dist/cli/worktree.js.map +1 -0
  99. package/dist/coordination/capability-router.d.ts +79 -0
  100. package/dist/coordination/capability-router.d.ts.map +1 -0
  101. package/dist/coordination/capability-router.js +324 -0
  102. package/dist/coordination/capability-router.js.map +1 -0
  103. package/dist/coordination/database.d.ts +13 -0
  104. package/dist/coordination/database.d.ts.map +1 -0
  105. package/dist/coordination/database.js +131 -0
  106. package/dist/coordination/database.js.map +1 -0
  107. package/dist/coordination/deploy-batcher.d.ts +101 -0
  108. package/dist/coordination/deploy-batcher.d.ts.map +1 -0
  109. package/dist/coordination/deploy-batcher.js +565 -0
  110. package/dist/coordination/deploy-batcher.js.map +1 -0
  111. package/dist/coordination/index.d.ts +5 -0
  112. package/dist/coordination/index.d.ts.map +1 -0
  113. package/dist/coordination/index.js +5 -0
  114. package/dist/coordination/index.js.map +1 -0
  115. package/dist/coordination/service.d.ts +81 -0
  116. package/dist/coordination/service.d.ts.map +1 -0
  117. package/dist/coordination/service.js +603 -0
  118. package/dist/coordination/service.js.map +1 -0
  119. package/dist/generators/claude-md.d.ts +3 -0
  120. package/dist/generators/claude-md.d.ts.map +1 -0
  121. package/dist/generators/claude-md.js +977 -0
  122. package/dist/generators/claude-md.js.map +1 -0
  123. package/dist/generators/template-loader.d.ts +105 -0
  124. package/dist/generators/template-loader.d.ts.map +1 -0
  125. package/dist/generators/template-loader.js +291 -0
  126. package/dist/generators/template-loader.js.map +1 -0
  127. package/dist/index.d.ts +47 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +59 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/mcp-router/config/parser.d.ts +9 -0
  132. package/dist/mcp-router/config/parser.d.ts.map +1 -0
  133. package/dist/mcp-router/config/parser.js +174 -0
  134. package/dist/mcp-router/config/parser.js.map +1 -0
  135. package/dist/mcp-router/executor/client.d.ts +31 -0
  136. package/dist/mcp-router/executor/client.d.ts.map +1 -0
  137. package/dist/mcp-router/executor/client.js +187 -0
  138. package/dist/mcp-router/executor/client.js.map +1 -0
  139. package/dist/mcp-router/index.d.ts +22 -0
  140. package/dist/mcp-router/index.d.ts.map +1 -0
  141. package/dist/mcp-router/index.js +18 -0
  142. package/dist/mcp-router/index.js.map +1 -0
  143. package/dist/mcp-router/output-compressor.d.ts +26 -0
  144. package/dist/mcp-router/output-compressor.d.ts.map +1 -0
  145. package/dist/mcp-router/output-compressor.js +236 -0
  146. package/dist/mcp-router/output-compressor.js.map +1 -0
  147. package/dist/mcp-router/search/fuzzy.d.ts +26 -0
  148. package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
  149. package/dist/mcp-router/search/fuzzy.js +94 -0
  150. package/dist/mcp-router/search/fuzzy.js.map +1 -0
  151. package/dist/mcp-router/server.d.ts +50 -0
  152. package/dist/mcp-router/server.d.ts.map +1 -0
  153. package/dist/mcp-router/server.js +229 -0
  154. package/dist/mcp-router/server.js.map +1 -0
  155. package/dist/mcp-router/session-stats.d.ts +37 -0
  156. package/dist/mcp-router/session-stats.d.ts.map +1 -0
  157. package/dist/mcp-router/session-stats.js +56 -0
  158. package/dist/mcp-router/session-stats.js.map +1 -0
  159. package/dist/mcp-router/tools/discover.d.ts +37 -0
  160. package/dist/mcp-router/tools/discover.d.ts.map +1 -0
  161. package/dist/mcp-router/tools/discover.js +65 -0
  162. package/dist/mcp-router/tools/discover.js.map +1 -0
  163. package/dist/mcp-router/tools/execute.d.ts +43 -0
  164. package/dist/mcp-router/tools/execute.d.ts.map +1 -0
  165. package/dist/mcp-router/tools/execute.js +103 -0
  166. package/dist/mcp-router/tools/execute.js.map +1 -0
  167. package/dist/mcp-router/types.d.ts +62 -0
  168. package/dist/mcp-router/types.d.ts.map +1 -0
  169. package/dist/mcp-router/types.js +6 -0
  170. package/dist/mcp-router/types.js.map +1 -0
  171. package/dist/memory/adaptive-context.d.ts +146 -0
  172. package/dist/memory/adaptive-context.d.ts.map +1 -0
  173. package/dist/memory/adaptive-context.js +1022 -0
  174. package/dist/memory/adaptive-context.js.map +1 -0
  175. package/dist/memory/agent-scoped-memory.d.ts +67 -0
  176. package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
  177. package/dist/memory/agent-scoped-memory.js +126 -0
  178. package/dist/memory/agent-scoped-memory.js.map +1 -0
  179. package/dist/memory/backends/base.d.ts +18 -0
  180. package/dist/memory/backends/base.d.ts.map +1 -0
  181. package/dist/memory/backends/base.js +2 -0
  182. package/dist/memory/backends/base.js.map +1 -0
  183. package/dist/memory/backends/factory.d.ts +4 -0
  184. package/dist/memory/backends/factory.d.ts.map +1 -0
  185. package/dist/memory/backends/factory.js +53 -0
  186. package/dist/memory/backends/factory.js.map +1 -0
  187. package/dist/memory/backends/github.d.ts +22 -0
  188. package/dist/memory/backends/github.d.ts.map +1 -0
  189. package/dist/memory/backends/github.js +118 -0
  190. package/dist/memory/backends/github.js.map +1 -0
  191. package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
  192. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
  193. package/dist/memory/backends/qdrant-cloud.js +168 -0
  194. package/dist/memory/backends/qdrant-cloud.js.map +1 -0
  195. package/dist/memory/context-compressor.d.ts +74 -0
  196. package/dist/memory/context-compressor.d.ts.map +1 -0
  197. package/dist/memory/context-compressor.js +289 -0
  198. package/dist/memory/context-compressor.js.map +1 -0
  199. package/dist/memory/correction-propagator.d.ts +44 -0
  200. package/dist/memory/correction-propagator.d.ts.map +1 -0
  201. package/dist/memory/correction-propagator.js +156 -0
  202. package/dist/memory/correction-propagator.js.map +1 -0
  203. package/dist/memory/daily-log.d.ts +67 -0
  204. package/dist/memory/daily-log.d.ts.map +1 -0
  205. package/dist/memory/daily-log.js +143 -0
  206. package/dist/memory/daily-log.js.map +1 -0
  207. package/dist/memory/dynamic-retrieval.d.ts +110 -0
  208. package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
  209. package/dist/memory/dynamic-retrieval.js +688 -0
  210. package/dist/memory/dynamic-retrieval.js.map +1 -0
  211. package/dist/memory/embeddings.d.ts +116 -0
  212. package/dist/memory/embeddings.d.ts.map +1 -0
  213. package/dist/memory/embeddings.js +461 -0
  214. package/dist/memory/embeddings.js.map +1 -0
  215. package/dist/memory/hierarchical-memory.d.ts +141 -0
  216. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  217. package/dist/memory/hierarchical-memory.js +477 -0
  218. package/dist/memory/hierarchical-memory.js.map +1 -0
  219. package/dist/memory/memory-consolidator.d.ts +124 -0
  220. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  221. package/dist/memory/memory-consolidator.js +514 -0
  222. package/dist/memory/memory-consolidator.js.map +1 -0
  223. package/dist/memory/memory-maintenance.d.ts +39 -0
  224. package/dist/memory/memory-maintenance.d.ts.map +1 -0
  225. package/dist/memory/memory-maintenance.js +305 -0
  226. package/dist/memory/memory-maintenance.js.map +1 -0
  227. package/dist/memory/model-router.d.ts +102 -0
  228. package/dist/memory/model-router.d.ts.map +1 -0
  229. package/dist/memory/model-router.js +448 -0
  230. package/dist/memory/model-router.js.map +1 -0
  231. package/dist/memory/multi-view-memory.d.ts +134 -0
  232. package/dist/memory/multi-view-memory.d.ts.map +1 -0
  233. package/dist/memory/multi-view-memory.js +420 -0
  234. package/dist/memory/multi-view-memory.js.map +1 -0
  235. package/dist/memory/prepopulate.d.ts +76 -0
  236. package/dist/memory/prepopulate.d.ts.map +1 -0
  237. package/dist/memory/prepopulate.js +815 -0
  238. package/dist/memory/prepopulate.js.map +1 -0
  239. package/dist/memory/semantic-compression.d.ts +77 -0
  240. package/dist/memory/semantic-compression.d.ts.map +1 -0
  241. package/dist/memory/semantic-compression.js +348 -0
  242. package/dist/memory/semantic-compression.js.map +1 -0
  243. package/dist/memory/serverless-qdrant.d.ts +102 -0
  244. package/dist/memory/serverless-qdrant.d.ts.map +1 -0
  245. package/dist/memory/serverless-qdrant.js +369 -0
  246. package/dist/memory/serverless-qdrant.js.map +1 -0
  247. package/dist/memory/short-term/factory.d.ts +26 -0
  248. package/dist/memory/short-term/factory.d.ts.map +1 -0
  249. package/dist/memory/short-term/factory.js +28 -0
  250. package/dist/memory/short-term/factory.js.map +1 -0
  251. package/dist/memory/short-term/indexeddb.d.ts +25 -0
  252. package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
  253. package/dist/memory/short-term/indexeddb.js +64 -0
  254. package/dist/memory/short-term/indexeddb.js.map +1 -0
  255. package/dist/memory/short-term/schema.d.ts +6 -0
  256. package/dist/memory/short-term/schema.d.ts.map +1 -0
  257. package/dist/memory/short-term/schema.js +119 -0
  258. package/dist/memory/short-term/schema.js.map +1 -0
  259. package/dist/memory/short-term/sqlite.d.ts +50 -0
  260. package/dist/memory/short-term/sqlite.d.ts.map +1 -0
  261. package/dist/memory/short-term/sqlite.js +221 -0
  262. package/dist/memory/short-term/sqlite.js.map +1 -0
  263. package/dist/memory/speculative-cache.d.ts +111 -0
  264. package/dist/memory/speculative-cache.d.ts.map +1 -0
  265. package/dist/memory/speculative-cache.js +409 -0
  266. package/dist/memory/speculative-cache.js.map +1 -0
  267. package/dist/memory/task-classifier.d.ts +34 -0
  268. package/dist/memory/task-classifier.d.ts.map +1 -0
  269. package/dist/memory/task-classifier.js +300 -0
  270. package/dist/memory/task-classifier.js.map +1 -0
  271. package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
  272. package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
  273. package/dist/memory/terminal-bench-knowledge.js +399 -0
  274. package/dist/memory/terminal-bench-knowledge.js.map +1 -0
  275. package/dist/memory/write-gate.d.ts +39 -0
  276. package/dist/memory/write-gate.d.ts.map +1 -0
  277. package/dist/memory/write-gate.js +190 -0
  278. package/dist/memory/write-gate.js.map +1 -0
  279. package/dist/models/executor.d.ts +130 -0
  280. package/dist/models/executor.d.ts.map +1 -0
  281. package/dist/models/executor.js +383 -0
  282. package/dist/models/executor.js.map +1 -0
  283. package/dist/models/index.d.ts +15 -0
  284. package/dist/models/index.d.ts.map +1 -0
  285. package/dist/models/index.js +17 -0
  286. package/dist/models/index.js.map +1 -0
  287. package/dist/models/planner.d.ts +71 -0
  288. package/dist/models/planner.d.ts.map +1 -0
  289. package/dist/models/planner.js +344 -0
  290. package/dist/models/planner.js.map +1 -0
  291. package/dist/models/router.d.ts +75 -0
  292. package/dist/models/router.d.ts.map +1 -0
  293. package/dist/models/router.js +344 -0
  294. package/dist/models/router.js.map +1 -0
  295. package/dist/models/types.d.ts +370 -0
  296. package/dist/models/types.d.ts.map +1 -0
  297. package/dist/models/types.js +181 -0
  298. package/dist/models/types.js.map +1 -0
  299. package/dist/tasks/coordination.d.ts +74 -0
  300. package/dist/tasks/coordination.d.ts.map +1 -0
  301. package/dist/tasks/coordination.js +237 -0
  302. package/dist/tasks/coordination.js.map +1 -0
  303. package/dist/tasks/database.d.ts +14 -0
  304. package/dist/tasks/database.d.ts.map +1 -0
  305. package/dist/tasks/database.js +128 -0
  306. package/dist/tasks/database.js.map +1 -0
  307. package/dist/tasks/index.d.ts +5 -0
  308. package/dist/tasks/index.d.ts.map +1 -0
  309. package/dist/tasks/index.js +5 -0
  310. package/dist/tasks/index.js.map +1 -0
  311. package/dist/tasks/service.d.ts +39 -0
  312. package/dist/tasks/service.d.ts.map +1 -0
  313. package/dist/tasks/service.js +582 -0
  314. package/dist/tasks/service.js.map +1 -0
  315. package/dist/tasks/types.d.ts +224 -0
  316. package/dist/tasks/types.d.ts.map +1 -0
  317. package/dist/tasks/types.js +64 -0
  318. package/dist/tasks/types.js.map +1 -0
  319. package/dist/types/analysis.d.ts +82 -0
  320. package/dist/types/analysis.d.ts.map +1 -0
  321. package/dist/types/analysis.js +2 -0
  322. package/dist/types/analysis.js.map +1 -0
  323. package/dist/types/config.d.ts +3023 -0
  324. package/dist/types/config.d.ts.map +1 -0
  325. package/dist/types/config.js +292 -0
  326. package/dist/types/config.js.map +1 -0
  327. package/dist/types/coordination.d.ts +240 -0
  328. package/dist/types/coordination.d.ts.map +1 -0
  329. package/dist/types/coordination.js +43 -0
  330. package/dist/types/coordination.js.map +1 -0
  331. package/dist/types/index.d.ts +4 -0
  332. package/dist/types/index.d.ts.map +1 -0
  333. package/dist/types/index.js +4 -0
  334. package/dist/types/index.js.map +1 -0
  335. package/dist/utils/calculate-average.d.ts +15 -0
  336. package/dist/utils/calculate-average.d.ts.map +1 -0
  337. package/dist/utils/calculate-average.js +21 -0
  338. package/dist/utils/calculate-average.js.map +1 -0
  339. package/dist/utils/config-manager.d.ts +30 -0
  340. package/dist/utils/config-manager.d.ts.map +1 -0
  341. package/dist/utils/config-manager.js +41 -0
  342. package/dist/utils/config-manager.js.map +1 -0
  343. package/dist/utils/dijkstra.d.ts +17 -0
  344. package/dist/utils/dijkstra.d.ts.map +1 -0
  345. package/dist/utils/dijkstra.js +91 -0
  346. package/dist/utils/dijkstra.js.map +1 -0
  347. package/dist/utils/fetch-with-retry.d.ts +5 -0
  348. package/dist/utils/fetch-with-retry.d.ts.map +1 -0
  349. package/dist/utils/fetch-with-retry.js +61 -0
  350. package/dist/utils/fetch-with-retry.js.map +1 -0
  351. package/dist/utils/merge-claude-md.d.ts +28 -0
  352. package/dist/utils/merge-claude-md.d.ts.map +1 -0
  353. package/dist/utils/merge-claude-md.js +342 -0
  354. package/dist/utils/merge-claude-md.js.map +1 -0
  355. package/dist/utils/order-processor-refactored.d.ts +126 -0
  356. package/dist/utils/order-processor-refactored.d.ts.map +1 -0
  357. package/dist/utils/order-processor-refactored.js +165 -0
  358. package/dist/utils/order-processor-refactored.js.map +1 -0
  359. package/dist/utils/order-processor-strategy.d.ts +72 -0
  360. package/dist/utils/order-processor-strategy.d.ts.map +1 -0
  361. package/dist/utils/order-processor-strategy.js +158 -0
  362. package/dist/utils/order-processor-strategy.js.map +1 -0
  363. package/dist/utils/order-processor.d.ts +242 -0
  364. package/dist/utils/order-processor.d.ts.map +1 -0
  365. package/dist/utils/order-processor.js +370 -0
  366. package/dist/utils/order-processor.js.map +1 -0
  367. package/dist/utils/rate-limiter-simple.d.ts +58 -0
  368. package/dist/utils/rate-limiter-simple.d.ts.map +1 -0
  369. package/dist/utils/rate-limiter-simple.js +100 -0
  370. package/dist/utils/rate-limiter-simple.js.map +1 -0
  371. package/dist/utils/rate-limiter.d.ts +62 -0
  372. package/dist/utils/rate-limiter.d.ts.map +1 -0
  373. package/dist/utils/rate-limiter.js +150 -0
  374. package/dist/utils/rate-limiter.js.map +1 -0
  375. package/dist/utils/string-similarity.d.ts +37 -0
  376. package/dist/utils/string-similarity.d.ts.map +1 -0
  377. package/dist/utils/string-similarity.js +114 -0
  378. package/dist/utils/string-similarity.js.map +1 -0
  379. package/dist/utils/validate-json.d.ts +51 -0
  380. package/dist/utils/validate-json.d.ts.map +1 -0
  381. package/dist/utils/validate-json.js +99 -0
  382. package/dist/utils/validate-json.js.map +1 -0
  383. package/package.json +96 -0
  384. package/templates/CLAUDE.template.md +11 -0
  385. package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
  386. package/templates/CLAUDE_CODING.template.md +125 -0
  387. package/templates/CLAUDE_DROIDS.template.md +109 -0
  388. package/templates/CLAUDE_MEMORY.template.md +130 -0
  389. package/templates/CLAUDE_WORKFLOWS.template.md +136 -0
  390. package/templates/PROJECT.template.md +209 -0
  391. package/templates/SCHEMA.md +57 -0
  392. package/templates/archive/CLAUDE.template.root-v6.md +762 -0
  393. package/templates/archive/CLAUDE.template.v6.md +762 -0
  394. package/templates/hooks/pre-compact.sh +68 -0
  395. package/templates/hooks/session-start.sh +106 -0
  396. package/tools/agents/README.md +224 -0
  397. package/tools/agents/UAP/README.md +351 -0
  398. package/tools/agents/UAP/__init__.py +9 -0
  399. package/tools/agents/UAP/cli.py +675 -0
  400. package/tools/agents/UAP/version.py +2 -0
  401. package/tools/agents/benchmarks/benchmark_memory_systems.py +637 -0
  402. package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
  403. package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
  404. package/tools/agents/config/chat_template.jinja +172 -0
  405. package/tools/agents/docker-compose.qdrant.yml +24 -0
  406. package/tools/agents/migrations/apply.py +256 -0
  407. package/tools/agents/scripts/fix_qwen_chat_template.py +314 -0
  408. package/tools/agents/scripts/init_qdrant.py +151 -0
  409. package/tools/agents/scripts/memory_migration.py +518 -0
  410. package/tools/agents/scripts/migrate_memory_to_qdrant.py +113 -0
  411. package/tools/agents/scripts/query_memory.py +189 -0
  412. package/tools/agents/scripts/qwen_tool_call_test.py +419 -0
  413. package/tools/agents/scripts/qwen_tool_call_wrapper.py +517 -0
  414. package/tools/agents/scripts/start-services.sh +96 -0
  415. package/tools/agents/tests/test_uap_compliance.py +257 -0
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Memory Consolidation Service for UAP
3
+ *
4
+ * Implements the consolidation rules from CLAUDE.md:
5
+ * - Trigger: Every 10 working memory entries
6
+ * - Action: Summarize → session_memories, Extract lessons → semantic memory
7
+ * - Dedup: Skip if content_hash exists OR similarity > 0.92
8
+ *
9
+ * Enhanced with SimpleMem-style recursive consolidation:
10
+ * - Background async consolidation process
11
+ * - Hierarchical abstraction (memories → summaries → meta-summaries)
12
+ * - Quality scoring and automatic pruning
13
+ */
14
+ export interface ConsolidationConfig {
15
+ triggerThreshold: number;
16
+ minImportanceForLongTerm: number;
17
+ similarityThreshold: number;
18
+ maxSummaryLength: number;
19
+ backgroundIntervalMs: number;
20
+ recursiveDepth: number;
21
+ qualityDecayRate: number;
22
+ }
23
+ export interface ConsolidationResult {
24
+ memoriesProcessed: number;
25
+ summariesCreated: number;
26
+ lessonsExtracted: number;
27
+ duplicatesSkipped: number;
28
+ tokensReduced: number;
29
+ }
30
+ /**
31
+ * Memory Consolidation Service
32
+ */
33
+ export declare class MemoryConsolidator {
34
+ private config;
35
+ private db;
36
+ private contentHashes;
37
+ private lastConsolidationId;
38
+ private backgroundInterval;
39
+ private isRunning;
40
+ private memoryQualityScores;
41
+ constructor(config?: Partial<ConsolidationConfig>);
42
+ /**
43
+ * Initialize with database connection
44
+ */
45
+ initialize(dbPath: string): void;
46
+ /**
47
+ * Load existing content hashes for deduplication
48
+ */
49
+ private loadContentHashes;
50
+ /**
51
+ * Hash content for deduplication
52
+ */
53
+ private hashContent;
54
+ /**
55
+ * Check if consolidation should run
56
+ */
57
+ shouldConsolidate(): boolean;
58
+ /**
59
+ * Run consolidation process
60
+ */
61
+ consolidate(): Promise<ConsolidationResult>;
62
+ /**
63
+ * Detect if content contains a lesson/insight
64
+ */
65
+ private detectLesson;
66
+ /**
67
+ * Check for semantic duplicates using embeddings
68
+ */
69
+ private checkSemanticDuplicate;
70
+ /**
71
+ * Store session memory
72
+ */
73
+ private storeSessionMemory;
74
+ /**
75
+ * Store lesson in long-term memory
76
+ */
77
+ private storeLesson;
78
+ /**
79
+ * Run decay on old memories
80
+ * Formula: effective_importance = importance × (0.95 ^ days_since_access)
81
+ */
82
+ runDecay(): Promise<number>;
83
+ /**
84
+ * Get consolidation stats
85
+ */
86
+ getStats(): {
87
+ totalMemories: number;
88
+ totalSessionMemories: number;
89
+ totalLessons: number;
90
+ lastConsolidationId: number;
91
+ uniqueHashes: number;
92
+ };
93
+ /**
94
+ * Start background consolidation process (SimpleMem-style async)
95
+ */
96
+ startBackgroundConsolidation(): void;
97
+ /**
98
+ * Stop background consolidation
99
+ */
100
+ stopBackgroundConsolidation(): void;
101
+ /**
102
+ * Recursive consolidation - merge summaries into meta-summaries
103
+ * Based on SimpleMem's hierarchical abstraction
104
+ */
105
+ recursiveConsolidate(depth?: number): Promise<number>;
106
+ /**
107
+ * Apply quality decay to unused memories (Memory-R1 style)
108
+ */
109
+ applyQualityDecay(): Promise<number>;
110
+ /**
111
+ * Record memory access (for quality scoring)
112
+ */
113
+ recordAccess(memoryId: string): void;
114
+ /**
115
+ * Get memory quality score
116
+ */
117
+ getQualityScore(memoryId: string): number;
118
+ /**
119
+ * Close database connection
120
+ */
121
+ close(): void;
122
+ }
123
+ export declare function getMemoryConsolidator(config?: Partial<ConsolidationConfig>): MemoryConsolidator;
124
+ //# sourceMappingURL=memory-consolidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-consolidator.d.ts","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAYD,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,mBAAmB,CAAsF;gBAErG,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAIrD;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAiB5B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAsGjD;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;YACW,sBAAsB;IAwCpC;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,WAAW;IAWzB;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAwCjC;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;KACtB;IAwCD;;OAEG;IACH,4BAA4B,IAAI,IAAI;IA2BpC;;OAEG;IACH,2BAA2B,IAAI,IAAI;IAQnC;;;OAGG;IACG,oBAAoB,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAyE9D;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IA8C1C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASpC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIzC;;OAEG;IACH,KAAK,IAAI,IAAI;CAOd;AAKD,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,kBAAkB,CAKpB"}
@@ -0,0 +1,514 @@
1
+ /**
2
+ * Memory Consolidation Service for UAP
3
+ *
4
+ * Implements the consolidation rules from CLAUDE.md:
5
+ * - Trigger: Every 10 working memory entries
6
+ * - Action: Summarize → session_memories, Extract lessons → semantic memory
7
+ * - Dedup: Skip if content_hash exists OR similarity > 0.92
8
+ *
9
+ * Enhanced with SimpleMem-style recursive consolidation:
10
+ * - Background async consolidation process
11
+ * - Hierarchical abstraction (memories → summaries → meta-summaries)
12
+ * - Quality scoring and automatic pruning
13
+ */
14
+ import { createHash } from 'crypto';
15
+ import { existsSync } from 'fs';
16
+ import Database from 'better-sqlite3';
17
+ import { summarizeMemories, compressMemoryEntry } from './context-compressor.js';
18
+ import { getEmbeddingService } from './embeddings.js';
19
+ import { createSemanticUnit } from './semantic-compression.js';
20
+ const DEFAULT_CONFIG = {
21
+ triggerThreshold: 10,
22
+ minImportanceForLongTerm: 7,
23
+ similarityThreshold: 0.92,
24
+ maxSummaryLength: 500,
25
+ backgroundIntervalMs: 60000, // 1 minute
26
+ recursiveDepth: 3, // memories → summaries → meta-summaries
27
+ qualityDecayRate: 0.95, // 5% decay per day unused
28
+ };
29
+ /**
30
+ * Memory Consolidation Service
31
+ */
32
+ export class MemoryConsolidator {
33
+ config;
34
+ db = null;
35
+ contentHashes = new Set();
36
+ lastConsolidationId = 0;
37
+ backgroundInterval = null;
38
+ isRunning = false;
39
+ memoryQualityScores = new Map();
40
+ constructor(config = {}) {
41
+ this.config = { ...DEFAULT_CONFIG, ...config };
42
+ }
43
+ /**
44
+ * Initialize with database connection
45
+ */
46
+ initialize(dbPath) {
47
+ if (!existsSync(dbPath)) {
48
+ throw new Error(`Database not found: ${dbPath}`);
49
+ }
50
+ this.db = new Database(dbPath);
51
+ this.loadContentHashes();
52
+ }
53
+ /**
54
+ * Load existing content hashes for deduplication
55
+ */
56
+ loadContentHashes() {
57
+ if (!this.db)
58
+ return;
59
+ try {
60
+ const stmt = this.db.prepare(`
61
+ SELECT content FROM memories
62
+ UNION
63
+ SELECT content FROM session_memories
64
+ `);
65
+ const rows = stmt.all();
66
+ for (const row of rows) {
67
+ this.contentHashes.add(this.hashContent(row.content));
68
+ }
69
+ }
70
+ catch {
71
+ // Tables might not exist yet
72
+ }
73
+ }
74
+ /**
75
+ * Hash content for deduplication
76
+ */
77
+ hashContent(content) {
78
+ return createHash('md5')
79
+ .update(content.toLowerCase().trim())
80
+ .digest('hex');
81
+ }
82
+ /**
83
+ * Check if consolidation should run
84
+ */
85
+ shouldConsolidate() {
86
+ if (!this.db)
87
+ return false;
88
+ try {
89
+ const stmt = this.db.prepare(`
90
+ SELECT COUNT(*) as count, MAX(id) as maxId
91
+ FROM memories
92
+ WHERE id > ?
93
+ `);
94
+ const result = stmt.get(this.lastConsolidationId);
95
+ return result.count >= this.config.triggerThreshold;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ /**
102
+ * Run consolidation process
103
+ */
104
+ async consolidate() {
105
+ if (!this.db) {
106
+ throw new Error('Database not initialized');
107
+ }
108
+ const result = {
109
+ memoriesProcessed: 0,
110
+ summariesCreated: 0,
111
+ lessonsExtracted: 0,
112
+ duplicatesSkipped: 0,
113
+ tokensReduced: 0,
114
+ };
115
+ // Get memories since last consolidation
116
+ const stmt = this.db.prepare(`
117
+ SELECT id, timestamp, type, content
118
+ FROM memories
119
+ WHERE id > ?
120
+ ORDER BY id ASC
121
+ LIMIT 100
122
+ `);
123
+ const memories = stmt.all(this.lastConsolidationId);
124
+ if (memories.length === 0)
125
+ return result;
126
+ result.memoriesProcessed = memories.length;
127
+ const originalTokens = memories.reduce((sum, m) => sum + m.content.length / 4, 0);
128
+ // Group by type for summarization
129
+ const byType = {};
130
+ for (const mem of memories) {
131
+ if (!byType[mem.type])
132
+ byType[mem.type] = [];
133
+ byType[mem.type].push(mem);
134
+ }
135
+ // Create summaries for each type
136
+ for (const [_type, typeMemories] of Object.entries(byType)) {
137
+ if (typeMemories.length >= 3) {
138
+ const summary = summarizeMemories(typeMemories.map(m => ({
139
+ content: m.content,
140
+ timestamp: m.timestamp,
141
+ type: m.type,
142
+ })), this.config.maxSummaryLength);
143
+ const summaryHash = this.hashContent(summary);
144
+ if (!this.contentHashes.has(summaryHash)) {
145
+ // Store in session_memories
146
+ await this.storeSessionMemory(summary, 'summary', 6);
147
+ this.contentHashes.add(summaryHash);
148
+ result.summariesCreated++;
149
+ }
150
+ else {
151
+ result.duplicatesSkipped++;
152
+ }
153
+ }
154
+ }
155
+ // Extract lessons from high-importance observations
156
+ const lessons = memories.filter(m => m.type === 'observation' &&
157
+ this.detectLesson(m.content));
158
+ for (const lesson of lessons) {
159
+ const compressed = compressMemoryEntry(lesson.content, { compressionLevel: 'medium' });
160
+ const hash = this.hashContent(compressed.compressed);
161
+ if (!this.contentHashes.has(hash)) {
162
+ // Check semantic similarity
163
+ const isDuplicate = await this.checkSemanticDuplicate(compressed.compressed);
164
+ if (!isDuplicate) {
165
+ await this.storeLesson(compressed.compressed, lesson.timestamp);
166
+ this.contentHashes.add(hash);
167
+ result.lessonsExtracted++;
168
+ }
169
+ else {
170
+ result.duplicatesSkipped++;
171
+ }
172
+ }
173
+ else {
174
+ result.duplicatesSkipped++;
175
+ }
176
+ }
177
+ // Calculate token reduction
178
+ const summaryTokens = result.summariesCreated * (this.config.maxSummaryLength / 4);
179
+ const lessonTokens = result.lessonsExtracted * 100; // Approximate
180
+ result.tokensReduced = Math.max(0, originalTokens - summaryTokens - lessonTokens);
181
+ // Update last consolidation pointer
182
+ this.lastConsolidationId = memories[memories.length - 1].id;
183
+ return result;
184
+ }
185
+ /**
186
+ * Detect if content contains a lesson/insight
187
+ */
188
+ detectLesson(content) {
189
+ const lessonIndicators = [
190
+ /learned that/i,
191
+ /important to/i,
192
+ /mistake was/i,
193
+ /better to/i,
194
+ /should always/i,
195
+ /should never/i,
196
+ /key insight/i,
197
+ /gotcha/i,
198
+ /watch out for/i,
199
+ /best practice/i,
200
+ /pattern/i,
201
+ /tip:/i,
202
+ ];
203
+ return lessonIndicators.some(pattern => pattern.test(content));
204
+ }
205
+ /**
206
+ * Check for semantic duplicates using embeddings
207
+ */
208
+ async checkSemanticDuplicate(content) {
209
+ if (!this.db)
210
+ return false;
211
+ try {
212
+ const embeddingService = getEmbeddingService();
213
+ const newEmbedding = await embeddingService.embed(content);
214
+ // Get recent session memories for comparison
215
+ const stmt = this.db.prepare(`
216
+ SELECT content FROM session_memories
217
+ ORDER BY id DESC
218
+ LIMIT 50
219
+ `);
220
+ const existing = stmt.all();
221
+ for (const { content: existingContent } of existing) {
222
+ const existingEmbedding = await embeddingService.embed(existingContent);
223
+ const similarity = embeddingService.cosineSimilarity(newEmbedding, existingEmbedding);
224
+ if (similarity > this.config.similarityThreshold) {
225
+ return true;
226
+ }
227
+ }
228
+ return false;
229
+ }
230
+ catch {
231
+ // Fall back to text comparison
232
+ const normalizedNew = content.toLowerCase().trim();
233
+ const stmt = this.db.prepare(`
234
+ SELECT content FROM session_memories
235
+ WHERE LOWER(TRIM(content)) = ?
236
+ LIMIT 1
237
+ `);
238
+ const match = stmt.get(normalizedNew);
239
+ return !!match;
240
+ }
241
+ }
242
+ /**
243
+ * Store session memory
244
+ */
245
+ async storeSessionMemory(content, type, importance) {
246
+ if (!this.db)
247
+ return;
248
+ const stmt = this.db.prepare(`
249
+ INSERT OR IGNORE INTO session_memories (session_id, timestamp, type, content, importance)
250
+ VALUES ('consolidation', ?, ?, ?, ?)
251
+ `);
252
+ stmt.run(new Date().toISOString(), type, content, importance);
253
+ }
254
+ /**
255
+ * Store lesson in long-term memory
256
+ */
257
+ async storeLesson(content, timestamp) {
258
+ if (!this.db)
259
+ return;
260
+ const stmt = this.db.prepare(`
261
+ INSERT OR IGNORE INTO session_memories (session_id, timestamp, type, content, importance)
262
+ VALUES ('lessons', ?, 'lesson', ?, ?)
263
+ `);
264
+ stmt.run(timestamp, content, this.config.minImportanceForLongTerm);
265
+ }
266
+ /**
267
+ * Run decay on old memories
268
+ * Formula: effective_importance = importance × (0.95 ^ days_since_access)
269
+ */
270
+ async runDecay() {
271
+ if (!this.db)
272
+ return 0;
273
+ try {
274
+ // SQLite doesn't have POW, so we do this in application code
275
+ const stmt = this.db.prepare(`
276
+ SELECT id, importance, timestamp
277
+ FROM session_memories
278
+ WHERE importance > 1
279
+ `);
280
+ const rows = stmt.all();
281
+ let updated = 0;
282
+ const now = Date.now();
283
+ const updateStmt = this.db.prepare(`
284
+ UPDATE session_memories
285
+ SET importance = ?
286
+ WHERE id = ?
287
+ `);
288
+ for (const row of rows) {
289
+ const daysSince = (now - new Date(row.timestamp).getTime()) / (1000 * 60 * 60 * 24);
290
+ const decayed = Math.round(row.importance * Math.pow(0.95, daysSince));
291
+ if (decayed !== row.importance && decayed >= 1) {
292
+ updateStmt.run(decayed, row.id);
293
+ updated++;
294
+ }
295
+ }
296
+ return updated;
297
+ }
298
+ catch {
299
+ return 0;
300
+ }
301
+ }
302
+ /**
303
+ * Get consolidation stats
304
+ */
305
+ getStats() {
306
+ if (!this.db) {
307
+ return {
308
+ totalMemories: 0,
309
+ totalSessionMemories: 0,
310
+ totalLessons: 0,
311
+ lastConsolidationId: this.lastConsolidationId,
312
+ uniqueHashes: this.contentHashes.size,
313
+ };
314
+ }
315
+ try {
316
+ const memoriesStmt = this.db.prepare('SELECT COUNT(*) as count FROM memories');
317
+ const sessionStmt = this.db.prepare('SELECT COUNT(*) as count FROM session_memories');
318
+ const lessonsStmt = this.db.prepare(`
319
+ SELECT COUNT(*) as count FROM session_memories WHERE type = 'lesson'
320
+ `);
321
+ const memories = memoriesStmt.get().count;
322
+ const session = sessionStmt.get().count;
323
+ const lessons = lessonsStmt.get().count;
324
+ return {
325
+ totalMemories: memories,
326
+ totalSessionMemories: session,
327
+ totalLessons: lessons,
328
+ lastConsolidationId: this.lastConsolidationId,
329
+ uniqueHashes: this.contentHashes.size,
330
+ };
331
+ }
332
+ catch {
333
+ return {
334
+ totalMemories: 0,
335
+ totalSessionMemories: 0,
336
+ totalLessons: 0,
337
+ lastConsolidationId: this.lastConsolidationId,
338
+ uniqueHashes: this.contentHashes.size,
339
+ };
340
+ }
341
+ }
342
+ /**
343
+ * Start background consolidation process (SimpleMem-style async)
344
+ */
345
+ startBackgroundConsolidation() {
346
+ if (this.backgroundInterval)
347
+ return;
348
+ this.isRunning = true;
349
+ this.backgroundInterval = setInterval(async () => {
350
+ if (!this.isRunning)
351
+ return;
352
+ try {
353
+ // Run consolidation if threshold met
354
+ if (this.shouldConsolidate()) {
355
+ await this.consolidate();
356
+ }
357
+ // Run recursive consolidation on summaries
358
+ await this.recursiveConsolidate();
359
+ // Apply quality decay
360
+ await this.applyQualityDecay();
361
+ }
362
+ catch (error) {
363
+ console.error('[MemoryConsolidator] Background error:', error);
364
+ }
365
+ }, this.config.backgroundIntervalMs);
366
+ console.log(`[MemoryConsolidator] Background consolidation started (interval: ${this.config.backgroundIntervalMs}ms)`);
367
+ }
368
+ /**
369
+ * Stop background consolidation
370
+ */
371
+ stopBackgroundConsolidation() {
372
+ this.isRunning = false;
373
+ if (this.backgroundInterval) {
374
+ clearInterval(this.backgroundInterval);
375
+ this.backgroundInterval = null;
376
+ }
377
+ }
378
+ /**
379
+ * Recursive consolidation - merge summaries into meta-summaries
380
+ * Based on SimpleMem's hierarchical abstraction
381
+ */
382
+ async recursiveConsolidate(depth = 0) {
383
+ if (!this.db || depth >= this.config.recursiveDepth)
384
+ return 0;
385
+ let consolidated = 0;
386
+ try {
387
+ // Find summaries that can be merged (same type, adjacent time periods)
388
+ const stmt = this.db.prepare(`
389
+ SELECT id, timestamp, type, content, importance
390
+ FROM session_memories
391
+ WHERE type = 'summary'
392
+ ORDER BY timestamp ASC
393
+ LIMIT 20
394
+ `);
395
+ const summaries = stmt.all();
396
+ // Group adjacent summaries (within 24 hours)
397
+ const groups = [];
398
+ let currentGroup = [];
399
+ for (const summary of summaries) {
400
+ if (currentGroup.length === 0) {
401
+ currentGroup.push(summary);
402
+ }
403
+ else {
404
+ const lastTime = new Date(currentGroup[currentGroup.length - 1].timestamp).getTime();
405
+ const thisTime = new Date(summary.timestamp).getTime();
406
+ const hoursDiff = (thisTime - lastTime) / (1000 * 60 * 60);
407
+ if (hoursDiff <= 24) {
408
+ currentGroup.push(summary);
409
+ }
410
+ else {
411
+ if (currentGroup.length >= 3)
412
+ groups.push(currentGroup);
413
+ currentGroup = [summary];
414
+ }
415
+ }
416
+ }
417
+ if (currentGroup.length >= 3)
418
+ groups.push(currentGroup);
419
+ // Create meta-summaries from groups
420
+ for (const group of groups) {
421
+ const unit = createSemanticUnit(group.map(s => ({ content: s.content, importance: s.importance })));
422
+ if (unit.compressionRatio > 1.2) {
423
+ const metaSummary = unit.atomicFacts.map(f => f.content).join(' ');
424
+ const hash = this.hashContent(metaSummary);
425
+ if (!this.contentHashes.has(hash)) {
426
+ await this.storeSessionMemory(metaSummary, 'meta-summary', 8);
427
+ this.contentHashes.add(hash);
428
+ consolidated++;
429
+ // Remove original summaries
430
+ const ids = group.map(s => s.id);
431
+ this.db.prepare(`DELETE FROM session_memories WHERE id IN (${ids.join(',')})`).run();
432
+ }
433
+ }
434
+ }
435
+ }
436
+ catch {
437
+ // Ignore errors
438
+ }
439
+ return consolidated;
440
+ }
441
+ /**
442
+ * Apply quality decay to unused memories (Memory-R1 style)
443
+ */
444
+ async applyQualityDecay() {
445
+ if (!this.db)
446
+ return 0;
447
+ const now = Date.now();
448
+ let updated = 0;
449
+ try {
450
+ const stmt = this.db.prepare(`
451
+ SELECT id, importance, timestamp
452
+ FROM session_memories
453
+ WHERE importance > 1
454
+ `);
455
+ const rows = stmt.all();
456
+ const updateStmt = this.db.prepare(`
457
+ UPDATE session_memories SET importance = ? WHERE id = ?
458
+ `);
459
+ for (const row of rows) {
460
+ const memKey = `session-${row.id}`;
461
+ const quality = this.memoryQualityScores.get(memKey);
462
+ // Calculate days since last access (or creation)
463
+ const lastAccess = quality?.lastAccessed || new Date(row.timestamp);
464
+ const daysSince = (now - lastAccess.getTime()) / (1000 * 60 * 60 * 24);
465
+ // Apply decay: importance * (decayRate ^ days)
466
+ const decayed = Math.round(row.importance * Math.pow(this.config.qualityDecayRate, daysSince));
467
+ if (decayed !== row.importance && decayed >= 1) {
468
+ updateStmt.run(decayed, row.id);
469
+ updated++;
470
+ }
471
+ }
472
+ }
473
+ catch {
474
+ // Ignore errors
475
+ }
476
+ return updated;
477
+ }
478
+ /**
479
+ * Record memory access (for quality scoring)
480
+ */
481
+ recordAccess(memoryId) {
482
+ const existing = this.memoryQualityScores.get(memoryId);
483
+ this.memoryQualityScores.set(memoryId, {
484
+ score: (existing?.score || 5) + 0.5,
485
+ lastAccessed: new Date(),
486
+ accessCount: (existing?.accessCount || 0) + 1,
487
+ });
488
+ }
489
+ /**
490
+ * Get memory quality score
491
+ */
492
+ getQualityScore(memoryId) {
493
+ return this.memoryQualityScores.get(memoryId)?.score || 5;
494
+ }
495
+ /**
496
+ * Close database connection
497
+ */
498
+ close() {
499
+ this.stopBackgroundConsolidation();
500
+ if (this.db) {
501
+ this.db.close();
502
+ this.db = null;
503
+ }
504
+ }
505
+ }
506
+ // Singleton instance
507
+ let globalConsolidator = null;
508
+ export function getMemoryConsolidator(config) {
509
+ if (!globalConsolidator) {
510
+ globalConsolidator = new MemoryConsolidator(config);
511
+ }
512
+ return globalConsolidator;
513
+ }
514
+ //# sourceMappingURL=memory-consolidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-consolidator.js","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"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"}