@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,1024 @@
1
+ import {
2
+ queryCanonicalPlanningProjection
3
+ } from "./chunk-Z6PC7QX6.js";
4
+ import {
5
+ getAllTasks
6
+ } from "./chunk-5LTN43AS.js";
7
+ import {
8
+ calculateCapacity,
9
+ computeSprintTerminalReadiness,
10
+ getCurrentSprint,
11
+ listSprints,
12
+ listTasksInSprint
13
+ } from "./chunk-4YX7J6QL.js";
14
+ import {
15
+ getPlanningRoot
16
+ } from "./chunk-OPYFYTWQ.js";
17
+ import {
18
+ getBucketArchivePathByKind,
19
+ getBucketPathByKind,
20
+ listEnabledBuckets
21
+ } from "./chunk-HOYBYAOA.js";
22
+ import {
23
+ resolveDefaultBranch
24
+ } from "./chunk-XQD2B6BB.js";
25
+ import {
26
+ GitExecError,
27
+ execGit
28
+ } from "./chunk-KNDYMVWN.js";
29
+ import {
30
+ PLANNING_GIT_NETWORK_TIMEOUT_MS
31
+ } from "./chunk-LAMKBTXX.js";
32
+ import {
33
+ isSafeGitRemoteAndRef
34
+ } from "./chunk-QOCOVLUH.js";
35
+ import {
36
+ toRepoRelativePath
37
+ } from "./chunk-XZE4XARH.js";
38
+ import {
39
+ POETIC_DEFER_SYNC,
40
+ readEnv
41
+ } from "./chunk-5DLKYTQX.js";
42
+
43
+ // src/planning/git-sync.ts
44
+ import chalk from "chalk";
45
+
46
+ // src/planning/git-exec.ts
47
+ var NETWORK_GIT_SUBCOMMANDS = /* @__PURE__ */ new Set(["fetch", "ls-remote", "pull", "push"]);
48
+ async function runPlanningGit(args, options) {
49
+ const networkTimeoutMs = NETWORK_GIT_SUBCOMMANDS.has(args[0] ?? "") ? PLANNING_GIT_NETWORK_TIMEOUT_MS : void 0;
50
+ try {
51
+ const result = await execGit(args, {
52
+ cwd: options.cwd,
53
+ ...options.env ? { env: options.env } : {},
54
+ ...options.timeoutMs !== void 0 ? { timeoutMs: options.timeoutMs } : networkTimeoutMs !== void 0 ? { timeoutMs: networkTimeoutMs } : {}
55
+ });
56
+ if (options.reject !== false && result.exitCode !== 0) {
57
+ throw new Error(
58
+ `git ${args.join(" ")} failed with exit ${result.exitCode}: ${result.stderr}`
59
+ );
60
+ }
61
+ return result;
62
+ } catch (error) {
63
+ if (options.reject === false && error instanceof GitExecError) {
64
+ return {
65
+ exitCode: void 0,
66
+ stdout: "",
67
+ stderr: error.message,
68
+ ...error.timedOut ? { timedOut: true } : {}
69
+ };
70
+ }
71
+ throw error;
72
+ }
73
+ }
74
+
75
+ // src/planning/remote-sync-verify.ts
76
+ import * as fs from "fs/promises";
77
+ import * as path from "path";
78
+ var DEFAULT_VERIFY_DELAYS_MS = [0, 2e3, 4e3];
79
+ function sleep(ms) {
80
+ return new Promise((resolve) => setTimeout(resolve, ms));
81
+ }
82
+ async function resolveRemoteBranchSha(projectRoot, remote, remoteBranch) {
83
+ if (!isSafeGitRemoteAndRef(remote, remoteBranch)) {
84
+ return "";
85
+ }
86
+ const lsRemote = await runPlanningGit(["ls-remote", "--heads", "--", remote, remoteBranch], {
87
+ cwd: projectRoot,
88
+ reject: false
89
+ });
90
+ if (lsRemote.exitCode !== 0) {
91
+ return "";
92
+ }
93
+ return lsRemote.stdout.trim().split(/\s+/)[0] ?? "";
94
+ }
95
+ async function remoteContainsCommit(projectRoot, remote, remoteBranch, commitSha) {
96
+ const remoteSha = await resolveRemoteBranchSha(projectRoot, remote, remoteBranch);
97
+ if (!remoteSha) {
98
+ return false;
99
+ }
100
+ if (remoteSha === commitSha) {
101
+ return true;
102
+ }
103
+ const ancestorCheck = await runPlanningGit(
104
+ ["merge-base", "--is-ancestor", commitSha, remoteSha],
105
+ {
106
+ cwd: projectRoot,
107
+ reject: false
108
+ }
109
+ );
110
+ return ancestorCheck.exitCode === 0;
111
+ }
112
+ async function remoteContainsPaths(projectRoot, remote, remoteBranch, relativePaths) {
113
+ const remoteRef = `${remote}/${remoteBranch}`;
114
+ for (const relativePath of relativePaths) {
115
+ const showResult = await runPlanningGit(["show", `${remoteRef}:${relativePath}`], {
116
+ cwd: projectRoot,
117
+ reject: false
118
+ });
119
+ if (showResult.exitCode !== 0) {
120
+ return { ok: false, missingPath: relativePath };
121
+ }
122
+ }
123
+ return { ok: true };
124
+ }
125
+ async function verifyRemoteSyncPush(options) {
126
+ const {
127
+ projectRoot,
128
+ remote,
129
+ remoteBranch,
130
+ relativePaths,
131
+ expectedCommitSha,
132
+ maxAttempts = 3,
133
+ verifyDelaysMs = DEFAULT_VERIFY_DELAYS_MS
134
+ } = options;
135
+ if (!expectedCommitSha) {
136
+ return { ok: false, reason: "missing expected commit SHA for remote verification" };
137
+ }
138
+ if (!isSafeGitRemoteAndRef(remote, remoteBranch)) {
139
+ return {
140
+ ok: false,
141
+ reason: "upstream remote or branch name is not a safe git identifier"
142
+ };
143
+ }
144
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
145
+ const delayMs = verifyDelaysMs[attempt] ?? verifyDelaysMs.at(-1) ?? 0;
146
+ if (delayMs > 0) {
147
+ await sleep(delayMs);
148
+ }
149
+ const fetchResult = await runPlanningGit(["fetch", "--", remote, remoteBranch], {
150
+ cwd: projectRoot,
151
+ reject: false
152
+ });
153
+ if (fetchResult.exitCode !== 0) {
154
+ if (attempt === maxAttempts - 1) {
155
+ const fetchDetail = fetchResult.stderr?.split("\n").find((line) => line.trim().length > 0) ?? fetchResult.stdout?.split("\n").find((line) => line.trim().length > 0) ?? "fetch failed";
156
+ return {
157
+ ok: false,
158
+ reason: `remote verification fetch failed after ${maxAttempts} attempts: ${fetchDetail}`
159
+ };
160
+ }
161
+ continue;
162
+ }
163
+ const remoteSha = await resolveRemoteBranchSha(projectRoot, remote, remoteBranch);
164
+ if (!remoteSha) {
165
+ if (attempt === maxAttempts - 1) {
166
+ return {
167
+ ok: false,
168
+ reason: `remote branch ${remote}/${remoteBranch} not found after push`
169
+ };
170
+ }
171
+ continue;
172
+ }
173
+ const commitVisible = await remoteContainsCommit(
174
+ projectRoot,
175
+ remote,
176
+ remoteBranch,
177
+ expectedCommitSha
178
+ );
179
+ if (!commitVisible) {
180
+ if (attempt === maxAttempts - 1) {
181
+ return {
182
+ ok: false,
183
+ reason: `remote ${remote}/${remoteBranch} at ${remoteSha} does not contain pushed commit ${expectedCommitSha}`
184
+ };
185
+ }
186
+ continue;
187
+ }
188
+ if (relativePaths.length > 0) {
189
+ const pathCheck = await remoteContainsPaths(projectRoot, remote, remoteBranch, relativePaths);
190
+ if (!pathCheck.ok) {
191
+ if (attempt === maxAttempts - 1) {
192
+ return {
193
+ ok: false,
194
+ reason: `remote ${remote}/${remoteBranch} is missing synced path ${pathCheck.missingPath}`
195
+ };
196
+ }
197
+ continue;
198
+ }
199
+ }
200
+ return { ok: true, remoteSha };
201
+ }
202
+ return { ok: false, reason: "remote verification failed after retries" };
203
+ }
204
+ function isRefspecPushTopology(localBranch, remoteBranch) {
205
+ return localBranch.length > 0 && remoteBranch.length > 0 && localBranch !== remoteBranch;
206
+ }
207
+ async function filterExistingRelativePaths(projectRoot, relativePaths) {
208
+ const existingPaths = [];
209
+ for (const relativePath of relativePaths) {
210
+ try {
211
+ await fs.access(path.join(projectRoot, relativePath));
212
+ existingPaths.push(relativePath);
213
+ } catch {
214
+ }
215
+ }
216
+ return existingPaths;
217
+ }
218
+
219
+ // src/planning/git-sync.ts
220
+ var GENERATED_PLANNING_INDEX_CACHE_REL_PATH = ".poetic/planning/indexes";
221
+ function isDeferSyncEnabled() {
222
+ return readEnv(POETIC_DEFER_SYNC).value ?? false;
223
+ }
224
+ function isMissingRemoteError(output) {
225
+ return /does not appear to be a git repository|couldn't find remote ref|repository .* not found|no such remote/i.test(
226
+ output
227
+ );
228
+ }
229
+ var ManagedSyncBranchError = class extends Error {
230
+ branch;
231
+ defaultBranch;
232
+ constructor(message, details) {
233
+ super(message);
234
+ this.name = "ManagedSyncBranchError";
235
+ this.branch = details?.branch ?? "";
236
+ this.defaultBranch = details?.defaultBranch ?? "";
237
+ }
238
+ };
239
+ function formatManagedSyncBranchError(error) {
240
+ if (error.branch.length > 0 && error.defaultBranch.length > 0) {
241
+ return `Managed auto-sync refuses branch ${error.branch}; switch to ${error.defaultBranch} or use a dedicated backlog sync branch`;
242
+ }
243
+ return error.message;
244
+ }
245
+ function isManagedSyncBranchError(error) {
246
+ return error instanceof ManagedSyncBranchError || error instanceof Error && error.name === "ManagedSyncBranchError";
247
+ }
248
+ async function assertManagedSyncBranch(projectRoot, branch) {
249
+ const defaultBranch = await resolveDefaultBranch(projectRoot);
250
+ if (branch === defaultBranch || branch.startsWith("chore/backlog-sync-")) {
251
+ return;
252
+ }
253
+ throw new ManagedSyncBranchError(
254
+ `Managed auto-sync refuses branch ${branch}; switch to ${defaultBranch} or use a dedicated backlog sync branch`,
255
+ { branch, defaultBranch }
256
+ );
257
+ }
258
+ function firstGitLine(output) {
259
+ return output?.split("\n").find((line) => line.trim().length > 0)?.trim() ?? "unknown";
260
+ }
261
+ function splitNulTerminatedPaths(stdout) {
262
+ return stdout.split("\0").filter((entry) => entry.length > 0);
263
+ }
264
+ function isWithinRelPath(candidate, root) {
265
+ return candidate === root || candidate.startsWith(`${root}/`);
266
+ }
267
+ async function stageIgnoredTrackedPathsForSync(projectRoot, relRootPath) {
268
+ const trackedResult = await runPlanningGit(["ls-files", "-z", "--", relRootPath], {
269
+ cwd: projectRoot,
270
+ reject: false
271
+ });
272
+ if (trackedResult.exitCode !== 0 || trackedResult.stdout.length === 0) {
273
+ return [];
274
+ }
275
+ const trackedPaths = splitNulTerminatedPaths(trackedResult.stdout).filter(
276
+ (trackedPath) => isWithinRelPath(trackedPath, relRootPath)
277
+ );
278
+ if (trackedPaths.length === 0) {
279
+ return [];
280
+ }
281
+ const ignoredTrackedPaths = [];
282
+ for (const trackedPath of trackedPaths) {
283
+ const ignoreResult = await runPlanningGit(
284
+ ["check-ignore", "--no-index", "-q", "--", trackedPath],
285
+ {
286
+ cwd: projectRoot,
287
+ reject: false
288
+ }
289
+ );
290
+ if (ignoreResult.exitCode === 0) {
291
+ ignoredTrackedPaths.push(trackedPath);
292
+ }
293
+ }
294
+ if (ignoredTrackedPaths.length === 0) {
295
+ return [];
296
+ }
297
+ const rmResult = await runPlanningGit(
298
+ ["rm", "--cached", "--ignore-unmatch", "--", ...ignoredTrackedPaths],
299
+ {
300
+ cwd: projectRoot,
301
+ reject: false
302
+ }
303
+ );
304
+ if (rmResult.exitCode !== 0) {
305
+ return [];
306
+ }
307
+ return ignoredTrackedPaths;
308
+ }
309
+ async function stageGeneratedPlanningIndexCacheUntracking(projectRoot) {
310
+ return stageIgnoredTrackedPathsForSync(projectRoot, GENERATED_PLANNING_INDEX_CACHE_REL_PATH);
311
+ }
312
+ async function hasStagedChanges(projectRoot) {
313
+ const result = await runPlanningGit(["diff", "--cached", "--quiet"], {
314
+ cwd: projectRoot,
315
+ reject: false
316
+ });
317
+ return result.exitCode !== 0;
318
+ }
319
+ async function resolvePathsThisSyncWillStage(projectRoot, managedPaths, hadPreexistingStagedChanges) {
320
+ if (managedPaths.length === 0) {
321
+ return [];
322
+ }
323
+ if (!hadPreexistingStagedChanges) {
324
+ return [...managedPaths];
325
+ }
326
+ const alreadyStaged = new Set(await listStagedRelativePaths(projectRoot, managedPaths));
327
+ return managedPaths.filter((managedPath) => !alreadyStaged.has(managedPath));
328
+ }
329
+ async function unstageThisSyncPaths(projectRoot, paths) {
330
+ if (paths.length === 0) {
331
+ return;
332
+ }
333
+ await runPlanningGit(["reset", "--", ...paths], {
334
+ cwd: projectRoot,
335
+ reject: false
336
+ });
337
+ }
338
+ async function snapshotStagedIndexEntries(projectRoot, paths) {
339
+ if (paths.length === 0) {
340
+ return [];
341
+ }
342
+ const result = await runPlanningGit(["ls-files", "-s", "-z", "--", ...paths], {
343
+ cwd: projectRoot,
344
+ reject: false
345
+ });
346
+ if (result.exitCode !== 0 || !result.stdout) {
347
+ return [];
348
+ }
349
+ const entries = [];
350
+ for (const record of result.stdout.split("\0")) {
351
+ if (!record) continue;
352
+ const match = record.match(/^(\d{6}) ([0-9a-f]{40,64}) \d+\t(.+)$/);
353
+ if (!match?.[1] || !match[2] || !match[3]) continue;
354
+ entries.push({ mode: match[1], sha: match[2], path: match[3] });
355
+ }
356
+ return entries;
357
+ }
358
+ async function restoreStagedIndexEntries(projectRoot, entries) {
359
+ for (const entry of entries) {
360
+ await runPlanningGit(["update-index", "--cacheinfo", entry.mode, entry.sha, entry.path], {
361
+ cwd: projectRoot,
362
+ reject: false
363
+ });
364
+ }
365
+ }
366
+ async function captureManagedSyncStaging(projectRoot, managedPaths, hadPreexistingStagedChanges) {
367
+ const pathsThisSyncWillStage = await resolvePathsThisSyncWillStage(
368
+ projectRoot,
369
+ managedPaths,
370
+ hadPreexistingStagedChanges
371
+ );
372
+ return {
373
+ pathsThisSyncWillStage,
374
+ overlappingStagedSnapshots: await snapshotStagedIndexEntries(
375
+ projectRoot,
376
+ managedPaths.filter((managedPath) => !pathsThisSyncWillStage.includes(managedPath))
377
+ )
378
+ };
379
+ }
380
+ async function abandonManagedSyncStaging(projectRoot, state) {
381
+ await unstageThisSyncPaths(projectRoot, state.pathsStagedByThisSync);
382
+ await restoreStagedIndexEntries(projectRoot, state.overlappingStagedSnapshots);
383
+ }
384
+ async function stageManagedSyncPaths(projectRoot, relativePaths, hadPreexistingStagedChanges) {
385
+ const captured = await captureManagedSyncStaging(
386
+ projectRoot,
387
+ relativePaths,
388
+ hadPreexistingStagedChanges
389
+ );
390
+ if (relativePaths.length > 0) {
391
+ await runPlanningGit(["add", ...relativePaths], { cwd: projectRoot });
392
+ }
393
+ const generatedCacheUntrackedPaths = hadPreexistingStagedChanges ? [] : await stageGeneratedPlanningIndexCacheUntracking(projectRoot);
394
+ return {
395
+ stagingState: {
396
+ overlappingStagedSnapshots: captured.overlappingStagedSnapshots,
397
+ pathsStagedByThisSync: [...captured.pathsThisSyncWillStage, ...generatedCacheUntrackedPaths]
398
+ },
399
+ generatedCacheUntrackedPaths
400
+ };
401
+ }
402
+ async function listStagedRelativePaths(projectRoot, pathspecs) {
403
+ if (pathspecs.length === 0) {
404
+ return [];
405
+ }
406
+ const result = await runPlanningGit(
407
+ ["diff", "--cached", "--name-only", "-z", "--", ...pathspecs],
408
+ { cwd: projectRoot, reject: false }
409
+ );
410
+ return splitNulTerminatedPaths(result.stdout);
411
+ }
412
+ async function verifyManagedSyncPushBoundary(projectRoot, remote, remoteBranch, preSyncHeadSha, remoteBranchExists) {
413
+ if (!preSyncHeadSha) {
414
+ return {
415
+ ok: false,
416
+ reason: "could not resolve the pre-sync commit",
417
+ kind: "unresolved-base"
418
+ };
419
+ }
420
+ if (!isSafeGitRemoteAndRef(remote, remoteBranchExists ? remoteBranch : "HEAD")) {
421
+ return {
422
+ ok: false,
423
+ reason: "upstream remote or branch name is not a safe git identifier",
424
+ kind: "unresolved-base"
425
+ };
426
+ }
427
+ const fetchResult = await runPlanningGit(
428
+ remoteBranchExists ? ["fetch", "--", remote, remoteBranch] : ["fetch", "--", remote],
429
+ {
430
+ cwd: projectRoot,
431
+ reject: false
432
+ }
433
+ );
434
+ if (fetchResult.exitCode !== 0) {
435
+ return {
436
+ ok: false,
437
+ reason: `fetch failed: ${firstGitLine(fetchResult.stderr ?? fetchResult.stdout)}`,
438
+ kind: "fetch-failed"
439
+ };
440
+ }
441
+ const ancestryResult = remoteBranchExists ? await runPlanningGit(["merge-base", "--is-ancestor", preSyncHeadSha, "FETCH_HEAD"], {
442
+ cwd: projectRoot,
443
+ reject: false
444
+ }) : await runPlanningGit(
445
+ [
446
+ "for-each-ref",
447
+ "--format=%(refname)",
448
+ "--contains",
449
+ preSyncHeadSha,
450
+ `refs/remotes/${remote}/`
451
+ ],
452
+ { cwd: projectRoot, reject: false }
453
+ );
454
+ const baseIsPublished = ancestryResult.exitCode === 0 && (remoteBranchExists || ancestryResult.stdout.trim().length > 0);
455
+ if (!baseIsPublished) {
456
+ return {
457
+ ok: false,
458
+ reason: "the local branch already contained commits not present on the remote before managed sync",
459
+ kind: "unpublished-base"
460
+ };
461
+ }
462
+ return { ok: true };
463
+ }
464
+ async function resolveManagedSyncPushCandidate(projectRoot, expectedParentSha, allowedPaths) {
465
+ const headResult = await runPlanningGit(["rev-parse", "HEAD"], {
466
+ cwd: projectRoot,
467
+ reject: false
468
+ });
469
+ const candidateSha = headResult.exitCode === 0 ? headResult.stdout.trim() : "";
470
+ if (!candidateSha || !expectedParentSha) {
471
+ return { ok: false, reason: "could not resolve the managed sync candidate or its parent" };
472
+ }
473
+ const parentResult = await runPlanningGit(["rev-parse", `${candidateSha}^`], {
474
+ cwd: projectRoot,
475
+ reject: false
476
+ });
477
+ if (parentResult.exitCode !== 0 || parentResult.stdout.trim() !== expectedParentSha) {
478
+ return {
479
+ ok: false,
480
+ reason: "the final candidate was not exactly one managed sync commit above the remote base"
481
+ };
482
+ }
483
+ const changedPathsResult = await runPlanningGit(
484
+ ["diff-tree", "--no-commit-id", "--name-only", "-r", "-z", candidateSha],
485
+ { cwd: projectRoot, reject: false }
486
+ );
487
+ const changedPaths = splitNulTerminatedPaths(changedPathsResult.stdout);
488
+ const allowedPathSet = new Set(allowedPaths);
489
+ if (changedPathsResult.exitCode !== 0 || changedPaths.length === 0 || changedPaths.some((changedPath) => !allowedPathSet.has(changedPath))) {
490
+ return {
491
+ ok: false,
492
+ reason: "the final candidate changed paths outside the managed sync scope"
493
+ };
494
+ }
495
+ return { ok: true, sha: candidateSha };
496
+ }
497
+ async function syncPlanningFiles(projectRoot, filePaths, commitMessage, options = {}) {
498
+ const warnOrThrow = (message) => {
499
+ if (options.strict) {
500
+ throw new Error(message);
501
+ }
502
+ if (!options.silent) {
503
+ console.log(chalk.yellow(` ${message}`));
504
+ }
505
+ };
506
+ const warnOrThrowRemoteSync = (message) => {
507
+ if (options.strict && !options.allowPushFailure) {
508
+ throw new Error(message);
509
+ }
510
+ if (!options.silent) {
511
+ console.log(chalk.yellow(` ${message}`));
512
+ }
513
+ };
514
+ const stagingState = {
515
+ pathsStagedByThisSync: [],
516
+ overlappingStagedSnapshots: []
517
+ };
518
+ try {
519
+ const relativePaths = [
520
+ ...new Set(filePaths.map((fp) => toRepoRelativePath(projectRoot, fp)))
521
+ ].filter((fp) => fp.length > 0);
522
+ if (relativePaths.length === 0) {
523
+ if (options.strict && options.requireStagedChanges) {
524
+ throw new Error("Sync made no staged changes: no managed paths were provided");
525
+ }
526
+ return;
527
+ }
528
+ const syncablePaths = [];
529
+ for (const relativePath of relativePaths) {
530
+ const ignoreResult = await runPlanningGit(["check-ignore", "-q", "--", relativePath], {
531
+ cwd: projectRoot,
532
+ reject: false
533
+ });
534
+ if (ignoreResult.exitCode !== 0) {
535
+ syncablePaths.push(relativePath);
536
+ }
537
+ }
538
+ const hadPreexistingStagedChanges = await hasStagedChanges(projectRoot);
539
+ const capturedStaging = await captureManagedSyncStaging(
540
+ projectRoot,
541
+ syncablePaths,
542
+ hadPreexistingStagedChanges
543
+ );
544
+ const pathsThisSyncWillStage = capturedStaging.pathsThisSyncWillStage;
545
+ stagingState.overlappingStagedSnapshots = capturedStaging.overlappingStagedSnapshots;
546
+ const generatedCacheUntrackedPaths = hadPreexistingStagedChanges ? [] : await stageGeneratedPlanningIndexCacheUntracking(projectRoot);
547
+ const canCommitAllStaged = generatedCacheUntrackedPaths.length > 0;
548
+ const commitPaths = [...syncablePaths, ...generatedCacheUntrackedPaths];
549
+ const commitManagedPaths = () => runPlanningGit(
550
+ canCommitAllStaged ? ["commit", "-m", commitMessage] : ["commit", "-m", commitMessage, "--", ...commitPaths],
551
+ { cwd: projectRoot, reject: false }
552
+ );
553
+ if (commitPaths.length === 0) {
554
+ if (options.strict && options.requireStagedChanges) {
555
+ throw new Error(
556
+ `Sync made no staged changes for ignored paths: ${relativePaths.join(", ")}`
557
+ );
558
+ }
559
+ return;
560
+ }
561
+ if (syncablePaths.length > 0) {
562
+ await runPlanningGit(["add", ...syncablePaths], { cwd: projectRoot });
563
+ }
564
+ stagingState.pathsStagedByThisSync = [
565
+ ...pathsThisSyncWillStage,
566
+ ...generatedCacheUntrackedPaths
567
+ ];
568
+ const diffResult = await runPlanningGit(
569
+ canCommitAllStaged ? ["diff", "--cached", "--quiet"] : ["diff", "--cached", "--quiet", "--", ...commitPaths],
570
+ {
571
+ cwd: projectRoot,
572
+ reject: false
573
+ }
574
+ );
575
+ if (diffResult.exitCode === 0) {
576
+ if (options.strict && options.requireStagedChanges) {
577
+ throw new Error(`Sync made no staged changes for: ${commitPaths.join(", ")}`);
578
+ }
579
+ return;
580
+ }
581
+ const branchResult = await runPlanningGit(["rev-parse", "--abbrev-ref", "HEAD"], {
582
+ cwd: projectRoot,
583
+ reject: false
584
+ });
585
+ const branch = branchResult.exitCode === 0 ? branchResult.stdout.trim() : "";
586
+ if (!branch || branch === "HEAD") {
587
+ const detachedCommit = await commitManagedPaths();
588
+ if (detachedCommit.exitCode === 0) {
589
+ warnOrThrowRemoteSync("Committed locally (detached HEAD - skipped push)");
590
+ } else {
591
+ warnOrThrow(
592
+ `Commit failed (detached HEAD): ${detachedCommit.stderr?.split("\n")[0] ?? detachedCommit.stdout?.split("\n")[0] ?? "unknown"}`
593
+ );
594
+ }
595
+ return;
596
+ }
597
+ await assertManagedSyncBranch(projectRoot, branch);
598
+ const upstreamResult = await runPlanningGit(
599
+ ["rev-parse", "--abbrev-ref", `${branch}@{upstream}`],
600
+ { cwd: projectRoot, reject: false }
601
+ );
602
+ let remote = "origin";
603
+ let remoteBranch = branch;
604
+ const hasUpstream = upstreamResult.exitCode === 0;
605
+ if (hasUpstream) {
606
+ const upstream = upstreamResult.stdout.trim();
607
+ const slashIdx = upstream.indexOf("/");
608
+ if (slashIdx > 0) {
609
+ remote = upstream.slice(0, slashIdx);
610
+ remoteBranch = upstream.slice(slashIdx + 1);
611
+ }
612
+ }
613
+ if (!isSafeGitRemoteAndRef(remote, remoteBranch)) {
614
+ const unsafeCommit = await commitManagedPaths();
615
+ if (unsafeCommit.exitCode !== 0) {
616
+ warnOrThrow(`Commit failed: ${unsafeCommit.stderr?.split("\n")[0] ?? "unknown"}`);
617
+ return;
618
+ }
619
+ warnOrThrowRemoteSync(
620
+ "Committed locally but upstream remote or branch name is not a safe git identifier - push skipped"
621
+ );
622
+ return;
623
+ }
624
+ const preSyncHeadResult = await runPlanningGit(["rev-parse", "HEAD"], {
625
+ cwd: projectRoot,
626
+ reject: false
627
+ });
628
+ const preSyncHeadSha = preSyncHeadResult.exitCode === 0 ? preSyncHeadResult.stdout.trim() : "";
629
+ const remoteBranchResult = await runPlanningGit(
630
+ ["ls-remote", "--heads", "--", remote, remoteBranch],
631
+ {
632
+ cwd: projectRoot,
633
+ reject: false
634
+ }
635
+ );
636
+ const remoteBranchExists = remoteBranchResult.stdout.trim().length > 0;
637
+ if (remoteBranchResult.exitCode !== 0 && isMissingRemoteError(`${remoteBranchResult.stderr ?? ""}
638
+ ${remoteBranchResult.stdout ?? ""}`)) {
639
+ const offlineCommit = await commitManagedPaths();
640
+ if (offlineCommit.exitCode !== 0) {
641
+ warnOrThrow(`Commit failed: ${offlineCommit.stderr?.split("\n")[0] ?? "unknown"}`);
642
+ return;
643
+ }
644
+ warnOrThrowRemoteSync("Committed locally; no remote repository configured - push skipped");
645
+ return;
646
+ }
647
+ const pushBoundary = await verifyManagedSyncPushBoundary(
648
+ projectRoot,
649
+ remote,
650
+ remoteBranch,
651
+ preSyncHeadSha,
652
+ remoteBranchExists
653
+ );
654
+ if (!pushBoundary.ok && pushBoundary.kind === "unpublished-base") {
655
+ warnOrThrowRemoteSync(
656
+ `Not committed: ${pushBoundary.reason} - managed changes left staged, push skipped`
657
+ );
658
+ return;
659
+ }
660
+ const commitResult = await commitManagedPaths();
661
+ if (commitResult.exitCode !== 0) {
662
+ warnOrThrow(`Commit failed: ${commitResult.stderr?.split("\n")[0] ?? "unknown"}`);
663
+ return;
664
+ }
665
+ if (!pushBoundary.ok) {
666
+ warnOrThrowRemoteSync(`Committed locally but ${pushBoundary.reason} - push skipped`);
667
+ return;
668
+ }
669
+ const refspecTopology = isRefspecPushTopology(branch, remoteBranch);
670
+ const maxSyncAttempts = refspecTopology ? 1 : 3;
671
+ for (let attempt = 1; attempt <= maxSyncAttempts; attempt++) {
672
+ let expectedParentSha = preSyncHeadSha;
673
+ if (remoteBranchExists && !refspecTopology) {
674
+ const remoteHeadResult = await runPlanningGit(["rev-parse", "FETCH_HEAD"], {
675
+ cwd: projectRoot,
676
+ reject: false
677
+ });
678
+ expectedParentSha = remoteHeadResult.exitCode === 0 ? remoteHeadResult.stdout.trim() : "";
679
+ const rebaseResult = await runPlanningGit(["rebase", "FETCH_HEAD"], {
680
+ cwd: projectRoot,
681
+ reject: false
682
+ });
683
+ if (rebaseResult.exitCode !== 0) {
684
+ const rebaseStderr = rebaseResult.stderr ?? "";
685
+ const rebaseStdout = rebaseResult.stdout ?? "";
686
+ const rebaseOutputCombined = `${rebaseStderr}
687
+ ${rebaseStdout}`.toLowerCase();
688
+ const isConflict = rebaseOutputCombined.includes("conflict") || rebaseOutputCombined.includes("could not apply");
689
+ await runPlanningGit(["rebase", "--abort"], { cwd: projectRoot, reject: false });
690
+ const reason = isConflict ? "rebase conflicted (aborted rebase)" : `rebase failed: ${firstGitLine(rebaseStderr || rebaseStdout)}`;
691
+ warnOrThrowRemoteSync(`Committed locally but ${reason} - push skipped`);
692
+ return;
693
+ }
694
+ }
695
+ const candidate = await resolveManagedSyncPushCandidate(
696
+ projectRoot,
697
+ expectedParentSha,
698
+ commitPaths
699
+ );
700
+ if (!candidate.ok) {
701
+ warnOrThrowRemoteSync(`Committed locally but ${candidate.reason} - push skipped`);
702
+ return;
703
+ }
704
+ const shouldSetUpstream = !hasUpstream || !remoteBranchExists;
705
+ const pushArgs = shouldSetUpstream ? ["push", "-u", "--", remote, `${candidate.sha}:refs/heads/${remoteBranch}`] : ["push", "--", remote, `${candidate.sha}:${remoteBranch}`];
706
+ const pushResult = await runPlanningGit(pushArgs, {
707
+ cwd: projectRoot,
708
+ reject: false
709
+ });
710
+ if (pushResult.exitCode === 0) {
711
+ const verifyResult = await verifyRemoteSyncPush({
712
+ projectRoot,
713
+ remote,
714
+ remoteBranch,
715
+ relativePaths: await filterExistingRelativePaths(projectRoot, syncablePaths),
716
+ expectedCommitSha: candidate.sha
717
+ });
718
+ if (verifyResult.ok) {
719
+ if (!options.silent) {
720
+ console.log(chalk.gray(" Synced to remote"));
721
+ }
722
+ return;
723
+ }
724
+ warnOrThrowRemoteSync(
725
+ `Committed locally but remote verification failed: ${verifyResult.reason} - treat push as failed`
726
+ );
727
+ return;
728
+ }
729
+ const pushOutput = `${pushResult.stderr ?? ""}
730
+ ${pushResult.stdout ?? ""}`;
731
+ const pushError = pushOutput.toLowerCase();
732
+ const isNonFastForward = pushError.includes("non-fast-forward") || pushError.includes("fetch first") || pushError.includes("failed to push some refs");
733
+ if (!isNonFastForward || attempt === maxSyncAttempts) {
734
+ if (isMissingRemoteError(pushOutput)) {
735
+ warnOrThrowRemoteSync(
736
+ "Committed locally; no remote repository configured - push skipped"
737
+ );
738
+ return;
739
+ }
740
+ warnOrThrowRemoteSync(
741
+ `Committed locally but push failed: ${firstGitLine(pushResult.stderr ?? pushResult.stdout)}`
742
+ );
743
+ return;
744
+ }
745
+ const refreshedBoundary = await verifyManagedSyncPushBoundary(
746
+ projectRoot,
747
+ remote,
748
+ remoteBranch,
749
+ preSyncHeadSha,
750
+ true
751
+ );
752
+ if (!refreshedBoundary.ok) {
753
+ warnOrThrowRemoteSync(`Committed locally but ${refreshedBoundary.reason} - push skipped`);
754
+ return;
755
+ }
756
+ }
757
+ } catch (error) {
758
+ if (isManagedSyncBranchError(error)) {
759
+ await abandonManagedSyncStaging(projectRoot, stagingState);
760
+ throw error;
761
+ }
762
+ if (options.strict) {
763
+ throw error;
764
+ }
765
+ if (!options.silent) {
766
+ console.log(
767
+ chalk.yellow(
768
+ ` Auto-sync failed: ${error.message?.split("\n")[0] ?? "unknown error"}`
769
+ )
770
+ );
771
+ }
772
+ }
773
+ }
774
+ async function syncManagedItemFiles(projectRoot, filePaths, commitMessage, options = {}) {
775
+ if (options.sync === false) {
776
+ return;
777
+ }
778
+ if (isDeferSyncEnabled()) {
779
+ return;
780
+ }
781
+ await syncPlanningFiles(projectRoot, filePaths, commitMessage, {
782
+ silent: options.silent ?? false
783
+ });
784
+ }
785
+
786
+ // src/planning/team-visibility-read-model.ts
787
+ import * as path2 from "path";
788
+ function unavailable(reason) {
789
+ return { status: "unavailable", reason };
790
+ }
791
+ function available(value) {
792
+ return { status: "available", value };
793
+ }
794
+ function projectUpdateAge(updatedAt, nowMs) {
795
+ const updatedAtMs = Date.parse(updatedAt);
796
+ if (!Number.isFinite(updatedAtMs)) {
797
+ return unavailable("Task update timestamp is invalid");
798
+ }
799
+ if (updatedAtMs > nowMs) {
800
+ return unavailable("Task update timestamp is in the future");
801
+ }
802
+ return available(nowMs - updatedAtMs);
803
+ }
804
+ function projectActiveTeamWork(tasks, options = {}) {
805
+ const nowMs = (options.now ?? /* @__PURE__ */ new Date()).getTime();
806
+ const branchesByTaskId = new Map(
807
+ (options.branches ?? []).filter((entry) => entry.branch.trim().length > 0).map((entry) => [entry.taskId, entry.branch.trim()])
808
+ );
809
+ return tasks.filter((task) => task.status === "in_progress").map((task) => {
810
+ const assignee = task.assignee?.trim();
811
+ const branch = branchesByTaskId.get(task.id);
812
+ return {
813
+ id: task.id,
814
+ title: task.title,
815
+ status: task.status,
816
+ assignee: assignee ? available(assignee) : unavailable("Task has no assignee"),
817
+ branch: branch ? available(branch) : unavailable("No branch evidence is associated with this task"),
818
+ updatedAt: task.updated_at,
819
+ updateAgeMs: projectUpdateAge(task.updated_at, nowMs)
820
+ };
821
+ });
822
+ }
823
+ function planningPathspecs(repoRoot) {
824
+ return Array.from(
825
+ new Set(
826
+ listEnabledBuckets(repoRoot).flatMap((bucket) => [
827
+ getBucketPathByKind(bucket.name, repoRoot),
828
+ getBucketArchivePathByKind(bucket.name, repoRoot)
829
+ ]).map((bucketPath) => path2.relative(repoRoot, bucketPath).replace(/\\/g, "/")).filter((bucketPath) => bucketPath.length > 0 && !bucketPath.startsWith("..")).sort()
830
+ )
831
+ );
832
+ }
833
+ async function queryUnpushedPlanningCommits(repoRoot, git) {
834
+ let pathspecs;
835
+ try {
836
+ pathspecs = planningPathspecs(repoRoot);
837
+ } catch (error) {
838
+ const message = error instanceof Error ? error.message : String(error);
839
+ return unavailable(`Planning bucket paths are unavailable: ${message}`);
840
+ }
841
+ if (pathspecs.length === 0) {
842
+ return unavailable("No enabled planning bucket paths are configured");
843
+ }
844
+ try {
845
+ const upstream = await git(
846
+ ["rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{upstream}"],
847
+ { cwd: repoRoot }
848
+ );
849
+ const upstreamRef = upstream.stdout.trim();
850
+ if (upstream.exitCode !== 0 || upstreamRef.length === 0) {
851
+ return unavailable("Current branch has no available upstream tracking ref");
852
+ }
853
+ const countResult = await git(
854
+ ["rev-list", "--count", `${upstreamRef}..HEAD`, "--", ...pathspecs],
855
+ { cwd: repoRoot }
856
+ );
857
+ const countText = countResult.stdout.trim();
858
+ const count = Number.parseInt(countText, 10);
859
+ if (countResult.exitCode !== 0 || !/^\d+$/.test(countText) || !Number.isSafeInteger(count) || count < 0) {
860
+ return unavailable("Git could not determine the unpushed planning commit count");
861
+ }
862
+ return available(count);
863
+ } catch (error) {
864
+ const message = error instanceof Error ? error.message : String(error);
865
+ return unavailable(`Git evidence is unavailable: ${message}`);
866
+ }
867
+ }
868
+ async function queryPlanningSyncHealth(options) {
869
+ const lastSyncFailure = options.lastSyncFailure;
870
+ const failureMessage = lastSyncFailure?.message.trim();
871
+ return {
872
+ advisory: true,
873
+ deferSyncActive: options.deferSyncEnabled ?? isDeferSyncEnabled(),
874
+ unpushedPlanningCommits: await queryUnpushedPlanningCommits(
875
+ options.repoRoot,
876
+ options.git ?? execGit
877
+ ),
878
+ lastSyncFailure: lastSyncFailure && failureMessage ? available({ ...lastSyncFailure, message: failureMessage }) : unavailable("Planning sync failures are not persisted by the current sync path")
879
+ };
880
+ }
881
+ async function queryTeamVisibility(options) {
882
+ const now = options.now ?? /* @__PURE__ */ new Date();
883
+ const [work, syncHealth] = await Promise.all([
884
+ Promise.resolve(projectActiveTeamWork(options.tasks, { branches: options.branches, now })),
885
+ queryPlanningSyncHealth(options)
886
+ ]);
887
+ return { observedAt: now.toISOString(), work, syncHealth };
888
+ }
889
+
890
+ // src/planning/planning-workspace-envelope.ts
891
+ var PLANNING_WORKSPACE_ENVELOPE_VERSION = "1.0.0";
892
+ function unavailable2(error) {
893
+ return { state: "unavailable", reason: error instanceof Error ? error.message : String(error) };
894
+ }
895
+ async function defaultTeamVisibility() {
896
+ const tasks = await getAllTasks();
897
+ return queryTeamVisibility({
898
+ repoRoot: getPlanningRoot(),
899
+ tasks: tasks.map((task) => task.yaml)
900
+ });
901
+ }
902
+ async function buildPlanningWorkspaceEnvelopeV1(readers = {}) {
903
+ const [canonicalResult, visibilityResult] = await Promise.allSettled([
904
+ (readers.queryCanonical ?? queryCanonicalPlanningProjection)(),
905
+ (readers.queryTeamVisibility ?? defaultTeamVisibility)()
906
+ ]);
907
+ return {
908
+ schemaVersion: PLANNING_WORKSPACE_ENVELOPE_VERSION,
909
+ canonical: canonicalResult.status === "fulfilled" ? {
910
+ state: "available",
911
+ value: {
912
+ activeSprint: canonicalResult.value.activeSprint,
913
+ tasks: canonicalResult.value.tasks,
914
+ // Preserve Poetic order and whyIncluded; BB must not re-rank.
915
+ nextCandidates: canonicalResult.value.nextCandidates
916
+ }
917
+ } : unavailable2(canonicalResult.reason),
918
+ teamVisibility: visibilityResult.status === "fulfilled" ? { state: "available", value: visibilityResult.value } : unavailable2(visibilityResult.reason)
919
+ };
920
+ }
921
+
922
+ // src/planning/sprint-status-read-model.ts
923
+ async function querySprintStatus(sprintId) {
924
+ let targetSprintId = sprintId;
925
+ if (!targetSprintId) {
926
+ const current = await getCurrentSprint();
927
+ if (!current) return null;
928
+ targetSprintId = current.yaml.id;
929
+ }
930
+ const [capacity, allTasks, activeSprints, archivedSprints, repositoryTasks] = await Promise.all([
931
+ calculateCapacity(targetSprintId),
932
+ listTasksInSprint(targetSprintId),
933
+ listSprints(false),
934
+ listSprints(true),
935
+ getAllTasks({ includeArchive: true })
936
+ ]);
937
+ const activeSprint = activeSprints.find((s) => s.id === targetSprintId);
938
+ const archivedSprint = archivedSprints.find((s) => s.id === targetSprintId);
939
+ const sprint = activeSprint ?? archivedSprint;
940
+ const archived = !activeSprint && Boolean(archivedSprint);
941
+ const missingTaskIds = allTasks.filter((t) => t.missing === true).map((t) => t.id);
942
+ const tasks = allTasks.filter((t) => t.missing !== true);
943
+ const tasksByStatus = {
944
+ todo: tasks.filter((t) => t.status === "todo"),
945
+ in_progress: tasks.filter((t) => t.status === "in_progress"),
946
+ review: tasks.filter((t) => t.status === "review"),
947
+ done: tasks.filter((t) => t.status === "done"),
948
+ blocked: tasks.filter((t) => t.status === "blocked"),
949
+ cancelled: tasks.filter((t) => t.status === "cancelled")
950
+ };
951
+ const activeDoneHours = tasksByStatus.done.reduce((sum, task) => sum + task.estimatedHours, 0);
952
+ const archivedDoneTasks = repositoryTasks.filter((result) => result.isArchived).map((result) => result.yaml).filter((task) => task.status === "done" && task.originalSprintId === targetSprintId);
953
+ const archivedDoneHours = archivedDoneTasks.reduce((sum, task) => sum + task.estimatedHours, 0);
954
+ const allDone = tasks.length > 0 && tasksByStatus.done.length === tasks.length;
955
+ const allTerminal = tasks.length > 0 && tasksByStatus.done.length + tasksByStatus.blocked.length + tasksByStatus.cancelled.length === tasks.length;
956
+ const readiness = computeSprintTerminalReadiness(allTasks);
957
+ const integrityClean = readiness.missingTaskIds.length === 0;
958
+ const closable = sprint?.status === "active" && readiness.ready;
959
+ return {
960
+ sprintId: targetSprintId,
961
+ name: sprint?.name ?? targetSprintId,
962
+ status: sprint?.status ?? "unknown",
963
+ archived,
964
+ startDate: sprint?.startDate,
965
+ endDate: sprint?.endDate,
966
+ goal: sprint?.goal,
967
+ capacity: {
968
+ allocatedHours: capacity.allocatedHours,
969
+ totalHours: capacity.totalHours,
970
+ utilizationPercent: capacity.utilizationPercent
971
+ },
972
+ completedCapacity: {
973
+ activeDoneHours,
974
+ archivedDoneHours,
975
+ totalDoneHours: activeDoneHours + archivedDoneHours,
976
+ archivedTaskCount: archivedDoneTasks.length
977
+ },
978
+ progress: {
979
+ todo: tasksByStatus.todo.length,
980
+ in_progress: tasksByStatus.in_progress.length,
981
+ review: tasksByStatus.review.length,
982
+ done: tasksByStatus.done.length,
983
+ blocked: tasksByStatus.blocked.length,
984
+ cancelled: tasksByStatus.cancelled.length,
985
+ total: tasks.length,
986
+ allDone,
987
+ allTerminal,
988
+ integrityClean,
989
+ closable
990
+ },
991
+ tasks: tasks.map((t) => ({
992
+ id: t.id,
993
+ title: t.title,
994
+ status: t.status,
995
+ estimatedHours: t.estimatedHours,
996
+ ...typeof t.expectedRuntimeMinutes === "number" && t.expectedRuntimeMinutes > 0 ? { expectedRuntimeMinutes: t.expectedRuntimeMinutes } : {},
997
+ resultArtifactPath: t.resultArtifactPath
998
+ })),
999
+ missingTaskIds
1000
+ };
1001
+ }
1002
+
1003
+ export {
1004
+ runPlanningGit,
1005
+ verifyRemoteSyncPush,
1006
+ isRefspecPushTopology,
1007
+ filterExistingRelativePaths,
1008
+ isDeferSyncEnabled,
1009
+ isMissingRemoteError,
1010
+ ManagedSyncBranchError,
1011
+ formatManagedSyncBranchError,
1012
+ isManagedSyncBranchError,
1013
+ assertManagedSyncBranch,
1014
+ hasStagedChanges,
1015
+ abandonManagedSyncStaging,
1016
+ stageManagedSyncPaths,
1017
+ verifyManagedSyncPushBoundary,
1018
+ resolveManagedSyncPushCandidate,
1019
+ syncPlanningFiles,
1020
+ syncManagedItemFiles,
1021
+ buildPlanningWorkspaceEnvelopeV1,
1022
+ querySprintStatus
1023
+ };
1024
+ //# sourceMappingURL=chunk-F23DIWNN.js.map