@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,2175 @@
1
+ import {
2
+ assertProviderReady
3
+ } from "./chunk-AURFMVCD.js";
4
+ import {
5
+ getActiveProfilePath,
6
+ loadActiveProfileStrict,
7
+ normalizeLegacyIntoCanonical,
8
+ profileToPoeticConfig,
9
+ readProviderModelFromEnv
10
+ } from "./chunk-SZ7DL357.js";
11
+ import {
12
+ PoeticConfigReadError,
13
+ poeticConfigCandidates,
14
+ readCanonicalPoeticConfig,
15
+ selectedPoeticConfigCandidate
16
+ } from "./chunk-G36W2T2S.js";
17
+ import {
18
+ ENABLED_PROVIDER_IDS
19
+ } from "./chunk-2VSQMRCB.js";
20
+ import {
21
+ InvalidExplicitConfigError,
22
+ ProviderRegistry,
23
+ combineCacheFingerprints,
24
+ fingerprintEnvironment,
25
+ fingerprintFile,
26
+ fingerprintFiles
27
+ } from "./chunk-AT4TNPWW.js";
28
+ import {
29
+ getConfigPaths,
30
+ resolveProvidersConfigPath
31
+ } from "./chunk-L6OM4A22.js";
32
+ import {
33
+ getUserConfigDir,
34
+ getUserPreferencesPath
35
+ } from "./chunk-UUH2RVKS.js";
36
+ import {
37
+ emitWarning
38
+ } from "./chunk-EJGCZGUF.js";
39
+
40
+ // src/core/config/resolution-engine.ts
41
+ import { existsSync } from "fs";
42
+ import { homedir } from "os";
43
+ import { join } from "path";
44
+
45
+ // src/core/config/judge-coherence.ts
46
+ var JUDGE_SPECIFICITY = {
47
+ cli: 100,
48
+ env: 90,
49
+ /** Per-judge config block: `judge.<tier>.{provider,model}` */
50
+ perJudge: 80,
51
+ /** All-judge config: root `judge.{provider,model}` */
52
+ allJudge: 70,
53
+ /** Legacy `defaults.judge.{provider,model}` */
54
+ legacyDefaults: 60,
55
+ profile: 55,
56
+ /** Compete shorthand plan / `--judge-models` role spec (provider-coherent by construction) */
57
+ plan: 30,
58
+ /** Derived registry/role/default values */
59
+ derived: 0
60
+ };
61
+ function judgeRoleForTier(judgeType) {
62
+ return judgeType === "multi-lens" ? "quality" : "judge_primary";
63
+ }
64
+ function coherentJudgeModelForProvider(provider, judgeType, registryOverride) {
65
+ const primaryRole = judgeRoleForTier(judgeType);
66
+ const roleCandidates = primaryRole === "judge_primary" ? ["judge_primary", "quality"] : [primaryRole];
67
+ try {
68
+ for (const candidate of roleCandidates) {
69
+ const roleModel = ProviderRegistry.getModelForRole(provider, candidate, registryOverride);
70
+ if (roleModel) return roleModel;
71
+ }
72
+ const defaultModel = ProviderRegistry.getProviderConfig(provider, registryOverride).models.default;
73
+ if (defaultModel) {
74
+ return ProviderRegistry.resolveModel(provider, defaultModel, registryOverride);
75
+ }
76
+ return void 0;
77
+ } catch {
78
+ return void 0;
79
+ }
80
+ }
81
+ function judgeModelMatchesProvider(provider, model, registryOverride) {
82
+ try {
83
+ ProviderRegistry.resolveModel(provider, model, registryOverride);
84
+ return true;
85
+ } catch {
86
+ return false;
87
+ }
88
+ }
89
+ function inferProviderFromRegistryOwnership(model, registryOverride) {
90
+ const trimmed = model.trim();
91
+ if (!trimmed) return void 0;
92
+ const owners = [];
93
+ for (const provider of ProviderRegistry.getEnabledProviders(registryOverride)) {
94
+ let config;
95
+ try {
96
+ config = ProviderRegistry.getProviderConfig(provider.id, registryOverride);
97
+ } catch {
98
+ continue;
99
+ }
100
+ const availableIds = config.models.available?.map((info) => info.id) ?? [];
101
+ const mappingKeys = Object.keys(config.models.mappings ?? {});
102
+ if (availableIds.includes(trimmed) || mappingKeys.includes(trimmed)) {
103
+ owners.push(provider.id);
104
+ }
105
+ }
106
+ return owners.length === 1 ? owners[0] : void 0;
107
+ }
108
+ function reconcileJudgePair(provider, model, judgeType, registryOverride) {
109
+ if (!model || !model.value || model.value === "auto") {
110
+ return { provider: provider.value, model: model?.value, changed: "none" };
111
+ }
112
+ if (model.specificity > provider.specificity) {
113
+ const owner = inferProviderFromRegistryOwnership(model.value, registryOverride);
114
+ if (owner && owner !== provider.value) {
115
+ return { provider: owner, model: model.value, changed: "provider" };
116
+ }
117
+ }
118
+ if (judgeModelMatchesProvider(provider.value, model.value, registryOverride)) {
119
+ return { provider: provider.value, model: model.value, changed: "none" };
120
+ }
121
+ if (model.specificity > provider.specificity) {
122
+ const owner = inferProviderFromRegistryOwnership(model.value, registryOverride);
123
+ if (owner) {
124
+ return { provider: owner, model: model.value, changed: "provider" };
125
+ }
126
+ }
127
+ const coherent = coherentJudgeModelForProvider(provider.value, judgeType, registryOverride);
128
+ if (coherent) {
129
+ return { provider: provider.value, model: coherent, changed: "model" };
130
+ }
131
+ return { provider: provider.value, model: "auto", changed: "model-cleared" };
132
+ }
133
+
134
+ // src/core/config/resolution-engine.ts
135
+ var PROVIDER_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{0,63}$/;
136
+ function getConfigPaths2(cwd) {
137
+ const paths = getConfigPaths(cwd);
138
+ return {
139
+ ...paths,
140
+ projectConfigFile: selectedPoeticConfigCandidate(paths.projectConfigFile),
141
+ userConfigFile: selectedPoeticConfigCandidate(paths.userConfigFile)
142
+ };
143
+ }
144
+ var InvalidProviderModelError = class extends Error {
145
+ constructor(message) {
146
+ super(message);
147
+ this.name = "InvalidProviderModelError";
148
+ }
149
+ };
150
+ var EXECUTION_TRANSPORT_MODES = /* @__PURE__ */ new Set(["auto", "headless", "tmux-exec", "interactive"]);
151
+ var CONFIGURABLE_EXECUTION_TRANSPORT_PROVIDERS = new Set(ENABLED_PROVIDER_IDS);
152
+ function normalizeProviderId(provider) {
153
+ if (typeof provider !== "string" || provider.length === 0) {
154
+ return "";
155
+ }
156
+ const normalized = provider.toLowerCase();
157
+ if (normalized === "cursor-cli") return "cursor";
158
+ if (normalized === "copilot-cli") return "copilot";
159
+ if (normalized === "anti-gravity" || normalized === "antigravity-cli" || normalized === "agy") {
160
+ return "antigravity";
161
+ }
162
+ if (normalized === "openai" || normalized === "gpt") {
163
+ return "codex";
164
+ }
165
+ return normalized;
166
+ }
167
+ function normalizePlanExecuteBlockerMode(value) {
168
+ if (typeof value !== "string") {
169
+ return void 0;
170
+ }
171
+ const normalized = value.trim().toLowerCase();
172
+ if (normalized === "non-interactive" || normalized === "interactive") {
173
+ return normalized;
174
+ }
175
+ return void 0;
176
+ }
177
+ function normalizeExecutionTransportMode(value) {
178
+ if (typeof value !== "string") {
179
+ return void 0;
180
+ }
181
+ const normalized = value.trim().toLowerCase();
182
+ if (normalized === "interactive") {
183
+ return "tmux-exec";
184
+ }
185
+ if (EXECUTION_TRANSPORT_MODES.has(normalized)) {
186
+ return normalized;
187
+ }
188
+ return void 0;
189
+ }
190
+ function resolveDurablePlanExecuteBlockerMode(value, sourcePath) {
191
+ if (value === void 0) {
192
+ return void 0;
193
+ }
194
+ const normalized = normalizePlanExecuteBlockerMode(value);
195
+ if (normalized) {
196
+ return normalized;
197
+ }
198
+ throw new Error(
199
+ `Invalid planExecute.blockerMode at ${sourcePath}: ${String(value)}. Expected non-interactive or interactive. questions-only is only valid as a CLI flag.`
200
+ );
201
+ }
202
+ function resolveDurableExecutionTransportMode(value, sourcePath) {
203
+ if (value === void 0) {
204
+ return void 0;
205
+ }
206
+ const normalized = normalizeExecutionTransportMode(value);
207
+ if (normalized) {
208
+ return normalized;
209
+ }
210
+ throw new Error(
211
+ `Invalid execution.transport value at ${sourcePath}: ${String(value)}. Expected auto, headless, or tmux-exec (interactive is a deprecated alias).`
212
+ );
213
+ }
214
+ function validateExecutionTransportProviderMap(providers, sourcePath) {
215
+ if (!providers) return;
216
+ for (const provider of Object.keys(providers)) {
217
+ if (!CONFIGURABLE_EXECUTION_TRANSPORT_PROVIDERS.has(provider)) {
218
+ throw new Error(
219
+ `Invalid execution.transport.providers key at ${sourcePath}: ${provider}. Known providers: ${[...CONFIGURABLE_EXECUTION_TRANSPORT_PROVIDERS].sort().join(", ")}.`
220
+ );
221
+ }
222
+ }
223
+ }
224
+ function inferProviderFromModel(model, cwd) {
225
+ if (!model || model.trim().length === 0) {
226
+ return void 0;
227
+ }
228
+ const trimmed = model.trim();
229
+ const colonIdx = trimmed.indexOf(":");
230
+ if (colonIdx > 0) {
231
+ const provider = normalizeProviderId(trimmed.slice(0, colonIdx));
232
+ if (provider.length > 0) {
233
+ return provider;
234
+ }
235
+ }
236
+ return inferProviderFromRegistryOwnership(trimmed, loadProviderRegistryForCwd(cwd));
237
+ }
238
+ function validateModelForProvider(provider, model, sourcePath, cwd) {
239
+ try {
240
+ ProviderRegistry.resolveModel(provider, model, loadProviderRegistryForCwd(cwd));
241
+ } catch (error) {
242
+ const detail = error instanceof Error ? error.message : String(error);
243
+ throw new InvalidProviderModelError(
244
+ `Invalid model '${model}' for provider '${provider}' at ${sourcePath}. Configure a matching provider explicitly or use a model supported by '${provider}'. ${detail}`
245
+ );
246
+ }
247
+ }
248
+ function resolveJudgeType(cli, cwd = process.cwd()) {
249
+ const paths = getConfigPaths2(cwd);
250
+ const allowed = /* @__PURE__ */ new Set(["ai", "multi-lens", "multi-agent"]);
251
+ const normalizeJudgeType = (value) => {
252
+ if (!value) return void 0;
253
+ const normalized = value.trim().toLowerCase();
254
+ if (normalized === "hybrid") return "multi-lens";
255
+ if (normalized === "agentic") return "multi-agent";
256
+ return allowed.has(normalized) ? normalized : void 0;
257
+ };
258
+ const cliJudgeType = normalizeJudgeType(cli?.judgeType);
259
+ if (cliJudgeType) {
260
+ return { value: cliJudgeType, source: "cli", sourcePath: "cli:--judge-type" };
261
+ }
262
+ const envType = normalizeJudgeType(process.env.POETIC_JUDGE_TYPE);
263
+ if (envType) {
264
+ return {
265
+ value: envType,
266
+ source: "env",
267
+ sourcePath: "env:POETIC_JUDGE_TYPE"
268
+ };
269
+ }
270
+ const activeProfile = getActiveProfile();
271
+ if (activeProfile?.defaults?.judge?.type) {
272
+ const profileType = normalizeJudgeType(activeProfile.defaults.judge.type);
273
+ if (profileType) {
274
+ return {
275
+ value: profileType,
276
+ source: "profile",
277
+ sourcePath: `profile:${activeProfile.name}#defaults.judge.type`
278
+ };
279
+ }
280
+ }
281
+ const projectConfig = loadProjectConfig(cwd);
282
+ if (projectConfig?.defaults?.judge?.type) {
283
+ return {
284
+ value: projectConfig.defaults.judge.type,
285
+ source: "project",
286
+ sourcePath: `${paths.projectConfigFile}#defaults.judge.type`
287
+ };
288
+ }
289
+ const userConfig = loadUserConfig(cwd);
290
+ if (userConfig?.defaults?.judge?.type) {
291
+ return {
292
+ value: userConfig.defaults.judge.type,
293
+ source: "user-config",
294
+ sourcePath: `${paths.userConfigFile}#defaults.judge.type`
295
+ };
296
+ }
297
+ warnIfLegacyConfigExists(cwd);
298
+ return { value: "ai", source: "fallback" };
299
+ }
300
+ function resolveConfigExecutionTransport(config, provider, source, configPath) {
301
+ const transport = config?.execution?.transport;
302
+ if (!transport) return void 0;
303
+ validateExecutionTransportProviderMap(
304
+ transport.providers,
305
+ `${configPath}#execution.transport.providers`
306
+ );
307
+ if (!CONFIGURABLE_EXECUTION_TRANSPORT_PROVIDERS.has(provider)) {
308
+ return void 0;
309
+ }
310
+ const providerValue = resolveDurableExecutionTransportMode(
311
+ transport.providers?.[provider],
312
+ `${configPath}#execution.transport.providers.${provider}`
313
+ );
314
+ if (providerValue) {
315
+ return {
316
+ value: providerValue,
317
+ source,
318
+ sourcePath: `${configPath}#execution.transport.providers.${provider}`
319
+ };
320
+ }
321
+ const defaultValue = resolveDurableExecutionTransportMode(
322
+ transport.default,
323
+ `${configPath}#execution.transport.default`
324
+ );
325
+ if (defaultValue) {
326
+ return {
327
+ value: defaultValue,
328
+ source,
329
+ sourcePath: `${configPath}#execution.transport.default`
330
+ };
331
+ }
332
+ return void 0;
333
+ }
334
+ var unifiedConfigCache = /* @__PURE__ */ new Map();
335
+ var warnedKeys = /* @__PURE__ */ new Set();
336
+ var legacyWarningShown = false;
337
+ var activeProfileCache = null;
338
+ function getActiveProfile() {
339
+ const profilePath = getActiveProfilePath();
340
+ const fingerprint = combineCacheFingerprints(
341
+ fingerprintEnvironment(
342
+ process.env,
343
+ (name) => ["POETIC_ACTIVE_PROFILE", "POETIC_CONFIG_DIR", "POETIC_PROFILES_DIR"].includes(name)
344
+ ),
345
+ fingerprintFiles([getUserPreferencesPath(), ...profilePath ? [profilePath] : []])
346
+ );
347
+ if (activeProfileCache === null || activeProfileCache.fingerprint !== fingerprint) {
348
+ let profile;
349
+ try {
350
+ profile = loadActiveProfileStrict();
351
+ } catch (error) {
352
+ throw new PoeticConfigReadError(
353
+ profilePath ?? "active profile",
354
+ "unreadable",
355
+ [{ message: error instanceof Error ? error.message : String(error) }],
356
+ error
357
+ );
358
+ }
359
+ const value = profile ? { ...profile, ...profileToPoeticConfig(profile) } : null;
360
+ activeProfileCache = { value, fingerprint };
361
+ }
362
+ return activeProfileCache.value ?? null;
363
+ }
364
+ function warnIfLegacyConfigExists(cwd = process.cwd()) {
365
+ if (legacyWarningShown) return;
366
+ legacyWarningShown = true;
367
+ const legacyPaths = /* @__PURE__ */ new Set([
368
+ join(homedir(), ".config", "poetic", "defaults.yaml"),
369
+ join(cwd, "poetic.json"),
370
+ join(cwd, ".poetic", "config", "poetic.json")
371
+ ]);
372
+ if (process.env.XDG_CONFIG_HOME?.trim()) {
373
+ legacyPaths.add(join(process.env.XDG_CONFIG_HOME.trim(), "poetic", "defaults.yaml"));
374
+ }
375
+ legacyPaths.add(join(getUserConfigDir(), "defaults.yaml"));
376
+ if (process.env.POETIC_DEFAULTS_PATH?.trim()) {
377
+ legacyPaths.add(process.env.POETIC_DEFAULTS_PATH.trim());
378
+ }
379
+ for (const p of legacyPaths) {
380
+ if (existsSync(p)) {
381
+ emitWarning(
382
+ "CFG-LEGACY",
383
+ {
384
+ taskId: "resolution-engine",
385
+ subsystem: "config",
386
+ executionPhase: "setup"
387
+ },
388
+ {
389
+ severity: "WARN" /* WARN */,
390
+ metadata: {
391
+ message: `Found deprecated config file: ${p}. This file is no longer read. Move settings to the appropriate poetic.config.jsonc file.`,
392
+ path: p,
393
+ operation: "warnIfLegacyConfigExists"
394
+ }
395
+ }
396
+ );
397
+ }
398
+ }
399
+ }
400
+ function clearConfigCaches() {
401
+ unifiedConfigCache.clear();
402
+ warnedKeys.clear();
403
+ legacyWarningShown = false;
404
+ activeProfileCache = null;
405
+ ProviderRegistry.reload();
406
+ }
407
+ function normalizeLoadedPoeticConfig(configData) {
408
+ return normalizeLegacyIntoCanonical(configData);
409
+ }
410
+ function loadPoeticConfigFile(configPath) {
411
+ const fingerprint = fingerprintFile(configPath);
412
+ const cached = unifiedConfigCache.get(configPath);
413
+ if (cached && cached.fingerprint === fingerprint) {
414
+ if (cached.error) throw cached.error;
415
+ return cached.value ?? null;
416
+ }
417
+ const result = readCanonicalPoeticConfig(configPath);
418
+ if (result.status === "missing") {
419
+ unifiedConfigCache.set(configPath, {
420
+ value: null,
421
+ error: null,
422
+ fingerprint
423
+ });
424
+ return null;
425
+ }
426
+ if (result.status === "invalid") {
427
+ unifiedConfigCache.set(configPath, {
428
+ value: null,
429
+ error: result.error,
430
+ fingerprint
431
+ });
432
+ throw result.error;
433
+ }
434
+ const normalizedConfig = normalizeLoadedPoeticConfig(
435
+ result.config
436
+ );
437
+ unifiedConfigCache.set(configPath, {
438
+ value: normalizedConfig,
439
+ error: null,
440
+ fingerprint
441
+ });
442
+ return normalizedConfig;
443
+ }
444
+ function loadPoeticConfigFromCandidates(configPath) {
445
+ for (const candidate of poeticConfigCandidates(configPath)) {
446
+ const config = loadPoeticConfigFile(candidate);
447
+ if (config) return config;
448
+ }
449
+ return null;
450
+ }
451
+ function loadUserConfig(cwd = process.cwd()) {
452
+ const { userConfigFile } = getConfigPaths2(cwd);
453
+ return loadPoeticConfigFromCandidates(userConfigFile);
454
+ }
455
+ function loadProjectConfig(cwd = process.cwd()) {
456
+ const { projectConfigFile } = getConfigPaths2(cwd);
457
+ return loadPoeticConfigFromCandidates(projectConfigFile);
458
+ }
459
+ function resolveAskConfig(cwd = process.cwd()) {
460
+ const userAsk = loadUserConfig(cwd)?.ask;
461
+ const projectAsk = loadProjectConfig(cwd)?.ask;
462
+ if (!userAsk && !projectAsk) return void 0;
463
+ return {
464
+ userPresets: userAsk?.presets,
465
+ projectPresets: projectAsk?.presets
466
+ };
467
+ }
468
+ function resolveProgressNarrationConfig(cwd = process.cwd()) {
469
+ const paths = getConfigPaths2(cwd);
470
+ const projectNarration = loadProjectConfig(cwd)?.progressNarration;
471
+ if (projectNarration) {
472
+ return {
473
+ value: projectNarration,
474
+ source: "project",
475
+ sourcePath: `${paths.projectConfigFile}#progressNarration`
476
+ };
477
+ }
478
+ const userNarration = loadUserConfig(cwd)?.progressNarration;
479
+ if (userNarration) {
480
+ return {
481
+ value: userNarration,
482
+ source: "user-config",
483
+ sourcePath: `${paths.userConfigFile}#progressNarration`
484
+ };
485
+ }
486
+ return void 0;
487
+ }
488
+ function warnOnce(key, message) {
489
+ if (warnedKeys.has(key)) return;
490
+ warnedKeys.add(key);
491
+ emitWarning(
492
+ "CFG-004",
493
+ {
494
+ taskId: "resolution-engine",
495
+ subsystem: "config",
496
+ executionPhase: "setup"
497
+ },
498
+ {
499
+ severity: "WARN" /* WARN */,
500
+ metadata: {
501
+ message
502
+ }
503
+ }
504
+ );
505
+ }
506
+ function getProviderEnvModel(provider) {
507
+ const envModel = readProviderModelFromEnv(provider);
508
+ if (!envModel) return null;
509
+ if (envModel.kind === "standardized") {
510
+ return { value: envModel.value, source: "env", sourcePath: `env:${envModel.key}` };
511
+ }
512
+ const standardizedKey = `POETIC_${provider.toUpperCase()}_DEFAULT_MODEL`;
513
+ warnOnce(envModel.key, `${envModel.key} is deprecated. Use ${standardizedKey} instead.`);
514
+ return { value: envModel.value, source: "env-legacy", sourcePath: `env-legacy:${envModel.key}` };
515
+ }
516
+ function loadProviderRegistryForCwd(cwd) {
517
+ return ProviderRegistry.load(void 0, cwd);
518
+ }
519
+ function checkDefaultProviderEnablement(providerValue, cwd = process.cwd()) {
520
+ const providerId = normalizeProviderId(providerValue.trim());
521
+ const registry = loadProviderRegistryForCwd(cwd);
522
+ const registryPath = resolveProvidersConfigPath({ cwd });
523
+ const providerConfig = registry.providers[providerId];
524
+ const enabledProviders = Object.values(registry.providers).filter((provider) => provider.enabled).sort((a, b) => a.order - b.order).map((provider) => provider.id);
525
+ return {
526
+ providerId,
527
+ providerKnown: Boolean(providerConfig),
528
+ providerEnabled: Boolean(providerConfig?.enabled),
529
+ knownProviders: Object.keys(registry.providers).sort(),
530
+ enabledProviders,
531
+ registryPath
532
+ };
533
+ }
534
+ var DefaultProviderUnusableError = class extends Error {
535
+ code = "DEFAULT_PROVIDER_UNUSABLE";
536
+ reason;
537
+ constructor(message, reason) {
538
+ super(message);
539
+ this.name = "DefaultProviderUnusableError";
540
+ this.reason = reason;
541
+ }
542
+ };
543
+ function assertDefaultProviderEnabled(resolved, cwd) {
544
+ const check = checkDefaultProviderEnablement(resolved.value, cwd);
545
+ if (!check.providerKnown) {
546
+ throw new DefaultProviderUnusableError(
547
+ `Invalid default provider '${check.providerId}' from ${resolved.sourcePath ?? resolved.source}: provider is not available in providers.yaml. Available enabled providers: ${check.enabledProviders.join(", ") || "(none)"}.`,
548
+ "unknown"
549
+ );
550
+ }
551
+ if (!check.providerEnabled) {
552
+ const source = resolved.sourcePath ?? resolved.source;
553
+ throw new DefaultProviderUnusableError(
554
+ `Invalid default provider '${check.providerId}' from ${source}: provider is disabled in ${check.registryPath}. Enable providers.${check.providerId}.enabled or choose an enabled provider.`,
555
+ "disabled"
556
+ );
557
+ }
558
+ return { ...resolved, value: check.providerId };
559
+ }
560
+ function resolveDefaultProvider(cli, cwd = process.cwd()) {
561
+ const paths = getConfigPaths2(cwd);
562
+ if (cli?.provider) {
563
+ return assertDefaultProviderEnabled({ value: cli.provider, source: "cli" }, cwd);
564
+ }
565
+ const envProvider = process.env.POETIC_DEFAULT_PROVIDER;
566
+ if (envProvider) {
567
+ const normalized = envProvider.toLowerCase().trim();
568
+ if (PROVIDER_ID_PATTERN.test(normalized)) {
569
+ return assertDefaultProviderEnabled(
570
+ {
571
+ value: normalized,
572
+ source: "env",
573
+ sourcePath: "env:POETIC_DEFAULT_PROVIDER"
574
+ },
575
+ cwd
576
+ );
577
+ }
578
+ throw new InvalidExplicitConfigError(
579
+ "Invalid POETIC_DEFAULT_PROVIDER: expected a provider id containing only letters, digits, underscores, or hyphens"
580
+ );
581
+ }
582
+ const activeProfile = getActiveProfile();
583
+ if (activeProfile?.defaults?.provider) {
584
+ const normalized = activeProfile.defaults.provider.toLowerCase().trim();
585
+ if (PROVIDER_ID_PATTERN.test(normalized)) {
586
+ return assertDefaultProviderEnabled(
587
+ {
588
+ value: normalized,
589
+ source: "profile",
590
+ sourcePath: `profile:${activeProfile.name}#defaults.provider`
591
+ },
592
+ cwd
593
+ );
594
+ }
595
+ throw new InvalidExplicitConfigError(
596
+ `Invalid default provider '${activeProfile.defaults.provider}' in active profile '${activeProfile.name}'`
597
+ );
598
+ }
599
+ const projectConfig = loadProjectConfig(cwd);
600
+ if (projectConfig?.defaults?.provider) {
601
+ return assertDefaultProviderEnabled(
602
+ {
603
+ value: projectConfig.defaults.provider,
604
+ source: "project",
605
+ sourcePath: `${paths.projectConfigFile}#defaults.provider`
606
+ },
607
+ cwd
608
+ );
609
+ }
610
+ const userConfig = loadUserConfig(cwd);
611
+ if (userConfig?.defaults?.provider) {
612
+ return assertDefaultProviderEnabled(
613
+ {
614
+ value: userConfig.defaults.provider,
615
+ source: "user-config",
616
+ sourcePath: `${paths.userConfigFile}#defaults.provider`
617
+ },
618
+ cwd
619
+ );
620
+ }
621
+ warnIfLegacyConfigExists(cwd);
622
+ const registryPath = resolveProvidersConfigPath({ cwd });
623
+ const registry = loadProviderRegistryForCwd(cwd);
624
+ const enabled = Object.values(registry.providers).filter((p) => p.enabled).sort((a, b) => a.order - b.order);
625
+ const first = enabled[0]?.id;
626
+ if (first) {
627
+ return {
628
+ value: first,
629
+ source: "registry",
630
+ sourcePath: `${registryPath}#providers.*.order`
631
+ };
632
+ }
633
+ throw new Error(
634
+ `Invalid provider registry at ${registryPath}: no providers are enabled. Enable at least one providers.<id>.enabled entry.`
635
+ );
636
+ }
637
+ var BUILT_IN_JUDGE_PLAN_PROVIDERS = /* @__PURE__ */ new Set(["claude", "codex"]);
638
+ var JUDGE_DEFAULT_PROVIDER = "claude";
639
+ function resolveDefaultJudgeProvider(cli, cwd = process.cwd()) {
640
+ const resolved = resolveDefaultProvider(cli, cwd);
641
+ if (BUILT_IN_JUDGE_PLAN_PROVIDERS.has(resolved.value)) {
642
+ return resolved;
643
+ }
644
+ return {
645
+ value: JUDGE_DEFAULT_PROVIDER,
646
+ source: "fallback",
647
+ sourcePath: "judge-default:built-in-plan"
648
+ };
649
+ }
650
+ async function resolveReadyDefaultProvider(cli, cwd = process.cwd()) {
651
+ const provider = resolveDefaultProvider(cli, cwd);
652
+ const readiness = await assertProviderReady(provider.value);
653
+ return { provider, readiness };
654
+ }
655
+ function resolveDefaultStrategy(cli, cwd = process.cwd()) {
656
+ const paths = getConfigPaths2(cwd);
657
+ if (cli?.strategy) {
658
+ return { value: cli.strategy, source: "cli" };
659
+ }
660
+ const envStrategy = process.env.POETIC_DEFAULT_STRATEGY;
661
+ if (envStrategy) {
662
+ return {
663
+ value: envStrategy.toLowerCase(),
664
+ source: "env",
665
+ sourcePath: "env:POETIC_DEFAULT_STRATEGY"
666
+ };
667
+ }
668
+ const activeProfile = getActiveProfile();
669
+ if (activeProfile?.defaults?.strategy) {
670
+ return {
671
+ value: activeProfile.defaults.strategy.toLowerCase(),
672
+ source: "profile",
673
+ sourcePath: `profile:${activeProfile.name}#defaults.strategy`
674
+ };
675
+ }
676
+ const projectConfig = loadProjectConfig(cwd);
677
+ if (projectConfig?.defaults?.strategy) {
678
+ return {
679
+ value: projectConfig.defaults.strategy,
680
+ source: "project",
681
+ sourcePath: `${paths.projectConfigFile}#defaults.strategy`
682
+ };
683
+ }
684
+ const userConfig = loadUserConfig(cwd);
685
+ if (userConfig?.defaults?.strategy) {
686
+ return {
687
+ value: userConfig.defaults.strategy,
688
+ source: "user-config",
689
+ sourcePath: `${paths.userConfigFile}#defaults.strategy`
690
+ };
691
+ }
692
+ warnIfLegacyConfigExists(cwd);
693
+ return { value: "conservative", source: "fallback" };
694
+ }
695
+ function resolveProviderModel(provider, cli, cwd = process.cwd()) {
696
+ const paths = getConfigPaths2(cwd);
697
+ const configuredModel = (value, source, sourcePath) => {
698
+ validateModelForProvider(provider, value, sourcePath, cwd);
699
+ return { value, source, sourcePath };
700
+ };
701
+ let defaultProviderCache;
702
+ const ownsUnscopedModel = () => {
703
+ if (defaultProviderCache === void 0) {
704
+ defaultProviderCache = resolveDefaultProvider(cli, cwd).value;
705
+ }
706
+ return defaultProviderCache === provider;
707
+ };
708
+ if (cli?.model) {
709
+ if (cli.provider === provider) {
710
+ return configuredModel(cli.model, "cli", "cli:--model");
711
+ }
712
+ if (!cli.provider && ownsUnscopedModel()) {
713
+ return configuredModel(cli.model, "cli", "cli:--model");
714
+ }
715
+ }
716
+ const envModel = getProviderEnvModel(provider);
717
+ if (envModel) {
718
+ return configuredModel(envModel.value, envModel.source, envModel.sourcePath);
719
+ }
720
+ const activeProfile = getActiveProfile();
721
+ const profileProviderModel = activeProfile?.defaults?.providers?.[provider]?.model;
722
+ if (activeProfile && profileProviderModel) {
723
+ return configuredModel(
724
+ profileProviderModel,
725
+ "profile",
726
+ `profile:${activeProfile.name}#defaults.providers.${provider}.model`
727
+ );
728
+ }
729
+ if (activeProfile?.defaults?.model && ownsUnscopedModel()) {
730
+ return configuredModel(
731
+ activeProfile.defaults.model,
732
+ "profile",
733
+ `profile:${activeProfile.name}#defaults.model`
734
+ );
735
+ }
736
+ const projectConfig = loadProjectConfig(cwd);
737
+ const projectConfigProviderModel = projectConfig?.defaults?.providers?.[provider]?.model;
738
+ if (projectConfigProviderModel) {
739
+ return configuredModel(
740
+ projectConfigProviderModel,
741
+ "project",
742
+ `${paths.projectConfigFile}#defaults.providers.${provider}.model`
743
+ );
744
+ }
745
+ if (projectConfig?.defaults?.model && ownsUnscopedModel()) {
746
+ return configuredModel(
747
+ projectConfig.defaults.model,
748
+ "project",
749
+ `${paths.projectConfigFile}#defaults.model`
750
+ );
751
+ }
752
+ const userConfig = loadUserConfig(cwd);
753
+ const userConfigProviderModel = userConfig?.defaults?.providers?.[provider]?.model;
754
+ if (userConfigProviderModel) {
755
+ return configuredModel(
756
+ userConfigProviderModel,
757
+ "user-config",
758
+ `${paths.userConfigFile}#defaults.providers.${provider}.model`
759
+ );
760
+ }
761
+ if (userConfig?.defaults?.model && ownsUnscopedModel()) {
762
+ return configuredModel(
763
+ userConfig.defaults.model,
764
+ "user-config",
765
+ `${paths.userConfigFile}#defaults.model`
766
+ );
767
+ }
768
+ warnIfLegacyConfigExists(cwd);
769
+ try {
770
+ const registry = loadProviderRegistryForCwd(cwd);
771
+ const registryModel = ProviderRegistry.getProviderConfig(provider, registry).models.default;
772
+ const validatedModel = ProviderRegistry.resolveModel(provider, registryModel, registry);
773
+ return {
774
+ value: validatedModel,
775
+ source: "registry",
776
+ sourcePath: `providers.yaml#providers.${provider}.models.default`
777
+ };
778
+ } catch (error) {
779
+ emitWarning(
780
+ "CFG-008",
781
+ {
782
+ taskId: "resolution-engine",
783
+ subsystem: "config",
784
+ executionPhase: "setup"
785
+ },
786
+ {
787
+ severity: "WARN" /* WARN */,
788
+ metadata: {
789
+ provider,
790
+ error: error instanceof Error ? error.message : String(error),
791
+ operation: "resolveProviderModel"
792
+ }
793
+ }
794
+ );
795
+ return { value: "auto", source: "fallback" };
796
+ }
797
+ }
798
+ var JUDGE_TYPE_TO_CONFIG_KEY = {
799
+ ai: "ai",
800
+ "multi-lens": "multiLens",
801
+ "multi-agent": "multiAgent"
802
+ };
803
+ function judgeTierConfigOf(config, judgeType) {
804
+ if (!config?.judge || !judgeType) return void 0;
805
+ return config.judge[JUDGE_TYPE_TO_CONFIG_KEY[judgeType]];
806
+ }
807
+ function resolveJudgeProvider(cli, cwd = process.cwd(), judgeType) {
808
+ const paths = getConfigPaths2(cwd);
809
+ if (cli?.judgeProvider) {
810
+ return { value: cli.judgeProvider, source: "cli", specificity: JUDGE_SPECIFICITY.cli };
811
+ }
812
+ const envProvider = process.env.POETIC_JUDGE_PROVIDER;
813
+ if (envProvider) {
814
+ return {
815
+ value: envProvider.toLowerCase(),
816
+ source: "env",
817
+ sourcePath: "env:POETIC_JUDGE_PROVIDER",
818
+ specificity: JUDGE_SPECIFICITY.env
819
+ };
820
+ }
821
+ const activeProfile = getActiveProfile();
822
+ const projectConfig = loadProjectConfig(cwd);
823
+ const userConfig = loadUserConfig(cwd);
824
+ const tierLabel = judgeType ? JUDGE_TYPE_TO_CONFIG_KEY[judgeType] : void 0;
825
+ const profileTierProvider = judgeTierConfigOf(
826
+ activeProfile,
827
+ judgeType
828
+ )?.provider;
829
+ if (activeProfile && profileTierProvider) {
830
+ return {
831
+ value: normalizeProviderId(profileTierProvider),
832
+ source: "profile",
833
+ sourcePath: `profile:${activeProfile.name}#judge.${tierLabel}.provider`,
834
+ specificity: JUDGE_SPECIFICITY.perJudge
835
+ };
836
+ }
837
+ if (activeProfile?.judge?.provider) {
838
+ return {
839
+ value: normalizeProviderId(activeProfile.judge.provider),
840
+ source: "profile",
841
+ sourcePath: `profile:${activeProfile.name}#judge.provider`,
842
+ specificity: JUDGE_SPECIFICITY.allJudge
843
+ };
844
+ }
845
+ const projectTierProvider = judgeTierConfigOf(projectConfig, judgeType)?.provider;
846
+ if (projectTierProvider) {
847
+ return {
848
+ value: normalizeProviderId(projectTierProvider),
849
+ source: "project",
850
+ sourcePath: `${paths.projectConfigFile}#judge.${tierLabel}.provider`,
851
+ specificity: JUDGE_SPECIFICITY.perJudge
852
+ };
853
+ }
854
+ const userTierProvider = judgeTierConfigOf(userConfig, judgeType)?.provider;
855
+ if (userTierProvider) {
856
+ return {
857
+ value: normalizeProviderId(userTierProvider),
858
+ source: "user-config",
859
+ sourcePath: `${paths.userConfigFile}#judge.${tierLabel}.provider`,
860
+ specificity: JUDGE_SPECIFICITY.perJudge
861
+ };
862
+ }
863
+ if (projectConfig?.judge?.provider) {
864
+ return {
865
+ value: normalizeProviderId(projectConfig.judge.provider),
866
+ source: "project",
867
+ sourcePath: `${paths.projectConfigFile}#judge.provider`,
868
+ specificity: JUDGE_SPECIFICITY.allJudge
869
+ };
870
+ }
871
+ if (userConfig?.judge?.provider) {
872
+ return {
873
+ value: normalizeProviderId(userConfig.judge.provider),
874
+ source: "user-config",
875
+ sourcePath: `${paths.userConfigFile}#judge.provider`,
876
+ specificity: JUDGE_SPECIFICITY.allJudge
877
+ };
878
+ }
879
+ if (activeProfile?.defaults?.judge?.provider) {
880
+ return {
881
+ value: normalizeProviderId(activeProfile.defaults.judge.provider),
882
+ source: "profile",
883
+ sourcePath: `profile:${activeProfile.name}#defaults.judge.provider`,
884
+ specificity: JUDGE_SPECIFICITY.legacyDefaults
885
+ };
886
+ }
887
+ if (projectConfig?.defaults?.judge?.provider) {
888
+ return {
889
+ value: normalizeProviderId(projectConfig.defaults.judge.provider),
890
+ source: "project",
891
+ sourcePath: `${paths.projectConfigFile}#defaults.judge.provider`,
892
+ specificity: JUDGE_SPECIFICITY.legacyDefaults
893
+ };
894
+ }
895
+ if (userConfig?.defaults?.judge?.provider) {
896
+ return {
897
+ value: normalizeProviderId(userConfig.defaults.judge.provider),
898
+ source: "user-config",
899
+ sourcePath: `${paths.userConfigFile}#defaults.judge.provider`,
900
+ specificity: JUDGE_SPECIFICITY.legacyDefaults
901
+ };
902
+ }
903
+ warnIfLegacyConfigExists(cwd);
904
+ const defaultProvider = resolveDefaultJudgeProvider(cli, cwd);
905
+ return {
906
+ value: defaultProvider.value,
907
+ source: defaultProvider.source,
908
+ sourcePath: defaultProvider.sourcePath ? `judge-default:${defaultProvider.sourcePath}` : "judge-default:execution-provider",
909
+ specificity: JUDGE_SPECIFICITY.derived
910
+ };
911
+ }
912
+ function resolveJudgeModel(cli, cwd = process.cwd(), judgeType) {
913
+ const paths = getConfigPaths2(cwd);
914
+ if (cli?.judgeModel) {
915
+ return {
916
+ value: cli.judgeModel,
917
+ source: "cli",
918
+ sourcePath: "cli:--judge-model",
919
+ specificity: JUDGE_SPECIFICITY.cli
920
+ };
921
+ }
922
+ const envJudgeModel = process.env.POETIC_JUDGE_MODEL;
923
+ if (envJudgeModel) {
924
+ return {
925
+ value: envJudgeModel,
926
+ source: "env",
927
+ sourcePath: "env:POETIC_JUDGE_MODEL",
928
+ specificity: JUDGE_SPECIFICITY.env
929
+ };
930
+ }
931
+ const activeProfile = getActiveProfile();
932
+ const projectConfig = loadProjectConfig(cwd);
933
+ const userConfig = loadUserConfig(cwd);
934
+ const tierLabel = judgeType ? JUDGE_TYPE_TO_CONFIG_KEY[judgeType] : void 0;
935
+ const profileTierModel = judgeTierConfigOf(
936
+ activeProfile,
937
+ judgeType
938
+ )?.model;
939
+ if (activeProfile && profileTierModel) {
940
+ return {
941
+ value: profileTierModel,
942
+ source: "profile",
943
+ sourcePath: `profile:${activeProfile.name}#judge.${tierLabel}.model`,
944
+ specificity: JUDGE_SPECIFICITY.perJudge
945
+ };
946
+ }
947
+ if (activeProfile?.judge?.model) {
948
+ return {
949
+ value: activeProfile.judge.model,
950
+ source: "profile",
951
+ sourcePath: `profile:${activeProfile.name}#judge.model`,
952
+ specificity: JUDGE_SPECIFICITY.allJudge
953
+ };
954
+ }
955
+ const projectTierModel = judgeTierConfigOf(projectConfig, judgeType)?.model;
956
+ if (projectTierModel) {
957
+ return {
958
+ value: projectTierModel,
959
+ source: "project",
960
+ sourcePath: `${paths.projectConfigFile}#judge.${tierLabel}.model`,
961
+ specificity: JUDGE_SPECIFICITY.perJudge
962
+ };
963
+ }
964
+ const userTierModel = judgeTierConfigOf(userConfig, judgeType)?.model;
965
+ if (userTierModel) {
966
+ return {
967
+ value: userTierModel,
968
+ source: "user-config",
969
+ sourcePath: `${paths.userConfigFile}#judge.${tierLabel}.model`,
970
+ specificity: JUDGE_SPECIFICITY.perJudge
971
+ };
972
+ }
973
+ if (projectConfig?.judge?.model) {
974
+ return {
975
+ value: projectConfig.judge.model,
976
+ source: "project",
977
+ sourcePath: `${paths.projectConfigFile}#judge.model`,
978
+ specificity: JUDGE_SPECIFICITY.allJudge
979
+ };
980
+ }
981
+ if (userConfig?.judge?.model) {
982
+ return {
983
+ value: userConfig.judge.model,
984
+ source: "user-config",
985
+ sourcePath: `${paths.userConfigFile}#judge.model`,
986
+ specificity: JUDGE_SPECIFICITY.allJudge
987
+ };
988
+ }
989
+ if (activeProfile?.defaults?.judge?.model) {
990
+ return {
991
+ value: activeProfile.defaults.judge.model,
992
+ source: "profile",
993
+ sourcePath: `profile:${activeProfile.name}#defaults.judge.model`,
994
+ specificity: JUDGE_SPECIFICITY.legacyDefaults
995
+ };
996
+ }
997
+ if (projectConfig?.defaults?.judge?.model) {
998
+ return {
999
+ value: projectConfig.defaults.judge.model,
1000
+ source: "project",
1001
+ sourcePath: `${paths.projectConfigFile}#defaults.judge.model`,
1002
+ specificity: JUDGE_SPECIFICITY.legacyDefaults
1003
+ };
1004
+ }
1005
+ if (userConfig?.defaults?.judge?.model) {
1006
+ return {
1007
+ value: userConfig.defaults.judge.model,
1008
+ source: "user-config",
1009
+ sourcePath: `${paths.userConfigFile}#defaults.judge.model`,
1010
+ specificity: JUDGE_SPECIFICITY.legacyDefaults
1011
+ };
1012
+ }
1013
+ warnIfLegacyConfigExists(cwd);
1014
+ const judgeProvider = resolveJudgeProvider(cli, cwd, judgeType);
1015
+ const roleModel = coherentJudgeModelForProvider(judgeProvider.value, judgeType);
1016
+ if (roleModel) {
1017
+ return {
1018
+ value: roleModel,
1019
+ source: "registry",
1020
+ sourcePath: `providers.yaml#providers.${judgeProvider.value}.models (judge role)`,
1021
+ specificity: JUDGE_SPECIFICITY.derived
1022
+ };
1023
+ }
1024
+ return { value: "auto", source: "fallback", specificity: JUDGE_SPECIFICITY.derived };
1025
+ }
1026
+ function resolveSynthesisModel(cli, cwd = process.cwd()) {
1027
+ const paths = getConfigPaths2(cwd);
1028
+ const provider = resolveSynthesisProvider(cli, cwd).value;
1029
+ const configuredModel = (value, source, sourcePath) => {
1030
+ validateModelForProvider(provider, value, sourcePath, cwd);
1031
+ return { value, source, sourcePath };
1032
+ };
1033
+ if (cli?.synthesisModel) {
1034
+ return configuredModel(cli.synthesisModel, "cli", "cli:--synthesis-model");
1035
+ }
1036
+ const envSynthesisModel = process.env.POETIC_SYNTHESIS_MODEL;
1037
+ if (envSynthesisModel) {
1038
+ return configuredModel(envSynthesisModel, "env", "env:POETIC_SYNTHESIS_MODEL");
1039
+ }
1040
+ const activeProfile = getActiveProfile();
1041
+ if (activeProfile?.defaults?.synthesis?.model) {
1042
+ return configuredModel(
1043
+ activeProfile.defaults.synthesis.model,
1044
+ "profile",
1045
+ `profile:${activeProfile.name}#defaults.synthesis.model`
1046
+ );
1047
+ }
1048
+ const profileProviderModelSynth = activeProfile?.defaults?.providers?.[provider]?.model;
1049
+ if (activeProfile && profileProviderModelSynth) {
1050
+ return configuredModel(
1051
+ profileProviderModelSynth,
1052
+ "profile",
1053
+ `profile:${activeProfile.name}#defaults.providers.${provider}.model`
1054
+ );
1055
+ }
1056
+ if (activeProfile?.defaults?.model) {
1057
+ return configuredModel(
1058
+ activeProfile.defaults.model,
1059
+ "profile",
1060
+ `profile:${activeProfile.name}#defaults.model`
1061
+ );
1062
+ }
1063
+ const projectConfig = loadProjectConfig(cwd);
1064
+ if (projectConfig?.defaults?.synthesis?.model) {
1065
+ return configuredModel(
1066
+ projectConfig.defaults.synthesis.model,
1067
+ "project",
1068
+ `${paths.projectConfigFile}#defaults.synthesis.model`
1069
+ );
1070
+ }
1071
+ const projectProviderModel = projectConfig?.defaults?.providers?.[provider]?.model;
1072
+ if (projectProviderModel) {
1073
+ return configuredModel(
1074
+ projectProviderModel,
1075
+ "project",
1076
+ `${paths.projectConfigFile}#defaults.providers.${provider}.model`
1077
+ );
1078
+ }
1079
+ if (projectConfig?.defaults?.model) {
1080
+ return configuredModel(
1081
+ projectConfig.defaults.model,
1082
+ "project",
1083
+ `${paths.projectConfigFile}#defaults.model`
1084
+ );
1085
+ }
1086
+ const userConfig = loadUserConfig(cwd);
1087
+ if (userConfig?.defaults?.synthesis?.model) {
1088
+ return configuredModel(
1089
+ userConfig.defaults.synthesis.model,
1090
+ "user-config",
1091
+ `${paths.userConfigFile}#defaults.synthesis.model`
1092
+ );
1093
+ }
1094
+ const userProviderModel = userConfig?.defaults?.providers?.[provider]?.model;
1095
+ if (userProviderModel) {
1096
+ return configuredModel(
1097
+ userProviderModel,
1098
+ "user-config",
1099
+ `${paths.userConfigFile}#defaults.providers.${provider}.model`
1100
+ );
1101
+ }
1102
+ if (userConfig?.defaults?.model) {
1103
+ return configuredModel(
1104
+ userConfig.defaults.model,
1105
+ "user-config",
1106
+ `${paths.userConfigFile}#defaults.model`
1107
+ );
1108
+ }
1109
+ warnIfLegacyConfigExists(cwd);
1110
+ try {
1111
+ const model = ProviderRegistry.getProviderConfig(provider, loadProviderRegistryForCwd(cwd)).models.default;
1112
+ return {
1113
+ value: model,
1114
+ source: "registry",
1115
+ sourcePath: `providers.yaml#providers.${provider}.models.default`
1116
+ };
1117
+ } catch {
1118
+ return { value: "auto", source: "fallback" };
1119
+ }
1120
+ }
1121
+ function resolveSynthesisModelForConfig(cli, cwd, options) {
1122
+ if (options?.strictSynthesisModel !== false) {
1123
+ return resolveSynthesisModel(cli, cwd);
1124
+ }
1125
+ try {
1126
+ return resolveSynthesisModel(cli, cwd);
1127
+ } catch (error) {
1128
+ if (!(error instanceof InvalidProviderModelError)) {
1129
+ throw error;
1130
+ }
1131
+ return {
1132
+ value: "invalid",
1133
+ source: "fallback",
1134
+ sourcePath: `resolution-error:${error.message}`
1135
+ };
1136
+ }
1137
+ }
1138
+ function resolveSynthesisProvider(cli, cwd = process.cwd()) {
1139
+ const paths = getConfigPaths2(cwd);
1140
+ if (cli?.synthesisProvider) {
1141
+ return {
1142
+ value: normalizeProviderId(cli.synthesisProvider),
1143
+ source: "cli",
1144
+ sourcePath: "cli:--synthesis-provider"
1145
+ };
1146
+ }
1147
+ const cliInferredProvider = inferProviderFromModel(cli?.synthesisModel, cwd);
1148
+ if (cliInferredProvider) {
1149
+ return {
1150
+ value: cliInferredProvider,
1151
+ source: "cli",
1152
+ sourcePath: "cli:--synthesis-model"
1153
+ };
1154
+ }
1155
+ const envProvider = process.env.POETIC_SYNTHESIS_PROVIDER;
1156
+ if (envProvider) {
1157
+ return {
1158
+ value: normalizeProviderId(envProvider),
1159
+ source: "env",
1160
+ sourcePath: "env:POETIC_SYNTHESIS_PROVIDER"
1161
+ };
1162
+ }
1163
+ const envModelProvider = inferProviderFromModel(process.env.POETIC_SYNTHESIS_MODEL, cwd);
1164
+ if (envModelProvider) {
1165
+ return {
1166
+ value: envModelProvider,
1167
+ source: "env",
1168
+ sourcePath: "env:POETIC_SYNTHESIS_MODEL"
1169
+ };
1170
+ }
1171
+ const activeProfile = getActiveProfile();
1172
+ if (activeProfile?.defaults?.synthesis?.provider) {
1173
+ return {
1174
+ value: normalizeProviderId(activeProfile.defaults.synthesis.provider),
1175
+ source: "profile",
1176
+ sourcePath: `profile:${activeProfile.name}#defaults.synthesis.provider`
1177
+ };
1178
+ }
1179
+ const profileSynthModelProvider = inferProviderFromModel(
1180
+ activeProfile?.defaults?.synthesis?.model,
1181
+ cwd
1182
+ );
1183
+ if (activeProfile && profileSynthModelProvider) {
1184
+ return {
1185
+ value: profileSynthModelProvider,
1186
+ source: "profile",
1187
+ sourcePath: `profile:${activeProfile.name}#defaults.synthesis.model`
1188
+ };
1189
+ }
1190
+ const projectConfig = loadProjectConfig(cwd);
1191
+ if (projectConfig?.defaults?.synthesis?.provider) {
1192
+ return {
1193
+ value: normalizeProviderId(projectConfig.defaults.synthesis.provider),
1194
+ source: "project",
1195
+ sourcePath: `${paths.projectConfigFile}#defaults.synthesis.provider`
1196
+ };
1197
+ }
1198
+ const projectSynthesisModelProvider = inferProviderFromModel(
1199
+ projectConfig?.defaults?.synthesis?.model,
1200
+ cwd
1201
+ );
1202
+ if (projectSynthesisModelProvider) {
1203
+ return {
1204
+ value: projectSynthesisModelProvider,
1205
+ source: "project",
1206
+ sourcePath: `${paths.projectConfigFile}#defaults.synthesis.model`
1207
+ };
1208
+ }
1209
+ const projectDefaultModelProvider = inferProviderFromModel(projectConfig?.defaults?.model, cwd);
1210
+ if (projectDefaultModelProvider) {
1211
+ return {
1212
+ value: projectDefaultModelProvider,
1213
+ source: "project",
1214
+ sourcePath: `${paths.projectConfigFile}#defaults.model`
1215
+ };
1216
+ }
1217
+ const userConfig = loadUserConfig(cwd);
1218
+ if (userConfig?.defaults?.synthesis?.provider) {
1219
+ return {
1220
+ value: normalizeProviderId(userConfig.defaults.synthesis.provider),
1221
+ source: "user-config",
1222
+ sourcePath: `${paths.userConfigFile}#defaults.synthesis.provider`
1223
+ };
1224
+ }
1225
+ const userSynthesisModelProvider = inferProviderFromModel(
1226
+ userConfig?.defaults?.synthesis?.model,
1227
+ cwd
1228
+ );
1229
+ if (userSynthesisModelProvider) {
1230
+ return {
1231
+ value: userSynthesisModelProvider,
1232
+ source: "user-config",
1233
+ sourcePath: `${paths.userConfigFile}#defaults.synthesis.model`
1234
+ };
1235
+ }
1236
+ const userDefaultModelProvider = inferProviderFromModel(userConfig?.defaults?.model, cwd);
1237
+ if (userDefaultModelProvider) {
1238
+ return {
1239
+ value: userDefaultModelProvider,
1240
+ source: "user-config",
1241
+ sourcePath: `${paths.userConfigFile}#defaults.model`
1242
+ };
1243
+ }
1244
+ warnIfLegacyConfigExists(cwd);
1245
+ const defaultProvider = resolveDefaultProvider(cli, cwd);
1246
+ return {
1247
+ value: defaultProvider.value,
1248
+ source: "fallback",
1249
+ sourcePath: "synthesis-provider:default-fallback"
1250
+ };
1251
+ }
1252
+ function resolveSplitterModel(cli, cwd = process.cwd()) {
1253
+ const paths = getConfigPaths2(cwd);
1254
+ if (cli?.splitterModel) {
1255
+ return {
1256
+ value: cli.splitterModel,
1257
+ source: "cli",
1258
+ sourcePath: "cli:--splitter-model"
1259
+ };
1260
+ }
1261
+ const envSplitterModel = process.env.POETIC_SPLITTER_MODEL;
1262
+ if (envSplitterModel) {
1263
+ return {
1264
+ value: envSplitterModel,
1265
+ source: "env",
1266
+ sourcePath: "env:POETIC_SPLITTER_MODEL"
1267
+ };
1268
+ }
1269
+ const projectConfig = loadProjectConfig(cwd);
1270
+ if (projectConfig?.defaults?.splitter?.model) {
1271
+ return {
1272
+ value: projectConfig.defaults.splitter.model,
1273
+ source: "project",
1274
+ sourcePath: `${paths.projectConfigFile}#defaults.splitter.model`
1275
+ };
1276
+ }
1277
+ const userConfig = loadUserConfig(cwd);
1278
+ if (userConfig?.defaults?.splitter?.model) {
1279
+ return {
1280
+ value: userConfig.defaults.splitter.model,
1281
+ source: "user-config",
1282
+ sourcePath: `${paths.userConfigFile}#defaults.splitter.model`
1283
+ };
1284
+ }
1285
+ warnIfLegacyConfigExists(cwd);
1286
+ try {
1287
+ const providerId = resolveDefaultProvider(cli, cwd).value;
1288
+ const model = ProviderRegistry.getProviderConfig(providerId, loadProviderRegistryForCwd(cwd)).models.default;
1289
+ return {
1290
+ value: model,
1291
+ source: "registry",
1292
+ sourcePath: `providers.yaml#providers.${providerId}.models.default`
1293
+ };
1294
+ } catch {
1295
+ return { value: "auto", source: "fallback" };
1296
+ }
1297
+ }
1298
+ function resolveIntentDecompositionHints(cwd = process.cwd()) {
1299
+ const paths = getConfigPaths2(cwd);
1300
+ const projectConfig = loadProjectConfig(cwd);
1301
+ const projectHints = projectConfig?.defaults?.intent?.decompositionHints;
1302
+ if (Array.isArray(projectHints) && projectHints.length > 0) {
1303
+ return {
1304
+ value: projectHints.filter((v) => typeof v === "string" && v.length > 0),
1305
+ source: "project",
1306
+ sourcePath: `${paths.projectConfigFile}#defaults.intent.decompositionHints`
1307
+ };
1308
+ }
1309
+ const userConfig = loadUserConfig(cwd);
1310
+ const userHints = userConfig?.defaults?.intent?.decompositionHints;
1311
+ if (Array.isArray(userHints) && userHints.length > 0) {
1312
+ return {
1313
+ value: userHints.filter((v) => typeof v === "string" && v.length > 0),
1314
+ source: "user-config",
1315
+ sourcePath: `${paths.userConfigFile}#defaults.intent.decompositionHints`
1316
+ };
1317
+ }
1318
+ return { value: [], source: "fallback" };
1319
+ }
1320
+ function resolveIntentNonGoals(cwd = process.cwd()) {
1321
+ const paths = getConfigPaths2(cwd);
1322
+ const projectConfig = loadProjectConfig(cwd);
1323
+ const projectNonGoals = projectConfig?.defaults?.intent?.nonGoals;
1324
+ if (Array.isArray(projectNonGoals) && projectNonGoals.length > 0) {
1325
+ return {
1326
+ value: projectNonGoals.filter((v) => typeof v === "string" && v.length > 0),
1327
+ source: "project",
1328
+ sourcePath: `${paths.projectConfigFile}#defaults.intent.nonGoals`
1329
+ };
1330
+ }
1331
+ const userConfig = loadUserConfig(cwd);
1332
+ const userNonGoals = userConfig?.defaults?.intent?.nonGoals;
1333
+ if (Array.isArray(userNonGoals) && userNonGoals.length > 0) {
1334
+ return {
1335
+ value: userNonGoals.filter((v) => typeof v === "string" && v.length > 0),
1336
+ source: "user-config",
1337
+ sourcePath: `${paths.userConfigFile}#defaults.intent.nonGoals`
1338
+ };
1339
+ }
1340
+ return { value: [], source: "fallback" };
1341
+ }
1342
+ function resolveIntentDisableRepoContext(cwd = process.cwd()) {
1343
+ const paths = getConfigPaths2(cwd);
1344
+ const projectConfig = loadProjectConfig(cwd);
1345
+ const projectDisable = projectConfig?.defaults?.intent?.disableRepoContext;
1346
+ if (typeof projectDisable === "boolean") {
1347
+ return {
1348
+ value: projectDisable,
1349
+ source: "project",
1350
+ sourcePath: `${paths.projectConfigFile}#defaults.intent.disableRepoContext`
1351
+ };
1352
+ }
1353
+ const userConfig = loadUserConfig(cwd);
1354
+ const userDisable = userConfig?.defaults?.intent?.disableRepoContext;
1355
+ if (typeof userDisable === "boolean") {
1356
+ return {
1357
+ value: userDisable,
1358
+ source: "user-config",
1359
+ sourcePath: `${paths.userConfigFile}#defaults.intent.disableRepoContext`
1360
+ };
1361
+ }
1362
+ return { value: false, source: "fallback" };
1363
+ }
1364
+ function resolveJudgeConfig(cli, cwd = process.cwd(), judgeType) {
1365
+ const type = resolveJudgeType(cli, cwd);
1366
+ const provider = resolveJudgeProvider(cli, cwd, judgeType);
1367
+ const model = resolveJudgeModel(cli, cwd, judgeType);
1368
+ const reconciled = reconcileJudgePair(
1369
+ { value: provider.value, specificity: provider.specificity },
1370
+ model.value ? { value: model.value, specificity: model.specificity } : void 0,
1371
+ judgeType
1372
+ );
1373
+ if (reconciled.changed === "provider") {
1374
+ return {
1375
+ type,
1376
+ provider: {
1377
+ value: reconciled.provider,
1378
+ source: model.source,
1379
+ sourcePath: `${model.sourcePath ?? "judge.model"} (provider inferred from model)`
1380
+ },
1381
+ model
1382
+ };
1383
+ }
1384
+ if (reconciled.changed === "model" || reconciled.changed === "model-cleared") {
1385
+ return {
1386
+ type,
1387
+ provider,
1388
+ model: {
1389
+ value: reconciled.model ?? "auto",
1390
+ source: "registry",
1391
+ sourcePath: `providers.yaml#providers.${provider.value}.models (judge role, reconciled)`
1392
+ }
1393
+ };
1394
+ }
1395
+ return { type, provider, model };
1396
+ }
1397
+ function resolveConfig(cli, cwd = process.cwd(), options) {
1398
+ const defaultProvider = resolveDefaultProvider(cli, cwd);
1399
+ const registry = loadProviderRegistryForCwd(cwd);
1400
+ const providers = ProviderRegistry.getEnabledProviders(registry).map((provider) => provider.id);
1401
+ const providerModels = {};
1402
+ for (const provider of providers) {
1403
+ providerModels[provider] = resolveProviderModel(provider, cli, cwd);
1404
+ }
1405
+ return {
1406
+ defaultProvider,
1407
+ defaultStrategy: resolveDefaultStrategy(cli, cwd),
1408
+ defaultModel: resolveProviderModel(defaultProvider.value, cli, cwd),
1409
+ decompositionRoutingPolicy: resolveDecompositionRoutingPolicy(cli, cwd),
1410
+ planExecute: resolvePlanExecuteConfig(cli, cwd),
1411
+ providerExecutionTransport: resolveProviderExecutionTransportConfig(cli, cwd),
1412
+ judge: resolveJudgeConfig(cli, cwd),
1413
+ synthesisModel: resolveSynthesisModelForConfig(cli, cwd, options),
1414
+ splitterModel: resolveSplitterModel(cli, cwd),
1415
+ providerModels
1416
+ };
1417
+ }
1418
+ function resolvePlanExecuteConfig(cli, cwd = process.cwd()) {
1419
+ return {
1420
+ blockerMode: resolvePlanExecuteBlockerMode(cli, cwd)
1421
+ };
1422
+ }
1423
+ function resolvePlanExecuteBlockerMode(cli, cwd = process.cwd()) {
1424
+ const paths = getConfigPaths2(cwd);
1425
+ if (cli?.planExecuteBlockerMode) {
1426
+ return {
1427
+ value: cli.planExecuteBlockerMode,
1428
+ source: "cli",
1429
+ sourcePath: "cli:--blocker-mode"
1430
+ };
1431
+ }
1432
+ const projectConfig = loadProjectConfig(cwd);
1433
+ const projectBlockerMode = resolveDurablePlanExecuteBlockerMode(
1434
+ projectConfig?.planExecute?.blockerMode,
1435
+ `${paths.projectConfigFile}#planExecute.blockerMode`
1436
+ );
1437
+ if (projectBlockerMode) {
1438
+ return {
1439
+ value: projectBlockerMode,
1440
+ source: "project",
1441
+ sourcePath: `${paths.projectConfigFile}#planExecute.blockerMode`
1442
+ };
1443
+ }
1444
+ const userConfig = loadUserConfig(cwd);
1445
+ const userBlockerMode = resolveDurablePlanExecuteBlockerMode(
1446
+ userConfig?.planExecute?.blockerMode,
1447
+ `${paths.userConfigFile}#planExecute.blockerMode`
1448
+ );
1449
+ if (userBlockerMode) {
1450
+ return {
1451
+ value: userBlockerMode,
1452
+ source: "user-config",
1453
+ sourcePath: `${paths.userConfigFile}#planExecute.blockerMode`
1454
+ };
1455
+ }
1456
+ return { value: "non-interactive", source: "fallback" };
1457
+ }
1458
+ function providerExecutionTransportEnvKey(provider) {
1459
+ return `POETIC_${provider.trim().toUpperCase().replace(/[^A-Z0-9_]/g, "_")}_EXECUTION_TRANSPORT`;
1460
+ }
1461
+ function resolveEnvProviderExecutionTransport(provider, env = process.env) {
1462
+ const providerKey = providerExecutionTransportEnvKey(provider);
1463
+ const providerRaw = env[providerKey];
1464
+ const providerValue = normalizeExecutionTransportMode(providerRaw);
1465
+ if (providerValue) {
1466
+ return {
1467
+ value: providerValue,
1468
+ source: "env",
1469
+ sourcePath: `env:${providerKey}`
1470
+ };
1471
+ }
1472
+ if (providerRaw?.trim()) {
1473
+ throw new InvalidExplicitConfigError(
1474
+ `Invalid ${providerKey}: expected auto, headless, tmux-exec, or interactive`
1475
+ );
1476
+ }
1477
+ const legacyRaw = env.POETIC_PROVIDER_EXECUTION_TRANSPORT;
1478
+ const canonicalRaw = env.POETIC_EXECUTION_TRANSPORT;
1479
+ const legacyValue = normalizeExecutionTransportMode(legacyRaw);
1480
+ const canonicalValue = normalizeExecutionTransportMode(canonicalRaw);
1481
+ if (legacyRaw?.trim() && !legacyValue) {
1482
+ throw new InvalidExplicitConfigError(
1483
+ "Invalid POETIC_PROVIDER_EXECUTION_TRANSPORT: expected auto, headless, tmux-exec, or interactive"
1484
+ );
1485
+ }
1486
+ if (canonicalRaw?.trim() && !canonicalValue) {
1487
+ throw new InvalidExplicitConfigError(
1488
+ "Invalid POETIC_EXECUTION_TRANSPORT: expected auto, headless, tmux-exec, or interactive"
1489
+ );
1490
+ }
1491
+ const genericValue = legacyValue ?? canonicalValue;
1492
+ if (genericValue) {
1493
+ return {
1494
+ value: genericValue,
1495
+ source: "env",
1496
+ sourcePath: env.POETIC_PROVIDER_EXECUTION_TRANSPORT ? "env:POETIC_PROVIDER_EXECUTION_TRANSPORT" : "env:POETIC_EXECUTION_TRANSPORT"
1497
+ };
1498
+ }
1499
+ return void 0;
1500
+ }
1501
+ function resolveConfiguredProviderExecutionTransport(provider, cwd = process.cwd()) {
1502
+ const normalizedProvider = normalizeProviderId(provider);
1503
+ const paths = getConfigPaths2(cwd);
1504
+ if (!CONFIGURABLE_EXECUTION_TRANSPORT_PROVIDERS.has(normalizedProvider)) {
1505
+ return { value: "headless", source: "fallback" };
1506
+ }
1507
+ const activeProfile = getActiveProfile();
1508
+ const profileResolved = resolveConfigExecutionTransport(
1509
+ activeProfile,
1510
+ normalizedProvider,
1511
+ "profile",
1512
+ `profile:${activeProfile?.name ?? "active"}`
1513
+ );
1514
+ if (profileResolved && activeProfile) {
1515
+ return profileResolved;
1516
+ }
1517
+ const projectConfig = loadProjectConfig(cwd);
1518
+ const projectResolved = resolveConfigExecutionTransport(
1519
+ projectConfig,
1520
+ normalizedProvider,
1521
+ "project",
1522
+ paths.projectConfigFile
1523
+ );
1524
+ if (projectResolved) return projectResolved;
1525
+ const userConfig = loadUserConfig(cwd);
1526
+ const userResolved = resolveConfigExecutionTransport(
1527
+ userConfig,
1528
+ normalizedProvider,
1529
+ "user-config",
1530
+ paths.userConfigFile
1531
+ );
1532
+ if (userResolved) return userResolved;
1533
+ return { value: "headless", source: "fallback" };
1534
+ }
1535
+ function resolveProviderExecutionTransport(provider, cli, cwd = process.cwd()) {
1536
+ const normalizedProvider = normalizeProviderId(provider);
1537
+ const cliValue = cli?.providerExecutionTransport ?? cli?.executionTransport;
1538
+ const normalizedCliValue = normalizeExecutionTransportMode(cliValue);
1539
+ if (normalizedCliValue) {
1540
+ return {
1541
+ value: normalizedCliValue,
1542
+ source: "cli",
1543
+ sourcePath: "cli:--provider-execution-transport"
1544
+ };
1545
+ }
1546
+ const envResolved = resolveEnvProviderExecutionTransport(normalizedProvider);
1547
+ if (envResolved) return envResolved;
1548
+ return resolveConfiguredProviderExecutionTransport(normalizedProvider, cwd);
1549
+ }
1550
+ function resolveProviderExecutionTransportConfig(cli, cwd = process.cwd()) {
1551
+ const defaultProvider = resolveDefaultProvider(cli, cwd).value;
1552
+ const providers = {};
1553
+ for (const provider of CONFIGURABLE_EXECUTION_TRANSPORT_PROVIDERS) {
1554
+ providers[provider] = resolveProviderExecutionTransport(provider, cli, cwd);
1555
+ }
1556
+ return {
1557
+ current: resolveProviderExecutionTransport(defaultProvider, cli, cwd),
1558
+ providers
1559
+ };
1560
+ }
1561
+ function resolveDecompositionRoutingPolicy(cli, cwd = process.cwd()) {
1562
+ const paths = getConfigPaths2(cwd);
1563
+ if (cli?.routingPolicy) {
1564
+ return {
1565
+ value: cli.routingPolicy,
1566
+ source: "cli",
1567
+ sourcePath: "cli:--routing-policy"
1568
+ };
1569
+ }
1570
+ const envStageValue = process.env.POETIC_DECOMPOSE_ROUTING_POLICY?.trim().toLowerCase();
1571
+ if (envStageValue === "strict" || envStageValue === "reroute") {
1572
+ return {
1573
+ value: envStageValue,
1574
+ source: "env",
1575
+ sourcePath: "env:POETIC_DECOMPOSE_ROUTING_POLICY"
1576
+ };
1577
+ }
1578
+ const envGlobalValue = process.env.POETIC_ROUTING_POLICY?.trim().toLowerCase();
1579
+ if (envGlobalValue === "strict" || envGlobalValue === "reroute") {
1580
+ return {
1581
+ value: envGlobalValue,
1582
+ source: "env",
1583
+ sourcePath: "env:POETIC_ROUTING_POLICY"
1584
+ };
1585
+ }
1586
+ const activeProfile = getActiveProfile();
1587
+ const profileRoutingPolicy = activeProfile?.defaults?.routingPolicy?.trim().toLowerCase();
1588
+ if (activeProfile && (profileRoutingPolicy === "strict" || profileRoutingPolicy === "reroute")) {
1589
+ return {
1590
+ value: profileRoutingPolicy,
1591
+ source: "profile",
1592
+ sourcePath: `profile:${activeProfile.name}#defaults.routingPolicy`
1593
+ };
1594
+ }
1595
+ const projectConfig = loadProjectConfig(cwd);
1596
+ const projectStageValue = projectConfig?.defaults?.intent?.decomposition?.routingPolicy;
1597
+ if (projectStageValue) {
1598
+ return {
1599
+ value: projectStageValue,
1600
+ source: "project",
1601
+ sourcePath: `${paths.projectConfigFile}#defaults.intent.decomposition.routingPolicy`
1602
+ };
1603
+ }
1604
+ const projectGlobalValue = projectConfig?.defaults?.routingPolicy;
1605
+ if (projectGlobalValue) {
1606
+ return {
1607
+ value: projectGlobalValue,
1608
+ source: "project",
1609
+ sourcePath: `${paths.projectConfigFile}#defaults.routingPolicy`
1610
+ };
1611
+ }
1612
+ const userConfig = loadUserConfig(cwd);
1613
+ const userStageValue = userConfig?.defaults?.intent?.decomposition?.routingPolicy;
1614
+ if (userStageValue) {
1615
+ return {
1616
+ value: userStageValue,
1617
+ source: "user-config",
1618
+ sourcePath: `${paths.userConfigFile}#defaults.intent.decomposition.routingPolicy`
1619
+ };
1620
+ }
1621
+ const userGlobalValue = userConfig?.defaults?.routingPolicy;
1622
+ if (userGlobalValue) {
1623
+ return {
1624
+ value: userGlobalValue,
1625
+ source: "user-config",
1626
+ sourcePath: `${paths.userConfigFile}#defaults.routingPolicy`
1627
+ };
1628
+ }
1629
+ return { value: "reroute", source: "fallback" };
1630
+ }
1631
+ function getPurposeProviderOrder(defaults, purpose) {
1632
+ if (!defaults) return void 0;
1633
+ switch (purpose) {
1634
+ case "judge":
1635
+ return defaults.judge?.providerOrder;
1636
+ case "synthesis":
1637
+ return defaults.synthesis?.providerOrder;
1638
+ case "decomposition":
1639
+ return defaults.intent?.decomposition?.providerOrder;
1640
+ case "global":
1641
+ case "splitter":
1642
+ case "flywheel":
1643
+ case "orchestration":
1644
+ return void 0;
1645
+ }
1646
+ }
1647
+ function getPurposeSingleModel(defaults, purpose) {
1648
+ if (!defaults) return void 0;
1649
+ switch (purpose) {
1650
+ case "judge":
1651
+ return defaults.judge?.model;
1652
+ case "synthesis":
1653
+ return defaults.synthesis?.model;
1654
+ case "decomposition":
1655
+ case "splitter":
1656
+ case "flywheel":
1657
+ case "orchestration":
1658
+ case "global":
1659
+ return void 0;
1660
+ }
1661
+ }
1662
+ function filterRunnableProviderOrder(providerOrder, sourceLabel, cwd) {
1663
+ const registry = loadProviderRegistryForCwd(cwd);
1664
+ const filtered = [];
1665
+ const seen = /* @__PURE__ */ new Set();
1666
+ for (const rawProvider of providerOrder) {
1667
+ const normalized = normalizeProviderId(rawProvider.trim());
1668
+ if (!normalized) continue;
1669
+ const providerConfig = registry.providers[normalized] ?? registry.providers[rawProvider.trim()] ?? registry.providers[rawProvider];
1670
+ if (!providerConfig) {
1671
+ emitWarning(
1672
+ "CFG-008",
1673
+ {
1674
+ taskId: "resolution-engine",
1675
+ subsystem: "config",
1676
+ executionPhase: "setup"
1677
+ },
1678
+ {
1679
+ severity: "WARN" /* WARN */,
1680
+ metadata: {
1681
+ provider: rawProvider,
1682
+ source: sourceLabel,
1683
+ operation: "resolveCandidates",
1684
+ message: `Skipping unknown provider '${rawProvider}' from ${sourceLabel}`
1685
+ }
1686
+ }
1687
+ );
1688
+ continue;
1689
+ }
1690
+ if (!providerConfig.enabled) {
1691
+ emitWarning(
1692
+ "CFG-008",
1693
+ {
1694
+ taskId: "resolution-engine",
1695
+ subsystem: "config",
1696
+ executionPhase: "setup"
1697
+ },
1698
+ {
1699
+ severity: "WARN" /* WARN */,
1700
+ metadata: {
1701
+ provider: providerConfig.id,
1702
+ source: sourceLabel,
1703
+ operation: "resolveCandidates",
1704
+ message: `Skipping disabled provider '${providerConfig.id}' from ${sourceLabel}`
1705
+ }
1706
+ }
1707
+ );
1708
+ continue;
1709
+ }
1710
+ if (!seen.has(providerConfig.id)) {
1711
+ seen.add(providerConfig.id);
1712
+ filtered.push(providerConfig.id);
1713
+ }
1714
+ }
1715
+ return filtered;
1716
+ }
1717
+ function buildValidatedModelList(provider, candidates, sourceLabel, registryOverride) {
1718
+ const valid = [];
1719
+ for (const model of candidates) {
1720
+ try {
1721
+ ProviderRegistry.resolveModel(provider, model, registryOverride);
1722
+ valid.push(model);
1723
+ } catch {
1724
+ emitWarning(
1725
+ "CFG-008",
1726
+ {
1727
+ taskId: "resolution-engine",
1728
+ subsystem: "config",
1729
+ executionPhase: "setup"
1730
+ },
1731
+ {
1732
+ severity: "WARN" /* WARN */,
1733
+ metadata: {
1734
+ provider,
1735
+ model,
1736
+ source: sourceLabel,
1737
+ operation: "resolveCandidates",
1738
+ message: `Skipping invalid model '${model}' for provider '${provider}' from ${sourceLabel}`
1739
+ }
1740
+ }
1741
+ );
1742
+ }
1743
+ }
1744
+ return valid;
1745
+ }
1746
+ function toLegacyCliOptions(cli) {
1747
+ if (!cli) return void 0;
1748
+ return {
1749
+ provider: cli.provider,
1750
+ model: cli.model,
1751
+ judgeProvider: cli.judgeProvider,
1752
+ judgeModel: cli.judgeModel,
1753
+ synthesisProvider: cli.synthesisProvider,
1754
+ synthesisModel: cli.synthesisModel,
1755
+ splitterModel: cli.splitterModel
1756
+ };
1757
+ }
1758
+ function resolvePurposeProviderScalar(purpose, cli, cwd) {
1759
+ switch (purpose) {
1760
+ case "judge":
1761
+ return resolveJudgeProvider(cli, cwd);
1762
+ case "synthesis":
1763
+ return resolveSynthesisProvider(cli, cwd);
1764
+ case "splitter":
1765
+ return resolveDefaultProvider(cli, cwd);
1766
+ case "decomposition":
1767
+ case "flywheel":
1768
+ case "orchestration":
1769
+ case "global":
1770
+ return resolveDefaultProvider(cli, cwd);
1771
+ }
1772
+ }
1773
+ function resolvePurposeModelScalar(purpose, provider, cli, cwd) {
1774
+ switch (purpose) {
1775
+ case "judge":
1776
+ return resolveJudgeModel(cli, cwd);
1777
+ case "synthesis":
1778
+ return resolveSynthesisModel(cli, cwd);
1779
+ case "splitter":
1780
+ return resolveSplitterModel(cli, cwd);
1781
+ case "decomposition":
1782
+ case "flywheel":
1783
+ case "orchestration":
1784
+ case "global":
1785
+ return resolveProviderModel(provider, cli, cwd);
1786
+ }
1787
+ }
1788
+ function shouldUseScalarCandidate(providerResolved, modelResolved) {
1789
+ const isConfigured = (source) => source !== "registry" && source !== "fallback";
1790
+ return isConfigured(providerResolved.source) || isConfigured(modelResolved.source);
1791
+ }
1792
+ function buildCandidate(params) {
1793
+ return {
1794
+ provider: params.provider,
1795
+ model: params.model,
1796
+ source: params.providerSource,
1797
+ sourcePath: params.providerSourcePath,
1798
+ providerSource: params.providerSource,
1799
+ providerSourcePath: params.providerSourcePath,
1800
+ modelSource: params.modelSource,
1801
+ modelSourcePath: params.modelSourcePath,
1802
+ purpose: params.purpose,
1803
+ index: params.index
1804
+ };
1805
+ }
1806
+ function resolveCandidates(purpose, options) {
1807
+ const cwd = options?.cwd ?? process.cwd();
1808
+ const cli = toLegacyCliOptions(options?.cli);
1809
+ const paths = getConfigPaths2(cwd);
1810
+ warnIfLegacyConfigExists(cwd);
1811
+ const preserveFallbackChain = options?.preserveFallbackChain === true;
1812
+ const scalarProvider = resolvePurposeProviderScalar(purpose, cli, cwd);
1813
+ let scalarModel;
1814
+ try {
1815
+ scalarModel = resolvePurposeModelScalar(purpose, scalarProvider.value, cli, cwd);
1816
+ } catch (error) {
1817
+ if (!preserveFallbackChain || !(error instanceof InvalidProviderModelError)) {
1818
+ throw error;
1819
+ }
1820
+ scalarModel = {
1821
+ value: "invalid",
1822
+ source: "fallback",
1823
+ sourcePath: `resolution-error:${error.message}`
1824
+ };
1825
+ }
1826
+ const scalarConfigured = shouldUseScalarCandidate(scalarProvider, scalarModel);
1827
+ if (scalarConfigured && !preserveFallbackChain) {
1828
+ return [
1829
+ buildCandidate({
1830
+ provider: scalarProvider.value,
1831
+ model: scalarModel.value,
1832
+ purpose,
1833
+ index: 0,
1834
+ providerSource: scalarProvider.source,
1835
+ providerSourcePath: scalarProvider.sourcePath ?? "resolution-engine:provider",
1836
+ modelSource: scalarModel.source,
1837
+ modelSourcePath: scalarModel.sourcePath ?? "resolution-engine:model"
1838
+ })
1839
+ ];
1840
+ }
1841
+ const projectConfig = loadProjectConfig(cwd);
1842
+ const userConfig = loadUserConfig(cwd);
1843
+ const registry = loadProviderRegistryForCwd(cwd);
1844
+ const candidateActiveProfile = getActiveProfile();
1845
+ let providerOrder;
1846
+ let providerOrderSource = "registry";
1847
+ let providerOrderSourcePath = "providers.yaml#providers.*.order";
1848
+ if (!providerOrder && candidateActiveProfile) {
1849
+ const profilePurposeOrder = getPurposeProviderOrder(
1850
+ candidateActiveProfile.defaults,
1851
+ purpose
1852
+ );
1853
+ if (profilePurposeOrder && profilePurposeOrder.length > 0) {
1854
+ providerOrder = profilePurposeOrder;
1855
+ providerOrderSource = "profile";
1856
+ const purposeKey = purpose === "decomposition" ? "defaults.intent.decomposition.providerOrder" : `defaults.${purpose}.providerOrder`;
1857
+ providerOrderSourcePath = `profile:${candidateActiveProfile.name}#${purposeKey}`;
1858
+ }
1859
+ }
1860
+ if (!providerOrder && candidateActiveProfile?.defaults?.providerOrder?.length) {
1861
+ providerOrder = candidateActiveProfile.defaults.providerOrder;
1862
+ providerOrderSource = "profile";
1863
+ providerOrderSourcePath = `profile:${candidateActiveProfile.name}#defaults.providerOrder`;
1864
+ }
1865
+ if (!providerOrder) {
1866
+ const projectPurposeOrder = getPurposeProviderOrder(projectConfig?.defaults, purpose);
1867
+ if (projectPurposeOrder && projectPurposeOrder.length > 0) {
1868
+ providerOrder = projectPurposeOrder;
1869
+ providerOrderSource = "project";
1870
+ const purposeKey = purpose === "decomposition" ? "defaults.intent.decomposition.providerOrder" : `defaults.${purpose}.providerOrder`;
1871
+ providerOrderSourcePath = `${paths.projectConfigFile}#${purposeKey}`;
1872
+ }
1873
+ }
1874
+ if (!providerOrder && projectConfig?.defaults?.providerOrder?.length) {
1875
+ providerOrder = projectConfig.defaults.providerOrder;
1876
+ providerOrderSource = "project";
1877
+ providerOrderSourcePath = `${paths.projectConfigFile}#defaults.providerOrder`;
1878
+ }
1879
+ if (!providerOrder) {
1880
+ const userPurposeOrder = getPurposeProviderOrder(userConfig?.defaults, purpose);
1881
+ if (userPurposeOrder && userPurposeOrder.length > 0) {
1882
+ providerOrder = userPurposeOrder;
1883
+ providerOrderSource = "user-config";
1884
+ const purposeKey = purpose === "decomposition" ? "defaults.intent.decomposition.providerOrder" : `defaults.${purpose}.providerOrder`;
1885
+ providerOrderSourcePath = `${paths.userConfigFile}#${purposeKey}`;
1886
+ }
1887
+ }
1888
+ if (!providerOrder && userConfig?.defaults?.providerOrder?.length) {
1889
+ providerOrder = userConfig.defaults.providerOrder;
1890
+ providerOrderSource = "user-config";
1891
+ providerOrderSourcePath = `${paths.userConfigFile}#defaults.providerOrder`;
1892
+ }
1893
+ if (!providerOrder || providerOrder.length === 0) {
1894
+ providerOrder = ProviderRegistry.getEnabledProviders(registry).map((p) => p.id);
1895
+ providerOrderSource = "registry";
1896
+ providerOrderSourcePath = "providers.yaml#providers.*.order";
1897
+ }
1898
+ providerOrder = filterRunnableProviderOrder(
1899
+ providerOrder,
1900
+ `${providerOrderSource}:${providerOrderSourcePath}`,
1901
+ cwd
1902
+ );
1903
+ if (scalarConfigured && preserveFallbackChain) {
1904
+ providerOrder = [
1905
+ scalarProvider.value,
1906
+ ...providerOrder.filter((provider) => provider !== scalarProvider.value)
1907
+ ];
1908
+ }
1909
+ const candidates = [];
1910
+ let index = 0;
1911
+ for (const provider of providerOrder) {
1912
+ const modelCandidates = [];
1913
+ const preferredProviderSelected = scalarConfigured && preserveFallbackChain && provider === scalarProvider.value;
1914
+ const resolvedProviderSource = preferredProviderSelected ? scalarProvider.source : providerOrderSource;
1915
+ const resolvedProviderSourcePath = preferredProviderSelected ? scalarProvider.sourcePath ?? "resolution-engine:preferred-provider" : providerOrderSourcePath;
1916
+ const providerSourceLabel = `${resolvedProviderSource}:${resolvedProviderSourcePath}`;
1917
+ const addModelCandidate = (model, source, sourcePath) => {
1918
+ if (!model || model.trim().length === 0) return;
1919
+ if (modelCandidates.some((entry) => entry.model === model)) return;
1920
+ modelCandidates.push({ model, source, sourcePath });
1921
+ };
1922
+ const envModel = getProviderEnvModel(provider);
1923
+ if (envModel) {
1924
+ addModelCandidate(envModel.value, envModel.source, envModel.sourcePath);
1925
+ }
1926
+ if (purpose === "judge") {
1927
+ const judgeProvider = resolveJudgeProvider(cli, cwd);
1928
+ const judgeModel = resolveJudgeModel(cli, cwd);
1929
+ if (judgeProvider.value === provider) {
1930
+ addModelCandidate(
1931
+ judgeModel.value,
1932
+ judgeModel.source,
1933
+ judgeModel.sourcePath ?? "resolution-engine:judge-model"
1934
+ );
1935
+ }
1936
+ } else if (purpose === "synthesis") {
1937
+ const synthesisProvider = resolveSynthesisProvider(cli, cwd);
1938
+ const synthesisModel = resolveSynthesisModel(cli, cwd);
1939
+ if (synthesisProvider.value === provider) {
1940
+ addModelCandidate(
1941
+ synthesisModel.value,
1942
+ synthesisModel.source,
1943
+ synthesisModel.sourcePath ?? "resolution-engine:synthesis-model"
1944
+ );
1945
+ }
1946
+ } else {
1947
+ const projectPurposeModel = getPurposeSingleModel(projectConfig?.defaults, purpose);
1948
+ const userPurposeModel = getPurposeSingleModel(userConfig?.defaults, purpose);
1949
+ addModelCandidate(
1950
+ projectPurposeModel,
1951
+ "project",
1952
+ `${paths.projectConfigFile}#defaults.intent.decomposition.model`
1953
+ );
1954
+ addModelCandidate(
1955
+ userPurposeModel,
1956
+ "user-config",
1957
+ `${paths.userConfigFile}#defaults.intent.decomposition.model`
1958
+ );
1959
+ }
1960
+ const profileModelOrder = candidateActiveProfile?.defaults?.providers?.[provider]?.modelOrder;
1961
+ const projectModelOrder = projectConfig?.defaults?.providers?.[provider]?.modelOrder;
1962
+ const userModelOrder = userConfig?.defaults?.providers?.[provider]?.modelOrder;
1963
+ const modelOrder = profileModelOrder ?? projectModelOrder ?? userModelOrder;
1964
+ if (modelOrder && modelOrder.length > 0) {
1965
+ const orderSource = profileModelOrder ? "profile" : projectModelOrder ? "project" : "user-config";
1966
+ const orderSourcePath = profileModelOrder ? `profile:${candidateActiveProfile.name}#defaults.providers.${provider}.modelOrder` : `${projectModelOrder ? paths.projectConfigFile : paths.userConfigFile}#defaults.providers.${provider}.modelOrder`;
1967
+ for (const m of modelOrder) {
1968
+ addModelCandidate(m, orderSource, orderSourcePath);
1969
+ }
1970
+ }
1971
+ const profileProviderModel = candidateActiveProfile?.defaults?.providers?.[provider]?.model;
1972
+ if (candidateActiveProfile && profileProviderModel) {
1973
+ addModelCandidate(
1974
+ profileProviderModel,
1975
+ "profile",
1976
+ `profile:${candidateActiveProfile.name}#defaults.providers.${provider}.model`
1977
+ );
1978
+ }
1979
+ const projectProviderModel = projectConfig?.defaults?.providers?.[provider]?.model;
1980
+ const userProviderModel = userConfig?.defaults?.providers?.[provider]?.model;
1981
+ addModelCandidate(
1982
+ projectProviderModel,
1983
+ "project",
1984
+ `${paths.projectConfigFile}#defaults.providers.${provider}.model`
1985
+ );
1986
+ addModelCandidate(
1987
+ userProviderModel,
1988
+ "user-config",
1989
+ `${paths.userConfigFile}#defaults.providers.${provider}.model`
1990
+ );
1991
+ if (candidateActiveProfile?.defaults?.model) {
1992
+ addModelCandidate(
1993
+ candidateActiveProfile.defaults.model,
1994
+ "profile",
1995
+ `profile:${candidateActiveProfile.name}#defaults.model`
1996
+ );
1997
+ }
1998
+ addModelCandidate(
1999
+ projectConfig?.defaults?.model,
2000
+ "project",
2001
+ `${paths.projectConfigFile}#defaults.model`
2002
+ );
2003
+ addModelCandidate(
2004
+ userConfig?.defaults?.model,
2005
+ "user-config",
2006
+ `${paths.userConfigFile}#defaults.model`
2007
+ );
2008
+ const validConfigModels = [];
2009
+ for (const entry of modelCandidates) {
2010
+ const valid = buildValidatedModelList(
2011
+ provider,
2012
+ [entry.model],
2013
+ `${entry.source}:${entry.sourcePath}`,
2014
+ registry
2015
+ );
2016
+ if (valid.length > 0) {
2017
+ validConfigModels.push(entry);
2018
+ }
2019
+ }
2020
+ if (validConfigModels.length > 0) {
2021
+ for (const entry of validConfigModels) {
2022
+ candidates.push(
2023
+ buildCandidate({
2024
+ provider,
2025
+ model: entry.model,
2026
+ purpose,
2027
+ index: index++,
2028
+ providerSource: resolvedProviderSource,
2029
+ providerSourcePath: resolvedProviderSourcePath,
2030
+ modelSource: entry.source,
2031
+ modelSourcePath: entry.sourcePath
2032
+ })
2033
+ );
2034
+ }
2035
+ continue;
2036
+ }
2037
+ try {
2038
+ const registryModel = ProviderRegistry.getProviderConfig(provider, registry).models.default;
2039
+ const validatedModel = ProviderRegistry.resolveModel(provider, registryModel, registry);
2040
+ candidates.push(
2041
+ buildCandidate({
2042
+ provider,
2043
+ model: validatedModel,
2044
+ purpose,
2045
+ index: index++,
2046
+ providerSource: resolvedProviderSource,
2047
+ providerSourcePath: resolvedProviderSourcePath,
2048
+ modelSource: "registry",
2049
+ modelSourcePath: `providers.yaml#providers.${provider}.models.default`
2050
+ })
2051
+ );
2052
+ } catch {
2053
+ emitWarning(
2054
+ "CFG-008",
2055
+ {
2056
+ taskId: "resolution-engine",
2057
+ subsystem: "config",
2058
+ executionPhase: "setup"
2059
+ },
2060
+ {
2061
+ severity: "WARN" /* WARN */,
2062
+ metadata: {
2063
+ provider,
2064
+ operation: "resolveCandidates",
2065
+ message: `Provider '${provider}' from ${providerSourceLabel} is not in the registry; skipping`
2066
+ }
2067
+ }
2068
+ );
2069
+ }
2070
+ }
2071
+ return candidates;
2072
+ }
2073
+ function resolvePreferred(purpose, options) {
2074
+ const candidates = resolveCandidates(purpose, options);
2075
+ const first = candidates[0];
2076
+ if (first) {
2077
+ return first;
2078
+ }
2079
+ const cwd = options?.cwd ?? process.cwd();
2080
+ const registry = loadProviderRegistryForCwd(cwd);
2081
+ const registryPath = resolveProvidersConfigPath({ cwd });
2082
+ const fallbackProvider = Object.values(registry.providers).filter((p) => p.enabled).sort((a, b) => a.order - b.order)[0]?.id;
2083
+ if (!fallbackProvider) {
2084
+ throw new Error(
2085
+ `Invalid provider registry at ${registryPath}: no providers are enabled. Enable at least one providers.<id>.enabled entry.`
2086
+ );
2087
+ }
2088
+ return {
2089
+ provider: fallbackProvider,
2090
+ model: "auto",
2091
+ source: "registry",
2092
+ sourcePath: `${registryPath}#providers.*.order`,
2093
+ providerSource: "registry",
2094
+ providerSourcePath: `${registryPath}#providers.*.order`,
2095
+ modelSource: "fallback",
2096
+ modelSourcePath: "resolution-engine:fallback-model",
2097
+ purpose,
2098
+ index: 0
2099
+ };
2100
+ }
2101
+ function formatResolvedValue(resolved) {
2102
+ let result = String(resolved.value);
2103
+ result += ` (from: ${resolved.source}`;
2104
+ if (resolved.sourcePath) {
2105
+ result += `, path: ${resolved.sourcePath}`;
2106
+ }
2107
+ result += ")";
2108
+ return result;
2109
+ }
2110
+ function getConfigSummary(cli, cwd = process.cwd()) {
2111
+ const config = resolveConfig(cli, cwd);
2112
+ const lines = [
2113
+ "Poetic Configuration:",
2114
+ ` Default Provider: ${formatResolvedValue(config.defaultProvider)}`,
2115
+ ` Default Strategy: ${formatResolvedValue(config.defaultStrategy)}`,
2116
+ ` Default Model: ${formatResolvedValue(config.defaultModel)}`,
2117
+ ` Decomposition Routing Policy: ${formatResolvedValue(config.decompositionRoutingPolicy)}`,
2118
+ ` planExecute.blockerMode: ${formatResolvedValue(config.planExecute.blockerMode)}`,
2119
+ ` Synthesis Model: ${formatResolvedValue(config.synthesisModel)}`,
2120
+ ` Splitter Model: ${formatResolvedValue(config.splitterModel)}`,
2121
+ "",
2122
+ "Judge Configuration:",
2123
+ ` Type: ${formatResolvedValue(config.judge.type)}`,
2124
+ ` Provider: ${formatResolvedValue(config.judge.provider)}`,
2125
+ ` Model: ${formatResolvedValue(config.judge.model)}`,
2126
+ "",
2127
+ "Provider Models:"
2128
+ ];
2129
+ for (const [provider, model] of Object.entries(config.providerModels)) {
2130
+ lines.push(` ${provider}: ${formatResolvedValue(model)}`);
2131
+ }
2132
+ return lines.join("\n");
2133
+ }
2134
+
2135
+ export {
2136
+ JUDGE_SPECIFICITY,
2137
+ coherentJudgeModelForProvider,
2138
+ reconcileJudgePair,
2139
+ InvalidProviderModelError,
2140
+ resolveJudgeType,
2141
+ clearConfigCaches,
2142
+ loadPoeticConfigFile,
2143
+ resolveAskConfig,
2144
+ resolveProgressNarrationConfig,
2145
+ loadProviderRegistryForCwd,
2146
+ checkDefaultProviderEnablement,
2147
+ DefaultProviderUnusableError,
2148
+ assertDefaultProviderEnabled,
2149
+ resolveDefaultProvider,
2150
+ resolveDefaultJudgeProvider,
2151
+ resolveReadyDefaultProvider,
2152
+ resolveDefaultStrategy,
2153
+ resolveProviderModel,
2154
+ resolveJudgeProvider,
2155
+ resolveJudgeModel,
2156
+ resolveSynthesisModel,
2157
+ resolveSynthesisProvider,
2158
+ resolveSplitterModel,
2159
+ resolveIntentDecompositionHints,
2160
+ resolveIntentNonGoals,
2161
+ resolveIntentDisableRepoContext,
2162
+ resolveJudgeConfig,
2163
+ resolveConfig,
2164
+ resolvePlanExecuteConfig,
2165
+ resolvePlanExecuteBlockerMode,
2166
+ resolveConfiguredProviderExecutionTransport,
2167
+ resolveProviderExecutionTransport,
2168
+ resolveProviderExecutionTransportConfig,
2169
+ resolveDecompositionRoutingPolicy,
2170
+ resolveCandidates,
2171
+ resolvePreferred,
2172
+ formatResolvedValue,
2173
+ getConfigSummary
2174
+ };
2175
+ //# sourceMappingURL=chunk-XPU2XADL.js.map