@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,1064 @@
1
+ import {
2
+ resolveInitiatedBy
3
+ } from "./chunk-6V7HGQFZ.js";
4
+ import {
5
+ sanitizeSynthesisArtifactForPersistence,
6
+ sanitizeSynthesisStringForPersistence
7
+ } from "./chunk-GG6KJYW6.js";
8
+ import {
9
+ COMPLETENESS_VALIDATION_THRESHOLD
10
+ } from "./chunk-6EQKFDBH.js";
11
+ import {
12
+ normalizeProviderCliVersion
13
+ } from "./chunk-XZYR5EDO.js";
14
+ import {
15
+ deriveVariantOutcome,
16
+ repairOutcomeCanSupersedeRawTouchedFailure
17
+ } from "./chunk-ATVKCSGT.js";
18
+ import {
19
+ canonicalizeVariantIdentifier,
20
+ formatVariantIdentifier,
21
+ formatVariantIdentifierFromResult,
22
+ parseVariantIdentifier
23
+ } from "./chunk-CP7H3HSP.js";
24
+ import {
25
+ assertSafePathComponent
26
+ } from "./chunk-S2VQCZO4.js";
27
+ import {
28
+ parseJsonWithContext
29
+ } from "./chunk-QVZMFDYG.js";
30
+ import {
31
+ redactPersistedTestsExecuted
32
+ } from "./chunk-6Y5U7UFY.js";
33
+ import {
34
+ LabPathResolver
35
+ } from "./chunk-7GDRQBQC.js";
36
+ import {
37
+ getExecutionContext
38
+ } from "./chunk-UI2F6DJ5.js";
39
+ import {
40
+ resolvePoeticRoot
41
+ } from "./chunk-LEIIWPWQ.js";
42
+
43
+ // src/orchestrator/competition-handle.ts
44
+ import { randomUUID } from "crypto";
45
+ import * as fs from "fs";
46
+ import * as path from "path";
47
+ var TERMINAL_EVALUATION_STATUSES = /* @__PURE__ */ new Set(["completed", "failed"]);
48
+ var _seqCounters = /* @__PURE__ */ new Map();
49
+ function readExistingMaxSeq(eventsPath) {
50
+ try {
51
+ if (!fs.existsSync(eventsPath)) return -1;
52
+ const raw = fs.readFileSync(eventsPath, "utf8");
53
+ let max = -1;
54
+ for (const line of raw.split(/\r?\n/)) {
55
+ const trimmed = line.trim();
56
+ if (!trimmed) continue;
57
+ try {
58
+ const parsed = JSON.parse(trimmed);
59
+ if (typeof parsed.seq === "number" && Number.isFinite(parsed.seq)) {
60
+ max = Math.max(max, Math.floor(parsed.seq));
61
+ }
62
+ } catch {
63
+ }
64
+ }
65
+ return max;
66
+ } catch {
67
+ return -1;
68
+ }
69
+ }
70
+ function nextSeq(taskId, eventsPath) {
71
+ let prev = _seqCounters.get(taskId);
72
+ if (prev === void 0) {
73
+ prev = readExistingMaxSeq(eventsPath);
74
+ }
75
+ const next = prev + 1;
76
+ _seqCounters.set(taskId, next);
77
+ return next;
78
+ }
79
+ function sanitizeDiagnosticValue(value, depth = 0) {
80
+ if (depth > 4) return "[truncated]";
81
+ if (value == null) return value;
82
+ if (typeof value === "string") return sanitizeSynthesisStringForPersistence(value);
83
+ if (typeof value === "number" || typeof value === "boolean") return value;
84
+ if (Array.isArray(value)) {
85
+ return value.slice(0, 50).map((entry) => sanitizeDiagnosticValue(entry, depth + 1));
86
+ }
87
+ if (value instanceof Error) {
88
+ const details = {
89
+ name: sanitizeSynthesisStringForPersistence(value.name),
90
+ message: sanitizeSynthesisStringForPersistence(value.message)
91
+ };
92
+ if (typeof value.stack === "string") {
93
+ details.stack = sanitizeSynthesisStringForPersistence(value.stack);
94
+ }
95
+ return details;
96
+ }
97
+ if (typeof value === "object") {
98
+ const details = {};
99
+ for (const [key, entry] of Object.entries(value).slice(0, 100)) {
100
+ const keyAwareValue = sanitizeSynthesisArtifactForPersistence({ [key]: entry });
101
+ details[key] = keyAwareValue[key] ?? sanitizeDiagnosticValue(entry, depth + 1);
102
+ }
103
+ return details;
104
+ }
105
+ return sanitizeSynthesisStringForPersistence(String(value));
106
+ }
107
+ function sanitizeHandlePrompt(prompt) {
108
+ return sanitizeSynthesisStringForPersistence(prompt ?? "");
109
+ }
110
+ function sanitizeHandleErrorMessage(message) {
111
+ return typeof message === "string" ? sanitizeSynthesisStringForPersistence(message) : void 0;
112
+ }
113
+ var COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_SCORER_ID = "competition-handle-persistence-composite";
114
+ var COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_SCORER_VERSION = "1.0.0";
115
+ var COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_VALIDATION_THRESHOLD = {
116
+ authority: "core.validation.completeness.competition-handle-persistence-composite",
117
+ owner: COMPLETENESS_VALIDATION_THRESHOLD.owner,
118
+ minimumAcceptableScore: COMPLETENESS_VALIDATION_THRESHOLD.minimumAcceptableScore
119
+ };
120
+ var PERSISTENCE_FAIL_CLOSED_EVIDENCE_PROVENANCE = "persistence-fail-closed";
121
+ function failClosedUnderPersistenceComposite(base) {
122
+ return {
123
+ score: 0,
124
+ scorerId: COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_SCORER_ID,
125
+ scorerVersion: COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_SCORER_VERSION,
126
+ evidenceProvenance: PERSISTENCE_FAIL_CLOSED_EVIDENCE_PROVENANCE,
127
+ ok: false,
128
+ breakdown: base.breakdown,
129
+ threshold: {
130
+ authority: COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_VALIDATION_THRESHOLD.authority,
131
+ value: COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_VALIDATION_THRESHOLD.minimumAcceptableScore
132
+ },
133
+ components: [base]
134
+ };
135
+ }
136
+ function normalizePersistedCompletenessPair(completeness, completenessAssessment) {
137
+ if (completenessAssessment == null) {
138
+ return { completeness, completenessAssessment: void 0 };
139
+ }
140
+ const rawScore = completenessAssessment.score;
141
+ const scoreInRange = typeof rawScore === "number" && Number.isFinite(rawScore) && rawScore >= 0 && rawScore <= 100;
142
+ if (!scoreInRange || completenessAssessment.ok === false) {
143
+ if (completenessAssessment.scorerId === COMPETITION_HANDLE_PERSISTENCE_COMPOSITE_COMPLETENESS_SCORER_ID && completenessAssessment.score === 0 && completenessAssessment.ok === false) {
144
+ return {
145
+ completeness: 0,
146
+ completenessAssessment
147
+ };
148
+ }
149
+ const normalized = failClosedUnderPersistenceComposite(completenessAssessment);
150
+ return {
151
+ completeness: normalized.score,
152
+ completenessAssessment: normalized
153
+ };
154
+ }
155
+ return {
156
+ completeness: rawScore,
157
+ completenessAssessment
158
+ };
159
+ }
160
+ function extractErrorDetails(error) {
161
+ if (!error || typeof error !== "object" && !(error instanceof Error)) return void 0;
162
+ return sanitizeDiagnosticValue(error);
163
+ }
164
+ function getEventsPath(taskId) {
165
+ const safeTaskId = assertSafePathComponent(taskId, "evaluationId");
166
+ return path.join(getBaseDir(), `${safeTaskId}.events.jsonl`);
167
+ }
168
+ function sanitizeCompetitionEventData(data) {
169
+ const sanitized = sanitizeDiagnosticValue(data);
170
+ if (data.completenessAssessment != null && typeof data.completenessAssessment === "object") {
171
+ const pair = normalizePersistedCompletenessPair(
172
+ typeof data.completeness === "number" ? data.completeness : void 0,
173
+ data.completenessAssessment
174
+ );
175
+ sanitized.completeness = typeof pair.completeness === "number" && Number.isFinite(pair.completeness) ? pair.completeness : 0;
176
+ if (pair.completenessAssessment != null) {
177
+ sanitized.completenessAssessment = sanitizeDiagnosticValue(pair.completenessAssessment);
178
+ }
179
+ return sanitized;
180
+ }
181
+ if (typeof data.completeness === "number" && Number.isFinite(data.completeness)) {
182
+ sanitized.completeness = data.completeness;
183
+ }
184
+ return sanitized;
185
+ }
186
+ function appendCompetitionEvent(taskId, event, data = {}) {
187
+ try {
188
+ const eventsPath = getEventsPath(taskId);
189
+ fs.mkdirSync(path.dirname(eventsPath), { recursive: true });
190
+ const record = {
191
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
192
+ seq: nextSeq(taskId, eventsPath),
193
+ taskId,
194
+ event,
195
+ data: sanitizeCompetitionEventData(data)
196
+ };
197
+ fs.appendFileSync(eventsPath, `${JSON.stringify(record)}
198
+ `, "utf8");
199
+ } catch (err) {
200
+ const msg = err instanceof Error ? err.message : String(err);
201
+ console.debug(`[CompetitionHandle] event append failed for ${taskId}: ${msg}`);
202
+ }
203
+ }
204
+ function getBaseDir() {
205
+ const poeticDir = getExecutionContext().poeticDir ?? path.join(resolvePoeticRoot(process.cwd()), ".poetic");
206
+ const stateDir = LabPathResolver.getInstance().getStateDir(poeticDir);
207
+ return path.join(stateDir, "competitions");
208
+ }
209
+ function getHandlePath(taskId) {
210
+ const safeTaskId = assertSafePathComponent(taskId, "evaluationId");
211
+ return path.join(getBaseDir(), `${safeTaskId}.json`);
212
+ }
213
+ function atomicWrite(filePath, payload) {
214
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
215
+ const tmp = `${filePath}.${process.pid}.${Date.now()}.tmp`;
216
+ let fd;
217
+ try {
218
+ fd = fs.openSync(tmp, "wx");
219
+ fs.writeFileSync(fd, payload, "utf8");
220
+ fs.fsyncSync(fd);
221
+ fs.closeSync(fd);
222
+ fd = void 0;
223
+ fs.renameSync(tmp, filePath);
224
+ } finally {
225
+ if (fd !== void 0) {
226
+ try {
227
+ fs.closeSync(fd);
228
+ } catch {
229
+ }
230
+ }
231
+ try {
232
+ fs.unlinkSync(tmp);
233
+ } catch {
234
+ }
235
+ }
236
+ }
237
+ var LOCK_RETRY_DELAY_MS = 25;
238
+ function sleepSync(ms) {
239
+ if (ms <= 0) return;
240
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
241
+ }
242
+ function sleep(ms) {
243
+ return new Promise((resolve) => {
244
+ setTimeout(resolve, ms);
245
+ });
246
+ }
247
+ function readLockOwner(lockPath) {
248
+ try {
249
+ const raw = fs.readFileSync(lockPath, "utf8").trim();
250
+ if (!raw) return void 0;
251
+ if (/^\d+$/.test(raw)) {
252
+ return { pid: Number.parseInt(raw, 10) };
253
+ }
254
+ const parsed = JSON.parse(raw);
255
+ return {
256
+ pid: typeof parsed.pid === "number" && Number.isFinite(parsed.pid) ? parsed.pid : void 0,
257
+ token: typeof parsed.token === "string" ? parsed.token : void 0
258
+ };
259
+ } catch {
260
+ return void 0;
261
+ }
262
+ }
263
+ function isPidAlive(pid) {
264
+ try {
265
+ process.kill(pid, 0);
266
+ return true;
267
+ } catch (error) {
268
+ return error.code === "EPERM";
269
+ }
270
+ }
271
+ function tryAcquireLockOnce(lockPath, payload, staleMs, deadline) {
272
+ try {
273
+ fs.writeFileSync(lockPath, payload, { flag: "wx" });
274
+ return "acquired";
275
+ } catch (err) {
276
+ if (err.code !== "EEXIST") throw err;
277
+ try {
278
+ const stat = fs.statSync(lockPath);
279
+ const owner = readLockOwner(lockPath);
280
+ const ownerAlive = owner?.pid ? isPidAlive(owner.pid) : true;
281
+ const staleWithoutKnownOwner = !owner?.pid && Date.now() - stat.mtimeMs > staleMs;
282
+ if (!ownerAlive || staleWithoutKnownOwner) {
283
+ fs.unlinkSync(lockPath);
284
+ return "retry";
285
+ }
286
+ } catch {
287
+ }
288
+ if (Date.now() >= deadline) {
289
+ return "timeout";
290
+ }
291
+ return "wait";
292
+ }
293
+ }
294
+ function buildLockToken() {
295
+ const token = `${process.pid}:${randomUUID()}`;
296
+ return { token, payload: JSON.stringify({ pid: process.pid, token }) };
297
+ }
298
+ async function acquireLock(lockPath, staleMs = 3e4, timeoutMs = 5e3) {
299
+ const deadline = Date.now() + timeoutMs;
300
+ fs.mkdirSync(path.dirname(lockPath), { recursive: true });
301
+ const { token, payload } = buildLockToken();
302
+ while (true) {
303
+ const attempt = tryAcquireLockOnce(lockPath, payload, staleMs, deadline);
304
+ if (attempt === "acquired") return token;
305
+ if (attempt === "timeout") return void 0;
306
+ if (attempt === "wait") {
307
+ await sleep(LOCK_RETRY_DELAY_MS);
308
+ }
309
+ }
310
+ }
311
+ function acquireLockSync(lockPath, staleMs = 3e4, timeoutMs = 5e3) {
312
+ const deadline = Date.now() + timeoutMs;
313
+ fs.mkdirSync(path.dirname(lockPath), { recursive: true });
314
+ const { token, payload } = buildLockToken();
315
+ while (true) {
316
+ const attempt = tryAcquireLockOnce(lockPath, payload, staleMs, deadline);
317
+ if (attempt === "acquired") return token;
318
+ if (attempt === "timeout") return void 0;
319
+ if (attempt === "wait") {
320
+ sleepSync(LOCK_RETRY_DELAY_MS);
321
+ }
322
+ }
323
+ }
324
+ function releaseLock(lockPath, token) {
325
+ try {
326
+ const owner = readLockOwner(lockPath);
327
+ if (owner?.token !== token) {
328
+ return;
329
+ }
330
+ fs.unlinkSync(lockPath);
331
+ } catch {
332
+ }
333
+ }
334
+ function initEvaluationHandle(evaluationId, prompt, candidates, deliverableContract, runMetadata) {
335
+ const p = getHandlePath(evaluationId);
336
+ const lockPath = `${p}.lock`;
337
+ const lockToken = acquireLockSync(lockPath);
338
+ if (!lockToken) {
339
+ throw new Error(`Timed out waiting for init lock on ${evaluationId}`);
340
+ }
341
+ try {
342
+ initEvaluationHandleLocked(
343
+ evaluationId,
344
+ prompt,
345
+ candidates,
346
+ deliverableContract,
347
+ runMetadata,
348
+ p
349
+ );
350
+ } finally {
351
+ releaseLock(lockPath, lockToken);
352
+ }
353
+ }
354
+ async function initEvaluationHandleAsync(evaluationId, prompt, candidates, deliverableContract, runMetadata) {
355
+ const p = getHandlePath(evaluationId);
356
+ const lockPath = `${p}.lock`;
357
+ const lockToken = await acquireLock(lockPath);
358
+ if (!lockToken) {
359
+ throw new Error(`Timed out waiting for init lock on ${evaluationId}`);
360
+ }
361
+ try {
362
+ initEvaluationHandleLocked(
363
+ evaluationId,
364
+ prompt,
365
+ candidates,
366
+ deliverableContract,
367
+ runMetadata,
368
+ p
369
+ );
370
+ } finally {
371
+ releaseLock(lockPath, lockToken);
372
+ }
373
+ }
374
+ function initEvaluationHandleLocked(evaluationId, prompt, candidates, deliverableContract, runMetadata, handlePath) {
375
+ const now = (/* @__PURE__ */ new Date()).toISOString();
376
+ const safePrompt = sanitizeHandlePrompt(prompt);
377
+ const labContext = LabPathResolver.getInstance().getContext();
378
+ const initialCandidates = candidates.map((c) => ({
379
+ provider: c.provider,
380
+ requestedProvider: c.requestedProvider,
381
+ strategy: c.strategy,
382
+ executionMode: c.executionMode,
383
+ model: c.model,
384
+ requestedModel: c.requestedModel,
385
+ failoverFromProvider: c.failoverFromProvider,
386
+ failoverReason: c.failoverReason,
387
+ workspaceMode: c.workspaceMode,
388
+ ...c.workspaceModeRequested !== void 0 ? { workspaceModeRequested: c.workspaceModeRequested } : {},
389
+ variant: formatVariantIdentifier(c),
390
+ reasoningEffort: c.modelReasoningEffort,
391
+ cursorPromptProfile: c.cursorPromptProfile,
392
+ variantInstanceId: c.variantInstanceId
393
+ }));
394
+ const handle = {
395
+ taskId: evaluationId,
396
+ evaluationId,
397
+ prompt: safePrompt,
398
+ initiatedBy: resolveInitiatedBy(),
399
+ createdAt: now,
400
+ updatedAt: now,
401
+ status: "running",
402
+ ...labContext ? { labId: labContext.labId, labRunId: labContext.runId } : {},
403
+ // Initialize candidate entries without results (populated during execution)
404
+ candidates: initialCandidates,
405
+ variants: initialCandidates,
406
+ // Store contract for downstream access (judges, gates, telemetry)
407
+ deliverableContract,
408
+ ...runMetadata ? { runMetadata } : {}
409
+ };
410
+ atomicWrite(handlePath, JSON.stringify(handle, null, 2));
411
+ appendCompetitionEvent(evaluationId, "competition.started", {
412
+ prompt: safePrompt,
413
+ candidateCount: initialCandidates.length,
414
+ candidates: initialCandidates.map((c) => ({
415
+ provider: c.provider,
416
+ strategy: c.strategy,
417
+ executionMode: c.executionMode,
418
+ variant: c.variant
419
+ }))
420
+ });
421
+ }
422
+ function warnHandleFailure(action, evaluationId, error) {
423
+ const msg = error instanceof Error ? error.message : String(error);
424
+ console.warn(`[CompetitionHandle] Failed to ${action} for ${evaluationId}: ${msg}`);
425
+ }
426
+ function updateEvaluationHandleWithResult(evaluationId, result) {
427
+ try {
428
+ const p = getHandlePath(evaluationId);
429
+ const lockPath = `${p}.lock`;
430
+ const lockToken = acquireLockSync(lockPath);
431
+ if (!lockToken) {
432
+ throw new Error(`Timed out waiting for update lock on ${evaluationId}`);
433
+ }
434
+ try {
435
+ updateEvaluationHandleWithResultLocked(evaluationId, result, p);
436
+ } finally {
437
+ releaseLock(lockPath, lockToken);
438
+ }
439
+ } catch (error) {
440
+ warnHandleFailure("update handle", evaluationId, error);
441
+ }
442
+ }
443
+ async function updateEvaluationHandleWithResultAsync(evaluationId, result) {
444
+ try {
445
+ const p = getHandlePath(evaluationId);
446
+ const lockPath = `${p}.lock`;
447
+ const lockToken = await acquireLock(lockPath);
448
+ if (!lockToken) {
449
+ throw new Error(`Timed out waiting for update lock on ${evaluationId}`);
450
+ }
451
+ try {
452
+ updateEvaluationHandleWithResultLocked(evaluationId, result, p);
453
+ } finally {
454
+ releaseLock(lockPath, lockToken);
455
+ }
456
+ } catch (error) {
457
+ warnHandleFailure("update handle", evaluationId, error);
458
+ }
459
+ }
460
+ function updateEvaluationHandleWithResultLocked(evaluationId, result, p) {
461
+ const raw = fs.existsSync(p) ? fs.readFileSync(p, "utf8") : "";
462
+ const now = (/* @__PURE__ */ new Date()).toISOString();
463
+ let handle;
464
+ if (raw) {
465
+ const parsed = parseJsonWithContext(raw, `Competition handle (${evaluationId})`);
466
+ if (parsed.status === "completed" || parsed.status === "failed") {
467
+ return;
468
+ }
469
+ handle = {
470
+ taskId: parsed.evaluationId || parsed.taskId || evaluationId,
471
+ evaluationId: parsed.evaluationId || parsed.taskId || evaluationId,
472
+ prompt: sanitizeHandlePrompt(parsed.prompt),
473
+ initiatedBy: parsed.initiatedBy,
474
+ createdAt: parsed.createdAt || now,
475
+ updatedAt: parsed.updatedAt || now,
476
+ status: parsed.status,
477
+ outcome: parsed.outcome,
478
+ completedAt: parsed.completedAt,
479
+ errorMessage: parsed.errorMessage,
480
+ winner: parsed.winner,
481
+ candidates: parsed.candidates || parsed.variants || [],
482
+ variants: parsed.variants || parsed.candidates || [],
483
+ labId: parsed.labId,
484
+ labRunId: parsed.labRunId,
485
+ runMetadata: parsed.runMetadata,
486
+ deliverableContract: parsed.deliverableContract,
487
+ synthesis: parsed.synthesis,
488
+ application: parsed.application,
489
+ verification: parsed.verification ?? parsed.winnerVerification
490
+ };
491
+ } else {
492
+ handle = {
493
+ taskId: evaluationId,
494
+ evaluationId,
495
+ createdAt: now,
496
+ updatedAt: now,
497
+ candidates: [],
498
+ variants: []
499
+ };
500
+ }
501
+ const resultWorkspaceMode = result.workspaceMode;
502
+ const resultWorkspaceModeRequestedRaw = result.workspaceModeRequested;
503
+ const resultWorkspaceModeIdentity = resultWorkspaceModeRequestedRaw ?? resultWorkspaceMode;
504
+ const resultReasoningEffort = parseVariantIdentifier(String(result.variant ?? "")).reasoningEffort ?? result.reasoningEffort;
505
+ const resultCursorPromptProfile = parseVariantIdentifier(String(result.variant ?? "")).cursorPromptProfile ?? result.cursorPromptProfile;
506
+ const resultVariantInstanceId = result.variantInstanceId;
507
+ const strictIdx = handle.candidates.findIndex(
508
+ (c) => c.provider === result.provider && c.strategy === result.strategy && c.executionMode === result.executionMode && strictIdentityFieldMatches(c.model, result.model) && strictIdentityFieldMatches(
509
+ c.workspaceModeRequested ?? c.workspaceMode,
510
+ resultWorkspaceModeIdentity
511
+ ) && strictIdentityFieldMatches(c.reasoningEffort, resultReasoningEffort) && strictIdentityFieldMatches(c.cursorPromptProfile, resultCursorPromptProfile) && strictIdentityFieldMatches(c.variantInstanceId, resultVariantInstanceId)
512
+ );
513
+ const idx = strictIdx >= 0 ? strictIdx : handle.candidates.findIndex(
514
+ (c) => c.provider === result.provider && c.strategy === result.strategy && c.executionMode === result.executionMode && strictIdentityFieldMatches(c.model, result.model) && lateBoundIdentityFieldMatches(
515
+ c.workspaceModeRequested ?? c.workspaceMode,
516
+ resultWorkspaceModeIdentity
517
+ ) && lateBoundIdentityFieldMatches(c.reasoningEffort, resultReasoningEffort) && lateBoundIdentityFieldMatches(c.cursorPromptProfile, resultCursorPromptProfile) && strictIdentityFieldMatches(c.variantInstanceId, resultVariantInstanceId)
518
+ );
519
+ const existingCandidate = idx >= 0 ? handle.candidates[idx] : void 0;
520
+ const resultWorkspaceModeRequested = resultWorkspaceModeRequestedRaw ?? existingCandidate?.workspaceModeRequested;
521
+ const resultPromptFingerprint = result.promptFingerprint ?? existingCandidate?.promptFingerprint;
522
+ const resultFinalPromptLength = result.finalPromptLength ?? existingCandidate?.finalPromptLength;
523
+ const resultVariant = typeof result.variant === "string" && result.variant.length > 0 ? formatVariantIdentifierFromResult(result) : existingCandidate?.variant;
524
+ const resultForOutcomeDerivation = result.isSynthesis === true ? { ...result, variant: resultVariant ?? result.variant } : (() => {
525
+ const { outcome: _staleOutcome, ...withoutOutcome } = result;
526
+ return { ...withoutOutcome, variant: resultVariant ?? result.variant };
527
+ })();
528
+ const derivedOutcome = result.isSynthesis === true && result.outcome ? result.outcome : deriveVariantOutcome(resultForOutcomeDerivation);
529
+ const outcomeVerification = derivedOutcome.verification;
530
+ const outcomeDelivery = derivedOutcome.delivery;
531
+ const resultHasChanges = result.hasChanges ?? outcomeDelivery.hasChanges ?? (typeof result.filesChanged === "number" ? result.filesChanged > 0 : void 0);
532
+ const { completeness: persistedCompleteness, completenessAssessment: persistedAssessment } = normalizePersistedCompletenessPair(result.completeness, result.completenessAssessment);
533
+ const patch = {
534
+ provider: result.provider,
535
+ requestedProvider: result.requestedProvider ?? existingCandidate?.requestedProvider,
536
+ strategy: result.strategy,
537
+ executionMode: result.executionMode,
538
+ model: result.model,
539
+ requestedModel: result.requestedModel ?? existingCandidate?.requestedModel,
540
+ failoverFromProvider: result.failoverFromProvider ?? existingCandidate?.failoverFromProvider,
541
+ failoverReason: result.failoverReason ?? existingCandidate?.failoverReason,
542
+ workspaceMode: resultWorkspaceMode,
543
+ ...resultWorkspaceModeRequested !== void 0 ? { workspaceModeRequested: resultWorkspaceModeRequested } : {},
544
+ ...resultVariant !== void 0 ? { variant: resultVariant } : {},
545
+ ...resultPromptFingerprint !== void 0 ? { promptFingerprint: resultPromptFingerprint } : {},
546
+ ...resultFinalPromptLength !== void 0 ? { finalPromptLength: resultFinalPromptLength } : {},
547
+ reasoningEffort: resultReasoningEffort ?? existingCandidate?.reasoningEffort,
548
+ cursorPromptProfile: resultCursorPromptProfile ?? existingCandidate?.cursorPromptProfile,
549
+ variantInstanceId: resultVariantInstanceId ?? existingCandidate?.variantInstanceId,
550
+ resolvedModel: result.resolvedModel,
551
+ providerCliVersion: normalizeProviderCliVersion(result.providerCliVersion),
552
+ submittedOnly: result.submittedOnly === true,
553
+ prNumber: result.prNumber,
554
+ prUrl: result.prUrl,
555
+ cloudTaskId: result.cloudTaskId,
556
+ success: result.success,
557
+ outcome: derivedOutcome,
558
+ retainedWorktreePath: result.retainedWorktreePath,
559
+ artifactPath: result.artifactPath,
560
+ completeness: persistedCompleteness,
561
+ completenessAssessment: persistedAssessment,
562
+ duration: result.duration,
563
+ errorMessage: sanitizeHandleErrorMessage(result.error?.message),
564
+ errorDetails: extractErrorDetails(result.error),
565
+ providerDiagnostics: result.providerDiagnostics ? sanitizeDiagnosticValue(
566
+ result.providerDiagnostics
567
+ ) : void 0,
568
+ authError: result.authError ? sanitizeDiagnosticValue(result.authError) : void 0,
569
+ timedOut: result.timedOut === true,
570
+ terminationReason: result.terminationReason,
571
+ inputSpecWarning: result.inputSpecWarning,
572
+ cursorMetadata: result.cursorMetadata,
573
+ contextInjection: result.contextInjection,
574
+ testsExecuted: redactPersistedTestsExecuted(result.testsExecuted),
575
+ buildStatus: result.buildStatus ?? outcomeVerification.buildStatus,
576
+ lintStatus: result.lintStatus ?? outcomeVerification.lintStatus,
577
+ // Candidate testStatus/filesChanged stay direct copies for legacy state readers.
578
+ testStatus: result.testStatus,
579
+ testMetrics: result.testMetrics,
580
+ judgeScore: result.judgeScore,
581
+ judgeEvaluation: result.judgeEvaluation,
582
+ artifactManifest: result.artifactManifest,
583
+ acceptedWorkspaceTreeSha: result.acceptedWorkspaceTreeSha,
584
+ gitMetrics: result.gitMetrics,
585
+ worktreeSummary: result.worktreeSummary,
586
+ ignoredPathEvidence: result.ignoredPathEvidence,
587
+ filesChanged: result.filesChanged,
588
+ hasChanges: resultHasChanges,
589
+ linesAdded: result.linesAdded,
590
+ linesRemoved: result.linesRemoved
591
+ };
592
+ if (idx >= 0) {
593
+ handle.candidates[idx] = { ...handle.candidates[idx], ...patch };
594
+ } else {
595
+ handle.candidates.push(patch);
596
+ }
597
+ handle.variants = handle.candidates;
598
+ handle.updatedAt = now;
599
+ atomicWrite(p, JSON.stringify(handle, null, 2));
600
+ const variantEventKind = result.success === true ? "variant.completed" : result.success === false || result.error ? "variant.failed" : "variant.completed";
601
+ appendCompetitionEvent(evaluationId, variantEventKind, {
602
+ provider: result.provider,
603
+ strategy: result.strategy,
604
+ executionMode: result.executionMode,
605
+ model: result.model,
606
+ variant: resultVariant,
607
+ success: result.success,
608
+ completeness: persistedCompleteness,
609
+ completenessAssessment: persistedAssessment,
610
+ duration: result.duration,
611
+ timedOut: result.timedOut,
612
+ errorMessage: sanitizeHandleErrorMessage(result.error?.message),
613
+ errorDetails: extractErrorDetails(result.error),
614
+ providerDiagnostics: result.providerDiagnostics ? sanitizeDiagnosticValue(result.providerDiagnostics) : void 0,
615
+ authError: result.authError ? sanitizeDiagnosticValue(result.authError) : void 0,
616
+ terminationReason: result.terminationReason
617
+ });
618
+ }
619
+ function strictIdentityFieldMatches(existing, incoming) {
620
+ return existing === incoming || existing === void 0 && incoming === void 0;
621
+ }
622
+ function lateBoundIdentityFieldMatches(existing, incoming) {
623
+ return existing === incoming || existing === void 0 || incoming === void 0;
624
+ }
625
+ function candidatesDescribeSameVariant(candidate, other) {
626
+ return candidate.provider === other.provider && candidate.strategy === other.strategy && candidate.executionMode === other.executionMode && strictIdentityFieldMatches(candidate.model, other.model) && lateBoundIdentityFieldMatches(candidate.workspaceMode, other.workspaceMode) && lateBoundIdentityFieldMatches(candidate.reasoningEffort, other.reasoningEffort) && lateBoundIdentityFieldMatches(candidate.cursorPromptProfile, other.cursorPromptProfile) && strictIdentityFieldMatches(candidate.variantInstanceId, other.variantInstanceId);
627
+ }
628
+ function candidateHasCompletedPeer(candidate, candidates) {
629
+ return candidates.some(
630
+ (other) => other !== candidate && other.success !== void 0 && candidatesDescribeSameVariant(candidate, other)
631
+ );
632
+ }
633
+ function canonicalizeHandleWinner(winner) {
634
+ if (winner == null) return winner;
635
+ const variantSeed = typeof winner.variant === "string" ? winner.variant.trim() : "";
636
+ if (!variantSeed) {
637
+ return winner;
638
+ }
639
+ return {
640
+ ...winner,
641
+ variant: canonicalizeVariantIdentifier({
642
+ variant: variantSeed,
643
+ provider: winner.provider,
644
+ model: winner.model,
645
+ resolvedModel: winner.resolvedModel,
646
+ strategy: winner.strategy,
647
+ executionMode: winner.executionMode
648
+ })
649
+ };
650
+ }
651
+ function toEvaluationHandleWinnerMetadata(winner) {
652
+ if (winner === void 0) return void 0;
653
+ if (!winner) return null;
654
+ const winnerForOutcomeDerivation = winner.isSynthesis === true ? winner : (() => {
655
+ const { outcome: _staleOutcome, ...withoutOutcome } = winner;
656
+ return withoutOutcome;
657
+ })();
658
+ const outcome = winner.isSynthesis === true && winner.outcome ? winner.outcome : deriveVariantOutcome(winnerForOutcomeDerivation);
659
+ return {
660
+ provider: winner.provider,
661
+ model: winner.model,
662
+ resolvedModel: winner.resolvedModel,
663
+ strategy: winner.strategy,
664
+ executionMode: winner.executionMode,
665
+ variant: winner.variant,
666
+ variantInstanceId: winner.variantInstanceId,
667
+ winnerSelectionSource: winner.winnerSelectionSource,
668
+ winnerSelectionReason: winner.winnerSelectionReason,
669
+ buildStatus: winner.buildStatus ?? outcome.verification.buildStatus,
670
+ lintStatus: winner.lintStatus ?? outcome.verification.lintStatus,
671
+ // Explicit unsuccessful testStatus ('failed'/'error'/'timeout'/any
672
+ // non-neutral spelling — the field permits arbitrary strings the
673
+ // derivation logic cannot represent) is authoritative, EXCEPT when a
674
+ // trusted passing repair superseded it: the repair path intentionally
675
+ // preserves the original provider testStatus while deriveVariantOutcome
676
+ // recognizes the passing repair, so letting the stale explicit failure
677
+ // win there would persist a false failure on the handle. Synthesis
678
+ // winners have no repair path, so their explicit status always wins over
679
+ // the provider-supplied nested outcome (the #2304 failure-masking fix);
680
+ // the b46777520 tightening (derived beats a stale top-level 'passed')
681
+ // is preserved because only unsuccessful explicit statuses take
682
+ // precedence.
683
+ testStatus: (() => {
684
+ const explicitUnsuccessful = winner.testStatus !== void 0 && winner.testStatus !== "passed" && winner.testStatus !== "not_run" && winner.testStatus !== "skipped";
685
+ const supersededByPassingRepair = winner.isSynthesis !== true && repairOutcomeCanSupersedeRawTouchedFailure(winner);
686
+ return explicitUnsuccessful && !supersededByPassingRepair ? winner.testStatus : outcome.verification.testStatus;
687
+ })(),
688
+ testMetrics: winner.testMetrics,
689
+ testsExecuted: redactPersistedTestsExecuted(winner.testsExecuted),
690
+ filesChanged: winner.filesChanged ?? winner.gitMetrics?.filesChanged ?? winner.worktreeSummary?.filesChanged,
691
+ hasChanges: winner.hasChanges ?? outcome.delivery.hasChanges ?? (typeof winner.filesChanged === "number" ? winner.filesChanged > 0 : void 0)
692
+ };
693
+ }
694
+ function normalizeTerminalHandleErrorMessage(outcome, errorMessage) {
695
+ const sanitized = sanitizeHandleErrorMessage(errorMessage)?.trim();
696
+ return sanitized || `Competition ended with ${outcome}`;
697
+ }
698
+ function createEvaluationHandleFinalState(input) {
699
+ if (input.outcome === "winner_selected") {
700
+ if (!input.winner) {
701
+ throw new TypeError("winner_selected terminal state requires a winner");
702
+ }
703
+ return { ...input, status: "completed", outcome: "winner_selected", winner: input.winner };
704
+ }
705
+ if (input.outcome === "no_winner") {
706
+ return { ...input, status: "completed", outcome: "no_winner", winner: null };
707
+ }
708
+ if (input.outcome === "all_failed") {
709
+ return { ...input, status: "failed", outcome: "all_failed", winner: null };
710
+ }
711
+ if (input.outcome === "timed_out" || input.outcome === "error") {
712
+ return {
713
+ ...input,
714
+ status: "failed",
715
+ outcome: input.outcome,
716
+ winner: null,
717
+ errorMessage: normalizeTerminalHandleErrorMessage(input.outcome, input.errorMessage)
718
+ };
719
+ }
720
+ throw new TypeError(`Unsupported evaluation-handle terminal outcome: ${String(input.outcome)}`);
721
+ }
722
+ function isValidEvaluationHandleFinalState(state) {
723
+ if (state.status === "completed") {
724
+ return state.outcome === "winner_selected" && state.winner != null || state.outcome === "no_winner" && state.winner === null;
725
+ }
726
+ if (state.outcome === "all_failed") {
727
+ return state.winner === null;
728
+ }
729
+ return (state.outcome === "timed_out" || state.outcome === "error") && state.winner === null && typeof state.errorMessage === "string" && state.errorMessage.trim().length > 0;
730
+ }
731
+ function isDurableHandleCompletion(result, requested = "completed") {
732
+ return result.kind === "finalized" && result.status === requested || result.kind === "already_terminal" && result.status === requested;
733
+ }
734
+ var EvaluationHandleDurabilityError = class extends Error {
735
+ deliveredResult;
736
+ finalizationResult;
737
+ constructor(deliveredResult, finalizationResult) {
738
+ super(
739
+ `Required evaluation handle did not reach durable completed state (kind=${finalizationResult.kind})`
740
+ );
741
+ this.name = "EvaluationHandleDurabilityError";
742
+ this.deliveredResult = deliveredResult;
743
+ this.finalizationResult = finalizationResult;
744
+ }
745
+ };
746
+ async function deliverBeforeRequiredHandleDurabilityCheck(deliver, finalizationResult, options) {
747
+ const deliveredResult = await deliver();
748
+ if (options.required && !isDurableHandleCompletion(finalizationResult, options.requested ?? "completed")) {
749
+ throw new EvaluationHandleDurabilityError(deliveredResult, finalizationResult);
750
+ }
751
+ return deliveredResult;
752
+ }
753
+ function classifyFinalizePersistenceError(error) {
754
+ const message = error instanceof Error ? error.message : String(error);
755
+ if (/timed out waiting for finalize lock/i.test(message)) {
756
+ return { error: message, cause: "lock_timeout" };
757
+ }
758
+ if (error instanceof SyntaxError || /JSON|parse/i.test(message) || error instanceof Error && error.name === "SyntaxError") {
759
+ return { error: message, cause: "parse" };
760
+ }
761
+ if (typeof error === "object" && error !== null && "code" in error && typeof error.code === "string" && String(error.code).startsWith("ERR_") === false && /E[A-Z]+/.test(String(error.code))) {
762
+ return { error: message, cause: "io" };
763
+ }
764
+ return { error: message, cause: "unknown" };
765
+ }
766
+ function finalizeEvaluationHandle(evaluationId, finalState) {
767
+ try {
768
+ if (!isValidEvaluationHandleFinalState(finalState)) {
769
+ throw new TypeError(
770
+ `Invalid evaluation-handle terminal pair: ${finalState.status}/${finalState.outcome}`
771
+ );
772
+ }
773
+ const p = getHandlePath(evaluationId);
774
+ if (!fs.existsSync(p)) {
775
+ return { kind: "absent" };
776
+ }
777
+ const lockPath = `${p}.lock`;
778
+ const lockToken = acquireLockSync(lockPath);
779
+ if (!lockToken) {
780
+ throw new Error(`Timed out waiting for finalize lock on ${evaluationId}`);
781
+ }
782
+ try {
783
+ return finalizeEvaluationHandleLocked(evaluationId, finalState, p);
784
+ } finally {
785
+ releaseLock(lockPath, lockToken);
786
+ }
787
+ } catch (error) {
788
+ warnHandleFailure("finalize handle", evaluationId, error);
789
+ const classified = classifyFinalizePersistenceError(error);
790
+ return {
791
+ kind: "persistence_failed",
792
+ error: classified.error,
793
+ cause: classified.cause
794
+ };
795
+ }
796
+ }
797
+ async function finalizeEvaluationHandleAsync(evaluationId, finalState) {
798
+ try {
799
+ if (!isValidEvaluationHandleFinalState(finalState)) {
800
+ throw new TypeError(
801
+ `Invalid evaluation-handle terminal pair: ${finalState.status}/${finalState.outcome}`
802
+ );
803
+ }
804
+ const p = getHandlePath(evaluationId);
805
+ if (!fs.existsSync(p)) {
806
+ return { kind: "absent" };
807
+ }
808
+ const lockPath = `${p}.lock`;
809
+ const lockToken = await acquireLock(lockPath);
810
+ if (!lockToken) {
811
+ throw new Error(`Timed out waiting for finalize lock on ${evaluationId}`);
812
+ }
813
+ try {
814
+ return finalizeEvaluationHandleLocked(evaluationId, finalState, p);
815
+ } finally {
816
+ releaseLock(lockPath, lockToken);
817
+ }
818
+ } catch (error) {
819
+ warnHandleFailure("finalize handle", evaluationId, error);
820
+ const classified = classifyFinalizePersistenceError(error);
821
+ return {
822
+ kind: "persistence_failed",
823
+ error: classified.error,
824
+ cause: classified.cause
825
+ };
826
+ }
827
+ }
828
+ function finalizeEvaluationHandleLocked(evaluationId, finalState, p) {
829
+ const raw = fs.readFileSync(p, "utf8");
830
+ const parsed = parseJsonWithContext(raw, `Competition handle (${evaluationId})`);
831
+ const parsedStatus = parsed.status;
832
+ const isCompletedReconciliation = parsedStatus === "completed" && finalState.status === "completed";
833
+ if (typeof parsed.status === "string" && TERMINAL_EVALUATION_STATUSES.has(parsedStatus) && !isCompletedReconciliation) {
834
+ return {
835
+ kind: "already_terminal",
836
+ status: parsedStatus,
837
+ requested: finalState.status
838
+ };
839
+ }
840
+ const completedAt = finalState.completedAt ?? (isCompletedReconciliation && typeof parsed.completedAt === "string" ? parsed.completedAt : (/* @__PURE__ */ new Date()).toISOString());
841
+ const candidates = parsed.candidates || parsed.variants || [];
842
+ const hasActiveCandidates = finalState.status === "completed" && candidates.some(
843
+ (candidate) => !candidateHasCompletedPeer(candidate, candidates) && (candidate.submittedOnly === true || candidate.success === void 0 && candidate.timedOut !== true && !candidate.errorMessage)
844
+ );
845
+ const effectiveStatus = hasActiveCandidates ? "running" : finalState.status;
846
+ const effectiveOutcome = hasActiveCandidates ? void 0 : finalState.outcome;
847
+ const effectiveCompletedAt = hasActiveCandidates ? void 0 : completedAt;
848
+ const effectiveErrorMessage = hasActiveCandidates ? void 0 : sanitizeHandleErrorMessage(
849
+ "errorMessage" in finalState ? finalState.errorMessage : void 0
850
+ );
851
+ const parsedWinner = canonicalizeHandleWinner(
852
+ parsed.winner ?? null
853
+ );
854
+ const finalWinner = canonicalizeHandleWinner(finalState.winner);
855
+ const effectiveWinner = finalState.status === "failed" ? null : hasActiveCandidates && finalState.winner === void 0 ? parsed.winner ?? null : isCompletedReconciliation && parsedWinner && finalState.winner !== null ? parsedWinner : finalWinner;
856
+ const resolvedWinner = finalState.status === "failed" ? null : effectiveWinner === void 0 ? parsedWinner : effectiveWinner;
857
+ const resolvedWinnerVerification = finalState.status === "failed" ? null : finalState.winnerVerification === void 0 ? parsed.winnerVerification ?? null : finalState.winnerVerification;
858
+ const handle = {
859
+ taskId: parsed.evaluationId || parsed.taskId || evaluationId,
860
+ evaluationId: parsed.evaluationId || parsed.taskId || evaluationId,
861
+ prompt: sanitizeHandlePrompt(parsed.prompt),
862
+ initiatedBy: parsed.initiatedBy,
863
+ createdAt: parsed.createdAt || completedAt,
864
+ updatedAt: completedAt,
865
+ status: effectiveStatus,
866
+ outcome: effectiveOutcome,
867
+ completedAt: effectiveCompletedAt,
868
+ errorMessage: effectiveErrorMessage,
869
+ winner: resolvedWinner,
870
+ candidates,
871
+ variants: candidates,
872
+ labId: parsed.labId,
873
+ labRunId: parsed.labRunId,
874
+ runMetadata: finalState.runMetadata ?? parsed.runMetadata,
875
+ deliverableContract: parsed.deliverableContract,
876
+ winnerVerification: resolvedWinnerVerification,
877
+ verification: resolvedWinnerVerification,
878
+ completenessTelemetry: finalState.completenessTelemetry ?? parsed.completenessTelemetry,
879
+ decision: finalState.decision ?? parsed.decision,
880
+ judgeFailures: finalState.judgeFailures ?? parsed.judgeFailures,
881
+ tieBreak: finalState.tieBreak ?? parsed.tieBreak,
882
+ synthesis: parsed.synthesis,
883
+ application: parsed.application
884
+ };
885
+ atomicWrite(p, JSON.stringify(handle, null, 2));
886
+ if (isCompletedReconciliation) {
887
+ if (handle.status === "completed" || handle.status === "failed") {
888
+ return { kind: "finalized", status: handle.status };
889
+ }
890
+ return { kind: "not_terminal", status: "running", reason: "active_candidates" };
891
+ }
892
+ const finalEventKind = finalState.status === "failed" ? "competition.failed" : "competition.completed";
893
+ appendCompetitionEvent(evaluationId, finalEventKind, {
894
+ status: effectiveStatus,
895
+ outcome: effectiveOutcome,
896
+ errorMessage: effectiveErrorMessage,
897
+ winner: resolvedWinner ? {
898
+ provider: resolvedWinner.provider,
899
+ strategy: resolvedWinner.strategy,
900
+ variant: resolvedWinner.variant
901
+ } : null
902
+ });
903
+ if (handle.status === "completed" || handle.status === "failed") {
904
+ return { kind: "finalized", status: handle.status };
905
+ }
906
+ return { kind: "not_terminal", status: "running", reason: "active_candidates" };
907
+ }
908
+ function updateEvaluationHandleWithSynthesisResult(evaluationId, result) {
909
+ try {
910
+ const p = getHandlePath(evaluationId);
911
+ const lockPath = `${p}.lock`;
912
+ const lockToken = acquireLockSync(lockPath);
913
+ if (!lockToken) {
914
+ throw new Error(`Timed out waiting for synthesis update lock on ${evaluationId}`);
915
+ }
916
+ try {
917
+ updateEvaluationHandleWithSynthesisResultLocked(evaluationId, result, p);
918
+ } finally {
919
+ releaseLock(lockPath, lockToken);
920
+ }
921
+ } catch (error) {
922
+ warnHandleFailure("update synthesis metadata", evaluationId, error);
923
+ }
924
+ }
925
+ async function updateEvaluationHandleWithSynthesisResultAsync(evaluationId, result) {
926
+ try {
927
+ const p = getHandlePath(evaluationId);
928
+ const lockPath = `${p}.lock`;
929
+ const lockToken = await acquireLock(lockPath);
930
+ if (!lockToken) {
931
+ throw new Error(`Timed out waiting for synthesis update lock on ${evaluationId}`);
932
+ }
933
+ try {
934
+ updateEvaluationHandleWithSynthesisResultLocked(evaluationId, result, p);
935
+ } finally {
936
+ releaseLock(lockPath, lockToken);
937
+ }
938
+ } catch (error) {
939
+ warnHandleFailure("update synthesis metadata", evaluationId, error);
940
+ }
941
+ }
942
+ function updateEvaluationHandleWithSynthesisResultLocked(evaluationId, result, p) {
943
+ const raw = fs.existsSync(p) ? fs.readFileSync(p, "utf8") : "";
944
+ const now = (/* @__PURE__ */ new Date()).toISOString();
945
+ const parsed = raw ? parseJsonWithContext(raw, `Competition handle (${evaluationId})`) : {};
946
+ const handle = {
947
+ taskId: parsed.evaluationId || parsed.taskId || evaluationId,
948
+ evaluationId: parsed.evaluationId || parsed.taskId || evaluationId,
949
+ prompt: sanitizeHandlePrompt(parsed.prompt),
950
+ initiatedBy: parsed.initiatedBy,
951
+ createdAt: parsed.createdAt || now,
952
+ updatedAt: now,
953
+ status: parsed.status,
954
+ outcome: parsed.outcome,
955
+ completedAt: parsed.completedAt,
956
+ errorMessage: parsed.errorMessage,
957
+ winner: parsed.winner,
958
+ candidates: parsed.candidates || parsed.variants || [],
959
+ variants: parsed.variants || parsed.candidates || [],
960
+ labId: parsed.labId,
961
+ labRunId: parsed.labRunId,
962
+ deliverableContract: parsed.deliverableContract,
963
+ winnerVerification: parsed.winnerVerification,
964
+ verification: parsed.verification ?? parsed.winnerVerification,
965
+ completenessTelemetry: parsed.completenessTelemetry,
966
+ application: parsed.application,
967
+ synthesis: sanitizeSynthesisArtifactForPersistence({
968
+ success: result.success,
969
+ prNumber: result.prNumber,
970
+ prUrl: result.prUrl,
971
+ error: result.error,
972
+ mergedVariants: result.mergedVariants,
973
+ synthesisIntents: result.synthesisIntents,
974
+ donorProfiles: result.donorProfiles,
975
+ donorSelectionDecisions: result.donorSelectionDecisions,
976
+ intentFilteredHunkCount: result.intentFilteredHunkCount,
977
+ excludedHunkCount: result.excludedHunkCount,
978
+ unknownIncludedHunkCount: result.unknownIncludedHunkCount,
979
+ unknownExcludedHunkCount: result.unknownExcludedHunkCount,
980
+ intentMaterialSummaries: result.intentMaterialSummaries,
981
+ overlapRejectedHunkCount: result.overlapRejectedHunkCount,
982
+ deliverySucceeded: result.deliverySucceeded,
983
+ synthesisApplied: result.synthesisApplied,
984
+ winnerFallback: result.winnerFallback,
985
+ fallbackReason: result.fallbackReason,
986
+ patchApplyValidated: result.patchApplyValidated,
987
+ gatesPassed: result.gatesPassed,
988
+ gateFailureDetails: result.gateFailureDetails,
989
+ aiGuidedFallbackAttempted: result.aiGuidedFallbackAttempted,
990
+ aiGuidedFallbackOutcome: result.aiGuidedFallbackOutcome,
991
+ // Diagnostics that explain WHY a run carried the winner forward
992
+ // (agent timeout vs invalid response vs corrupt-patch apply vs
993
+ // deliberate no-pick). Previously only persisted to the richer
994
+ // .poetic/telemetry/synthesis/<id>.json sidecar, leaving all
995
+ // fallback reasons indistinguishable in competition state.
996
+ synthesisOutcomeStatus: result.synthesisOutcomeStatus,
997
+ synthesisDurationMs: result.synthesisDurationMs,
998
+ synthesisProvider: result.synthesisProvider,
999
+ synthesisModel: result.synthesisModel,
1000
+ synthesisProviderDurationMs: result.synthesisProviderDurationMs,
1001
+ synthesisGateDurationMs: result.synthesisGateDurationMs,
1002
+ winnerFirstReview: result.winnerFirstReview,
1003
+ harvestManifest: result.harvestManifest,
1004
+ donorMaterialDiagnostic: result.donorMaterialDiagnostic
1005
+ })
1006
+ };
1007
+ atomicWrite(p, JSON.stringify(handle, null, 2));
1008
+ }
1009
+ function updateEvaluationHandleApplicationProvenance(evaluationId, provenance) {
1010
+ try {
1011
+ const p = getHandlePath(evaluationId);
1012
+ const lockPath = `${p}.lock`;
1013
+ const lockToken = acquireLockSync(lockPath);
1014
+ if (!lockToken) {
1015
+ throw new Error(`Timed out waiting for application update lock on ${evaluationId}`);
1016
+ }
1017
+ try {
1018
+ updateEvaluationHandleApplicationProvenanceLocked(evaluationId, provenance, p);
1019
+ } finally {
1020
+ releaseLock(lockPath, lockToken);
1021
+ }
1022
+ } catch (error) {
1023
+ warnHandleFailure("update application provenance", evaluationId, error);
1024
+ }
1025
+ }
1026
+ function updateEvaluationHandleApplicationProvenanceLocked(evaluationId, provenance, p) {
1027
+ if (!fs.existsSync(p)) {
1028
+ return;
1029
+ }
1030
+ const raw = fs.readFileSync(p, "utf8");
1031
+ const now = (/* @__PURE__ */ new Date()).toISOString();
1032
+ const parsed = parseJsonWithContext(raw, `Competition handle (${evaluationId})`);
1033
+ const candidates = parsed.candidates || parsed.variants || [];
1034
+ const handle = {
1035
+ ...parsed,
1036
+ taskId: parsed.evaluationId || parsed.taskId || evaluationId,
1037
+ evaluationId: parsed.evaluationId || parsed.taskId || evaluationId,
1038
+ prompt: sanitizeHandlePrompt(parsed.prompt),
1039
+ createdAt: parsed.createdAt || now,
1040
+ updatedAt: now,
1041
+ candidates,
1042
+ variants: candidates,
1043
+ application: provenance
1044
+ };
1045
+ atomicWrite(p, JSON.stringify(handle, null, 2));
1046
+ }
1047
+
1048
+ export {
1049
+ appendCompetitionEvent,
1050
+ initEvaluationHandle,
1051
+ initEvaluationHandleAsync,
1052
+ updateEvaluationHandleWithResult,
1053
+ updateEvaluationHandleWithResultAsync,
1054
+ toEvaluationHandleWinnerMetadata,
1055
+ createEvaluationHandleFinalState,
1056
+ isDurableHandleCompletion,
1057
+ deliverBeforeRequiredHandleDurabilityCheck,
1058
+ finalizeEvaluationHandle,
1059
+ finalizeEvaluationHandleAsync,
1060
+ updateEvaluationHandleWithSynthesisResult,
1061
+ updateEvaluationHandleWithSynthesisResultAsync,
1062
+ updateEvaluationHandleApplicationProvenance
1063
+ };
1064
+ //# sourceMappingURL=chunk-2IUXIGQD.js.map