@miller-tech/uap 1.0.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 (660) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +888 -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 +684 -0
  6. package/dist/analyzers/index.js.map +1 -0
  7. package/dist/benchmarks/agents/naive-agent.d.ts +60 -0
  8. package/dist/benchmarks/agents/naive-agent.d.ts.map +1 -0
  9. package/dist/benchmarks/agents/naive-agent.js +144 -0
  10. package/dist/benchmarks/agents/naive-agent.js.map +1 -0
  11. package/dist/benchmarks/agents/uap-agent.d.ts +167 -0
  12. package/dist/benchmarks/agents/uap-agent.d.ts.map +1 -0
  13. package/dist/benchmarks/agents/uap-agent.js +437 -0
  14. package/dist/benchmarks/agents/uap-agent.js.map +1 -0
  15. package/dist/benchmarks/benchmark.d.ts +328 -0
  16. package/dist/benchmarks/benchmark.d.ts.map +1 -0
  17. package/dist/benchmarks/benchmark.js +112 -0
  18. package/dist/benchmarks/benchmark.js.map +1 -0
  19. package/dist/benchmarks/execution-verifier.d.ts +41 -0
  20. package/dist/benchmarks/execution-verifier.d.ts.map +1 -0
  21. package/dist/benchmarks/execution-verifier.js +340 -0
  22. package/dist/benchmarks/execution-verifier.js.map +1 -0
  23. package/dist/benchmarks/hierarchical-prompting.d.ts +37 -0
  24. package/dist/benchmarks/hierarchical-prompting.d.ts.map +1 -0
  25. package/dist/benchmarks/hierarchical-prompting.js +246 -0
  26. package/dist/benchmarks/hierarchical-prompting.js.map +1 -0
  27. package/dist/benchmarks/improved-benchmark.d.ts +89 -0
  28. package/dist/benchmarks/improved-benchmark.d.ts.map +1 -0
  29. package/dist/benchmarks/improved-benchmark.js +585 -0
  30. package/dist/benchmarks/improved-benchmark.js.map +1 -0
  31. package/dist/benchmarks/index.d.ts +11 -0
  32. package/dist/benchmarks/index.d.ts.map +1 -0
  33. package/dist/benchmarks/index.js +11 -0
  34. package/dist/benchmarks/index.js.map +1 -0
  35. package/dist/benchmarks/model-integration.d.ts +111 -0
  36. package/dist/benchmarks/model-integration.d.ts.map +1 -0
  37. package/dist/benchmarks/model-integration.js +904 -0
  38. package/dist/benchmarks/model-integration.js.map +1 -0
  39. package/dist/benchmarks/multi-turn-agent.d.ts +44 -0
  40. package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -0
  41. package/dist/benchmarks/multi-turn-agent.js +254 -0
  42. package/dist/benchmarks/multi-turn-agent.js.map +1 -0
  43. package/dist/benchmarks/multi-turn-loop.d.ts +57 -0
  44. package/dist/benchmarks/multi-turn-loop.d.ts.map +1 -0
  45. package/dist/benchmarks/multi-turn-loop.js +167 -0
  46. package/dist/benchmarks/multi-turn-loop.js.map +1 -0
  47. package/dist/benchmarks/tasks.d.ts +19 -0
  48. package/dist/benchmarks/tasks.d.ts.map +1 -0
  49. package/dist/benchmarks/tasks.js +435 -0
  50. package/dist/benchmarks/tasks.js.map +1 -0
  51. package/dist/bin/cli.d.ts +3 -0
  52. package/dist/bin/cli.d.ts.map +1 -0
  53. package/dist/bin/cli.js +546 -0
  54. package/dist/bin/cli.js.map +1 -0
  55. package/dist/bin/llama-server-optimize.d.ts +18 -0
  56. package/dist/bin/llama-server-optimize.d.ts.map +1 -0
  57. package/dist/bin/llama-server-optimize.js +708 -0
  58. package/dist/bin/llama-server-optimize.js.map +1 -0
  59. package/dist/bin/policy.d.ts +3 -0
  60. package/dist/bin/policy.d.ts.map +1 -0
  61. package/dist/bin/policy.js +143 -0
  62. package/dist/bin/policy.js.map +1 -0
  63. package/dist/bin/tool-calls.d.ts +3 -0
  64. package/dist/bin/tool-calls.d.ts.map +1 -0
  65. package/dist/bin/tool-calls.js +4 -0
  66. package/dist/bin/tool-calls.js.map +1 -0
  67. package/dist/browser/index.d.ts +2 -0
  68. package/dist/browser/index.d.ts.map +1 -0
  69. package/dist/browser/index.js +2 -0
  70. package/dist/browser/index.js.map +1 -0
  71. package/dist/browser/web-browser.d.ts +30 -0
  72. package/dist/browser/web-browser.d.ts.map +1 -0
  73. package/dist/browser/web-browser.js +93 -0
  74. package/dist/browser/web-browser.js.map +1 -0
  75. package/dist/cli/agent.d.ts +20 -0
  76. package/dist/cli/agent.d.ts.map +1 -0
  77. package/dist/cli/agent.js +474 -0
  78. package/dist/cli/agent.js.map +1 -0
  79. package/dist/cli/analyze.d.ts +7 -0
  80. package/dist/cli/analyze.d.ts.map +1 -0
  81. package/dist/cli/analyze.js +103 -0
  82. package/dist/cli/analyze.js.map +1 -0
  83. package/dist/cli/completion-gates.d.ts +51 -0
  84. package/dist/cli/completion-gates.d.ts.map +1 -0
  85. package/dist/cli/completion-gates.js +201 -0
  86. package/dist/cli/completion-gates.js.map +1 -0
  87. package/dist/cli/compliance.d.ts +8 -0
  88. package/dist/cli/compliance.d.ts.map +1 -0
  89. package/dist/cli/compliance.js +509 -0
  90. package/dist/cli/compliance.js.map +1 -0
  91. package/dist/cli/coord.d.ts +7 -0
  92. package/dist/cli/coord.d.ts.map +1 -0
  93. package/dist/cli/coord.js +138 -0
  94. package/dist/cli/coord.js.map +1 -0
  95. package/dist/cli/dashboard.d.ts +21 -0
  96. package/dist/cli/dashboard.d.ts.map +1 -0
  97. package/dist/cli/dashboard.js +1508 -0
  98. package/dist/cli/dashboard.js.map +1 -0
  99. package/dist/cli/deploy.d.ts +19 -0
  100. package/dist/cli/deploy.d.ts.map +1 -0
  101. package/dist/cli/deploy.js +387 -0
  102. package/dist/cli/deploy.js.map +1 -0
  103. package/dist/cli/droids.d.ts +9 -0
  104. package/dist/cli/droids.d.ts.map +1 -0
  105. package/dist/cli/droids.js +227 -0
  106. package/dist/cli/droids.js.map +1 -0
  107. package/dist/cli/generate.d.ts +17 -0
  108. package/dist/cli/generate.d.ts.map +1 -0
  109. package/dist/cli/generate.js +432 -0
  110. package/dist/cli/generate.js.map +1 -0
  111. package/dist/cli/hooks.d.ts +9 -0
  112. package/dist/cli/hooks.d.ts.map +1 -0
  113. package/dist/cli/hooks.js +464 -0
  114. package/dist/cli/hooks.js.map +1 -0
  115. package/dist/cli/init.d.ts +12 -0
  116. package/dist/cli/init.d.ts.map +1 -0
  117. package/dist/cli/init.js +364 -0
  118. package/dist/cli/init.js.map +1 -0
  119. package/dist/cli/mcp-router.d.ts +16 -0
  120. package/dist/cli/mcp-router.d.ts.map +1 -0
  121. package/dist/cli/mcp-router.js +143 -0
  122. package/dist/cli/mcp-router.js.map +1 -0
  123. package/dist/cli/memory.d.ts +24 -0
  124. package/dist/cli/memory.d.ts.map +1 -0
  125. package/dist/cli/memory.js +885 -0
  126. package/dist/cli/memory.js.map +1 -0
  127. package/dist/cli/model.d.ts +15 -0
  128. package/dist/cli/model.d.ts.map +1 -0
  129. package/dist/cli/model.js +290 -0
  130. package/dist/cli/model.js.map +1 -0
  131. package/dist/cli/patterns.d.ts +26 -0
  132. package/dist/cli/patterns.d.ts.map +1 -0
  133. package/dist/cli/patterns.js +862 -0
  134. package/dist/cli/patterns.js.map +1 -0
  135. package/dist/cli/rtk-validation.d.ts +9 -0
  136. package/dist/cli/rtk-validation.d.ts.map +1 -0
  137. package/dist/cli/rtk-validation.js +9 -0
  138. package/dist/cli/rtk-validation.js.map +1 -0
  139. package/dist/cli/rtk.d.ts +34 -0
  140. package/dist/cli/rtk.d.ts.map +1 -0
  141. package/dist/cli/rtk.js +401 -0
  142. package/dist/cli/rtk.js.map +1 -0
  143. package/dist/cli/schema-diff.d.ts +7 -0
  144. package/dist/cli/schema-diff.d.ts.map +1 -0
  145. package/dist/cli/schema-diff.js +11 -0
  146. package/dist/cli/schema-diff.js.map +1 -0
  147. package/dist/cli/setup-mcp-router.d.ts +8 -0
  148. package/dist/cli/setup-mcp-router.d.ts.map +1 -0
  149. package/dist/cli/setup-mcp-router.js +163 -0
  150. package/dist/cli/setup-mcp-router.js.map +1 -0
  151. package/dist/cli/setup-wizard.d.ts +2 -0
  152. package/dist/cli/setup-wizard.d.ts.map +1 -0
  153. package/dist/cli/setup-wizard.js +806 -0
  154. package/dist/cli/setup-wizard.js.map +1 -0
  155. package/dist/cli/setup.d.ts +15 -0
  156. package/dist/cli/setup.d.ts.map +1 -0
  157. package/dist/cli/setup.js +154 -0
  158. package/dist/cli/setup.js.map +1 -0
  159. package/dist/cli/sync.d.ts +8 -0
  160. package/dist/cli/sync.d.ts.map +1 -0
  161. package/dist/cli/sync.js +395 -0
  162. package/dist/cli/sync.js.map +1 -0
  163. package/dist/cli/task.d.ts +33 -0
  164. package/dist/cli/task.d.ts.map +1 -0
  165. package/dist/cli/task.js +672 -0
  166. package/dist/cli/task.js.map +1 -0
  167. package/dist/cli/tool-calls.d.ts +20 -0
  168. package/dist/cli/tool-calls.d.ts.map +1 -0
  169. package/dist/cli/tool-calls.js +605 -0
  170. package/dist/cli/tool-calls.js.map +1 -0
  171. package/dist/cli/uap.d.ts +10 -0
  172. package/dist/cli/uap.d.ts.map +1 -0
  173. package/dist/cli/uap.js +398 -0
  174. package/dist/cli/uap.js.map +1 -0
  175. package/dist/cli/update.d.ts +10 -0
  176. package/dist/cli/update.d.ts.map +1 -0
  177. package/dist/cli/update.js +300 -0
  178. package/dist/cli/update.js.map +1 -0
  179. package/dist/cli/visualize.d.ts +77 -0
  180. package/dist/cli/visualize.d.ts.map +1 -0
  181. package/dist/cli/visualize.js +287 -0
  182. package/dist/cli/visualize.js.map +1 -0
  183. package/dist/cli/worktree.d.ts +9 -0
  184. package/dist/cli/worktree.d.ts.map +1 -0
  185. package/dist/cli/worktree.js +213 -0
  186. package/dist/cli/worktree.js.map +1 -0
  187. package/dist/coordination/adaptive-patterns.d.ts +65 -0
  188. package/dist/coordination/adaptive-patterns.d.ts.map +1 -0
  189. package/dist/coordination/adaptive-patterns.js +108 -0
  190. package/dist/coordination/adaptive-patterns.js.map +1 -0
  191. package/dist/coordination/auto-agent.d.ts +82 -0
  192. package/dist/coordination/auto-agent.d.ts.map +1 -0
  193. package/dist/coordination/auto-agent.js +145 -0
  194. package/dist/coordination/auto-agent.js.map +1 -0
  195. package/dist/coordination/capability-router.d.ts +79 -0
  196. package/dist/coordination/capability-router.d.ts.map +1 -0
  197. package/dist/coordination/capability-router.js +334 -0
  198. package/dist/coordination/capability-router.js.map +1 -0
  199. package/dist/coordination/database.d.ts +13 -0
  200. package/dist/coordination/database.d.ts.map +1 -0
  201. package/dist/coordination/database.js +136 -0
  202. package/dist/coordination/database.js.map +1 -0
  203. package/dist/coordination/deploy-batcher.d.ts +122 -0
  204. package/dist/coordination/deploy-batcher.d.ts.map +1 -0
  205. package/dist/coordination/deploy-batcher.js +718 -0
  206. package/dist/coordination/deploy-batcher.js.map +1 -0
  207. package/dist/coordination/droid-validator.d.ts +59 -0
  208. package/dist/coordination/droid-validator.d.ts.map +1 -0
  209. package/dist/coordination/droid-validator.js +142 -0
  210. package/dist/coordination/droid-validator.js.map +1 -0
  211. package/dist/coordination/index.d.ts +10 -0
  212. package/dist/coordination/index.d.ts.map +1 -0
  213. package/dist/coordination/index.js +10 -0
  214. package/dist/coordination/index.js.map +1 -0
  215. package/dist/coordination/pattern-router.d.ts +50 -0
  216. package/dist/coordination/pattern-router.d.ts.map +1 -0
  217. package/dist/coordination/pattern-router.js +118 -0
  218. package/dist/coordination/pattern-router.js.map +1 -0
  219. package/dist/coordination/service.d.ts +81 -0
  220. package/dist/coordination/service.d.ts.map +1 -0
  221. package/dist/coordination/service.js +619 -0
  222. package/dist/coordination/service.js.map +1 -0
  223. package/dist/coordination/worktree-enforcer.d.ts +22 -0
  224. package/dist/coordination/worktree-enforcer.d.ts.map +1 -0
  225. package/dist/coordination/worktree-enforcer.js +71 -0
  226. package/dist/coordination/worktree-enforcer.js.map +1 -0
  227. package/dist/generators/claude-md.d.ts +3 -0
  228. package/dist/generators/claude-md.d.ts.map +1 -0
  229. package/dist/generators/claude-md.js +1020 -0
  230. package/dist/generators/claude-md.js.map +1 -0
  231. package/dist/generators/template-loader.d.ts +105 -0
  232. package/dist/generators/template-loader.d.ts.map +1 -0
  233. package/dist/generators/template-loader.js +291 -0
  234. package/dist/generators/template-loader.js.map +1 -0
  235. package/dist/index.d.ts +49 -0
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +63 -0
  238. package/dist/index.js.map +1 -0
  239. package/dist/mcp-router/config/parser.d.ts +9 -0
  240. package/dist/mcp-router/config/parser.d.ts.map +1 -0
  241. package/dist/mcp-router/config/parser.js +174 -0
  242. package/dist/mcp-router/config/parser.js.map +1 -0
  243. package/dist/mcp-router/executor/client.d.ts +31 -0
  244. package/dist/mcp-router/executor/client.d.ts.map +1 -0
  245. package/dist/mcp-router/executor/client.js +189 -0
  246. package/dist/mcp-router/executor/client.js.map +1 -0
  247. package/dist/mcp-router/index.d.ts +22 -0
  248. package/dist/mcp-router/index.d.ts.map +1 -0
  249. package/dist/mcp-router/index.js +18 -0
  250. package/dist/mcp-router/index.js.map +1 -0
  251. package/dist/mcp-router/output-compressor.d.ts +26 -0
  252. package/dist/mcp-router/output-compressor.d.ts.map +1 -0
  253. package/dist/mcp-router/output-compressor.js +236 -0
  254. package/dist/mcp-router/output-compressor.js.map +1 -0
  255. package/dist/mcp-router/search/fuzzy.d.ts +26 -0
  256. package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
  257. package/dist/mcp-router/search/fuzzy.js +94 -0
  258. package/dist/mcp-router/search/fuzzy.js.map +1 -0
  259. package/dist/mcp-router/server.d.ts +50 -0
  260. package/dist/mcp-router/server.d.ts.map +1 -0
  261. package/dist/mcp-router/server.js +229 -0
  262. package/dist/mcp-router/server.js.map +1 -0
  263. package/dist/mcp-router/session-stats.d.ts +37 -0
  264. package/dist/mcp-router/session-stats.d.ts.map +1 -0
  265. package/dist/mcp-router/session-stats.js +56 -0
  266. package/dist/mcp-router/session-stats.js.map +1 -0
  267. package/dist/mcp-router/tools/discover.d.ts +37 -0
  268. package/dist/mcp-router/tools/discover.d.ts.map +1 -0
  269. package/dist/mcp-router/tools/discover.js +65 -0
  270. package/dist/mcp-router/tools/discover.js.map +1 -0
  271. package/dist/mcp-router/tools/execute.d.ts +43 -0
  272. package/dist/mcp-router/tools/execute.d.ts.map +1 -0
  273. package/dist/mcp-router/tools/execute.js +144 -0
  274. package/dist/mcp-router/tools/execute.js.map +1 -0
  275. package/dist/mcp-router/types.d.ts +62 -0
  276. package/dist/mcp-router/types.d.ts.map +1 -0
  277. package/dist/mcp-router/types.js +6 -0
  278. package/dist/mcp-router/types.js.map +1 -0
  279. package/dist/memory/adaptive-context.d.ts +149 -0
  280. package/dist/memory/adaptive-context.d.ts.map +1 -0
  281. package/dist/memory/adaptive-context.js +1095 -0
  282. package/dist/memory/adaptive-context.js.map +1 -0
  283. package/dist/memory/agent-scoped-memory.d.ts +67 -0
  284. package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
  285. package/dist/memory/agent-scoped-memory.js +126 -0
  286. package/dist/memory/agent-scoped-memory.js.map +1 -0
  287. package/dist/memory/ambiguity-detector.d.ts +54 -0
  288. package/dist/memory/ambiguity-detector.d.ts.map +1 -0
  289. package/dist/memory/ambiguity-detector.js +401 -0
  290. package/dist/memory/ambiguity-detector.js.map +1 -0
  291. package/dist/memory/backends/base.d.ts +18 -0
  292. package/dist/memory/backends/base.d.ts.map +1 -0
  293. package/dist/memory/backends/base.js +2 -0
  294. package/dist/memory/backends/base.js.map +1 -0
  295. package/dist/memory/backends/factory.d.ts +4 -0
  296. package/dist/memory/backends/factory.d.ts.map +1 -0
  297. package/dist/memory/backends/factory.js +53 -0
  298. package/dist/memory/backends/factory.js.map +1 -0
  299. package/dist/memory/backends/github.d.ts +27 -0
  300. package/dist/memory/backends/github.d.ts.map +1 -0
  301. package/dist/memory/backends/github.js +134 -0
  302. package/dist/memory/backends/github.js.map +1 -0
  303. package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
  304. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
  305. package/dist/memory/backends/qdrant-cloud.js +167 -0
  306. package/dist/memory/backends/qdrant-cloud.js.map +1 -0
  307. package/dist/memory/context-compressor.d.ts +116 -0
  308. package/dist/memory/context-compressor.d.ts.map +1 -0
  309. package/dist/memory/context-compressor.js +430 -0
  310. package/dist/memory/context-compressor.js.map +1 -0
  311. package/dist/memory/context-pruner.d.ts +55 -0
  312. package/dist/memory/context-pruner.d.ts.map +1 -0
  313. package/dist/memory/context-pruner.js +85 -0
  314. package/dist/memory/context-pruner.js.map +1 -0
  315. package/dist/memory/correction-propagator.d.ts +44 -0
  316. package/dist/memory/correction-propagator.d.ts.map +1 -0
  317. package/dist/memory/correction-propagator.js +156 -0
  318. package/dist/memory/correction-propagator.js.map +1 -0
  319. package/dist/memory/daily-log.d.ts +67 -0
  320. package/dist/memory/daily-log.d.ts.map +1 -0
  321. package/dist/memory/daily-log.js +143 -0
  322. package/dist/memory/daily-log.js.map +1 -0
  323. package/dist/memory/dynamic-retrieval.d.ts +112 -0
  324. package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
  325. package/dist/memory/dynamic-retrieval.js +908 -0
  326. package/dist/memory/dynamic-retrieval.js.map +1 -0
  327. package/dist/memory/embeddings.d.ts +172 -0
  328. package/dist/memory/embeddings.d.ts.map +1 -0
  329. package/dist/memory/embeddings.js +780 -0
  330. package/dist/memory/embeddings.js.map +1 -0
  331. package/dist/memory/generic-uap-patterns.d.ts +7 -0
  332. package/dist/memory/generic-uap-patterns.d.ts.map +1 -0
  333. package/dist/memory/generic-uap-patterns.js +43 -0
  334. package/dist/memory/generic-uap-patterns.js.map +1 -0
  335. package/dist/memory/hierarchical-memory.d.ts +141 -0
  336. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  337. package/dist/memory/hierarchical-memory.js +485 -0
  338. package/dist/memory/hierarchical-memory.js.map +1 -0
  339. package/dist/memory/knowledge-graph.d.ts +98 -0
  340. package/dist/memory/knowledge-graph.d.ts.map +1 -0
  341. package/dist/memory/knowledge-graph.js +275 -0
  342. package/dist/memory/knowledge-graph.js.map +1 -0
  343. package/dist/memory/memory-consolidator.d.ts +124 -0
  344. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  345. package/dist/memory/memory-consolidator.js +514 -0
  346. package/dist/memory/memory-consolidator.js.map +1 -0
  347. package/dist/memory/memory-maintenance.d.ts +39 -0
  348. package/dist/memory/memory-maintenance.d.ts.map +1 -0
  349. package/dist/memory/memory-maintenance.js +336 -0
  350. package/dist/memory/memory-maintenance.js.map +1 -0
  351. package/dist/memory/model-router.d.ts +105 -0
  352. package/dist/memory/model-router.d.ts.map +1 -0
  353. package/dist/memory/model-router.js +474 -0
  354. package/dist/memory/model-router.js.map +1 -0
  355. package/dist/memory/multi-view-memory.d.ts +134 -0
  356. package/dist/memory/multi-view-memory.d.ts.map +1 -0
  357. package/dist/memory/multi-view-memory.js +430 -0
  358. package/dist/memory/multi-view-memory.js.map +1 -0
  359. package/dist/memory/predictive-memory.d.ts +79 -0
  360. package/dist/memory/predictive-memory.d.ts.map +1 -0
  361. package/dist/memory/predictive-memory.js +294 -0
  362. package/dist/memory/predictive-memory.js.map +1 -0
  363. package/dist/memory/prepopulate.d.ts +76 -0
  364. package/dist/memory/prepopulate.d.ts.map +1 -0
  365. package/dist/memory/prepopulate.js +832 -0
  366. package/dist/memory/prepopulate.js.map +1 -0
  367. package/dist/memory/semantic-compression.d.ts +77 -0
  368. package/dist/memory/semantic-compression.d.ts.map +1 -0
  369. package/dist/memory/semantic-compression.js +359 -0
  370. package/dist/memory/semantic-compression.js.map +1 -0
  371. package/dist/memory/serverless-qdrant.d.ts +102 -0
  372. package/dist/memory/serverless-qdrant.d.ts.map +1 -0
  373. package/dist/memory/serverless-qdrant.js +369 -0
  374. package/dist/memory/serverless-qdrant.js.map +1 -0
  375. package/dist/memory/short-term/factory.d.ts +26 -0
  376. package/dist/memory/short-term/factory.d.ts.map +1 -0
  377. package/dist/memory/short-term/factory.js +28 -0
  378. package/dist/memory/short-term/factory.js.map +1 -0
  379. package/dist/memory/short-term/indexeddb.d.ts +25 -0
  380. package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
  381. package/dist/memory/short-term/indexeddb.js +64 -0
  382. package/dist/memory/short-term/indexeddb.js.map +1 -0
  383. package/dist/memory/short-term/schema.d.ts +6 -0
  384. package/dist/memory/short-term/schema.d.ts.map +1 -0
  385. package/dist/memory/short-term/schema.js +141 -0
  386. package/dist/memory/short-term/schema.js.map +1 -0
  387. package/dist/memory/short-term/sqlite.d.ts +64 -0
  388. package/dist/memory/short-term/sqlite.d.ts.map +1 -0
  389. package/dist/memory/short-term/sqlite.js +274 -0
  390. package/dist/memory/short-term/sqlite.js.map +1 -0
  391. package/dist/memory/speculative-cache.d.ts +111 -0
  392. package/dist/memory/speculative-cache.d.ts.map +1 -0
  393. package/dist/memory/speculative-cache.js +457 -0
  394. package/dist/memory/speculative-cache.js.map +1 -0
  395. package/dist/memory/task-classifier.d.ts +40 -0
  396. package/dist/memory/task-classifier.d.ts.map +1 -0
  397. package/dist/memory/task-classifier.js +342 -0
  398. package/dist/memory/task-classifier.js.map +1 -0
  399. package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
  400. package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
  401. package/dist/memory/terminal-bench-knowledge.js +622 -0
  402. package/dist/memory/terminal-bench-knowledge.js.map +1 -0
  403. package/dist/memory/write-gate.d.ts +39 -0
  404. package/dist/memory/write-gate.d.ts.map +1 -0
  405. package/dist/memory/write-gate.js +190 -0
  406. package/dist/memory/write-gate.js.map +1 -0
  407. package/dist/models/api-client.d.ts +46 -0
  408. package/dist/models/api-client.d.ts.map +1 -0
  409. package/dist/models/api-client.js +182 -0
  410. package/dist/models/api-client.js.map +1 -0
  411. package/dist/models/execution-profiles.d.ts +64 -0
  412. package/dist/models/execution-profiles.d.ts.map +1 -0
  413. package/dist/models/execution-profiles.js +403 -0
  414. package/dist/models/execution-profiles.js.map +1 -0
  415. package/dist/models/executor.d.ts +130 -0
  416. package/dist/models/executor.d.ts.map +1 -0
  417. package/dist/models/executor.js +382 -0
  418. package/dist/models/executor.js.map +1 -0
  419. package/dist/models/index.d.ts +19 -0
  420. package/dist/models/index.d.ts.map +1 -0
  421. package/dist/models/index.js +23 -0
  422. package/dist/models/index.js.map +1 -0
  423. package/dist/models/plan-validator.d.ts +37 -0
  424. package/dist/models/plan-validator.d.ts.map +1 -0
  425. package/dist/models/plan-validator.js +179 -0
  426. package/dist/models/plan-validator.js.map +1 -0
  427. package/dist/models/planner.d.ts +73 -0
  428. package/dist/models/planner.d.ts.map +1 -0
  429. package/dist/models/planner.js +375 -0
  430. package/dist/models/planner.js.map +1 -0
  431. package/dist/models/router.d.ts +96 -0
  432. package/dist/models/router.d.ts.map +1 -0
  433. package/dist/models/router.js +523 -0
  434. package/dist/models/router.js.map +1 -0
  435. package/dist/models/types.d.ts +370 -0
  436. package/dist/models/types.d.ts.map +1 -0
  437. package/dist/models/types.js +232 -0
  438. package/dist/models/types.js.map +1 -0
  439. package/dist/models/unified-router.d.ts +152 -0
  440. package/dist/models/unified-router.d.ts.map +1 -0
  441. package/dist/models/unified-router.js +313 -0
  442. package/dist/models/unified-router.js.map +1 -0
  443. package/dist/policies/convert-policy-to-claude.d.ts +3 -0
  444. package/dist/policies/convert-policy-to-claude.d.ts.map +1 -0
  445. package/dist/policies/convert-policy-to-claude.js +87 -0
  446. package/dist/policies/convert-policy-to-claude.js.map +1 -0
  447. package/dist/policies/database-manager.d.ts +27 -0
  448. package/dist/policies/database-manager.d.ts.map +1 -0
  449. package/dist/policies/database-manager.js +198 -0
  450. package/dist/policies/database-manager.js.map +1 -0
  451. package/dist/policies/enforced-tool-router.d.ts +53 -0
  452. package/dist/policies/enforced-tool-router.d.ts.map +1 -0
  453. package/dist/policies/enforced-tool-router.js +80 -0
  454. package/dist/policies/enforced-tool-router.js.map +1 -0
  455. package/dist/policies/index.d.ts +10 -0
  456. package/dist/policies/index.d.ts.map +1 -0
  457. package/dist/policies/index.js +8 -0
  458. package/dist/policies/index.js.map +1 -0
  459. package/dist/policies/policy-gate.d.ts +59 -0
  460. package/dist/policies/policy-gate.d.ts.map +1 -0
  461. package/dist/policies/policy-gate.js +171 -0
  462. package/dist/policies/policy-gate.js.map +1 -0
  463. package/dist/policies/policy-memory.d.ts +18 -0
  464. package/dist/policies/policy-memory.d.ts.map +1 -0
  465. package/dist/policies/policy-memory.js +126 -0
  466. package/dist/policies/policy-memory.js.map +1 -0
  467. package/dist/policies/policy-tools.d.ts +11 -0
  468. package/dist/policies/policy-tools.d.ts.map +1 -0
  469. package/dist/policies/policy-tools.js +66 -0
  470. package/dist/policies/policy-tools.js.map +1 -0
  471. package/dist/policies/schemas/policy.d.ts +69 -0
  472. package/dist/policies/schemas/policy.d.ts.map +1 -0
  473. package/dist/policies/schemas/policy.js +31 -0
  474. package/dist/policies/schemas/policy.js.map +1 -0
  475. package/dist/tasks/coordination.d.ts +83 -0
  476. package/dist/tasks/coordination.d.ts.map +1 -0
  477. package/dist/tasks/coordination.js +291 -0
  478. package/dist/tasks/coordination.js.map +1 -0
  479. package/dist/tasks/database.d.ts +19 -0
  480. package/dist/tasks/database.d.ts.map +1 -0
  481. package/dist/tasks/database.js +149 -0
  482. package/dist/tasks/database.js.map +1 -0
  483. package/dist/tasks/decoder-gate.d.ts +64 -0
  484. package/dist/tasks/decoder-gate.d.ts.map +1 -0
  485. package/dist/tasks/decoder-gate.js +268 -0
  486. package/dist/tasks/decoder-gate.js.map +1 -0
  487. package/dist/tasks/index.d.ts +6 -0
  488. package/dist/tasks/index.d.ts.map +1 -0
  489. package/dist/tasks/index.js +6 -0
  490. package/dist/tasks/index.js.map +1 -0
  491. package/dist/tasks/service.d.ts +40 -0
  492. package/dist/tasks/service.d.ts.map +1 -0
  493. package/dist/tasks/service.js +671 -0
  494. package/dist/tasks/service.js.map +1 -0
  495. package/dist/tasks/types.d.ts +238 -0
  496. package/dist/tasks/types.d.ts.map +1 -0
  497. package/dist/tasks/types.js +74 -0
  498. package/dist/tasks/types.js.map +1 -0
  499. package/dist/telemetry/index.d.ts +2 -0
  500. package/dist/telemetry/index.d.ts.map +1 -0
  501. package/dist/telemetry/index.js +2 -0
  502. package/dist/telemetry/index.js.map +1 -0
  503. package/dist/telemetry/session-telemetry.d.ts +56 -0
  504. package/dist/telemetry/session-telemetry.d.ts.map +1 -0
  505. package/dist/telemetry/session-telemetry.js +807 -0
  506. package/dist/telemetry/session-telemetry.js.map +1 -0
  507. package/dist/types/analysis.d.ts +82 -0
  508. package/dist/types/analysis.d.ts.map +1 -0
  509. package/dist/types/analysis.js +2 -0
  510. package/dist/types/analysis.js.map +1 -0
  511. package/dist/types/config.d.ts +3324 -0
  512. package/dist/types/config.d.ts.map +1 -0
  513. package/dist/types/config.js +418 -0
  514. package/dist/types/config.js.map +1 -0
  515. package/dist/types/coordination.d.ts +240 -0
  516. package/dist/types/coordination.d.ts.map +1 -0
  517. package/dist/types/coordination.js +43 -0
  518. package/dist/types/coordination.js.map +1 -0
  519. package/dist/types/index.d.ts +4 -0
  520. package/dist/types/index.d.ts.map +1 -0
  521. package/dist/types/index.js +4 -0
  522. package/dist/types/index.js.map +1 -0
  523. package/dist/uap-droids-strict.d.ts +59 -0
  524. package/dist/uap-droids-strict.d.ts.map +1 -0
  525. package/dist/uap-droids-strict.js +200 -0
  526. package/dist/uap-droids-strict.js.map +1 -0
  527. package/dist/utils/config-manager.d.ts +30 -0
  528. package/dist/utils/config-manager.d.ts.map +1 -0
  529. package/dist/utils/config-manager.js +41 -0
  530. package/dist/utils/config-manager.js.map +1 -0
  531. package/dist/utils/fetch-with-retry.d.ts +5 -0
  532. package/dist/utils/fetch-with-retry.d.ts.map +1 -0
  533. package/dist/utils/fetch-with-retry.js +61 -0
  534. package/dist/utils/fetch-with-retry.js.map +1 -0
  535. package/dist/utils/merge-claude-md.d.ts +28 -0
  536. package/dist/utils/merge-claude-md.d.ts.map +1 -0
  537. package/dist/utils/merge-claude-md.js +342 -0
  538. package/dist/utils/merge-claude-md.js.map +1 -0
  539. package/dist/utils/rate-limiter.d.ts +58 -0
  540. package/dist/utils/rate-limiter.d.ts.map +1 -0
  541. package/dist/utils/rate-limiter.js +100 -0
  542. package/dist/utils/rate-limiter.js.map +1 -0
  543. package/dist/utils/string-similarity.d.ts +37 -0
  544. package/dist/utils/string-similarity.d.ts.map +1 -0
  545. package/dist/utils/string-similarity.js +114 -0
  546. package/dist/utils/string-similarity.js.map +1 -0
  547. package/dist/utils/validate-json.d.ts +51 -0
  548. package/dist/utils/validate-json.d.ts.map +1 -0
  549. package/dist/utils/validate-json.js +94 -0
  550. package/dist/utils/validate-json.js.map +1 -0
  551. package/docs/INDEX.md +66 -0
  552. package/docs/architecture/MULTI_MODEL.md +224 -0
  553. package/docs/architecture/SYSTEM_ANALYSIS.md +1117 -0
  554. package/docs/architecture/UAP_COMPLIANCE.md +217 -0
  555. package/docs/architecture/UAP_PROTOCOL.md +339 -0
  556. package/docs/architecture/UAP_STRICT_DROIDS.md +172 -0
  557. package/docs/archive/BALLS_MODE_SELF_ANALYSIS.md +260 -0
  558. package/docs/archive/FAILING_TASKS_SOLUTION_PLAN.md +668 -0
  559. package/docs/archive/JINJA2-SYSTEM-MESSAGE-FIX.md +209 -0
  560. package/docs/archive/NPM-PUBLISH-V0.9.1.md +240 -0
  561. package/docs/archive/OPTIMIZATION_OPTIONS.md +334 -0
  562. package/docs/archive/SETUP_IMPROVEMENTS.md +213 -0
  563. package/docs/archive/UAP_GENERIC_OPTIMIZATION_PLAN.md +270 -0
  564. package/docs/archive/UAP_V103_PATTERN_DESIGN.md +315 -0
  565. package/docs/archive/UAP_V104_COMPLIANCE_DESIGN.md +223 -0
  566. package/docs/archive/changelog/2026-03-10_uap-100-compliance.md +77 -0
  567. package/docs/archive/changelog/2026-03-10_uap-full-system-verification.md +109 -0
  568. package/docs/benchmarks/ACCURACY_ANALYSIS.md +471 -0
  569. package/docs/benchmarks/TOKEN_OPTIMIZATION.md +572 -0
  570. package/docs/benchmarks/VALIDATION_PLAN.md +568 -0
  571. package/docs/benchmarks/VALIDATION_RESULTS.md +161 -0
  572. package/docs/deployment/DEPLOYMENT.md +895 -0
  573. package/docs/deployment/DEPLOYMENT_STRATEGIES.md +518 -0
  574. package/docs/deployment/DEPLOY_BATCHER_ANALYSIS.md +856 -0
  575. package/docs/deployment/DEPLOY_BATCHING.md +273 -0
  576. package/docs/deployment/DEPLOY_BUCKETING_ANALYSIS.md +420 -0
  577. package/docs/deployment/QWEN35_LLAMA_CPP.md +265 -0
  578. package/docs/getting-started/INTEGRATION.md +449 -0
  579. package/docs/getting-started/OVERVIEW.md +344 -0
  580. package/docs/getting-started/SETUP.md +203 -0
  581. package/docs/integrations/MCP_ROUTER_SETUP.md +445 -0
  582. package/docs/integrations/RTK_INTEGRATION.md +468 -0
  583. package/docs/operations/TROUBLESHOOTING.md +660 -0
  584. package/docs/reference/API_REFERENCE.md +903 -0
  585. package/docs/reference/FEATURES.md +472 -0
  586. package/docs/reference/HARNESS-MATRIX.md +318 -0
  587. package/docs/reference/UAP_CLI_REFERENCE.md +600 -0
  588. package/docs/research/BEHAVIORAL_PATTERNS.md +228 -0
  589. package/docs/research/DOMAIN_STRATEGIES.md +316 -0
  590. package/docs/research/MEMORY_SYSTEMS_COMPARISON.md +812 -0
  591. package/docs/research/PATTERN_ANALYSIS_2026-01-18.md +436 -0
  592. package/docs/research/PERFORMANCE_ANALYSIS_2026-01-18.md +209 -0
  593. package/docs/research/PERFORMANCE_TEST_PLAN.md +383 -0
  594. package/docs/research/TERMINAL_BENCH_LEARNINGS.md +217 -0
  595. package/package.json +113 -0
  596. package/scripts/README.md +161 -0
  597. package/templates/CLAUDE.template.md +10 -0
  598. package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
  599. package/templates/CLAUDE_CODING.template.md +127 -0
  600. package/templates/CLAUDE_DROIDS.template.md +109 -0
  601. package/templates/CLAUDE_MEMORY.template.md +131 -0
  602. package/templates/CLAUDE_WORKFLOWS.template.md +139 -0
  603. package/templates/PROJECT.template.md +209 -0
  604. package/templates/SCHEMA.md +57 -0
  605. package/templates/archive/CLAUDE.template.root-v6.md +534 -0
  606. package/templates/archive/CLAUDE.template.v6.md +534 -0
  607. package/templates/hooks/forgecode/pre-compact.sh +68 -0
  608. package/templates/hooks/forgecode/session-start.sh +169 -0
  609. package/templates/hooks/forgecode.plugin.sh +128 -0
  610. package/templates/hooks/pre-compact.sh +74 -0
  611. package/templates/hooks/session-start.sh +366 -0
  612. package/tools/agents/README.md +224 -0
  613. package/tools/agents/UAP/README.md +386 -0
  614. package/tools/agents/UAP/__init__.py +9 -0
  615. package/tools/agents/UAP/cli.py +901 -0
  616. package/tools/agents/UAP/compliance_verify.sh +108 -0
  617. package/tools/agents/UAP/full_verification.sh +126 -0
  618. package/tools/agents/UAP/version.py +32 -0
  619. package/tools/agents/benchmarks/benchmark_memory_systems.py +730 -0
  620. package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
  621. package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
  622. package/tools/agents/config/chat_template.jinja +77 -0
  623. package/tools/agents/config/tool-call-schema.json +19 -0
  624. package/tools/agents/config/tool-call.gbnf +58 -0
  625. package/tools/agents/docker/Dockerfile.python +52 -0
  626. package/tools/agents/docker/Dockerfile.ubuntu +55 -0
  627. package/tools/agents/docker-compose.qdrant.yml +24 -0
  628. package/tools/agents/install-opencode-local.sh.j2 +135 -0
  629. package/tools/agents/migrations/apply.py +256 -0
  630. package/tools/agents/opencode_uap_agent.py +1505 -0
  631. package/tools/agents/plugin/README.md +91 -0
  632. package/tools/agents/plugin/index.ts +46 -0
  633. package/tools/agents/plugin/pre-compact.sh +68 -0
  634. package/tools/agents/plugin/session-start.sh +175 -0
  635. package/tools/agents/plugin/uap-commands.ts +45 -0
  636. package/tools/agents/plugin/uap-droids.ts +54 -0
  637. package/tools/agents/plugin/uap-patterns.ts +54 -0
  638. package/tools/agents/plugin/uap-skills.ts +52 -0
  639. package/tools/agents/plugins/uap-enforce.ts +314 -0
  640. package/tools/agents/scripts/__pycache__/tool_call_wrapper.cpython-313.pyc +0 -0
  641. package/tools/agents/scripts/chat_template_verifier.py +343 -0
  642. package/tools/agents/scripts/fix-qwen-template.js +38 -0
  643. package/tools/agents/scripts/fix_qwen_chat_template.py +316 -0
  644. package/tools/agents/scripts/generate_lora_training_data.py +412 -0
  645. package/tools/agents/scripts/init_qdrant.py +151 -0
  646. package/tools/agents/scripts/memory_migration.py +560 -0
  647. package/tools/agents/scripts/migrate_memory_to_qdrant.py +110 -0
  648. package/tools/agents/scripts/prepare_lora.sh +512 -0
  649. package/tools/agents/scripts/query_memory.py +200 -0
  650. package/tools/agents/scripts/qwen-tool-call-test.js +38 -0
  651. package/tools/agents/scripts/qwen-tool-call-wrapper.js +38 -0
  652. package/tools/agents/scripts/qwen_tool_call_test.py +464 -0
  653. package/tools/agents/scripts/qwen_tool_call_wrapper.py +686 -0
  654. package/tools/agents/scripts/start-services.sh +96 -0
  655. package/tools/agents/scripts/tool-choice-proxy.cjs +296 -0
  656. package/tools/agents/scripts/tool_call_test.py +656 -0
  657. package/tools/agents/scripts/tool_call_wrapper.py +799 -0
  658. package/tools/agents/tests/test_uap_compliance.py +257 -0
  659. package/tools/agents/uap_agent.py +122 -0
  660. package/tools/agents/uap_agent_install.sh +12 -0
@@ -0,0 +1,560 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Memory Migration Tool
4
+
5
+ Provides automated migration between different memory system implementations:
6
+ - SQLite short-term <-> JSON export
7
+ - Qdrant long-term <-> JSON export
8
+ - Qdrant -> Mem0 format
9
+ - Qdrant -> A-MEM format
10
+ - Full backup/restore capabilities
11
+
12
+ Usage:
13
+ # Export all memories to JSON
14
+ python memory_migration.py export all output.json
15
+
16
+ # Export Qdrant to Mem0 format
17
+ python memory_migration.py export qdrant --format mem0 output.json
18
+
19
+ # Backup everything
20
+ python memory_migration.py backup
21
+
22
+ # Restore from backup
23
+ python memory_migration.py restore <backup_id>
24
+
25
+ # Migrate to enhanced schema
26
+ python memory_migration.py upgrade
27
+ """
28
+
29
+ import argparse
30
+ import hashlib
31
+ import json
32
+ import os
33
+ import shutil
34
+ import sqlite3
35
+ import uuid
36
+ from datetime import datetime
37
+ from pathlib import Path
38
+ from typing import Any, Optional
39
+
40
+ try:
41
+ from sentence_transformers import SentenceTransformer
42
+ from qdrant_client import QdrantClient
43
+ from qdrant_client.models import PointStruct
44
+
45
+ QDRANT_AVAILABLE = True
46
+ except ImportError:
47
+ QDRANT_AVAILABLE = False
48
+
49
+
50
+ def get_project_root() -> Path:
51
+ return Path(__file__).parent.parent.parent.parent
52
+
53
+
54
+ def get_data_dir() -> Path:
55
+ return get_project_root() / "tools/agents/data/memory"
56
+
57
+
58
+ def get_backup_dir() -> Path:
59
+ backup_dir = get_data_dir() / "backups"
60
+ backup_dir.mkdir(parents=True, exist_ok=True)
61
+ return backup_dir
62
+
63
+
64
+ class MemoryMigration:
65
+ def __init__(self):
66
+ self.data_dir = get_data_dir()
67
+ self.backup_dir = get_backup_dir()
68
+ self.short_term_db = self.data_dir / "short_term.db"
69
+ self.long_term_json = self.data_dir / "long_term.json"
70
+
71
+ self.qdrant = None
72
+ self.model = None
73
+ if QDRANT_AVAILABLE:
74
+ try:
75
+ self.qdrant = QdrantClient(host="localhost", port=6333)
76
+ self.model = SentenceTransformer("all-MiniLM-L6-v2", device="cpu")
77
+ except Exception:
78
+ pass
79
+
80
+ def export_sqlite(self) -> list[dict]:
81
+ """Export all SQLite memories to list of dicts."""
82
+ if not self.short_term_db.exists():
83
+ return []
84
+
85
+ conn = sqlite3.connect(self.short_term_db)
86
+ conn.row_factory = sqlite3.Row
87
+ cursor = conn.cursor()
88
+
89
+ memories = []
90
+
91
+ # Export main memories table
92
+ cursor.execute("SELECT * FROM memories ORDER BY id")
93
+ for row in cursor.fetchall():
94
+ memories.append(
95
+ {
96
+ "source": "sqlite_memories",
97
+ "id": row["id"],
98
+ "timestamp": row["timestamp"],
99
+ "type": row["type"],
100
+ "content": row["content"],
101
+ }
102
+ )
103
+
104
+ # Export session_memories if exists
105
+ try:
106
+ cursor.execute("SELECT * FROM session_memories ORDER BY id")
107
+ for row in cursor.fetchall():
108
+ memories.append(
109
+ {
110
+ "source": "sqlite_session_memories",
111
+ "id": row["id"],
112
+ "session_id": row["session_id"],
113
+ "timestamp": row["timestamp"],
114
+ "type": row["type"],
115
+ "content": row["content"],
116
+ "context": row["context"],
117
+ "importance": row["importance"],
118
+ }
119
+ )
120
+ except sqlite3.OperationalError:
121
+ pass # Table doesn't exist
122
+
123
+ # Export entities if exists
124
+ try:
125
+ cursor.execute("SELECT * FROM entities ORDER BY id")
126
+ for row in cursor.fetchall():
127
+ memories.append(
128
+ {
129
+ "source": "sqlite_entities",
130
+ "id": row["id"],
131
+ "type": row["type"],
132
+ "name": row["name"],
133
+ "context": row["context"],
134
+ "first_seen": row["first_seen"],
135
+ "last_seen": row["last_seen"],
136
+ "mention_count": row["mention_count"],
137
+ }
138
+ )
139
+ except sqlite3.OperationalError:
140
+ pass
141
+
142
+ # Export relationships if exists
143
+ try:
144
+ cursor.execute("SELECT * FROM relationships ORDER BY id")
145
+ for row in cursor.fetchall():
146
+ memories.append(
147
+ {
148
+ "source": "sqlite_relationships",
149
+ "id": row["id"],
150
+ "source_id": row["source_id"],
151
+ "target_id": row["target_id"],
152
+ "relation": row["relation"],
153
+ "weight": row["weight"],
154
+ "timestamp": row["timestamp"],
155
+ }
156
+ )
157
+ except sqlite3.OperationalError:
158
+ pass
159
+
160
+ conn.close()
161
+ return memories
162
+
163
+ def export_qdrant(self, format: str = "native") -> list[dict]:
164
+ """Export Qdrant memories.
165
+
166
+ Formats:
167
+ - native: Raw Qdrant format
168
+ - mem0: Mem0-compatible format
169
+ - amem: A-MEM compatible format
170
+ """
171
+ if not self.qdrant:
172
+ return []
173
+
174
+ try:
175
+ # Get all points (scroll through collection)
176
+ points = []
177
+ offset = None
178
+
179
+ while True:
180
+ result = self.qdrant.scroll(
181
+ collection_name="agent_memory",
182
+ limit=100,
183
+ offset=offset,
184
+ with_vectors=True,
185
+ with_payload=True,
186
+ )
187
+
188
+ if not result[0]:
189
+ break
190
+
191
+ points.extend(result[0])
192
+ offset = result[1]
193
+
194
+ if offset is None:
195
+ break
196
+
197
+ memories = []
198
+ for point in points:
199
+ if format == "native":
200
+ memories.append(
201
+ {
202
+ "source": "qdrant",
203
+ "id": str(point.id),
204
+ "vector": point.vector,
205
+ "payload": point.payload,
206
+ }
207
+ )
208
+ elif format == "mem0":
209
+ # Mem0 format
210
+ memories.append(
211
+ {
212
+ "id": str(point.id),
213
+ "memory": point.payload.get("content", ""),
214
+ "hash": hashlib.md5(
215
+ point.payload.get("content", "").encode()
216
+ ).hexdigest(),
217
+ "metadata": {
218
+ "type": point.payload.get("type"),
219
+ "tags": point.payload.get("tags", []),
220
+ "importance": point.payload.get("importance", 5),
221
+ "created_at": point.payload.get("timestamp"),
222
+ "updated_at": point.payload.get("timestamp"),
223
+ },
224
+ "user_id": "claude_agent",
225
+ }
226
+ )
227
+ elif format == "amem":
228
+ # A-MEM format (Zettelkasten-style)
229
+ memories.append(
230
+ {
231
+ "id": str(point.id),
232
+ "title": point.payload.get("content", "")[:50] + "...",
233
+ "content": point.payload.get("content", ""),
234
+ "keywords": point.payload.get("tags", []),
235
+ "tags": point.payload.get("tags", []),
236
+ "links": [], # Would need to be computed from similarity
237
+ "created": point.payload.get("timestamp"),
238
+ "modified": point.payload.get("timestamp"),
239
+ "importance": point.payload.get("importance", 5),
240
+ }
241
+ )
242
+
243
+ return memories
244
+
245
+ except Exception as e:
246
+ print(f"Error exporting Qdrant: {e}")
247
+ return []
248
+
249
+ def export_all(self, output_path: str, format: str = "native"):
250
+ """Export all memories to a JSON file."""
251
+ export = {
252
+ "metadata": {
253
+ "exported_at": datetime.utcnow().isoformat() + "Z",
254
+ "format": format,
255
+ "version": "2.0",
256
+ },
257
+ "sqlite": self.export_sqlite(),
258
+ "qdrant": self.export_qdrant(format),
259
+ }
260
+
261
+ with open(output_path, "w") as f:
262
+ json.dump(export, f, indent=2, default=str)
263
+
264
+ print(f"Exported {len(export['sqlite'])} SQLite entries")
265
+ print(f"Exported {len(export['qdrant'])} Qdrant entries")
266
+ print(f"Saved to: {output_path}")
267
+
268
+ def backup(self) -> str:
269
+ """Create a full backup of all memory stores."""
270
+ backup_id = datetime.utcnow().strftime("%Y%m%d_%H%M%S")
271
+ backup_path = self.backup_dir / backup_id
272
+ backup_path.mkdir(parents=True, exist_ok=True)
273
+
274
+ # Backup SQLite
275
+ if self.short_term_db.exists():
276
+ shutil.copy2(self.short_term_db, backup_path / "short_term.db")
277
+ print(f"Backed up SQLite: {self.short_term_db}")
278
+
279
+ # Backup long_term.json
280
+ if self.long_term_json.exists():
281
+ shutil.copy2(self.long_term_json, backup_path / "long_term.json")
282
+ print(f"Backed up JSON: {self.long_term_json}")
283
+
284
+ # Export Qdrant to JSON
285
+ qdrant_export = self.export_qdrant("native")
286
+ with open(backup_path / "qdrant_export.json", "w") as f:
287
+ json.dump(qdrant_export, f, indent=2, default=str)
288
+ print(f"Backed up Qdrant: {len(qdrant_export)} entries")
289
+
290
+ # Create manifest
291
+ manifest = {
292
+ "backup_id": backup_id,
293
+ "created_at": datetime.utcnow().isoformat() + "Z",
294
+ "files": os.listdir(backup_path),
295
+ "sqlite_entries": len(self.export_sqlite()),
296
+ "qdrant_entries": len(qdrant_export),
297
+ }
298
+ with open(backup_path / "manifest.json", "w") as f:
299
+ json.dump(manifest, f, indent=2)
300
+
301
+ print(f"\nBackup complete: {backup_path}")
302
+ print(f"Backup ID: {backup_id}")
303
+ return backup_id
304
+
305
+ def restore(self, backup_id: str):
306
+ """Restore from a backup."""
307
+ backup_path = self.backup_dir / backup_id
308
+
309
+ if not backup_path.exists():
310
+ print(f"Backup not found: {backup_id}")
311
+ print(f"Available backups: {os.listdir(self.backup_dir)}")
312
+ return False
313
+
314
+ # Confirm
315
+ manifest_path = backup_path / "manifest.json"
316
+ if manifest_path.exists():
317
+ with open(manifest_path) as f:
318
+ manifest = json.load(f)
319
+ print(f"Backup from: {manifest['created_at']}")
320
+ print(f"SQLite entries: {manifest['sqlite_entries']}")
321
+ print(f"Qdrant entries: {manifest['qdrant_entries']}")
322
+
323
+ # Restore SQLite
324
+ sqlite_backup = backup_path / "short_term.db"
325
+ if sqlite_backup.exists():
326
+ # Backup current before overwriting
327
+ if self.short_term_db.exists():
328
+ shutil.copy2(
329
+ self.short_term_db,
330
+ self.short_term_db.with_suffix(".db.pre_restore"),
331
+ )
332
+ shutil.copy2(sqlite_backup, self.short_term_db)
333
+ print(f"Restored SQLite: {self.short_term_db}")
334
+
335
+ # Restore long_term.json
336
+ json_backup = backup_path / "long_term.json"
337
+ if json_backup.exists():
338
+ if self.long_term_json.exists():
339
+ shutil.copy2(
340
+ self.long_term_json,
341
+ self.long_term_json.with_suffix(".json.pre_restore"),
342
+ )
343
+ shutil.copy2(json_backup, self.long_term_json)
344
+ print(f"Restored JSON: {self.long_term_json}")
345
+
346
+ # Restore Qdrant
347
+ qdrant_backup = backup_path / "qdrant_export.json"
348
+ if qdrant_backup.exists() and self.qdrant and self.model:
349
+ with open(qdrant_backup) as f:
350
+ qdrant_data = json.load(f)
351
+
352
+ if qdrant_data:
353
+ # Recreate collection
354
+ try:
355
+ self.qdrant.delete_collection("agent_memory")
356
+ except Exception:
357
+ pass
358
+
359
+ from qdrant_client.models import VectorParams, Distance
360
+
361
+ self.qdrant.create_collection(
362
+ collection_name="agent_memory",
363
+ vectors_config=VectorParams(size=384, distance=Distance.COSINE),
364
+ )
365
+
366
+ # Restore points
367
+ points = []
368
+ for entry in qdrant_data:
369
+ points.append(
370
+ PointStruct(
371
+ id=entry["id"],
372
+ vector=entry["vector"],
373
+ payload=entry["payload"],
374
+ )
375
+ )
376
+
377
+ if points:
378
+ self.qdrant.upsert(collection_name="claude_memory", points=points)
379
+ print(f"Restored Qdrant: {len(points)} entries")
380
+
381
+ print("\nRestore complete!")
382
+ return True
383
+
384
+ def upgrade_schema(self):
385
+ """Upgrade SQLite schema to enhanced v2.0 with session memory and graph tables."""
386
+ if not self.short_term_db.exists():
387
+ print("No SQLite database to upgrade")
388
+ return
389
+
390
+ conn = sqlite3.connect(self.short_term_db)
391
+ cursor = conn.cursor()
392
+
393
+ # Check current schema
394
+ cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
395
+ existing_tables = {row[0] for row in cursor.fetchall()}
396
+
397
+ # Add session_memories table if not exists
398
+ if "session_memories" not in existing_tables:
399
+ print("Creating session_memories table...")
400
+ cursor.execute("""
401
+ CREATE TABLE session_memories (
402
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
403
+ session_id TEXT NOT NULL,
404
+ timestamp TEXT NOT NULL,
405
+ type TEXT NOT NULL CHECK(type IN ('summary', 'decision', 'entity', 'error')),
406
+ content TEXT NOT NULL,
407
+ context TEXT,
408
+ importance INTEGER DEFAULT 5
409
+ )
410
+ """)
411
+ cursor.execute(
412
+ "CREATE INDEX idx_session_memories_session ON session_memories(session_id)"
413
+ )
414
+ cursor.execute(
415
+ "CREATE INDEX idx_session_memories_type ON session_memories(type)"
416
+ )
417
+
418
+ # Add entities table if not exists
419
+ if "entities" not in existing_tables:
420
+ print("Creating entities table...")
421
+ cursor.execute("""
422
+ CREATE TABLE entities (
423
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
424
+ type TEXT NOT NULL CHECK(type IN ('file', 'function', 'concept', 'error', 'config', 'service')),
425
+ name TEXT NOT NULL,
426
+ context TEXT,
427
+ first_seen TEXT NOT NULL,
428
+ last_seen TEXT NOT NULL,
429
+ mention_count INTEGER DEFAULT 1,
430
+ UNIQUE(type, name)
431
+ )
432
+ """)
433
+ cursor.execute("CREATE INDEX idx_entities_type ON entities(type)")
434
+ cursor.execute("CREATE INDEX idx_entities_name ON entities(name)")
435
+
436
+ # Add relationships table if not exists
437
+ if "relationships" not in existing_tables:
438
+ print("Creating relationships table...")
439
+ cursor.execute("""
440
+ CREATE TABLE relationships (
441
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
442
+ source_id INTEGER NOT NULL,
443
+ target_id INTEGER NOT NULL,
444
+ relation TEXT NOT NULL CHECK(relation IN ('depends_on', 'fixes', 'causes', 'related_to', 'contains', 'implements')),
445
+ weight REAL DEFAULT 1.0,
446
+ timestamp TEXT NOT NULL,
447
+ FOREIGN KEY (source_id) REFERENCES entities(id),
448
+ FOREIGN KEY (target_id) REFERENCES entities(id)
449
+ )
450
+ """)
451
+ cursor.execute(
452
+ "CREATE INDEX idx_relationships_source ON relationships(source_id)"
453
+ )
454
+ cursor.execute(
455
+ "CREATE INDEX idx_relationships_target ON relationships(target_id)"
456
+ )
457
+ cursor.execute(
458
+ "CREATE INDEX idx_relationships_relation ON relationships(relation)"
459
+ )
460
+
461
+ conn.commit()
462
+ conn.close()
463
+
464
+ print("Schema upgrade complete!")
465
+ print("\nNew tables added:")
466
+ print(" - session_memories: For session-scoped context")
467
+ print(" - entities: For knowledge graph nodes")
468
+ print(" - relationships: For knowledge graph edges")
469
+
470
+ def list_backups(self):
471
+ """List all available backups."""
472
+ backups = []
473
+ for backup_id in sorted(os.listdir(self.backup_dir)):
474
+ backup_path = self.backup_dir / backup_id
475
+ manifest_path = backup_path / "manifest.json"
476
+
477
+ if manifest_path.exists():
478
+ with open(manifest_path) as f:
479
+ manifest = json.load(f)
480
+ backups.append(
481
+ {
482
+ "id": backup_id,
483
+ "created_at": manifest.get("created_at"),
484
+ "sqlite_entries": manifest.get("sqlite_entries", 0),
485
+ "qdrant_entries": manifest.get("qdrant_entries", 0),
486
+ }
487
+ )
488
+
489
+ if not backups:
490
+ print("No backups found")
491
+ return
492
+
493
+ print("\nAvailable Backups:")
494
+ print("-" * 60)
495
+ for b in backups:
496
+ print(
497
+ f" {b['id']} | {b['created_at']} | SQLite: {b['sqlite_entries']} Qdrant: {b['qdrant_entries']}"
498
+ )
499
+
500
+
501
+ def main():
502
+ parser = argparse.ArgumentParser(description="Memory Migration Tool")
503
+ subparsers = parser.add_subparsers(dest="command", help="Command")
504
+
505
+ # Export command
506
+ export_parser = subparsers.add_parser("export", help="Export memories")
507
+ export_parser.add_argument("source", choices=["all", "sqlite", "qdrant"])
508
+ export_parser.add_argument("output", help="Output file path")
509
+ export_parser.add_argument(
510
+ "--format", choices=["native", "mem0", "amem"], default="native"
511
+ )
512
+
513
+ # Backup command
514
+ subparsers.add_parser("backup", help="Create full backup")
515
+
516
+ # Restore command
517
+ restore_parser = subparsers.add_parser("restore", help="Restore from backup")
518
+ restore_parser.add_argument("backup_id", help="Backup ID to restore")
519
+
520
+ # List command
521
+ subparsers.add_parser("list", help="List available backups")
522
+
523
+ # Upgrade command
524
+ subparsers.add_parser("upgrade", help="Upgrade schema to v2.0")
525
+
526
+ args = parser.parse_args()
527
+ migration = MemoryMigration()
528
+
529
+ if args.command == "export":
530
+ if args.source == "all":
531
+ migration.export_all(args.output, args.format)
532
+ elif args.source == "sqlite":
533
+ data = migration.export_sqlite()
534
+ with open(args.output, "w") as f:
535
+ json.dump(data, f, indent=2)
536
+ print(f"Exported {len(data)} SQLite entries to {args.output}")
537
+ elif args.source == "qdrant":
538
+ data = migration.export_qdrant(args.format)
539
+ with open(args.output, "w") as f:
540
+ json.dump(data, f, indent=2, default=str)
541
+ print(f"Exported {len(data)} Qdrant entries to {args.output}")
542
+
543
+ elif args.command == "backup":
544
+ migration.backup()
545
+
546
+ elif args.command == "restore":
547
+ migration.restore(args.backup_id)
548
+
549
+ elif args.command == "list":
550
+ migration.list_backups()
551
+
552
+ elif args.command == "upgrade":
553
+ migration.upgrade_schema()
554
+
555
+ else:
556
+ parser.print_help()
557
+
558
+
559
+ if __name__ == "__main__":
560
+ main()
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Migrate long-term memory from JSON to Qdrant vector database.
4
+
5
+ This script:
6
+ 1. Reads memories from agents/data/memory/long_term.json
7
+ 2. Generates embeddings using sentence-transformers
8
+ 3. Upserts vectors to Qdrant collection 'agent_memory'
9
+
10
+ Requirements:
11
+ pip install sentence-transformers qdrant-client
12
+
13
+ Usage:
14
+ python agents/scripts/migrate_memory_to_qdrant.py
15
+ """
16
+
17
+ import json
18
+ import uuid
19
+ from pathlib import Path
20
+
21
+ try:
22
+ from sentence_transformers import SentenceTransformer
23
+ from qdrant_client import QdrantClient
24
+ from qdrant_client.models import PointStruct
25
+ except ImportError as e:
26
+ print(f"Error: Missing required packages: {e}")
27
+ print("\nPlease install dependencies:")
28
+ print(" cd /home/cogtek/dev/miller-tech/universal-agent-memory")
29
+ print(" agents/.venv/bin/pip install sentence-transformers qdrant-client")
30
+ print("\nThen run:")
31
+ print(" agents/.venv/bin/python agents/scripts/migrate_memory_to_qdrant.py")
32
+ exit(1)
33
+
34
+
35
+ def main():
36
+ # Configuration
37
+ QDRANT_HOST = "localhost"
38
+ QDRANT_PORT = 6333
39
+ COLLECTION_NAME = "agent_memory"
40
+ MODEL_NAME = "all-MiniLM-L6-v2" # 384 dimensions, fast and effective
41
+
42
+ project_root = Path(__file__).parent.parent.parent
43
+ memory_file = project_root / "agents/data/memory/long_term.json"
44
+
45
+ print(f"Loading memories from {memory_file}")
46
+ with open(memory_file) as f:
47
+ data = json.load(f)
48
+
49
+ memories = data.get("memories", [])
50
+ print(f"Found {len(memories)} memories to migrate")
51
+
52
+ # Initialize embedding model
53
+ print(f"Loading embedding model: {MODEL_NAME}")
54
+ model = SentenceTransformer(MODEL_NAME, device="cpu")
55
+
56
+ # Initialize Qdrant client
57
+ print(f"Connecting to Qdrant at {QDRANT_HOST}:{QDRANT_PORT}")
58
+ client = QdrantClient(host=QDRANT_HOST, port=QDRANT_PORT)
59
+
60
+ # Prepare points for upsert
61
+ points = []
62
+ for memory in memories:
63
+ # Generate embedding from content
64
+ content = memory["content"]
65
+ embedding = model.encode(content).tolist()
66
+
67
+ # Create point with payload
68
+ point = PointStruct(
69
+ id=str(uuid.uuid4()),
70
+ vector=embedding,
71
+ payload={
72
+ "original_id": memory["id"],
73
+ "type": memory["type"],
74
+ "tags": memory.get("tags", []),
75
+ "importance": memory.get("importance", 5),
76
+ "content": content,
77
+ "timestamp": memory.get("timestamp", ""),
78
+ },
79
+ )
80
+ points.append(point)
81
+ print(f" Encoded: [{memory['type']}] {memory['id']}")
82
+
83
+ # Upsert to Qdrant
84
+ print(f"\nUpserting {len(points)} points to collection '{COLLECTION_NAME}'")
85
+ client.upsert(collection_name=COLLECTION_NAME, points=points)
86
+
87
+ # Verify
88
+ collection_info = client.get_collection(COLLECTION_NAME)
89
+ print(
90
+ f"\nCollection '{COLLECTION_NAME}' now has {collection_info.points_count} points"
91
+ )
92
+
93
+ # Test search
94
+ print("\nTesting semantic search for 'Redis caching'...")
95
+ test_query = "Redis caching performance"
96
+ test_embedding = model.encode(test_query).tolist()
97
+ results = client.query_points(
98
+ collection_name=COLLECTION_NAME, query=test_embedding, limit=3
99
+ )
100
+
101
+ print("Top 3 results:")
102
+ for i, point in enumerate(results.points, 1):
103
+ print(f" {i}. [{point.payload['type']}] Score: {point.score:.3f}")
104
+ print(f" {point.payload['content'][:80]}...")
105
+
106
+ print("\nMigration complete!")
107
+
108
+
109
+ if __name__ == "__main__":
110
+ main()