@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,842 @@
1
+ /**
2
+ * Single-attempt service for BB custom task authoring and task relationships.
3
+ *
4
+ * Poetic is the only mutation and sync authority. This service:
5
+ *
6
+ * - validates the request against the closed authoring vocabulary and refuses
7
+ * any status, lifecycle, execution, or filesystem field before launch;
8
+ * - revalidates entity identity against a fresh Poetic read immediately before
9
+ * spawning, so a missing, archived, changed, or drifted entity is refused
10
+ * rather than mutated blind;
11
+ * - runs exactly one fixed argv, once, in the selected repository cwd, with
12
+ * `shell: false` and managed sync left on. Nothing is ever retried;
13
+ * - reads authority in one order — Poetic's structured outcome, then the fresh
14
+ * canonical reread, then the exit code — and always rereads, including after
15
+ * a nonzero exit or a timeout;
16
+ * - never predicts identity, status, membership, capacity, or push success.
17
+ *
18
+ * The runner and the canonical reads are injected. This module builds no
19
+ * transport of its own, resolves no executable, registers no RPC method, and
20
+ * imports nothing from the shared adapter, model, contract, server, app, or
21
+ * route modules.
22
+ */
23
+
24
+ import type { z } from 'zod';
25
+ import type { planningWorkspaceProjectionSchema } from './planning-workspace-schema.js';
26
+ import { repositorySchema } from './repository-schema.js';
27
+ import {
28
+ ProcessLocalTaskAuthoringAdmission,
29
+ taskAuthoringAdmissionScope,
30
+ taskAuthoringArgv,
31
+ taskAuthoringConsentRefusal,
32
+ taskAuthoringCreateEffect,
33
+ taskAuthoringDeclaredIdentities,
34
+ taskAuthoringDeniedInputKeys,
35
+ taskAuthoringDescriptionPrepopulation,
36
+ taskAuthoringRequestedIdentities,
37
+ taskAuthoringSyncState,
38
+ taskAuthoringSyncWarnings,
39
+ } from './task-authoring-model.js';
40
+ import {
41
+ type ApplyTaskAuthoringInput,
42
+ type ApplyTaskAuthoringOutput,
43
+ applyTaskAuthoringInputSchema,
44
+ applyTaskAuthoringOutputSchema,
45
+ TASK_AUTHORING_DISCLOSURE,
46
+ TASK_AUTHORING_MAX_DIAGNOSTIC_CHARS,
47
+ TASK_AUTHORING_MAX_OUTPUT_BYTES,
48
+ TASK_AUTHORING_MUTATION_TIMEOUT_MS,
49
+ TASK_AUTHORING_OUTCOME_VERSION,
50
+ type TaskAuthoringAction,
51
+ type TaskAuthoringCommandEvidence,
52
+ type TaskAuthoringEffect,
53
+ type TaskAuthoringRefusal,
54
+ type TaskAuthoringRefusalReason,
55
+ type TaskAuthoringRereads,
56
+ type TaskAuthoringResult,
57
+ type TaskAuthoringSprintFacts,
58
+ type TaskCreateIdentityEnvelope,
59
+ taskCreateIdentityEnvelopeSchema,
60
+ taskDescriptionEnvelopeSchema,
61
+ } from './task-authoring-schema.js';
62
+ import type { GetTaskDetailOutput } from './task-detail-schema.js';
63
+
64
+ type Repository = z.infer<typeof repositorySchema>;
65
+ type PlanningWorkspaceProjection = z.infer<typeof planningWorkspaceProjectionSchema>;
66
+
67
+ /**
68
+ * The one command shape this service may ask for: the Poetic executable, a fixed
69
+ * argv, the selected repository cwd, the mutation timeout, no shell, and a
70
+ * bounded capture. There is no field for env, executable path, or a shell
71
+ * string, so no caller value can become one.
72
+ */
73
+ export interface TaskAuthoringCommand {
74
+ file: 'poetic';
75
+ args: readonly string[];
76
+ cwd: string;
77
+ timeoutMs: typeof TASK_AUTHORING_MUTATION_TIMEOUT_MS;
78
+ shell: false;
79
+ maxOutputBytes: typeof TASK_AUTHORING_MAX_OUTPUT_BYTES;
80
+ }
81
+
82
+ /**
83
+ * What the injected runner reports. `timedOut` is explicit because a timeout is
84
+ * an undetermined effect, not a failure, and `exitCode` is null when the process
85
+ * produced no status.
86
+ */
87
+ export interface TaskAuthoringCommandResult {
88
+ exitCode: number | null;
89
+ stdout: string;
90
+ stderr: string;
91
+ timedOut: boolean;
92
+ }
93
+
94
+ export type TaskAuthoringRunner = (
95
+ command: TaskAuthoringCommand
96
+ ) => Promise<TaskAuthoringCommandResult>;
97
+
98
+ /**
99
+ * A canonical task read: Poetic's versioned task-detail projection plus the
100
+ * `taskDescriptionV1` sibling when Poetic published one. The sibling is the only
101
+ * permitted prepopulation source for a Description replacement.
102
+ */
103
+ export interface TaskAuthoringTaskReadValue {
104
+ detail: GetTaskDetailOutput;
105
+ description: { taskId: string; description: string } | null;
106
+ }
107
+
108
+ export type TaskAuthoringTaskRead = (
109
+ repository: Repository,
110
+ taskId: string
111
+ ) => Promise<TaskAuthoringTaskReadValue>;
112
+
113
+ /** A canonical sprint read. `null` means Poetic reports no such sprint. */
114
+ export type TaskAuthoringSprintRead = (
115
+ repository: Repository,
116
+ sprintId: string
117
+ ) => Promise<TaskAuthoringSprintFacts | null>;
118
+
119
+ /** The planning workspace projection: the only source of sync evidence. */
120
+ export type TaskAuthoringWorkspaceRead = (
121
+ repository: Repository
122
+ ) => Promise<PlanningWorkspaceProjection>;
123
+
124
+ /**
125
+ * Last gate before a mutation: Git's own current root and branch must still be
126
+ * the selected repository identity. Optional because the owning surface may
127
+ * already hold that gate; when supplied it runs immediately before the spawn.
128
+ */
129
+ export type TaskAuthoringRepositoryGate = (repository: Repository) => Promise<void>;
130
+
131
+ export interface TaskAuthoringDependencies {
132
+ run: TaskAuthoringRunner;
133
+ readTask: TaskAuthoringTaskRead;
134
+ readSprint: TaskAuthoringSprintRead;
135
+ readWorkspace: TaskAuthoringWorkspaceRead;
136
+ requireFreshRepositoryIdentity?: TaskAuthoringRepositoryGate;
137
+ admission?: ProcessLocalTaskAuthoringAdmission;
138
+ }
139
+
140
+ type Unavailable = { state: 'unavailable'; reason: string };
141
+ type Available<T> = { state: 'available'; value: T };
142
+
143
+ function refused(
144
+ reason: TaskAuthoringRefusalReason,
145
+ message: string,
146
+ action: TaskAuthoringAction | null
147
+ ): TaskAuthoringRefusal {
148
+ return { state: 'refused', reason, message, action };
149
+ }
150
+
151
+ function errorReason(error: unknown): string {
152
+ if (error instanceof Error && error.message.length > 0) return error.message;
153
+ const text = String(error);
154
+ return text.length > 0 ? text : 'unknown error';
155
+ }
156
+
157
+ function timeoutError(error: unknown): boolean {
158
+ if (!error || typeof error !== 'object') return false;
159
+ const value = error as { code?: unknown; name?: unknown };
160
+ return value.code === 'ETIMEDOUT' || value.name === 'TimeoutError';
161
+ }
162
+
163
+ /**
164
+ * Bound one captured stream before it is parsed or disclosed. The runner owns
165
+ * the real capture ceiling; this is the second bound, so an oversized capture
166
+ * cannot be parsed or echoed in full.
167
+ */
168
+ function boundedCapture(value: string): string {
169
+ return value.length > TASK_AUTHORING_MAX_OUTPUT_BYTES
170
+ ? value.slice(0, TASK_AUTHORING_MAX_OUTPUT_BYTES)
171
+ : value;
172
+ }
173
+
174
+ /** Diagnostics for the current invocation only, truncated for disclosure. */
175
+ function currentInvocationDiagnostic(value: string): string | null {
176
+ const trimmed = value.trim();
177
+ if (trimmed.length === 0) return null;
178
+ return trimmed.slice(-TASK_AUTHORING_MAX_DIAGNOSTIC_CHARS);
179
+ }
180
+
181
+ /**
182
+ * Find Poetic's `taskCreateV1` envelope on stdout. Only whole JSON objects are
183
+ * considered, and a malformed line is skipped rather than guessed at; the CLI
184
+ * writes the envelope as one line.
185
+ */
186
+ function findTaskCreateEnvelope(stdout: string): TaskCreateIdentityEnvelope | null {
187
+ for (const line of stdout.split('\n')) {
188
+ const candidate = line.trim();
189
+ if (!candidate.startsWith('{') || !candidate.includes('taskCreateV1')) continue;
190
+ let parsed: unknown;
191
+ try {
192
+ parsed = JSON.parse(candidate);
193
+ } catch {
194
+ continue;
195
+ }
196
+ if (typeof parsed !== 'object' || parsed === null || !('taskCreateV1' in parsed)) continue;
197
+ const envelope = taskCreateIdentityEnvelopeSchema.safeParse(
198
+ (parsed as { taskCreateV1: unknown }).taskCreateV1
199
+ );
200
+ if (!envelope.success) return null;
201
+ if (envelope.data.schemaVersion.split('.')[0] !== '1') return null;
202
+ return envelope.data;
203
+ }
204
+ return null;
205
+ }
206
+
207
+ export class TaskAuthoringService {
208
+ private readonly admission: ProcessLocalTaskAuthoringAdmission;
209
+
210
+ constructor(private readonly dependencies: TaskAuthoringDependencies) {
211
+ this.admission = dependencies.admission ?? new ProcessLocalTaskAuthoringAdmission();
212
+ }
213
+
214
+ /**
215
+ * Apply one authoring action.
216
+ *
217
+ * A request that never reached a process is returned as a refusal, which the
218
+ * registering surface may map to an RPC error. Once a process has run, the
219
+ * outcome envelope is always returned — including on a nonzero exit or a
220
+ * timeout — so partial-effect evidence is never discarded.
221
+ */
222
+ async apply(repositoryValue: unknown, requestValue: unknown): Promise<TaskAuthoringResult> {
223
+ const repository = repositorySchema.parse(repositoryValue);
224
+ const declaredAction =
225
+ typeof requestValue === 'object' &&
226
+ requestValue !== null &&
227
+ 'action' in requestValue &&
228
+ typeof (requestValue as { action: unknown }).action === 'string'
229
+ ? ((requestValue as { action: string }).action as TaskAuthoringAction)
230
+ : null;
231
+
232
+ // Reported before schema validation so an attempt to reach a status,
233
+ // lifecycle, or excluded execution surface is named rather than reduced to a
234
+ // generic invalid-request.
235
+ const denied =
236
+ typeof requestValue === 'object' && requestValue !== null && 'input' in requestValue
237
+ ? taskAuthoringDeniedInputKeys((requestValue as { input: unknown }).input)
238
+ : [];
239
+ if (denied.length > 0) {
240
+ return refused(
241
+ 'lifecycle-field',
242
+ `Task authoring does not accept ${denied.join(', ')}. Status and lifecycle transitions, time logging, task splitting, and generic execution or filesystem fields are not part of this vocabulary. No command was launched.`,
243
+ declaredAction
244
+ );
245
+ }
246
+
247
+ const parsed = applyTaskAuthoringInputSchema.safeParse(requestValue);
248
+ if (!parsed.success) {
249
+ return refused('invalid-request', 'Invalid task authoring request.', declaredAction);
250
+ }
251
+ const request = parsed.data;
252
+
253
+ if (repository.state === 'blocked') {
254
+ return refused(
255
+ 'repository-not-ready',
256
+ `Poetic reports the selected repository is not ready: ${repository.messages.join(' ') || 'no detail reported'}. No command was launched.`,
257
+ request.action
258
+ );
259
+ }
260
+ if (
261
+ request.projectId !== repository.projectId ||
262
+ request.sourceId !== repository.sourceId ||
263
+ request.expected.repositoryPath !== repository.path ||
264
+ request.expected.branch !== repository.branch
265
+ ) {
266
+ return refused(
267
+ 'repository-mismatch',
268
+ 'The request does not identify the selected repository and branch. No command was launched.',
269
+ request.action
270
+ );
271
+ }
272
+
273
+ const declaredIdentities = taskAuthoringDeclaredIdentities(request);
274
+ const expectedIdentities = [...new Set(request.expected.entityIds)].sort();
275
+ if (
276
+ expectedIdentities.length !== declaredIdentities.length ||
277
+ expectedIdentities.some((id, index) => id !== declaredIdentities[index])
278
+ ) {
279
+ return refused(
280
+ 'expected-identity-mismatch',
281
+ 'The acknowledged entity ids do not match the entities this action would touch. No command was launched.',
282
+ request.action
283
+ );
284
+ }
285
+
286
+ const consentRefusal = taskAuthoringConsentRefusal(request);
287
+ if (consentRefusal !== null) {
288
+ return refused(consentRefusal.reason, consentRefusal.message, request.action);
289
+ }
290
+
291
+ const admissionScope = taskAuthoringAdmissionScope(repository.path, request);
292
+ let release: () => void;
293
+ try {
294
+ release = this.admission.claim(admissionScope);
295
+ } catch (error) {
296
+ return refused('already-in-flight', errorReason(error), request.action);
297
+ }
298
+
299
+ try {
300
+ const gate = await this.revalidate(repository, request);
301
+ if (gate.state === 'refused') return gate.refusal;
302
+
303
+ if (this.dependencies.requireFreshRepositoryIdentity) {
304
+ try {
305
+ await this.dependencies.requireFreshRepositoryIdentity(repository);
306
+ } catch (error) {
307
+ return refused(
308
+ 'repository-moved',
309
+ `The selected repository or branch no longer matches what was acknowledged (${errorReason(error)}). No command was launched.`,
310
+ request.action
311
+ );
312
+ }
313
+ }
314
+
315
+ return {
316
+ state: 'completed',
317
+ outcome: await this.run(repository, request, gate.sprintIdForReread),
318
+ };
319
+ } finally {
320
+ // Released on every terminal path: refusal, command failure, reread
321
+ // failure, and success alike.
322
+ release();
323
+ }
324
+ }
325
+
326
+ /**
327
+ * Revalidate the entities this action addresses against a fresh Poetic read,
328
+ * immediately before launch. Every refusal here comes from Poetic's own
329
+ * evidence; BB never decides on its own that an entity moved.
330
+ */
331
+ private async revalidate(
332
+ repository: Repository,
333
+ request: ApplyTaskAuthoringInput
334
+ ): Promise<
335
+ | { state: 'refused'; refusal: TaskAuthoringRefusal }
336
+ | { state: 'admitted'; sprintIdForReread: string | null }
337
+ > {
338
+ if (request.action === 'createCustomTask') {
339
+ const sprintId = request.input.sprintId;
340
+ let sprint: TaskAuthoringSprintFacts | null;
341
+ try {
342
+ sprint = await this.dependencies.readSprint(repository, sprintId);
343
+ } catch (error) {
344
+ return {
345
+ state: 'refused',
346
+ refusal: refused(
347
+ 'sprint-unavailable',
348
+ `Poetic could not describe sprint ${sprintId} (${errorReason(error)}), so no task was created.`,
349
+ request.action
350
+ ),
351
+ };
352
+ }
353
+ if (sprint === null) {
354
+ return {
355
+ state: 'refused',
356
+ refusal: refused(
357
+ 'missing-identity',
358
+ `Poetic reports no sprint ${sprintId} in this repository, so no task was created.`,
359
+ request.action
360
+ ),
361
+ };
362
+ }
363
+ if (sprint.id !== sprintId) {
364
+ return {
365
+ state: 'refused',
366
+ refusal: refused(
367
+ 'changed-identity',
368
+ `Poetic returned sprint ${sprint.id} while BB asked for ${sprintId}, so no task was created.`,
369
+ request.action
370
+ ),
371
+ };
372
+ }
373
+ const observedMembership = request.expected.observedSprintTaskIds;
374
+ if (observedMembership !== null && !sameMembership(observedMembership, sprint.taskIds)) {
375
+ return {
376
+ state: 'refused',
377
+ refusal: refused(
378
+ 'membership-drift',
379
+ `Poetic's current membership for sprint ${sprintId} differs from the membership BB showed, so no task was created. Refresh the sprint and submit again.`,
380
+ request.action
381
+ ),
382
+ };
383
+ }
384
+ return { state: 'admitted', sprintIdForReread: sprintId };
385
+ }
386
+
387
+ const taskId = request.input.taskId;
388
+ let read: TaskAuthoringTaskReadValue;
389
+ try {
390
+ read = await this.dependencies.readTask(repository, taskId);
391
+ } catch (error) {
392
+ return {
393
+ state: 'refused',
394
+ refusal: refused(
395
+ 'task-unavailable',
396
+ `Poetic could not describe task ${taskId} (${errorReason(error)}). No command was launched.`,
397
+ request.action
398
+ ),
399
+ };
400
+ }
401
+ const detail = read.detail.task;
402
+ if (detail.state === 'missing') {
403
+ return {
404
+ state: 'refused',
405
+ refusal: refused(
406
+ 'missing-identity',
407
+ `Poetic reports no managed task ${taskId} in this repository. No command was launched.`,
408
+ request.action
409
+ ),
410
+ };
411
+ }
412
+ if (detail.state === 'unavailable') {
413
+ return {
414
+ state: 'refused',
415
+ refusal: refused(
416
+ 'task-unavailable',
417
+ `Poetic could not describe task ${taskId} (${detail.reason}). No command was launched.`,
418
+ request.action
419
+ ),
420
+ };
421
+ }
422
+ if (detail.value.id !== taskId) {
423
+ return {
424
+ state: 'refused',
425
+ refusal: refused(
426
+ 'changed-identity',
427
+ `Poetic returned task detail for ${detail.value.id} while BB asked for ${taskId}. No command was launched.`,
428
+ request.action
429
+ ),
430
+ };
431
+ }
432
+ if (detail.value.location === 'archive') {
433
+ return {
434
+ state: 'refused',
435
+ refusal: refused(
436
+ 'archived-identity',
437
+ `Poetic reports task ${taskId} is archived. Authoring does not edit archived tasks, and it never reopens one. No command was launched.`,
438
+ request.action
439
+ ),
440
+ };
441
+ }
442
+ const observedUpdatedAt = request.expected.observedTaskUpdatedAt;
443
+ if (observedUpdatedAt !== null && detail.value.updated !== observedUpdatedAt) {
444
+ return {
445
+ state: 'refused',
446
+ refusal: refused(
447
+ 'changed-identity',
448
+ `Poetic reports task ${taskId} changed after BB read it. Refresh the task and submit again; nothing was launched.`,
449
+ request.action
450
+ ),
451
+ };
452
+ }
453
+
454
+ if (request.action === 'updateCustomTask' && request.input.description !== undefined) {
455
+ const prepopulation = taskAuthoringDescriptionPrepopulation(
456
+ taskId,
457
+ read.description === null
458
+ ? {
459
+ state: 'unavailable',
460
+ reason: 'Poetic published no taskDescriptionV1 sibling for this task',
461
+ }
462
+ : { state: 'available', value: read.description }
463
+ );
464
+ if (prepopulation.state === 'unavailable') {
465
+ return {
466
+ state: 'refused',
467
+ refusal: refused(
468
+ 'description-prepopulation-unavailable',
469
+ `${prepopulation.reason} No command was launched.`,
470
+ request.action
471
+ ),
472
+ };
473
+ }
474
+ }
475
+
476
+ if (request.action === 'addTaskDependency') {
477
+ const endpointId = request.input.onTaskId;
478
+ let endpoint: TaskAuthoringTaskReadValue;
479
+ try {
480
+ endpoint = await this.dependencies.readTask(repository, endpointId);
481
+ } catch (error) {
482
+ return {
483
+ state: 'refused',
484
+ refusal: refused(
485
+ 'task-unavailable',
486
+ `Poetic could not describe dependency endpoint ${endpointId} (${errorReason(error)}). No command was launched.`,
487
+ request.action
488
+ ),
489
+ };
490
+ }
491
+ if (endpoint.detail.task.state === 'missing') {
492
+ return {
493
+ state: 'refused',
494
+ refusal: refused(
495
+ 'missing-identity',
496
+ `Poetic reports no managed task ${endpointId} to depend on. No command was launched.`,
497
+ request.action
498
+ ),
499
+ };
500
+ }
501
+ if (endpoint.detail.task.state === 'unavailable') {
502
+ return {
503
+ state: 'refused',
504
+ refusal: refused(
505
+ 'task-unavailable',
506
+ `Poetic could not describe dependency endpoint ${endpointId} (${endpoint.detail.task.reason}). No command was launched.`,
507
+ request.action
508
+ ),
509
+ };
510
+ }
511
+ }
512
+ // A removal endpoint is deliberately not required to exist: Poetic treats
513
+ // removing a dependency it does not hold as a no-op, so refusing here would
514
+ // block cleanup of a dependency whose task is already gone.
515
+
516
+ return { state: 'admitted', sprintIdForReread: request.expected.observedSprintId };
517
+ }
518
+
519
+ /** Run the single fixed attempt, then reread and report. */
520
+ private async run(
521
+ repository: Repository,
522
+ request: ApplyTaskAuthoringInput,
523
+ sprintIdForReread: string | null
524
+ ): Promise<ApplyTaskAuthoringOutput> {
525
+ const argv = taskAuthoringArgv(request);
526
+ const command: TaskAuthoringCommand = {
527
+ file: 'poetic',
528
+ args: argv,
529
+ cwd: repository.path,
530
+ timeoutMs: TASK_AUTHORING_MUTATION_TIMEOUT_MS,
531
+ shell: false,
532
+ maxOutputBytes: TASK_AUTHORING_MAX_OUTPUT_BYTES,
533
+ };
534
+
535
+ let result: TaskAuthoringCommandResult | null = null;
536
+ let spawnFailure: { timedOut: boolean; reason: string } | null = null;
537
+ try {
538
+ const raw = await this.dependencies.run(command);
539
+ result = {
540
+ exitCode: raw.exitCode,
541
+ stdout: boundedCapture(raw.stdout),
542
+ stderr: boundedCapture(raw.stderr),
543
+ timedOut: raw.timedOut,
544
+ };
545
+ } catch (error) {
546
+ // One attempt only: a failure, a timeout, or an ambiguous completion is
547
+ // reported verbatim and never retried, because a retry could re-apply a
548
+ // mutation Poetic may already have committed.
549
+ spawnFailure = { timedOut: timeoutError(error), reason: errorReason(error) };
550
+ }
551
+
552
+ const integrityNotes: string[] = [];
553
+ const identityOutcome =
554
+ request.action === 'createCustomTask' && result !== null && !result.timedOut
555
+ ? this.identityEvidence(request.input.sprintId, result.stdout, integrityNotes)
556
+ : null;
557
+
558
+ const classified = classify(
559
+ request.action,
560
+ request.action === 'createCustomTask' ? null : request.input.taskId,
561
+ result,
562
+ spawnFailure,
563
+ identityOutcome
564
+ );
565
+ const diagnostics =
566
+ result === null
567
+ ? currentInvocationDiagnostic(spawnFailure?.reason ?? '')
568
+ : currentInvocationDiagnostic(`${result.stdout}\n${result.stderr}`);
569
+
570
+ const command_: TaskAuthoringCommandEvidence = {
571
+ state: classified.state,
572
+ attempts: 1,
573
+ argv,
574
+ exitCode: result?.exitCode ?? null,
575
+ diagnostics,
576
+ remoteSyncConfirmedByExitCode: false,
577
+ };
578
+
579
+ const createdTaskId = classified.effect.createdIdentities[0] ?? null;
580
+ const rereadTaskId =
581
+ request.action === 'createCustomTask' ? createdTaskId : request.input.taskId;
582
+ const rereads = await this.reread(repository, request, rereadTaskId, sprintIdForReread);
583
+ const workspace = await this.rereadWorkspace(repository);
584
+
585
+ this.collectIntegrityNotes(request, rereads, workspace, createdTaskId, integrityNotes);
586
+
587
+ return applyTaskAuthoringOutputSchema.parse({
588
+ outcomeVersion: TASK_AUTHORING_OUTCOME_VERSION,
589
+ repository,
590
+ disclosure: TASK_AUTHORING_DISCLOSURE,
591
+ action: request.action,
592
+ requestedIdentities: taskAuthoringRequestedIdentities(request),
593
+ command: command_,
594
+ identityOutcome,
595
+ effect: classified.effect,
596
+ sync: taskAuthoringSyncState(workspace),
597
+ syncWarnings:
598
+ workspace.state === 'available' ? taskAuthoringSyncWarnings(workspace.value) : [],
599
+ integrityNotes: [...new Set(integrityNotes)],
600
+ canonicalRereads: rereads,
601
+ workspace,
602
+ } satisfies ApplyTaskAuthoringOutput);
603
+ }
604
+
605
+ /**
606
+ * Poetic's own identity evidence for a create. A missing, malformed, or
607
+ * internally inconsistent envelope is reported as no evidence at all: BB never
608
+ * substitutes the newest task it can see for the identity Poetic failed to
609
+ * publish.
610
+ */
611
+ private identityEvidence(
612
+ sprintId: string,
613
+ stdout: string,
614
+ integrityNotes: string[]
615
+ ): TaskCreateIdentityEnvelope | null {
616
+ const envelope = findTaskCreateEnvelope(stdout);
617
+ if (envelope === null) {
618
+ integrityNotes.push(
619
+ 'Poetic published no usable taskCreateV1 identity envelope for this create, so whether a task was created is undetermined. BB did not infer an identity from any task list.'
620
+ );
621
+ return null;
622
+ }
623
+ if (envelope.sprintId !== sprintId) {
624
+ integrityNotes.push(
625
+ `Poetic's identity envelope names sprint ${envelope.sprintId} while BB asked for ${sprintId}, so the create is reported as undetermined.`
626
+ );
627
+ return null;
628
+ }
629
+ if (envelope.state === 'created' && envelope.taskId === null) {
630
+ integrityNotes.push(
631
+ 'Poetic reported a created task without a task id, so the create is reported as undetermined.'
632
+ );
633
+ return null;
634
+ }
635
+ return envelope;
636
+ }
637
+
638
+ /** Perform this action's reread set. Failures are members, never exceptions. */
639
+ private async reread(
640
+ repository: Repository,
641
+ request: ApplyTaskAuthoringInput,
642
+ taskId: string | null,
643
+ sprintId: string | null
644
+ ): Promise<TaskAuthoringRereads> {
645
+ const task: Available<GetTaskDetailOutput> | Unavailable = await (async () => {
646
+ if (taskId === null) {
647
+ return {
648
+ state: 'unavailable' as const,
649
+ reason:
650
+ 'Poetic published no task identity for this action, so BB had no id to reread. It did not guess one.',
651
+ };
652
+ }
653
+ try {
654
+ const read = await this.dependencies.readTask(repository, taskId);
655
+ return { state: 'available' as const, value: read.detail };
656
+ } catch (error) {
657
+ return { state: 'unavailable' as const, reason: errorReason(error) };
658
+ }
659
+ })();
660
+
661
+ const description =
662
+ request.action === 'updateCustomTask' && request.input.description !== undefined
663
+ ? await this.rereadDescription(repository, request.input.taskId)
664
+ : null;
665
+
666
+ const sprint =
667
+ sprintId === null
668
+ ? null
669
+ : await (async (): Promise<Available<TaskAuthoringSprintFacts> | Unavailable> => {
670
+ try {
671
+ const facts = await this.dependencies.readSprint(repository, sprintId);
672
+ if (facts === null) {
673
+ return {
674
+ state: 'unavailable' as const,
675
+ reason: `Poetic reports no sprint ${sprintId} after this action.`,
676
+ };
677
+ }
678
+ return { state: 'available' as const, value: facts };
679
+ } catch (error) {
680
+ return { state: 'unavailable' as const, reason: errorReason(error) };
681
+ }
682
+ })();
683
+
684
+ return { task, sprint, description };
685
+ }
686
+
687
+ private async rereadDescription(
688
+ repository: Repository,
689
+ taskId: string
690
+ ): Promise<Available<z.infer<typeof taskDescriptionEnvelopeSchema>> | Unavailable> {
691
+ try {
692
+ const read = await this.dependencies.readTask(repository, taskId);
693
+ if (read.description === null) {
694
+ return {
695
+ state: 'unavailable',
696
+ reason: `Poetic published no taskDescriptionV1 sibling for task ${taskId} after this action.`,
697
+ };
698
+ }
699
+ const envelope = taskDescriptionEnvelopeSchema.safeParse({
700
+ schemaVersion: '1.0.0',
701
+ taskId: read.description.taskId,
702
+ description: read.description.description,
703
+ });
704
+ if (!envelope.success) {
705
+ return {
706
+ state: 'unavailable',
707
+ reason: `Poetic published a malformed Description for task ${taskId} after this action.`,
708
+ };
709
+ }
710
+ return { state: 'available', value: envelope.data };
711
+ } catch (error) {
712
+ return { state: 'unavailable', reason: errorReason(error) };
713
+ }
714
+ }
715
+
716
+ private async rereadWorkspace(
717
+ repository: Repository
718
+ ): Promise<Available<PlanningWorkspaceProjection> | Unavailable> {
719
+ try {
720
+ return { state: 'available', value: await this.dependencies.readWorkspace(repository) };
721
+ } catch (error) {
722
+ return { state: 'unavailable', reason: errorReason(error) };
723
+ }
724
+ }
725
+
726
+ /**
727
+ * Integrity notes taken from the rereads. Each one reports what Poetic
728
+ * published; none of them repairs anything or asserts a status.
729
+ */
730
+ private collectIntegrityNotes(
731
+ request: ApplyTaskAuthoringInput,
732
+ rereads: TaskAuthoringRereads,
733
+ workspace: Available<PlanningWorkspaceProjection> | Unavailable,
734
+ createdTaskId: string | null,
735
+ notes: string[]
736
+ ): void {
737
+ if (rereads.task.state === 'unavailable') {
738
+ notes.push(`Poetic's task reread after this action was unavailable: ${rereads.task.reason}`);
739
+ } else if (rereads.task.value.task.state === 'missing') {
740
+ notes.push(
741
+ 'Poetic reports no managed task at this id after the action. BB did not infer a completed, cancelled, or archived state.'
742
+ );
743
+ }
744
+ if (rereads.sprint?.state === 'unavailable') {
745
+ notes.push(
746
+ `Poetic's sprint reread after this action was unavailable: ${rereads.sprint.reason}`
747
+ );
748
+ }
749
+ if (rereads.description?.state === 'unavailable') {
750
+ notes.push(
751
+ `Poetic's Description reread after this action was unavailable: ${rereads.description.reason}`
752
+ );
753
+ }
754
+ if (workspace.state === 'unavailable') {
755
+ notes.push(`Poetic's planning workspace reread was unavailable: ${workspace.reason}`);
756
+ }
757
+ if (
758
+ createdTaskId !== null &&
759
+ rereads.sprint?.state === 'available' &&
760
+ !rereads.sprint.value.taskIds.includes(createdTaskId)
761
+ ) {
762
+ notes.push(
763
+ `Poetic created task ${createdTaskId} but its sprint reread does not list it as a member. BB reports this and repairs nothing.`
764
+ );
765
+ }
766
+ if (
767
+ request.action === 'addTaskDependency' &&
768
+ rereads.task.state === 'available' &&
769
+ rereads.task.value.task.state === 'available' &&
770
+ !rereads.task.value.task.value.dependencies.some(
771
+ (dependency) => dependency.id === request.input.onTaskId
772
+ )
773
+ ) {
774
+ notes.push(
775
+ `Poetic's task reread does not list ${request.input.onTaskId} among this task's dependencies.`
776
+ );
777
+ }
778
+ }
779
+ }
780
+
781
+ function sameMembership(observed: readonly string[], current: readonly string[]): boolean {
782
+ const left = [...new Set(observed)].sort();
783
+ const right = [...new Set(current)].sort();
784
+ return left.length === right.length && left.every((id, index) => id === right[index]);
785
+ }
786
+
787
+ /**
788
+ * Command state and effect phase for one attempt.
789
+ *
790
+ * Authority order is fixed: Poetic's structured identity outcome decides a
791
+ * create; otherwise the exit code is the only report available, and a nonzero
792
+ * exit is reported as possibly partial rather than as "nothing happened".
793
+ */
794
+ function classify(
795
+ action: TaskAuthoringAction,
796
+ addressedTaskId: string | null,
797
+ result: TaskAuthoringCommandResult | null,
798
+ spawnFailure: { timedOut: boolean; reason: string } | null,
799
+ identityOutcome: TaskCreateIdentityEnvelope | null
800
+ ): { state: TaskAuthoringCommandEvidence['state']; effect: TaskAuthoringEffect } {
801
+ const affected = addressedTaskId === null ? [] : [addressedTaskId];
802
+ if (result === null) {
803
+ if (spawnFailure?.timedOut) {
804
+ return {
805
+ state: 'timed_out',
806
+ effect: { phase: 'unknown-after-timeout', createdIdentities: [], affectedIdentities: [] },
807
+ };
808
+ }
809
+ // The command never ran, so no managed state can have changed.
810
+ return {
811
+ state: 'failed',
812
+ effect: { phase: 'refused-before-effect', createdIdentities: [], affectedIdentities: [] },
813
+ };
814
+ }
815
+ if (result.timedOut) {
816
+ return {
817
+ state: 'timed_out',
818
+ effect: {
819
+ phase: 'unknown-after-timeout',
820
+ createdIdentities: [],
821
+ affectedIdentities: affected,
822
+ },
823
+ };
824
+ }
825
+ if (action === 'createCustomTask') return taskAuthoringCreateEffect(identityOutcome);
826
+ if (result.exitCode === 0) {
827
+ return {
828
+ state: 'succeeded',
829
+ effect: { phase: 'applied', createdIdentities: [], affectedIdentities: affected },
830
+ };
831
+ }
832
+ // A failed command may still have applied part of its change; nothing is
833
+ // retried, and the fresh reread is the only authority on what it did.
834
+ return {
835
+ state: 'failed',
836
+ effect: {
837
+ phase: 'failed-after-partial-effect',
838
+ createdIdentities: [],
839
+ affectedIdentities: affected,
840
+ },
841
+ };
842
+ }