@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,1124 @@
1
+ import {
2
+ detectHostConcurrencyBudget
3
+ } from "./chunk-PYITM4N2.js";
4
+ import {
5
+ parseFailureOutput
6
+ } from "./chunk-ACKIPAOJ.js";
7
+ import {
8
+ parseVerificationErrorsForChannel
9
+ } from "./chunk-WIRN3F75.js";
10
+ import {
11
+ prepareWorktreeDependencies
12
+ } from "./chunk-5D4A7E3D.js";
13
+ import {
14
+ runDeterministicTestGateWithArtifacts,
15
+ runLintOnDiffWithArtifacts
16
+ } from "./chunk-3ZPQLGV7.js";
17
+ import {
18
+ runTypecheckWithArtifacts
19
+ } from "./chunk-NS2K2GTP.js";
20
+ import {
21
+ resolveVerificationChannelScope,
22
+ selectScopedTestCommands
23
+ } from "./chunk-KP6YILMU.js";
24
+ import {
25
+ createLogger
26
+ } from "./chunk-PFTQBXS6.js";
27
+ import {
28
+ mkPoeticTempDir
29
+ } from "./chunk-C57KJOUQ.js";
30
+ import {
31
+ atomicWriteJson
32
+ } from "./chunk-A3YGID55.js";
33
+ import {
34
+ isProjectSourcePath
35
+ } from "./chunk-UDMS5AD3.js";
36
+ import {
37
+ tailLines
38
+ } from "./chunk-TSXGRLPR.js";
39
+ import {
40
+ describeVerificationCommand
41
+ } from "./chunk-2QLYTVYX.js";
42
+ import {
43
+ getStateDir
44
+ } from "./chunk-UUH2RVKS.js";
45
+ import {
46
+ POETIC_VALIDATION_SLOTS,
47
+ readEnv
48
+ } from "./chunk-5DLKYTQX.js";
49
+
50
+ // src/core/verification/baseline-store.ts
51
+ import { createHash } from "crypto";
52
+ import { mkdir as mkdir2, readFile as readFile2, rm } from "fs/promises";
53
+ import { dirname, join } from "path";
54
+ import { execa } from "execa";
55
+
56
+ // src/core/verification/validation-slots.ts
57
+ import { randomUUID } from "crypto";
58
+ import * as fs from "fs/promises";
59
+ import path from "path";
60
+ var logger = createLogger("ValidationSlots");
61
+ var STALE_SLOT_MAX_AGE_MS = 30 * 60 * 1e3;
62
+ var SLOT_HARD_CEILING_MS = 2 * 60 * 60 * 1e3;
63
+ var DEFAULT_MAX_WAIT_MS = 5 * 60 * 1e3;
64
+ var DEFAULT_POLL_INTERVAL_MS = 250;
65
+ var POLL_JITTER_MS = 750;
66
+ function defaultValidationSlotDir() {
67
+ return path.join(getStateDir(), "validation-slots");
68
+ }
69
+ function isPidAlive(pid) {
70
+ if (!Number.isInteger(pid) || pid <= 0) return false;
71
+ try {
72
+ process.kill(pid, 0);
73
+ return true;
74
+ } catch (error) {
75
+ return error.code === "EPERM";
76
+ }
77
+ }
78
+ async function listSlotFiles(slotDir) {
79
+ const entries = await fs.readdir(slotDir);
80
+ return entries.filter((name) => name.endsWith(".slot"));
81
+ }
82
+ async function cleanupStaleSlots(slotDir, now) {
83
+ const names = await listSlotFiles(slotDir);
84
+ for (const name of names) {
85
+ const filePath = path.join(slotDir, name);
86
+ try {
87
+ const stat2 = await fs.stat(filePath);
88
+ const ageMs = now - stat2.mtimeMs;
89
+ if (ageMs > SLOT_HARD_CEILING_MS) {
90
+ await fs.unlink(filePath);
91
+ continue;
92
+ }
93
+ let parsed;
94
+ try {
95
+ parsed = JSON.parse(await fs.readFile(filePath, "utf8"));
96
+ } catch {
97
+ if (ageMs > STALE_SLOT_MAX_AGE_MS) await fs.unlink(filePath);
98
+ continue;
99
+ }
100
+ if (!isPidAlive(parsed.pid)) {
101
+ await fs.unlink(filePath);
102
+ }
103
+ } catch {
104
+ }
105
+ }
106
+ }
107
+ async function slotRank(slotDir, ownName) {
108
+ const names = await listSlotFiles(slotDir);
109
+ const ranked = [];
110
+ for (const name of names) {
111
+ try {
112
+ const stat2 = await fs.stat(path.join(slotDir, name));
113
+ ranked.push({ name, mtimeMs: stat2.mtimeMs });
114
+ } catch {
115
+ }
116
+ }
117
+ ranked.sort((a, b) => a.mtimeMs - b.mtimeMs || a.name.localeCompare(b.name));
118
+ return ranked.findIndex((entry) => entry.name === ownName);
119
+ }
120
+ function sleep(ms) {
121
+ return new Promise((resolve) => setTimeout(resolve, ms));
122
+ }
123
+ var degradedWarned = false;
124
+ function warnDegraded(label, reason, context) {
125
+ if (degradedWarned && reason === "slot-dir-unavailable") return;
126
+ if (reason === "slot-dir-unavailable") degradedWarned = true;
127
+ logger.warn(`Validation slot degraded (${reason}); proceeding unpaced`, { label, ...context });
128
+ }
129
+ function resolveHostLimit(explicit) {
130
+ if (explicit !== void 0) return Math.max(1, Math.floor(explicit));
131
+ const env = readEnv(POETIC_VALIDATION_SLOTS).value;
132
+ if (env !== void 0 && Number.isFinite(env)) {
133
+ if (env <= 0) return null;
134
+ return Math.floor(env);
135
+ }
136
+ return Math.max(1, detectHostConcurrencyBudget().validationSlots);
137
+ }
138
+ async function acquireHostValidationSlot(label, options = {}) {
139
+ const slotDir = options.slotDir ?? defaultValidationSlotDir();
140
+ const hostLimit = resolveHostLimit(options.hostLimit);
141
+ if (hostLimit === null) {
142
+ return { degraded: false, release: async () => {
143
+ } };
144
+ }
145
+ const maxWaitMs = options.maxWaitMs ?? DEFAULT_MAX_WAIT_MS;
146
+ const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
147
+ const ownName = `${process.pid}-${randomUUID()}.slot`;
148
+ const ownPath = path.join(slotDir, ownName);
149
+ const deadline = Date.now() + maxWaitMs;
150
+ try {
151
+ await fs.mkdir(slotDir, { recursive: true });
152
+ } catch (error) {
153
+ warnDegraded(label, "slot-dir-unavailable", { slotDir, error: String(error) });
154
+ return { degraded: true, release: async () => {
155
+ } };
156
+ }
157
+ let waitedLogged = false;
158
+ for (; ; ) {
159
+ try {
160
+ await cleanupStaleSlots(slotDir, Date.now());
161
+ const occupied = (await listSlotFiles(slotDir)).length;
162
+ if (occupied < hostLimit) {
163
+ const content = {
164
+ pid: process.pid,
165
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
166
+ label
167
+ };
168
+ await fs.writeFile(ownPath, JSON.stringify(content), { flag: "wx" });
169
+ const rank = await slotRank(slotDir, ownName);
170
+ if (rank >= 0 && rank < hostLimit) {
171
+ return {
172
+ degraded: false,
173
+ release: async () => {
174
+ try {
175
+ await fs.unlink(ownPath);
176
+ } catch {
177
+ }
178
+ }
179
+ };
180
+ }
181
+ await fs.unlink(ownPath).catch(() => {
182
+ });
183
+ }
184
+ } catch (error) {
185
+ warnDegraded(label, "slot-dir-unavailable", { slotDir, error: String(error) });
186
+ return { degraded: true, release: async () => {
187
+ } };
188
+ }
189
+ if (Date.now() >= deadline) {
190
+ warnDegraded(label, "wait-deadline", { slotDir, hostLimit, maxWaitMs });
191
+ return { degraded: true, release: async () => {
192
+ } };
193
+ }
194
+ if (!waitedLogged) {
195
+ waitedLogged = true;
196
+ logger.info("Waiting for a host validation slot", { label, hostLimit });
197
+ }
198
+ await sleep(pollIntervalMs + Math.floor(Math.random() * POLL_JITTER_MS));
199
+ }
200
+ }
201
+ async function withValidationSlot(label, fn, options = {}) {
202
+ const lease = await acquireHostValidationSlot(label, options);
203
+ try {
204
+ return await fn();
205
+ } finally {
206
+ await lease.release();
207
+ }
208
+ }
209
+
210
+ // src/core/verification/baseline-capture.ts
211
+ var BASELINE_SCHEMA_VERSION = 5;
212
+ var DEFAULT_OPTIONS = {
213
+ gateTimeoutMs: 6e4,
214
+ changedSinceRef: "",
215
+ skipTests: false,
216
+ skipLint: false,
217
+ outputTailLines: 100,
218
+ changedFiles: []
219
+ };
220
+ function resolveGateExitCode(rawExitCode, okHint, didNotRun = false) {
221
+ if (didNotRun) return 0;
222
+ if (typeof rawExitCode === "number") return rawExitCode;
223
+ if (okHint === true) return 0;
224
+ return 1;
225
+ }
226
+ function channelCommands(channel) {
227
+ if (Array.isArray(channel.commands) && channel.commands.length > 0) return channel.commands;
228
+ if (channel.command?.trim()) return [channel.command];
229
+ return [];
230
+ }
231
+ function commandDominanceRank(result) {
232
+ const status = result.status;
233
+ if (status === "timeout" || result.exitCode === 124) return 1;
234
+ if (status === "unavailable") return 2;
235
+ if (status === "skipped" || status === "passed" || status === "not_run" || result.exitCode === 0) {
236
+ return 3;
237
+ }
238
+ return 0;
239
+ }
240
+ function selectDominantCommandResult(results) {
241
+ if (results.length === 0) return void 0;
242
+ let dominant = results[0];
243
+ let best = commandDominanceRank(dominant);
244
+ for (let i = 1; i < results.length; i++) {
245
+ const candidate = results[i];
246
+ const rank = commandDominanceRank(candidate);
247
+ if (rank < best) {
248
+ dominant = candidate;
249
+ best = rank;
250
+ }
251
+ }
252
+ return dominant;
253
+ }
254
+ function normalizeTypeError(line) {
255
+ const match = /^(.+?)\((\d+),(\d+)\):\s*error\s+(TS\d+)/.exec(line);
256
+ if (match) {
257
+ return `${match[1]}:${match[2]}:${match[3]}:${match[4]}`;
258
+ }
259
+ const altMatch = /^(.+?):(\d+):(\d+)\s*-\s*error\s+(TS\d+)/.exec(line);
260
+ if (altMatch) {
261
+ return `${altMatch[1]}:${altMatch[2]}:${altMatch[3]}:${altMatch[4]}`;
262
+ }
263
+ return null;
264
+ }
265
+ function extractTypeErrors(output) {
266
+ const errors = [];
267
+ for (const line of output.split(/\r?\n/)) {
268
+ const normalized = normalizeTypeError(line);
269
+ if (normalized) {
270
+ errors.push(normalized);
271
+ }
272
+ }
273
+ return errors.slice(0, 100);
274
+ }
275
+ function normalizeLintError(line) {
276
+ const match = /^(.+?):(\d+):(\d+)\s+(?:error|warning)\s+.+?\s+(\S+)\s*$/.exec(line);
277
+ if (match) {
278
+ return `${match[1]}:${match[2]}:${match[3]}:${match[4]}`;
279
+ }
280
+ return null;
281
+ }
282
+ function extractLintErrors(output) {
283
+ const errors = [];
284
+ for (const line of output.split(/\r?\n/)) {
285
+ const normalized = normalizeLintError(line);
286
+ if (normalized) {
287
+ errors.push(normalized);
288
+ }
289
+ }
290
+ return errors.slice(0, 100);
291
+ }
292
+ function extractBiomeLintSignatures(outputTail) {
293
+ const raw = String(outputTail ?? "").trim();
294
+ if (!raw) return [];
295
+ const start = raw.indexOf("{");
296
+ const end = raw.lastIndexOf("}");
297
+ const out = /* @__PURE__ */ new Set();
298
+ if (start >= 0 && end > start) {
299
+ const candidate = raw.slice(start, end + 1);
300
+ try {
301
+ const json = JSON.parse(candidate);
302
+ const diagnostics = Array.isArray(json?.diagnostics) ? json.diagnostics : [];
303
+ for (const diag of diagnostics) {
304
+ const loc = diag?.location;
305
+ const filePath = loc?.path;
306
+ if (typeof filePath !== "string" || filePath.trim().length === 0) continue;
307
+ const category = typeof diag?.category === "string" ? diag.category : typeof diag?.code === "string" ? diag.code : typeof diag?.rule === "string" ? diag.rule : typeof diag?.severity === "string" ? diag.severity : "issue";
308
+ const span = loc?.span;
309
+ const lineNum = span?.start != null ? String(span.start.line ?? "") : "";
310
+ out.add(`${filePath}:${category}${lineNum ? `:${lineNum}` : ""}`);
311
+ }
312
+ } catch {
313
+ }
314
+ }
315
+ for (const line of raw.split(/\r?\n/)) {
316
+ const trimmed = line.trim();
317
+ const eslintMatch = /^(.+?):(\d+):(\d+)\s+(?:error|warning)\s+.+?\s+(\S+)\s*$/.exec(trimmed);
318
+ if (eslintMatch) {
319
+ out.add(`${eslintMatch[1]}:${eslintMatch[2]}:${eslintMatch[3]}:${eslintMatch[4]}`);
320
+ continue;
321
+ }
322
+ const biomePrettyMatch = /^(.+?):(\d+):(\d+)\s+([a-z]+\/\S+)(?:\s|$)/.exec(trimmed);
323
+ if (biomePrettyMatch) {
324
+ out.add(
325
+ `${biomePrettyMatch[1]}:${biomePrettyMatch[2]}:${biomePrettyMatch[3]}:${biomePrettyMatch[4]}`
326
+ );
327
+ }
328
+ }
329
+ return Array.from(out).slice(0, 200);
330
+ }
331
+ function toCommandSummary(capture) {
332
+ return {
333
+ command: capture.command,
334
+ language: capture.language,
335
+ exitCode: capture.exitCode,
336
+ parsed: capture.parsed,
337
+ outputTail: capture.outputTail,
338
+ ...capture.failedTests ? { failedTests: capture.failedTests } : {},
339
+ ...capture.testsRun !== void 0 ? {
340
+ testsRun: capture.testsRun,
341
+ testsPassed: capture.testsPassed,
342
+ testsSkipped: capture.testsSkipped
343
+ } : {}
344
+ };
345
+ }
346
+ function budgetTimeoutCapture(command) {
347
+ const language = describeVerificationCommand(command).language;
348
+ return {
349
+ command,
350
+ language,
351
+ exitCode: 124,
352
+ parsed: false,
353
+ outputTail: "timed out (channel budget exhausted)",
354
+ status: "timeout",
355
+ durationMs: 0,
356
+ errors: [],
357
+ captureError: "Channel budget exhausted before command ran"
358
+ };
359
+ }
360
+ async function runCommandsSequentially(commands, gateTimeoutMs, runOne) {
361
+ if (commands.length === 0) {
362
+ return [await runOne(void 0, gateTimeoutMs)];
363
+ }
364
+ let remaining = gateTimeoutMs;
365
+ const captures = [];
366
+ for (const command of commands) {
367
+ if (remaining <= 0) {
368
+ captures.push(budgetTimeoutCapture(command));
369
+ continue;
370
+ }
371
+ const capture = await runOne(command, remaining);
372
+ captures.push(capture);
373
+ remaining = Math.max(0, remaining - Math.max(0, capture.durationMs));
374
+ }
375
+ return captures;
376
+ }
377
+ function aggregateBuildCaptures(captures) {
378
+ const dominant = selectDominantCommandResult(captures) ?? captures[0];
379
+ const errors = Array.from(new Set(captures.flatMap((c) => c.errors))).slice(0, 100);
380
+ const captureErrors = captures.map((c) => c.captureError).filter(Boolean);
381
+ return {
382
+ result: {
383
+ exitCode: dominant?.exitCode ?? 0,
384
+ count: errors.length,
385
+ errors,
386
+ signaturesParseable: dominant?.parsed ?? true,
387
+ // Representative tail only — full per-command tails live in `commands`.
388
+ outputTail: dominant?.outputTail ?? ""
389
+ },
390
+ captureError: captureErrors[0],
391
+ language: dominant?.language ?? "unknown",
392
+ parsed: dominant?.parsed ?? true,
393
+ commands: captures.map(toCommandSummary)
394
+ };
395
+ }
396
+ function aggregateLintCaptures(captures) {
397
+ const dominant = selectDominantCommandResult(captures) ?? captures[0];
398
+ const errors = Array.from(new Set(captures.flatMap((c) => c.errors))).slice(0, 200);
399
+ const captureErrors = captures.map((c) => c.captureError).filter(Boolean);
400
+ return {
401
+ result: {
402
+ exitCode: dominant?.exitCode ?? 0,
403
+ count: errors.length,
404
+ errors,
405
+ signaturesParseable: dominant?.parsed ?? true,
406
+ outputTail: dominant?.outputTail ?? ""
407
+ },
408
+ captureError: captureErrors[0],
409
+ language: dominant?.language ?? "unknown",
410
+ parsed: dominant?.parsed ?? true,
411
+ commands: captures.map(toCommandSummary)
412
+ };
413
+ }
414
+ function aggregateTestCaptures(captures) {
415
+ const dominant = selectDominantCommandResult(captures) ?? captures[0];
416
+ const failedTests = Array.from(new Set(captures.flatMap((c) => c.failedTests ?? [])));
417
+ const captureErrors = captures.map((c) => c.captureError).filter(Boolean);
418
+ const comparable = captures.every((capture) => capture.testsRun !== void 0);
419
+ return {
420
+ result: {
421
+ exitCode: dominant?.exitCode ?? 0,
422
+ passed: comparable ? captures.reduce((sum, capture) => sum + (capture.testsPassed ?? 0), 0) : 0,
423
+ failed: comparable ? captures.reduce((sum, capture) => sum + (capture.testsFailed ?? 0), 0) : 0,
424
+ ...comparable ? {
425
+ run: captures.reduce((sum, capture) => sum + (capture.testsRun ?? 0), 0),
426
+ skipped: captures.reduce((sum, capture) => sum + (capture.testsSkipped ?? 0), 0)
427
+ } : {},
428
+ failedTests,
429
+ outputTail: dominant?.outputTail ?? ""
430
+ },
431
+ captureError: captureErrors[0],
432
+ language: dominant?.language ?? "unknown",
433
+ parsed: dominant?.parsed ?? true,
434
+ commands: captures.map(toCommandSummary)
435
+ };
436
+ }
437
+ async function captureTypecheckOnce(worktreePath, timeoutMs, outputTailLines, scopedCommand) {
438
+ const started = Date.now();
439
+ const artifact = await runTypecheckWithArtifacts(worktreePath, {
440
+ timeoutMs,
441
+ tailLines: Math.max(50, outputTailLines),
442
+ ...scopedCommand ? { command: scopedCommand } : {}
443
+ });
444
+ const output = String(artifact.output ?? artifact.outputTail ?? "");
445
+ const exitCode = resolveGateExitCode(artifact.exitCode, artifact.ok);
446
+ const failed = exitCode !== 0;
447
+ const language = artifact.language ?? describeVerificationCommand(artifact.command ?? "").language;
448
+ const parsedResult = parseVerificationErrorsForChannel("build", language, output, failed);
449
+ const errors = extractTypeErrors(output);
450
+ const captureError = exitCode === 124 ? "Typecheck timed out during baseline capture" : (artifact.command ?? "").trim().length === 0 ? "Typecheck command missing during baseline capture" : artifact.exitCode == null && artifact.ok !== true ? "Typecheck command did not exit cleanly during baseline capture (fail-closed)" : void 0;
451
+ const status = exitCode === 124 ? "timeout" : exitCode === 0 ? "passed" : "failed";
452
+ return {
453
+ command: artifact.command ?? scopedCommand ?? "",
454
+ language,
455
+ exitCode,
456
+ parsed: parsedResult.parsed,
457
+ outputTail: tailLines(output, outputTailLines),
458
+ status,
459
+ durationMs: artifact.durationMs ?? Math.max(0, Date.now() - started),
460
+ errors,
461
+ captureError
462
+ };
463
+ }
464
+ async function captureLintOnce(worktreePath, sinceRef, timeoutMs, outputTailLines, scopedCommand) {
465
+ const started = Date.now();
466
+ const artifact = await runLintOnDiffWithArtifacts(worktreePath, {
467
+ baseBranch: sinceRef,
468
+ timeoutMs,
469
+ tailLines: Math.max(50, outputTailLines),
470
+ ...scopedCommand ? { command: scopedCommand } : {}
471
+ });
472
+ const outputTail = tailLines(artifact.outputTail, outputTailLines);
473
+ const okHint = artifact.result === null ? void 0 : artifact.exitCode === 0;
474
+ const exitCode = resolveGateExitCode(artifact.exitCode, okHint);
475
+ const failed = exitCode !== 0;
476
+ const language = artifact.language ?? describeVerificationCommand(artifact.command ?? "").language;
477
+ const parsedResult = parseVerificationErrorsForChannel(
478
+ "lint",
479
+ language,
480
+ artifact.outputTail ?? "",
481
+ failed
482
+ );
483
+ const biome = extractBiomeLintSignatures(artifact.outputTail ?? "");
484
+ const errors = biome.length > 0 ? biome : extractLintErrors(artifact.outputTail ?? "");
485
+ const captureError = exitCode === 124 ? "Lint timed out during baseline capture" : failed && artifact.result === null ? "Lint gate returned no parseable result during baseline capture" : void 0;
486
+ const status = exitCode === 124 ? "timeout" : exitCode === 0 ? "passed" : "failed";
487
+ return {
488
+ command: artifact.command ?? scopedCommand ?? "",
489
+ language,
490
+ exitCode,
491
+ parsed: parsedResult.parsed,
492
+ outputTail,
493
+ status,
494
+ durationMs: artifact.durationMs ?? Math.max(0, Date.now() - started),
495
+ errors,
496
+ captureError
497
+ };
498
+ }
499
+ async function captureTestsOnce(worktreePath, sinceRef, timeoutMs, outputTailLines, scopedCommand) {
500
+ const started = Date.now();
501
+ const artifact = await runDeterministicTestGateWithArtifacts(worktreePath, {
502
+ baseRef: sinceRef,
503
+ timeoutMs,
504
+ tailLines: Math.max(50, outputTailLines),
505
+ ...scopedCommand ? { command: scopedCommand } : {}
506
+ });
507
+ const status = artifact.status ?? "failed";
508
+ const ranAndFailed = status === "failed" || status === "error" || status === "timeout";
509
+ const didNotRun = status === "unavailable" || status === "skipped";
510
+ const okHint = !ranAndFailed;
511
+ const exitCode = resolveGateExitCode(artifact.exitCode, okHint, didNotRun);
512
+ const outputTail = tailLines(artifact.outputTail ?? "", outputTailLines);
513
+ const language = artifact.language ?? describeVerificationCommand(artifact.command ?? "").language;
514
+ const parsedResult = parseVerificationErrorsForChannel(
515
+ "test",
516
+ language,
517
+ outputTail,
518
+ exitCode !== 0,
519
+ artifact.failingTests ?? []
520
+ );
521
+ const parsedCounts = parseFailureOutput(
522
+ artifact.command ?? scopedCommand ?? "",
523
+ outputTail,
524
+ "test"
525
+ );
526
+ const suiteFootprint = parsedCounts.parsed ? parsedCounts.suiteFootprint : void 0;
527
+ const failedCount = suiteFootprint && parsedCounts.errorCount !== null ? parsedCounts.errorCount : void 0;
528
+ const captureError = status === "timeout" ? "Tests timed out during baseline capture" : status === "error" ? "Tests errored during baseline capture" : ranAndFailed && artifact.exitCode == null ? "Tests reported failure without a clean exit during baseline capture (fail-closed)" : void 0;
529
+ return {
530
+ command: artifact.command ?? scopedCommand ?? "",
531
+ language,
532
+ exitCode,
533
+ parsed: parsedResult.parsed,
534
+ outputTail,
535
+ status: didNotRun ? "unavailable" : status,
536
+ durationMs: artifact.durationMs ?? Math.max(0, Date.now() - started),
537
+ errors: [],
538
+ failedTests: artifact.failingTests ?? [],
539
+ ...suiteFootprint && failedCount !== void 0 ? {
540
+ testsRun: suiteFootprint.executed + suiteFootprint.skipped,
541
+ testsPassed: Math.max(0, suiteFootprint.executed - failedCount),
542
+ testsFailed: failedCount,
543
+ testsSkipped: suiteFootprint.skipped
544
+ } : {},
545
+ captureError
546
+ };
547
+ }
548
+ async function captureVerificationBaseline(worktreePath, baselineRef, options = {}) {
549
+ const opts = { ...DEFAULT_OPTIONS, ...options };
550
+ const startTime = Date.now();
551
+ const captureErrors = [];
552
+ const sinceRef = opts.changedSinceRef && opts.changedSinceRef.trim().length > 0 ? opts.changedSinceRef.trim() : baselineRef;
553
+ const scope = resolveVerificationChannelScope(worktreePath, opts.changedFiles);
554
+ const buildCommands = channelCommands(scope.build);
555
+ const lintCommands = channelCommands(scope.lint);
556
+ const testCommands = selectScopedTestCommands(scope);
557
+ const buildRelevant = scope.build.relevant;
558
+ const lintRelevant = scope.lint.relevant;
559
+ const testRelevant = scope.test.relevant;
560
+ const buildUnavailable = scope.build.availability === "unavailable";
561
+ const lintUnavailable = scope.lint.availability === "unavailable";
562
+ const testUnavailable = scope.test.availability === "unavailable";
563
+ const skippedChannel = (result, reason) => ({
564
+ result,
565
+ captureError: void 0,
566
+ language: "unknown",
567
+ parsed: true,
568
+ commands: [
569
+ {
570
+ command: "",
571
+ language: "unknown",
572
+ exitCode: 0,
573
+ parsed: true,
574
+ outputTail: reason
575
+ }
576
+ ]
577
+ });
578
+ const [typecheck, lint, tests] = await withValidationSlot(
579
+ `baseline:${worktreePath}`,
580
+ () => Promise.all([
581
+ buildRelevant ? runCommandsSequentially(
582
+ buildCommands,
583
+ opts.gateTimeoutMs,
584
+ (command, timeoutMs) => captureTypecheckOnce(worktreePath, timeoutMs, opts.outputTailLines, command)
585
+ ).then(aggregateBuildCaptures) : Promise.resolve(
586
+ skippedChannel(
587
+ {
588
+ exitCode: 0,
589
+ count: 0,
590
+ errors: [],
591
+ outputTail: buildUnavailable ? "verification unavailable" : "not task-relevant"
592
+ },
593
+ buildUnavailable ? "verification unavailable" : "not task-relevant"
594
+ )
595
+ ),
596
+ opts.skipLint || !lintRelevant ? Promise.resolve(
597
+ skippedChannel(
598
+ {
599
+ exitCode: 0,
600
+ count: 0,
601
+ errors: [],
602
+ outputTail: lintUnavailable ? "verification unavailable" : lintRelevant ? "skipped" : "not task-relevant"
603
+ },
604
+ lintUnavailable ? "verification unavailable" : lintRelevant ? "skipped" : "not task-relevant"
605
+ )
606
+ ) : runCommandsSequentially(
607
+ lintCommands,
608
+ opts.gateTimeoutMs,
609
+ (command, timeoutMs) => captureLintOnce(worktreePath, sinceRef, timeoutMs, opts.outputTailLines, command)
610
+ ).then(aggregateLintCaptures),
611
+ opts.skipTests || !testRelevant ? Promise.resolve({
612
+ result: {
613
+ exitCode: 0,
614
+ passed: 0,
615
+ failed: 0,
616
+ failedTests: [],
617
+ outputTail: testUnavailable ? "verification unavailable" : testRelevant ? "skipped" : "not task-relevant"
618
+ },
619
+ captureError: void 0,
620
+ language: "unknown",
621
+ parsed: true,
622
+ commands: [
623
+ {
624
+ command: "",
625
+ language: "unknown",
626
+ exitCode: 0,
627
+ parsed: true,
628
+ outputTail: testUnavailable ? "verification unavailable" : testRelevant ? "skipped" : "not task-relevant"
629
+ }
630
+ ]
631
+ }) : runCommandsSequentially(
632
+ testCommands,
633
+ opts.gateTimeoutMs,
634
+ (command, timeoutMs) => captureTestsOnce(worktreePath, sinceRef, timeoutMs, opts.outputTailLines, command)
635
+ ).then(aggregateTestCaptures)
636
+ ]),
637
+ // Same bound as runDeterministicGates: the slot wait must scale with the
638
+ // caller's own gate budget so pacing cannot breach an outer deadline.
639
+ { maxWaitMs: Math.min(5 * 60 * 1e3, Math.max(5e3, opts.gateTimeoutMs * 3)) }
640
+ );
641
+ if (typecheck.captureError) captureErrors.push(typecheck.captureError);
642
+ if (lint.captureError) captureErrors.push(lint.captureError);
643
+ if (tests.captureError) captureErrors.push(tests.captureError);
644
+ const durationMs = Date.now() - startTime;
645
+ const gateSummary = {
646
+ build: {
647
+ exitCode: typecheck.result.exitCode,
648
+ parsed: typecheck.parsed,
649
+ language: typecheck.language,
650
+ commands: typecheck.commands,
651
+ availability: buildUnavailable ? "unavailable" : buildRelevant ? "executed" : "out_of_scope"
652
+ },
653
+ lint: {
654
+ exitCode: lint.result.exitCode,
655
+ parsed: lint.parsed,
656
+ language: lint.language,
657
+ commands: lint.commands,
658
+ availability: lintUnavailable ? "unavailable" : lintRelevant && !opts.skipLint ? "executed" : "out_of_scope"
659
+ },
660
+ test: {
661
+ exitCode: tests.result.exitCode,
662
+ parsed: tests.parsed,
663
+ language: tests.language,
664
+ commands: tests.commands,
665
+ availability: testUnavailable ? "unavailable" : testRelevant && !opts.skipTests ? "executed" : "out_of_scope"
666
+ }
667
+ };
668
+ const regressionCount = Number(gateSummary.build.exitCode !== 0) + Number(gateSummary.lint.exitCode !== 0) + Number(gateSummary.test.exitCode !== 0);
669
+ const sentinelPresent = gateSummary.build.exitCode !== 0 && !gateSummary.build.parsed || gateSummary.lint.exitCode !== 0 && !gateSummary.lint.parsed || gateSummary.test.exitCode !== 0 && !gateSummary.test.parsed;
670
+ const perLanguage = Array.from(
671
+ new Set(
672
+ [
673
+ ...typecheck.commands.map((c) => c.language),
674
+ ...lint.commands.map((c) => c.language),
675
+ ...tests.commands.map((c) => c.language)
676
+ ].filter((language) => language && language !== "unknown")
677
+ )
678
+ );
679
+ return {
680
+ baselineRef,
681
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
682
+ testResults: tests.result,
683
+ typeErrors: typecheck.result,
684
+ lintErrors: lint.result,
685
+ metadata: {
686
+ durationMs,
687
+ captureSucceeded: captureErrors.length === 0,
688
+ captureErrors
689
+ },
690
+ summary: {
691
+ schemaVersion: BASELINE_SCHEMA_VERSION,
692
+ regressionCount,
693
+ sentinelPresent,
694
+ perLanguage,
695
+ gates: gateSummary
696
+ }
697
+ };
698
+ }
699
+ function createEmptyBaseline(baselineRef, reason) {
700
+ return {
701
+ baselineRef,
702
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
703
+ testResults: {
704
+ exitCode: 0,
705
+ passed: 0,
706
+ failed: 0,
707
+ failedTests: [],
708
+ outputTail: ""
709
+ },
710
+ typeErrors: {
711
+ exitCode: 0,
712
+ count: 0,
713
+ errors: [],
714
+ signaturesParseable: true,
715
+ outputTail: ""
716
+ },
717
+ lintErrors: {
718
+ exitCode: 0,
719
+ count: 0,
720
+ errors: [],
721
+ signaturesParseable: true,
722
+ outputTail: ""
723
+ },
724
+ metadata: {
725
+ durationMs: 0,
726
+ captureSucceeded: false,
727
+ captureErrors: [reason]
728
+ },
729
+ summary: {
730
+ schemaVersion: BASELINE_SCHEMA_VERSION,
731
+ regressionCount: 0,
732
+ sentinelPresent: false,
733
+ perLanguage: [],
734
+ gates: {
735
+ build: { exitCode: 0, parsed: true, language: "unknown", commands: [] },
736
+ lint: { exitCode: 0, parsed: true, language: "unknown", commands: [] },
737
+ test: { exitCode: 0, parsed: true, language: "unknown", commands: [] }
738
+ }
739
+ }
740
+ };
741
+ }
742
+
743
+ // src/core/verification/baseline-store.ts
744
+ function scopeHash(changedFiles) {
745
+ if (!changedFiles || changedFiles.length === 0) return "";
746
+ const sorted = [...changedFiles].map((file) => file.trim()).filter(Boolean).sort();
747
+ if (sorted.length === 0) return "";
748
+ return createHash("sha256").update(sorted.join("\n")).digest("hex").slice(0, 12);
749
+ }
750
+ function cachePathForBaseline(cacheDir, baselineRef, changedSinceRef, changedFiles) {
751
+ const scope = scopeHash(changedFiles);
752
+ const scopeSuffix = scope ? `--scope-${scope}` : "";
753
+ if (changedSinceRef && changedSinceRef !== baselineRef) {
754
+ return join(cacheDir, `${baselineRef}--since-${changedSinceRef}${scopeSuffix}.json`);
755
+ }
756
+ return join(cacheDir, `${baselineRef}${scopeSuffix}.json`);
757
+ }
758
+ async function ensureNodeModulesForBaselineWorktree(repoRoot, worktreePath) {
759
+ await prepareWorktreeDependencies({ repoRoot, worktreePath, bestEffort: true });
760
+ }
761
+ function isFreshSchemaBaseline(cached) {
762
+ if (cached.metadata?.captureSucceeded !== true) return false;
763
+ if (!cached.summary) return false;
764
+ return cached.summary.schemaVersion === BASELINE_SCHEMA_VERSION;
765
+ }
766
+ async function readCachedBaseline(path3) {
767
+ try {
768
+ const raw = await readFile2(path3, "utf8");
769
+ const parsed = JSON.parse(raw);
770
+ if (!parsed || typeof parsed !== "object") return null;
771
+ if (typeof parsed.baselineRef !== "string") return null;
772
+ return parsed;
773
+ } catch {
774
+ return null;
775
+ }
776
+ }
777
+ async function writeCachedBaseline(path3, baseline) {
778
+ await atomicWriteJson(path3, baseline);
779
+ }
780
+ async function addDetachedWorktree(repoRoot, ref) {
781
+ const base = await mkPoeticTempDir("baseline-worktree");
782
+ const worktreePath = join(base, ref.slice(0, 12));
783
+ const result = await execa("git", ["worktree", "add", "--detach", worktreePath, ref], {
784
+ cwd: repoRoot,
785
+ reject: false,
786
+ stdio: "pipe"
787
+ });
788
+ if ((result.exitCode ?? 0) !== 0) {
789
+ await rm(base, { recursive: true, force: true });
790
+ throw new Error(
791
+ `Failed to create baseline worktree for ${ref}: ${String(result.stderr ?? result.stdout ?? "")}`
792
+ );
793
+ }
794
+ try {
795
+ await ensureNodeModulesForBaselineWorktree(repoRoot, worktreePath);
796
+ } catch (error) {
797
+ await removeDetachedWorktree(repoRoot, worktreePath);
798
+ throw error;
799
+ }
800
+ return worktreePath;
801
+ }
802
+ async function removeDetachedWorktree(repoRoot, worktreePath) {
803
+ try {
804
+ await execa("git", ["worktree", "remove", "--force", worktreePath], {
805
+ cwd: repoRoot,
806
+ reject: false,
807
+ stdio: "pipe"
808
+ });
809
+ } finally {
810
+ const parent = dirname(worktreePath);
811
+ await rm(parent, { recursive: true, force: true });
812
+ }
813
+ }
814
+ async function getOrCaptureVerificationBaseline(options) {
815
+ const cacheFile = cachePathForBaseline(
816
+ options.cacheDir,
817
+ options.baselineRef,
818
+ options.captureOptions?.changedSinceRef,
819
+ options.captureOptions?.changedFiles
820
+ );
821
+ const cached = await readCachedBaseline(cacheFile);
822
+ if (cached && cached.baselineRef === options.baselineRef && isFreshSchemaBaseline(cached)) {
823
+ return cached;
824
+ }
825
+ await mkdir2(options.cacheDir, { recursive: true });
826
+ let worktreePath = null;
827
+ try {
828
+ worktreePath = await addDetachedWorktree(options.repoRoot, options.baselineRef);
829
+ const baseline = await captureVerificationBaseline(worktreePath, options.baselineRef, {
830
+ ...options.captureOptions,
831
+ // Default anchor matches baselineRef unless caller overrides.
832
+ changedSinceRef: options.captureOptions?.changedSinceRef ?? options.baselineRef
833
+ });
834
+ await writeCachedBaseline(cacheFile, baseline);
835
+ return baseline;
836
+ } catch (error) {
837
+ const message = error instanceof Error ? error.message : String(error);
838
+ return createEmptyBaseline(options.baselineRef, message);
839
+ } finally {
840
+ if (worktreePath) {
841
+ await removeDetachedWorktree(options.repoRoot, worktreePath);
842
+ }
843
+ }
844
+ }
845
+
846
+ // src/core/verification/known-pre-existing-failures.ts
847
+ import * as fs2 from "fs/promises";
848
+ import * as path2 from "path";
849
+ var logger2 = createLogger("KnownPreExistingFailures");
850
+ var MIN_ERROR_FINGERPRINT_LENGTH = 4;
851
+ var EMPTY_REGISTRY = Object.freeze({
852
+ schemaVersion: 1,
853
+ generatedAt: "",
854
+ baseCommit: "",
855
+ failures: []
856
+ });
857
+ var _cachedRegistry;
858
+ async function loadKnownPreExistingFailures(repoRoot = process.cwd()) {
859
+ if (_cachedRegistry !== void 0) {
860
+ return _cachedRegistry;
861
+ }
862
+ const registryPath = process.env.POETIC_KNOWN_FAILURES_PATH ?? path2.join(repoRoot, ".poetic", "verification", "known-pre-existing-failures.json");
863
+ let raw;
864
+ try {
865
+ raw = await fs2.readFile(registryPath, "utf-8");
866
+ } catch (err) {
867
+ const isNotFound = err instanceof Error && "code" in err && err.code === "ENOENT";
868
+ if (!isNotFound) {
869
+ logger2.warn("Failed to read known-pre-existing-failures registry", {
870
+ registryPath,
871
+ error: err instanceof Error ? err.message : String(err)
872
+ });
873
+ }
874
+ _cachedRegistry = { ...EMPTY_REGISTRY };
875
+ return _cachedRegistry;
876
+ }
877
+ try {
878
+ const parsed = JSON.parse(raw);
879
+ if (typeof parsed !== "object" || parsed === null || !Array.isArray(parsed.failures)) {
880
+ throw new Error("Registry JSON does not match expected shape");
881
+ }
882
+ const registry = parsed;
883
+ const validFailures = registry.failures.filter(isValidKnownFailureEntry);
884
+ if (validFailures.length !== registry.failures.length) {
885
+ logger2.warn("Ignoring invalid known-pre-existing-failures registry entries", {
886
+ registryPath,
887
+ ignoredCount: registry.failures.length - validFailures.length
888
+ });
889
+ }
890
+ _cachedRegistry = {
891
+ ...registry,
892
+ failures: validFailures
893
+ };
894
+ logger2.debug("Loaded known-pre-existing-failures registry", {
895
+ registryPath,
896
+ entryCount: _cachedRegistry.failures.length,
897
+ baseCommit: _cachedRegistry.baseCommit
898
+ });
899
+ return _cachedRegistry;
900
+ } catch (err) {
901
+ logger2.warn("Malformed known-pre-existing-failures registry \u2014 treating as empty", {
902
+ registryPath,
903
+ error: err instanceof Error ? err.message : String(err)
904
+ });
905
+ _cachedRegistry = { ...EMPTY_REGISTRY };
906
+ return _cachedRegistry;
907
+ }
908
+ }
909
+ function isValidKnownFailureEntry(entry) {
910
+ return normalizeFingerprint(entry.errorFingerprint) !== null;
911
+ }
912
+ function normalizeFingerprint(fingerprint) {
913
+ const normalized = fingerprint?.trim();
914
+ if (!normalized || normalized.length < MIN_ERROR_FINGERPRINT_LENGTH) {
915
+ return null;
916
+ }
917
+ return normalized.toLowerCase();
918
+ }
919
+ function detectRuntimeEnvironment() {
920
+ if (process.env.CLAUDECODE === "1" || process.env.CLAUDE_CODE === "true" || process.env.AI_SDK === "claude-code") {
921
+ return "claude-code";
922
+ }
923
+ if (process.env.CI === "true" || process.env.CI === "1" || process.env.GITHUB_ACTIONS === "true" || process.env.CIRCLECI === "true" || process.env.TRAVIS === "true") {
924
+ return "ci";
925
+ }
926
+ return "local";
927
+ }
928
+ function looksLikeProjectFileToken(token) {
929
+ const trimmed = token.trim();
930
+ if (trimmed.length === 0) return false;
931
+ if (isProjectSourcePath(trimmed)) return true;
932
+ return (trimmed.includes("/") || trimmed.includes("\\")) && !/\s/.test(trimmed);
933
+ }
934
+ function parseLiveFailure(raw) {
935
+ const trimmed = raw.trim();
936
+ for (const separator of [/\s*>\s*/, /::/]) {
937
+ const match = separator.exec(trimmed);
938
+ if (!match || match.index <= 0) continue;
939
+ const head = trimmed.slice(0, match.index).trim();
940
+ const tail = trimmed.slice(match.index + match[0].length).trim();
941
+ if (looksLikeProjectFileToken(head) && tail.length > 0) {
942
+ return { file: head, testPath: tail, raw };
943
+ }
944
+ }
945
+ const goMatch = /^(.+?):(\d+)$/.exec(trimmed);
946
+ if (goMatch && looksLikeProjectFileToken(goMatch[1] ?? "")) {
947
+ return { file: (goMatch[1] ?? "").trim(), testPath: trimmed, raw };
948
+ }
949
+ return { file: "", testPath: trimmed, raw };
950
+ }
951
+ function escapeRegExp(value) {
952
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
953
+ }
954
+ var VITEST_FAILURE_MARKER_SOURCE = "(?:\\s*(?:FAIL|FAILURES?|FAILED)\\s+)?[^\\n]*\\.(?:test|spec)\\.[jt]sx?\\s*>\\s+";
955
+ var GENERIC_FAILURE_MARKER_SOURCE = "(?:\\s*(?:FAIL|FAILURES?|FAILED)\\s+)?[^\\n\\s]*[\\\\/][^\\n\\s]*(?:::|\\s>\\s)";
956
+ function findNextFailureMarker(output, startIndex) {
957
+ const rest = output.slice(startIndex + 1);
958
+ const match = new RegExp(
959
+ `\\n(?:${VITEST_FAILURE_MARKER_SOURCE}|${GENERIC_FAILURE_MARKER_SOURCE})`,
960
+ "i"
961
+ ).exec(rest);
962
+ return match ? startIndex + 1 + match.index : output.length;
963
+ }
964
+ function hasFailureMarkers(output) {
965
+ return new RegExp(
966
+ `(?:^|\\n)(?:${VITEST_FAILURE_MARKER_SOURCE}|${GENERIC_FAILURE_MARKER_SOURCE})`,
967
+ "i"
968
+ ).test(output);
969
+ }
970
+ function extractScopedFailureOutput(live, testOutputTail) {
971
+ const rawNeedle = live.raw.trim();
972
+ const candidates = [
973
+ rawNeedle,
974
+ live.file && live.testPath ? `${live.file} > ${live.testPath}` : "",
975
+ live.testPath
976
+ ].filter((candidate) => candidate.length > 0);
977
+ for (const candidate of candidates) {
978
+ const markerPattern = new RegExp(
979
+ `(?:^|\\n)[^\\n]*${escapeRegExp(candidate)}(?:\\s+\\([^\\n)]*\\))?\\s*(?=\\n|$)`,
980
+ "i"
981
+ );
982
+ const marker = markerPattern.exec(testOutputTail);
983
+ if (!marker || marker.index === void 0) continue;
984
+ const start = marker.index;
985
+ const end = findNextFailureMarker(testOutputTail, start);
986
+ return testOutputTail.slice(start, end);
987
+ }
988
+ return null;
989
+ }
990
+ function matchesRegisteredFailure(live, entry, testOutputTail, runtimeEnvironment = detectRuntimeEnvironment()) {
991
+ if (live.file !== entry.file) {
992
+ return false;
993
+ }
994
+ const normalizedPath = live.testPath.trim();
995
+ const normalizedName = entry.testName.trim();
996
+ if (!normalizedPath.startsWith(normalizedName)) {
997
+ return false;
998
+ }
999
+ const fingerprint = normalizeFingerprint(entry.errorFingerprint);
1000
+ if (!fingerprint) {
1001
+ return false;
1002
+ }
1003
+ const scopedOutput = extractScopedFailureOutput(live, testOutputTail);
1004
+ if (!scopedOutput && hasFailureMarkers(testOutputTail)) {
1005
+ return false;
1006
+ }
1007
+ const searchableOutput = scopedOutput ?? testOutputTail;
1008
+ if (!searchableOutput.toLowerCase().includes(fingerprint)) return false;
1009
+ if (entry.environments !== void 0 && entry.environments.length > 0) {
1010
+ if (!entry.environments.includes(runtimeEnvironment)) {
1011
+ return false;
1012
+ }
1013
+ }
1014
+ return true;
1015
+ }
1016
+ function allFailuresAreRegistered(liveFailures, registry, testOutputTail, runtimeEnvironment = detectRuntimeEnvironment()) {
1017
+ if (liveFailures.length === 0) return true;
1018
+ if (registry.failures.length === 0) return false;
1019
+ for (const raw of liveFailures) {
1020
+ const live = parseLiveFailure(raw);
1021
+ const matched = registry.failures.some(
1022
+ (entry) => matchesRegisteredFailure(live, entry, testOutputTail, runtimeEnvironment)
1023
+ );
1024
+ if (!matched) {
1025
+ return false;
1026
+ }
1027
+ }
1028
+ return true;
1029
+ }
1030
+
1031
+ // src/core/verification/types.ts
1032
+ var VERIFICATION_OUTCOME_CONTRACT_VERSION = 1;
1033
+ function outcomeStatus(status, exitCode) {
1034
+ return status ?? (exitCode === 0 ? "passed" : "failed");
1035
+ }
1036
+ function outcomeLanguage(language) {
1037
+ return language ?? "unknown";
1038
+ }
1039
+ function verificationOutcomesFromGateArtifacts(gates, options = {}) {
1040
+ const testTotals = gates.tests ? comparableTestTotals(gates.tests) : void 0;
1041
+ const build = {
1042
+ channel: "build",
1043
+ status: outcomeStatus(gates.build.status, gates.build.exitCode),
1044
+ exitCode: gates.build.exitCode,
1045
+ outputTail: gates.build.outputTail,
1046
+ language: outcomeLanguage(gates.build.language),
1047
+ parserVersion: VERIFICATION_OUTCOME_CONTRACT_VERSION,
1048
+ command: gates.build.command,
1049
+ commandProvenance: {
1050
+ command: gates.build.command,
1051
+ cwd: options.cwd,
1052
+ source: options.source ?? "deterministic-gate"
1053
+ },
1054
+ stdoutTail: gates.build.stdoutTail,
1055
+ stderrTail: gates.build.stderrTail,
1056
+ verificationCoverage: gates.build.verificationCoverage,
1057
+ commandResults: gates.build.commandResults
1058
+ };
1059
+ return {
1060
+ build,
1061
+ lint: gates.lint ? {
1062
+ channel: "lint",
1063
+ status: outcomeStatus(gates.lint.status, gates.lint.exitCode),
1064
+ exitCode: gates.lint.exitCode,
1065
+ outputTail: gates.lint.outputTail,
1066
+ language: outcomeLanguage(gates.lint.language),
1067
+ parserVersion: VERIFICATION_OUTCOME_CONTRACT_VERSION,
1068
+ command: gates.lint.command,
1069
+ commandProvenance: {
1070
+ command: gates.lint.command,
1071
+ cwd: options.cwd,
1072
+ source: options.source ?? "deterministic-gate"
1073
+ },
1074
+ verificationCoverage: gates.lint.verificationCoverage,
1075
+ commandResults: gates.lint.commandResults
1076
+ } : void 0,
1077
+ tests: gates.tests ? {
1078
+ channel: "test",
1079
+ status: outcomeStatus(gates.tests.status, gates.tests.exitCode),
1080
+ exitCode: gates.tests.exitCode,
1081
+ outputTail: gates.tests.outputTail,
1082
+ language: outcomeLanguage(gates.tests.language),
1083
+ parserVersion: VERIFICATION_OUTCOME_CONTRACT_VERSION,
1084
+ command: gates.tests.command,
1085
+ commandProvenance: {
1086
+ command: gates.tests.command,
1087
+ cwd: options.cwd,
1088
+ source: options.source ?? "deterministic-gate"
1089
+ },
1090
+ failingTests: gates.tests.failingTests,
1091
+ ...testTotals ?? {},
1092
+ verificationCoverage: gates.tests.verificationCoverage,
1093
+ commandResults: gates.tests.commandResults
1094
+ } : void 0
1095
+ };
1096
+ }
1097
+ function comparableTestTotals(tests) {
1098
+ const evidence = tests.commandResults && tests.commandResults.length > 0 ? tests.commandResults.map((result) => ({
1099
+ command: result.command,
1100
+ output: result.outputTail
1101
+ })) : [{ command: tests.command, output: tests.outputTail }];
1102
+ let testsRun = 0;
1103
+ let testsPassed = 0;
1104
+ let testsSkipped = 0;
1105
+ for (const item of evidence) {
1106
+ const parsed = parseFailureOutput(item.command, item.output, "test");
1107
+ if (!parsed.parsed || parsed.errorCount === null || !parsed.suiteFootprint) {
1108
+ return void 0;
1109
+ }
1110
+ testsRun += parsed.suiteFootprint.executed + parsed.suiteFootprint.skipped;
1111
+ testsPassed += Math.max(0, parsed.suiteFootprint.executed - parsed.errorCount);
1112
+ testsSkipped += parsed.suiteFootprint.skipped;
1113
+ }
1114
+ return { testsRun, testsPassed, testsSkipped };
1115
+ }
1116
+
1117
+ export {
1118
+ withValidationSlot,
1119
+ getOrCaptureVerificationBaseline,
1120
+ loadKnownPreExistingFailures,
1121
+ allFailuresAreRegistered,
1122
+ verificationOutcomesFromGateArtifacts
1123
+ };
1124
+ //# sourceMappingURL=chunk-XNO4FM6X.js.map