@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,718 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { CoordinationDatabase, getDefaultCoordinationDbPath } from './database.js';
5
+ import { execFile as execFileCb } from 'child_process';
6
+ const DEFAULT_DYNAMIC_WINDOWS = {
7
+ commit: 30000, // 30s - allows squashing multiple commits
8
+ push: 5000, // 5s - fast for PR creation
9
+ merge: 10000, // 10s - moderate safety
10
+ workflow: 5000, // 5s - fast workflow triggers
11
+ deploy: 60000, // 60s - safety buffer for deployments
12
+ };
13
+ export class DeployBatcher {
14
+ db;
15
+ dynamicWindows;
16
+ maxBatchSize;
17
+ dryRun;
18
+ parallelExecution;
19
+ maxParallelActions;
20
+ execTimeoutMs;
21
+ constructor(config = {}) {
22
+ const dbPath = config.dbPath || getDefaultCoordinationDbPath();
23
+ this.db = CoordinationDatabase.getInstance(dbPath).getDatabase();
24
+ // Support both legacy single window and new dynamic windows
25
+ if (config.dynamicWindows) {
26
+ this.dynamicWindows = { ...DEFAULT_DYNAMIC_WINDOWS, ...config.dynamicWindows };
27
+ }
28
+ else if (config.batchWindowMs) {
29
+ // Legacy mode: use single window for all types
30
+ this.dynamicWindows = {
31
+ commit: config.batchWindowMs,
32
+ push: config.batchWindowMs,
33
+ merge: config.batchWindowMs,
34
+ workflow: config.batchWindowMs,
35
+ deploy: config.batchWindowMs,
36
+ };
37
+ }
38
+ else {
39
+ this.dynamicWindows = DEFAULT_DYNAMIC_WINDOWS;
40
+ }
41
+ this.maxBatchSize = config.maxBatchSize || 20;
42
+ this.dryRun = config.dryRun || false;
43
+ this.parallelExecution = config.parallelExecution ?? true;
44
+ this.maxParallelActions = config.maxParallelActions || 5;
45
+ this.execTimeoutMs = config.execTimeoutMs ?? 300000; // Default: 300s (5 minutes)
46
+ // Validate window values
47
+ const windowEntries = Object.entries(this.dynamicWindows);
48
+ for (const [key, value] of windowEntries) {
49
+ if (value < 1000) {
50
+ console.warn(`DeployBatcher: window '${key}' is ${value}ms, which is below the minimum recommended 1000ms`);
51
+ }
52
+ if (value > 300000) {
53
+ console.warn(`DeployBatcher: window '${key}' is ${value}ms, which exceeds the maximum recommended 300000ms`);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Get the batch window for a specific action type.
59
+ */
60
+ getBatchWindow(actionType) {
61
+ return this.dynamicWindows[actionType] || DEFAULT_DYNAMIC_WINDOWS.commit;
62
+ }
63
+ /**
64
+ * Update batch windows dynamically (useful for urgent operations).
65
+ */
66
+ setUrgentMode(urgent) {
67
+ if (urgent) {
68
+ // Reduce all windows to minimum for urgent operations
69
+ this.dynamicWindows = {
70
+ commit: 2000,
71
+ push: 1000,
72
+ merge: 2000,
73
+ workflow: 1000,
74
+ deploy: 5000,
75
+ };
76
+ }
77
+ else {
78
+ // Restore defaults
79
+ this.dynamicWindows = { ...DEFAULT_DYNAMIC_WINDOWS };
80
+ }
81
+ }
82
+ /**
83
+ * Queue a deploy action with type-specific batching delay.
84
+ */
85
+ async queue(agentId, actionType, target, payload, options = {}) {
86
+ const now = new Date().toISOString();
87
+ // Use type-specific window, or immediate for urgent
88
+ const windowMs = options.urgent ? 1000 : this.getBatchWindow(actionType);
89
+ const executeAfter = new Date(Date.now() + windowMs).toISOString();
90
+ // Check for similar pending action to merge
91
+ const existing = this.findSimilarAction(actionType, target);
92
+ if (existing && this.canMerge(existing, { actionType, target, payload })) {
93
+ await this.mergeActions(existing.id, payload);
94
+ return existing.id;
95
+ }
96
+ const stmt = this.db.prepare(`
97
+ INSERT INTO deploy_queue (agent_id, action_type, target, payload, status, queued_at, execute_after, priority, dependencies)
98
+ VALUES (?, ?, ?, ?, 'pending', ?, ?, ?, ?)
99
+ `);
100
+ const result = stmt.run(agentId, actionType, target, payload ? JSON.stringify(payload) : null, now, executeAfter, options.priority || 5, options.dependencies ? JSON.stringify(options.dependencies) : null);
101
+ return result.lastInsertRowid;
102
+ }
103
+ /**
104
+ * Queue multiple actions atomically with optimized windows.
105
+ */
106
+ async queueBulk(agentId, actions) {
107
+ const ids = [];
108
+ const transaction = this.db.transaction(() => {
109
+ for (const action of actions) {
110
+ const id = this.queueSync(agentId, action.actionType, action.target, action.payload, {
111
+ priority: action.priority,
112
+ });
113
+ ids.push(id);
114
+ }
115
+ });
116
+ transaction();
117
+ return ids;
118
+ }
119
+ /**
120
+ * Synchronous queue for use in transactions.
121
+ */
122
+ queueSync(agentId, actionType, target, payload, options = {}) {
123
+ const now = new Date().toISOString();
124
+ const windowMs = this.getBatchWindow(actionType);
125
+ const executeAfter = new Date(Date.now() + windowMs).toISOString();
126
+ const stmt = this.db.prepare(`
127
+ INSERT INTO deploy_queue (agent_id, action_type, target, payload, status, queued_at, execute_after, priority, dependencies)
128
+ VALUES (?, ?, ?, ?, 'pending', ?, ?, ?, ?)
129
+ `);
130
+ const result = stmt.run(agentId, actionType, target, payload ? JSON.stringify(payload) : null, now, executeAfter, options.priority || 5, options.dependencies ? JSON.stringify(options.dependencies) : null);
131
+ return result.lastInsertRowid;
132
+ }
133
+ findSimilarAction(actionType, target) {
134
+ const stmt = this.db.prepare(`
135
+ SELECT id, agent_id as agentId, action_type as actionType, target, payload,
136
+ status, batch_id as batchId, queued_at as queuedAt,
137
+ execute_after as executeAfter, priority, dependencies
138
+ FROM deploy_queue
139
+ WHERE action_type = ? AND target = ? AND status = 'pending'
140
+ ORDER BY queued_at DESC
141
+ LIMIT 1
142
+ `);
143
+ const row = stmt.get(actionType, target);
144
+ if (!row)
145
+ return null;
146
+ return {
147
+ ...row,
148
+ payload: row.payload ? JSON.parse(row.payload) : undefined,
149
+ dependencies: row.dependencies ? JSON.parse(row.dependencies) : undefined,
150
+ };
151
+ }
152
+ canMerge(existing, incoming) {
153
+ if (existing.actionType !== incoming.actionType || existing.target !== incoming.target) {
154
+ return false;
155
+ }
156
+ // Commits can be squashed
157
+ if (existing.actionType === 'commit') {
158
+ return true;
159
+ }
160
+ // Pushes to same branch can be merged
161
+ if (existing.actionType === 'push') {
162
+ return true;
163
+ }
164
+ // Workflow triggers can be deduplicated
165
+ if (existing.actionType === 'workflow') {
166
+ return true;
167
+ }
168
+ return false;
169
+ }
170
+ async mergeActions(existingId, newPayload) {
171
+ if (!newPayload)
172
+ return;
173
+ const stmt = this.db.prepare(`
174
+ SELECT payload FROM deploy_queue WHERE id = ?
175
+ `);
176
+ const row = stmt.get(existingId);
177
+ if (!row)
178
+ return;
179
+ const existingPayload = row.payload ? JSON.parse(row.payload) : {};
180
+ const merged = this.mergePayloads(existingPayload, newPayload);
181
+ const updateStmt = this.db.prepare(`
182
+ UPDATE deploy_queue SET payload = ? WHERE id = ?
183
+ `);
184
+ updateStmt.run(JSON.stringify(merged), existingId);
185
+ }
186
+ mergePayloads(existing, incoming) {
187
+ const result = { ...existing };
188
+ for (const [key, value] of Object.entries(incoming)) {
189
+ if (Array.isArray(value) && Array.isArray(result[key])) {
190
+ result[key] = [...result[key], ...value];
191
+ }
192
+ else if (key === 'messages' && Array.isArray(value)) {
193
+ result[key] = [...(result[key] || []), ...value];
194
+ }
195
+ else {
196
+ result[key] = value;
197
+ }
198
+ }
199
+ return result;
200
+ }
201
+ /**
202
+ * Create a batch from ready actions.
203
+ */
204
+ async createBatch() {
205
+ const now = new Date().toISOString();
206
+ const stmt = this.db.prepare(`
207
+ SELECT id, agent_id as agentId, action_type as actionType, target, payload,
208
+ status, batch_id as batchId, queued_at as queuedAt,
209
+ execute_after as executeAfter, priority, dependencies
210
+ FROM deploy_queue
211
+ WHERE status = 'pending' AND execute_after <= ?
212
+ ORDER BY priority DESC, queued_at ASC
213
+ LIMIT ?
214
+ `);
215
+ const rows = stmt.all(now, this.maxBatchSize);
216
+ if (rows.length === 0)
217
+ return null;
218
+ const actions = rows.map((row) => ({
219
+ ...row,
220
+ payload: row.payload ? JSON.parse(row.payload) : undefined,
221
+ dependencies: row.dependencies ? JSON.parse(row.dependencies) : undefined,
222
+ }));
223
+ const grouped = this.groupByTarget(actions);
224
+ const squashed = this.squashActions(grouped);
225
+ const batchId = randomUUID();
226
+ const updateStmt = this.db.prepare(`
227
+ UPDATE deploy_queue SET status = 'batched', batch_id = ? WHERE id = ?
228
+ `);
229
+ const transaction = this.db.transaction(() => {
230
+ for (const action of actions) {
231
+ updateStmt.run(batchId, action.id);
232
+ }
233
+ this.db
234
+ .prepare(`
235
+ INSERT INTO deploy_batches (id, created_at, status)
236
+ VALUES (?, ?, 'pending')
237
+ `)
238
+ .run(batchId, now);
239
+ });
240
+ transaction();
241
+ return {
242
+ id: batchId,
243
+ actions: squashed,
244
+ createdAt: now,
245
+ status: 'pending',
246
+ };
247
+ }
248
+ groupByTarget(actions) {
249
+ const groups = new Map();
250
+ for (const action of actions) {
251
+ const key = `${action.actionType}:${action.target}`;
252
+ const existing = groups.get(key) || [];
253
+ existing.push(action);
254
+ groups.set(key, existing);
255
+ }
256
+ return groups;
257
+ }
258
+ squashActions(grouped) {
259
+ const result = [];
260
+ for (const [, actions] of grouped) {
261
+ if (actions.length === 0)
262
+ continue;
263
+ if (actions.length === 1) {
264
+ result.push(actions[0]);
265
+ continue;
266
+ }
267
+ const first = actions[0];
268
+ if (first.actionType === 'commit') {
269
+ const squashed = this.squashCommits(actions);
270
+ result.push(squashed);
271
+ continue;
272
+ }
273
+ if (first.actionType === 'push') {
274
+ result.push(first);
275
+ continue;
276
+ }
277
+ if (first.actionType === 'workflow') {
278
+ result.push(first);
279
+ continue;
280
+ }
281
+ result.push(...actions);
282
+ }
283
+ return result;
284
+ }
285
+ squashCommits(commits) {
286
+ const messages = [];
287
+ const allFiles = [];
288
+ for (const commit of commits) {
289
+ const payload = commit.payload;
290
+ if (payload?.message) {
291
+ messages.push(payload.message);
292
+ }
293
+ if (payload?.files) {
294
+ allFiles.push(...payload.files);
295
+ }
296
+ }
297
+ const squashedMessage = messages.length === 1
298
+ ? messages[0]
299
+ : `Squashed ${messages.length} commits:\n\n${messages.map((m, i) => `${i + 1}. ${m}`).join('\n')}`;
300
+ return {
301
+ ...commits[0],
302
+ payload: {
303
+ message: squashedMessage,
304
+ files: [...new Set(allFiles)],
305
+ squashedFrom: commits.map((c) => c.id),
306
+ },
307
+ };
308
+ }
309
+ /**
310
+ * Execute a batch with optional parallel execution for independent actions.
311
+ */
312
+ async executeBatch(batchId) {
313
+ const startTime = Date.now();
314
+ const errors = [];
315
+ let executed = 0;
316
+ let failed = 0;
317
+ const stmt = this.db.prepare(`
318
+ SELECT id, agent_id as agentId, action_type as actionType, target, payload,
319
+ status, batch_id as batchId, queued_at as queuedAt,
320
+ execute_after as executeAfter, priority, dependencies
321
+ FROM deploy_queue
322
+ WHERE batch_id = ? AND status = 'batched'
323
+ ORDER BY priority DESC, queued_at ASC
324
+ `);
325
+ const rows = stmt.all(batchId);
326
+ const actions = rows.map((row) => ({
327
+ ...row,
328
+ payload: row.payload ? JSON.parse(row.payload) : undefined,
329
+ dependencies: row.dependencies ? JSON.parse(row.dependencies) : undefined,
330
+ }));
331
+ this.db
332
+ .prepare(`
333
+ UPDATE deploy_batches SET status = 'executing', executed_at = ? WHERE id = ?
334
+ `)
335
+ .run(new Date().toISOString(), batchId);
336
+ if (this.parallelExecution) {
337
+ // Group independent actions for parallel execution
338
+ const { sequential, parallel } = this.categorizeActions(actions);
339
+ // Execute parallel-safe actions concurrently
340
+ if (parallel.length > 0) {
341
+ const parallelResults = await this.executeParallel(parallel);
342
+ for (const result of parallelResults) {
343
+ if (result.success) {
344
+ executed++;
345
+ }
346
+ else {
347
+ failed++;
348
+ if (result.error)
349
+ errors.push(result.error);
350
+ }
351
+ }
352
+ }
353
+ // Execute sequential actions in order
354
+ for (const action of sequential) {
355
+ try {
356
+ await this.executeAction(action);
357
+ this.updateActionStatus(action.id, 'completed');
358
+ executed++;
359
+ }
360
+ catch (error) {
361
+ const errorMsg = error instanceof Error ? error.message : String(error);
362
+ errors.push(`Action ${action.id} (${action.actionType}): ${errorMsg}`);
363
+ this.updateActionStatus(action.id, 'failed');
364
+ failed++;
365
+ }
366
+ }
367
+ }
368
+ else {
369
+ // Original sequential execution
370
+ for (const action of actions) {
371
+ try {
372
+ await this.executeAction(action);
373
+ this.updateActionStatus(action.id, 'completed');
374
+ executed++;
375
+ }
376
+ catch (error) {
377
+ const errorMsg = error instanceof Error ? error.message : String(error);
378
+ errors.push(`Action ${action.id} (${action.actionType}): ${errorMsg}`);
379
+ this.updateActionStatus(action.id, 'failed');
380
+ failed++;
381
+ }
382
+ }
383
+ }
384
+ const batchStatus = failed === 0 ? 'completed' : executed > 0 ? 'completed' : 'failed';
385
+ this.db
386
+ .prepare(`
387
+ UPDATE deploy_batches SET status = ?, result = ? WHERE id = ?
388
+ `)
389
+ .run(batchStatus, JSON.stringify({ executed, failed, errors }), batchId);
390
+ return {
391
+ batchId,
392
+ success: failed === 0,
393
+ executedActions: executed,
394
+ failedActions: failed,
395
+ errors: errors.length > 0 ? errors : undefined,
396
+ duration: Date.now() - startTime,
397
+ };
398
+ }
399
+ /**
400
+ * Categorize actions into parallel-safe and sequential groups.
401
+ */
402
+ categorizeActions(actions) {
403
+ const sequential = [];
404
+ const parallel = [];
405
+ // Actions that can run in parallel (no state dependencies)
406
+ const parallelSafeTypes = ['workflow'];
407
+ // Actions that must be sequential (state-dependent)
408
+ const sequentialTypes = ['commit', 'push', 'merge', 'deploy'];
409
+ for (const action of actions) {
410
+ if (parallelSafeTypes.includes(action.actionType)) {
411
+ parallel.push(action);
412
+ }
413
+ else if (sequentialTypes.includes(action.actionType)) {
414
+ sequential.push(action);
415
+ }
416
+ else {
417
+ // Unknown types go sequential for safety
418
+ sequential.push(action);
419
+ }
420
+ }
421
+ return { sequential, parallel };
422
+ }
423
+ /**
424
+ * Execute actions in parallel with concurrency limit.
425
+ */
426
+ async executeParallel(actions) {
427
+ const results = [];
428
+ // Process in chunks to respect maxParallelActions
429
+ for (let i = 0; i < actions.length; i += this.maxParallelActions) {
430
+ const chunk = actions.slice(i, i + this.maxParallelActions);
431
+ const chunkResults = await Promise.allSettled(chunk.map(async (action) => {
432
+ await this.executeAction(action);
433
+ return action;
434
+ }));
435
+ for (let j = 0; j < chunkResults.length; j++) {
436
+ const result = chunkResults[j];
437
+ const action = chunk[j];
438
+ if (result.status === 'fulfilled') {
439
+ this.updateActionStatus(action.id, 'completed');
440
+ results.push({ action, success: true });
441
+ }
442
+ else {
443
+ const errorMsg = result.reason instanceof Error ? result.reason.message : String(result.reason);
444
+ this.updateActionStatus(action.id, 'failed');
445
+ results.push({
446
+ action,
447
+ success: false,
448
+ error: `Action ${action.id} (${action.actionType}): ${errorMsg}`,
449
+ });
450
+ }
451
+ }
452
+ }
453
+ return results;
454
+ }
455
+ async executeAction(action) {
456
+ if (this.dryRun) {
457
+ console.log(`[DRY RUN] Would execute: ${action.actionType} on ${action.target}`);
458
+ return;
459
+ }
460
+ const payload = action.payload || {};
461
+ switch (action.actionType) {
462
+ case 'commit':
463
+ await this.executeCommit(action.target, payload);
464
+ break;
465
+ case 'push':
466
+ await this.executePush(action.target, payload);
467
+ break;
468
+ case 'merge':
469
+ await this.executeMerge(action.target, payload);
470
+ break;
471
+ case 'workflow':
472
+ await this.executeWorkflow(action.target, payload);
473
+ break;
474
+ case 'deploy':
475
+ await this.executeDeploy(action.target, payload);
476
+ break;
477
+ default:
478
+ throw new Error(`Unknown action type: ${action.actionType}`);
479
+ }
480
+ }
481
+ async executeCommit(_target, payload) {
482
+ const message = payload.message || 'Automated commit';
483
+ const files = payload.files || [];
484
+ if (files.length > 0) {
485
+ await this.execFileWithTimeout('git', ['add', ...files]);
486
+ }
487
+ else {
488
+ await this.execFileWithTimeout('git', ['add', '-A']);
489
+ }
490
+ await this.execFileWithTimeout('git', ['commit', '-m', message]);
491
+ }
492
+ async executePush(target, payload) {
493
+ const remote = payload.remote || 'origin';
494
+ const force = payload.force || false;
495
+ const args = ['push'];
496
+ if (force)
497
+ args.push('--force-with-lease');
498
+ args.push(remote, target);
499
+ await this.execFileWithTimeout('git', args);
500
+ }
501
+ async executeMerge(_target, payload) {
502
+ const source = payload.source || 'HEAD';
503
+ const squash = payload.squash || false;
504
+ const args = ['merge'];
505
+ if (squash)
506
+ args.push('--squash');
507
+ args.push(source);
508
+ await this.execFileWithTimeout('git', args);
509
+ }
510
+ async executeWorkflow(target, payload) {
511
+ const workflow = target;
512
+ const ref = payload.ref || 'main';
513
+ const inputs = payload.inputs;
514
+ const args = ['workflow', 'run', workflow, '--ref', ref];
515
+ if (inputs) {
516
+ for (const [key, value] of Object.entries(inputs)) {
517
+ args.push('-f', `${key}=${value}`);
518
+ }
519
+ }
520
+ await this.execFileWithTimeout('gh', args);
521
+ }
522
+ async executeDeploy(target, payload) {
523
+ const environment = target;
524
+ const command = payload.command || `deploy-${environment}`;
525
+ // Split command into executable and args to avoid shell injection.
526
+ // Only simple single-command strings are supported; complex shell
527
+ // pipelines should be wrapped in a script file.
528
+ const parts = command.split(/\s+/);
529
+ const [executable, ...args] = parts;
530
+ await this.execFileWithTimeout(executable, args);
531
+ }
532
+ updateActionStatus(actionId, status) {
533
+ const stmt = this.db.prepare(`
534
+ UPDATE deploy_queue SET status = ? WHERE id = ?
535
+ `);
536
+ stmt.run(status, actionId);
537
+ }
538
+ getBatch(batchId) {
539
+ const batchStmt = this.db.prepare(`
540
+ SELECT id, created_at as createdAt, executed_at as executedAt, status, result
541
+ FROM deploy_batches
542
+ WHERE id = ?
543
+ `);
544
+ const batchRow = batchStmt.get(batchId);
545
+ if (!batchRow)
546
+ return null;
547
+ const actionsStmt = this.db.prepare(`
548
+ SELECT id, agent_id as agentId, action_type as actionType, target, payload,
549
+ status, batch_id as batchId, queued_at as queuedAt,
550
+ execute_after as executeAfter, priority, dependencies
551
+ FROM deploy_queue
552
+ WHERE batch_id = ?
553
+ `);
554
+ const actionRows = actionsStmt.all(batchId);
555
+ const actions = actionRows.map((row) => ({
556
+ ...row,
557
+ payload: row.payload ? JSON.parse(row.payload) : undefined,
558
+ dependencies: row.dependencies ? JSON.parse(row.dependencies) : undefined,
559
+ }));
560
+ return {
561
+ id: batchId,
562
+ actions,
563
+ createdAt: batchRow.createdAt,
564
+ status: batchRow.status,
565
+ };
566
+ }
567
+ getPendingBatches() {
568
+ const stmt = this.db.prepare(`
569
+ SELECT id FROM deploy_batches WHERE status = 'pending'
570
+ `);
571
+ const rows = stmt.all();
572
+ return rows.map((row) => this.getBatch(row.id)).filter((b) => b !== null);
573
+ }
574
+ /**
575
+ * Force flush all pending deploys immediately.
576
+ */
577
+ async flushAll() {
578
+ const results = [];
579
+ let batch = await this.createBatch();
580
+ while (batch) {
581
+ const result = await this.executeBatch(batch.id);
582
+ results.push(result);
583
+ batch = await this.createBatch();
584
+ }
585
+ return results;
586
+ }
587
+ /**
588
+ * Get current batch window configuration.
589
+ */
590
+ getWindowConfig() {
591
+ return { ...this.dynamicWindows };
592
+ }
593
+ /**
594
+ * Load configuration from `.uap.json` in the project root,
595
+ * falling back to environment variables for each window.
596
+ */
597
+ static loadFromConfig(projectRoot) {
598
+ const configPath = join(projectRoot, '.uap.json');
599
+ let fileWindows = {};
600
+ if (existsSync(configPath)) {
601
+ try {
602
+ const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
603
+ if (raw?.deploy?.batchWindows) {
604
+ const bw = raw.deploy.batchWindows;
605
+ if (typeof bw.commit === 'number')
606
+ fileWindows.commit = bw.commit;
607
+ if (typeof bw.push === 'number')
608
+ fileWindows.push = bw.push;
609
+ if (typeof bw.merge === 'number')
610
+ fileWindows.merge = bw.merge;
611
+ if (typeof bw.workflow === 'number')
612
+ fileWindows.workflow = bw.workflow;
613
+ if (typeof bw.deploy === 'number')
614
+ fileWindows.deploy = bw.deploy;
615
+ }
616
+ }
617
+ catch {
618
+ // Ignore malformed config; fall through to env vars
619
+ }
620
+ }
621
+ // Environment variable fallbacks for any windows not set by the file
622
+ const envMap = {
623
+ commit: 'UAP_DEPLOY_COMMIT_WINDOW',
624
+ push: 'UAP_DEPLOY_PUSH_WINDOW',
625
+ merge: 'UAP_DEPLOY_MERGE_WINDOW',
626
+ workflow: 'UAP_DEPLOY_WORKFLOW_WINDOW',
627
+ deploy: 'UAP_DEPLOY_DEPLOY_WINDOW',
628
+ };
629
+ for (const [key, envVar] of Object.entries(envMap)) {
630
+ if (fileWindows[key] === undefined) {
631
+ const envVal = process.env[envVar];
632
+ if (envVal !== undefined) {
633
+ const parsed = parseInt(envVal, 10);
634
+ if (!isNaN(parsed)) {
635
+ fileWindows[key] = parsed;
636
+ }
637
+ }
638
+ }
639
+ }
640
+ const dynamicWindows = Object.keys(fileWindows).length > 0 ? fileWindows : undefined;
641
+ return { dynamicWindows };
642
+ }
643
+ /**
644
+ * Save the current dynamic window configuration into `.uap.json`
645
+ * under the `deploy.batchWindows` section, preserving existing content.
646
+ */
647
+ saveConfig(projectRoot) {
648
+ const configPath = join(projectRoot, '.uap.json');
649
+ let config = {};
650
+ if (existsSync(configPath)) {
651
+ try {
652
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
653
+ }
654
+ catch {
655
+ // Start fresh if the file is malformed
656
+ config = {};
657
+ }
658
+ }
659
+ if (!config.deploy || typeof config.deploy !== 'object') {
660
+ config.deploy = {};
661
+ }
662
+ config.deploy.batchWindows = { ...this.dynamicWindows };
663
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
664
+ }
665
+ /**
666
+ * Return a DeployBatcherConfig for a named profile.
667
+ */
668
+ static fromProfile(profile) {
669
+ switch (profile) {
670
+ case 'fast':
671
+ return {
672
+ dynamicWindows: {
673
+ commit: 5000,
674
+ push: 1000,
675
+ merge: 2000,
676
+ workflow: 1000,
677
+ deploy: 10000,
678
+ },
679
+ };
680
+ case 'safe':
681
+ return {
682
+ dynamicWindows: {
683
+ commit: 60000,
684
+ push: 10000,
685
+ merge: 30000,
686
+ workflow: 10000,
687
+ deploy: 120000,
688
+ },
689
+ };
690
+ case 'default':
691
+ return {
692
+ dynamicWindows: { ...DEFAULT_DYNAMIC_WINDOWS },
693
+ };
694
+ }
695
+ }
696
+ /**
697
+ * Execute a command with timeout protection.
698
+ * Prevents hung processes from blocking the batch pipeline.
699
+ */
700
+ execFileWithTimeout(command, args, options = {}) {
701
+ const timeoutMs = options.timeout ?? this.execTimeoutMs;
702
+ return new Promise((resolve, reject) => {
703
+ const timer = setTimeout(() => {
704
+ reject(new Error(`Command '${command}' timed out after ${timeoutMs}ms`));
705
+ }, timeoutMs);
706
+ execFileCb(command, args, { cwd: options.cwd, maxBuffer: 10 * 1024 * 1024 }, (error, _stdout, stderr) => {
707
+ clearTimeout(timer);
708
+ if (error) {
709
+ reject(new Error(`${command} ${args.join(' ')} failed: ${stderr || error.message}`));
710
+ }
711
+ else {
712
+ resolve();
713
+ }
714
+ });
715
+ });
716
+ }
717
+ }
718
+ //# sourceMappingURL=deploy-batcher.js.map