@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,1270 @@
1
+ import {
2
+ listFindings,
3
+ listIssues,
4
+ loadIssuePolicy,
5
+ severityToPriority
6
+ } from "./chunk-BZU2O43F.js";
7
+ import {
8
+ estimateRuntime
9
+ } from "./chunk-LDCF2MKN.js";
10
+ import {
11
+ isBacklogExecutionProvenanceActivelyExecuting,
12
+ loadBacklogExecutionProvenance
13
+ } from "./chunk-NM6PMYY4.js";
14
+ import {
15
+ buildGraphBlockersView,
16
+ loadWorkGraphContext
17
+ } from "./chunk-YVORHQ2S.js";
18
+ import {
19
+ listActive
20
+ } from "./chunk-O47UOKU3.js";
21
+ import {
22
+ findBacklogItem,
23
+ listBacklogItems,
24
+ validateDebtItem
25
+ } from "./chunk-LH5QY22X.js";
26
+ import {
27
+ getArchivedFilePath
28
+ } from "./chunk-OYZYO7TV.js";
29
+ import {
30
+ generateId
31
+ } from "./chunk-VNSYKC25.js";
32
+ import {
33
+ getPlanningRoot,
34
+ withIndexRegeneration
35
+ } from "./chunk-OPYFYTWQ.js";
36
+ import {
37
+ generateIndexes
38
+ } from "./chunk-DSFM56OA.js";
39
+ import {
40
+ getBucketArchivePathByKind,
41
+ getBucketByName,
42
+ getBucketPathByKind
43
+ } from "./chunk-HOYBYAOA.js";
44
+ import {
45
+ listMarkdownFiles,
46
+ listMarkdownFilesRecursive,
47
+ parseMarkdownFile,
48
+ readMarkdownFile
49
+ } from "./chunk-OIS7J26S.js";
50
+ import {
51
+ emitWarning
52
+ } from "./chunk-EJGCZGUF.js";
53
+
54
+ // src/core/read-models/next.ts
55
+ import * as fs2 from "fs/promises";
56
+ import * as path2 from "path";
57
+ import { execa } from "execa";
58
+
59
+ // src/planning/tech-debt-manager.ts
60
+ import * as fsSync from "fs";
61
+ import * as fs from "fs/promises";
62
+ import * as path from "path";
63
+ import * as yaml from "js-yaml";
64
+ var severityImpactDefaults = {
65
+ critical: 9,
66
+ high: 7,
67
+ medium: 5,
68
+ low: 3
69
+ };
70
+ var EFFORT_TO_HOURS = {
71
+ low: 2,
72
+ medium: 6,
73
+ high: 12
74
+ };
75
+ var EFFORT_TO_AI_BASE_MINUTES = {
76
+ low: 5,
77
+ medium: 20,
78
+ high: 90
79
+ };
80
+ var EFFORT_TO_COMPLEXITY = {
81
+ low: 0.3,
82
+ medium: 0.5,
83
+ high: 0.7
84
+ };
85
+ function effortToNominalHours(effort) {
86
+ return EFFORT_TO_HOURS[effort];
87
+ }
88
+ function effortToNominalComplexity(effort) {
89
+ return EFFORT_TO_COMPLEXITY[effort];
90
+ }
91
+ function resolveDebtRuntimeEstimate(effort, explicitMinutes) {
92
+ if (typeof explicitMinutes === "number" && Number.isFinite(explicitMinutes)) {
93
+ if (explicitMinutes <= 0) return {};
94
+ return {
95
+ // Clamp to [1, 1440]: sub-minute values persist as a valid minute rather
96
+ // than rounding to 0, and programmatic callers (createDebtItemAsync /
97
+ // updateDebtItemAsync are exported) cannot persist values above the
98
+ // shared ExpectedRuntimeMinutesSchema ceiling that the CLI enforces.
99
+ expectedRuntimeMinutes: Math.min(1440, Math.max(1, Math.round(explicitMinutes))),
100
+ runtimeEstimateProvenance: "explicit",
101
+ runtimeEstimateConfidence: "medium"
102
+ };
103
+ }
104
+ const estimate = estimateRuntime({
105
+ baseExpectedRuntimeMs: EFFORT_TO_AI_BASE_MINUTES[effort] * 6e4
106
+ });
107
+ return {
108
+ expectedRuntimeMinutes: Math.round(estimate.expectedRuntimeMs / 6e4),
109
+ runtimeEstimateProvenance: estimate.provenance,
110
+ runtimeEstimateConfidence: estimate.confidence
111
+ };
112
+ }
113
+ function coerceDebtRuntimeEstimate(raw) {
114
+ const result = {};
115
+ const rawMinutes = raw.expectedRuntimeMinutes;
116
+ const minutes = typeof rawMinutes === "number" ? rawMinutes : typeof rawMinutes === "string" && rawMinutes.trim() !== "" ? Number(rawMinutes) : void 0;
117
+ if (typeof minutes === "number" && Number.isFinite(minutes) && minutes > 0) {
118
+ result.expectedRuntimeMinutes = minutes;
119
+ }
120
+ const provenance = raw.runtimeEstimateProvenance;
121
+ if (provenance === "heuristic" || provenance === "telemetry" || provenance === "blended" || provenance === "explicit") {
122
+ result.runtimeEstimateProvenance = provenance;
123
+ }
124
+ const confidence = raw.runtimeEstimateConfidence;
125
+ if (confidence === "low" || confidence === "medium" || confidence === "high") {
126
+ result.runtimeEstimateConfidence = confidence;
127
+ }
128
+ return result;
129
+ }
130
+ var legacyImpactLabels = {
131
+ critical: severityImpactDefaults.critical,
132
+ high: severityImpactDefaults.high,
133
+ medium: severityImpactDefaults.medium,
134
+ low: severityImpactDefaults.low
135
+ };
136
+ function defaultImpactForSeverity(severity) {
137
+ return severityImpactDefaults[severity ?? "medium"];
138
+ }
139
+ function coerceImpact(value, severity) {
140
+ let parsed;
141
+ if (typeof value === "number" && Number.isFinite(value)) {
142
+ parsed = value;
143
+ } else if (typeof value === "string") {
144
+ const trimmed = value.trim().toLowerCase();
145
+ const numericMatch = trimmed.match(/\d+(?:\.\d+)?/);
146
+ if (numericMatch) {
147
+ parsed = Number(numericMatch[0]);
148
+ } else if (trimmed in legacyImpactLabels) {
149
+ parsed = legacyImpactLabels[trimmed];
150
+ }
151
+ }
152
+ const impact = parsed ?? defaultImpactForSeverity(severity);
153
+ return Math.min(10, Math.max(1, Math.round(impact)));
154
+ }
155
+ function normalizeDebtItem(raw) {
156
+ const severity = raw.severity ?? "medium";
157
+ const effort = raw.effort ?? "medium";
158
+ const normalized = {
159
+ id: raw.id ?? "",
160
+ kind: "tech-debt",
161
+ title: raw.title ?? raw.id ?? "Untitled tech debt",
162
+ domain: raw.domain ?? "architecture",
163
+ severity,
164
+ effort,
165
+ impact: coerceImpact(raw.impact, severity),
166
+ status: raw.status ?? "pending",
167
+ estimatedComplexity: raw.estimatedComplexity ?? effortToNominalComplexity(effort),
168
+ estimatedHours: raw.estimatedHours ?? effortToNominalHours(effort),
169
+ // AI-era estimate: read-through only — legacy items round-trip byte-clean
170
+ // with no fabricated AI fields (matches task-manager's honesty pattern).
171
+ ...coerceDebtRuntimeEstimate(raw),
172
+ rootCause: raw.rootCause ?? "To be documented",
173
+ blocking: raw.blocking ?? severity === "critical",
174
+ parallelizable: raw.parallelizable ?? severity !== "critical",
175
+ executeBy: raw.executeBy,
176
+ createdAt: raw.createdAt,
177
+ updatedAt: raw.updatedAt,
178
+ createdDate: raw.createdDate,
179
+ targetCompleteDate: raw.targetCompleteDate,
180
+ completedAt: raw.completedAt,
181
+ archivedAt: raw.archivedAt
182
+ };
183
+ if (!normalized.createdAt && normalized.createdDate) {
184
+ normalized.createdAt = `${normalized.createdDate}T00:00:00.000Z`;
185
+ }
186
+ return normalized;
187
+ }
188
+ function parseMarkdownContent(content, filePath) {
189
+ const match = content.match(/^---\n([\s\S]+?)\n---\n([\s\S]*)$/);
190
+ if (!match) {
191
+ throw new Error(`Invalid markdown format in ${filePath}: missing YAML front matter`);
192
+ }
193
+ const rawMetadata = yaml.load(match[1] ?? "", { schema: yaml.JSON_SCHEMA });
194
+ const body = (match[2] ?? "").trim();
195
+ return { metadata: normalizeDebtItem(rawMetadata), body };
196
+ }
197
+ function buildDebtItem(title, severity, effort, options = {}) {
198
+ const id = generateId(/* @__PURE__ */ new Date());
199
+ const debtItem = {
200
+ id,
201
+ kind: "tech-debt",
202
+ title,
203
+ domain: options.domain || "architecture",
204
+ severity,
205
+ effort,
206
+ impact: coerceImpact(options.impact, severity),
207
+ status: "pending",
208
+ // Advisory nominal derived from the explicit effort level (see EFFORT_TO_HOURS).
209
+ estimatedComplexity: options.estimatedComplexity ?? effortToNominalComplexity(effort),
210
+ estimatedHours: options.estimatedHours ?? effortToNominalHours(effort),
211
+ // AI-era primary estimate (advisory, [B5]): explicit minutes win, else
212
+ // effort-derived via the canonical estimator.
213
+ ...resolveDebtRuntimeEstimate(effort, options.expectedRuntimeMinutes),
214
+ rootCause: options.rootCause || "To be documented",
215
+ blocking: options.blocking !== void 0 ? options.blocking : severity === "critical",
216
+ parallelizable: options.parallelizable !== void 0 ? options.parallelizable : severity !== "critical",
217
+ executeBy: options.executeBy,
218
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
219
+ targetCompleteDate: options.targetCompleteDate
220
+ };
221
+ const body = `# ${title}
222
+
223
+ ## Problem
224
+
225
+ ${options.rootCause || "To be documented"}
226
+
227
+ ## Impact
228
+
229
+ - Severity: ${severity}
230
+ - Estimated effort: ${effort}${debtItem.expectedRuntimeMinutes ? ` (~${debtItem.expectedRuntimeMinutes}m AI est)` : ` (${debtItem.estimatedHours}h)`}
231
+ - Impact score: ${debtItem.impact}/10
232
+ - Blocks production: ${debtItem.blocking ? "Yes" : "No"}
233
+ - Can run in parallel: ${debtItem.parallelizable ? "Yes" : "No"}
234
+
235
+ ## Scheduling Recommendation
236
+
237
+ ${getSchedulingRecommendation(debtItem)}
238
+
239
+ ## Solution
240
+
241
+ To be documented when assigned.
242
+
243
+ ## Success Criteria
244
+
245
+ - [ ] Root cause addressed
246
+ - [ ] Tests passing
247
+ - [ ] Documentation updated
248
+ - [ ] No regressions introduced
249
+ `;
250
+ return { debtItem, body };
251
+ }
252
+ function regenerateIndexesAfterCreate(basePath) {
253
+ generateIndexes(basePath).catch((error) => {
254
+ if (error?.code === "ENOENT") return;
255
+ emitWarning(
256
+ "CFG-002",
257
+ {
258
+ taskId: "tech-debt-manager",
259
+ subsystem: "planning",
260
+ executionPhase: "cleanup"
261
+ },
262
+ {
263
+ severity: "INFO" /* INFO */,
264
+ metadata: {
265
+ error: error instanceof Error ? error.message : String(error),
266
+ operation: "regenerate-indexes-after-create"
267
+ }
268
+ }
269
+ );
270
+ });
271
+ }
272
+ async function parseMarkdownFile2(filePath) {
273
+ const content = await fs.readFile(filePath, "utf8");
274
+ return parseMarkdownContent(content, filePath);
275
+ }
276
+ async function getDebtItemAsync(itemId) {
277
+ const basePath = getPlanningRoot();
278
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
279
+ const filePath = path.join(currentPath, `${itemId}.md`);
280
+ try {
281
+ await fs.access(filePath);
282
+ } catch {
283
+ return null;
284
+ }
285
+ return parseMarkdownFile2(filePath);
286
+ }
287
+ async function writeMarkdownFile(filePath, metadata, body) {
288
+ const yamlStr = yaml.dump(metadata, { lineWidth: -1 });
289
+ const content = `---
290
+ ${yamlStr}---
291
+
292
+ ${body}`;
293
+ const tempPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
294
+ const handle = await fs.open(tempPath, "w");
295
+ try {
296
+ await handle.writeFile(content, "utf8");
297
+ await handle.sync();
298
+ await handle.close();
299
+ await fs.rename(tempPath, filePath);
300
+ } catch (error) {
301
+ try {
302
+ await handle.close();
303
+ } catch {
304
+ }
305
+ try {
306
+ await fs.unlink(tempPath);
307
+ } catch {
308
+ }
309
+ throw error;
310
+ }
311
+ }
312
+ async function createDebtItemAsync(title, severity, effort, options = {}) {
313
+ const basePath = getPlanningRoot();
314
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
315
+ await fs.mkdir(currentPath, { recursive: true });
316
+ const { debtItem, body } = buildDebtItem(title, severity, effort, options);
317
+ const filePath = path.join(currentPath, `${debtItem.id}.md`);
318
+ await writeMarkdownFile(filePath, debtItem, body);
319
+ regenerateIndexesAfterCreate(basePath);
320
+ return debtItem;
321
+ }
322
+ async function updateDebtItemAsync(itemId, fields) {
323
+ const basePath = getPlanningRoot();
324
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
325
+ const filePath = path.join(currentPath, `${itemId}.md`);
326
+ return withIndexRegeneration(basePath, async () => {
327
+ const loaded = await getDebtItemAsync(itemId);
328
+ if (!loaded) {
329
+ throw new Error(`Debt item not found: ${itemId}`);
330
+ }
331
+ const { metadata: existing, body: existingBody } = loaded;
332
+ const { yaml: rawFrontmatter } = await parseMarkdownFile(filePath);
333
+ const rawUpdated = { ...rawFrontmatter };
334
+ let changed = false;
335
+ const applyScalar = (key, value) => {
336
+ if (value === void 0) return;
337
+ if (rawUpdated[key] !== value) {
338
+ rawUpdated[key] = value;
339
+ changed = true;
340
+ }
341
+ };
342
+ applyScalar("title", fields.title);
343
+ applyScalar("severity", fields.severity);
344
+ applyScalar("effort", fields.effort);
345
+ applyScalar("impact", fields.impact);
346
+ applyScalar("blocking", fields.blocking);
347
+ applyScalar("parallelizable", fields.parallelizable);
348
+ applyScalar("domain", fields.domain);
349
+ applyScalar("rootCause", fields.rootCause);
350
+ applyScalar("executeBy", fields.executeBy);
351
+ applyScalar("targetCompleteDate", fields.targetCompleteDate);
352
+ applyScalar("estimatedHours", fields.estimatedHours);
353
+ applyScalar("estimatedComplexity", fields.estimatedComplexity);
354
+ if (fields.expectedRuntimeMinutes !== void 0) {
355
+ const explicit = resolveDebtRuntimeEstimate(
356
+ rawUpdated.effort ?? "medium",
357
+ fields.expectedRuntimeMinutes
358
+ );
359
+ applyScalar("expectedRuntimeMinutes", explicit.expectedRuntimeMinutes);
360
+ applyScalar("runtimeEstimateProvenance", explicit.runtimeEstimateProvenance);
361
+ applyScalar("runtimeEstimateConfidence", explicit.runtimeEstimateConfidence);
362
+ } else if (fields.effort !== void 0 && rawUpdated.runtimeEstimateProvenance !== "explicit" && rawUpdated.runtimeEstimateProvenance !== "telemetry" && rawUpdated.expectedRuntimeMinutes !== void 0) {
363
+ const rederived = resolveDebtRuntimeEstimate(fields.effort);
364
+ applyScalar("expectedRuntimeMinutes", rederived.expectedRuntimeMinutes);
365
+ applyScalar("runtimeEstimateProvenance", rederived.runtimeEstimateProvenance);
366
+ applyScalar("runtimeEstimateConfidence", rederived.runtimeEstimateConfidence);
367
+ }
368
+ if (typeof rawUpdated.expectedRuntimeMinutes === "string") {
369
+ const repaired = Number(rawUpdated.expectedRuntimeMinutes);
370
+ if (Number.isFinite(repaired)) {
371
+ rawUpdated.expectedRuntimeMinutes = repaired;
372
+ changed = true;
373
+ }
374
+ }
375
+ let nextBody = existingBody;
376
+ if (fields.body !== void 0 && fields.body !== existingBody) {
377
+ nextBody = fields.body;
378
+ changed = true;
379
+ }
380
+ if (!changed) {
381
+ return { item: existing, filePath, changed: false };
382
+ }
383
+ rawUpdated.id = itemId;
384
+ rawUpdated.kind = "tech-debt";
385
+ rawUpdated.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
386
+ const validation = validateDebtItem(rawUpdated);
387
+ if (!validation.valid) {
388
+ const detail = validation.errors.map((error) => `${error.field}: ${error.message}`).join("; ");
389
+ throw new Error(`Invalid debt item after update (${itemId}): ${detail}`);
390
+ }
391
+ await writeMarkdownFile(filePath, rawUpdated, nextBody);
392
+ const { metadata: normalizedUpdated } = parseMarkdownContent(
393
+ `---
394
+ ${yaml.dump(rawUpdated, { lineWidth: -1 })}---
395
+ ${nextBody}`,
396
+ filePath
397
+ );
398
+ return { item: normalizedUpdated, filePath, changed: true };
399
+ });
400
+ }
401
+ function getSchedulingRecommendation(item) {
402
+ if (item.severity === "critical" && item.blocking) {
403
+ return "Execute immediately - halt sprint if necessary";
404
+ }
405
+ if (item.severity === "critical" && !item.blocking) {
406
+ return "Execute in parallel with current sprint";
407
+ }
408
+ if (item.severity === "high" && item.blocking) {
409
+ return "Add to current sprint - adjust capacity";
410
+ }
411
+ if (item.severity === "high" && !item.blocking) {
412
+ return "Schedule for next sprint";
413
+ }
414
+ if (item.severity === "medium") {
415
+ return "Opportunistic execution when capacity available";
416
+ }
417
+ return "Backlog for future sprints";
418
+ }
419
+ async function listByBlockingAsync() {
420
+ const basePath = getPlanningRoot();
421
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
422
+ const files = await listMarkdownFileNames(currentPath);
423
+ const debtItems = [];
424
+ for (const file of files) {
425
+ const filePath = path.join(currentPath, file);
426
+ try {
427
+ const { metadata } = await parseMarkdownFile2(filePath);
428
+ if (metadata.blocking) {
429
+ debtItems.push(metadata);
430
+ }
431
+ } catch (error) {
432
+ warnDebtReadError(error, file, "list-blocking-debt");
433
+ }
434
+ }
435
+ return sortBySeverityThenImpact(debtItems);
436
+ }
437
+ async function listByParallelizableAsync() {
438
+ const basePath = getPlanningRoot();
439
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
440
+ const files = await listMarkdownFileNames(currentPath);
441
+ const debtItems = [];
442
+ for (const file of files) {
443
+ const filePath = path.join(currentPath, file);
444
+ try {
445
+ const { metadata } = await parseMarkdownFile2(filePath);
446
+ if (metadata.parallelizable) {
447
+ debtItems.push(metadata);
448
+ }
449
+ } catch (error) {
450
+ warnDebtReadError(error, file, "list-parallelizable-debt");
451
+ }
452
+ }
453
+ return sortBySeverityThenHours(debtItems);
454
+ }
455
+ async function scheduleDebtAsync(itemId, when) {
456
+ const basePath = getPlanningRoot();
457
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
458
+ const filePath = path.join(currentPath, `${itemId}.md`);
459
+ try {
460
+ await fs.access(filePath);
461
+ } catch {
462
+ throw new Error(`Debt item not found: ${itemId}`);
463
+ }
464
+ const { metadata, body } = await parseMarkdownFile2(filePath);
465
+ applyDebtSchedule(metadata, when);
466
+ await writeMarkdownFile(filePath, metadata, body);
467
+ return metadata;
468
+ }
469
+ async function completeDebtAsync(itemId) {
470
+ const basePath = getPlanningRoot();
471
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
472
+ const bucket = getBucketByName("tech-debt", basePath);
473
+ if (!bucket) {
474
+ throw new Error("Bucket not configured: tech-debt");
475
+ }
476
+ const currentFile = path.join(currentPath, `${itemId}.md`);
477
+ try {
478
+ await fs.access(currentFile);
479
+ } catch {
480
+ throw new Error(`Debt item not found: ${itemId}`);
481
+ }
482
+ const { metadata, body } = await parseMarkdownFile2(currentFile);
483
+ markDebtComplete(metadata);
484
+ const archivedAt = metadata.archivedAt;
485
+ const archivedFile = getArchivedFilePath(bucket, itemId, archivedAt, basePath);
486
+ await fs.mkdir(path.dirname(archivedFile), { recursive: true });
487
+ await writeMarkdownFile(archivedFile, metadata, body);
488
+ await fs.unlink(currentFile);
489
+ return metadata;
490
+ }
491
+ async function listAllDebtAsync(includeArchived = false, rootDir) {
492
+ const basePath = rootDir ?? getPlanningRoot();
493
+ const currentPath = getBucketPathByKind("tech-debt", basePath);
494
+ const archivedPath = getBucketArchivePathByKind("tech-debt", basePath);
495
+ const items = [];
496
+ for (const file of await listMarkdownFileNames(currentPath)) {
497
+ try {
498
+ const { metadata } = await parseMarkdownFile2(path.join(currentPath, file));
499
+ items.push(metadata);
500
+ } catch (error) {
501
+ warnDebtReadError(error, file, "list-all-debt-current");
502
+ }
503
+ }
504
+ if (includeArchived) {
505
+ const files = await listMarkdownFilesRecursive2(archivedPath);
506
+ for (const file of files) {
507
+ if (path.basename(file).toLowerCase() === "readme.md") {
508
+ continue;
509
+ }
510
+ try {
511
+ const { metadata } = await parseMarkdownFile2(file);
512
+ items.push(metadata);
513
+ } catch (error) {
514
+ warnDebtReadError(error, path.relative(basePath, file), "list-all-debt-archived");
515
+ }
516
+ }
517
+ }
518
+ return items;
519
+ }
520
+ async function listMarkdownFileNames(directory) {
521
+ let entries;
522
+ try {
523
+ entries = await fs.readdir(directory, { withFileTypes: true });
524
+ } catch {
525
+ return [];
526
+ }
527
+ return entries.filter(
528
+ (entry) => entry.isFile() && entry.name.endsWith(".md") && entry.name.toLowerCase() !== "readme.md"
529
+ ).map((entry) => entry.name);
530
+ }
531
+ async function listMarkdownFilesRecursive2(directory) {
532
+ const results = [];
533
+ let entries;
534
+ try {
535
+ entries = await fs.readdir(directory, { withFileTypes: true });
536
+ } catch {
537
+ return results;
538
+ }
539
+ for (const entry of entries) {
540
+ const fullPath = path.join(directory, entry.name);
541
+ if (entry.isDirectory()) {
542
+ results.push(...await listMarkdownFilesRecursive2(fullPath));
543
+ } else if (entry.isFile() && entry.name.endsWith(".md")) {
544
+ results.push(fullPath);
545
+ }
546
+ }
547
+ return results;
548
+ }
549
+ function sortBySeverityThenImpact(items) {
550
+ return items.sort((a, b) => {
551
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
552
+ const sevCompare = severityOrder[a.severity] - severityOrder[b.severity];
553
+ return sevCompare !== 0 ? sevCompare : b.impact - a.impact;
554
+ });
555
+ }
556
+ function sortBySeverityThenHours(items) {
557
+ const tiebreakMinutes = (item) => item.expectedRuntimeMinutes ?? item.estimatedHours * 60;
558
+ return items.sort((a, b) => {
559
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
560
+ const sevCompare = severityOrder[a.severity] - severityOrder[b.severity];
561
+ return sevCompare !== 0 ? sevCompare : tiebreakMinutes(a) - tiebreakMinutes(b);
562
+ });
563
+ }
564
+ function applyDebtSchedule(metadata, when) {
565
+ const now = /* @__PURE__ */ new Date();
566
+ switch (when) {
567
+ case "immediate":
568
+ metadata.executeBy = now.toISOString().split("T")[0];
569
+ metadata.status = "in-progress";
570
+ break;
571
+ case "current-sprint": {
572
+ const currentSprintEnd = new Date(now);
573
+ currentSprintEnd.setDate(currentSprintEnd.getDate() + 7);
574
+ metadata.targetCompleteDate = currentSprintEnd.toISOString().split("T")[0];
575
+ break;
576
+ }
577
+ case "next-sprint": {
578
+ const nextSprintEnd = new Date(now);
579
+ nextSprintEnd.setDate(nextSprintEnd.getDate() + 14);
580
+ metadata.targetCompleteDate = nextSprintEnd.toISOString().split("T")[0];
581
+ break;
582
+ }
583
+ case "backlog":
584
+ delete metadata.executeBy;
585
+ delete metadata.targetCompleteDate;
586
+ break;
587
+ }
588
+ metadata.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
589
+ }
590
+ function markDebtComplete(metadata) {
591
+ metadata.status = "completed";
592
+ metadata.completedAt = (/* @__PURE__ */ new Date()).toISOString();
593
+ metadata.archivedAt = (/* @__PURE__ */ new Date()).toISOString();
594
+ metadata.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
595
+ }
596
+ function warnDebtReadError(error, file, operation) {
597
+ emitWarning(
598
+ "WS-002G",
599
+ {
600
+ taskId: "tech-debt-manager",
601
+ subsystem: "planning",
602
+ executionPhase: "execution"
603
+ },
604
+ {
605
+ severity: "WARN" /* WARN */,
606
+ skipConsole: true,
607
+ metadata: {
608
+ error: error instanceof Error ? error.message : String(error),
609
+ file,
610
+ operation
611
+ }
612
+ }
613
+ );
614
+ }
615
+
616
+ // src/core/read-models/next.ts
617
+ async function tryGetGitHeadSha(cwd) {
618
+ try {
619
+ const result = await execa("git", ["rev-parse", "HEAD"], { cwd });
620
+ const sha = result.stdout.trim();
621
+ return sha.length > 0 ? sha : void 0;
622
+ } catch {
623
+ return void 0;
624
+ }
625
+ }
626
+ var GIT_DIFF_CACHE_TTL_MS = 5 * 60 * 1e3;
627
+ var GIT_DIFF_CACHE_MAX_ENTRIES = 500;
628
+ var gitDiffCache = /* @__PURE__ */ new Map();
629
+ function pruneGitDiffCache(now) {
630
+ for (const [key, value] of gitDiffCache.entries()) {
631
+ if (now - value.cachedAt > GIT_DIFF_CACHE_TTL_MS) {
632
+ gitDiffCache.delete(key);
633
+ }
634
+ }
635
+ if (gitDiffCache.size <= GIT_DIFF_CACHE_MAX_ENTRIES) {
636
+ return;
637
+ }
638
+ const entriesByAge = [...gitDiffCache.entries()].sort((a, b) => a[1].cachedAt - b[1].cachedAt);
639
+ const overflowCount = gitDiffCache.size - GIT_DIFF_CACHE_MAX_ENTRIES;
640
+ for (const [key] of entriesByAge.slice(0, overflowCount)) {
641
+ gitDiffCache.delete(key);
642
+ }
643
+ }
644
+ async function getChangedFiles(cwd, fromSha, toSha, files) {
645
+ if (files.length === 0) return [];
646
+ const sortedFiles = [...files].sort();
647
+ const cacheKey = `${fromSha}..${toSha}:${sortedFiles.join(",")}`;
648
+ const now = Date.now();
649
+ pruneGitDiffCache(now);
650
+ const cached = gitDiffCache.get(cacheKey);
651
+ if (cached !== void 0 && now - cached.cachedAt <= GIT_DIFF_CACHE_TTL_MS) {
652
+ return cached.changedFiles;
653
+ }
654
+ try {
655
+ const result = await execa(
656
+ "git",
657
+ ["diff", "--name-only", `${fromSha}..${toSha}`, "--", ...files],
658
+ {
659
+ cwd,
660
+ reject: false
661
+ }
662
+ );
663
+ const changedFiles = result.exitCode === 0 ? result.stdout.split("\n").map((f) => f.trim()).filter((f) => f.length > 0) : [];
664
+ gitDiffCache.set(cacheKey, { changedFiles, cachedAt: now });
665
+ pruneGitDiffCache(now);
666
+ return changedFiles;
667
+ } catch {
668
+ return [];
669
+ }
670
+ }
671
+ function normalizeTitle(title) {
672
+ return title.normalize("NFD").replace(/[\u0300-\u036f]/g, "").normalize("NFKC").toLowerCase().replace(/[^\w\s]/g, "").replace(/\s+/g, " ").trim();
673
+ }
674
+ var STOP_WORDS = /* @__PURE__ */ new Set(["the", "and", "for", "with", "from", "that", "this", "then"]);
675
+ var COMMON_VERBS = /* @__PURE__ */ new Set([
676
+ "add",
677
+ "fix",
678
+ "implement",
679
+ "update",
680
+ "remove",
681
+ "delete",
682
+ "change",
683
+ "support",
684
+ "show",
685
+ "list",
686
+ "create",
687
+ "enable",
688
+ "disable",
689
+ "allow",
690
+ "ensure"
691
+ ]);
692
+ function areNearDuplicates(title1, title2) {
693
+ const norm1 = normalizeTitle(title1);
694
+ const norm2 = normalizeTitle(title2);
695
+ if (norm1 === norm2) return true;
696
+ const phrase1 = ` ${norm1} `;
697
+ const phrase2 = ` ${norm2} `;
698
+ if (phrase1.includes(phrase2) || phrase2.includes(phrase1)) {
699
+ const words1 = norm1.split(" ");
700
+ const words2 = norm2.split(" ");
701
+ if (Math.min(words1.length, words2.length) >= 3) return true;
702
+ }
703
+ const tokens1 = norm1.split(" ").filter((t) => t.length > 2);
704
+ const tokens2 = norm2.split(" ").filter((t) => t.length > 2);
705
+ if (tokens1.length === 0 || tokens2.length === 0) return false;
706
+ const filtered1 = tokens1.filter((t) => !STOP_WORDS.has(t) && !COMMON_VERBS.has(t));
707
+ const filtered2 = tokens2.filter((t) => !STOP_WORDS.has(t) && !COMMON_VERBS.has(t));
708
+ if (filtered1.length === 0 || filtered2.length === 0) return false;
709
+ const set1 = new Set(filtered1);
710
+ const set2 = new Set(filtered2);
711
+ const intersection = [...set1].filter((t) => set2.has(t));
712
+ const smallerSize = Math.min(set1.size, set2.size);
713
+ const unionSize = (/* @__PURE__ */ new Set([...set1, ...set2])).size;
714
+ if (smallerSize === 0) return false;
715
+ const overlapRatio = intersection.length / smallerSize;
716
+ const jaccardRatio = intersection.length / unionSize;
717
+ if (smallerSize <= 2) {
718
+ return overlapRatio >= 0.85 && jaccardRatio >= 0.5;
719
+ }
720
+ return overlapRatio >= 0.75 && jaccardRatio >= 0.4;
721
+ }
722
+ function normalizeTaskStatus(rawStatus) {
723
+ const statusMap = {
724
+ todo: "todo",
725
+ in_progress: "in_progress",
726
+ review: "review",
727
+ done: "done",
728
+ blocked: "blocked",
729
+ cancelled: "cancelled",
730
+ canceled: "cancelled",
731
+ pending: "todo",
732
+ "in-progress": "in_progress",
733
+ completed: "done",
734
+ archived: "done"
735
+ };
736
+ if (typeof rawStatus !== "string") return "todo";
737
+ return statusMap[rawStatus] ?? "todo";
738
+ }
739
+ async function getLinkedBacklogEligibility(rootDir) {
740
+ const linkedCompletedIds = /* @__PURE__ */ new Set();
741
+ const linkedBlockedIds = /* @__PURE__ */ new Set();
742
+ const linkedUnsatisfiedDependencyIds = /* @__PURE__ */ new Set();
743
+ try {
744
+ const tasksDir = getBucketPathByKind("task", rootDir);
745
+ const archiveDir = path2.join(tasksDir, "archive");
746
+ const taskStatuses = /* @__PURE__ */ new Map();
747
+ const activeTasks = [];
748
+ const taskFiles = await listMarkdownFiles(tasksDir);
749
+ for (const file of taskFiles) {
750
+ try {
751
+ const { frontMatter } = await readMarkdownFile(file);
752
+ const taskId = typeof frontMatter.id === "string" ? frontMatter.id : void 0;
753
+ const status = normalizeTaskStatus(frontMatter.status);
754
+ if (taskId) {
755
+ taskStatuses.set(taskId, { status, archived: false });
756
+ }
757
+ if (taskId && typeof frontMatter.backlogItemId === "string" && frontMatter.backlogItemId.length > 0) {
758
+ activeTasks.push({
759
+ id: taskId,
760
+ backlogItemId: frontMatter.backlogItemId,
761
+ status,
762
+ dependencies: Array.isArray(frontMatter.dependencies) ? frontMatter.dependencies.filter((dep) => typeof dep === "string") : []
763
+ });
764
+ }
765
+ } catch {
766
+ }
767
+ }
768
+ const archivedTaskFiles = await listMarkdownFilesRecursive(archiveDir).catch(() => []);
769
+ for (const file of archivedTaskFiles) {
770
+ try {
771
+ const { frontMatter } = await readMarkdownFile(file);
772
+ const taskId = typeof frontMatter.id === "string" ? frontMatter.id : void 0;
773
+ const status = normalizeTaskStatus(frontMatter.status);
774
+ if (taskId && !taskStatuses.has(taskId)) {
775
+ taskStatuses.set(taskId, { status, archived: true });
776
+ }
777
+ if (typeof frontMatter.backlogItemId === "string" && frontMatter.backlogItemId.length > 0 && (status === "done" || status === "review")) {
778
+ linkedCompletedIds.add(frontMatter.backlogItemId);
779
+ }
780
+ } catch {
781
+ }
782
+ }
783
+ for (const task of activeTasks) {
784
+ if (task.status === "done" || task.status === "review") {
785
+ linkedCompletedIds.add(task.backlogItemId);
786
+ continue;
787
+ }
788
+ if (task.status === "blocked") {
789
+ linkedBlockedIds.add(task.backlogItemId);
790
+ continue;
791
+ }
792
+ if (task.dependencies.length === 0) {
793
+ continue;
794
+ }
795
+ const hasUnsatisfiedDependency = task.dependencies.some((dependencyId) => {
796
+ const depStatus = taskStatuses.get(dependencyId);
797
+ if (!depStatus) return true;
798
+ return depStatus.status !== "done";
799
+ });
800
+ if (hasUnsatisfiedDependency) {
801
+ linkedUnsatisfiedDependencyIds.add(task.backlogItemId);
802
+ }
803
+ }
804
+ } catch {
805
+ }
806
+ return {
807
+ linkedCompletedIds,
808
+ linkedBlockedIds,
809
+ linkedUnsatisfiedDependencyIds
810
+ };
811
+ }
812
+ async function getGraphBlockedBacklogItems(rootDir) {
813
+ const blocked = /* @__PURE__ */ new Map();
814
+ try {
815
+ const context = await loadWorkGraphContext(rootDir);
816
+ const isSatisfied = (blockerId) => {
817
+ const blocker = context.itemsById.get(blockerId);
818
+ if (!blocker) return true;
819
+ const rawStatus = blocker.frontMatter.status;
820
+ const status = typeof rawStatus === "string" ? rawStatus : "";
821
+ return status === "done" || status === "archived" || status === "completed";
822
+ };
823
+ for (const [itemId, item] of context.itemsById) {
824
+ if (item.frontMatter.kind !== "backlog") continue;
825
+ const view = buildGraphBlockersView(context, itemId);
826
+ if (!view || view.blockers.length === 0) continue;
827
+ const unresolved = [];
828
+ const seen = /* @__PURE__ */ new Set();
829
+ for (const blocker of view.blockers) {
830
+ if (seen.has(blocker.id)) continue;
831
+ seen.add(blocker.id);
832
+ if (!isSatisfied(blocker.id)) {
833
+ unresolved.push({ id: blocker.id, title: blocker.title });
834
+ }
835
+ }
836
+ if (unresolved.length > 0) {
837
+ blocked.set(itemId, unresolved);
838
+ }
839
+ }
840
+ } catch {
841
+ }
842
+ return blocked;
843
+ }
844
+ async function getArchivedBacklogTitles(rootDir) {
845
+ const titles = /* @__PURE__ */ new Map();
846
+ try {
847
+ const archiveDir = path2.join(getBucketPathByKind("backlog", rootDir), "archive");
848
+ const files = await listMarkdownFilesRecursive(archiveDir);
849
+ for (const file of files) {
850
+ try {
851
+ const { frontMatter } = await readMarkdownFile(file);
852
+ if (frontMatter.title && typeof frontMatter.title === "string") {
853
+ const normalized = normalizeTitle(frontMatter.title);
854
+ titles.set(normalized, {
855
+ id: frontMatter.id,
856
+ title: frontMatter.title
857
+ });
858
+ }
859
+ } catch {
860
+ }
861
+ }
862
+ } catch {
863
+ }
864
+ return titles;
865
+ }
866
+ function extractBodyPreview(body, maxChars = 300) {
867
+ const withoutTitle = body.replace(/^\s*#[^\n]*\n?/, "").trim();
868
+ if (withoutTitle.length === 0) return "";
869
+ const lines = withoutTitle.split(/\r?\n/);
870
+ while (lines.length > 0) {
871
+ const firstLine = (lines[0] ?? "").trim();
872
+ if (firstLine.length === 0 || /^#{1,6}\s+/.test(firstLine)) {
873
+ lines.shift();
874
+ continue;
875
+ }
876
+ break;
877
+ }
878
+ const stripped = lines.join("\n").trim();
879
+ if (stripped.length === 0) return "";
880
+ if (stripped.length <= maxChars) return stripped;
881
+ const truncated = stripped.slice(0, maxChars);
882
+ const lastSpace = truncated.lastIndexOf(" ");
883
+ const cutPoint = lastSpace > maxChars * 0.5 ? lastSpace : maxChars;
884
+ return `${truncated.slice(0, cutPoint)}...`;
885
+ }
886
+ function extractAcceptanceCriteria(body) {
887
+ const lines = body.split(/\r?\n/);
888
+ const criteria = [];
889
+ let inAcceptanceCriteria = false;
890
+ let inExampleBlock = false;
891
+ for (const rawLine of lines) {
892
+ const headingMatch = rawLine.match(/^\s{0,3}#{1,6}\s+(.+?)\s*$/);
893
+ if (headingMatch) {
894
+ const heading = headingMatch[1]?.replace(/:\s*$/, "").trim().toLowerCase();
895
+ if (!inAcceptanceCriteria) {
896
+ inAcceptanceCriteria = heading === "acceptance criteria";
897
+ continue;
898
+ }
899
+ break;
900
+ }
901
+ if (!inAcceptanceCriteria) continue;
902
+ const line = rawLine.trim();
903
+ if (line.length === 0) continue;
904
+ if (/^example\s*:?\s*$/i.test(line)) {
905
+ inExampleBlock = true;
906
+ continue;
907
+ }
908
+ if (inExampleBlock) continue;
909
+ const checkboxMatch = line.match(/^- \[(?: |x|X)\]\s+(.+)$/);
910
+ if (!checkboxMatch) continue;
911
+ const content = checkboxMatch[1]?.trim() ?? "";
912
+ if (content.length === 0) continue;
913
+ if (content.includes("<<<") || content.includes(">>>")) continue;
914
+ criteria.push(content);
915
+ }
916
+ return criteria;
917
+ }
918
+ async function queryNextItems(options) {
919
+ const { rootDir } = options;
920
+ const backlogDir = getBucketPathByKind("backlog", rootDir);
921
+ const requestedKinds = options.kinds ?? [];
922
+ const shouldQueryBacklog = requestedKinds.length === 0 || requestedKinds.includes("backlog");
923
+ const backlogExists = shouldQueryBacklog ? await fs2.stat(backlogDir).then(() => true).catch(() => false) : false;
924
+ if (!backlogExists && !options.includeFindings && requestedKinds.length === 0) {
925
+ return [];
926
+ }
927
+ const inboxItems = backlogExists ? await listBacklogItems(backlogDir, "inbox") : [];
928
+ const reviewedItems = backlogExists ? await listBacklogItems(backlogDir, "reviewed") : [];
929
+ const linkedEligibility = backlogExists ? await getLinkedBacklogEligibility(rootDir) : {
930
+ linkedCompletedIds: /* @__PURE__ */ new Set(),
931
+ linkedBlockedIds: /* @__PURE__ */ new Set(),
932
+ linkedUnsatisfiedDependencyIds: /* @__PURE__ */ new Set()
933
+ };
934
+ const graphBlockedItems = backlogExists ? await getGraphBlockedBacklogItems(rootDir) : /* @__PURE__ */ new Map();
935
+ const archivedTitles = backlogExists ? await getArchivedBacklogTitles(rootDir) : /* @__PURE__ */ new Map();
936
+ const activeProvenanceStatuses = /* @__PURE__ */ new Set([
937
+ "pr-open",
938
+ "archive-sync-pending",
939
+ "delivered-local",
940
+ "merged",
941
+ "archived"
942
+ ]);
943
+ const provenanceSuppressedIds = /* @__PURE__ */ new Set();
944
+ const blockedProvenanceReasons = /* @__PURE__ */ new Map();
945
+ if (backlogExists) {
946
+ const allCandidateIds = [...inboxItems, ...reviewedItems].map((item) => item.id);
947
+ await Promise.all(
948
+ allCandidateIds.map(async (id) => {
949
+ try {
950
+ const provenance = await loadBacklogExecutionProvenance(rootDir, id, {
951
+ cleanupTerminalLocks: false
952
+ });
953
+ if (provenance?.status === "executing" && await isBacklogExecutionProvenanceActivelyExecuting(rootDir, provenance)) {
954
+ provenanceSuppressedIds.add(id);
955
+ } else if (provenance && activeProvenanceStatuses.has(provenance.status)) {
956
+ provenanceSuppressedIds.add(id);
957
+ } else if (provenance?.status === "blocked") {
958
+ const blockedReason = provenance.errorMessage?.trim();
959
+ if (blockedReason) {
960
+ blockedProvenanceReasons.set(id, blockedReason);
961
+ }
962
+ }
963
+ } catch {
964
+ }
965
+ })
966
+ );
967
+ }
968
+ const candidates = [];
969
+ let headSha;
970
+ const ensureHeadSha = async () => {
971
+ if (headSha) return headSha;
972
+ headSha = await tryGetGitHeadSha(rootDir);
973
+ return headSha;
974
+ };
975
+ const processItem = (item, statusLabel) => {
976
+ if (linkedEligibility.linkedCompletedIds.has(item.id)) {
977
+ return null;
978
+ }
979
+ if (linkedEligibility.linkedBlockedIds.has(item.id)) {
980
+ return null;
981
+ }
982
+ if (linkedEligibility.linkedUnsatisfiedDependencyIds.has(item.id)) {
983
+ return null;
984
+ }
985
+ const openBlockers = graphBlockedItems.get(item.id);
986
+ if (openBlockers && openBlockers.length > 0 && !options.includeBlocked) {
987
+ return null;
988
+ }
989
+ if (provenanceSuppressedIds.has(item.id)) {
990
+ return null;
991
+ }
992
+ let isDuplicate = false;
993
+ let duplicateOf;
994
+ for (const [, archived] of archivedTitles) {
995
+ if (areNearDuplicates(item.title, archived.title)) {
996
+ isDuplicate = true;
997
+ duplicateOf = archived.id;
998
+ break;
999
+ }
1000
+ }
1001
+ if (isDuplicate && !options.includeDuplicates) {
1002
+ return null;
1003
+ }
1004
+ const reviewedHeadSha = typeof item.reviewedHeadSha === "string" && item.reviewedHeadSha.length > 0 ? item.reviewedHeadSha : void 0;
1005
+ const reviewedAt = typeof item.reviewedAt === "string" && item.reviewedAt.length > 0 ? item.reviewedAt : void 0;
1006
+ const reviewedFiles = Array.isArray(item.reviewedFiles) && item.reviewedFiles.length > 0 ? item.reviewedFiles : void 0;
1007
+ const blockedReason = blockedProvenanceReasons.get(item.id);
1008
+ const needsRefinement = item.needsRefinement;
1009
+ return {
1010
+ id: item.id,
1011
+ kind: "backlog",
1012
+ title: item.title,
1013
+ priority: item.priority,
1014
+ status: item.status,
1015
+ filePath: path2.join("backlog", `${item.id}.md`),
1016
+ domain: item.domain ?? void 0,
1017
+ complexity: item.complexity ?? void 0,
1018
+ whyIncluded: `${statusLabel} backlog item${item.priority ? ` (${item.priority})` : ""}`,
1019
+ createdAt: item.createdAt ?? void 0,
1020
+ reviewedAt,
1021
+ reviewedHeadSha,
1022
+ reviewedFiles,
1023
+ isDuplicate,
1024
+ duplicateOf,
1025
+ blockedReason,
1026
+ blockedAnswerHint: blockedReason ? `poetic plan backlog execute ${item.id} --answer blockerId=value` : void 0,
1027
+ blockedByOpen: openBlockers && openBlockers.length > 0 ? openBlockers.map((b) => ({ id: b.id, title: b.title })) : void 0,
1028
+ needsRefinement
1029
+ };
1030
+ };
1031
+ for (const item of reviewedItems) {
1032
+ const candidate = processItem(item, "Reviewed");
1033
+ if (candidate) candidates.push(candidate);
1034
+ }
1035
+ for (const item of inboxItems) {
1036
+ const candidate = processItem(item, "Inbox");
1037
+ if (candidate) candidates.push(candidate);
1038
+ }
1039
+ if (options.includeFindings) {
1040
+ const policy = loadIssuePolicy(rootDir);
1041
+ try {
1042
+ const actionableFindings = await listFindings(rootDir, "open");
1043
+ const findingDir = getBucketPathByKind("finding", rootDir);
1044
+ const findingDirRel = path2.relative(rootDir, findingDir);
1045
+ for (const f of actionableFindings) {
1046
+ const priority = severityToPriority(f.severity, policy);
1047
+ candidates.push({
1048
+ id: f.id,
1049
+ kind: "finding",
1050
+ title: f.title,
1051
+ priority,
1052
+ status: f.status,
1053
+ filePath: path2.join(findingDirRel, `${f.id}.md`),
1054
+ whyIncluded: `${f.status} finding (${f.category}${f.severity ? `/${f.severity}` : ""})`
1055
+ });
1056
+ }
1057
+ } catch {
1058
+ }
1059
+ try {
1060
+ const actionableIssues = [
1061
+ ...await listIssues(rootDir, "open"),
1062
+ ...await listIssues(rootDir, "claimed")
1063
+ ];
1064
+ const issueDir = getBucketPathByKind("issue", rootDir);
1065
+ const issueDirRel = path2.relative(rootDir, issueDir);
1066
+ for (const issue of actionableIssues) {
1067
+ const priority = severityToPriority(issue.severity, policy);
1068
+ candidates.push({
1069
+ id: issue.id,
1070
+ kind: "issue",
1071
+ title: issue.title,
1072
+ priority,
1073
+ status: issue.status,
1074
+ filePath: path2.join(issueDirRel, `${issue.id}.md`),
1075
+ whyIncluded: `${issue.status} issue (${issue.category}/${issue.severity})`
1076
+ });
1077
+ }
1078
+ } catch {
1079
+ }
1080
+ }
1081
+ const includeDebt = requestedKinds.includes("debt");
1082
+ const includeParking = requestedKinds.includes("parking");
1083
+ if (includeDebt) {
1084
+ try {
1085
+ const debtDir = getBucketPathByKind("tech-debt", rootDir);
1086
+ const debtExists = await fs2.stat(debtDir).then(() => true).catch(() => false);
1087
+ if (debtExists) {
1088
+ const debtItems = await listAllDebtAsync(false, rootDir);
1089
+ const debtDirRel = path2.relative(rootDir, debtDir);
1090
+ for (const item of debtItems) {
1091
+ if (item.status === "completed") continue;
1092
+ candidates.push({
1093
+ id: item.id,
1094
+ kind: "debt",
1095
+ title: item.title,
1096
+ priority: null,
1097
+ status: item.status,
1098
+ filePath: path2.join(debtDirRel, `${item.id}.md`),
1099
+ domain: item.domain,
1100
+ complexity: item.estimatedComplexity,
1101
+ whyIncluded: `Tech debt (${item.severity}${item.blocking ? ", blocking" : ""})`,
1102
+ createdAt: item.createdAt ?? item.createdDate,
1103
+ severity: item.severity,
1104
+ blocking: item.blocking,
1105
+ effort: item.effort
1106
+ });
1107
+ }
1108
+ }
1109
+ } catch {
1110
+ }
1111
+ }
1112
+ if (includeParking) {
1113
+ try {
1114
+ const parkingDir = getBucketPathByKind("parking-lot", rootDir);
1115
+ const parkingExists = await fs2.stat(parkingDir).then(() => true).catch(() => false);
1116
+ if (parkingExists) {
1117
+ const parkingItems = await listActive(parkingDir);
1118
+ const parkingDirRel = path2.relative(rootDir, parkingDir);
1119
+ const now = /* @__PURE__ */ new Date();
1120
+ for (const item of parkingItems) {
1121
+ const isOverdue = typeof item.reconsiderDate === "string" && item.reconsiderDate.length > 0 ? new Date(item.reconsiderDate) <= now : false;
1122
+ candidates.push({
1123
+ id: item.id,
1124
+ kind: "parking",
1125
+ title: item.title,
1126
+ priority: null,
1127
+ status: item.status,
1128
+ filePath: path2.join(parkingDirRel, `${item.id}.md`),
1129
+ whyIncluded: `Parked item${isOverdue ? " (overdue for reconsideration)" : ""}`,
1130
+ createdAt: item.createdAt,
1131
+ deferralReason: item.deferralReason,
1132
+ reconsiderDate: item.reconsiderDate ?? null,
1133
+ isOverdue
1134
+ });
1135
+ }
1136
+ }
1137
+ } catch {
1138
+ }
1139
+ }
1140
+ const isCrossEntity = requestedKinds.length > 0;
1141
+ const priorityOrder = { P0: 0, P1: 1, P2: 2, P3: 3 };
1142
+ const debtSeverityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
1143
+ function crossEntityBucket(c) {
1144
+ if (c.kind === "backlog" || c.kind === "task" || c.kind === "finding" || c.kind === "issue") {
1145
+ const p = c.priority ? priorityOrder[c.priority] ?? 4 : 4;
1146
+ return p <= 1 ? 0 : 3;
1147
+ }
1148
+ if (c.kind === "debt") {
1149
+ const sev = c.severity ?? "low";
1150
+ if ((sev === "critical" || sev === "high") && c.blocking) return 1;
1151
+ if (sev === "high") return 2;
1152
+ return 4;
1153
+ }
1154
+ return 5;
1155
+ }
1156
+ candidates.sort((a, b) => {
1157
+ if (isCrossEntity) {
1158
+ const aBucket = crossEntityBucket(a);
1159
+ const bBucket = crossEntityBucket(b);
1160
+ if (aBucket !== bBucket) return aBucket - bBucket;
1161
+ if (aBucket === 5) {
1162
+ const aDate = a.reconsiderDate ?? "9999-12-31";
1163
+ const bDate = b.reconsiderDate ?? "9999-12-31";
1164
+ if (aDate !== bDate) return aDate.localeCompare(bDate);
1165
+ return a.id.localeCompare(b.id);
1166
+ }
1167
+ if (aBucket === 1 || aBucket === 2 || aBucket === 4) {
1168
+ const aSev = debtSeverityOrder[a.severity ?? "low"] ?? 3;
1169
+ const bSev = debtSeverityOrder[b.severity ?? "low"] ?? 3;
1170
+ if (aSev !== bSev) return aSev - bSev;
1171
+ return a.id.localeCompare(b.id);
1172
+ }
1173
+ }
1174
+ const aPriority = a.priority ? priorityOrder[a.priority] ?? 4 : 4;
1175
+ const bPriority = b.priority ? priorityOrder[b.priority] ?? 4 : 4;
1176
+ if (aPriority !== bPriority) return aPriority - bPriority;
1177
+ const statusOrder = { reviewed: 0, inbox: 1 };
1178
+ const aStatus = statusOrder[a.status] ?? 2;
1179
+ const bStatus = statusOrder[b.status] ?? 2;
1180
+ if (aStatus !== bStatus) return aStatus - bStatus;
1181
+ const aCreatedAt = a.createdAt ? Date.parse(a.createdAt) : Number.NaN;
1182
+ const bCreatedAt = b.createdAt ? Date.parse(b.createdAt) : Number.NaN;
1183
+ const aHasCreatedAt = Number.isFinite(aCreatedAt);
1184
+ const bHasCreatedAt = Number.isFinite(bCreatedAt);
1185
+ if (aHasCreatedAt && bHasCreatedAt && aCreatedAt !== bCreatedAt) {
1186
+ return aCreatedAt - bCreatedAt;
1187
+ }
1188
+ if (aHasCreatedAt !== bHasCreatedAt) {
1189
+ return aHasCreatedAt ? -1 : 1;
1190
+ }
1191
+ return a.id.localeCompare(b.id);
1192
+ });
1193
+ const limitedCandidates = options.limit ? candidates.slice(0, options.limit) : candidates;
1194
+ const candidatesWithSha = limitedCandidates.filter((c) => c.reviewedHeadSha);
1195
+ if (candidatesWithSha.length > 0) {
1196
+ const currentHead = await ensureHeadSha();
1197
+ if (currentHead) {
1198
+ for (const candidate of candidatesWithSha) {
1199
+ if (!candidate.reviewedHeadSha) continue;
1200
+ if (candidate.reviewedHeadSha === currentHead) {
1201
+ continue;
1202
+ }
1203
+ if (candidate.reviewedFiles && candidate.reviewedFiles.length > 0) {
1204
+ const changedFiles = await getChangedFiles(
1205
+ rootDir,
1206
+ candidate.reviewedHeadSha,
1207
+ currentHead,
1208
+ candidate.reviewedFiles
1209
+ );
1210
+ if (changedFiles.length > 0) {
1211
+ candidate.isStaleReview = true;
1212
+ candidate.staleReason = "files_changed";
1213
+ candidate.whyIncluded = `${candidate.whyIncluded} (needs re-review: ${changedFiles.length} file(s) changed)`;
1214
+ }
1215
+ } else {
1216
+ candidate.isStaleReview = true;
1217
+ candidate.staleReason = "head_changed";
1218
+ candidate.whyIncluded = `${candidate.whyIncluded} (needs re-review)`;
1219
+ }
1220
+ }
1221
+ }
1222
+ }
1223
+ if (options.context) {
1224
+ for (const candidate of limitedCandidates) {
1225
+ if (candidate.kind !== "backlog") continue;
1226
+ try {
1227
+ const item = await findBacklogItem(backlogDir, candidate.id);
1228
+ if (item?.body) {
1229
+ candidate.bodyPreview = extractBodyPreview(item.body);
1230
+ const criteria = extractAcceptanceCriteria(item.body);
1231
+ if (criteria.length > 0) {
1232
+ candidate.acceptanceCriteria = criteria;
1233
+ }
1234
+ }
1235
+ } catch {
1236
+ }
1237
+ }
1238
+ }
1239
+ return limitedCandidates;
1240
+ }
1241
+ function parseKindOption(raw) {
1242
+ if (!raw) return [];
1243
+ const validKinds = /* @__PURE__ */ new Set(["backlog", "debt", "parking", "all"]);
1244
+ const parts = raw.split(",").map((s) => s.trim().toLowerCase()).filter((s) => s.length > 0);
1245
+ const invalidKinds = parts.filter((kind) => !validKinds.has(kind));
1246
+ if (invalidKinds.length > 0) {
1247
+ throw new Error(`Unknown --kind value(s): ${invalidKinds.join(", ")}`);
1248
+ }
1249
+ if (parts.includes("all")) {
1250
+ return ["backlog", "debt", "parking"];
1251
+ }
1252
+ return [...new Set(parts)];
1253
+ }
1254
+
1255
+ export {
1256
+ getDebtItemAsync,
1257
+ createDebtItemAsync,
1258
+ updateDebtItemAsync,
1259
+ listByBlockingAsync,
1260
+ listByParallelizableAsync,
1261
+ scheduleDebtAsync,
1262
+ completeDebtAsync,
1263
+ listAllDebtAsync,
1264
+ areNearDuplicates,
1265
+ extractBodyPreview,
1266
+ extractAcceptanceCriteria,
1267
+ queryNextItems,
1268
+ parseKindOption
1269
+ };
1270
+ //# sourceMappingURL=chunk-NRNE225N.js.map