@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,948 @@
1
+ import {
2
+ getBranchCleanupQueuePath,
3
+ readBranchCleanupQueue,
4
+ removeBranchCleanupEntries
5
+ } from "./chunk-TGON4N4O.js";
6
+ import {
7
+ isEphemeralPoeticBranchDeletionCandidate,
8
+ isProtectedPipelineBranch,
9
+ resolveDefaultBranch
10
+ } from "./chunk-XQD2B6BB.js";
11
+ import {
12
+ isPoeticOwnedBranch,
13
+ isValidationBranch
14
+ } from "./chunk-34CNP2HB.js";
15
+
16
+ // src/core/cleanup/branch-cleanup-manager.ts
17
+ import { existsSync } from "fs";
18
+ import { resolve } from "path";
19
+ import { execa as execa2 } from "execa";
20
+
21
+ // src/core/git/cleanup-current-branch.ts
22
+ import { execa } from "execa";
23
+ var CLEANUP_UNBORN_REPOSITORY_INFO = "Info: repository has no commits yet";
24
+ var CLEANUP_HEAD_INSPECTION_ERROR = "Error: could not inspect repository HEAD";
25
+ var AMBIGUOUS_HEAD_SIGNATURE = /ambiguous argument ['"]HEAD['"]/i;
26
+ var UNKNOWN_REVISION_SIGNATURE = /unknown revision|bad object/i;
27
+ function isAmbiguousHeadFailure(stderr, stdout) {
28
+ const combined = `${stderr}
29
+ ${stdout}`;
30
+ return AMBIGUOUS_HEAD_SIGNATURE.test(combined);
31
+ }
32
+ function isUnknownRevisionFailure(stderr, stdout) {
33
+ const combined = `${stderr}
34
+ ${stdout}`;
35
+ return UNKNOWN_REVISION_SIGNATURE.test(combined);
36
+ }
37
+ async function headCommitIsMissing(cwd) {
38
+ const verify = await execa("git", ["rev-parse", "--verify", "-q", "HEAD^{commit}"], {
39
+ cwd,
40
+ reject: false,
41
+ stdio: "pipe"
42
+ });
43
+ const exitCode = verify.exitCode ?? 0;
44
+ if (exitCode === 0) {
45
+ return false;
46
+ }
47
+ return isUnknownRevisionFailure(verify.stderr ?? "", verify.stdout ?? "");
48
+ }
49
+ async function resolveCleanupCurrentBranch(cwd) {
50
+ const revParse = await execa("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
51
+ cwd,
52
+ reject: false,
53
+ stdio: "pipe"
54
+ });
55
+ const revParseExitCode = revParse.exitCode ?? 0;
56
+ if (revParseExitCode === 0) {
57
+ const branch = revParse.stdout.trim();
58
+ if (branch === "HEAD") {
59
+ return { state: "detached" };
60
+ }
61
+ if (branch) {
62
+ return { state: "attached", branch };
63
+ }
64
+ }
65
+ const revParseAmbiguous = revParseExitCode !== 0 && isAmbiguousHeadFailure(revParse.stderr ?? "", revParse.stdout ?? "");
66
+ const symbolic = await execa("git", ["symbolic-ref", "--quiet", "--short", "HEAD"], {
67
+ cwd,
68
+ reject: false,
69
+ stdio: "pipe"
70
+ });
71
+ const symbolicExitCode = symbolic.exitCode ?? 0;
72
+ if (symbolicExitCode === 0) {
73
+ const symbolicBranch = symbolic.stdout.trim();
74
+ if (symbolicBranch) {
75
+ if (revParseAmbiguous) {
76
+ return { state: "unborn", symbolicBranch };
77
+ }
78
+ if (revParseExitCode !== 0 && await headCommitIsMissing(cwd)) {
79
+ return { state: "unborn", symbolicBranch };
80
+ }
81
+ }
82
+ }
83
+ if (revParseAmbiguous) {
84
+ const fallbackSymbolic = await execa("git", ["symbolic-ref", "--short", "HEAD"], {
85
+ cwd,
86
+ reject: false,
87
+ stdio: "pipe"
88
+ });
89
+ const branch = fallbackSymbolic.stdout.trim();
90
+ if ((fallbackSymbolic.exitCode ?? 0) === 0 && branch) {
91
+ return { state: "unborn", symbolicBranch: branch };
92
+ }
93
+ }
94
+ if (revParseExitCode !== 0) {
95
+ return { state: "unknown", reason: "HEAD branch inspection failed" };
96
+ }
97
+ return { state: "detached" };
98
+ }
99
+
100
+ // src/core/cleanup/branch-cleanup-manager.ts
101
+ var DEFAULT_BRANCH_CLEANUP_AGE_DAYS = 7;
102
+ var STRICT_POETIC_PATTERNS = [
103
+ // Legacy lab mode worktree branches (pre poetic/wt-* migration)
104
+ /^lab-[a-f0-9]{8,}-\d{14,}-.*-[a-f0-9]{8}$/,
105
+ // Backup branches (numeric timestamp)
106
+ /^backup\/pre-sync-\d{10,}$/,
107
+ // Legacy Poetic competition branches (feature/<uuid>-...-<8hex>)
108
+ /^feature\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}-.*-[a-f0-9]{8}$/i
109
+ ];
110
+ var EXTENDED_TEST_PATTERNS = [
111
+ // Test harness branches (require 8-char hex suffix)
112
+ /^feature\/task-\d+-.*-[a-f0-9]{8}$/,
113
+ /^feature\/test-\d+-variant-.*-[a-f0-9]{8}$/
114
+ ];
115
+ var BranchCleanupManager = class {
116
+ constructor(cwd = process.cwd()) {
117
+ this.cwd = cwd;
118
+ }
119
+ cwd;
120
+ defaultBranch = null;
121
+ remoteDefaultBranches = /* @__PURE__ */ new Map();
122
+ queuedBranches = /* @__PURE__ */ new Map();
123
+ async refreshQueuedBranches() {
124
+ try {
125
+ const entries = await readBranchCleanupQueue(getBranchCleanupQueuePath(this.cwd));
126
+ this.queuedBranches = new Map(entries.map((entry) => [entry.branch, entry]));
127
+ } catch {
128
+ this.queuedBranches = /* @__PURE__ */ new Map();
129
+ }
130
+ }
131
+ /**
132
+ * Auto-detect the default branch from origin/HEAD or fallback.
133
+ * Delegates to resolveDefaultBranch; caches the result on this instance.
134
+ */
135
+ async getDefaultBranch() {
136
+ if (this.defaultBranch) {
137
+ return this.defaultBranch;
138
+ }
139
+ this.defaultBranch = await resolveDefaultBranch(this.cwd);
140
+ return this.defaultBranch;
141
+ }
142
+ /**
143
+ * Auto-detect the default branch for a specific remote (e.g. origin/HEAD, upstream/HEAD).
144
+ * Falls back to getDefaultBranch() if the remote HEAD cannot be resolved.
145
+ */
146
+ async getDefaultBranchForRemote(remote) {
147
+ const cached = this.remoteDefaultBranches.get(remote);
148
+ if (cached) return cached;
149
+ try {
150
+ const { stdout } = await execa2("git", ["symbolic-ref", `refs/remotes/${remote}/HEAD`], {
151
+ cwd: this.cwd,
152
+ stdio: "pipe"
153
+ });
154
+ const prefix = `refs/remotes/${remote}/`;
155
+ const trimmed = stdout.trim();
156
+ if (trimmed.startsWith(prefix)) {
157
+ const branch = trimmed.slice(prefix.length);
158
+ if (branch.length > 0) {
159
+ this.remoteDefaultBranches.set(remote, branch);
160
+ return branch;
161
+ }
162
+ }
163
+ } catch {
164
+ }
165
+ return await this.getDefaultBranch();
166
+ }
167
+ /**
168
+ * Get current HEAD branch name for cleanup analysis.
169
+ *
170
+ * Returns "HEAD" when detached. Never throws for unborn repositories.
171
+ */
172
+ async getCurrentBranch() {
173
+ const resolution = await resolveCleanupCurrentBranch(this.cwd);
174
+ if (resolution.state === "attached") {
175
+ return resolution.branch;
176
+ }
177
+ if (resolution.state === "unborn") {
178
+ return resolution.symbolicBranch;
179
+ }
180
+ return "HEAD";
181
+ }
182
+ /**
183
+ * Get all worktree-attached branches
184
+ */
185
+ async getWorktreeBranches() {
186
+ const branches = /* @__PURE__ */ new Map();
187
+ const { stdout } = await execa2("git", ["worktree", "list", "--porcelain"], {
188
+ cwd: this.cwd,
189
+ stdio: "pipe"
190
+ });
191
+ const lines = stdout.split("\n");
192
+ let currentPath = null;
193
+ for (const line of lines) {
194
+ if (line.startsWith("worktree ")) {
195
+ currentPath = resolve(line.substring("worktree ".length).trim());
196
+ } else if (line.startsWith("branch ") && currentPath) {
197
+ const branchRef = line.substring("branch ".length).trim();
198
+ const branchName = branchRef.replace(/^refs\/heads\//, "");
199
+ branches.set(branchName, currentPath);
200
+ currentPath = null;
201
+ }
202
+ }
203
+ return branches;
204
+ }
205
+ /**
206
+ * Check if a remote ref exists for this branch (local remote-tracking refs)
207
+ */
208
+ async hasRemoteRef(branch) {
209
+ try {
210
+ const { stdout } = await execa2(
211
+ "git",
212
+ ["for-each-ref", "--format=%(refname:short)", `refs/remotes/*/${branch}`],
213
+ { cwd: this.cwd, stdio: "pipe" }
214
+ );
215
+ const refs = stdout.trim().split("\n").filter(Boolean);
216
+ return refs[0] || null;
217
+ } catch {
218
+ return null;
219
+ }
220
+ }
221
+ /**
222
+ * Check if branch has upstream tracking configured
223
+ */
224
+ async hasUpstreamTracking(branch) {
225
+ try {
226
+ const { stdout } = await execa2("git", ["config", "--get", `branch.${branch}.remote`], {
227
+ cwd: this.cwd,
228
+ stdio: "pipe"
229
+ });
230
+ const remote = stdout.trim();
231
+ if (remote) {
232
+ const { stdout: merge } = await execa2(
233
+ "git",
234
+ ["config", "--get", `branch.${branch}.merge`],
235
+ { cwd: this.cwd, stdio: "pipe" }
236
+ );
237
+ return `${remote}/${merge.replace("refs/heads/", "")}`;
238
+ }
239
+ return null;
240
+ } catch {
241
+ return null;
242
+ }
243
+ }
244
+ /**
245
+ * Check if branch is merged into default branch using merge-base --is-ancestor
246
+ * This is more reliable than git branch -d behavior
247
+ */
248
+ async isMergedInto(branch, target) {
249
+ try {
250
+ await execa2("git", ["merge-base", "--is-ancestor", branch, target], {
251
+ cwd: this.cwd,
252
+ stdio: "pipe"
253
+ });
254
+ return true;
255
+ } catch {
256
+ return false;
257
+ }
258
+ }
259
+ /**
260
+ * Get count of commits ahead of default branch (unique commits)
261
+ */
262
+ async getAheadCount(branch, target) {
263
+ try {
264
+ const { stdout } = await execa2("git", ["rev-list", "--count", `${target}..${branch}`], {
265
+ cwd: this.cwd,
266
+ stdio: "pipe"
267
+ });
268
+ return parseInt(stdout.trim(), 10) || 0;
269
+ } catch {
270
+ return 0;
271
+ }
272
+ }
273
+ async getBranchHeadSha(branch) {
274
+ try {
275
+ const { stdout } = await execa2(
276
+ "git",
277
+ ["rev-parse", "--verify", `refs/heads/${branch}^{commit}`],
278
+ {
279
+ cwd: this.cwd,
280
+ stdio: "pipe"
281
+ }
282
+ );
283
+ return stdout.trim() || null;
284
+ } catch {
285
+ return null;
286
+ }
287
+ }
288
+ /**
289
+ * Get last activity time for a branch
290
+ * Uses max of: tip commit time, reflog latest entry
291
+ * Conservative: if reflog missing and near threshold, treat as recent
292
+ */
293
+ async getLastActivityTime(branch, thresholdMs) {
294
+ let tipTime = null;
295
+ let reflogTime = null;
296
+ try {
297
+ const { stdout } = await execa2("git", ["show", "-s", "--format=%ct", branch], {
298
+ cwd: this.cwd,
299
+ stdio: "pipe"
300
+ });
301
+ tipTime = parseInt(stdout.trim(), 10) * 1e3;
302
+ } catch {
303
+ }
304
+ try {
305
+ const { stdout } = await execa2(
306
+ "git",
307
+ ["reflog", "show", "--date=unix", "--format=%gd", "-1", branch],
308
+ {
309
+ cwd: this.cwd,
310
+ stdio: "pipe"
311
+ }
312
+ );
313
+ const selector = stdout.trim().split("\n")[0] ?? "";
314
+ const timestampMatch = selector.match(/@\{(?<timestamp>\d+)\}$/);
315
+ const timestamp = parseInt(timestampMatch?.groups?.timestamp ?? "", 10);
316
+ reflogTime = Number.isFinite(timestamp) && timestamp > 0 ? timestamp * 1e3 : null;
317
+ } catch {
318
+ }
319
+ const lastActivity = Math.max(tipTime || 0, reflogTime || 0);
320
+ if (!reflogTime && tipTime) {
321
+ const age = Date.now() - tipTime;
322
+ if (age < thresholdMs * 2) {
323
+ return /* @__PURE__ */ new Date();
324
+ }
325
+ }
326
+ return new Date(lastActivity || Date.now());
327
+ }
328
+ /**
329
+ * Check if branch name matches any protected pattern
330
+ */
331
+ isProtectedBranch(branch) {
332
+ return isProtectedPipelineBranch(branch);
333
+ }
334
+ /**
335
+ * Check if branch matches cleanup patterns
336
+ */
337
+ matchesCleanupPattern(branch, includeTestBranches) {
338
+ if (isPoeticOwnedBranch(branch)) {
339
+ return true;
340
+ }
341
+ for (const pattern of STRICT_POETIC_PATTERNS) {
342
+ if (pattern.test(branch)) {
343
+ return true;
344
+ }
345
+ }
346
+ if (includeTestBranches) {
347
+ for (const pattern of EXTENDED_TEST_PATTERNS) {
348
+ if (pattern.test(branch)) {
349
+ return true;
350
+ }
351
+ }
352
+ }
353
+ return false;
354
+ }
355
+ /**
356
+ * Get all local branches
357
+ */
358
+ async getAllBranches() {
359
+ const { stdout } = await execa2(
360
+ "git",
361
+ ["for-each-ref", "--format=%(refname:short)", "refs/heads/"],
362
+ { cwd: this.cwd, stdio: "pipe" }
363
+ );
364
+ return stdout.trim().split("\n").filter(Boolean);
365
+ }
366
+ /**
367
+ * Analyze branches for cleanup
368
+ * This is a read-only operation that returns what would be archived
369
+ */
370
+ async analyze(options = {}) {
371
+ const opts = {
372
+ includeBranches: options.includeBranches ?? false,
373
+ includeTestBranches: options.includeTestBranches ?? false,
374
+ dryRun: options.dryRun ?? true,
375
+ allowUnmerged: options.allowUnmerged ?? false,
376
+ confirm: options.confirm,
377
+ minAgeDays: options.minAgeDays ?? DEFAULT_BRANCH_CLEANUP_AGE_DAYS,
378
+ maxArchiveCount: options.maxArchiveCount ?? 100,
379
+ verbose: options.verbose ?? false
380
+ };
381
+ const result = {
382
+ mode: "dry-run",
383
+ // Analysis is always dry-run
384
+ defaultBranch: await this.getDefaultBranch(),
385
+ patternsUsed: opts.includeTestBranches ? "extended" : "strict",
386
+ scanned: 0,
387
+ archived: 0,
388
+ skipped: 0,
389
+ branches: [],
390
+ errors: [],
391
+ circuitBreakerTriggered: false
392
+ };
393
+ if (!opts.includeBranches) {
394
+ return result;
395
+ }
396
+ await this.refreshQueuedBranches();
397
+ const headResolution = await resolveCleanupCurrentBranch(this.cwd);
398
+ if (headResolution.state === "unknown") {
399
+ result.headInspectionError = true;
400
+ result.errors.push(CLEANUP_HEAD_INSPECTION_ERROR);
401
+ result.scanned = 0;
402
+ result.skipped = 0;
403
+ return result;
404
+ }
405
+ if (headResolution.state === "unborn") {
406
+ result.unbornRepository = true;
407
+ result.scanned = 0;
408
+ result.skipped = 0;
409
+ return result;
410
+ }
411
+ const branches = await this.getAllBranches();
412
+ const currentBranch = headResolution.state === "attached" ? headResolution.branch : "HEAD";
413
+ let worktreeBranches;
414
+ try {
415
+ worktreeBranches = await this.getWorktreeBranches();
416
+ } catch (error) {
417
+ result.errors.push(
418
+ `Failed to inspect git worktrees; skipping branch cleanup analysis: ${error instanceof Error ? error.message : String(error)}`
419
+ );
420
+ result.scanned = branches.length;
421
+ result.skipped = branches.length;
422
+ result.branches = branches.map((branch) => ({
423
+ name: branch,
424
+ action: "skip",
425
+ reason: "worktree inspection unavailable"
426
+ }));
427
+ return result;
428
+ }
429
+ const thresholdMs = opts.minAgeDays * 24 * 60 * 60 * 1e3;
430
+ result.scanned = branches.length;
431
+ if (currentBranch === "HEAD") {
432
+ result.errors.push("Detached HEAD detected; skipping branch cleanup analysis for safety.");
433
+ result.skipped = branches.length;
434
+ result.branches = branches.map((branch) => ({
435
+ name: branch,
436
+ action: "skip",
437
+ reason: "detached HEAD"
438
+ }));
439
+ return result;
440
+ }
441
+ for (const branch of branches) {
442
+ if (result.archived >= opts.maxArchiveCount) {
443
+ result.circuitBreakerTriggered = true;
444
+ result.branches.push({
445
+ name: branch,
446
+ action: "skip",
447
+ reason: "circuit breaker triggered"
448
+ });
449
+ result.skipped++;
450
+ continue;
451
+ }
452
+ const analysis = await this.analyzeBranch(
453
+ branch,
454
+ currentBranch,
455
+ worktreeBranches,
456
+ result.defaultBranch,
457
+ thresholdMs,
458
+ opts,
459
+ this.queuedBranches
460
+ );
461
+ result.branches.push(analysis);
462
+ if (analysis.action === "archive") {
463
+ result.archived++;
464
+ } else {
465
+ result.skipped++;
466
+ }
467
+ }
468
+ return result;
469
+ }
470
+ /**
471
+ * Analyze a single branch
472
+ */
473
+ async analyzeBranch(branch, currentBranch, worktreeBranches, defaultBranch, thresholdMs, opts, queuedBranches) {
474
+ if (this.isProtectedBranch(branch)) {
475
+ return { name: branch, action: "skip", reason: "protected branch" };
476
+ }
477
+ if (branch === currentBranch) {
478
+ return { name: branch, action: "skip", reason: "current HEAD" };
479
+ }
480
+ if (isValidationBranch(branch)) {
481
+ return { name: branch, action: "skip", reason: "validation branch" };
482
+ }
483
+ const worktreePath = worktreeBranches.get(branch);
484
+ const queuedEntry = queuedBranches.get(branch);
485
+ if (worktreePath) {
486
+ if (existsSync(worktreePath)) {
487
+ return {
488
+ name: branch,
489
+ action: "skip",
490
+ reason: `worktree: ${worktreePath}`,
491
+ details: { worktreePath }
492
+ };
493
+ }
494
+ if (!queuedEntry) {
495
+ return {
496
+ name: branch,
497
+ action: "skip",
498
+ reason: `worktree metadata present but missing on disk: ${worktreePath}`,
499
+ details: { worktreePath }
500
+ };
501
+ }
502
+ }
503
+ if (queuedEntry?.expectedHeadSha) {
504
+ const currentHeadSha = await this.getBranchHeadSha(branch);
505
+ if (!currentHeadSha) {
506
+ return {
507
+ name: branch,
508
+ action: "skip",
509
+ reason: "queued branch head unavailable",
510
+ details: { expectedHeadSha: queuedEntry.expectedHeadSha }
511
+ };
512
+ }
513
+ if (currentHeadSha !== queuedEntry.expectedHeadSha) {
514
+ return {
515
+ name: branch,
516
+ action: "skip",
517
+ reason: "queued branch head changed",
518
+ details: {
519
+ expectedHeadSha: queuedEntry.expectedHeadSha,
520
+ currentHeadSha
521
+ }
522
+ };
523
+ }
524
+ }
525
+ const remoteRef = await this.hasRemoteRef(branch);
526
+ if (remoteRef) {
527
+ return {
528
+ name: branch,
529
+ action: "skip",
530
+ reason: `has remote ref: ${remoteRef}`,
531
+ details: { remoteBranch: remoteRef }
532
+ };
533
+ }
534
+ const upstream = await this.hasUpstreamTracking(branch);
535
+ if (upstream) {
536
+ return {
537
+ name: branch,
538
+ action: "skip",
539
+ reason: `tracks upstream: ${upstream}`,
540
+ details: { remoteBranch: upstream }
541
+ };
542
+ }
543
+ if (!this.matchesCleanupPattern(branch, opts.includeTestBranches)) {
544
+ return { name: branch, action: "skip", reason: "no pattern match" };
545
+ }
546
+ const isMerged = await this.isMergedInto(branch, defaultBranch);
547
+ const aheadCount = await this.getAheadCount(branch, defaultBranch);
548
+ if (!isMerged || aheadCount > 0) {
549
+ if (!opts.allowUnmerged) {
550
+ return {
551
+ name: branch,
552
+ action: "skip",
553
+ reason: `${aheadCount} unmerged commits`,
554
+ details: { aheadCount }
555
+ };
556
+ }
557
+ }
558
+ const lastActivity = await this.getLastActivityTime(branch, thresholdMs);
559
+ const ageDays = Math.floor((Date.now() - lastActivity.getTime()) / (24 * 60 * 60 * 1e3));
560
+ const isQueued = Boolean(queuedEntry);
561
+ if (!isQueued && ageDays < opts.minAgeDays) {
562
+ return {
563
+ name: branch,
564
+ action: "skip",
565
+ reason: `active ${ageDays}d ago (threshold: ${opts.minAgeDays}d)`,
566
+ details: { ageDays, lastActivity }
567
+ };
568
+ }
569
+ return {
570
+ name: branch,
571
+ action: "archive",
572
+ reason: isQueued ? "queued worktree cleanup" : "matches criteria",
573
+ details: {
574
+ ageDays,
575
+ aheadCount,
576
+ lastActivity,
577
+ queuedForCleanup: isQueued,
578
+ expectedHeadSha: queuedEntry?.expectedHeadSha
579
+ }
580
+ };
581
+ }
582
+ /**
583
+ * Archive branches (move to poetic/archive/ namespace)
584
+ * Returns the actual result after execution
585
+ */
586
+ async archive(options = {}) {
587
+ const opts = {
588
+ includeBranches: options.includeBranches ?? false,
589
+ includeTestBranches: options.includeTestBranches ?? false,
590
+ dryRun: options.dryRun ?? true,
591
+ allowUnmerged: options.allowUnmerged ?? false,
592
+ confirm: options.confirm,
593
+ minAgeDays: options.minAgeDays ?? DEFAULT_BRANCH_CLEANUP_AGE_DAYS,
594
+ maxArchiveCount: options.maxArchiveCount ?? 100,
595
+ verbose: options.verbose ?? false
596
+ };
597
+ const analysis = await this.analyze(opts);
598
+ if (opts.dryRun) {
599
+ return analysis;
600
+ }
601
+ const archiveCount = analysis.branches.filter((b) => b.action === "archive").length;
602
+ if (opts.confirm !== archiveCount) {
603
+ analysis.errors.push(
604
+ `Confirmation mismatch: --confirm ${opts.confirm ?? "not provided"} but ${archiveCount} branches to archive. Use --confirm ${archiveCount} to proceed.`
605
+ );
606
+ return analysis;
607
+ }
608
+ analysis.mode = "executed";
609
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10).replace(/-/g, "");
610
+ const successfullyArchivedQueuedBranches = [];
611
+ for (const branch of analysis.branches) {
612
+ if (branch.action !== "archive") continue;
613
+ const archiveName = `poetic/archive/${timestamp}/${branch.name}`;
614
+ try {
615
+ await execa2("git", ["branch", "-m", "--", branch.name, archiveName], {
616
+ cwd: this.cwd,
617
+ stdio: "pipe"
618
+ });
619
+ branch.reason = `archived to ${archiveName}`;
620
+ if (this.queuedBranches.has(branch.name)) {
621
+ successfullyArchivedQueuedBranches.push(branch.name);
622
+ }
623
+ } catch (error) {
624
+ const msg = error instanceof Error ? error.message : String(error);
625
+ analysis.errors.push(`Failed to archive ${branch.name}: ${msg}`);
626
+ branch.action = "skip";
627
+ branch.reason = `archive failed: ${msg}`;
628
+ }
629
+ }
630
+ analysis.archived = analysis.branches.filter((b) => b.action === "archive").length;
631
+ analysis.skipped = analysis.branches.filter((b) => b.action === "skip").length;
632
+ if (!opts.dryRun && successfullyArchivedQueuedBranches.length > 0) {
633
+ try {
634
+ await removeBranchCleanupEntries(
635
+ successfullyArchivedQueuedBranches,
636
+ getBranchCleanupQueuePath(this.cwd)
637
+ );
638
+ } catch {
639
+ }
640
+ }
641
+ this.queuedBranches.clear();
642
+ return analysis;
643
+ }
644
+ // ============================================================================
645
+ // REMOTE BRANCH CLEANUP (Safety-first, off by default)
646
+ // ============================================================================
647
+ /**
648
+ * Get all remote branches matching poetic/* pattern
649
+ * SAFETY: Only returns poetic/* branches to prevent accidental deletion of human work
650
+ */
651
+ async getRemotePoeticBranches(remote = "origin") {
652
+ try {
653
+ const { stdout } = await execa2(
654
+ "git",
655
+ ["for-each-ref", "--format=%(refname:short)", `refs/remotes/${remote}/poetic/*`],
656
+ { cwd: this.cwd, stdio: "pipe" }
657
+ );
658
+ return stdout.trim().split("\n").filter(Boolean).map((ref) => ref.replace(`${remote}/`, ""));
659
+ } catch {
660
+ return [];
661
+ }
662
+ }
663
+ /**
664
+ * Check if a remote branch is merged into the default branch
665
+ */
666
+ async isRemoteBranchMerged(remote, branch, defaultBranch) {
667
+ try {
668
+ await execa2(
669
+ "git",
670
+ ["merge-base", "--is-ancestor", `${remote}/${branch}`, `${remote}/${defaultBranch}`],
671
+ { cwd: this.cwd, stdio: "pipe" }
672
+ );
673
+ return true;
674
+ } catch {
675
+ return false;
676
+ }
677
+ }
678
+ /**
679
+ * Get count of commits on remote branch ahead of default
680
+ */
681
+ async getRemoteAheadCount(remote, branch, defaultBranch) {
682
+ try {
683
+ const { stdout } = await execa2(
684
+ "git",
685
+ ["rev-list", "--count", `${remote}/${defaultBranch}..${remote}/${branch}`],
686
+ { cwd: this.cwd, stdio: "pipe" }
687
+ );
688
+ return parseInt(stdout.trim(), 10) || 0;
689
+ } catch {
690
+ return 0;
691
+ }
692
+ }
693
+ /**
694
+ * Get the currently analyzed local remote-tracking tip for a remote branch.
695
+ */
696
+ async getRemoteBranchTip(remote, branch) {
697
+ try {
698
+ const { stdout } = await execa2(
699
+ "git",
700
+ ["rev-parse", "--verify", `refs/remotes/${remote}/${branch}`],
701
+ { cwd: this.cwd, stdio: "pipe" }
702
+ );
703
+ const sha = stdout.trim();
704
+ return sha || null;
705
+ } catch {
706
+ return null;
707
+ }
708
+ }
709
+ /**
710
+ * Check if branch is the head of any open PR
711
+ * Returns the PR number if found, null otherwise
712
+ * SAFETY: Protects branches that are still referenced by open PRs
713
+ */
714
+ async getOpenPRForBranch(branch) {
715
+ try {
716
+ const result = await execa2(
717
+ "gh",
718
+ ["pr", "list", "--head", branch, "--state", "open", "--json", "number", "--limit", "1"],
719
+ { cwd: this.cwd, stdio: "pipe" }
720
+ );
721
+ const stdout = result.stdout || "";
722
+ const prs = JSON.parse(stdout.trim() || "[]");
723
+ return prs.length > 0 && prs[0] ? prs[0].number : null;
724
+ } catch {
725
+ return "unknown";
726
+ }
727
+ }
728
+ /**
729
+ * Analyze remote branches for cleanup
730
+ * SAFETY: Only analyzes poetic/* branches on the specified remote
731
+ */
732
+ async analyzeRemote(options = {}) {
733
+ const opts = {
734
+ remote: options.remote ?? "origin",
735
+ dryRun: options.dryRun ?? true,
736
+ requireMerged: options.requireMerged ?? true,
737
+ protectOpenPRs: options.protectOpenPRs ?? true,
738
+ confirm: options.confirm,
739
+ maxDeleteCount: options.maxDeleteCount ?? 50,
740
+ verbose: options.verbose ?? false
741
+ };
742
+ try {
743
+ await execa2("git", ["fetch", opts.remote, "--prune"], { cwd: this.cwd, stdio: "pipe" });
744
+ } catch (error) {
745
+ const msg = error instanceof Error ? error.message : String(error);
746
+ return {
747
+ mode: "dry-run",
748
+ remote: opts.remote,
749
+ defaultBranch: await this.getDefaultBranch(),
750
+ scanned: 0,
751
+ deleted: 0,
752
+ skipped: 0,
753
+ branches: [],
754
+ errors: [`Failed to fetch from ${opts.remote}: ${msg}`],
755
+ circuitBreakerTriggered: false
756
+ };
757
+ }
758
+ const result = {
759
+ mode: "dry-run",
760
+ remote: opts.remote,
761
+ defaultBranch: await this.getDefaultBranchForRemote(opts.remote),
762
+ scanned: 0,
763
+ deleted: 0,
764
+ skipped: 0,
765
+ branches: [],
766
+ errors: [],
767
+ circuitBreakerTriggered: false
768
+ };
769
+ const remoteBranches = await this.getRemotePoeticBranches(opts.remote);
770
+ result.scanned = remoteBranches.length;
771
+ for (const branch of remoteBranches) {
772
+ if (result.deleted >= opts.maxDeleteCount) {
773
+ result.circuitBreakerTriggered = true;
774
+ result.branches.push({
775
+ name: branch,
776
+ fullRef: `${opts.remote}/${branch}`,
777
+ action: "skip",
778
+ reason: "circuit breaker triggered"
779
+ });
780
+ result.skipped++;
781
+ continue;
782
+ }
783
+ const analysis = await this.analyzeRemoteBranch(
784
+ opts.remote,
785
+ branch,
786
+ result.defaultBranch,
787
+ opts
788
+ );
789
+ result.branches.push(analysis);
790
+ if (analysis.action === "delete") {
791
+ result.deleted++;
792
+ } else {
793
+ result.skipped++;
794
+ }
795
+ }
796
+ return result;
797
+ }
798
+ /**
799
+ * Analyze a single remote branch
800
+ */
801
+ async analyzeRemoteBranch(remote, branch, defaultBranch, opts) {
802
+ const fullRef = `${remote}/${branch}`;
803
+ if (branch.startsWith("poetic/archive/")) {
804
+ return {
805
+ name: branch,
806
+ fullRef,
807
+ action: "skip",
808
+ reason: "archive branch (use prune-archives)"
809
+ };
810
+ }
811
+ if (branch.startsWith("poetic/preflight/")) {
812
+ return {
813
+ name: branch,
814
+ fullRef,
815
+ action: "skip",
816
+ reason: "preflight branch"
817
+ };
818
+ }
819
+ if (!isEphemeralPoeticBranchDeletionCandidate(branch)) {
820
+ const reason = branch.startsWith("poetic/flywheel/") || branch.startsWith("poetic/flywheel-test/") ? "flywheel branch (not ephemeral)" : "not a recognized ephemeral poetic branch";
821
+ return {
822
+ name: branch,
823
+ fullRef,
824
+ action: "skip",
825
+ reason
826
+ };
827
+ }
828
+ const isMerged = await this.isRemoteBranchMerged(remote, branch, defaultBranch);
829
+ const aheadCount = await this.getRemoteAheadCount(remote, branch, defaultBranch);
830
+ if (opts.requireMerged && !isMerged) {
831
+ return {
832
+ name: branch,
833
+ fullRef,
834
+ action: "skip",
835
+ reason: `not merged (${aheadCount} commits ahead)`,
836
+ details: { isMerged, aheadCount }
837
+ };
838
+ }
839
+ if (opts.protectOpenPRs) {
840
+ const openPRNumber = await this.getOpenPRForBranch(branch);
841
+ if (openPRNumber === "unknown") {
842
+ return {
843
+ name: branch,
844
+ fullRef,
845
+ action: "skip",
846
+ reason: "open PR status unknown",
847
+ details: { isMerged, aheadCount }
848
+ };
849
+ }
850
+ if (openPRNumber !== null) {
851
+ return {
852
+ name: branch,
853
+ fullRef,
854
+ action: "skip",
855
+ reason: `open PR #${openPRNumber}`,
856
+ details: { isMerged, aheadCount, openPRNumber }
857
+ };
858
+ }
859
+ }
860
+ const expectedRemoteSha = await this.getRemoteBranchTip(remote, branch);
861
+ if (!expectedRemoteSha) {
862
+ return {
863
+ name: branch,
864
+ fullRef,
865
+ action: "skip",
866
+ reason: "remote tip unknown",
867
+ details: { isMerged, aheadCount }
868
+ };
869
+ }
870
+ return {
871
+ name: branch,
872
+ fullRef,
873
+ action: "delete",
874
+ reason: isMerged ? "merged into default" : "force delete (unmerged)",
875
+ details: { isMerged, aheadCount, expectedRemoteSha }
876
+ };
877
+ }
878
+ /**
879
+ * Delete remote branches
880
+ * SAFETY: Only deletes poetic/* branches that pass all checks
881
+ */
882
+ async deleteRemote(options = {}) {
883
+ const opts = {
884
+ remote: options.remote ?? "origin",
885
+ dryRun: options.dryRun ?? true,
886
+ requireMerged: options.requireMerged ?? true,
887
+ protectOpenPRs: options.protectOpenPRs ?? true,
888
+ confirm: options.confirm,
889
+ maxDeleteCount: options.maxDeleteCount ?? 50,
890
+ verbose: options.verbose ?? false
891
+ };
892
+ const analysis = await this.analyzeRemote(opts);
893
+ if (opts.dryRun) {
894
+ return analysis;
895
+ }
896
+ const deleteCount = analysis.branches.filter((b) => b.action === "delete").length;
897
+ if (opts.confirm !== deleteCount) {
898
+ analysis.errors.push(
899
+ `Confirmation mismatch: --confirm ${opts.confirm ?? "not provided"} but ${deleteCount} branches to delete. Use --confirm ${deleteCount} to proceed.`
900
+ );
901
+ return analysis;
902
+ }
903
+ analysis.mode = "executed";
904
+ for (const branch of analysis.branches) {
905
+ if (branch.action !== "delete") continue;
906
+ try {
907
+ const expectedRemoteSha = branch.details?.expectedRemoteSha;
908
+ if (!expectedRemoteSha) {
909
+ throw new Error("missing expected remote tip");
910
+ }
911
+ await execa2(
912
+ "git",
913
+ [
914
+ "push",
915
+ opts.remote,
916
+ `--force-with-lease=refs/heads/${branch.name}:${expectedRemoteSha}`,
917
+ `:refs/heads/${branch.name}`
918
+ ],
919
+ {
920
+ cwd: this.cwd,
921
+ stdio: "pipe"
922
+ }
923
+ );
924
+ branch.reason = `deleted from ${opts.remote}`;
925
+ } catch (error) {
926
+ const msg = error instanceof Error ? error.message : String(error);
927
+ analysis.errors.push(`Failed to delete ${branch.fullRef}: ${msg}`);
928
+ branch.action = "skip";
929
+ branch.reason = `delete failed: ${msg}`;
930
+ }
931
+ }
932
+ analysis.deleted = analysis.branches.filter((b) => b.action === "delete").length;
933
+ analysis.skipped = analysis.branches.filter((b) => b.action === "skip").length;
934
+ return analysis;
935
+ }
936
+ };
937
+ function createBranchCleanupManager(cwd = process.cwd()) {
938
+ return new BranchCleanupManager(cwd);
939
+ }
940
+
941
+ export {
942
+ CLEANUP_UNBORN_REPOSITORY_INFO,
943
+ CLEANUP_HEAD_INSPECTION_ERROR,
944
+ DEFAULT_BRANCH_CLEANUP_AGE_DAYS,
945
+ BranchCleanupManager,
946
+ createBranchCleanupManager
947
+ };
948
+ //# sourceMappingURL=chunk-7IL4A2PP.js.map