@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,969 @@
1
+ import {
2
+ extractBalancedJson,
3
+ parseJsonCandidate,
4
+ stripMarkdownCodeFences
5
+ } from "./chunk-VVGEPBPS.js";
6
+
7
+ // src/core/judge/matrix-result-parser.ts
8
+ import { z } from "zod";
9
+ var RISK_LEVEL_VALUES = ["low", "medium", "high", "critical", "unknown"];
10
+ var SCOPE_HYGIENE_RISK_VALUES = ["low", "medium", "high", "unknown"];
11
+ var FOLLOW_UP_COST_VALUES = [
12
+ "none",
13
+ "mechanical",
14
+ "localized",
15
+ "moderate",
16
+ "structural",
17
+ "unknown"
18
+ ];
19
+ var LEGACY_FOLLOW_UP_COST_ALIASES = {
20
+ architectural: "structural"
21
+ };
22
+ var VERIFICATION_STATE_VALUES = [
23
+ "all-pass",
24
+ "partial-fail",
25
+ "all-fail",
26
+ "not-run",
27
+ "mixed",
28
+ "unknown"
29
+ ];
30
+ var SCOPE_HYGIENE_VALUES = [
31
+ "clean",
32
+ "minor-issues",
33
+ "significant-churn",
34
+ "unknown"
35
+ ];
36
+ var REQUIRED_PROFILES = [
37
+ "acceptance-ready",
38
+ "best-as-delivered",
39
+ "best-foundation"
40
+ ];
41
+ var MATRIX_INCONCLUSIVE_CONFIDENCE_THRESHOLD = 0.6;
42
+ var MATRIX_HIGH_CONFIDENCE_DEGRADED_THRESHOLD = 0.8;
43
+ var KNOWN_TOP_LEVEL_FIELDS = /* @__PURE__ */ new Set([
44
+ "mode",
45
+ "evidenceLedger",
46
+ "baseAssessments",
47
+ "profileVerdicts",
48
+ "diagnostics",
49
+ "disagreements",
50
+ "synthesisOpportunities",
51
+ "criterionAssessments",
52
+ "runnerUpAdvantages",
53
+ "calibrationStatus"
54
+ ]);
55
+ var MATRIX_CRITERION_STATUS_VALUES = ["delivered", "partial", "missing", "unverified"];
56
+ var MATRIX_EVIDENCE_KIND_VALUES = [
57
+ "outcome",
58
+ "direct",
59
+ "proxy",
60
+ "negative",
61
+ "missing",
62
+ "unverifiable"
63
+ ];
64
+ var MatrixSchemaError = class extends Error {
65
+ };
66
+ function fail(message) {
67
+ throw new MatrixSchemaError(message);
68
+ }
69
+ function isRecord(value) {
70
+ return typeof value === "object" && value !== null && !Array.isArray(value);
71
+ }
72
+ function extractToolParameterBodies(text) {
73
+ const bodies = [];
74
+ for (const match of text.matchAll(
75
+ /<parameter\s+name=["'](?:response|result|output)["']\s*>([\s\S]*?)<\/parameter>/gi
76
+ )) {
77
+ const body = match[1]?.trim();
78
+ if (body) bodies.push(body);
79
+ }
80
+ return bodies;
81
+ }
82
+ function fencedBlockContents(text) {
83
+ const contents = [];
84
+ for (const match of text.matchAll(/```(?:json)?\s*\n?([\s\S]*?)\n?```/gi)) {
85
+ if (match[1] !== void 0) contents.push(match[1]);
86
+ }
87
+ return contents;
88
+ }
89
+ function tryParseCandidate(candidate) {
90
+ const direct = parseJsonCandidate(candidate);
91
+ if (direct !== null) return direct;
92
+ const inner = extractBalancedJson(candidate);
93
+ if (inner !== null && inner !== candidate) {
94
+ const innerParsed = parseJsonCandidate(inner);
95
+ if (innerParsed !== null) return innerParsed;
96
+ }
97
+ if (candidate.includes("\r")) {
98
+ return tryParseCandidate(candidate.replace(/\r\n?/g, "\n"));
99
+ }
100
+ return null;
101
+ }
102
+ function extractJsonFromOutput(raw) {
103
+ const stripped = stripMarkdownCodeFences(raw).trim();
104
+ const candidates = [];
105
+ const seen = /* @__PURE__ */ new Set();
106
+ const enqueue = (s) => {
107
+ const trimmed = s?.trim();
108
+ if (trimmed && !seen.has(trimmed)) {
109
+ seen.add(trimmed);
110
+ candidates.push(trimmed);
111
+ }
112
+ };
113
+ enqueue(raw.trim());
114
+ for (const body of extractToolParameterBodies(raw)) {
115
+ enqueue(body);
116
+ enqueue(stripMarkdownCodeFences(body));
117
+ for (const content of fencedBlockContents(body)) enqueue(content);
118
+ enqueue(extractBalancedJson(body));
119
+ }
120
+ for (const content of fencedBlockContents(raw)) enqueue(content);
121
+ enqueue(stripped);
122
+ enqueue(extractBalancedJson(raw));
123
+ enqueue(extractBalancedJson(stripped));
124
+ const parsedCandidates = [];
125
+ for (const candidate of candidates) {
126
+ const parsed = tryParseCandidate(candidate);
127
+ if (parsed !== null) parsedCandidates.push(parsed);
128
+ }
129
+ for (const candidate of parsedCandidates) {
130
+ if (isRecord(candidate) && candidate.mode === "profile-matrix") return candidate;
131
+ }
132
+ const firstRecord = parsedCandidates.find(isRecord);
133
+ if (firstRecord !== void 0) return firstRecord;
134
+ return parsedCandidates.length > 0 ? parsedCandidates[0] : null;
135
+ }
136
+ var VARIANT_ANNOTATION_SEPARATORS = [" (", " - ", " \u2014 "];
137
+ function resolveVariantRef(raw, expectedSet) {
138
+ if (typeof raw !== "string") {
139
+ return { id: null, warning: `variant reference ${JSON.stringify(raw)} is not a string` };
140
+ }
141
+ let value = raw.trim();
142
+ const quoted = /^(["'`])([\s\S]*)\1$/.exec(value);
143
+ if (quoted?.[2] !== void 0) {
144
+ value = quoted[2].trim();
145
+ }
146
+ if (expectedSet.has(value)) {
147
+ return { id: value };
148
+ }
149
+ const matches = [];
150
+ for (const expected of expectedSet) {
151
+ if (!value.startsWith(expected)) continue;
152
+ const remainder = value.slice(expected.length);
153
+ if (remainder.length === 0) {
154
+ matches.push(expected);
155
+ continue;
156
+ }
157
+ if (VARIANT_ANNOTATION_SEPARATORS.some((sep) => remainder.startsWith(sep))) {
158
+ matches.push(expected);
159
+ }
160
+ }
161
+ if (matches.length === 1) {
162
+ const resolved = matches[0];
163
+ return {
164
+ id: resolved,
165
+ warning: `variant reference ${JSON.stringify(raw)} normalized to "${resolved}" (inline commentary stripped)`
166
+ };
167
+ }
168
+ if (matches.length > 1) {
169
+ return {
170
+ id: null,
171
+ warning: `variant reference ${JSON.stringify(raw)} is ambiguous (matches ${matches.length} expected IDs as a leading token) \u2014 dropped`
172
+ };
173
+ }
174
+ return {
175
+ id: null,
176
+ warning: `variant reference ${JSON.stringify(raw)} did not match any expected variant \u2014 dropped`
177
+ };
178
+ }
179
+ function resolveWinnerRef(raw, expectedSet, fieldPath, warnings, errorMessage) {
180
+ const resolution = resolveVariantRef(raw, expectedSet);
181
+ if (resolution.id === null) fail(errorMessage);
182
+ if (resolution.warning) warnings.push(`${fieldPath}: ${resolution.warning}`);
183
+ return resolution.id;
184
+ }
185
+ var looseString = z.preprocess((v) => typeof v === "string" ? v : "", z.string());
186
+ var looseNumber = z.preprocess(
187
+ (v) => typeof v === "number" && Number.isFinite(v) ? v : 0,
188
+ z.number()
189
+ );
190
+ var looseBoolean = z.preprocess((v) => typeof v === "boolean" ? v : false, z.boolean());
191
+ var looseStringArray = z.preprocess(
192
+ (v) => Array.isArray(v) ? v.filter((entry) => typeof entry === "string") : [],
193
+ z.array(z.string())
194
+ );
195
+ function lenientEnum(values, label, fieldPath, warnings, aliases) {
196
+ return z.preprocess(
197
+ (value) => {
198
+ if (typeof value === "string") {
199
+ if (values.includes(value)) return value;
200
+ const alias = aliases?.[value];
201
+ if (alias !== void 0) return alias;
202
+ }
203
+ if (value !== void 0 && value !== null) {
204
+ warnings.push(
205
+ `Unexpected ${label} at ${fieldPath}: ${JSON.stringify(value)}, coerced to 'unknown'`
206
+ );
207
+ }
208
+ return "unknown";
209
+ },
210
+ z.enum(values)
211
+ );
212
+ }
213
+ function score100(fieldPath, warnings) {
214
+ return z.unknown().transform((value) => {
215
+ const score = typeof value === "number" && Number.isFinite(value) ? value : null;
216
+ if (score === null || score < 0 || score > 100) {
217
+ fail(`${fieldPath}=${score} is outside [0,100]`);
218
+ }
219
+ if (warnings && score > 0 && score <= 1) {
220
+ warnings.push(`${fieldPath}=${score} looks like a 0-1 value; expected 0-100`);
221
+ }
222
+ return score;
223
+ });
224
+ }
225
+ function evidenceLedgerSchema(warnings) {
226
+ const entrySchema = (idx) => z.preprocess(
227
+ (value) => {
228
+ if (!isRecord(value)) {
229
+ warnings.push(`evidenceLedger.variants[${idx}] is not an object \u2014 using empty entry`);
230
+ return {};
231
+ }
232
+ return {
233
+ variant: value.variant,
234
+ artifactsChanged: value.artifactsChanged ?? value.filesChanged,
235
+ artifactList: value.artifactList ?? value.fileList,
236
+ suspiciousArtifacts: value.suspiciousArtifacts ?? value.suspiciousFiles,
237
+ scopeHygieneRisk: value.scopeHygieneRisk ?? value.repoHygieneRisk,
238
+ linesAdded: value.linesAdded,
239
+ linesRemoved: value.linesRemoved,
240
+ testStatus: value.testStatus,
241
+ buildStatus: value.buildStatus,
242
+ keyFindings: value.keyFindings
243
+ };
244
+ },
245
+ z.object({
246
+ variant: looseString,
247
+ artifactsChanged: looseNumber,
248
+ artifactList: looseStringArray,
249
+ suspiciousArtifacts: looseStringArray,
250
+ scopeHygieneRisk: z.enum(SCOPE_HYGIENE_RISK_VALUES).catch("unknown"),
251
+ linesAdded: looseNumber,
252
+ linesRemoved: looseNumber,
253
+ testStatus: looseString,
254
+ buildStatus: looseString,
255
+ keyFindings: looseStringArray
256
+ })
257
+ ).transform((entry) => ({
258
+ ...entry,
259
+ filesChanged: entry.artifactsChanged,
260
+ fileList: entry.artifactList,
261
+ suspiciousFiles: entry.suspiciousArtifacts,
262
+ repoHygieneRisk: entry.scopeHygieneRisk
263
+ }));
264
+ const verificationSummarySchema = z.object({
265
+ allPassed: looseStringArray,
266
+ partialFailures: looseStringArray,
267
+ allFailed: looseStringArray,
268
+ notRun: looseStringArray,
269
+ decisiveVerificationSignals: looseStringArray
270
+ });
271
+ return z.unknown().transform((raw) => {
272
+ if (!isRecord(raw)) fail("evidenceLedger must be an object");
273
+ const taskSummary = typeof raw.taskSummary === "string" ? raw.taskSummary : "";
274
+ if (!taskSummary) fail("evidenceLedger.taskSummary is required and must be a string");
275
+ if (!Array.isArray(raw.variants)) fail("evidenceLedger.variants must be an array");
276
+ const variants = raw.variants.map((value, idx) => entrySchema(idx).parse(value));
277
+ if (!isRecord(raw.verificationSummary)) {
278
+ fail("evidenceLedger.verificationSummary must be an object");
279
+ }
280
+ return {
281
+ taskSummary,
282
+ acceptanceCriteria: looseStringArray.parse(raw.acceptanceCriteria),
283
+ variants,
284
+ crossVariantFindings: looseStringArray.parse(raw.crossVariantFindings),
285
+ verificationSummary: verificationSummarySchema.parse(raw.verificationSummary)
286
+ };
287
+ });
288
+ }
289
+ function baseAssessmentsSchema(expectedVariants, warnings) {
290
+ const expectedSet = new Set(expectedVariants);
291
+ const itemSchema = (i) => {
292
+ const p = `baseAssessments[${i}]`;
293
+ return z.preprocess(
294
+ (value) => {
295
+ const v = isRecord(value) ? value : {};
296
+ return {
297
+ correctness: v.correctness,
298
+ completeness: v.completeness,
299
+ codeQuality: v.codeQuality,
300
+ architecture: v.architecture,
301
+ verificationConfidence: v.verificationConfidence,
302
+ scopeHygiene: v.scopeHygiene ?? v.repoHygiene,
303
+ acceptanceRisk: v.shippingRisk ?? v.acceptanceRisk,
304
+ followUpCost: v.fixupCost ?? v.followUpCost,
305
+ rationale: v.rationale
306
+ };
307
+ },
308
+ z.object({
309
+ correctness: score100(`${p}.correctness`),
310
+ completeness: score100(`${p}.completeness`),
311
+ codeQuality: score100(`${p}.codeQuality`),
312
+ architecture: score100(`${p}.architecture`),
313
+ verificationConfidence: score100(`${p}.verificationConfidence`, warnings),
314
+ scopeHygiene: lenientEnum(
315
+ SCOPE_HYGIENE_VALUES,
316
+ "ScopeHygiene",
317
+ `${p}.scopeHygiene`,
318
+ warnings
319
+ ),
320
+ acceptanceRisk: lenientEnum(
321
+ RISK_LEVEL_VALUES,
322
+ "RiskLevel",
323
+ `${p}.acceptanceRisk`,
324
+ warnings
325
+ ),
326
+ followUpCost: lenientEnum(
327
+ FOLLOW_UP_COST_VALUES,
328
+ "FollowUpCost",
329
+ `${p}.followUpCost`,
330
+ warnings,
331
+ LEGACY_FOLLOW_UP_COST_ALIASES
332
+ ),
333
+ rationale: looseString
334
+ })
335
+ );
336
+ };
337
+ return z.unknown().transform((raw) => {
338
+ if (!Array.isArray(raw)) fail("baseAssessments must be an array");
339
+ if (raw.length === 0) {
340
+ fail(
341
+ expectedVariants.length === 0 ? "baseAssessments must not be empty" : `baseAssessments is empty but ${expectedVariants.length} variant(s) were expected \u2014 treating as malformed output`
342
+ );
343
+ }
344
+ const seenVariants = /* @__PURE__ */ new Set();
345
+ const assessments = [];
346
+ for (let i = 0; i < raw.length; i++) {
347
+ const item = raw[i];
348
+ if (!isRecord(item)) {
349
+ warnings.push(`baseAssessments[${i}] is not an object \u2014 skipping`);
350
+ continue;
351
+ }
352
+ const variantId = typeof item.variant === "string" ? item.variant : "";
353
+ if (!variantId) fail(`baseAssessments[${i}].variant is required`);
354
+ if (!expectedSet.has(variantId)) {
355
+ fail(
356
+ `baseAssessments[${i}].variant "${variantId}" is not in expectedVariants [${expectedVariants.join(", ")}]`
357
+ );
358
+ }
359
+ if (seenVariants.has(variantId)) {
360
+ fail(`baseAssessments contains duplicate entry for variant "${variantId}"`);
361
+ }
362
+ seenVariants.add(variantId);
363
+ const parsedItem = itemSchema(i).parse(item);
364
+ assessments.push({ variant: variantId, ...parsedItem, repoHygiene: parsedItem.scopeHygiene });
365
+ }
366
+ for (const expected of expectedVariants) {
367
+ if (!seenVariants.has(expected)) {
368
+ warnings.push(
369
+ `baseAssessments is missing variant "${expected}" \u2014 inserted no-deliverable sentinel`
370
+ );
371
+ assessments.push({
372
+ variant: expected,
373
+ correctness: 0,
374
+ completeness: 0,
375
+ codeQuality: 0,
376
+ architecture: 0,
377
+ verificationConfidence: 0,
378
+ acceptanceRisk: "critical",
379
+ followUpCost: "structural",
380
+ scopeHygiene: "unknown",
381
+ repoHygiene: "unknown",
382
+ rationale: "Matrix judge omitted this variant; host inserted a no-deliverable sentinel so escalation can continue."
383
+ });
384
+ }
385
+ }
386
+ return assessments;
387
+ });
388
+ }
389
+ function profileVerdictsSchema(expectedVariants, warnings) {
390
+ const expectedSet = new Set(expectedVariants);
391
+ return z.unknown().transform((raw) => {
392
+ if (!Array.isArray(raw)) fail("profileVerdicts must be an array");
393
+ if (raw.length !== 3) {
394
+ fail(`profileVerdicts must have exactly 3 entries (one per profile), got ${raw.length}`);
395
+ }
396
+ const seenProfiles = /* @__PURE__ */ new Set();
397
+ const verdicts = [];
398
+ for (let i = 0; i < raw.length; i++) {
399
+ const item = raw[i];
400
+ if (!isRecord(item)) fail(`profileVerdicts[${i}] must be an object`);
401
+ let profileRaw = typeof item.profile === "string" ? item.profile : "";
402
+ if (profileRaw === "merge-ready") profileRaw = "acceptance-ready";
403
+ if (!REQUIRED_PROFILES.includes(profileRaw)) {
404
+ fail(`profileVerdicts[${i}].profile "${profileRaw}" is not a valid JudgeProfile`);
405
+ }
406
+ const profile = profileRaw;
407
+ if (seenProfiles.has(profile)) {
408
+ fail(`profileVerdicts contains duplicate entry for profile "${profile}"`);
409
+ }
410
+ seenProfiles.add(profile);
411
+ const rawWinner = typeof item.winner === "string" ? item.winner : "";
412
+ if (!rawWinner) fail(`profileVerdicts[${i}].winner is required`);
413
+ const winner = resolveWinnerRef(
414
+ rawWinner,
415
+ expectedSet,
416
+ `profileVerdicts[${i}].winner`,
417
+ warnings,
418
+ `profileVerdicts[${i}].winner "${rawWinner}" is not in expectedVariants [${expectedVariants.join(", ")}]`
419
+ );
420
+ const ranking = looseStringArray.parse(item.ranking);
421
+ if (ranking.length === 0) fail(`profileVerdicts[${i}].ranking must not be empty`);
422
+ const seenRanking = /* @__PURE__ */ new Set();
423
+ const normalizedRanking = [];
424
+ for (const r of ranking) {
425
+ const resolvedRank = resolveWinnerRef(
426
+ r,
427
+ expectedSet,
428
+ `profileVerdicts[${i}].ranking`,
429
+ warnings,
430
+ `profileVerdicts[${i}].ranking contains unknown variant "${r}"`
431
+ );
432
+ if (seenRanking.has(resolvedRank)) {
433
+ fail(`profileVerdicts[${i}].ranking contains duplicate variant "${resolvedRank}"`);
434
+ }
435
+ seenRanking.add(resolvedRank);
436
+ normalizedRanking.push(resolvedRank);
437
+ }
438
+ for (const expected of expectedVariants) {
439
+ if (!seenRanking.has(expected)) {
440
+ warnings.push(
441
+ `profileVerdicts[${i}].ranking is missing variant "${expected}" \u2014 appended at end`
442
+ );
443
+ normalizedRanking.push(expected);
444
+ }
445
+ }
446
+ const confidence = typeof item.confidence === "number" && Number.isFinite(item.confidence) ? item.confidence : null;
447
+ if (confidence === null || confidence < 0 || confidence > 1) {
448
+ fail(`profileVerdicts[${i}].confidence=${confidence} is outside [0,1]`);
449
+ }
450
+ verdicts.push({
451
+ profile,
452
+ winner,
453
+ ranking: normalizedRanking,
454
+ confidence,
455
+ rationale: looseString.parse(item.rationale),
456
+ decisiveFactors: looseStringArray.parse(item.decisiveFactors),
457
+ disqualifiers: looseStringArray.parse(item.disqualifiers),
458
+ verificationStateUsed: lenientEnum(
459
+ VERIFICATION_STATE_VALUES,
460
+ "VerificationState",
461
+ `profileVerdicts[${i}].verificationStateUsed`,
462
+ warnings
463
+ ).parse(item.verificationStateUsed),
464
+ whyWinnerOverGreenAlternative: typeof item.whyWinnerOverGreenAlternative === "string" ? item.whyWinnerOverGreenAlternative : void 0
465
+ });
466
+ }
467
+ for (const required of REQUIRED_PROFILES) {
468
+ if (!seenProfiles.has(required)) {
469
+ fail(`profileVerdicts is missing required profile "${required}"`);
470
+ }
471
+ }
472
+ return verdicts;
473
+ });
474
+ }
475
+ function diagnosticsSchema(expectedVariants, warnings) {
476
+ const expectedSet = new Set(expectedVariants);
477
+ const riskLevel = (path) => lenientEnum(RISK_LEVEL_VALUES, "RiskLevel", path, warnings);
478
+ const riskFlagsSchema = z.preprocess(
479
+ (value) => {
480
+ const v = isRecord(value) ? value : {};
481
+ return {
482
+ securityRisk: v.securityRisk,
483
+ regressionRisk: v.regressionRisk,
484
+ scopeRisk: v.scopeRisk ?? v.blastRadius,
485
+ reversibilityRisk: v.reversibilityRisk ?? v.rollbackRisk,
486
+ migrationRisk: v.migrationRisk,
487
+ operatorWorkflowRisk: v.operatorWorkflowRisk
488
+ };
489
+ },
490
+ z.object({
491
+ securityRisk: riskLevel("diagnostics.riskFlags.securityRisk"),
492
+ regressionRisk: riskLevel("diagnostics.riskFlags.regressionRisk"),
493
+ scopeRisk: riskLevel("diagnostics.riskFlags.scopeRisk"),
494
+ reversibilityRisk: riskLevel("diagnostics.riskFlags.reversibilityRisk"),
495
+ migrationRisk: riskLevel("diagnostics.riskFlags.migrationRisk"),
496
+ operatorWorkflowRisk: riskLevel("diagnostics.riskFlags.operatorWorkflowRisk")
497
+ })
498
+ );
499
+ return z.unknown().transform((raw) => {
500
+ if (!isRecord(raw)) fail("diagnostics must be an object");
501
+ const resolveSoftRefs = (values, fieldPath) => {
502
+ const resolved = [];
503
+ for (const value of values) {
504
+ const { id, warning } = resolveVariantRef(value, expectedSet);
505
+ if (warning) warnings.push(`${fieldPath}: ${warning}`);
506
+ if (id !== null) resolved.push(id);
507
+ }
508
+ return resolved;
509
+ };
510
+ if (raw.requiredHumanChecks === void 0 || raw.requiredHumanChecks === null) {
511
+ warnings.push("diagnostics.requiredHumanChecks is missing \u2014 defaulting to []");
512
+ }
513
+ const paretoFrontier = resolveSoftRefs(
514
+ looseStringArray.parse(raw.paretoFrontier),
515
+ "diagnostics.paretoFrontier"
516
+ );
517
+ const dominatedVariants = resolveSoftRefs(
518
+ looseStringArray.parse(raw.dominatedVariants),
519
+ "diagnostics.dominatedVariants"
520
+ );
521
+ const followUpCostByVariant = {};
522
+ const rawFollowUpCostByVariant = raw.followUpCostByVariant ?? raw.fixupCostByVariant;
523
+ if (isRecord(rawFollowUpCostByVariant)) {
524
+ for (const [rawKey, value] of Object.entries(rawFollowUpCostByVariant)) {
525
+ const { id, warning } = resolveVariantRef(rawKey, expectedSet);
526
+ if (warning) warnings.push(`diagnostics.followUpCostByVariant: ${warning}`);
527
+ if (id === null) continue;
528
+ followUpCostByVariant[id] = lenientEnum(
529
+ FOLLOW_UP_COST_VALUES,
530
+ "FollowUpCost",
531
+ `diagnostics.followUpCostByVariant.${id}`,
532
+ warnings,
533
+ LEGACY_FOLLOW_UP_COST_ALIASES
534
+ ).parse(value);
535
+ }
536
+ }
537
+ const riskFlags = riskFlagsSchema.parse(raw.riskFlags);
538
+ const sensitivityRaw = isRecord(raw.sensitivity) ? raw.sensitivity : {};
539
+ const requiredHumanChecks = looseStringArray.parse(raw.requiredHumanChecks);
540
+ const llmBlockingHumanChecks = Array.isArray(raw.blockingHumanChecks) ? looseStringArray.parse(raw.blockingHumanChecks) : [];
541
+ const rawAdvisoryHumanChecks = Array.isArray(raw.advisoryHumanChecks) ? looseStringArray.parse(raw.advisoryHumanChecks) : requiredHumanChecks;
542
+ const blockingHumanChecks = Array.from(
543
+ /* @__PURE__ */ new Set([...requiredHumanChecks, ...llmBlockingHumanChecks])
544
+ );
545
+ const advisoryHumanChecks = rawAdvisoryHumanChecks.filter(
546
+ (check) => !blockingHumanChecks.includes(check)
547
+ );
548
+ return {
549
+ paretoFrontier,
550
+ dominatedVariants,
551
+ profileDisagreements: looseStringArray.parse(raw.profileDisagreements),
552
+ riskFlags,
553
+ followUpCostByVariant,
554
+ sensitivity: {
555
+ nearTies: looseStringArray.parse(sensitivityRaw.nearTies),
556
+ criteriaThatCouldFlipDecision: looseStringArray.parse(
557
+ sensitivityRaw.criteriaThatCouldFlipDecision
558
+ )
559
+ },
560
+ requiredHumanChecks,
561
+ blockingHumanChecks,
562
+ advisoryHumanChecks,
563
+ coverageGaps: looseStringArray.parse(raw.coverageGaps)
564
+ };
565
+ });
566
+ }
567
+ function disagreementsSchema(expectedVariants, warnings) {
568
+ const expectedSet = new Set(expectedVariants);
569
+ return z.unknown().transform((raw) => {
570
+ if (!isRecord(raw)) fail("disagreements must be an object");
571
+ const winnerByProfileRaw = isRecord(raw.winnerByProfile) ? raw.winnerByProfile : {};
572
+ const winnerByProfile = {
573
+ // Accept both new name (acceptance-ready) and legacy alias (merge-ready)
574
+ "acceptance-ready": looseString.parse(
575
+ winnerByProfileRaw["acceptance-ready"] ?? winnerByProfileRaw["merge-ready"]
576
+ ),
577
+ "best-as-delivered": looseString.parse(winnerByProfileRaw["best-as-delivered"]),
578
+ "best-foundation": looseString.parse(winnerByProfileRaw["best-foundation"])
579
+ };
580
+ for (const profile of REQUIRED_PROFILES) {
581
+ const rawWinner = winnerByProfile[profile];
582
+ if (!rawWinner) fail(`disagreements.winnerByProfile.${profile} is required`);
583
+ winnerByProfile[profile] = resolveWinnerRef(
584
+ rawWinner,
585
+ expectedSet,
586
+ `disagreements.winnerByProfile.${profile}`,
587
+ warnings,
588
+ `disagreements.winnerByProfile.${profile} "${rawWinner}" is not in expectedVariants [${expectedVariants.join(", ")}]`
589
+ );
590
+ }
591
+ return {
592
+ profilesDisagree: looseBoolean.parse(raw.profilesDisagree),
593
+ winnerByProfile,
594
+ explanation: looseString.parse(raw.explanation)
595
+ };
596
+ });
597
+ }
598
+ function synthesisOpportunitiesSchema(expectedVariants, warnings) {
599
+ const expectedSet = new Set(expectedVariants);
600
+ return z.unknown().transform((raw) => {
601
+ if (raw === void 0 || raw === null) {
602
+ warnings.push("synthesisOpportunities is missing \u2014 defaulting to []");
603
+ return [];
604
+ }
605
+ if (!Array.isArray(raw)) fail("synthesisOpportunities must be an array");
606
+ const opportunities = [];
607
+ for (let i = 0; i < raw.length; i++) {
608
+ const item = raw[i];
609
+ if (!isRecord(item)) {
610
+ warnings.push(`synthesisOpportunities[${i}] is not an object \u2014 skipping`);
611
+ continue;
612
+ }
613
+ const rawSourceVariant = looseString.parse(item.sourceVariant ?? item.variant);
614
+ if (!rawSourceVariant) fail(`synthesisOpportunities[${i}].sourceVariant is required`);
615
+ const { id: sourceVariant, warning } = resolveVariantRef(rawSourceVariant, expectedSet);
616
+ if (warning) warnings.push(`synthesisOpportunities[${i}].sourceVariant: ${warning}`);
617
+ if (sourceVariant === null) continue;
618
+ opportunities.push({
619
+ sourceVariant,
620
+ take: looseStringArray.parse(item.take),
621
+ reject: looseStringArray.parse(item.reject),
622
+ fixBeforeUse: looseStringArray.parse(item.fixBeforeUse),
623
+ rationale: looseString.parse(item.rationale)
624
+ });
625
+ }
626
+ return opportunities;
627
+ });
628
+ }
629
+ function criterionAssessmentsSchema(expectedVariants, expectedCriterionIds) {
630
+ return z.unknown().transform((raw) => {
631
+ if (expectedCriterionIds === void 0) {
632
+ if (raw === void 0 || raw === null) return void 0;
633
+ } else if (!Array.isArray(raw)) {
634
+ fail("criterionAssessments must be an array");
635
+ }
636
+ if (!Array.isArray(raw)) fail("criterionAssessments must be an array");
637
+ const variantSet = new Set(expectedVariants);
638
+ const criterionSet = new Set(expectedCriterionIds ?? []);
639
+ const seen = /* @__PURE__ */ new Set();
640
+ const assessments = raw.map((item, index) => {
641
+ if (!isRecord(item)) fail(`criterionAssessments[${index}] must be an object`);
642
+ const criterionId = looseString.parse(item.criterionId).trim();
643
+ const variant = looseString.parse(item.variant).trim();
644
+ if (!criterionId) fail(`criterionAssessments[${index}].criterionId is required`);
645
+ if (!variantSet.has(variant)) {
646
+ fail(`criterionAssessments[${index}].variant must be an exact expected variant ID`);
647
+ }
648
+ if (expectedCriterionIds !== void 0 && !criterionSet.has(criterionId)) {
649
+ fail(`criterionAssessments[${index}].criterionId "${criterionId}" is not expected`);
650
+ }
651
+ const key = `${criterionId}\0${variant}`;
652
+ if (seen.has(key)) {
653
+ fail(
654
+ `criterionAssessments contains duplicate criterion/variant pair: ${criterionId}/${variant}`
655
+ );
656
+ }
657
+ seen.add(key);
658
+ const status = z.enum(MATRIX_CRITERION_STATUS_VALUES).safeParse(item.status);
659
+ if (!status.success) fail(`criterionAssessments[${index}].status is invalid`);
660
+ const evidenceKind = z.enum(MATRIX_EVIDENCE_KIND_VALUES).safeParse(item.evidenceKind);
661
+ if (!evidenceKind.success) fail(`criterionAssessments[${index}].evidenceKind is invalid`);
662
+ const evidence = looseStringArray.parse(item.evidence).filter((entry) => entry.trim());
663
+ if (evidence.length === 0) fail(`criterionAssessments[${index}].evidence must not be empty`);
664
+ return {
665
+ criterionId,
666
+ variant,
667
+ status: status.data,
668
+ evidenceKind: evidenceKind.data,
669
+ evidence
670
+ };
671
+ });
672
+ if (expectedCriterionIds !== void 0) {
673
+ for (const criterionId of expectedCriterionIds) {
674
+ for (const variant of expectedVariants) {
675
+ if (!seen.has(`${criterionId}\0${variant}`)) {
676
+ fail(
677
+ `criterionAssessments is missing criterion/variant pair: ${criterionId}/${variant}`
678
+ );
679
+ }
680
+ }
681
+ }
682
+ const expectedCount = expectedCriterionIds.length * expectedVariants.length;
683
+ if (assessments.length !== expectedCount) {
684
+ fail(`criterionAssessments must contain exactly ${expectedCount} rows`);
685
+ }
686
+ }
687
+ return assessments;
688
+ });
689
+ }
690
+ function runnerUpAdvantagesSchema(expectedVariants, expectedCriterionIds, required) {
691
+ return z.unknown().transform((raw) => {
692
+ if (raw === void 0 || raw === null) {
693
+ if (required) fail("runnerUpAdvantages must be an array");
694
+ return void 0;
695
+ }
696
+ if (!Array.isArray(raw)) fail("runnerUpAdvantages must be an array");
697
+ const variantSet = new Set(expectedVariants);
698
+ return raw.map((item, index) => {
699
+ if (!isRecord(item)) fail(`runnerUpAdvantages[${index}] must be an object`);
700
+ const sourceVariant = looseString.parse(item.sourceVariant).trim();
701
+ if (!variantSet.has(sourceVariant)) {
702
+ fail(`runnerUpAdvantages[${index}].sourceVariant must be an exact expected variant ID`);
703
+ }
704
+ const advantage = looseString.parse(item.advantage).trim();
705
+ const rationale = looseString.parse(item.rationale).trim();
706
+ if (!advantage) fail(`runnerUpAdvantages[${index}].advantage is required`);
707
+ if (!rationale) fail(`runnerUpAdvantages[${index}].rationale is required`);
708
+ const evidenceKind = z.enum(MATRIX_EVIDENCE_KIND_VALUES).safeParse(item.evidenceKind);
709
+ if (!evidenceKind.success) fail(`runnerUpAdvantages[${index}].evidenceKind is invalid`);
710
+ const evidence = looseStringArray.parse(item.evidence).filter((entry) => entry.trim());
711
+ if (evidence.length === 0) fail(`runnerUpAdvantages[${index}].evidence must not be empty`);
712
+ const disposition = z.enum(["adopt", "harvest", "reject", "follow-up"]).safeParse(item.disposition);
713
+ if (!disposition.success) fail(`runnerUpAdvantages[${index}].disposition is invalid`);
714
+ const followUpCost = item.followUpCost === void 0 ? void 0 : typeof item.followUpCost === "string" && FOLLOW_UP_COST_VALUES.includes(item.followUpCost) ? item.followUpCost : fail(`runnerUpAdvantages[${index}].followUpCost is invalid`);
715
+ const hasWinnerCriterionGap = Object.hasOwn(item, "winnerCriterionGap");
716
+ if (required && !hasWinnerCriterionGap) {
717
+ fail(`runnerUpAdvantages[${index}].winnerCriterionGap is required`);
718
+ }
719
+ let winnerCriterionGap;
720
+ if (hasWinnerCriterionGap) {
721
+ if (item.winnerCriterionGap === null) {
722
+ winnerCriterionGap = null;
723
+ } else {
724
+ if (!isRecord(item.winnerCriterionGap)) {
725
+ fail(`runnerUpAdvantages[${index}].winnerCriterionGap must be an object or null`);
726
+ }
727
+ const variant = looseString.parse(item.winnerCriterionGap.variant).trim();
728
+ const criterionId = looseString.parse(item.winnerCriterionGap.criterionId).trim();
729
+ if (!variantSet.has(variant)) {
730
+ fail(
731
+ `runnerUpAdvantages[${index}].winnerCriterionGap.variant must be an exact expected variant ID`
732
+ );
733
+ }
734
+ if (!criterionId || expectedCriterionIds && !expectedCriterionIds.includes(criterionId)) {
735
+ fail(
736
+ `runnerUpAdvantages[${index}].winnerCriterionGap.criterionId must be an exact expected criterion ID`
737
+ );
738
+ }
739
+ winnerCriterionGap = { variant, criterionId };
740
+ }
741
+ }
742
+ return {
743
+ sourceVariant,
744
+ advantage,
745
+ evidenceKind: evidenceKind.data,
746
+ evidence,
747
+ disposition: disposition.data,
748
+ rationale,
749
+ ...followUpCost ? { followUpCost } : {},
750
+ ...hasWinnerCriterionGap ? { winnerCriterionGap } : {}
751
+ };
752
+ });
753
+ });
754
+ }
755
+ function calibrationStatusSchema(warnings) {
756
+ return z.unknown().transform((value) => {
757
+ if (value !== void 0 && value !== "experimental" && value !== "validated") {
758
+ warnings.push(`Unexpected calibrationStatus "${value}", defaulting to "experimental"`);
759
+ }
760
+ return value === "validated" ? "validated" : "experimental";
761
+ });
762
+ }
763
+ function isDegradedStatus(value) {
764
+ const normalized = value?.trim().toLowerCase().replace(/[_\s]+/g, "-");
765
+ if (!normalized) return false;
766
+ return normalized.includes("fail") || normalized.includes("error") || normalized.includes("timeout") || normalized.includes("timed-out") || normalized.includes("crash") || normalized.includes("degraded");
767
+ }
768
+ function buildMatrixWinnerStatus(input) {
769
+ const caveats = [];
770
+ const lowConfidenceProfiles = input.profileVerdicts.filter((verdict) => verdict.confidence < MATRIX_INCONCLUSIVE_CONFIDENCE_THRESHOLD).map((verdict) => `${verdict.profile}=${verdict.confidence.toFixed(2)}`);
771
+ if (input.profileVerdicts.length === 0) {
772
+ caveats.push("no profile verdicts were produced");
773
+ } else if (lowConfidenceProfiles.length === input.profileVerdicts.length) {
774
+ caveats.push(
775
+ `all profile verdicts below confidence threshold ${MATRIX_INCONCLUSIVE_CONFIDENCE_THRESHOLD}: ${lowConfidenceProfiles.join(", ")}`
776
+ );
777
+ }
778
+ const evidenceByVariant = new Map(
779
+ input.evidenceLedger.variants.map((entry) => [entry.variant, entry])
780
+ );
781
+ const allFailed = new Set(input.evidenceLedger.verificationSummary.allFailed);
782
+ const notRun = new Set(input.evidenceLedger.verificationSummary.notRun);
783
+ const degradedWinnerProfiles = input.profileVerdicts.filter((verdict) => {
784
+ if (verdict.profile === "best-foundation" && verdict.confidence < MATRIX_HIGH_CONFIDENCE_DEGRADED_THRESHOLD) {
785
+ return false;
786
+ }
787
+ const evidence = evidenceByVariant.get(verdict.winner);
788
+ return verdict.verificationStateUsed === "all-fail" || verdict.verificationStateUsed === "not-run" || allFailed.has(verdict.winner) || notRun.has(verdict.winner) || isDegradedStatus(evidence?.testStatus) || isDegradedStatus(evidence?.buildStatus);
789
+ }).map((verdict) => `${verdict.profile}=${verdict.winner}`);
790
+ if (degradedWinnerProfiles.length > 0) {
791
+ caveats.push(`degraded or unverified profile winner: ${degradedWinnerProfiles.join(", ")}`);
792
+ }
793
+ const hardInconclusiveCaveats = [...caveats];
794
+ if (hardInconclusiveCaveats.length > 0) {
795
+ return { status: "inconclusive", caveats: hardInconclusiveCaveats };
796
+ }
797
+ if (input.diagnostics.blockingHumanChecks.length > 0) {
798
+ return { status: "conditional", caveats: [...input.diagnostics.blockingHumanChecks] };
799
+ }
800
+ if (input.disagreements.profilesDisagree && input.diagnostics.sensitivity.nearTies.length > 0) {
801
+ caveats.push(
802
+ `split profile decision with near-tie sensitivity: ${input.diagnostics.sensitivity.nearTies.slice(0, 3).join(" | ")}`
803
+ );
804
+ }
805
+ if (caveats.length > 0) {
806
+ return { status: "inconclusive", caveats };
807
+ }
808
+ return { status: "accepted", caveats: [] };
809
+ }
810
+ function isAcceptedMatrixVerdict(status) {
811
+ return status === "accepted";
812
+ }
813
+ function parseMatrixResult(rawOutput, expectedVariants, options = {}) {
814
+ const warnings = [];
815
+ let parsed;
816
+ try {
817
+ parsed = extractJsonFromOutput(rawOutput);
818
+ } catch (err) {
819
+ return {
820
+ success: false,
821
+ error: `JSON extraction threw unexpectedly: ${err instanceof Error ? err.message : String(err)}`,
822
+ warnings
823
+ };
824
+ }
825
+ if (parsed === null || parsed === void 0) {
826
+ return { success: false, error: "No JSON object found in LLM output", warnings };
827
+ }
828
+ if (!isRecord(parsed)) {
829
+ return {
830
+ success: false,
831
+ error: `Parsed JSON is not an object (got ${Array.isArray(parsed) ? "array" : typeof parsed})`,
832
+ warnings
833
+ };
834
+ }
835
+ if (parsed.mode !== "profile-matrix") {
836
+ return {
837
+ success: false,
838
+ error: `Expected mode="profile-matrix", got ${JSON.stringify(parsed.mode)}`,
839
+ warnings
840
+ };
841
+ }
842
+ for (const key of Object.keys(parsed)) {
843
+ if (!KNOWN_TOP_LEVEL_FIELDS.has(key)) {
844
+ warnings.push(`Unexpected top-level field: "${key}"`);
845
+ }
846
+ }
847
+ const matrixSchema = z.object({
848
+ evidenceLedger: evidenceLedgerSchema(warnings),
849
+ baseAssessments: baseAssessmentsSchema(expectedVariants, warnings),
850
+ profileVerdicts: profileVerdictsSchema(expectedVariants, warnings),
851
+ diagnostics: diagnosticsSchema(expectedVariants, warnings),
852
+ disagreements: disagreementsSchema(expectedVariants, warnings),
853
+ synthesisOpportunities: synthesisOpportunitiesSchema(expectedVariants, warnings),
854
+ criterionAssessments: criterionAssessmentsSchema(
855
+ expectedVariants,
856
+ options.expectedCriterionIds
857
+ ),
858
+ runnerUpAdvantages: runnerUpAdvantagesSchema(
859
+ expectedVariants,
860
+ options.expectedCriterionIds,
861
+ options.expectedCriterionIds !== void 0
862
+ ),
863
+ calibrationStatus: calibrationStatusSchema(warnings)
864
+ });
865
+ let sections;
866
+ try {
867
+ sections = matrixSchema.parse(parsed);
868
+ } catch (err) {
869
+ if (err instanceof MatrixSchemaError) {
870
+ return { success: false, error: err.message, warnings };
871
+ }
872
+ return {
873
+ success: false,
874
+ error: `Matrix validation threw unexpectedly: ${err instanceof Error ? err.message : String(err)}`,
875
+ warnings
876
+ };
877
+ }
878
+ const result = {
879
+ mode: "profile-matrix",
880
+ matrixEvaluatorType: "ai-profile-matrix",
881
+ evidenceLedger: sections.evidenceLedger,
882
+ baseAssessments: sections.baseAssessments,
883
+ profileVerdicts: sections.profileVerdicts,
884
+ diagnostics: sections.diagnostics,
885
+ disagreements: sections.disagreements,
886
+ synthesisOpportunities: sections.synthesisOpportunities,
887
+ ...sections.criterionAssessments ? { criterionAssessments: sections.criterionAssessments } : {},
888
+ ...sections.runnerUpAdvantages ? { runnerUpAdvantages: sections.runnerUpAdvantages } : {},
889
+ calibrationStatus: sections.calibrationStatus
890
+ };
891
+ if (sections.criterionAssessments) {
892
+ const assessmentsByVariant = /* @__PURE__ */ new Map();
893
+ for (const assessment of sections.criterionAssessments) {
894
+ const entries = assessmentsByVariant.get(assessment.variant) ?? [];
895
+ entries.push(assessment);
896
+ assessmentsByVariant.set(assessment.variant, entries);
897
+ }
898
+ for (const verdict of sections.profileVerdicts) {
899
+ const hasRequiredGap = (assessmentsByVariant.get(verdict.winner) ?? []).some(
900
+ (assessment) => assessment.status === "partial" || assessment.status === "missing"
901
+ );
902
+ const diagnosticFollowUp = sections.diagnostics.followUpCostByVariant[verdict.winner];
903
+ const assessmentFollowUp = sections.baseAssessments.find(
904
+ (assessment) => assessment.variant === verdict.winner
905
+ )?.followUpCost;
906
+ if (hasRequiredGap && (diagnosticFollowUp === "none" || assessmentFollowUp === "none")) {
907
+ return {
908
+ success: false,
909
+ error: `Profile ${verdict.profile} winner ${verdict.winner} has a partial/missing required criterion but declares no follow-up cost`,
910
+ warnings
911
+ };
912
+ }
913
+ }
914
+ for (const advantage of sections.runnerUpAdvantages ?? []) {
915
+ const gap = advantage.winnerCriterionGap;
916
+ if (!gap) continue;
917
+ const selectedWinner = sections.profileVerdicts.some(
918
+ (verdict) => verdict.winner === gap.variant
919
+ );
920
+ if (!selectedWinner) {
921
+ return {
922
+ success: false,
923
+ error: `runnerUpAdvantages winnerCriterionGap target ${gap.variant} is not a selected profile winner`,
924
+ warnings
925
+ };
926
+ }
927
+ const assessment = (assessmentsByVariant.get(gap.variant) ?? []).find(
928
+ (entry) => entry.criterionId === gap.criterionId
929
+ );
930
+ if (assessment?.status === "delivered") {
931
+ return {
932
+ success: false,
933
+ error: `runnerUpAdvantages identifies ${gap.variant}/${gap.criterionId} as a winner criterion gap but criterionAssessments marks it delivered`,
934
+ warnings
935
+ };
936
+ }
937
+ const diagnosticFollowUp = sections.diagnostics.followUpCostByVariant[gap.variant];
938
+ const assessmentFollowUp = sections.baseAssessments.find(
939
+ (entry) => entry.variant === gap.variant
940
+ )?.followUpCost;
941
+ if (diagnosticFollowUp === "none" || assessmentFollowUp === "none") {
942
+ return {
943
+ success: false,
944
+ error: `runnerUpAdvantages identifies ${gap.variant}/${gap.criterionId} as a winner criterion gap but declares no follow-up cost`,
945
+ warnings
946
+ };
947
+ }
948
+ }
949
+ }
950
+ const winnerStatus = buildMatrixWinnerStatus({
951
+ evidenceLedger: sections.evidenceLedger,
952
+ profileVerdicts: sections.profileVerdicts,
953
+ diagnostics: sections.diagnostics,
954
+ disagreements: sections.disagreements
955
+ });
956
+ result.winnerStatus = winnerStatus.status;
957
+ if (winnerStatus.caveats.length > 0) {
958
+ result.winnerCaveats = winnerStatus.caveats;
959
+ }
960
+ return { success: true, result, warnings };
961
+ }
962
+
963
+ export {
964
+ resolveVariantRef,
965
+ buildMatrixWinnerStatus,
966
+ isAcceptedMatrixVerdict,
967
+ parseMatrixResult
968
+ };
969
+ //# sourceMappingURL=chunk-5LAMRH4X.js.map