@poetic-ai/poetic 1.42.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 (782) hide show
  1. package/.github/SECURITY.md +47 -0
  2. package/.nvmrc +1 -0
  3. package/.poetic/README.md +37 -0
  4. package/.poetic/providers/catalog.json +12051 -0
  5. package/.poetic/providers/pricing.json +1272 -0
  6. package/.poetic/providers/registry.json +3369 -0
  7. package/CHANGELOG.md +552 -0
  8. package/CODE_OF_CONDUCT.md +40 -0
  9. package/CONTRIBUTING.md +23 -0
  10. package/INSTALL.md +454 -0
  11. package/LICENSE +21 -0
  12. package/README.md +474 -0
  13. package/dist/BasicOptimizationCompetitionRunner-5H5TBYO4.js +153 -0
  14. package/dist/ExecutionTracker-UVONC4C6.js +16 -0
  15. package/dist/OptimizationConfig-7DFY2TST.js +17 -0
  16. package/dist/OptimizationEngine-JIMGP3LY.js +1597 -0
  17. package/dist/PromptStore-U6ZD3ZMQ.js +18 -0
  18. package/dist/actions-LUJPINLJ.js +322 -0
  19. package/dist/agent-ingest-3DJUJ7FU.js +53 -0
  20. package/dist/aggregator-DNCBINFO.js +12 -0
  21. package/dist/ai-judge-5QT5QJVU.js +156 -0
  22. package/dist/allowlist-grounding-RO6HKUFI.js +16 -0
  23. package/dist/allowlist-utils-23V7TJ3G.js +28 -0
  24. package/dist/anchored-turn-service-JULUCUIK.js +489 -0
  25. package/dist/api-transport-4TYTNLTJ.js +1087 -0
  26. package/dist/apply-completion-mode-AW2MOS3R.js +89 -0
  27. package/dist/artifact-migrator-23L45ISD.js +267 -0
  28. package/dist/ask-HWVV6QFR.js +135 -0
  29. package/dist/auth-5KEDKAPP.js +67 -0
  30. package/dist/auth-7TT3JINV.js +78 -0
  31. package/dist/auth-E6XUNZ5M.js +68 -0
  32. package/dist/auth-H3XDZE22.js +134 -0
  33. package/dist/auth-OC4E6633.js +71 -0
  34. package/dist/auth-S4CTX4GQ.js +44 -0
  35. package/dist/auth-YLH3S7EY.js +69 -0
  36. package/dist/auth-liveness-TDDEZY3T.js +46 -0
  37. package/dist/auto-optimizer-VPRWOWGU.js +80 -0
  38. package/dist/autoloop-cleanup-JOGKTLWA.js +109 -0
  39. package/dist/autoloop-evidence-gates-PCDALGVJ.js +38 -0
  40. package/dist/autoloop-gate-policy-Z7FVJVXV.js +175 -0
  41. package/dist/autoloop-helpers-2KTK43GL.js +22 -0
  42. package/dist/autoloop-ledger-W7QO62PX.js +96 -0
  43. package/dist/autoloop-ledger-subscriber-Z5RW5EIE.js +162 -0
  44. package/dist/autoloop-run-defaults-FERGRZGP.js +19 -0
  45. package/dist/autoloop-run-lock-CT2NWSV3.js +197 -0
  46. package/dist/autoloop-success-J2VKKBXQ.js +85 -0
  47. package/dist/autoloop-termination-summary-RN75F422.js +58 -0
  48. package/dist/autoloop-trajectory-XFIEXP5Z.js +282 -0
  49. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  50. package/dist/autonomous-loop-controller-PW4XVFGQ.js +4120 -0
  51. package/dist/backend-P3DAYRP7.js +29 -0
  52. package/dist/background-executor-CBN552V4.js +257 -0
  53. package/dist/backlog-execution-intent-U4XYPTV6.js +15 -0
  54. package/dist/backup-active-store-5WXG6SXT.js +17 -0
  55. package/dist/backup-telemetry-db-XGLXAA3N.js +254 -0
  56. package/dist/basic-competition-master-VCSBJVRN.js +344 -0
  57. package/dist/branch-archive-manager-RP6FP3ZC.js +254 -0
  58. package/dist/branch-cleanup-manager-RSHAI7YR.js +20 -0
  59. package/dist/build-gate-YHGRB4QB.js +71 -0
  60. package/dist/change-summary-WY7J5TOX.js +33 -0
  61. package/dist/chunk-23A26CSN.js +123 -0
  62. package/dist/chunk-27UTJD3M.js +265 -0
  63. package/dist/chunk-2A5CILN3.js +310 -0
  64. package/dist/chunk-2AQUWJPW.js +225 -0
  65. package/dist/chunk-2BZ53J6J.js +2344 -0
  66. package/dist/chunk-2DY5KNVM.js +276 -0
  67. package/dist/chunk-2EIA4RBE.js +659 -0
  68. package/dist/chunk-2IUXIGQD.js +1064 -0
  69. package/dist/chunk-2N42MS2Z.js +2193 -0
  70. package/dist/chunk-2QJ3H3L7.js +42 -0
  71. package/dist/chunk-2QLYTVYX.js +791 -0
  72. package/dist/chunk-2VSQMRCB.js +18 -0
  73. package/dist/chunk-2XQXYBM2.js +130 -0
  74. package/dist/chunk-2YFUIER7.js +426 -0
  75. package/dist/chunk-34CNP2HB.js +148 -0
  76. package/dist/chunk-35P3W3JX.js +456 -0
  77. package/dist/chunk-36PEBZAF.js +18 -0
  78. package/dist/chunk-3AOKYKA7.js +22 -0
  79. package/dist/chunk-3BCUNHKF.js +475 -0
  80. package/dist/chunk-3FLXLLB7.js +26 -0
  81. package/dist/chunk-3FOZ2VHV.js +100 -0
  82. package/dist/chunk-3G6FZCRF.js +106 -0
  83. package/dist/chunk-3M57DADF.js +44 -0
  84. package/dist/chunk-3S62LLWJ.js +543 -0
  85. package/dist/chunk-3ZPQLGV7.js +2904 -0
  86. package/dist/chunk-44N5WZZH.js +45 -0
  87. package/dist/chunk-45FPSA3B.js +125 -0
  88. package/dist/chunk-4BJ3O4RQ.js +929 -0
  89. package/dist/chunk-4BOP7T6L.js +2321 -0
  90. package/dist/chunk-4BTDUT2S.js +42 -0
  91. package/dist/chunk-4CSS7WVI.js +143 -0
  92. package/dist/chunk-4CUY7AFY.js +247 -0
  93. package/dist/chunk-4GSN5O5J.js +62 -0
  94. package/dist/chunk-4HN6DF7V.js +1027 -0
  95. package/dist/chunk-4IAPOG5V.js +415 -0
  96. package/dist/chunk-4IYIZQWV.js +48 -0
  97. package/dist/chunk-4NXPXE62.js +84 -0
  98. package/dist/chunk-4RCCF5BR.js +712 -0
  99. package/dist/chunk-4V7NAQ4R.js +19527 -0
  100. package/dist/chunk-4VJITV4P.js +445 -0
  101. package/dist/chunk-4YX7J6QL.js +1859 -0
  102. package/dist/chunk-527OBWQB.js +338 -0
  103. package/dist/chunk-5D4A7E3D.js +448 -0
  104. package/dist/chunk-5DLKYTQX.js +4003 -0
  105. package/dist/chunk-5EERLVZB.js +139 -0
  106. package/dist/chunk-5H72XE4H.js +256 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5LAMRH4X.js +969 -0
  109. package/dist/chunk-5LTN43AS.js +1972 -0
  110. package/dist/chunk-5RBHQYDB.js +2206 -0
  111. package/dist/chunk-5WCQRDRB.js +588 -0
  112. package/dist/chunk-5WRLK5KW.js +700 -0
  113. package/dist/chunk-5ZCXC23G.js +595 -0
  114. package/dist/chunk-6BM72ZMG.js +31 -0
  115. package/dist/chunk-6EDAJH2I.js +68 -0
  116. package/dist/chunk-6EQKFDBH.js +457 -0
  117. package/dist/chunk-6MFRHTRI.js +115 -0
  118. package/dist/chunk-6TZJRKNW.js +321 -0
  119. package/dist/chunk-6V7HGQFZ.js +20 -0
  120. package/dist/chunk-6VWVO2TU.js +3746 -0
  121. package/dist/chunk-6Y5TWI7H.js +146 -0
  122. package/dist/chunk-6Y5U7UFY.js +91 -0
  123. package/dist/chunk-6ZLAK3XG.js +14 -0
  124. package/dist/chunk-72XCRQED.js +34 -0
  125. package/dist/chunk-72YTZMAM.js +589 -0
  126. package/dist/chunk-73BBJOKA.js +263 -0
  127. package/dist/chunk-73NCTWKL.js +188 -0
  128. package/dist/chunk-77I6G4CO.js +1 -0
  129. package/dist/chunk-7DHRDWFS.js +3104 -0
  130. package/dist/chunk-7DNSNKJV.js +78 -0
  131. package/dist/chunk-7FMJVYBS.js +307 -0
  132. package/dist/chunk-7GDRQBQC.js +419 -0
  133. package/dist/chunk-7GPCEFUV.js +270 -0
  134. package/dist/chunk-7IL4A2PP.js +948 -0
  135. package/dist/chunk-7MMLMXO6.js +3679 -0
  136. package/dist/chunk-7QCZSLBH.js +1 -0
  137. package/dist/chunk-7R2WLDOS.js +62 -0
  138. package/dist/chunk-7T7RUJI7.js +949 -0
  139. package/dist/chunk-A2WKSVX7.js +43 -0
  140. package/dist/chunk-A3YGID55.js +133 -0
  141. package/dist/chunk-A722DEVA.js +14 -0
  142. package/dist/chunk-ACDIT7OP.js +1376 -0
  143. package/dist/chunk-ACKIPAOJ.js +302 -0
  144. package/dist/chunk-APPNGGN7.js +365 -0
  145. package/dist/chunk-APV6MK5E.js +137 -0
  146. package/dist/chunk-ASEP3M2W.js +968 -0
  147. package/dist/chunk-AT4TNPWW.js +2931 -0
  148. package/dist/chunk-ATVKCSGT.js +250 -0
  149. package/dist/chunk-AURFMVCD.js +899 -0
  150. package/dist/chunk-AX6GWE7V.js +47 -0
  151. package/dist/chunk-AY5EWJPF.js +385 -0
  152. package/dist/chunk-BAV2HJXS.js +194 -0
  153. package/dist/chunk-BBHRN366.js +89 -0
  154. package/dist/chunk-BBPSTTPA.js +1004 -0
  155. package/dist/chunk-BDATUDDJ.js +992 -0
  156. package/dist/chunk-BKE5PG5L.js +20414 -0
  157. package/dist/chunk-BLPHWMDK.js +797 -0
  158. package/dist/chunk-BSE4R6XD.js +322 -0
  159. package/dist/chunk-BXGMAU4A.js +396 -0
  160. package/dist/chunk-BXI4NXL3.js +507 -0
  161. package/dist/chunk-BZU2O43F.js +1125 -0
  162. package/dist/chunk-C3L6YQ7P.js +147 -0
  163. package/dist/chunk-C57KJOUQ.js +121 -0
  164. package/dist/chunk-CCV7BPSY.js +118 -0
  165. package/dist/chunk-CD7ISXA4.js +826 -0
  166. package/dist/chunk-CE5OZBYY.js +21 -0
  167. package/dist/chunk-CFBIG37O.js +154 -0
  168. package/dist/chunk-CJC6GZ46.js +457 -0
  169. package/dist/chunk-CKCDGXIV.js +408 -0
  170. package/dist/chunk-CKNX3TTP.js +10338 -0
  171. package/dist/chunk-CLKSETWE.js +10 -0
  172. package/dist/chunk-CP7H3HSP.js +1552 -0
  173. package/dist/chunk-CPLEWXNZ.js +66 -0
  174. package/dist/chunk-CQM3A35X.js +844 -0
  175. package/dist/chunk-CS6P76D3.js +103 -0
  176. package/dist/chunk-CTLUBNCW.js +622 -0
  177. package/dist/chunk-CUSRN6RJ.js +632 -0
  178. package/dist/chunk-D5EP5D2W.js +26 -0
  179. package/dist/chunk-D5RYINO7.js +412 -0
  180. package/dist/chunk-DBFS4HMH.js +751 -0
  181. package/dist/chunk-DC4ZYMXJ.js +115 -0
  182. package/dist/chunk-DCBZP442.js +9243 -0
  183. package/dist/chunk-DCYF7EKG.js +26 -0
  184. package/dist/chunk-DDMAFNUK.js +5351 -0
  185. package/dist/chunk-DF5SLDE4.js +966 -0
  186. package/dist/chunk-DJFW7SMX.js +348 -0
  187. package/dist/chunk-DQFLLBJW.js +121 -0
  188. package/dist/chunk-DSFM56OA.js +1203 -0
  189. package/dist/chunk-DTY4APYV.js +218 -0
  190. package/dist/chunk-DXH5JBRS.js +437 -0
  191. package/dist/chunk-E3NTPHEO.js +194 -0
  192. package/dist/chunk-E74LUIID.js +302 -0
  193. package/dist/chunk-EI57M5BI.js +194 -0
  194. package/dist/chunk-EJ4ZAWLV.js +305 -0
  195. package/dist/chunk-EJGCZGUF.js +1483 -0
  196. package/dist/chunk-EK2U3YEG.js +486 -0
  197. package/dist/chunk-ELMFYNV7.js +109 -0
  198. package/dist/chunk-ENRGKNR5.js +25 -0
  199. package/dist/chunk-ETYDXCK7.js +679 -0
  200. package/dist/chunk-EYRH3W74.js +239 -0
  201. package/dist/chunk-F23DIWNN.js +1024 -0
  202. package/dist/chunk-F5JO7HAS.js +94 -0
  203. package/dist/chunk-F7ER6ANO.js +174 -0
  204. package/dist/chunk-FATUVIIN.js +374 -0
  205. package/dist/chunk-FC23CTXV.js +322 -0
  206. package/dist/chunk-FD4ERYEG.js +22 -0
  207. package/dist/chunk-FH7WOJAE.js +79 -0
  208. package/dist/chunk-FHOWVDF5.js +1342 -0
  209. package/dist/chunk-FKAUPHMR.js +96 -0
  210. package/dist/chunk-FONNFJXA.js +137 -0
  211. package/dist/chunk-FQ7FSZRW.js +75 -0
  212. package/dist/chunk-FRG57FPM.js +240 -0
  213. package/dist/chunk-FUVP64ER.js +31 -0
  214. package/dist/chunk-FYOILAN5.js +6818 -0
  215. package/dist/chunk-G35UYQ6Z.js +69 -0
  216. package/dist/chunk-G36W2T2S.js +1143 -0
  217. package/dist/chunk-G3L2L5XZ.js +49 -0
  218. package/dist/chunk-G4THLFV3.js +148 -0
  219. package/dist/chunk-GAFJEYLK.js +29 -0
  220. package/dist/chunk-GFGYB2ZU.js +1689 -0
  221. package/dist/chunk-GG6KJYW6.js +85 -0
  222. package/dist/chunk-GHHFDU2U.js +55 -0
  223. package/dist/chunk-GHTZSQB7.js +57 -0
  224. package/dist/chunk-GK37ILCX.js +1231 -0
  225. package/dist/chunk-GKN3HMN4.js +2809 -0
  226. package/dist/chunk-GNVDBVJP.js +156 -0
  227. package/dist/chunk-GPEL3FBM.js +924 -0
  228. package/dist/chunk-GPSNGPZS.js +1604 -0
  229. package/dist/chunk-GSGD5E4C.js +30 -0
  230. package/dist/chunk-GSUQJJXQ.js +331 -0
  231. package/dist/chunk-GSV226X6.js +110 -0
  232. package/dist/chunk-H2AYQIHW.js +224 -0
  233. package/dist/chunk-H66DXFS5.js +1374 -0
  234. package/dist/chunk-H6G7QRMQ.js +35 -0
  235. package/dist/chunk-H7JAGHZT.js +59 -0
  236. package/dist/chunk-H7ZEFECA.js +316 -0
  237. package/dist/chunk-HAC6EHZZ.js +79 -0
  238. package/dist/chunk-HIO33P3G.js +19 -0
  239. package/dist/chunk-HMVQIPH3.js +547 -0
  240. package/dist/chunk-HOYBYAOA.js +257 -0
  241. package/dist/chunk-HX5P3CSP.js +1784 -0
  242. package/dist/chunk-I46EG2XQ.js +65 -0
  243. package/dist/chunk-I4NPDSCB.js +279 -0
  244. package/dist/chunk-I5WRT7ZR.js +514 -0
  245. package/dist/chunk-IC7I6YIJ.js +301 -0
  246. package/dist/chunk-IDCSOZVN.js +78 -0
  247. package/dist/chunk-IFCBYECK.js +112 -0
  248. package/dist/chunk-IFZCPEY2.js +66 -0
  249. package/dist/chunk-IKFP2KUR.js +48 -0
  250. package/dist/chunk-IRFBN336.js +878 -0
  251. package/dist/chunk-IUXNGKA6.js +152 -0
  252. package/dist/chunk-IV2RVAN7.js +1356 -0
  253. package/dist/chunk-IZYIQQ7X.js +53 -0
  254. package/dist/chunk-J3UUR7DE.js +210 -0
  255. package/dist/chunk-J54VUAY2.js +566 -0
  256. package/dist/chunk-J62KPGII.js +464 -0
  257. package/dist/chunk-J6P3FWWW.js +130 -0
  258. package/dist/chunk-JKBHJQMT.js +434 -0
  259. package/dist/chunk-JLS65NUQ.js +14 -0
  260. package/dist/chunk-JOSYEJKY.js +141 -0
  261. package/dist/chunk-JPKSXKNB.js +94 -0
  262. package/dist/chunk-JQNJB2BB.js +2440 -0
  263. package/dist/chunk-JRVNSWSQ.js +2626 -0
  264. package/dist/chunk-JSWMRQYG.js +28 -0
  265. package/dist/chunk-JZKNBBIB.js +152 -0
  266. package/dist/chunk-K54Y7MLK.js +160 -0
  267. package/dist/chunk-K65546RE.js +183 -0
  268. package/dist/chunk-KM3F7SYE.js +702 -0
  269. package/dist/chunk-KNDYMVWN.js +102 -0
  270. package/dist/chunk-KNT72VR6.js +132 -0
  271. package/dist/chunk-KP6YILMU.js +482 -0
  272. package/dist/chunk-KQEBSK3T.js +274 -0
  273. package/dist/chunk-KT6VHSPF.js +84 -0
  274. package/dist/chunk-KTMW65UX.js +14 -0
  275. package/dist/chunk-KZ5CJVBP.js +1813 -0
  276. package/dist/chunk-L4427KOE.js +26 -0
  277. package/dist/chunk-L6OM4A22.js +189 -0
  278. package/dist/chunk-L7E6XCRA.js +1042 -0
  279. package/dist/chunk-L7JZLXQL.js +173 -0
  280. package/dist/chunk-LAMKBTXX.js +40 -0
  281. package/dist/chunk-LDCF2MKN.js +132 -0
  282. package/dist/chunk-LEIIWPWQ.js +78 -0
  283. package/dist/chunk-LFTQVYBB.js +31 -0
  284. package/dist/chunk-LG3PDRTR.js +2872 -0
  285. package/dist/chunk-LGHII5ET.js +23 -0
  286. package/dist/chunk-LH5QY22X.js +1205 -0
  287. package/dist/chunk-LIVJ6266.js +438 -0
  288. package/dist/chunk-LKRAR3IH.js +276 -0
  289. package/dist/chunk-LO23NABI.js +3063 -0
  290. package/dist/chunk-LO3X5NLS.js +326 -0
  291. package/dist/chunk-LPITVM7M.js +339 -0
  292. package/dist/chunk-LR5IJIGV.js +810 -0
  293. package/dist/chunk-LRGMHROI.js +79 -0
  294. package/dist/chunk-LUVKFFWR.js +315 -0
  295. package/dist/chunk-LWCBNGH6.js +35 -0
  296. package/dist/chunk-LWTN3WRV.js +260 -0
  297. package/dist/chunk-M3HQYKQX.js +308 -0
  298. package/dist/chunk-M6GVSPEH.js +1016 -0
  299. package/dist/chunk-MF5HP6XV.js +221 -0
  300. package/dist/chunk-MHLCBZJB.js +328 -0
  301. package/dist/chunk-MN6PL4AN.js +120 -0
  302. package/dist/chunk-MOEY65Z6.js +5678 -0
  303. package/dist/chunk-MQ4WA34C.js +206 -0
  304. package/dist/chunk-MWHF5V7U.js +223 -0
  305. package/dist/chunk-MWHLBPNU.js +211 -0
  306. package/dist/chunk-MWK5UZQ3.js +1068 -0
  307. package/dist/chunk-MYLH2S4G.js +64 -0
  308. package/dist/chunk-MZ5WYKNA.js +28 -0
  309. package/dist/chunk-N4VTRA7K.js +131 -0
  310. package/dist/chunk-N5DX4JAK.js +12 -0
  311. package/dist/chunk-N65O4XTH.js +5011 -0
  312. package/dist/chunk-NEQUQHOX.js +223 -0
  313. package/dist/chunk-NGK6PEOG.js +25 -0
  314. package/dist/chunk-NJVD4PWE.js +1033 -0
  315. package/dist/chunk-NM6PMYY4.js +768 -0
  316. package/dist/chunk-NN4PJDHP.js +708 -0
  317. package/dist/chunk-NP2V3L7K.js +226 -0
  318. package/dist/chunk-NRLY536M.js +260 -0
  319. package/dist/chunk-NRNE225N.js +1270 -0
  320. package/dist/chunk-NS2K2GTP.js +605 -0
  321. package/dist/chunk-NS33V3IM.js +51 -0
  322. package/dist/chunk-NSHASMZZ.js +71 -0
  323. package/dist/chunk-NWOYOA6H.js +378 -0
  324. package/dist/chunk-NWRUSEXG.js +322 -0
  325. package/dist/chunk-NZGDAWIP.js +1905 -0
  326. package/dist/chunk-O47UOKU3.js +395 -0
  327. package/dist/chunk-O4G2W3ST.js +9831 -0
  328. package/dist/chunk-O6V4PNLO.js +63 -0
  329. package/dist/chunk-OA4GPILI.js +624 -0
  330. package/dist/chunk-OGMSYL6J.js +227 -0
  331. package/dist/chunk-OIS7J26S.js +319 -0
  332. package/dist/chunk-OMX5VL43.js +79 -0
  333. package/dist/chunk-ON3G73BU.js +264 -0
  334. package/dist/chunk-OPYFYTWQ.js +220 -0
  335. package/dist/chunk-OQ6K46CK.js +1734 -0
  336. package/dist/chunk-OYZYO7TV.js +47 -0
  337. package/dist/chunk-OZ4REHIN.js +4386 -0
  338. package/dist/chunk-P47VN5F4.js +282 -0
  339. package/dist/chunk-P5I4X7A7.js +353 -0
  340. package/dist/chunk-P6VQROCO.js +594 -0
  341. package/dist/chunk-P7CQGPLS.js +30 -0
  342. package/dist/chunk-PCAGC5MR.js +1763 -0
  343. package/dist/chunk-PFTQBXS6.js +5181 -0
  344. package/dist/chunk-PGSPX4SU.js +15 -0
  345. package/dist/chunk-PIKLF7BM.js +432 -0
  346. package/dist/chunk-PJWJ3SAV.js +22 -0
  347. package/dist/chunk-PKIFMV72.js +100 -0
  348. package/dist/chunk-PL37JDNA.js +189 -0
  349. package/dist/chunk-PTH5E5XO.js +195 -0
  350. package/dist/chunk-PW6AXLQC.js +4128 -0
  351. package/dist/chunk-PYITM4N2.js +79 -0
  352. package/dist/chunk-PZ5AY32C.js +10 -0
  353. package/dist/chunk-Q3RO7N35.js +45 -0
  354. package/dist/chunk-Q3WIC6GQ.js +2670 -0
  355. package/dist/chunk-Q5XIXSHX.js +271 -0
  356. package/dist/chunk-QGJDMEOV.js +34 -0
  357. package/dist/chunk-QNOB37UH.js +58 -0
  358. package/dist/chunk-QOCOVLUH.js +462 -0
  359. package/dist/chunk-QTCJ5CC5.js +172 -0
  360. package/dist/chunk-QVFV5IP2.js +232 -0
  361. package/dist/chunk-QVZMFDYG.js +29 -0
  362. package/dist/chunk-R35PEUKH.js +511 -0
  363. package/dist/chunk-R4UWBC35.js +200 -0
  364. package/dist/chunk-R6MLCREW.js +44 -0
  365. package/dist/chunk-R6W23LKN.js +254 -0
  366. package/dist/chunk-R7XDDX2A.js +4007 -0
  367. package/dist/chunk-RDFRCT64.js +168 -0
  368. package/dist/chunk-RE5VZDFQ.js +58 -0
  369. package/dist/chunk-RGROYC2G.js +638 -0
  370. package/dist/chunk-RGWHUI5E.js +68 -0
  371. package/dist/chunk-RHVG6UNL.js +205 -0
  372. package/dist/chunk-RI4EX2QE.js +18 -0
  373. package/dist/chunk-RJAAKDRX.js +17 -0
  374. package/dist/chunk-ROMHOSMQ.js +185 -0
  375. package/dist/chunk-RWREC3KJ.js +517 -0
  376. package/dist/chunk-RYNETRDJ.js +118 -0
  377. package/dist/chunk-RZY7RKM5.js +500 -0
  378. package/dist/chunk-S2MNWFAG.js +52 -0
  379. package/dist/chunk-S2VQCZO4.js +22 -0
  380. package/dist/chunk-S54MKU6V.js +117 -0
  381. package/dist/chunk-S5OIDFRM.js +302 -0
  382. package/dist/chunk-SCW4ZF6R.js +150 -0
  383. package/dist/chunk-SLS2N4PH.js +2213 -0
  384. package/dist/chunk-SNLBO4BF.js +247 -0
  385. package/dist/chunk-SP3LFU6B.js +60 -0
  386. package/dist/chunk-SQQTDDQA.js +537 -0
  387. package/dist/chunk-STV6LYYE.js +45 -0
  388. package/dist/chunk-SURZ2WFE.js +326 -0
  389. package/dist/chunk-SZ7DL357.js +1047 -0
  390. package/dist/chunk-T5E4NQCM.js +5742 -0
  391. package/dist/chunk-TAJPCXSB.js +13 -0
  392. package/dist/chunk-TAOOYK3P.js +358 -0
  393. package/dist/chunk-TDSEX5CF.js +24 -0
  394. package/dist/chunk-TFTGP7Z7.js +174 -0
  395. package/dist/chunk-TGON4N4O.js +197 -0
  396. package/dist/chunk-TGQZHDY2.js +2373 -0
  397. package/dist/chunk-TJJZ2OKV.js +6783 -0
  398. package/dist/chunk-TRSVUPCX.js +25 -0
  399. package/dist/chunk-TSXGRLPR.js +107 -0
  400. package/dist/chunk-U2S3YEX3.js +224 -0
  401. package/dist/chunk-U45RTRGY.js +818 -0
  402. package/dist/chunk-U6C3VVWS.js +13 -0
  403. package/dist/chunk-UDMS5AD3.js +307 -0
  404. package/dist/chunk-UGX7GI37.js +94 -0
  405. package/dist/chunk-UH3JJSHK.js +1 -0
  406. package/dist/chunk-UHRBTZYY.js +208 -0
  407. package/dist/chunk-UHT2KRG5.js +193 -0
  408. package/dist/chunk-UI2F6DJ5.js +118 -0
  409. package/dist/chunk-UMAKSB4Z.js +284 -0
  410. package/dist/chunk-UR2IBGIM.js +521 -0
  411. package/dist/chunk-UUH2RVKS.js +585 -0
  412. package/dist/chunk-UVJ4PJDK.js +4533 -0
  413. package/dist/chunk-V53UG2OT.js +9924 -0
  414. package/dist/chunk-V72RMBM4.js +48 -0
  415. package/dist/chunk-VBNCKCCI.js +16 -0
  416. package/dist/chunk-VNSYKC25.js +24 -0
  417. package/dist/chunk-VPHVFK4A.js +1984 -0
  418. package/dist/chunk-VTLNJQ44.js +133 -0
  419. package/dist/chunk-VTW7HP3R.js +100 -0
  420. package/dist/chunk-VVGEPBPS.js +218 -0
  421. package/dist/chunk-VVLLL7I4.js +166 -0
  422. package/dist/chunk-VX3UMWB7.js +483 -0
  423. package/dist/chunk-VXF4Q3FW.js +20 -0
  424. package/dist/chunk-W3JMT2YY.js +712 -0
  425. package/dist/chunk-WDUORIHF.js +877 -0
  426. package/dist/chunk-WDVTY4U6.js +148 -0
  427. package/dist/chunk-WIFZCHEG.js +12566 -0
  428. package/dist/chunk-WIRN3F75.js +736 -0
  429. package/dist/chunk-WMPU2UOV.js +82 -0
  430. package/dist/chunk-WTOKKE2V.js +784 -0
  431. package/dist/chunk-WX5IRLF6.js +740 -0
  432. package/dist/chunk-WZ6U3O7I.js +1581 -0
  433. package/dist/chunk-XAONGNST.js +57 -0
  434. package/dist/chunk-XB5YLCLB.js +13 -0
  435. package/dist/chunk-XEP5NQ5Y.js +688 -0
  436. package/dist/chunk-XGYF2QMZ.js +351 -0
  437. package/dist/chunk-XHEKQENB.js +255 -0
  438. package/dist/chunk-XNO4FM6X.js +1124 -0
  439. package/dist/chunk-XPHKYHO4.js +878 -0
  440. package/dist/chunk-XPK2I4NC.js +405 -0
  441. package/dist/chunk-XPU2XADL.js +2175 -0
  442. package/dist/chunk-XQD2B6BB.js +507 -0
  443. package/dist/chunk-XT2ZQVTC.js +558 -0
  444. package/dist/chunk-XTXJGGUV.js +351 -0
  445. package/dist/chunk-XUXVDPSZ.js +50 -0
  446. package/dist/chunk-XV7NZL4B.js +57 -0
  447. package/dist/chunk-XZE4XARH.js +563 -0
  448. package/dist/chunk-XZYR5EDO.js +152 -0
  449. package/dist/chunk-Y3J4JMTU.js +61 -0
  450. package/dist/chunk-Y55LZN5U.js +52 -0
  451. package/dist/chunk-Y5VN7DMP.js +112 -0
  452. package/dist/chunk-Y67VAHN4.js +459 -0
  453. package/dist/chunk-YAXSKEUH.js +3544 -0
  454. package/dist/chunk-YB3JD4E6.js +975 -0
  455. package/dist/chunk-YESZJFK6.js +220 -0
  456. package/dist/chunk-YGXKOBQQ.js +292 -0
  457. package/dist/chunk-YMX76IOS.js +31 -0
  458. package/dist/chunk-YOTXESEH.js +257 -0
  459. package/dist/chunk-YTYIEZQY.js +119 -0
  460. package/dist/chunk-YVORHQ2S.js +579 -0
  461. package/dist/chunk-Z2CUQDAR.js +3429 -0
  462. package/dist/chunk-Z2KYOFHS.js +7000 -0
  463. package/dist/chunk-Z6PC7QX6.js +161 -0
  464. package/dist/chunk-ZDTGECTN.js +235 -0
  465. package/dist/chunk-ZIPWI2LY.js +151 -0
  466. package/dist/chunk-ZSKKMTQJ.js +554 -0
  467. package/dist/chunk-ZTT5IVPY.js +1160 -0
  468. package/dist/chunk-ZX65UI5W.js +78 -0
  469. package/dist/chunk-ZYG7GGKO.js +218 -0
  470. package/dist/chunk-ZZZUL4OF.js +38 -0
  471. package/dist/cli-utils-IXL26KJT.js +40 -0
  472. package/dist/cli-validation-WLXWLUJL.js +111 -0
  473. package/dist/commit-utils-P7CRJF5N.js +202 -0
  474. package/dist/compete-config-resolver-R5ULXMYH.js +76 -0
  475. package/dist/compete-request-62JESVET.js +364 -0
  476. package/dist/compete-results-QEPG6FZX.js +208 -0
  477. package/dist/competition-outcome-tracker-R32OOZ43.js +38 -0
  478. package/dist/config-JCOKXOQT.js +166 -0
  479. package/dist/config-audit-EL3GHXS7.js +360 -0
  480. package/dist/config-explain-TNILDEVJ.js +12 -0
  481. package/dist/config-loader-VPFPFO4B.js +38 -0
  482. package/dist/config-manager-7T4E2BQO.js +67 -0
  483. package/dist/config-validator-KKOHOW7O.js +72 -0
  484. package/dist/cost-YC42XUF3.js +53 -0
  485. package/dist/coverage-orchestrator-CISNKJC2.js +772 -0
  486. package/dist/coverage-scanner-YVD62MLH.js +12 -0
  487. package/dist/createCompetitionRunner-LJG6ZQSO.js +46 -0
  488. package/dist/data-migration-state-VJK64DLT.js +31 -0
  489. package/dist/db-migrator-XSEIOGWY.js +34 -0
  490. package/dist/discovery-JGYGDD25.js +25 -0
  491. package/dist/doctor-GJOYE7AE.js +186 -0
  492. package/dist/domain-analyzer-AWF3RP6E.js +29 -0
  493. package/dist/ensure-initialized-744DIZEZ.js +52 -0
  494. package/dist/entry.js +940 -0
  495. package/dist/environment-YS45U5ZI.js +81 -0
  496. package/dist/error-parser-core-PPZ36A4S.js +50 -0
  497. package/dist/escalation-ladder-MKTCEGSA.js +130 -0
  498. package/dist/evaluation-context-KV4GZNN7.js +35 -0
  499. package/dist/evidence-plan-resolver-GBSYSAPX.js +85 -0
  500. package/dist/execution-data-writer-3ODTBDLH.js +53 -0
  501. package/dist/execution-policy-applier-ZHD3DCF3.js +31 -0
  502. package/dist/execution-preflight-Z4Y64V3I.js +209 -0
  503. package/dist/execution-roles-R3DPPMD3.js +66 -0
  504. package/dist/exit-code-error-Z4SW2DVK.js +14 -0
  505. package/dist/external-temp-cleanup-N2RZH4QP.js +311 -0
  506. package/dist/factory-XBN7DFIM.js +149 -0
  507. package/dist/file-utils-XIVR2ZMA.js +47 -0
  508. package/dist/flywheel-autoloop-executor-UILGOFFK.js +249 -0
  509. package/dist/flywheel-competition-executor-JOBEXTRB.js +259 -0
  510. package/dist/flywheel-executor-6JFLA6J5.js +369 -0
  511. package/dist/flywheel-git-isolation-UC5NIEVU.js +48 -0
  512. package/dist/flywheel-manifest-5UC4VBMA.js +108 -0
  513. package/dist/flywheel-model-defaults-7CVKP53V.js +27 -0
  514. package/dist/flywheel-preflight-XEY5SHM6.js +104 -0
  515. package/dist/flywheel-resume-7HELH7QS.js +23 -0
  516. package/dist/flywheel-safety-7U7DPOAP.js +28 -0
  517. package/dist/flywheel-scope-decision-ZHKF6ZIN.js +11 -0
  518. package/dist/get-telemetry-logger-DPVWWIYY.js +73 -0
  519. package/dist/git-worktree-IY6V6DUO.js +18 -0
  520. package/dist/github-pr-manager-4LXEKJTA.js +211 -0
  521. package/dist/guidance-profile-config-E7XJL2VP.js +117 -0
  522. package/dist/guidance-profile-renderer-QK2YMAAP.js +21 -0
  523. package/dist/index-query-4JEUKA44.js +31 -0
  524. package/dist/index.js +108661 -0
  525. package/dist/instructions-6BURLQJC.js +64 -0
  526. package/dist/invoke-provider-auth-GRUYP44M.js +223 -0
  527. package/dist/judge-scoring.json +80 -0
  528. package/dist/judge-test.js +555 -0
  529. package/dist/lab-mode-OTWVHN63.js +39 -0
  530. package/dist/lab-utils-BJRFLGK4.js +23 -0
  531. package/dist/linux-host-class-UY4KVLFD.js +29 -0
  532. package/dist/llm-judge-executor-F7Z3HO77.js +133 -0
  533. package/dist/local-executor-CEHWE2PL.js +223 -0
  534. package/dist/logger-33TR6EE5.js +72 -0
  535. package/dist/loop-spec-XTLQAVZ7.js +191 -0
  536. package/dist/manager-2HJG5CLT.js +25 -0
  537. package/dist/matrix-prompt-builder-6UDN5X3F.js +497 -0
  538. package/dist/matrix-result-parser-7W35EUOV.js +15 -0
  539. package/dist/metadata-HQ43NDEK.js +22 -0
  540. package/dist/model-invocations-db-QBO4Y7WZ.js +38 -0
  541. package/dist/monitor-XGYBG2DW.js +72 -0
  542. package/dist/next-PB5ZXZKB.js +90 -0
  543. package/dist/next-ZBDK725T.js +69 -0
  544. package/dist/optimization-config-resolver-O6WKR47U.js +75 -0
  545. package/dist/package-3YCWIQQ5.js +10 -0
  546. package/dist/parallel-orchestrator-NL7YJJU2.js +297 -0
  547. package/dist/parallel-worker.js +279 -0
  548. package/dist/parse-git-status-PIAF3OTP.js +10 -0
  549. package/dist/path-security-ETTH6TZL.js +39 -0
  550. package/dist/pattern-bank-UNJR5ADV.js +15 -0
  551. package/dist/plan-backlog-list-fast-VAGYBV3J.js +270 -0
  552. package/dist/plan-backlog-show-fast-SG2CZPW3.js +406 -0
  553. package/dist/plan-sprint-list-fast-LURAX47V.js +162 -0
  554. package/dist/plan-sprint-status-fast-FJAODCHD.js +208 -0
  555. package/dist/plan-task-status-fast-HNYBMQI4.js +349 -0
  556. package/dist/plan-to-flywheel-Z4U3GWPN.js +456 -0
  557. package/dist/planning-backlog-3CQ5QQBQ.js +319 -0
  558. package/dist/poetic-root-V5DNXEAE.js +17 -0
  559. package/dist/preflight-OPANWMME.js +12 -0
  560. package/dist/process-registry-PDZJPTAS.js +27 -0
  561. package/dist/process-scanner-C22SYXYD.js +22 -0
  562. package/dist/processes-KMQUD7HY.js +29 -0
  563. package/dist/processes-json-fast-IBDXZ6WW.js +135 -0
  564. package/dist/profile-SE5EVXAP.js +149 -0
  565. package/dist/prompts-WZZPGWBX.js +168 -0
  566. package/dist/protected-branches-RNTEX7ET.js +57 -0
  567. package/dist/provider-aware-resource-manager-QBTZJMNP.js +18 -0
  568. package/dist/provider-matrix-N5X57V3Y.js +154 -0
  569. package/dist/provider-matrix-renderer-MZDWKKID.js +139 -0
  570. package/dist/provider-output-forwarding-DERID3TP.js +30 -0
  571. package/dist/provider-registry-J5NRBJKI.js +128 -0
  572. package/dist/provider-temp-cleanup-KYGLF6YU.js +14 -0
  573. package/dist/prune-engine-Q6E2DXBN.js +451 -0
  574. package/dist/quality-gate-YRHMQAEI.js +70 -0
  575. package/dist/quickstart-FIRLKGJI.js +62 -0
  576. package/dist/readiness-VZTMSG6J.js +96 -0
  577. package/dist/registry-YODFY77A.js +153 -0
  578. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  579. package/dist/repo-root-2IGD4H7X.js +22 -0
  580. package/dist/resolution-engine-D6TX6FRG.js +127 -0
  581. package/dist/resolve-provider-cli-O2P6XZBZ.js +35 -0
  582. package/dist/restore-telemetry-db-BQL6DTQF.js +360 -0
  583. package/dist/result-streamer-WEHW476R.js +19 -0
  584. package/dist/routing-events-DHPUZDDF.js +27 -0
  585. package/dist/routing-history-store-UWCEXAP3.js +46 -0
  586. package/dist/routing-planner-F5WQEUOM.js +160 -0
  587. package/dist/run-poetic-tui-J6LWRJUP.js +13517 -0
  588. package/dist/run-simulation.js +376 -0
  589. package/dist/runner-CS2TNGHA.js +1092 -0
  590. package/dist/runner-HHH7ZN2Z.js +1571 -0
  591. package/dist/safety-OCC4KJJR.js +64 -0
  592. package/dist/safety-stanza-7SV3HGG3.js +60 -0
  593. package/dist/sandbox-32QXJEMV.js +81 -0
  594. package/dist/sandbox-RSO7VP6V.js +94 -0
  595. package/dist/schema-extensions.sql +234 -0
  596. package/dist/security-2KI5XNDG.js +17 -0
  597. package/dist/setup-bb-plugin-QAQWZCV5.js +738 -0
  598. package/dist/setup-claude-code-P7BTTSPO.js +317 -0
  599. package/dist/setup-temp-cleanup-GASCWZ2I.js +20 -0
  600. package/dist/shared-utils-D6U6UREP.js +37 -0
  601. package/dist/simple-artifact-goal-OTXNGZY6.js +25 -0
  602. package/dist/sprint-UIXPYOXQ.js +338 -0
  603. package/dist/sprint-bridge-4BHMSC3M.js +68 -0
  604. package/dist/sprint-execution-service-2B7WHL5L.js +311 -0
  605. package/dist/sprint-manager-IDQUDNQI.js +91 -0
  606. package/dist/sqlite-wrapper-UDWCTNLJ.js +17 -0
  607. package/dist/stale-cleanup-orchestrator-XWXV7KCZ.js +62 -0
  608. package/dist/storage-access-F6ALDN4S.js +22 -0
  609. package/dist/synthesis-XD6EDVHF.js +185 -0
  610. package/dist/task-classifier-LNLXSHOM.js +494 -0
  611. package/dist/task-list-fast-PTMA4LUC.js +147 -0
  612. package/dist/task-manager-XAT7GOWB.js +93 -0
  613. package/dist/task-splitter-U7DJ7W6A.js +79 -0
  614. package/dist/task-type-detector-OLVOMXZO.js +21 -0
  615. package/dist/task-type-resolver-KKNQYSB4.js +42 -0
  616. package/dist/telemetry-5HWBBXLX.js +131 -0
  617. package/dist/telemetry-health-tracker-DMSSGBZ2.js +11 -0
  618. package/dist/telemetry-path-resolver-7ICSG276.js +28 -0
  619. package/dist/telemetry-reliability-XUOZNZZ6.js +125 -0
  620. package/dist/token-estimator-MEQUL3EJ.js +37 -0
  621. package/dist/transports-KNSSV2V4.js +255 -0
  622. package/dist/unified-cost-tracker-4TFRBVPR.js +35 -0
  623. package/dist/unified-state-cleanup-LJPF2BOW.js +276 -0
  624. package/dist/universal-cost-calculator-BAJV35GA.js +42 -0
  625. package/dist/user-agents-GHUGCSKN.js +22 -0
  626. package/dist/variant-delivery-state-KLRNG6XA.js +33 -0
  627. package/dist/variant-state-cleanup-MZGGLQAJ.js +280 -0
  628. package/dist/variant-success-PJXWE3ZV.js +12 -0
  629. package/dist/variant-worker-KUWKBLAH.js +4196 -0
  630. package/dist/variant-worker.js +24 -0
  631. package/dist/variants-JE2FSAQS.js +233 -0
  632. package/dist/verification-toolchains-V24UHW6Q.js +28 -0
  633. package/dist/verify-commands-H3DTCSGI.js +37 -0
  634. package/dist/warning-EGQGUUIO.js +12 -0
  635. package/dist/work-edge-RWEDWJZF.js +49 -0
  636. package/dist/work-item-writer-WHAVZXAY.js +19 -0
  637. package/dist/worker-7SA2VS2Y.js +1435 -0
  638. package/dist/worker.js +19 -0
  639. package/dist/worktree-metrics-3DFUYVYE.js +26 -0
  640. package/dist/writeback-VZKHYHSN.js +44 -0
  641. package/docs/CLI_REFERENCE.md +7042 -0
  642. package/docs/PROVIDER_SETUP.md +1570 -0
  643. package/docs/README.md +96 -0
  644. package/docs/TROUBLESHOOTING.md +2232 -0
  645. package/docs/getting-started/QUICK_START.md +294 -0
  646. package/docs/getting-started/README.md +188 -0
  647. package/docs/getting-started/SETUP.md +52 -0
  648. package/docs/reference/AGENT_CONTEXT.md +38 -0
  649. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  650. package/docs/reference/README.md +381 -0
  651. package/docs/reference/SECURITY.md +262 -0
  652. package/integrations/bb-plugin-poetic/README.md +362 -0
  653. package/integrations/bb-plugin-poetic/app.css +341 -0
  654. package/integrations/bb-plugin-poetic/app.tsx +5059 -0
  655. package/integrations/bb-plugin-poetic/package.json +45 -0
  656. package/integrations/bb-plugin-poetic/server.ts +444 -0
  657. package/integrations/bb-plugin-poetic/src/adapter.ts +3312 -0
  658. package/integrations/bb-plugin-poetic/src/backlog-authoring-model.ts +150 -0
  659. package/integrations/bb-plugin-poetic/src/backlog-authoring-schema.ts +355 -0
  660. package/integrations/bb-plugin-poetic/src/backlog-authoring-service.ts +419 -0
  661. package/integrations/bb-plugin-poetic/src/backlog-authoring-view.ts +1026 -0
  662. package/integrations/bb-plugin-poetic/src/competition-defaults-schema.ts +122 -0
  663. package/integrations/bb-plugin-poetic/src/competition-defaults-service.ts +105 -0
  664. package/integrations/bb-plugin-poetic/src/competition-defaults-view.ts +138 -0
  665. package/integrations/bb-plugin-poetic/src/contract.ts +615 -0
  666. package/integrations/bb-plugin-poetic/src/finalize-model.ts +205 -0
  667. package/integrations/bb-plugin-poetic/src/finalize-schema.ts +158 -0
  668. package/integrations/bb-plugin-poetic/src/finalize-service.ts +382 -0
  669. package/integrations/bb-plugin-poetic/src/finalize-view.ts +159 -0
  670. package/integrations/bb-plugin-poetic/src/judge-operations-readback.ts +303 -0
  671. package/integrations/bb-plugin-poetic/src/judge-operations-schema.ts +33 -0
  672. package/integrations/bb-plugin-poetic/src/judge-operations-view.ts +459 -0
  673. package/integrations/bb-plugin-poetic/src/model.ts +1302 -0
  674. package/integrations/bb-plugin-poetic/src/monitor-service.ts +233 -0
  675. package/integrations/bb-plugin-poetic/src/panel-read-ux.ts +97 -0
  676. package/integrations/bb-plugin-poetic/src/patch-preview-schema.ts +166 -0
  677. package/integrations/bb-plugin-poetic/src/patch-preview-service.ts +480 -0
  678. package/integrations/bb-plugin-poetic/src/patch-preview-view.ts +109 -0
  679. package/integrations/bb-plugin-poetic/src/planning-readback.ts +204 -0
  680. package/integrations/bb-plugin-poetic/src/planning-service.ts +594 -0
  681. package/integrations/bb-plugin-poetic/src/planning-workspace-schema.ts +95 -0
  682. package/integrations/bb-plugin-poetic/src/planning-workspace.ts +323 -0
  683. package/integrations/bb-plugin-poetic/src/poll-handoff.ts +136 -0
  684. package/integrations/bb-plugin-poetic/src/project-target-server.ts +21 -0
  685. package/integrations/bb-plugin-poetic/src/project-target.ts +45 -0
  686. package/integrations/bb-plugin-poetic/src/reference-index.ts +192 -0
  687. package/integrations/bb-plugin-poetic/src/repository-schema.ts +30 -0
  688. package/integrations/bb-plugin-poetic/src/result-explorer-view.ts +597 -0
  689. package/integrations/bb-plugin-poetic/src/result-readback-model.ts +163 -0
  690. package/integrations/bb-plugin-poetic/src/result-readback-schema.ts +319 -0
  691. package/integrations/bb-plugin-poetic/src/result-readback-service.ts +333 -0
  692. package/integrations/bb-plugin-poetic/src/run-page-view.ts +177 -0
  693. package/integrations/bb-plugin-poetic/src/setup-config-schema.ts +291 -0
  694. package/integrations/bb-plugin-poetic/src/setup-config-service.ts +590 -0
  695. package/integrations/bb-plugin-poetic/src/setup-config-view.ts +413 -0
  696. package/integrations/bb-plugin-poetic/src/sprint-close-model.ts +150 -0
  697. package/integrations/bb-plugin-poetic/src/sprint-close-schema.ts +136 -0
  698. package/integrations/bb-plugin-poetic/src/sprint-close-service.ts +341 -0
  699. package/integrations/bb-plugin-poetic/src/sprint-close-view.ts +116 -0
  700. package/integrations/bb-plugin-poetic/src/sprint-composition-model.ts +714 -0
  701. package/integrations/bb-plugin-poetic/src/sprint-composition-readback.ts +231 -0
  702. package/integrations/bb-plugin-poetic/src/sprint-composition-schema.ts +601 -0
  703. package/integrations/bb-plugin-poetic/src/sprint-composition-service.ts +775 -0
  704. package/integrations/bb-plugin-poetic/src/sprint-composition-view.ts +1221 -0
  705. package/integrations/bb-plugin-poetic/src/task-authoring-model.ts +567 -0
  706. package/integrations/bb-plugin-poetic/src/task-authoring-schema.ts +635 -0
  707. package/integrations/bb-plugin-poetic/src/task-authoring-service.ts +842 -0
  708. package/integrations/bb-plugin-poetic/src/task-authoring-view.ts +1227 -0
  709. package/integrations/bb-plugin-poetic/src/task-detail-readback.ts +56 -0
  710. package/integrations/bb-plugin-poetic/src/task-detail-schema.ts +144 -0
  711. package/integrations/bb-plugin-poetic/src/task-navigation.ts +446 -0
  712. package/integrations/bb-plugin-poetic/src/workbench-route.ts +74 -0
  713. package/integrations/bb-plugin-poetic/tests/host-contract.test.ts +773 -0
  714. package/integrations/bb-plugin-poetic/tsconfig.json +18 -0
  715. package/integrations/bb-plugin-poetic/types/PROVENANCE.json +52 -0
  716. package/integrations/bb-plugin-poetic/types/bb-plugin-sdk-app.d.ts +1444 -0
  717. package/integrations/bb-plugin-poetic/types/bb-plugin-sdk.d.ts +13030 -0
  718. package/integrations/bb-plugin-poetic/vitest.host.config.ts +71 -0
  719. package/npm-shrinkwrap.json +4950 -0
  720. package/package.json +331 -0
  721. package/schemas/README.md +80 -0
  722. package/schemas/config-v1.schema.json +136 -0
  723. package/schemas/execution-config.schema.json +47 -0
  724. package/schemas/judge-scoring.schema.json +370 -0
  725. package/schemas/poetic.config.schema.json +2214 -0
  726. package/schemas/provider-config.schema.json +203 -0
  727. package/schemas/telemetry-config.schema.json +79 -0
  728. package/schemas/user-preferences.schema.json +141 -0
  729. package/scripts/assert-node-runtime.mjs +140 -0
  730. package/scripts/preflight-native.mjs +49 -0
  731. package/scripts/preinstall-node-check.mjs +78 -0
  732. package/scripts/setup-git-hooks.mjs +24 -0
  733. package/scripts/sync.sh +2722 -0
  734. package/scripts/write-node-launcher.sh +108 -0
  735. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  736. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  737. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  738. package/templates/.poetic/README.md +37 -0
  739. package/templates/.poetic/agents/README.md +296 -0
  740. package/templates/.poetic/agents/api-documenter.md +147 -0
  741. package/templates/.poetic/agents/backend-architect.md +31 -0
  742. package/templates/.poetic/agents/code-reviewer.md +157 -0
  743. package/templates/.poetic/agents/data-scientist.md +179 -0
  744. package/templates/.poetic/agents/database-optimizer.md +145 -0
  745. package/templates/.poetic/agents/debugger.md +31 -0
  746. package/templates/.poetic/agents/deployment-engineer.md +164 -0
  747. package/templates/.poetic/agents/devops-troubleshooter.md +139 -0
  748. package/templates/.poetic/agents/frontend-developer.md +150 -0
  749. package/templates/.poetic/agents/javascript-pro.md +36 -0
  750. package/templates/.poetic/agents/performance-engineer.md +151 -0
  751. package/templates/.poetic/agents/python-pro.md +137 -0
  752. package/templates/.poetic/agents/test-automator.md +147 -0
  753. package/templates/.poetic/agents/typescript-pro.md +34 -0
  754. package/templates/.poetic/config/poetic.config.jsonc +69 -0
  755. package/templates/.poetic/config/project-context.template.json +6 -0
  756. package/templates/.poetic/config/task-type-aliases.presets/kanban.yaml +14 -0
  757. package/templates/.poetic/config/task-type-aliases.presets/scrum.yaml +17 -0
  758. package/templates/.poetic/config/task-type-aliases.presets/xp.yaml +12 -0
  759. package/templates/.poetic/config/task-type-aliases.yaml +28 -0
  760. package/templates/.poetic/gitignore.template +55 -0
  761. package/templates/.poetic/task-types/analysis.yaml +40 -0
  762. package/templates/.poetic/task-types/architecture.yaml +38 -0
  763. package/templates/.poetic/task-types/doc.yaml +35 -0
  764. package/templates/.poetic/task-types/feature.yaml +23 -0
  765. package/templates/.poetic/task-types/general.yaml +6 -0
  766. package/templates/.poetic/task-types/security.yaml +39 -0
  767. package/templates/AGENTS.template.md +99 -0
  768. package/templates/CLAUDE.template.md +1 -0
  769. package/templates/GEMINI.template.md +1 -0
  770. package/templates/builtin-workflows/code-review.yaml +73 -0
  771. package/templates/builtin-workflows/compete-streak.yaml +78 -0
  772. package/templates/builtin-workflows/hello-verify.yaml +10 -0
  773. package/templates/builtin-workflows/judge-regression.yaml +114 -0
  774. package/templates/builtin-workflows/skills/code-review/SKILL.md +60 -0
  775. package/templates/builtin-workflows/skills/hello-verify/SKILL.md +6 -0
  776. package/templates/guard-kit/GUARD_SETUP.md.template +255 -0
  777. package/templates/guard-kit/check.mjs.template +777 -0
  778. package/templates/guard-kit/config.json.template +6 -0
  779. package/templates/guard-kit/poetic-guard.yml.template +189 -0
  780. package/templates/profiles/README.md +56 -0
  781. package/templates/profiles/frontier-claude.json +27 -0
  782. package/templates/profiles/frontier-codex.json +26 -0
@@ -0,0 +1,1042 @@
1
+ import {
2
+ getAvailableMemoryGB,
3
+ getMemoryPressureLevel
4
+ } from "./chunk-PTH5E5XO.js";
5
+ import {
6
+ PROVIDER_CONCURRENCY,
7
+ applyProviderConcurrencyPenalty,
8
+ getProviderConcurrencyBaseline,
9
+ getProviderConcurrencyLimit
10
+ } from "./chunk-GHTZSQB7.js";
11
+ import {
12
+ RESOURCE_ACQUISITION_TIMEOUT_MS
13
+ } from "./chunk-LAMKBTXX.js";
14
+
15
+ // src/orchestrator/provider-aware-resource-manager.ts
16
+ import { totalmem } from "os";
17
+
18
+ // src/orchestrator/resource-manager-types.ts
19
+ import * as os from "os";
20
+ function clampInteger(value, min, max) {
21
+ if (!Number.isFinite(value)) return min;
22
+ return Math.max(min, Math.min(max, Math.round(value)));
23
+ }
24
+ function captureConcurrencyBackpressureSnapshot(queueDepth, activeConcurrency, currentGlobalConcurrency, configuredGlobalConcurrency, minGlobalConcurrency = 1) {
25
+ const cpuCount = Math.max(1, os.cpus().length);
26
+ const load1 = os.loadavg?.()[0] ?? 0;
27
+ const cpuPercent = Math.max(0, load1 / cpuCount * 100);
28
+ const availableMemoryGB = getAvailableMemoryGB();
29
+ const memoryPressure = getMemoryPressureLevel();
30
+ return {
31
+ cpuPercent,
32
+ availableMemoryGB,
33
+ memoryPressure,
34
+ queueDepth,
35
+ activeConcurrency,
36
+ currentGlobalConcurrency,
37
+ configuredGlobalConcurrency,
38
+ minGlobalConcurrency
39
+ };
40
+ }
41
+ function recommendGlobalConcurrency(snapshot) {
42
+ const configured = Math.max(1, Math.floor(snapshot.configuredGlobalConcurrency));
43
+ const minGlobalConcurrency = clampInteger(snapshot.minGlobalConcurrency ?? 1, 1, configured);
44
+ const current = clampInteger(snapshot.currentGlobalConcurrency, minGlobalConcurrency, configured);
45
+ const queueDepth = Math.max(0, Math.floor(snapshot.queueDepth));
46
+ const activeConcurrency = Math.max(0, Math.floor(snapshot.activeConcurrency));
47
+ const cpuPercent = Math.max(0, snapshot.cpuPercent);
48
+ const availableMemoryGB = Math.max(0, snapshot.availableMemoryGB);
49
+ const kernelPressure = snapshot.memoryPressure ?? "unknown";
50
+ const memLabel = `availMem=${availableMemoryGB.toFixed(1)}GB` + (kernelPressure === "warn" || kernelPressure === "critical" ? ` kernel=${kernelPressure}` : "");
51
+ let recommended = current;
52
+ let pressureLevel = "healthy";
53
+ let reason = "steady concurrency";
54
+ let backpressureActive = false;
55
+ const criticalPressure = kernelPressure === "critical" || cpuPercent >= 92 || availableMemoryGB < 1;
56
+ const elevatedPressure = kernelPressure === "warn" || cpuPercent >= 80 || availableMemoryGB < 2;
57
+ const moderatePressure = cpuPercent >= 70 || availableMemoryGB < 4;
58
+ const healthySystem = cpuPercent <= 45 && availableMemoryGB >= 6;
59
+ if (criticalPressure) {
60
+ pressureLevel = "critical";
61
+ backpressureActive = true;
62
+ recommended = Math.max(minGlobalConcurrency, Math.floor(current / 2));
63
+ reason = `critical pressure cpu=${cpuPercent.toFixed(1)}% ${memLabel}`;
64
+ } else if (elevatedPressure) {
65
+ pressureLevel = "backpressure";
66
+ backpressureActive = true;
67
+ const shed = Math.max(2, Math.ceil(current * 0.25));
68
+ recommended = Math.max(minGlobalConcurrency, current - shed);
69
+ reason = `high pressure cpu=${cpuPercent.toFixed(1)}% ${memLabel}`;
70
+ } else if (moderatePressure) {
71
+ pressureLevel = "watch";
72
+ backpressureActive = true;
73
+ recommended = Math.max(minGlobalConcurrency, current - 1);
74
+ reason = `moderate pressure cpu=${cpuPercent.toFixed(1)}% ${memLabel}`;
75
+ } else if (healthySystem && queueDepth > 0 && current < configured) {
76
+ const queueDemand = queueDepth >= Math.max(2, current * 2) || activeConcurrency >= current * 2 ? 2 : 1;
77
+ recommended = Math.min(configured, current + queueDemand);
78
+ reason = `healthy system with queueDepth=${queueDepth}`;
79
+ } else if (!healthySystem && queueDepth > current && current < configured) {
80
+ recommended = Math.min(configured, current + 1);
81
+ reason = `recovering with queued work queueDepth=${queueDepth}`;
82
+ }
83
+ return {
84
+ recommendedGlobalConcurrency: recommended,
85
+ backpressureActive,
86
+ reason,
87
+ pressureLevel
88
+ };
89
+ }
90
+
91
+ // src/orchestrator/provider-aware-resource-manager.ts
92
+ var ProviderAwareResourceManager = class {
93
+ configuredGlobalMaxConcurrent;
94
+ globalMaxConcurrent;
95
+ fairnessMode;
96
+ enableTelemetry;
97
+ telemetryHooks = [];
98
+ lastBackpressureDecision;
99
+ lastBackpressureUpdatedAt = Date.now();
100
+ // Provider-specific baselines (host overlay / CLI overrides replace the shipped default)
101
+ providerLimits;
102
+ // Correctness ceilings no override may exceed (see config.providerHardCaps)
103
+ providerHardCaps;
104
+ // Current active counts
105
+ globalActiveCount = 0;
106
+ providerActiveCounts = /* @__PURE__ */ new Map();
107
+ // Queue of pending acquisitions (singles and atomic groups)
108
+ queue = [];
109
+ // Round-robin state for strict-fair mode
110
+ lastProviderServiced = null;
111
+ // Provider usage statistics for weighted-fair mode
112
+ providerUsageHistory = /* @__PURE__ */ new Map();
113
+ usageHistoryWindow = 100;
114
+ // Track last N acquisitions
115
+ providerAvgHoldMs = /* @__PURE__ */ new Map();
116
+ globalAvgHoldMs = 6e4;
117
+ holdTimeEwmaAlpha = 0.2;
118
+ constructor(config) {
119
+ if (config.globalMaxConcurrent < 1) {
120
+ throw new Error("globalMaxConcurrent must be at least 1");
121
+ }
122
+ this.configuredGlobalMaxConcurrent = config.globalMaxConcurrent;
123
+ this.globalMaxConcurrent = config.globalMaxConcurrent;
124
+ this.fairnessMode = config.fairnessMode ?? "weighted-fair";
125
+ this.enableTelemetry = config.enableTelemetry ?? true;
126
+ this.lastBackpressureDecision = {
127
+ recommendedGlobalConcurrency: config.globalMaxConcurrent,
128
+ backpressureActive: false,
129
+ reason: "baseline",
130
+ pressureLevel: "healthy"
131
+ };
132
+ this.providerHardCaps = /* @__PURE__ */ new Map();
133
+ for (const [provider, cap] of Object.entries(config.providerHardCaps ?? {})) {
134
+ if (Number.isFinite(cap)) {
135
+ this.providerHardCaps.set(provider, Math.max(1, Math.floor(cap)));
136
+ }
137
+ }
138
+ this.providerLimits = /* @__PURE__ */ new Map();
139
+ const providers = new Set(Object.keys(PROVIDER_CONCURRENCY));
140
+ for (const provider of Object.keys(config.providerLimits ?? {})) {
141
+ providers.add(provider);
142
+ }
143
+ for (const provider of providers) {
144
+ const generatedBaseline = PROVIDER_CONCURRENCY[provider]?.maxConcurrent;
145
+ const limit = config.providerLimits?.[provider] ?? generatedBaseline ?? getProviderConcurrencyLimit(provider);
146
+ this.providerLimits.set(provider, limit);
147
+ this.providerActiveCounts.set(provider, 0);
148
+ this.providerUsageHistory.set(provider, 0);
149
+ this.providerAvgHoldMs.set(provider, 6e4);
150
+ }
151
+ }
152
+ /**
153
+ * Acquire a resource slot (blocks if at capacity)
154
+ *
155
+ * Waits until both constraints are satisfied:
156
+ * 1. Provider-specific limit not exceeded
157
+ * 2. Global limit not exceeded
158
+ *
159
+ * @param provider - Provider ID requesting the resource
160
+ * @param signal - Optional AbortSignal for cancellation
161
+ * @param timeoutMs - Maximum time to wait (default: 60 seconds)
162
+ * @returns Resource handle with release callback
163
+ * @throws Error if timeout reached or signal aborted
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * const handle = await manager.acquire('gemini', signal);
168
+ * try {
169
+ * await executeTask();
170
+ * } finally {
171
+ * await handle.release();
172
+ * }
173
+ * ```
174
+ */
175
+ acquire(provider, signal, timeoutMs = RESOURCE_ACQUISITION_TIMEOUT_MS) {
176
+ if (signal?.aborted) {
177
+ return Promise.reject(new Error("Acquisition aborted before queuing"));
178
+ }
179
+ const immediate = this.tryAcquire(provider);
180
+ if (immediate) {
181
+ return Promise.resolve(immediate);
182
+ }
183
+ let pendingResolve;
184
+ let pendingReject;
185
+ const pending = new Promise((resolve, reject) => {
186
+ pendingResolve = resolve;
187
+ pendingReject = reject;
188
+ });
189
+ pending.catch(() => {
190
+ });
191
+ const queuedAt = Date.now();
192
+ let timeoutHandle = null;
193
+ let abortHandler = null;
194
+ const cleanup = () => {
195
+ if (timeoutHandle) {
196
+ clearTimeout(timeoutHandle);
197
+ }
198
+ if (abortHandler && signal) {
199
+ signal.removeEventListener("abort", abortHandler);
200
+ }
201
+ };
202
+ const wrappedResolve = (handle) => {
203
+ cleanup();
204
+ pendingResolve(handle);
205
+ };
206
+ const wrappedReject = (error) => {
207
+ cleanup();
208
+ const index = this.queue.findIndex((e) => e.resolve === wrappedResolve);
209
+ if (index !== -1) {
210
+ this.queue.splice(index, 1);
211
+ }
212
+ queueMicrotask(() => pendingReject(error));
213
+ };
214
+ const entry = {
215
+ provider,
216
+ resolve: wrappedResolve,
217
+ reject: wrappedReject,
218
+ signal,
219
+ queuedAt,
220
+ weight: this.calculateWeight(provider)
221
+ };
222
+ this.queue.push(entry);
223
+ timeoutHandle = setTimeout(() => {
224
+ const waitTimeMs = Date.now() - queuedAt;
225
+ const error = new Error(
226
+ `Resource acquisition timeout after ${waitTimeMs}ms (limit: ${timeoutMs}ms). Provider: ${provider}, Active: ${this.globalActiveCount}/${this.globalMaxConcurrent} global, ${this.providerActiveCounts.get(provider)}/${this.getEffectiveProviderLimit(provider)} provider, Queued: ${this.queue.length}. This may indicate resource contention or a leak (release() not called).`
227
+ );
228
+ this.emitTelemetry({
229
+ type: "resource_timeout",
230
+ provider,
231
+ waitTimeMs,
232
+ status: this.getStatus(),
233
+ timestamp: Date.now(),
234
+ error
235
+ });
236
+ wrappedReject(error);
237
+ }, timeoutMs);
238
+ if (signal) {
239
+ abortHandler = () => {
240
+ const waitTimeMs = Date.now() - queuedAt;
241
+ const error = new Error(
242
+ `Resource acquisition cancelled after ${waitTimeMs}ms for provider ${provider}`
243
+ );
244
+ this.emitTelemetry({
245
+ type: "resource_cancelled",
246
+ provider,
247
+ waitTimeMs,
248
+ status: this.getStatus(),
249
+ timestamp: Date.now(),
250
+ error
251
+ });
252
+ wrappedReject(error);
253
+ };
254
+ signal.addEventListener("abort", abortHandler);
255
+ }
256
+ this.processQueue();
257
+ return pending;
258
+ }
259
+ /**
260
+ * Acquire a group of resource slots via atomic queued reservation.
261
+ *
262
+ * Charges **one slot per reserved entry** (duplicate providers each consume a
263
+ * slot up to baseline). The outer reservation is **capacity-aware**: the
264
+ * request is clamped to configured baselines so oversized competitions remain
265
+ * runnable (per provider min(count, baseline), total ≤ configured global max).
266
+ * Overflow beyond that clamp is left to the caller to serialize.
267
+ *
268
+ * The group receives **no handles** until every reserved slot fits current
269
+ * effective capacity; there are never partial holds. Transient effective
270
+ * reductions cause a wait (queue), not a hard reject.
271
+ *
272
+ * Ordering is owned by the shared manager queue (FIFO / fairness with
273
+ * single-slot entries).
274
+ *
275
+ * @param providers - Providers for each requested slot (order preserved)
276
+ * @param signal - Optional AbortSignal for cancellation while queued
277
+ * @param timeoutMs - Max time to wait for the full group (default: RESOURCE_ACQUISITION_TIMEOUT_MS)
278
+ */
279
+ acquireMany(providers, signal, timeoutMs = RESOURCE_ACQUISITION_TIMEOUT_MS) {
280
+ if (providers.length === 0) {
281
+ return Promise.reject(new Error("acquireMany requires at least one provider slot"));
282
+ }
283
+ const reservedProviders = this.clampProvidersToBaselineCapacity(providers);
284
+ if (reservedProviders.length === 0) {
285
+ return Promise.reject(
286
+ new Error(
287
+ "acquireMany could not reserve any slots: all providers have zero configured baseline capacity"
288
+ )
289
+ );
290
+ }
291
+ if (signal?.aborted) {
292
+ return Promise.reject(new Error("Group acquisition aborted before queuing"));
293
+ }
294
+ if (this.queue.length === 0) {
295
+ const immediate = this.tryAcquireGroup(reservedProviders);
296
+ if (immediate) {
297
+ return Promise.resolve(immediate);
298
+ }
299
+ }
300
+ let pendingResolve;
301
+ let pendingReject;
302
+ const pending = new Promise((resolve, reject) => {
303
+ pendingResolve = resolve;
304
+ pendingReject = reject;
305
+ });
306
+ pending.catch(() => {
307
+ });
308
+ const queuedAt = Date.now();
309
+ let timeoutHandle = null;
310
+ let abortHandler = null;
311
+ const cleanup = () => {
312
+ if (timeoutHandle) {
313
+ clearTimeout(timeoutHandle);
314
+ }
315
+ if (abortHandler && signal) {
316
+ signal.removeEventListener("abort", abortHandler);
317
+ }
318
+ };
319
+ const wrappedResolve = (handles) => {
320
+ cleanup();
321
+ pendingResolve(handles);
322
+ };
323
+ const wrappedReject = (error) => {
324
+ cleanup();
325
+ const index = this.queue.findIndex((e) => e.resolveGroup === wrappedResolve);
326
+ if (index !== -1) {
327
+ this.queue.splice(index, 1);
328
+ }
329
+ queueMicrotask(() => pendingReject(error));
330
+ };
331
+ const primaryProvider = reservedProviders[0];
332
+ const weight = reservedProviders.reduce((sum, provider) => sum + this.calculateWeight(provider), 0) / reservedProviders.length;
333
+ const entry = {
334
+ provider: primaryProvider,
335
+ providers: [...reservedProviders],
336
+ // Single resolve is unused for groups; provide a no-op to satisfy the type.
337
+ resolve: () => {
338
+ },
339
+ resolveGroup: wrappedResolve,
340
+ reject: wrappedReject,
341
+ signal,
342
+ queuedAt,
343
+ weight
344
+ };
345
+ this.queue.push(entry);
346
+ timeoutHandle = setTimeout(() => {
347
+ const waitTimeMs = Date.now() - queuedAt;
348
+ const error = new Error(
349
+ `Resource group acquisition timeout after ${waitTimeMs}ms (limit: ${timeoutMs}ms). Providers: [${reservedProviders.join(", ")}], Active: ${this.globalActiveCount}/${this.globalMaxConcurrent} global, Queued: ${this.queue.length}. This may indicate resource contention or a leak (release() not called).`
350
+ );
351
+ this.emitTelemetry({
352
+ type: "resource_timeout",
353
+ provider: primaryProvider,
354
+ waitTimeMs,
355
+ status: this.getStatus(),
356
+ timestamp: Date.now(),
357
+ error
358
+ });
359
+ wrappedReject(error);
360
+ }, timeoutMs);
361
+ if (signal) {
362
+ abortHandler = () => {
363
+ const waitTimeMs = Date.now() - queuedAt;
364
+ const error = new Error(
365
+ `Resource group acquisition cancelled after ${waitTimeMs}ms for providers [${reservedProviders.join(", ")}]`
366
+ );
367
+ this.emitTelemetry({
368
+ type: "resource_cancelled",
369
+ provider: primaryProvider,
370
+ waitTimeMs,
371
+ status: this.getStatus(),
372
+ timestamp: Date.now(),
373
+ error
374
+ });
375
+ wrappedReject(error);
376
+ };
377
+ signal.addEventListener("abort", abortHandler);
378
+ }
379
+ this.processQueue();
380
+ return pending;
381
+ }
382
+ /**
383
+ * Try to acquire a resource slot (non-blocking)
384
+ *
385
+ * Returns immediately with a handle if available, or null if at capacity.
386
+ * Useful for opportunistic acquisition without blocking.
387
+ *
388
+ * @param provider - Provider ID requesting the resource
389
+ * @returns Resource handle if available, null otherwise
390
+ *
391
+ * @example
392
+ * ```typescript
393
+ * const handle = manager.tryAcquire('gemini');
394
+ * if (handle) {
395
+ * try {
396
+ * await executeTask();
397
+ * } finally {
398
+ * await handle.release();
399
+ * }
400
+ * } else {
401
+ * console.log('At capacity, will queue later');
402
+ * }
403
+ * ```
404
+ */
405
+ tryAcquire(provider) {
406
+ const providerLimit = this.getEffectiveProviderLimit(provider);
407
+ const providerActive = this.providerActiveCounts.get(provider) ?? 0;
408
+ const canAcquireProvider = providerActive < providerLimit;
409
+ const canAcquireGlobal = this.globalActiveCount < this.globalMaxConcurrent;
410
+ if (!canAcquireProvider || !canAcquireGlobal) {
411
+ if (process.env.DEBUG_ORCHESTRATOR) {
412
+ console.log(
413
+ `[DEBUG] At capacity for ${provider}: canAcquireProvider=${canAcquireProvider}, canAcquireGlobal=${canAcquireGlobal}, active=${providerActive}, limit=${providerLimit}, globalActive=${this.globalActiveCount}, globalMax=${this.globalMaxConcurrent}`
414
+ );
415
+ }
416
+ return null;
417
+ }
418
+ this.globalActiveCount++;
419
+ this.providerActiveCounts.set(provider, providerActive + 1);
420
+ this.updateUsageHistory(provider);
421
+ const acquiredAt = Date.now();
422
+ let released = false;
423
+ const release = async () => {
424
+ if (released) {
425
+ return;
426
+ }
427
+ released = true;
428
+ await this.releaseInternal(provider, acquiredAt);
429
+ };
430
+ this.emitTelemetry({
431
+ type: "resource_acquired",
432
+ provider,
433
+ waitTimeMs: 0,
434
+ // Immediate acquisition
435
+ status: this.getStatus(),
436
+ timestamp: acquiredAt
437
+ });
438
+ return {
439
+ provider,
440
+ release,
441
+ acquiredAt
442
+ };
443
+ }
444
+ /**
445
+ * Get current resource status
446
+ *
447
+ * @returns Current utilization across all providers
448
+ */
449
+ getStatus() {
450
+ const timestamp = Date.now();
451
+ const providers = {};
452
+ const providerIds = Array.from(this.providerLimits.keys());
453
+ for (const provider of providerIds) {
454
+ const limit = this.getEffectiveProviderLimit(provider);
455
+ const active = this.providerActiveCounts.get(provider) ?? 0;
456
+ const queued = this.queue.reduce((count, entry) => {
457
+ if (entry.providers && entry.providers.length > 0) {
458
+ return count + entry.providers.filter((p) => p === provider).length;
459
+ }
460
+ return count + (entry.provider === provider ? 1 : 0);
461
+ }, 0);
462
+ const utilization = limit > 0 ? Math.round(active / limit * 100) : 0;
463
+ const available = Math.max(0, limit - active);
464
+ providers[provider] = {
465
+ provider,
466
+ active,
467
+ queued,
468
+ max: limit,
469
+ utilization,
470
+ available
471
+ };
472
+ }
473
+ const globalUtilization = this.globalMaxConcurrent > 0 ? Math.round(this.globalActiveCount / this.globalMaxConcurrent * 100) : 0;
474
+ const globalAvailable = Math.max(0, this.globalMaxConcurrent - this.globalActiveCount);
475
+ return {
476
+ global: {
477
+ active: this.globalActiveCount,
478
+ queued: this.queue.length,
479
+ max: this.globalMaxConcurrent,
480
+ utilization: globalUtilization,
481
+ available: globalAvailable,
482
+ baselineMax: this.configuredGlobalMaxConcurrent
483
+ },
484
+ backpressure: {
485
+ active: this.lastBackpressureDecision.backpressureActive,
486
+ recommendedGlobalConcurrency: this.lastBackpressureDecision.recommendedGlobalConcurrency,
487
+ configuredGlobalConcurrency: this.configuredGlobalMaxConcurrent,
488
+ evaluatedAt: this.lastBackpressureUpdatedAt,
489
+ reason: this.lastBackpressureDecision.reason,
490
+ pressureLevel: this.lastBackpressureDecision.pressureLevel
491
+ },
492
+ providers,
493
+ fairnessMode: this.fairnessMode,
494
+ timestamp
495
+ };
496
+ }
497
+ /**
498
+ * Get queue depth and estimated wait time for a provider
499
+ *
500
+ * Estimates are best-effort and intended for fail-fast routing decisions.
501
+ */
502
+ getQueueStatus(provider) {
503
+ const providerQueued = this.queue.reduce((count, entry) => {
504
+ if (entry.providers && entry.providers.length > 0) {
505
+ return count + entry.providers.filter((p) => p === provider).length;
506
+ }
507
+ return count + (entry.provider === provider ? 1 : 0);
508
+ }, 0);
509
+ const providerActive = this.providerActiveCounts.get(provider) ?? 0;
510
+ const providerMax = this.getEffectiveProviderLimit(provider);
511
+ const avgProviderHoldMs = Math.max(1e3, this.providerAvgHoldMs.get(provider) ?? 6e4);
512
+ const globalQueued = this.queue.length;
513
+ const globalActive = this.globalActiveCount;
514
+ const globalMax = this.globalMaxConcurrent;
515
+ const avgGlobalHoldMs = Math.max(1e3, this.globalAvgHoldMs);
516
+ const providerWaves = providerQueued <= 0 ? 0 : Math.ceil(providerQueued / Math.max(1, providerMax));
517
+ const providerWaitMs = providerWaves * Math.ceil(avgProviderHoldMs / Math.max(1, providerMax));
518
+ const globalWaves = globalQueued <= 0 ? 0 : Math.ceil(globalQueued / Math.max(1, globalMax));
519
+ const globalWaitMs = globalWaves * Math.ceil(avgGlobalHoldMs / Math.max(1, globalMax));
520
+ return {
521
+ provider,
522
+ queued: providerQueued,
523
+ active: providerActive,
524
+ max: providerMax,
525
+ estimatedWaitMs: Math.max(providerWaitMs, globalWaitMs),
526
+ globalQueued,
527
+ globalActive,
528
+ globalMax
529
+ };
530
+ }
531
+ /**
532
+ * Update provider-specific concurrency baseline dynamically
533
+ *
534
+ * Useful for runtime tuning based on observed performance. The new value is
535
+ * authoritative in both directions, still bounded by any correctness ceiling
536
+ * (`providerHardCaps`) and by live rate-limit penalties.
537
+ *
538
+ * @param provider - Provider ID
539
+ * @param newLimit - New concurrency limit (must be >= 1)
540
+ *
541
+ * @example
542
+ * ```typescript
543
+ * // Raise Cursor capacity after validating host resources
544
+ * manager.updateProviderLimit('cursor', 3);
545
+ * ```
546
+ */
547
+ updateProviderLimit(provider, newLimit) {
548
+ if (newLimit < 1) {
549
+ throw new Error(`Invalid limit for ${provider}: ${newLimit} (must be >= 1)`);
550
+ }
551
+ const previousEffective = this.getEffectiveProviderLimit(provider);
552
+ this.providerLimits.set(provider, newLimit);
553
+ if (this.getEffectiveProviderLimit(provider) > previousEffective) {
554
+ this.processQueue();
555
+ }
556
+ }
557
+ /**
558
+ * Update the global concurrency limit.
559
+ *
560
+ * This is intentionally non-preemptive: active work continues, and the new
561
+ * limit only affects future acquisitions and queue draining.
562
+ */
563
+ updateGlobalLimit(newLimit) {
564
+ if (newLimit < 1) {
565
+ throw new Error(`Invalid global limit: ${newLimit} (must be >= 1)`);
566
+ }
567
+ const nextLimit = Math.max(
568
+ 1,
569
+ Math.min(this.configuredGlobalMaxConcurrent, Math.floor(newLimit))
570
+ );
571
+ const previousLimit = this.globalMaxConcurrent;
572
+ if (nextLimit === previousLimit) {
573
+ return;
574
+ }
575
+ this.globalMaxConcurrent = nextLimit;
576
+ this.lastBackpressureUpdatedAt = Date.now();
577
+ const decision = {
578
+ recommendedGlobalConcurrency: nextLimit,
579
+ backpressureActive: nextLimit < this.configuredGlobalMaxConcurrent,
580
+ reason: nextLimit < previousLimit ? "concurrency reduced by backpressure" : "concurrency increased after recovery",
581
+ pressureLevel: nextLimit < previousLimit ? nextLimit <= Math.max(1, Math.floor(previousLimit / 2)) ? "critical" : "backpressure" : nextLimit === this.configuredGlobalMaxConcurrent ? "healthy" : "watch"
582
+ };
583
+ this.lastBackpressureDecision = decision;
584
+ if (nextLimit > previousLimit) {
585
+ this.processQueue();
586
+ }
587
+ }
588
+ /**
589
+ * Evaluate and apply the current backpressure policy.
590
+ *
591
+ * Returns the decision so callers can log or persist the same signal that
592
+ * was applied to the manager.
593
+ */
594
+ applyBackpressure(snapshot) {
595
+ const decision = recommendGlobalConcurrency(snapshot);
596
+ const previousLimit = this.globalMaxConcurrent;
597
+ if (decision.recommendedGlobalConcurrency !== previousLimit) {
598
+ this.updateGlobalLimit(decision.recommendedGlobalConcurrency);
599
+ this.lastBackpressureDecision = decision;
600
+ this.lastBackpressureUpdatedAt = Date.now();
601
+ this.emitTelemetry({
602
+ type: decision.backpressureActive ? "backpressure_active" : decision.recommendedGlobalConcurrency === this.configuredGlobalMaxConcurrent ? "backpressure_released" : "concurrency_adjusted",
603
+ provider: "system",
604
+ status: this.getStatus(),
605
+ timestamp: Date.now(),
606
+ snapshot,
607
+ previousGlobalConcurrency: previousLimit,
608
+ recommendedGlobalConcurrency: decision.recommendedGlobalConcurrency,
609
+ appliedGlobalConcurrency: this.globalMaxConcurrent,
610
+ reason: decision.reason,
611
+ backpressureActive: decision.backpressureActive
612
+ });
613
+ return decision;
614
+ }
615
+ this.lastBackpressureDecision = decision;
616
+ this.lastBackpressureUpdatedAt = Date.now();
617
+ return decision;
618
+ }
619
+ /**
620
+ * Register a telemetry hook
621
+ *
622
+ * @param hook - Callback function for telemetry events
623
+ *
624
+ * @example
625
+ * ```typescript
626
+ * manager.onTelemetry((event) => {
627
+ * console.log(`[${event.type}] ${event.provider} - wait: ${event.waitTimeMs}ms`);
628
+ * });
629
+ * ```
630
+ */
631
+ onTelemetry(hook) {
632
+ this.telemetryHooks.push(hook);
633
+ }
634
+ /**
635
+ * Reset the manager (for testing or recovery)
636
+ *
637
+ * WARNING: Only use when you're sure no executions are running
638
+ */
639
+ reset() {
640
+ if (this.globalActiveCount > 0 || this.queue.length > 0) {
641
+ console.warn(
642
+ `[ProviderAwareResourceManager] reset() called with ${this.globalActiveCount} active slots and ${this.queue.length} queued requests \u2014 potential race condition`
643
+ );
644
+ }
645
+ const queuedEntries = this.queue.splice(0);
646
+ for (const entry of queuedEntries) {
647
+ entry.reject(new Error("Resource acquisition cancelled by manager reset"));
648
+ }
649
+ this.globalActiveCount = 0;
650
+ this.globalMaxConcurrent = this.configuredGlobalMaxConcurrent;
651
+ this.lastBackpressureUpdatedAt = Date.now();
652
+ this.lastBackpressureDecision = {
653
+ recommendedGlobalConcurrency: this.configuredGlobalMaxConcurrent,
654
+ backpressureActive: false,
655
+ reason: "reset to baseline",
656
+ pressureLevel: "healthy"
657
+ };
658
+ this.globalAvgHoldMs = 6e4;
659
+ const providerIds = Array.from(this.providerActiveCounts.keys());
660
+ for (const provider of providerIds) {
661
+ this.providerActiveCounts.set(provider, 0);
662
+ this.providerUsageHistory.set(provider, 0);
663
+ this.providerAvgHoldMs.set(provider, 6e4);
664
+ }
665
+ this.lastProviderServiced = null;
666
+ }
667
+ // ============================================================================
668
+ // Private Methods
669
+ // ============================================================================
670
+ /**
671
+ * Configured baseline max for a provider (not temporary effective/penalty),
672
+ * bounded by any correctness ceiling.
673
+ *
674
+ * The hard cap is applied here — not only in getEffectiveProviderLimit — so
675
+ * group reservation (clampProvidersToBaselineCapacity) never reserves slots
676
+ * that acquisition can never grant, which would queue a group until timeout.
677
+ */
678
+ getConfiguredProviderBaseline(provider) {
679
+ const baseline = this.providerLimits.get(provider) ?? getProviderConcurrencyBaseline(provider);
680
+ const hardCap = this.providerHardCaps.get(provider);
681
+ return hardCap === void 0 ? baseline : Math.min(baseline, hardCap);
682
+ }
683
+ /**
684
+ * Clamp an outer competition reservation to configured baselines so oversized
685
+ * variant lists remain runnable. Overflow beyond the clamp is not reserved
686
+ * (callers serialize that work). Never produces a group larger than baseline
687
+ * global or per-provider capacity.
688
+ *
689
+ * - Per provider: at most configured baseline slots (order preserved)
690
+ * - Total: at most configured global max
691
+ * - Each reserved entry keeps its actual provider association
692
+ */
693
+ clampProvidersToBaselineCapacity(providers) {
694
+ const globalMax = this.configuredGlobalMaxConcurrent;
695
+ const perProviderTaken = /* @__PURE__ */ new Map();
696
+ const clamped = [];
697
+ for (const provider of providers) {
698
+ if (clamped.length >= globalMax) {
699
+ break;
700
+ }
701
+ const baseline = Math.max(0, this.getConfiguredProviderBaseline(provider));
702
+ const taken = perProviderTaken.get(provider) ?? 0;
703
+ if (taken >= baseline) {
704
+ continue;
705
+ }
706
+ clamped.push(provider);
707
+ perProviderTaken.set(provider, taken + 1);
708
+ }
709
+ return clamped;
710
+ }
711
+ /**
712
+ * Whether the full group fits current effective capacity without taking any slots.
713
+ */
714
+ canGrantGroup(providers) {
715
+ let simulatedGlobal = this.globalActiveCount;
716
+ const simulatedProvider = new Map(this.providerActiveCounts);
717
+ for (const provider of providers) {
718
+ const providerLimit = this.getEffectiveProviderLimit(provider);
719
+ const providerActive = simulatedProvider.get(provider) ?? 0;
720
+ if (providerActive >= providerLimit) {
721
+ return false;
722
+ }
723
+ if (simulatedGlobal >= this.globalMaxConcurrent) {
724
+ return false;
725
+ }
726
+ simulatedProvider.set(provider, providerActive + 1);
727
+ simulatedGlobal += 1;
728
+ }
729
+ return true;
730
+ }
731
+ /**
732
+ * Atomically grant every slot in the group, or return null without holding any.
733
+ * Never leaves partial holds.
734
+ */
735
+ tryAcquireGroup(providers, waitTimeMs = 0) {
736
+ if (!this.canGrantGroup(providers)) {
737
+ return null;
738
+ }
739
+ const acquiredAt = Date.now();
740
+ const handles = [];
741
+ for (const provider of providers) {
742
+ this.globalActiveCount++;
743
+ const providerActive = this.providerActiveCounts.get(provider) ?? 0;
744
+ this.providerActiveCounts.set(provider, providerActive + 1);
745
+ this.updateUsageHistory(provider);
746
+ let released = false;
747
+ const release = async () => {
748
+ if (released) {
749
+ return;
750
+ }
751
+ released = true;
752
+ await this.releaseInternal(provider, acquiredAt);
753
+ };
754
+ handles.push({
755
+ provider,
756
+ release,
757
+ acquiredAt
758
+ });
759
+ this.emitTelemetry({
760
+ type: "resource_acquired",
761
+ provider,
762
+ waitTimeMs,
763
+ status: this.getStatus(),
764
+ timestamp: acquiredAt
765
+ });
766
+ }
767
+ return handles;
768
+ }
769
+ /**
770
+ * Internal release implementation
771
+ */
772
+ async releaseInternal(provider, acquiredAt) {
773
+ const currentActive = this.providerActiveCounts.get(provider) ?? 0;
774
+ if (currentActive <= 0) {
775
+ throw new Error(
776
+ `Cannot release ${provider} - no active executions (possible double-release)`
777
+ );
778
+ }
779
+ if (this.globalActiveCount <= 0) {
780
+ throw new Error("Cannot release - no global active executions (possible double-release)");
781
+ }
782
+ this.globalActiveCount--;
783
+ this.providerActiveCounts.set(provider, currentActive - 1);
784
+ const holdTimeMs = Date.now() - acquiredAt;
785
+ this.updateHoldTimeEstimates(provider, holdTimeMs);
786
+ this.emitTelemetry({
787
+ type: "resource_released",
788
+ provider,
789
+ waitTimeMs: holdTimeMs,
790
+ status: this.getStatus(),
791
+ timestamp: Date.now()
792
+ });
793
+ this.processQueue();
794
+ }
795
+ /**
796
+ * Effective per-provider capacity for the next acquisition decision.
797
+ *
798
+ * Composed rather than minimum-clamped, because the three inputs answer three
799
+ * different questions and only one of them is an upper bound on operator
800
+ * intent:
801
+ *
802
+ * baseline — configured capacity for THIS host (override, else shipped
803
+ * default). An override replaces the default in both directions;
804
+ * clamping it downward against the default is what previously
805
+ * made every host overlay and `--provider-limit` inert.
806
+ * hard cap — correctness ceiling (concurrency would be unsafe, not merely
807
+ * expensive). Never raisable by configuration.
808
+ * penalty — live rate-limit throttle, one-way down, decays on its own.
809
+ *
810
+ * Penalty is applied to the capped baseline so an operator who raised capacity
811
+ * is still throttled proportionally by an observed 429 instead of having the
812
+ * override discarded outright.
813
+ */
814
+ getEffectiveProviderLimit(provider) {
815
+ return applyProviderConcurrencyPenalty(provider, this.getConfiguredProviderBaseline(provider));
816
+ }
817
+ /**
818
+ * Compute a queue-wait ceiling for a stage that is about to be enqueued for
819
+ * `provider`, given the number of same-provider stages dispatched together in
820
+ * the same wave (`coDispatchedCount`).
821
+ *
822
+ * A flat ceiling (e.g. one variant duration) false-fails the back of a large
823
+ * same-provider wave: with provider limit N and W co-dispatched stages, a
824
+ * stage at the back waits up to ceil(W / N) variant durations before it can
825
+ * even start. This scales the ceiling by that batch depth so a legitimately
826
+ * queued stage is not failed while earlier stages are still running, while
827
+ * still bounding the wait so a genuine leak/deadlock is eventually surfaced.
828
+ *
829
+ * @param perVariantMs The expected upper bound on a single variant's hold time.
830
+ * @param coDispatchedCount Number of stages (incl. this one) dispatched together for this provider.
831
+ * @param totalWaveCount Total stages dispatched together across ALL providers in this wave.
832
+ * When omitted, defaults to coDispatchedCount (provider-only sizing).
833
+ */
834
+ computeQueueWaitCeilingMs(provider, perVariantMs, coDispatchedCount, totalWaveCount) {
835
+ const providerLimit = Math.max(1, this.getEffectiveProviderLimit(provider));
836
+ const globalLimit = Math.max(1, this.globalMaxConcurrent);
837
+ const providerWidth = Math.min(providerLimit, globalLimit);
838
+ const providerBatches = Math.ceil(Math.max(1, coDispatchedCount) / providerWidth);
839
+ const waveCount = Math.max(coDispatchedCount, totalWaveCount ?? coDispatchedCount);
840
+ const globalBatches = Math.ceil(Math.max(1, waveCount) / globalLimit);
841
+ const batches = Math.max(1, providerBatches, globalBatches);
842
+ return perVariantMs * (batches + 1);
843
+ }
844
+ updateHoldTimeEstimates(provider, holdTimeMs) {
845
+ const boundedHoldMs = Math.max(250, Math.min(holdTimeMs, 30 * 60 * 1e3));
846
+ const currentProviderAvg = this.providerAvgHoldMs.get(provider) ?? 6e4;
847
+ const nextProviderAvg = Math.round(
848
+ currentProviderAvg + this.holdTimeEwmaAlpha * (boundedHoldMs - currentProviderAvg)
849
+ );
850
+ this.providerAvgHoldMs.set(provider, nextProviderAvg);
851
+ this.globalAvgHoldMs = Math.round(
852
+ this.globalAvgHoldMs + this.holdTimeEwmaAlpha * (boundedHoldMs - this.globalAvgHoldMs)
853
+ );
854
+ }
855
+ /**
856
+ * Process the queue based on fairness mode
857
+ *
858
+ * Attempts to satisfy queued acquisitions in priority order.
859
+ * Single entries use tryAcquire; group entries are granted only when the
860
+ * full group fits (atomic, no partial holds). Runs synchronously to prevent
861
+ * race conditions.
862
+ */
863
+ processQueue() {
864
+ if (this.queue.length === 0) {
865
+ return;
866
+ }
867
+ let madeProgress = true;
868
+ while (madeProgress && this.queue.length > 0) {
869
+ madeProgress = false;
870
+ this.sortQueueByFairness();
871
+ for (let index = 0; index < this.queue.length; ) {
872
+ const entry = this.queue[index];
873
+ if (!entry) {
874
+ this.queue.splice(index, 1);
875
+ madeProgress = true;
876
+ continue;
877
+ }
878
+ if (entry.signal?.aborted) {
879
+ this.queue.splice(index, 1);
880
+ entry.reject(new Error("Acquisition aborted while queued"));
881
+ madeProgress = true;
882
+ continue;
883
+ }
884
+ if (entry.providers && entry.providers.length > 0 && entry.resolveGroup) {
885
+ const waitTimeMs = Date.now() - entry.queuedAt;
886
+ const handles = this.tryAcquireGroup(entry.providers, waitTimeMs);
887
+ if (handles) {
888
+ this.queue.splice(index, 1);
889
+ entry.resolveGroup(handles);
890
+ madeProgress = true;
891
+ if (this.globalActiveCount >= this.globalMaxConcurrent) {
892
+ return;
893
+ }
894
+ continue;
895
+ }
896
+ index++;
897
+ continue;
898
+ }
899
+ const handle = this.tryAcquire(entry.provider);
900
+ if (handle) {
901
+ this.queue.splice(index, 1);
902
+ entry.resolve(handle);
903
+ madeProgress = true;
904
+ if (this.globalActiveCount >= this.globalMaxConcurrent) {
905
+ return;
906
+ }
907
+ continue;
908
+ }
909
+ index++;
910
+ }
911
+ }
912
+ }
913
+ /**
914
+ * Sort queue based on fairness mode
915
+ */
916
+ sortQueueByFairness() {
917
+ switch (this.fairnessMode) {
918
+ case "fifo":
919
+ break;
920
+ case "weighted-fair": {
921
+ this.queue.sort((a, b) => {
922
+ const weightDiff = (a.weight ?? 0) - (b.weight ?? 0);
923
+ if (weightDiff !== 0) return weightDiff;
924
+ return a.queuedAt - b.queuedAt;
925
+ });
926
+ break;
927
+ }
928
+ case "strict-fair": {
929
+ if (this.lastProviderServiced) {
930
+ const lastProviderEntries = this.queue.filter(
931
+ (e) => e.provider === this.lastProviderServiced
932
+ );
933
+ const otherEntries = this.queue.filter((e) => e.provider !== this.lastProviderServiced);
934
+ this.queue.length = 0;
935
+ this.queue.push(...otherEntries, ...lastProviderEntries);
936
+ }
937
+ break;
938
+ }
939
+ }
940
+ }
941
+ /**
942
+ * Calculate weight for weighted-fair scheduling
943
+ *
944
+ * Lower weight = higher priority
945
+ * Providers with less recent usage get lower weights (higher priority)
946
+ */
947
+ calculateWeight(provider) {
948
+ const usage = this.providerUsageHistory.get(provider) ?? 0;
949
+ const totalUsage = Array.from(this.providerUsageHistory.values()).reduce(
950
+ (sum, count) => sum + count,
951
+ 0
952
+ );
953
+ if (totalUsage === 0) return 0;
954
+ return Math.round(usage / totalUsage * 100);
955
+ }
956
+ /**
957
+ * Update usage history for weighted-fair mode
958
+ */
959
+ updateUsageHistory(provider) {
960
+ const current = this.providerUsageHistory.get(provider) ?? 0;
961
+ this.providerUsageHistory.set(provider, current + 1);
962
+ this.lastProviderServiced = provider;
963
+ const usageCounts = Array.from(this.providerUsageHistory.values());
964
+ const totalUsage = usageCounts.reduce((sum, count) => sum + count, 0);
965
+ if (totalUsage > this.usageHistoryWindow) {
966
+ const providerIds = Array.from(this.providerUsageHistory.keys());
967
+ for (const p of providerIds) {
968
+ const count = this.providerUsageHistory.get(p) ?? 0;
969
+ this.providerUsageHistory.set(
970
+ p,
971
+ Math.floor(count * this.usageHistoryWindow / totalUsage)
972
+ );
973
+ }
974
+ }
975
+ }
976
+ /**
977
+ * Emit telemetry event to registered hooks
978
+ */
979
+ emitTelemetry(event) {
980
+ if (!this.enableTelemetry) return;
981
+ for (const hook of this.telemetryHooks) {
982
+ try {
983
+ hook(event);
984
+ } catch (error) {
985
+ console.error("[ProviderAwareResourceManager] Telemetry hook error:", error);
986
+ }
987
+ }
988
+ }
989
+ };
990
+ function getDynamicGlobalConcurrency() {
991
+ const totalMemoryGB = totalmem() / 1024 ** 3;
992
+ const envTier = process.env.POETIC_RESOURCE_TIER;
993
+ let tier;
994
+ if (envTier && ["minimal", "standard", "performance", "power", "ultra"].includes(envTier)) {
995
+ tier = envTier;
996
+ } else if (totalMemoryGB < 8) {
997
+ tier = "minimal";
998
+ } else if (totalMemoryGB < 16) {
999
+ tier = "standard";
1000
+ } else if (totalMemoryGB < 32) {
1001
+ tier = "performance";
1002
+ } else if (totalMemoryGB < 64) {
1003
+ tier = "power";
1004
+ } else {
1005
+ tier = "ultra";
1006
+ }
1007
+ const limits = {
1008
+ minimal: 8,
1009
+ standard: 15,
1010
+ performance: 25,
1011
+ power: 40,
1012
+ ultra: 50
1013
+ };
1014
+ return limits[tier];
1015
+ }
1016
+ function createProviderAwareResourceManager(config) {
1017
+ return new ProviderAwareResourceManager(config);
1018
+ }
1019
+ function createDynamicResourceManager(configOverrides) {
1020
+ const dynamicGlobalLimit = getDynamicGlobalConcurrency();
1021
+ const config = {
1022
+ globalMaxConcurrent: configOverrides?.globalMaxConcurrent ?? dynamicGlobalLimit,
1023
+ fairnessMode: configOverrides?.fairnessMode ?? "weighted-fair",
1024
+ enableTelemetry: configOverrides?.enableTelemetry ?? true,
1025
+ providerLimits: configOverrides?.providerLimits,
1026
+ // Correctness ceilings must never be silently dropped on the way through a
1027
+ // factory: providerLimits is authoritative, so losing the caps here would
1028
+ // let an override raise a provider past a safety boundary.
1029
+ providerHardCaps: configOverrides?.providerHardCaps
1030
+ };
1031
+ return new ProviderAwareResourceManager(config);
1032
+ }
1033
+ var DEFAULT_GLOBAL_CONCURRENCY = getDynamicGlobalConcurrency();
1034
+
1035
+ export {
1036
+ captureConcurrencyBackpressureSnapshot,
1037
+ ProviderAwareResourceManager,
1038
+ createProviderAwareResourceManager,
1039
+ createDynamicResourceManager,
1040
+ DEFAULT_GLOBAL_CONCURRENCY
1041
+ };
1042
+ //# sourceMappingURL=chunk-L7E6XCRA.js.map