@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,775 @@
1
+ /**
2
+ * Isolated sprint-composition service (BPAU-03).
3
+ *
4
+ * BPAU-07A owns executable resolution, live RPC registration, and rendering.
5
+ * This module accepts only an injected runner and always sends one fixed argv
6
+ * with a false shell flag: callers cannot supply argv, env, cwd, paths, URLs, or
7
+ * an executable, and no caller-controlled `--json`, `--force`, `--no-sync`,
8
+ * `--dry-run`, `--split`, `--splitter`, `--provider`, `--model`, or `--hint`
9
+ * token can reach the child process.
10
+ *
11
+ * Authority order is fixed for every mutation: the BPAU-00B structured outcome
12
+ * outranks the fresh canonical reread, which outranks the exit code. An exit code
13
+ * is evidence of what Poetic reported, never evidence of what changed. Nothing is
14
+ * retried (`attempts: 1`). Poetic's managed sync stays on, so
15
+ * `remoteSyncConfirmedByExitCode` is a literal false.
16
+ */
17
+
18
+ import type { z } from 'zod';
19
+ import { parsePlanningWorkspaceV1 } from './planning-readback.js';
20
+ import type { PlanningWorkspaceProjection } from './planning-service.js';
21
+ import { mapPlanningWorkspace } from './planning-service.js';
22
+ import { repositorySchema } from './repository-schema.js';
23
+ import {
24
+ decideAddSprintWorkEffect,
25
+ decideCreateSprintEffect,
26
+ decideMigrateSprintTaskEffect,
27
+ decideRemoveSprintTaskEffect,
28
+ decideRenameSprintEffect,
29
+ membershipDrifted,
30
+ ProcessLocalSprintCompositionAdmission,
31
+ SPRINT_COMPOSITION_DISCLOSURE,
32
+ SPRINT_COMPOSITION_MAX_OUTPUT_BYTES,
33
+ SPRINT_COMPOSITION_MUTATION_TIMEOUT_MS,
34
+ SPRINT_COMPOSITION_READ_TIMEOUT_MS,
35
+ type SprintCompositionEffectDecision,
36
+ type SprintCompositionInvocationFacts,
37
+ sprintCompositionAdmissionIdentity,
38
+ sprintCompositionArgv,
39
+ sprintCompositionRequestedIdentities,
40
+ sprintCompositionSyncEvidence,
41
+ sprintCompositionSyncWarnings,
42
+ truncateDiagnostics,
43
+ } from './sprint-composition-model.js';
44
+ import {
45
+ parseBacklogIdentity,
46
+ parseSprintAddTaskIdentity,
47
+ parseSprintCompositionJson,
48
+ parseSprintCreateIdentity,
49
+ parseSprintList,
50
+ parseSprintStatus,
51
+ parseTaskDetailEnvelope,
52
+ type SprintMembershipState,
53
+ sprintIntegrityNotes,
54
+ sprintMembershipIds,
55
+ sprintMembershipState,
56
+ } from './sprint-composition-readback.js';
57
+ import {
58
+ type ApplySprintCompositionInput,
59
+ type ApplySprintCompositionOutput,
60
+ applySprintCompositionInputSchema,
61
+ type GetSprintOutput,
62
+ getSprintInputSchema,
63
+ type ListSprintsOutput,
64
+ listSprintsInputSchema,
65
+ SPRINT_COMPOSITION_OUTCOME_VERSION,
66
+ type SprintCompositionEvidence,
67
+ type SprintCompositionIdentityOutcome,
68
+ type SprintCompositionRereads,
69
+ type SprintListEnvelope,
70
+ type SprintStatusEnvelope,
71
+ } from './sprint-composition-schema.js';
72
+ import type { GetTaskDetailOutput } from './task-detail-schema.js';
73
+
74
+ type Repository = z.infer<typeof repositorySchema>;
75
+
76
+ export interface SprintCompositionCommand {
77
+ file: 'poetic';
78
+ args: readonly string[];
79
+ cwd: string;
80
+ timeoutMs:
81
+ | typeof SPRINT_COMPOSITION_READ_TIMEOUT_MS
82
+ | typeof SPRINT_COMPOSITION_MUTATION_TIMEOUT_MS;
83
+ shell: false;
84
+ }
85
+
86
+ export interface SprintCompositionCommandResult {
87
+ stdout: string;
88
+ stderr: string;
89
+ exitCode: number;
90
+ }
91
+
92
+ export type SprintCompositionRunner = (
93
+ command: SprintCompositionCommand
94
+ ) => Promise<SprintCompositionCommandResult>;
95
+
96
+ /**
97
+ * A request that cannot become an outcome: it names no accepted action, so there
98
+ * is nothing to report an effect phase about. Thrown before any spawn exists.
99
+ */
100
+ export class SprintCompositionRequestError extends Error {
101
+ constructor(message: string) {
102
+ super(message);
103
+ this.name = 'SprintCompositionRequestError';
104
+ }
105
+ }
106
+
107
+ function unavailable<T>(reason: string): SprintCompositionEvidence<T> {
108
+ return { state: 'unavailable', reason };
109
+ }
110
+
111
+ function timedOutError(error: unknown): boolean {
112
+ if (!error || typeof error !== 'object') return false;
113
+ const value = error as { code?: unknown; name?: unknown; timedOut?: unknown };
114
+ return value.timedOut === true || value.code === 'ETIMEDOUT' || value.name === 'TimeoutError';
115
+ }
116
+
117
+ /** Cap captured output per invocation before anything parses or reports it. */
118
+ function capOutput(value: string): string {
119
+ if (Buffer.byteLength(value, 'utf8') <= SPRINT_COMPOSITION_MAX_OUTPUT_BYTES) return value;
120
+ return Buffer.from(value, 'utf8')
121
+ .subarray(0, SPRINT_COMPOSITION_MAX_OUTPUT_BYTES)
122
+ .toString('utf8');
123
+ }
124
+
125
+ function membershipOf(
126
+ sprint: SprintCompositionEvidence<SprintStatusEnvelope>,
127
+ taskId: string
128
+ ): SprintMembershipState | null {
129
+ return sprint.state === 'available' ? sprintMembershipState(sprint.value, taskId) : null;
130
+ }
131
+
132
+ function notesOf(sprint: SprintCompositionEvidence<SprintStatusEnvelope>): string[] {
133
+ return sprint.state === 'available' ? sprintIntegrityNotes(sprint.value) : [];
134
+ }
135
+
136
+ export class SprintCompositionService {
137
+ constructor(
138
+ private readonly run: SprintCompositionRunner,
139
+ private readonly admission = new ProcessLocalSprintCompositionAdmission()
140
+ ) {}
141
+
142
+ /**
143
+ * Read-only multi-sprint enumeration. Current and archived sprint identities
144
+ * come from Poetic's own list payload; nothing is merged, re-sorted, or
145
+ * recomputed here.
146
+ */
147
+ async listSprints(repositoryValue: unknown, inputValue: unknown): Promise<ListSprintsOutput> {
148
+ const repository = repositorySchema.parse(repositoryValue);
149
+ const input = listSprintsInputSchema.safeParse(inputValue);
150
+ if (!input.success) {
151
+ throw new SprintCompositionRequestError('Invalid sprint list request.');
152
+ }
153
+ const scope = input.data.scope ?? 'all';
154
+ if (!this.identifiesRepository(repository, input.data)) {
155
+ return {
156
+ repository,
157
+ scope,
158
+ sprints: unavailable('The request does not identify the selected repository.'),
159
+ };
160
+ }
161
+ const args = ['plan', 'sprint', 'list'];
162
+ if (scope === 'current') args.push('--current');
163
+ if (scope === 'archived') args.push('--archived');
164
+ args.push('--json');
165
+
166
+ const json = await this.read(repository, args);
167
+ if (json.state !== 'available') return { repository, scope, sprints: json };
168
+ const parsed = parseSprintList(json.value);
169
+ if (parsed.state === 'available' && parsed.value.scope !== scope) {
170
+ return {
171
+ repository,
172
+ scope,
173
+ sprints: unavailable('Poetic returned a sprint list for a different scope.'),
174
+ };
175
+ }
176
+ return { repository, scope, sprints: parsed };
177
+ }
178
+
179
+ /**
180
+ * Read-only single-sprint projection, always with an explicit sprint id.
181
+ * Membership, capacity, readiness, and integrity are carried verbatim; there is
182
+ * no capacity command here because `sprint capacity` has no `--json` and
183
+ * parsing human output is forbidden.
184
+ */
185
+ async getSprint(repositoryValue: unknown, inputValue: unknown): Promise<GetSprintOutput> {
186
+ const repository = repositorySchema.parse(repositoryValue);
187
+ const input = getSprintInputSchema.safeParse(inputValue);
188
+ if (!input.success) {
189
+ throw new SprintCompositionRequestError('Invalid sprint status request.');
190
+ }
191
+ if (!this.identifiesRepository(repository, input.data)) {
192
+ return {
193
+ repository,
194
+ sprintId: input.data.sprintId,
195
+ sprint: unavailable('The request does not identify the selected repository.'),
196
+ integrityNotes: [],
197
+ };
198
+ }
199
+ const sprint = await this.readSprintStatus(repository, input.data.sprintId);
200
+ return {
201
+ repository,
202
+ sprintId: input.data.sprintId,
203
+ sprint,
204
+ integrityNotes: notesOf(sprint),
205
+ };
206
+ }
207
+
208
+ /**
209
+ * Run one sprint-composition mutation exactly once and report the authoritative
210
+ * outcome. Every terminal path releases process-local admission, including
211
+ * refusal and reread failure.
212
+ */
213
+ async apply(
214
+ repositoryValue: unknown,
215
+ requestValue: unknown
216
+ ): Promise<ApplySprintCompositionOutput> {
217
+ const repository = repositorySchema.parse(repositoryValue);
218
+ const parsedRequest = applySprintCompositionInputSchema.safeParse(requestValue);
219
+ if (!parsedRequest.success) {
220
+ throw new SprintCompositionRequestError(
221
+ 'Invalid sprint composition request: only the closed sprint-composition vocabulary and its declared fields are accepted.'
222
+ );
223
+ }
224
+ const request = parsedRequest.data;
225
+
226
+ const targetRefusal = this.repositoryRefusal(repository, request);
227
+ if (targetRefusal !== null) {
228
+ return this.refusedBeforeLaunch(repository, request, targetRefusal);
229
+ }
230
+
231
+ let release: () => void;
232
+ try {
233
+ release = this.admission.claim({
234
+ repositoryPath: repository.path,
235
+ identity: sprintCompositionAdmissionIdentity(request),
236
+ family: 'sprint-composition',
237
+ });
238
+ } catch (error) {
239
+ return this.refusedBeforeLaunch(
240
+ repository,
241
+ request,
242
+ error instanceof Error ? error.message : String(error)
243
+ );
244
+ }
245
+
246
+ try {
247
+ const admission = await this.admissionEvidence(repository, request);
248
+ if (admission.refusal !== null) {
249
+ return this.refusedBeforeLaunch(repository, request, admission.refusal);
250
+ }
251
+ return await this.launchAndReread(repository, request);
252
+ } finally {
253
+ release();
254
+ }
255
+ }
256
+
257
+ private identifiesRepository(
258
+ repository: Repository,
259
+ input: { projectId: string; sourceId: string }
260
+ ): boolean {
261
+ return input.projectId === repository.projectId && input.sourceId === repository.sourceId;
262
+ }
263
+
264
+ /**
265
+ * Fresh repository and branch gate, re-checked immediately before spawn so a
266
+ * moved checkout or a switched branch is refused rather than mutated blind.
267
+ */
268
+ private repositoryRefusal(
269
+ repository: Repository,
270
+ request: ApplySprintCompositionInput
271
+ ): string | null {
272
+ if (!this.identifiesRepository(repository, request)) {
273
+ return 'The request does not identify the selected repository.';
274
+ }
275
+ if (request.expected.repositoryPath !== repository.path) {
276
+ return 'The selected repository path changed since this request was built, so no command ran.';
277
+ }
278
+ if (request.expected.branch !== repository.branch) {
279
+ return 'The selected branch changed since this request was built, so no command ran.';
280
+ }
281
+ if (repository.state === 'blocked') {
282
+ return 'Poetic reports the selected repository as blocked, so no command ran.';
283
+ }
284
+ if (repository.branchState !== 'ready') {
285
+ return `Poetic reports the selected branch as ${repository.branchState}, so no command ran.`;
286
+ }
287
+ return null;
288
+ }
289
+
290
+ /**
291
+ * Revalidate entity identity against fresh canonical evidence before spawning.
292
+ *
293
+ * For migrate this is the load-bearing admission gate: `migrateToNextSprint`
294
+ * does not enforce non-terminal status and would reset a done task to todo, so
295
+ * BB admits the migration only when a fresh task read shows a live,
296
+ * non-archived task whose status is neither done nor cancelled and whose
297
+ * membership in the declared source sprint is confirmed.
298
+ */
299
+ private async admissionEvidence(
300
+ repository: Repository,
301
+ request: ApplySprintCompositionInput
302
+ ): Promise<{ refusal: string | null }> {
303
+ switch (request.action) {
304
+ case 'createSprint':
305
+ return { refusal: null };
306
+ case 'renameSprint':
307
+ case 'addSprintWorkFromBacklog': {
308
+ const sprint = await this.readSprintStatus(repository, request.input.sprintId);
309
+ if (sprint.state !== 'available') {
310
+ return {
311
+ refusal: `Poetic could not describe sprint ${request.input.sprintId}, so no command ran: ${sprint.reason}`,
312
+ };
313
+ }
314
+ if (sprint.value.status === 'completed' || sprint.value.archived) {
315
+ return {
316
+ refusal: `Poetic reports sprint ${request.input.sprintId} as ${sprint.value.archived ? 'archived' : 'completed'} and read-only, so no command ran.`,
317
+ };
318
+ }
319
+ return { refusal: null };
320
+ }
321
+ case 'removeSprintTask': {
322
+ const sprint = await this.readSprintStatus(repository, request.input.sprintId);
323
+ if (sprint.state !== 'available') {
324
+ return {
325
+ refusal: `Poetic could not describe sprint ${request.input.sprintId}, so no command ran: ${sprint.reason}`,
326
+ };
327
+ }
328
+ if (sprint.value.status === 'completed' || sprint.value.archived) {
329
+ return {
330
+ refusal: `Poetic reports sprint ${request.input.sprintId} as ${sprint.value.archived ? 'archived' : 'completed'} and read-only, so no command ran.`,
331
+ };
332
+ }
333
+ const membership = sprintMembershipState(sprint.value, request.input.taskId);
334
+ if (membership !== 'present') {
335
+ return {
336
+ refusal:
337
+ membership === 'missing-reference'
338
+ ? `Sprint ${request.input.sprintId} references task ${request.input.taskId} as a task id with no resolvable task file, so no command ran.`
339
+ : `Poetic does not list task ${request.input.taskId} as a member of sprint ${request.input.sprintId}, so no command ran.`,
340
+ };
341
+ }
342
+ if (
343
+ membershipDrifted(request.expected.observedMembership, sprintMembershipIds(sprint.value))
344
+ ) {
345
+ return {
346
+ refusal: `Sprint ${request.input.sprintId} membership changed since this request was built, so no command ran.`,
347
+ };
348
+ }
349
+ return { refusal: null };
350
+ }
351
+ case 'migrateSprintTask': {
352
+ const [task, source, target] = await Promise.all([
353
+ this.readTaskDetail(repository, request.input.taskId),
354
+ this.readSprintStatus(repository, request.input.sourceSprintId),
355
+ this.readSprintStatus(repository, request.input.targetSprintId),
356
+ ]);
357
+ if (task.task.state !== 'available') {
358
+ return {
359
+ refusal:
360
+ task.task.state === 'missing'
361
+ ? `Poetic reports no managed task ${request.input.taskId}, so no command ran.`
362
+ : `Poetic could not describe task ${request.input.taskId}, so no command ran.`,
363
+ };
364
+ }
365
+ const facts = task.task.value;
366
+ if (facts.location === 'archive' || facts.archived !== null) {
367
+ return {
368
+ refusal: `Poetic reports task ${request.input.taskId} as archived, so no command ran.`,
369
+ };
370
+ }
371
+ if (facts.status === 'done' || facts.status === 'cancelled') {
372
+ return {
373
+ refusal: `Poetic reports task ${request.input.taskId} as ${facts.status}. Migration would reset it to todo, so no command ran.`,
374
+ };
375
+ }
376
+ if (source.state !== 'available') {
377
+ return {
378
+ refusal: `Poetic could not describe source sprint ${request.input.sourceSprintId}, so no command ran: ${source.reason}`,
379
+ };
380
+ }
381
+ if (target.state !== 'available') {
382
+ return {
383
+ refusal: `Poetic could not describe target sprint ${request.input.targetSprintId}, so no command ran: ${target.reason}`,
384
+ };
385
+ }
386
+ if (target.value.status === 'completed' || target.value.archived) {
387
+ return {
388
+ refusal: `Poetic reports target sprint ${request.input.targetSprintId} as ${target.value.archived ? 'archived' : 'completed'} and read-only, so no command ran.`,
389
+ };
390
+ }
391
+ if (sprintMembershipState(source.value, request.input.taskId) !== 'present') {
392
+ return {
393
+ refusal: `Poetic does not list task ${request.input.taskId} as a member of the declared source sprint ${request.input.sourceSprintId}, so no command ran.`,
394
+ };
395
+ }
396
+ if (
397
+ membershipDrifted(request.expected.observedMembership, sprintMembershipIds(source.value))
398
+ ) {
399
+ return {
400
+ refusal: `Source sprint ${request.input.sourceSprintId} membership changed since this request was built, so no command ran.`,
401
+ };
402
+ }
403
+ return { refusal: null };
404
+ }
405
+ }
406
+ }
407
+
408
+ /** Spawn the fixed argv once, then perform the action's authoritative rereads. */
409
+ private async launchAndReread(
410
+ repository: Repository,
411
+ request: ApplySprintCompositionInput
412
+ ): Promise<ApplySprintCompositionOutput> {
413
+ const argv = sprintCompositionArgv(request);
414
+ let stdout = '';
415
+ let diagnostics: string | null = null;
416
+ let exitCode: number | null = null;
417
+ let timedOut = false;
418
+ try {
419
+ const result = await this.run({
420
+ file: 'poetic',
421
+ args: argv,
422
+ cwd: repository.path,
423
+ timeoutMs: SPRINT_COMPOSITION_MUTATION_TIMEOUT_MS,
424
+ shell: false,
425
+ });
426
+ stdout = capOutput(result.stdout);
427
+ diagnostics = truncateDiagnostics(capOutput(result.stderr));
428
+ exitCode = result.exitCode;
429
+ } catch (error) {
430
+ timedOut = timedOutError(error);
431
+ diagnostics = truncateDiagnostics(error instanceof Error ? error.message : String(error));
432
+ }
433
+ const facts: SprintCompositionInvocationFacts = { timedOut, exitCode };
434
+
435
+ const { identityOutcome, ambiguous, identityNotes } = this.identityEvidence(
436
+ request,
437
+ stdout,
438
+ facts
439
+ );
440
+ const { rereads, decision } = await this.rereadAndDecide(
441
+ repository,
442
+ request,
443
+ facts,
444
+ identityOutcome
445
+ );
446
+
447
+ const workspace = await this.readWorkspace(repository);
448
+ const commandState = timedOut
449
+ ? 'timed_out'
450
+ : ambiguous
451
+ ? 'ambiguous'
452
+ : exitCode === 0
453
+ ? 'succeeded'
454
+ : 'failed';
455
+
456
+ return {
457
+ outcomeVersion: SPRINT_COMPOSITION_OUTCOME_VERSION,
458
+ repository,
459
+ disclosure: SPRINT_COMPOSITION_DISCLOSURE,
460
+ action: request.action,
461
+ requestedIdentities: sprintCompositionRequestedIdentities(request),
462
+ command: {
463
+ state: commandState,
464
+ attempts: 1,
465
+ argv,
466
+ exitCode,
467
+ diagnostics,
468
+ remoteSyncConfirmedByExitCode: false,
469
+ },
470
+ identityOutcome,
471
+ effect: {
472
+ phase: decision.phase,
473
+ createdIdentities: decision.createdIdentities,
474
+ affectedIdentities: decision.affectedIdentities,
475
+ },
476
+ sync: sprintCompositionSyncEvidence(true, workspace),
477
+ syncWarnings: sprintCompositionSyncWarnings(workspace),
478
+ integrityNotes: [
479
+ ...new Set([...identityNotes, ...decision.integrityNotes, ...this.rereadNotes(rereads)]),
480
+ ],
481
+ canonicalRereads: rereads,
482
+ workspace,
483
+ };
484
+ }
485
+
486
+ /**
487
+ * Validate the BPAU-00B identity envelope for the two minting actions.
488
+ *
489
+ * A missing, malformed, or internally inconsistent envelope is refused and the
490
+ * invocation is reported as `ambiguous`: the newest list row is never
491
+ * substituted for a returned id.
492
+ */
493
+ private identityEvidence(
494
+ request: ApplySprintCompositionInput,
495
+ stdout: string,
496
+ facts: SprintCompositionInvocationFacts
497
+ ): {
498
+ identityOutcome: SprintCompositionIdentityOutcome;
499
+ ambiguous: boolean;
500
+ identityNotes: string[];
501
+ } {
502
+ if (request.action !== 'createSprint' && request.action !== 'addSprintWorkFromBacklog') {
503
+ return { identityOutcome: null, ambiguous: false, identityNotes: [] };
504
+ }
505
+ if (facts.timedOut) {
506
+ return {
507
+ identityOutcome: null,
508
+ ambiguous: false,
509
+ identityNotes: ['Poetic produced no identity evidence before the timeout.'],
510
+ };
511
+ }
512
+ const json = parseSprintCompositionJson(stdout);
513
+ if (json.state !== 'available') {
514
+ return { identityOutcome: null, ambiguous: true, identityNotes: [json.reason] };
515
+ }
516
+ if (request.action === 'createSprint') {
517
+ const identity = parseSprintCreateIdentity(json.value, {
518
+ name: request.input.name,
519
+ start: request.input.start,
520
+ end: request.input.end,
521
+ });
522
+ return identity.state === 'available'
523
+ ? {
524
+ identityOutcome: { kind: 'sprintCreateV1', value: identity.value },
525
+ ambiguous: false,
526
+ identityNotes: [],
527
+ }
528
+ : { identityOutcome: null, ambiguous: true, identityNotes: [identity.reason] };
529
+ }
530
+ const identity = parseSprintAddTaskIdentity(json.value, {
531
+ sprintId: request.input.sprintId,
532
+ backlogItemId: request.input.backlogItemId,
533
+ });
534
+ return identity.state === 'available'
535
+ ? {
536
+ identityOutcome: { kind: 'sprintAddTaskV1', value: identity.value },
537
+ ambiguous: false,
538
+ identityNotes: [],
539
+ }
540
+ : { identityOutcome: null, ambiguous: true, identityNotes: [identity.reason] };
541
+ }
542
+
543
+ /** Perform the action's frozen reread set, then decide the effect phase. */
544
+ private async rereadAndDecide(
545
+ repository: Repository,
546
+ request: ApplySprintCompositionInput,
547
+ facts: SprintCompositionInvocationFacts,
548
+ identityOutcome: SprintCompositionIdentityOutcome
549
+ ): Promise<{ rereads: SprintCompositionRereads; decision: SprintCompositionEffectDecision }> {
550
+ switch (request.action) {
551
+ case 'createSprint': {
552
+ const created =
553
+ identityOutcome?.kind === 'sprintCreateV1' ? identityOutcome.value.sprintId : null;
554
+ const sprints = await this.readSprintList(repository);
555
+ const sprint =
556
+ created === null ? undefined : await this.readSprintStatus(repository, created);
557
+ return {
558
+ rereads: sprint === undefined ? { sprints } : { sprints, sprint },
559
+ decision: decideCreateSprintEffect(
560
+ identityOutcome?.kind === 'sprintCreateV1' ? identityOutcome.value : null,
561
+ facts
562
+ ),
563
+ };
564
+ }
565
+ case 'renameSprint': {
566
+ const [sprints, sprint] = await Promise.all([
567
+ this.readSprintList(repository),
568
+ this.readSprintStatus(repository, request.input.sprintId),
569
+ ]);
570
+ const renamed =
571
+ sprint.state === 'available' ? sprint.value.name === request.input.name : null;
572
+ return {
573
+ rereads: { sprints, sprint },
574
+ decision: decideRenameSprintEffect(request.input.sprintId, facts, renamed),
575
+ };
576
+ }
577
+ case 'addSprintWorkFromBacklog': {
578
+ const identity = identityOutcome?.kind === 'sprintAddTaskV1' ? identityOutcome.value : null;
579
+ const [sprint, backlogItem] = await Promise.all([
580
+ this.readSprintStatus(repository, request.input.sprintId),
581
+ this.readBacklogItem(repository, request.input.backlogItemId),
582
+ ]);
583
+ const newTaskId = identity?.taskId ?? null;
584
+ const task =
585
+ newTaskId === null ? undefined : await this.readTaskEvidence(repository, newTaskId);
586
+ const membership = newTaskId === null ? null : membershipOf(sprint, newTaskId);
587
+ return {
588
+ rereads: task === undefined ? { sprint, backlogItem } : { sprint, task, backlogItem },
589
+ decision: decideAddSprintWorkEffect(identity, facts, membership),
590
+ };
591
+ }
592
+ case 'removeSprintTask': {
593
+ const [sprint, task] = await Promise.all([
594
+ this.readSprintStatus(repository, request.input.sprintId),
595
+ this.readTaskEvidence(repository, request.input.taskId),
596
+ ]);
597
+ return {
598
+ rereads: { sprint, task },
599
+ decision: decideRemoveSprintTaskEffect(
600
+ request.input.sprintId,
601
+ request.input.taskId,
602
+ facts,
603
+ membershipOf(sprint, request.input.taskId)
604
+ ),
605
+ };
606
+ }
607
+ case 'migrateSprintTask': {
608
+ const [sourceSprint, targetSprint, task] = await Promise.all([
609
+ this.readSprintStatus(repository, request.input.sourceSprintId),
610
+ this.readSprintStatus(repository, request.input.targetSprintId),
611
+ this.readTaskEvidence(repository, request.input.taskId),
612
+ ]);
613
+ return {
614
+ rereads: { sourceSprint, targetSprint, task },
615
+ decision: decideMigrateSprintTaskEffect(
616
+ {
617
+ taskId: request.input.taskId,
618
+ sourceSprintId: request.input.sourceSprintId,
619
+ targetSprintId: request.input.targetSprintId,
620
+ },
621
+ facts,
622
+ {
623
+ source: membershipOf(sourceSprint, request.input.taskId),
624
+ target: membershipOf(targetSprint, request.input.taskId),
625
+ }
626
+ ),
627
+ };
628
+ }
629
+ }
630
+ }
631
+
632
+ /** Poetic-reported integrity notes from whichever sprints this action reread. */
633
+ private rereadNotes(rereads: SprintCompositionRereads): string[] {
634
+ const notes: string[] = [];
635
+ for (const sprint of [rereads.sprint, rereads.sourceSprint, rereads.targetSprint]) {
636
+ if (sprint !== undefined) notes.push(...notesOf(sprint));
637
+ }
638
+ return notes;
639
+ }
640
+
641
+ private refusedBeforeLaunch(
642
+ repository: Repository,
643
+ request: ApplySprintCompositionInput,
644
+ reason: string
645
+ ): ApplySprintCompositionOutput {
646
+ const workspace = unavailable<PlanningWorkspaceProjection>(
647
+ 'No Poetic command ran, so BB did not reread the planning workspace.'
648
+ );
649
+ return {
650
+ outcomeVersion: SPRINT_COMPOSITION_OUTCOME_VERSION,
651
+ repository,
652
+ disclosure: SPRINT_COMPOSITION_DISCLOSURE,
653
+ action: request.action,
654
+ requestedIdentities: sprintCompositionRequestedIdentities(request),
655
+ command: {
656
+ state: 'failed',
657
+ attempts: 1,
658
+ argv: [],
659
+ exitCode: null,
660
+ diagnostics: reason,
661
+ remoteSyncConfirmedByExitCode: false,
662
+ },
663
+ identityOutcome: null,
664
+ effect: { phase: 'refused-before-launch', createdIdentities: [], affectedIdentities: [] },
665
+ sync: sprintCompositionSyncEvidence(false, workspace),
666
+ syncWarnings: [],
667
+ integrityNotes: [reason],
668
+ canonicalRereads: {},
669
+ workspace,
670
+ };
671
+ }
672
+
673
+ /** One fixed read. A nonzero exit or unparseable stdout is unavailable evidence. */
674
+ private async read(
675
+ repository: Repository,
676
+ args: readonly string[]
677
+ ): Promise<SprintCompositionEvidence<unknown>> {
678
+ let result: SprintCompositionCommandResult;
679
+ try {
680
+ result = await this.run({
681
+ file: 'poetic',
682
+ args,
683
+ cwd: repository.path,
684
+ timeoutMs: SPRINT_COMPOSITION_READ_TIMEOUT_MS,
685
+ shell: false,
686
+ });
687
+ } catch (error) {
688
+ return unavailable(
689
+ timedOutError(error) ? 'Poetic read timed out.' : 'Poetic read failed to run.'
690
+ );
691
+ }
692
+ if (result.exitCode !== 0) {
693
+ return unavailable('Poetic reported a failed read.');
694
+ }
695
+ return parseSprintCompositionJson(capOutput(result.stdout));
696
+ }
697
+
698
+ private async readSprintList(
699
+ repository: Repository
700
+ ): Promise<SprintCompositionEvidence<SprintListEnvelope>> {
701
+ const json = await this.read(repository, ['plan', 'sprint', 'list', '--json']);
702
+ return json.state === 'available' ? parseSprintList(json.value) : json;
703
+ }
704
+
705
+ private async readSprintStatus(
706
+ repository: Repository,
707
+ sprintId: string
708
+ ): Promise<SprintCompositionEvidence<SprintStatusEnvelope>> {
709
+ const json = await this.read(repository, ['plan', 'sprint', 'status', sprintId, '--json']);
710
+ return json.state === 'available' ? parseSprintStatus(json.value, sprintId) : json;
711
+ }
712
+
713
+ private async readBacklogItem(
714
+ repository: Repository,
715
+ backlogItemId: string
716
+ ): Promise<SprintCompositionEvidence<{ id: string }>> {
717
+ const json = await this.read(repository, ['plan', 'backlog', 'show', backlogItemId, '--json']);
718
+ return json.state === 'available' ? parseBacklogIdentity(json.value, backlogItemId) : json;
719
+ }
720
+
721
+ private async readTaskDetail(
722
+ repository: Repository,
723
+ taskId: string
724
+ ): Promise<GetTaskDetailOutput> {
725
+ const json = await this.read(repository, [
726
+ 'plan',
727
+ 'task',
728
+ 'status',
729
+ taskId,
730
+ '--json',
731
+ '--detail',
732
+ ]);
733
+ return json.state === 'available'
734
+ ? parseTaskDetailEnvelope(json.value)
735
+ : { schemaVersion: null, task: { state: 'unavailable' as const, reason: json.reason } };
736
+ }
737
+
738
+ /** The task reread as it appears in `canonicalRereads`. */
739
+ private async readTaskEvidence(
740
+ repository: Repository,
741
+ taskId: string
742
+ ): Promise<SprintCompositionEvidence<GetTaskDetailOutput>> {
743
+ const detail = await this.readTaskDetail(repository, taskId);
744
+ if (detail.task.state === 'available') {
745
+ return { state: 'available', value: detail };
746
+ }
747
+ return unavailable(
748
+ detail.task.state === 'missing'
749
+ ? `Poetic reports no managed task ${taskId}.`
750
+ : detail.task.reason
751
+ );
752
+ }
753
+
754
+ /**
755
+ * The planning workspace projection: the only source of sync health, taken from
756
+ * the bare `plan sprint status --json` form that injects `planningWorkspaceV1`.
757
+ */
758
+ private async readWorkspace(
759
+ repository: Repository
760
+ ): Promise<SprintCompositionEvidence<PlanningWorkspaceProjection>> {
761
+ const json = await this.read(repository, ['plan', 'sprint', 'status', '--json']);
762
+ if (json.state !== 'available') return json;
763
+ if (
764
+ json.value === null ||
765
+ typeof json.value !== 'object' ||
766
+ !('planningWorkspaceV1' in json.value)
767
+ ) {
768
+ return unavailable('Poetic returned no planning workspace projection.');
769
+ }
770
+ const readback = parsePlanningWorkspaceV1(
771
+ (json.value as { planningWorkspaceV1: unknown }).planningWorkspaceV1
772
+ );
773
+ return { state: 'available', value: mapPlanningWorkspace(readback) };
774
+ }
775
+ }