@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,714 @@
1
+ /**
2
+ * Pure sprint-composition semantics for BPAU-03: fixed argv, consent conversion,
3
+ * process-local admission, effect-phase decisions, and sync disclosure.
4
+ *
5
+ * Nothing here spawns a process, reads the filesystem, or touches the network.
6
+ * The service owns execution; this module owns the decisions so a disabled
7
+ * control and a refused submission always agree, and so effect phases are
8
+ * reported rather than inferred by a consumer from an exit code.
9
+ *
10
+ * No capacity, readiness, or membership number is ever recomputed here.
11
+ */
12
+
13
+ import type { PlanningWorkspaceProjection } from './planning-service.js';
14
+ import type { SprintMembershipState } from './sprint-composition-readback.js';
15
+ import {
16
+ type ApplySprintCompositionInput,
17
+ SPRINT_COMPOSITION_MEMBERSHIP_ACTIONS,
18
+ SPRINT_COMPOSITION_NEW_IDENTITY_ACTIONS,
19
+ type SprintAddTaskEnvelope,
20
+ type SprintCompositionAction,
21
+ type SprintCompositionEffectPhase,
22
+ type SprintCompositionEvidence,
23
+ type SprintCompositionSyncState,
24
+ type SprintCreateEnvelope,
25
+ } from './sprint-composition-schema.js';
26
+
27
+ /** Mutation timeout, matching the shipped adapter's mutation budget. */
28
+ export const SPRINT_COMPOSITION_MUTATION_TIMEOUT_MS = 120_000;
29
+
30
+ /** Read timeout for the canonical sprint/task/backlog reads. */
31
+ export const SPRINT_COMPOSITION_READ_TIMEOUT_MS = 15_000;
32
+
33
+ /** Captured stdout/stderr cap per invocation. */
34
+ export const SPRINT_COMPOSITION_MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
35
+
36
+ /** Diagnostics cap; diagnostics are scoped to the current invocation only. */
37
+ export const SPRINT_COMPOSITION_MAX_DIAGNOSTICS_CHARS = 2_000;
38
+
39
+ /**
40
+ * Lane disclosure. Sprint composition mutates managed planning state and lets
41
+ * Poetic's managed sync commit and push; it never launches Fusion, never starts
42
+ * tracked backlog execution, never opens a pull request, never cancels a run,
43
+ * and never performs a task lifecycle transition.
44
+ */
45
+ export const SPRINT_COMPOSITION_DISCLOSURE = {
46
+ fullTrust: true,
47
+ hostEquivalentExecution: true,
48
+ providerAuth: 'native',
49
+ planningSync: true,
50
+ gitCommits: true,
51
+ gitPush: true,
52
+ managedPlanningMutation: true,
53
+ pullRequestCreation: false,
54
+ fusionLaunch: false,
55
+ trackedBacklogExecution: false,
56
+ runCancellation: false,
57
+ taskLifecycleTransition: false,
58
+ summary:
59
+ "Sprint composition runs the installed Poetic plan-sprint commands as your host user in the selected repository and branch. It mutates managed planning state, and Poetic's built-in managed sync commits and pushes those planning changes. Adding work from the backlog creates a new Poetic task from an existing backlog item; removing a task detaches it and does not delete it; migrating a task keeps the task id, moves membership, and resets the task status to todo. It does not create custom tasks, split work, choose providers or models, launch execution, complete or close sprints, or repair sprint integrity. BB never passes --no-sync, --force, or --dry-run.",
60
+ } as const;
61
+
62
+ /** Product labels. "Add from backlog" is never "attach existing task". */
63
+ export const SPRINT_COMPOSITION_LABELS: Readonly<Record<SprintCompositionAction, string>> = {
64
+ createSprint: 'Create sprint',
65
+ renameSprint: 'Rename sprint',
66
+ addSprintWorkFromBacklog: 'Add from backlog',
67
+ removeSprintTask: 'Remove task from sprint',
68
+ migrateSprintTask: 'Move task to another sprint',
69
+ };
70
+
71
+ /**
72
+ * Effect copy the operator must see before consenting. Each line names the
73
+ * source task/sprint and target sprint explicitly where one exists.
74
+ */
75
+ export const SPRINT_COMPOSITION_EFFECT_COPY: Readonly<Record<SprintCompositionAction, string>> = {
76
+ createSprint: 'Creates a new sprint with a new Poetic-minted sprint id.',
77
+ renameSprint:
78
+ 'Changes the sprint name only. The sprint id does not change, so the visible label and the id diverge.',
79
+ addSprintWorkFromBacklog:
80
+ 'Creates a new Poetic task from the named backlog item and attaches it to the named sprint. The task description is a copy of the backlog body; later backlog edits do not propagate.',
81
+ removeSprintTask:
82
+ 'Detaches the named task from the named sprint. The task file is kept and is not deleted.',
83
+ migrateSprintTask:
84
+ 'Moves the named task from the named source sprint to the named target sprint. The task id is kept and the task status is reset to todo.',
85
+ };
86
+
87
+ export function requiresNewIdentityConsent(action: SprintCompositionAction): boolean {
88
+ return (SPRINT_COMPOSITION_NEW_IDENTITY_ACTIONS as readonly SprintCompositionAction[]).includes(
89
+ action
90
+ );
91
+ }
92
+
93
+ export function requiresMembershipConsent(action: SprintCompositionAction): boolean {
94
+ return (SPRINT_COMPOSITION_MEMBERSHIP_ACTIONS as readonly SprintCompositionAction[]).includes(
95
+ action
96
+ );
97
+ }
98
+
99
+ /** Consent checkboxes exactly as the operator left them; plain booleans. */
100
+ export interface SprintCompositionConsentState {
101
+ hostExecution: boolean;
102
+ managedPlanningMutation: boolean;
103
+ automaticCommitAndPush: boolean;
104
+ selectedRepositoryAndBranch: boolean;
105
+ /** Required for createSprint and addSprintWorkFromBacklog. */
106
+ newIdentityCreation: boolean;
107
+ /** Required for addSprintWorkFromBacklog, removeSprintTask, migrateSprintTask. */
108
+ sprintMembershipChange: boolean;
109
+ }
110
+
111
+ export const EMPTY_SPRINT_COMPOSITION_CONSENT: Readonly<SprintCompositionConsentState> = {
112
+ hostExecution: false,
113
+ managedPlanningMutation: false,
114
+ automaticCommitAndPush: false,
115
+ selectedRepositoryAndBranch: false,
116
+ newIdentityCreation: false,
117
+ sprintMembershipChange: false,
118
+ };
119
+
120
+ /**
121
+ * Convert collected consent into the exact literal shape the request schema
122
+ * requires, or null when the acknowledgement is incomplete. Returning null is the
123
+ * enforcement point: a caller cannot build a request without full consent.
124
+ */
125
+ export function sprintCompositionConsentPayload(
126
+ action: SprintCompositionAction,
127
+ consent: SprintCompositionConsentState
128
+ ): ApplySprintCompositionInput['consent'] | null {
129
+ if (
130
+ !consent.hostExecution ||
131
+ !consent.managedPlanningMutation ||
132
+ !consent.automaticCommitAndPush ||
133
+ !consent.selectedRepositoryAndBranch
134
+ ) {
135
+ return null;
136
+ }
137
+ const base = {
138
+ hostExecution: true,
139
+ managedPlanningMutation: true,
140
+ automaticCommitAndPush: true,
141
+ selectedRepositoryAndBranch: true,
142
+ } as const;
143
+ const needsIdentity = requiresNewIdentityConsent(action);
144
+ const needsMembership = requiresMembershipConsent(action);
145
+ if (needsIdentity && !consent.newIdentityCreation) return null;
146
+ if (needsMembership && !consent.sprintMembershipChange) return null;
147
+ if (needsIdentity && needsMembership) {
148
+ return { ...base, newIdentityCreation: true, sprintMembershipChange: true };
149
+ }
150
+ if (needsIdentity) return { ...base, newIdentityCreation: true };
151
+ if (needsMembership) return { ...base, sprintMembershipChange: true };
152
+ return base;
153
+ }
154
+
155
+ /**
156
+ * Fixed argv per action. Every optional value uses the single-token
157
+ * `--flag=value` form, so a value beginning with a dash can never be parsed as
158
+ * another option and `--` is never needed. Nothing beyond the frozen tokens can
159
+ * reach the child process: no `--no-sync`, `--force`, `--dry-run`, `--verbose`,
160
+ * `--split`, `--splitter`, `--provider`, `--model`, or `--hint`.
161
+ *
162
+ * `--json` is appended only on the two BPAU-00B identity commands.
163
+ */
164
+ export function sprintCompositionArgv(request: ApplySprintCompositionInput): string[] {
165
+ switch (request.action) {
166
+ case 'createSprint': {
167
+ const argv = [
168
+ 'plan',
169
+ 'sprint',
170
+ 'create',
171
+ `--name=${request.input.name}`,
172
+ `--start=${request.input.start}`,
173
+ `--end=${request.input.end}`,
174
+ ];
175
+ if (request.input.goal !== undefined) argv.push(`--goal=${request.input.goal}`);
176
+ if (request.input.hours !== undefined) argv.push(`--hours=${request.input.hours}`);
177
+ argv.push('--json');
178
+ return argv;
179
+ }
180
+ case 'renameSprint':
181
+ return ['plan', 'sprint', 'rename', request.input.sprintId, request.input.name];
182
+ case 'addSprintWorkFromBacklog': {
183
+ const argv = [
184
+ 'plan',
185
+ 'sprint',
186
+ 'add-task',
187
+ request.input.sprintId,
188
+ request.input.backlogItemId,
189
+ `--estimate=${request.input.estimate}`,
190
+ ];
191
+ if (request.input.expectedRuntimeMinutes !== undefined) {
192
+ argv.push(`--expected-runtime=${request.input.expectedRuntimeMinutes}`);
193
+ }
194
+ if (request.input.priority !== undefined) {
195
+ argv.push(`--priority=${request.input.priority}`);
196
+ }
197
+ argv.push('--json');
198
+ return argv;
199
+ }
200
+ case 'removeSprintTask':
201
+ return ['plan', 'sprint', 'remove-task', request.input.sprintId, request.input.taskId];
202
+ case 'migrateSprintTask':
203
+ // The source sprint is deliberately absent from argv: Poetic derives it.
204
+ // BB carries it for consent, admission, and the reread only.
205
+ return ['plan', 'sprint', 'migrate-task', request.input.taskId, request.input.targetSprintId];
206
+ }
207
+ }
208
+
209
+ /** Managed identities the request names, for `requestedIdentities`. */
210
+ export function sprintCompositionRequestedIdentities(
211
+ request: ApplySprintCompositionInput
212
+ ): string[] {
213
+ switch (request.action) {
214
+ case 'createSprint':
215
+ return [];
216
+ case 'renameSprint':
217
+ return [request.input.sprintId];
218
+ case 'addSprintWorkFromBacklog':
219
+ return [request.input.sprintId, request.input.backlogItemId];
220
+ case 'removeSprintTask':
221
+ return [request.input.sprintId, request.input.taskId];
222
+ case 'migrateSprintTask':
223
+ return [request.input.taskId, request.input.sourceSprintId, request.input.targetSprintId];
224
+ }
225
+ }
226
+
227
+ export type SprintCompositionAdmissionScope = {
228
+ repositoryPath: string;
229
+ /** `create:sprint` for creates; otherwise the managed entity being changed. */
230
+ identity: string;
231
+ family: 'sprint-composition';
232
+ };
233
+
234
+ /**
235
+ * Process-local admission for sprint composition. Refuses overlapping
236
+ * submissions for the same repository path and identity inside this plugin
237
+ * process only. It is admission, not cross-process ownership, not a file lock,
238
+ * and not Poetic-side exclusivity.
239
+ */
240
+ export class ProcessLocalSprintCompositionAdmission {
241
+ private readonly claims = new Set<string>();
242
+
243
+ private scopeKey(scope: SprintCompositionAdmissionScope): string {
244
+ return `${scope.repositoryPath}\0${scope.identity}\0${scope.family}`;
245
+ }
246
+
247
+ /**
248
+ * Claim exclusive process-local admission. Returns a release function that is
249
+ * safe to call more than once, and that the service calls on every terminal
250
+ * path including refusal and reread failure.
251
+ */
252
+ claim(scope: SprintCompositionAdmissionScope): () => void {
253
+ const key = this.scopeKey(scope);
254
+ if (this.claims.has(key)) {
255
+ throw new Error(
256
+ `A BB sprint-composition action is already in progress for ${scope.identity} in this repository. Process-local admission refuses overlapping submissions; this is not cross-process ownership.`
257
+ );
258
+ }
259
+ this.claims.add(key);
260
+ let released = false;
261
+ return () => {
262
+ if (released) return;
263
+ released = true;
264
+ this.claims.delete(key);
265
+ };
266
+ }
267
+
268
+ isBusy(scope: SprintCompositionAdmissionScope): boolean {
269
+ return this.claims.has(this.scopeKey(scope));
270
+ }
271
+ }
272
+
273
+ /** Admission identity: creates are scoped by kind, everything else by entity. */
274
+ export function sprintCompositionAdmissionIdentity(request: ApplySprintCompositionInput): string {
275
+ switch (request.action) {
276
+ case 'createSprint':
277
+ return 'create:sprint';
278
+ case 'renameSprint':
279
+ case 'addSprintWorkFromBacklog':
280
+ return request.input.sprintId;
281
+ case 'removeSprintTask':
282
+ case 'migrateSprintTask':
283
+ return request.input.taskId;
284
+ }
285
+ }
286
+
287
+ /**
288
+ * True when the caller's observed membership no longer matches Poetic's fresh
289
+ * membership. An empty observation is "not observed" and never reads as drift.
290
+ */
291
+ export function membershipDrifted(observed: readonly string[], fresh: readonly string[]): boolean {
292
+ if (observed.length === 0) return false;
293
+ if (observed.length !== fresh.length) return true;
294
+ const freshSet = new Set(fresh);
295
+ return observed.some((id) => !freshSet.has(id));
296
+ }
297
+
298
+ /** Facts about the single invocation the effect deciders need. */
299
+ export interface SprintCompositionInvocationFacts {
300
+ timedOut: boolean;
301
+ exitCode: number | null;
302
+ }
303
+
304
+ export interface SprintCompositionEffectDecision {
305
+ phase: SprintCompositionEffectPhase;
306
+ createdIdentities: string[];
307
+ affectedIdentities: string[];
308
+ integrityNotes: string[];
309
+ }
310
+
311
+ /**
312
+ * Create: `overlap-conflict` stays a distinct phase carrying the conflicting
313
+ * sprint id and Poetic's recovery text, never a generic failure. Recovery is a
314
+ * CLI action, not a BB control.
315
+ */
316
+ export function decideCreateSprintEffect(
317
+ identity: SprintCreateEnvelope | null,
318
+ facts: SprintCompositionInvocationFacts
319
+ ): SprintCompositionEffectDecision {
320
+ if (identity === null) {
321
+ // Without usable identity evidence BB cannot claim the sprint exists and
322
+ // cannot claim nothing happened: a zero exit stays explicitly incomplete.
323
+ return {
324
+ phase: facts.timedOut
325
+ ? 'unknown-after-timeout'
326
+ : facts.exitCode === 0
327
+ ? 'applied-incomplete'
328
+ : 'refused-before-effect',
329
+ createdIdentities: [],
330
+ affectedIdentities: [],
331
+ integrityNotes: [
332
+ facts.timedOut
333
+ ? 'Poetic did not answer before the sprint create timeout; whether a sprint exists is unknown.'
334
+ : 'Poetic returned no usable sprintCreateV1 identity evidence for this create.',
335
+ ],
336
+ };
337
+ }
338
+ switch (identity.state) {
339
+ case 'created':
340
+ return {
341
+ phase: 'applied',
342
+ createdIdentities: identity.sprintId === null ? [] : [identity.sprintId],
343
+ affectedIdentities: identity.sprintId === null ? [] : [identity.sprintId],
344
+ integrityNotes: [],
345
+ };
346
+ case 'overlap-conflict':
347
+ return {
348
+ phase: 'overlap-conflict',
349
+ createdIdentities: [],
350
+ affectedIdentities:
351
+ identity.conflictingSprintId === undefined ? [] : [identity.conflictingSprintId],
352
+ integrityNotes: [],
353
+ };
354
+ case 'refused-invalid':
355
+ return {
356
+ phase: 'refused-before-effect',
357
+ createdIdentities: [],
358
+ affectedIdentities: [],
359
+ integrityNotes: [],
360
+ };
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Rename has no identity envelope from BPAU-00B, so exit evidence plus the
366
+ * sprint reread is all there is. A completed sprint is read-only, which Poetic
367
+ * reports as a nonzero exit.
368
+ */
369
+ export function decideRenameSprintEffect(
370
+ sprintId: string,
371
+ facts: SprintCompositionInvocationFacts,
372
+ renamedInReread: boolean | null
373
+ ): SprintCompositionEffectDecision {
374
+ if (facts.timedOut) {
375
+ return {
376
+ phase: 'unknown-after-timeout',
377
+ createdIdentities: [],
378
+ affectedIdentities: [sprintId],
379
+ integrityNotes: [
380
+ `Poetic did not answer before the rename timeout; whether sprint ${sprintId} was renamed is unknown.`,
381
+ ],
382
+ };
383
+ }
384
+ if (facts.exitCode !== 0) {
385
+ return {
386
+ phase: 'refused-before-effect',
387
+ createdIdentities: [],
388
+ affectedIdentities: [],
389
+ integrityNotes: [],
390
+ };
391
+ }
392
+ const notes = [
393
+ `Poetic keeps sprint id ${sprintId} unchanged on rename, so the visible sprint name and the sprint id diverge.`,
394
+ ];
395
+ if (renamedInReread === false) {
396
+ return {
397
+ phase: 'applied-incomplete',
398
+ createdIdentities: [],
399
+ affectedIdentities: [sprintId],
400
+ integrityNotes: [
401
+ ...notes,
402
+ `Poetic reported the rename as successful but sprint ${sprintId} still reads with its previous name.`,
403
+ ],
404
+ };
405
+ }
406
+ return {
407
+ phase: 'applied',
408
+ createdIdentities: [],
409
+ affectedIdentities: [sprintId],
410
+ integrityNotes: notes,
411
+ };
412
+ }
413
+
414
+ /**
415
+ * Add work from backlog. Poetic creates the task file and then attaches it with
416
+ * no rollback, so a created-but-unattached task is a real partial effect and must
417
+ * render as neither success nor "nothing happened".
418
+ */
419
+ export function decideAddSprintWorkEffect(
420
+ identity: SprintAddTaskEnvelope | null,
421
+ facts: SprintCompositionInvocationFacts,
422
+ membership: SprintMembershipState | null
423
+ ): SprintCompositionEffectDecision {
424
+ if (identity === null) {
425
+ // A created-but-unattached task is possible here, so a zero exit without
426
+ // identity evidence is incomplete rather than "nothing happened".
427
+ return {
428
+ phase: facts.timedOut
429
+ ? 'unknown-after-timeout'
430
+ : facts.exitCode === 0
431
+ ? 'applied-incomplete'
432
+ : 'refused-before-effect',
433
+ createdIdentities: [],
434
+ affectedIdentities: [],
435
+ integrityNotes: [
436
+ facts.timedOut
437
+ ? 'Poetic did not answer before the add-task timeout; whether a task was created or attached is unknown.'
438
+ : 'Poetic returned no usable sprintAddTaskV1 identity evidence for this add.',
439
+ ],
440
+ };
441
+ }
442
+ const taskIds = identity.taskId === null ? [] : [identity.taskId];
443
+ const affected = [identity.sprintId, ...taskIds];
444
+ const capacityNotes =
445
+ identity.capacityWarningLevel === 'warning'
446
+ ? [
447
+ `Poetic reports sprint ${identity.sprintId} at or above its capacity warning threshold; the add proceeded with that warning.`,
448
+ ]
449
+ : [];
450
+ switch (identity.state) {
451
+ case 'added': {
452
+ if (membership === 'present') {
453
+ return {
454
+ phase: 'applied',
455
+ createdIdentities: taskIds,
456
+ affectedIdentities: affected,
457
+ integrityNotes: capacityNotes,
458
+ };
459
+ }
460
+ return {
461
+ phase: 'applied-incomplete',
462
+ createdIdentities: taskIds,
463
+ affectedIdentities: affected,
464
+ integrityNotes: [
465
+ ...capacityNotes,
466
+ membership === null
467
+ ? `Poetic reported the task as added but BB could not reread sprint ${identity.sprintId} to confirm membership.`
468
+ : `Poetic reported the task as added but sprint ${identity.sprintId} does not list it as a member.`,
469
+ ],
470
+ };
471
+ }
472
+ case 'failed-after-partial-effect':
473
+ return {
474
+ phase: 'failed-after-partial-effect',
475
+ createdIdentities: identity.fileCreated ? taskIds : [],
476
+ affectedIdentities: affected,
477
+ integrityNotes: [
478
+ ...capacityNotes,
479
+ identity.fileCreated && !identity.membershipApplied
480
+ ? `Poetic created task ${identity.taskId ?? '(unnamed)'} but did not attach it to sprint ${identity.sprintId}, and add-task has no rollback. The task file may exist unattached.`
481
+ : `Poetic reported a partial effect while adding backlog work to sprint ${identity.sprintId}.`,
482
+ ],
483
+ };
484
+ case 'unknown-after-timeout':
485
+ return {
486
+ phase: 'unknown-after-timeout',
487
+ createdIdentities: [],
488
+ affectedIdentities: affected,
489
+ integrityNotes: [
490
+ ...capacityNotes,
491
+ `Poetic reported an unknown outcome after a timeout while adding backlog work to sprint ${identity.sprintId}; whether a task exists or is attached is unknown.`,
492
+ ],
493
+ };
494
+ case 'refused-unfilled-markers':
495
+ case 'refused-duplicate-backlog':
496
+ case 'refused-capacity':
497
+ case 'refused-invalid':
498
+ return {
499
+ phase: 'refused-before-effect',
500
+ createdIdentities: [],
501
+ affectedIdentities: [],
502
+ integrityNotes: capacityNotes,
503
+ };
504
+ }
505
+ }
506
+
507
+ /**
508
+ * Remove: idempotent detach. Poetic reports exit 0 with no change when the task
509
+ * was never a member, so the pre-launch membership check plus this reread is the
510
+ * only way a concurrent or no-op removal stays distinguishable from a real one.
511
+ */
512
+ export function decideRemoveSprintTaskEffect(
513
+ sprintId: string,
514
+ taskId: string,
515
+ facts: SprintCompositionInvocationFacts,
516
+ membership: SprintMembershipState | null
517
+ ): SprintCompositionEffectDecision {
518
+ if (facts.timedOut) {
519
+ return {
520
+ phase: 'unknown-after-timeout',
521
+ createdIdentities: [],
522
+ affectedIdentities: [sprintId, taskId],
523
+ integrityNotes: [
524
+ `Poetic did not answer before the remove-task timeout; whether task ${taskId} is still a member of sprint ${sprintId} is unknown.`,
525
+ ],
526
+ };
527
+ }
528
+ if (membership === null) {
529
+ // A failed reread never converts the reported state into a failure.
530
+ return {
531
+ phase: facts.exitCode === 0 ? 'applied' : 'refused-before-effect',
532
+ createdIdentities: [],
533
+ affectedIdentities: facts.exitCode === 0 ? [sprintId, taskId] : [],
534
+ integrityNotes: [
535
+ `BB could not reread sprint ${sprintId} after the removal, so Poetic's reported outcome stands unconfirmed.`,
536
+ ],
537
+ };
538
+ }
539
+ if (membership === 'present') {
540
+ return {
541
+ phase: facts.exitCode === 0 ? 'applied-incomplete' : 'refused-before-effect',
542
+ createdIdentities: [],
543
+ affectedIdentities: facts.exitCode === 0 ? [sprintId, taskId] : [],
544
+ integrityNotes: [
545
+ facts.exitCode === 0
546
+ ? `Poetic reported success but sprint ${sprintId} still lists task ${taskId}. Membership changed concurrently or the removal was a no-op.`
547
+ : `Poetic refused the removal and task ${taskId} is still a member of sprint ${sprintId}.`,
548
+ ],
549
+ };
550
+ }
551
+ if (facts.exitCode !== 0) {
552
+ return {
553
+ phase: 'refused-before-effect',
554
+ createdIdentities: [],
555
+ affectedIdentities: [],
556
+ integrityNotes: [
557
+ `Poetic refused the removal, and sprint ${sprintId} does not list task ${taskId}. Membership may have changed concurrently.`,
558
+ ],
559
+ };
560
+ }
561
+ const notes = [
562
+ `Poetic keeps the task file on removal and does not delete it. BB cannot observe the task file's sprintId through a canonical read, so a stale sprintId on task ${taskId} would not be visible here; BB reports this and does not repair it.`,
563
+ ];
564
+ if (membership === 'missing-reference') {
565
+ notes.push(
566
+ `Sprint ${sprintId} still references task ${taskId} as a task id with no resolvable task file.`
567
+ );
568
+ }
569
+ return {
570
+ phase: 'applied',
571
+ createdIdentities: [],
572
+ affectedIdentities: [sprintId, taskId],
573
+ integrityNotes: notes,
574
+ };
575
+ }
576
+
577
+ /**
578
+ * Migrate: the task id is kept, membership moves, and Poetic forces the status to
579
+ * `todo`. A mid-flight failure can leave transient membership across two sprint
580
+ * files, so both sprint rereads decide the phase, not the exit code.
581
+ */
582
+ export function decideMigrateSprintTaskEffect(
583
+ identities: { taskId: string; sourceSprintId: string; targetSprintId: string },
584
+ facts: SprintCompositionInvocationFacts,
585
+ membership: {
586
+ source: SprintMembershipState | null;
587
+ target: SprintMembershipState | null;
588
+ }
589
+ ): SprintCompositionEffectDecision {
590
+ const affected = [identities.taskId, identities.sourceSprintId, identities.targetSprintId];
591
+ if (facts.timedOut) {
592
+ return {
593
+ phase: 'unknown-after-timeout',
594
+ createdIdentities: [],
595
+ affectedIdentities: affected,
596
+ integrityNotes: [
597
+ `Poetic did not answer before the migrate-task timeout; which sprint currently lists task ${identities.taskId} is unknown.`,
598
+ ],
599
+ };
600
+ }
601
+ const inTarget = membership.target === 'present';
602
+ const inSource = membership.source === 'present';
603
+ if (membership.source === null || membership.target === null) {
604
+ return {
605
+ phase: facts.exitCode === 0 ? 'applied' : 'refused-before-effect',
606
+ createdIdentities: [],
607
+ affectedIdentities: facts.exitCode === 0 ? affected : [],
608
+ integrityNotes: [
609
+ `BB could not reread both sprints after the migration, so Poetic's reported outcome for task ${identities.taskId} stands unconfirmed.`,
610
+ ],
611
+ };
612
+ }
613
+ if (facts.exitCode !== 0) {
614
+ return {
615
+ phase: inTarget ? 'failed-after-partial-effect' : 'refused-before-effect',
616
+ createdIdentities: [],
617
+ affectedIdentities: inTarget ? affected : [],
618
+ integrityNotes: inTarget
619
+ ? [
620
+ `Poetic reported a failed migration but sprint ${identities.targetSprintId} lists task ${identities.taskId}${inSource ? `, and sprint ${identities.sourceSprintId} still lists it as well` : ''}. Poetic attempts rollback; the rereads above are authority.`,
621
+ ]
622
+ : [],
623
+ };
624
+ }
625
+ if (inTarget && !inSource) {
626
+ return {
627
+ phase: 'applied',
628
+ createdIdentities: [],
629
+ affectedIdentities: affected,
630
+ integrityNotes: [
631
+ `Poetic reset task ${identities.taskId} to status todo as part of the migration and kept its task id.`,
632
+ ],
633
+ };
634
+ }
635
+ return {
636
+ phase: 'applied-incomplete',
637
+ createdIdentities: [],
638
+ affectedIdentities: affected,
639
+ integrityNotes: [
640
+ inSource && inTarget
641
+ ? `Both sprint ${identities.sourceSprintId} and sprint ${identities.targetSprintId} list task ${identities.taskId}. Membership is transient across two sprint files.`
642
+ : `Neither sprint ${identities.targetSprintId} nor sprint ${identities.sourceSprintId} lists task ${identities.taskId} after a reported successful migration.`,
643
+ ],
644
+ };
645
+ }
646
+
647
+ /**
648
+ * Surface Poetic's current planning-sync evidence from a fresh workspace reread.
649
+ *
650
+ * Everything here comes from what Poetic published, never from the exit code, so
651
+ * a successful command with unpushed planning commits still reads as a local
652
+ * commit rather than as remote success.
653
+ */
654
+ export function sprintCompositionSyncWarnings(
655
+ workspace: SprintCompositionEvidence<PlanningWorkspaceProjection>
656
+ ): string[] {
657
+ if (workspace.state !== 'available') return [workspace.reason];
658
+ const warnings: string[] = [];
659
+ const health = workspace.value.data.syncHealth;
660
+ if (health.state !== 'in-sync') {
661
+ warnings.push(health.detail ?? `Poetic reports planning sync state ${health.state}.`);
662
+ }
663
+ for (const note of workspace.value.notes) {
664
+ if (note.scope === 'sync-health') warnings.push(note.detail);
665
+ }
666
+ return [...new Set(warnings)];
667
+ }
668
+
669
+ /**
670
+ * Report, never prove, the synchronization state.
671
+ *
672
+ * `remote_verified` means Poetic itself reported zero unpushed planning commits
673
+ * on a fresh reread; it is never derived from a zero exit code.
674
+ */
675
+ export function sprintCompositionSyncEvidence(
676
+ launched: boolean,
677
+ workspace: SprintCompositionEvidence<PlanningWorkspaceProjection>
678
+ ): { state: SprintCompositionSyncState; detail: string | null } {
679
+ if (!launched) {
680
+ return {
681
+ state: 'not_attempted',
682
+ detail: 'No Poetic command ran, so managed sync was never attempted.',
683
+ };
684
+ }
685
+ if (workspace.state !== 'available') {
686
+ return { state: 'unknown', detail: workspace.reason };
687
+ }
688
+ const health = workspace.value.data.syncHealth;
689
+ const failed = workspace.value.notes.some(
690
+ (note) => note.scope === 'sync-health' && note.kind === 'sync-failure'
691
+ );
692
+ if (failed) return { state: 'failed', detail: health.detail };
693
+ switch (health.state) {
694
+ case 'in-sync':
695
+ return { state: 'remote_verified', detail: health.detail };
696
+ case 'ahead':
697
+ case 'stale':
698
+ return { state: 'local_commit_only', detail: health.detail };
699
+ case 'unavailable':
700
+ return {
701
+ state: 'unknown',
702
+ detail: health.detail ?? 'Poetic reported no planning sync evidence.',
703
+ };
704
+ }
705
+ }
706
+
707
+ /** Truncate diagnostics to the current invocation's cap. */
708
+ export function truncateDiagnostics(value: string): string | null {
709
+ const trimmed = value.trim();
710
+ if (trimmed.length === 0) return null;
711
+ return trimmed.length <= SPRINT_COMPOSITION_MAX_DIAGNOSTICS_CHARS
712
+ ? trimmed
713
+ : `${trimmed.slice(0, SPRINT_COMPOSITION_MAX_DIAGNOSTICS_CHARS)}…`;
714
+ }