@poetic-ai/poetic 1.42.1-bootstrap.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 (781) 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-MXTSOSST.js +1597 -0
  17. package/dist/PromptStore-U6ZD3ZMQ.js +18 -0
  18. package/dist/actions-M3AESHFF.js +322 -0
  19. package/dist/agent-ingest-HO77TH26.js +53 -0
  20. package/dist/aggregator-DNCBINFO.js +12 -0
  21. package/dist/ai-judge-LDWHURKK.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-GFYU6GCQ.js +489 -0
  25. package/dist/api-transport-FS3CQRMN.js +1087 -0
  26. package/dist/apply-completion-mode-JBT2CTQO.js +89 -0
  27. package/dist/artifact-migrator-23L45ISD.js +267 -0
  28. package/dist/ask-UYVZY7JH.js +135 -0
  29. package/dist/auth-CSQP5RHJ.js +67 -0
  30. package/dist/auth-E6XUNZ5M.js +68 -0
  31. package/dist/auth-KQLJPZ2E.js +134 -0
  32. package/dist/auth-OC4E6633.js +71 -0
  33. package/dist/auth-R3NQ2ZF5.js +78 -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-HA3T23SF.js +80 -0
  38. package/dist/autoloop-cleanup-JOGKTLWA.js +109 -0
  39. package/dist/autoloop-evidence-gates-ACB5YW5G.js +36 -0
  40. package/dist/autoloop-gate-policy-XZA5EQFN.js +175 -0
  41. package/dist/autoloop-helpers-EFJLBQUP.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-OPR74YEX.js +85 -0
  47. package/dist/autoloop-termination-summary-RN75F422.js +58 -0
  48. package/dist/autoloop-trajectory-K5I45UBR.js +282 -0
  49. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  50. package/dist/autonomous-loop-controller-4QJMOIIN.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-WXZHUT42.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-YFASRB5Z.js +71 -0
  60. package/dist/change-summary-WY7J5TOX.js +33 -0
  61. package/dist/chunk-25QL3M3L.js +899 -0
  62. package/dist/chunk-2ABC6SEC.js +2626 -0
  63. package/dist/chunk-2AICM4P3.js +1763 -0
  64. package/dist/chunk-2AQUWJPW.js +225 -0
  65. package/dist/chunk-2DY5KNVM.js +276 -0
  66. package/dist/chunk-2QJ3H3L7.js +42 -0
  67. package/dist/chunk-2UH6VQRZ.js +328 -0
  68. package/dist/chunk-2VSQMRCB.js +18 -0
  69. package/dist/chunk-2XQXYBM2.js +130 -0
  70. package/dist/chunk-2YFUIER7.js +426 -0
  71. package/dist/chunk-2YXZCZTX.js +1160 -0
  72. package/dist/chunk-32VLDFRT.js +797 -0
  73. package/dist/chunk-34CNP2HB.js +148 -0
  74. package/dist/chunk-35P3W3JX.js +456 -0
  75. package/dist/chunk-36PEBZAF.js +18 -0
  76. package/dist/chunk-3733QTI7.js +6818 -0
  77. package/dist/chunk-3A5PDH5L.js +12513 -0
  78. package/dist/chunk-3AOKYKA7.js +22 -0
  79. package/dist/chunk-3BCUNHKF.js +475 -0
  80. package/dist/chunk-3C26DPFK.js +566 -0
  81. package/dist/chunk-3FLXLLB7.js +26 -0
  82. package/dist/chunk-3FOZ2VHV.js +100 -0
  83. package/dist/chunk-3G6FZCRF.js +106 -0
  84. package/dist/chunk-3JWNRJSB.js +736 -0
  85. package/dist/chunk-3LUMR3D3.js +156 -0
  86. package/dist/chunk-3M57DADF.js +44 -0
  87. package/dist/chunk-3S62LLWJ.js +543 -0
  88. package/dist/chunk-3VABAKT2.js +1784 -0
  89. package/dist/chunk-44N5WZZH.js +45 -0
  90. package/dist/chunk-45FPSA3B.js +125 -0
  91. package/dist/chunk-4BIPZBT7.js +791 -0
  92. package/dist/chunk-4BJ3O4RQ.js +929 -0
  93. package/dist/chunk-4BTDUT2S.js +42 -0
  94. package/dist/chunk-4CSS7WVI.js +143 -0
  95. package/dist/chunk-4CUY7AFY.js +247 -0
  96. package/dist/chunk-4HN6DF7V.js +1027 -0
  97. package/dist/chunk-4HXKHDNH.js +1064 -0
  98. package/dist/chunk-4KKI477Q.js +44 -0
  99. package/dist/chunk-4NA7FSTV.js +595 -0
  100. package/dist/chunk-4NXPXE62.js +84 -0
  101. package/dist/chunk-4SALLK63.js +9831 -0
  102. package/dist/chunk-4SHKPCGK.js +110 -0
  103. package/dist/chunk-4VJITV4P.js +445 -0
  104. package/dist/chunk-4W2NRXQL.js +1205 -0
  105. package/dist/chunk-4XICK3HN.js +784 -0
  106. package/dist/chunk-55EJVV3C.js +385 -0
  107. package/dist/chunk-5DLKYTQX.js +4003 -0
  108. package/dist/chunk-5EERLVZB.js +139 -0
  109. package/dist/chunk-5HDP7XZG.js +91 -0
  110. package/dist/chunk-5LAMRH4X.js +969 -0
  111. package/dist/chunk-5REDMNLZ.js +310 -0
  112. package/dist/chunk-5UCJARII.js +1984 -0
  113. package/dist/chunk-5WCQRDRB.js +588 -0
  114. package/dist/chunk-5WRLK5KW.js +700 -0
  115. package/dist/chunk-66AGFTBQ.js +131 -0
  116. package/dist/chunk-66CIO2SV.js +48 -0
  117. package/dist/chunk-6BM72ZMG.js +31 -0
  118. package/dist/chunk-6BTFXYRO.js +276 -0
  119. package/dist/chunk-6EDAJH2I.js +68 -0
  120. package/dist/chunk-6EQKFDBH.js +457 -0
  121. package/dist/chunk-6KMJKHIQ.js +2193 -0
  122. package/dist/chunk-6MFRHTRI.js +115 -0
  123. package/dist/chunk-6QMUKUHH.js +632 -0
  124. package/dist/chunk-6TZJRKNW.js +321 -0
  125. package/dist/chunk-6V7HGQFZ.js +20 -0
  126. package/dist/chunk-6Y5TWI7H.js +146 -0
  127. package/dist/chunk-6Y5U7UFY.js +91 -0
  128. package/dist/chunk-6ZLAK3XG.js +14 -0
  129. package/dist/chunk-72XCRQED.js +34 -0
  130. package/dist/chunk-72YTZMAM.js +589 -0
  131. package/dist/chunk-73NCTWKL.js +188 -0
  132. package/dist/chunk-77I6G4CO.js +1 -0
  133. package/dist/chunk-7D7QT3BE.js +688 -0
  134. package/dist/chunk-7DNSNKJV.js +78 -0
  135. package/dist/chunk-7FMJVYBS.js +307 -0
  136. package/dist/chunk-7GDRQBQC.js +419 -0
  137. package/dist/chunk-7IL4A2PP.js +948 -0
  138. package/dist/chunk-7NPSXSHO.js +975 -0
  139. package/dist/chunk-7PS6INZP.js +302 -0
  140. package/dist/chunk-7QCZSLBH.js +1 -0
  141. package/dist/chunk-7R2WLDOS.js +62 -0
  142. package/dist/chunk-7XV3QXLT.js +878 -0
  143. package/dist/chunk-A2WKSVX7.js +43 -0
  144. package/dist/chunk-A3YGID55.js +133 -0
  145. package/dist/chunk-A5MRWHMI.js +1604 -0
  146. package/dist/chunk-A722DEVA.js +14 -0
  147. package/dist/chunk-AG2Z2SUZ.js +554 -0
  148. package/dist/chunk-AHWAZ2MU.js +137 -0
  149. package/dist/chunk-AIAQ3HS3.js +119 -0
  150. package/dist/chunk-ALAB3PBR.js +2206 -0
  151. package/dist/chunk-APPNGGN7.js +365 -0
  152. package/dist/chunk-APV6MK5E.js +137 -0
  153. package/dist/chunk-AQNPGRWS.js +395 -0
  154. package/dist/chunk-ASEP3M2W.js +968 -0
  155. package/dist/chunk-AT4TNPWW.js +2931 -0
  156. package/dist/chunk-ATVKCSGT.js +250 -0
  157. package/dist/chunk-AX6GWE7V.js +47 -0
  158. package/dist/chunk-AZQILSNQ.js +1376 -0
  159. package/dist/chunk-B76KHLX6.js +13 -0
  160. package/dist/chunk-BAV2HJXS.js +194 -0
  161. package/dist/chunk-BBHRN366.js +89 -0
  162. package/dist/chunk-BCZAENOH.js +448 -0
  163. package/dist/chunk-BIGSACCY.js +19527 -0
  164. package/dist/chunk-BPYMCIVD.js +9243 -0
  165. package/dist/chunk-BSE4R6XD.js +322 -0
  166. package/dist/chunk-BVPWRDCO.js +2321 -0
  167. package/dist/chunk-BXI4NXL3.js +507 -0
  168. package/dist/chunk-C3L6YQ7P.js +147 -0
  169. package/dist/chunk-C57KJOUQ.js +121 -0
  170. package/dist/chunk-CCV7BPSY.js +118 -0
  171. package/dist/chunk-CD7ISXA4.js +826 -0
  172. package/dist/chunk-CE5OZBYY.js +21 -0
  173. package/dist/chunk-CFBIG37O.js +154 -0
  174. package/dist/chunk-CHQV73H5.js +408 -0
  175. package/dist/chunk-CJC6GZ46.js +457 -0
  176. package/dist/chunk-CJHRFSNY.js +924 -0
  177. package/dist/chunk-CKP2Q3TP.js +1905 -0
  178. package/dist/chunk-CLKSETWE.js +10 -0
  179. package/dist/chunk-CQM3A35X.js +844 -0
  180. package/dist/chunk-CSLAS5GW.js +4007 -0
  181. package/dist/chunk-CTLUBNCW.js +622 -0
  182. package/dist/chunk-CVMVZWG4.js +3544 -0
  183. package/dist/chunk-CYB6QDCT.js +263 -0
  184. package/dist/chunk-D5EP5D2W.js +26 -0
  185. package/dist/chunk-DC4ZYMXJ.js +115 -0
  186. package/dist/chunk-DCAVAABI.js +348 -0
  187. package/dist/chunk-DCYF7EKG.js +26 -0
  188. package/dist/chunk-DF5SLDE4.js +966 -0
  189. package/dist/chunk-DN7UMLF7.js +5678 -0
  190. package/dist/chunk-DSFM56OA.js +1203 -0
  191. package/dist/chunk-DTY4APYV.js +218 -0
  192. package/dist/chunk-E3NTPHEO.js +194 -0
  193. package/dist/chunk-E74LUIID.js +302 -0
  194. package/dist/chunk-EJ42BNGY.js +2904 -0
  195. package/dist/chunk-EJ4ZAWLV.js +305 -0
  196. package/dist/chunk-EJGCZGUF.js +1483 -0
  197. package/dist/chunk-EK2U3YEG.js +486 -0
  198. package/dist/chunk-ELMFYNV7.js +109 -0
  199. package/dist/chunk-ENRGKNR5.js +25 -0
  200. package/dist/chunk-EQGIDAUF.js +62 -0
  201. package/dist/chunk-EX3OM35G.js +20414 -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-FCNAS3W2.js +1033 -0
  207. package/dist/chunk-FD4ERYEG.js +22 -0
  208. package/dist/chunk-FDVZLG6Z.js +3104 -0
  209. package/dist/chunk-FEPIFY7D.js +511 -0
  210. package/dist/chunk-FEQ4HXL7.js +412 -0
  211. package/dist/chunk-FFH5HHJU.js +5351 -0
  212. package/dist/chunk-FH7WOJAE.js +79 -0
  213. package/dist/chunk-FKAUPHMR.js +96 -0
  214. package/dist/chunk-FRG57FPM.js +240 -0
  215. package/dist/chunk-FUVP64ER.js +31 -0
  216. package/dist/chunk-G2PTLLEL.js +284 -0
  217. package/dist/chunk-G35UYQ6Z.js +69 -0
  218. package/dist/chunk-G36W2T2S.js +1143 -0
  219. package/dist/chunk-G4THLFV3.js +148 -0
  220. package/dist/chunk-GAFJEYLK.js +29 -0
  221. package/dist/chunk-GCCAPO3S.js +118 -0
  222. package/dist/chunk-GG6KJYW6.js +85 -0
  223. package/dist/chunk-GHHFDU2U.js +55 -0
  224. package/dist/chunk-GHTZSQB7.js +57 -0
  225. package/dist/chunk-GJTWJNLV.js +1374 -0
  226. package/dist/chunk-GKN3HMN4.js +2809 -0
  227. package/dist/chunk-GNH3QGTL.js +1342 -0
  228. package/dist/chunk-GOAQ2I7Y.js +7000 -0
  229. package/dist/chunk-GSGD5E4C.js +30 -0
  230. package/dist/chunk-GXWAJQOJ.js +5011 -0
  231. package/dist/chunk-H2AYQIHW.js +224 -0
  232. package/dist/chunk-H6G7QRMQ.js +35 -0
  233. package/dist/chunk-H7JAGHZT.js +59 -0
  234. package/dist/chunk-HAC6EHZZ.js +79 -0
  235. package/dist/chunk-HE2KH6EQ.js +161 -0
  236. package/dist/chunk-HIHENQDX.js +66 -0
  237. package/dist/chunk-HIO33P3G.js +19 -0
  238. package/dist/chunk-HK4AQZSR.js +438 -0
  239. package/dist/chunk-HMVQIPH3.js +547 -0
  240. package/dist/chunk-HOYBYAOA.js +257 -0
  241. package/dist/chunk-HQLGXODD.js +123 -0
  242. package/dist/chunk-HQXYYUNY.js +1231 -0
  243. package/dist/chunk-HY3ESWCA.js +708 -0
  244. package/dist/chunk-I46EG2XQ.js +65 -0
  245. package/dist/chunk-I4NPDSCB.js +279 -0
  246. package/dist/chunk-I5WRT7ZR.js +514 -0
  247. package/dist/chunk-I6BL3PDH.js +1024 -0
  248. package/dist/chunk-IATQ7NBI.js +679 -0
  249. package/dist/chunk-IC7I6YIJ.js +301 -0
  250. package/dist/chunk-IDCSOZVN.js +78 -0
  251. package/dist/chunk-IEXU4RR6.js +5742 -0
  252. package/dist/chunk-IFCBYECK.js +112 -0
  253. package/dist/chunk-IFZCPEY2.js +66 -0
  254. package/dist/chunk-IKFP2KUR.js +48 -0
  255. package/dist/chunk-IP7BYVUV.js +338 -0
  256. package/dist/chunk-IRJ2I6KH.js +166 -0
  257. package/dist/chunk-IUXNGKA6.js +152 -0
  258. package/dist/chunk-IZYIQQ7X.js +53 -0
  259. package/dist/chunk-IZZK3H6I.js +2175 -0
  260. package/dist/chunk-J3J4P7RW.js +353 -0
  261. package/dist/chunk-J62KPGII.js +464 -0
  262. package/dist/chunk-J6P3FWWW.js +130 -0
  263. package/dist/chunk-JD6SIZED.js +712 -0
  264. package/dist/chunk-JEV6UI7H.js +537 -0
  265. package/dist/chunk-JKBHJQMT.js +434 -0
  266. package/dist/chunk-JLS65NUQ.js +14 -0
  267. package/dist/chunk-JOSYEJKY.js +141 -0
  268. package/dist/chunk-JPKSXKNB.js +94 -0
  269. package/dist/chunk-JQD5VYKR.js +483 -0
  270. package/dist/chunk-JSOWEFEQ.js +351 -0
  271. package/dist/chunk-JSWMRQYG.js +28 -0
  272. package/dist/chunk-K4XK7SGB.js +6783 -0
  273. package/dist/chunk-K54Y7MLK.js +160 -0
  274. package/dist/chunk-KAT4RXUT.js +521 -0
  275. package/dist/chunk-KDMKKIRK.js +103 -0
  276. package/dist/chunk-KM3F7SYE.js +702 -0
  277. package/dist/chunk-KNDYMVWN.js +102 -0
  278. package/dist/chunk-KNT72VR6.js +132 -0
  279. package/dist/chunk-KQEBSK3T.js +274 -0
  280. package/dist/chunk-KT6VHSPF.js +84 -0
  281. package/dist/chunk-KTMW65UX.js +14 -0
  282. package/dist/chunk-L4427KOE.js +26 -0
  283. package/dist/chunk-L6OM4A22.js +189 -0
  284. package/dist/chunk-L7E6XCRA.js +1042 -0
  285. package/dist/chunk-L7JZLXQL.js +173 -0
  286. package/dist/chunk-LAMKBTXX.js +40 -0
  287. package/dist/chunk-LDCF2MKN.js +132 -0
  288. package/dist/chunk-LEIIWPWQ.js +78 -0
  289. package/dist/chunk-LFTQVYBB.js +31 -0
  290. package/dist/chunk-LGHII5ET.js +23 -0
  291. package/dist/chunk-LH34OGSB.js +265 -0
  292. package/dist/chunk-LO3X5NLS.js +326 -0
  293. package/dist/chunk-LPITVM7M.js +339 -0
  294. package/dist/chunk-LR5IJIGV.js +810 -0
  295. package/dist/chunk-LUVKFFWR.js +315 -0
  296. package/dist/chunk-LWCBNGH6.js +35 -0
  297. package/dist/chunk-LWTN3WRV.js +260 -0
  298. package/dist/chunk-LZBBXYWF.js +1004 -0
  299. package/dist/chunk-M34PS4NE.js +2213 -0
  300. package/dist/chunk-M3HQYKQX.js +308 -0
  301. package/dist/chunk-MCPQNJMK.js +482 -0
  302. package/dist/chunk-MF5HP6XV.js +221 -0
  303. package/dist/chunk-MFADRRTR.js +112 -0
  304. package/dist/chunk-MN6PL4AN.js +120 -0
  305. package/dist/chunk-MQ4WA34C.js +206 -0
  306. package/dist/chunk-MTVZITQ2.js +185 -0
  307. package/dist/chunk-MWHF5V7U.js +223 -0
  308. package/dist/chunk-MWHLBPNU.js +211 -0
  309. package/dist/chunk-MWK5UZQ3.js +1068 -0
  310. package/dist/chunk-MYLH2S4G.js +64 -0
  311. package/dist/chunk-MZ5WYKNA.js +28 -0
  312. package/dist/chunk-N5DX4JAK.js +12 -0
  313. package/dist/chunk-NEDCMN7E.js +415 -0
  314. package/dist/chunk-NEQUQHOX.js +223 -0
  315. package/dist/chunk-NGK6PEOG.js +25 -0
  316. package/dist/chunk-NM6PMYY4.js +768 -0
  317. package/dist/chunk-NOZGR2QO.js +2373 -0
  318. package/dist/chunk-NP2V3L7K.js +226 -0
  319. package/dist/chunk-NPZJMUZ4.js +194 -0
  320. package/dist/chunk-NRLY536M.js +260 -0
  321. package/dist/chunk-NS33V3IM.js +51 -0
  322. package/dist/chunk-NWOYOA6H.js +378 -0
  323. package/dist/chunk-NWRUSEXG.js +322 -0
  324. package/dist/chunk-O6V4PNLO.js +63 -0
  325. package/dist/chunk-OGMSYL6J.js +227 -0
  326. package/dist/chunk-OIS7J26S.js +319 -0
  327. package/dist/chunk-OKBTRSZI.js +205 -0
  328. package/dist/chunk-OMX5VL43.js +79 -0
  329. package/dist/chunk-ON3G73BU.js +264 -0
  330. package/dist/chunk-OPYFYTWQ.js +220 -0
  331. package/dist/chunk-OQ6K46CK.js +1734 -0
  332. package/dist/chunk-OSDYVKHW.js +2440 -0
  333. package/dist/chunk-OUM5S64R.js +3429 -0
  334. package/dist/chunk-OWB7JXUS.js +751 -0
  335. package/dist/chunk-OYZYO7TV.js +47 -0
  336. package/dist/chunk-P47VN5F4.js +282 -0
  337. package/dist/chunk-P6VQROCO.js +594 -0
  338. package/dist/chunk-P7CQGPLS.js +30 -0
  339. package/dist/chunk-PA6BCSOX.js +2872 -0
  340. package/dist/chunk-PGSPX4SU.js +15 -0
  341. package/dist/chunk-PIKLF7BM.js +432 -0
  342. package/dist/chunk-PJWJ3SAV.js +22 -0
  343. package/dist/chunk-PKIFMV72.js +100 -0
  344. package/dist/chunk-PTH5E5XO.js +195 -0
  345. package/dist/chunk-PYITM4N2.js +79 -0
  346. package/dist/chunk-PZ5AY32C.js +10 -0
  347. package/dist/chunk-Q3RO7N35.js +45 -0
  348. package/dist/chunk-Q3WIC6GQ.js +2670 -0
  349. package/dist/chunk-QGJDMEOV.js +34 -0
  350. package/dist/chunk-QJYIHVXT.js +100 -0
  351. package/dist/chunk-QNOB37UH.js +58 -0
  352. package/dist/chunk-QOCOVLUH.js +462 -0
  353. package/dist/chunk-QTCJ5CC5.js +172 -0
  354. package/dist/chunk-QU6JQJMH.js +3063 -0
  355. package/dist/chunk-QVFV5IP2.js +232 -0
  356. package/dist/chunk-QVZMFDYG.js +29 -0
  357. package/dist/chunk-R2ZYWNW3.js +1581 -0
  358. package/dist/chunk-R4UWBC35.js +200 -0
  359. package/dist/chunk-R6W23LKN.js +254 -0
  360. package/dist/chunk-RAK5HOIJ.js +459 -0
  361. package/dist/chunk-RDFRCT64.js +168 -0
  362. package/dist/chunk-RE5VZDFQ.js +58 -0
  363. package/dist/chunk-RGROYC2G.js +638 -0
  364. package/dist/chunk-RGWHUI5E.js +68 -0
  365. package/dist/chunk-RHVG6UNL.js +205 -0
  366. package/dist/chunk-RI4EX2QE.js +18 -0
  367. package/dist/chunk-RIKFAWZF.js +71 -0
  368. package/dist/chunk-RJAAKDRX.js +17 -0
  369. package/dist/chunk-RSXSD4MH.js +1016 -0
  370. package/dist/chunk-RW7RVSDV.js +79 -0
  371. package/dist/chunk-RWREC3KJ.js +517 -0
  372. package/dist/chunk-RZY7RKM5.js +500 -0
  373. package/dist/chunk-S2MNWFAG.js +52 -0
  374. package/dist/chunk-S2VQCZO4.js +22 -0
  375. package/dist/chunk-S54MKU6V.js +117 -0
  376. package/dist/chunk-S77XPALC.js +239 -0
  377. package/dist/chunk-SCW4ZF6R.js +150 -0
  378. package/dist/chunk-SKHGYQ7W.js +405 -0
  379. package/dist/chunk-SNLBO4BF.js +247 -0
  380. package/dist/chunk-SP3LFU6B.js +60 -0
  381. package/dist/chunk-SQZRPY23.js +5181 -0
  382. package/dist/chunk-SSB5UQHA.js +4128 -0
  383. package/dist/chunk-STJOHHSF.js +605 -0
  384. package/dist/chunk-STV6LYYE.js +45 -0
  385. package/dist/chunk-SUN4OFTW.js +740 -0
  386. package/dist/chunk-SURZ2WFE.js +326 -0
  387. package/dist/chunk-SUZ7UYZH.js +1972 -0
  388. package/dist/chunk-SZ7DL357.js +1047 -0
  389. package/dist/chunk-T2SZELJL.js +624 -0
  390. package/dist/chunk-T6VPI2XP.js +10338 -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-TIBZPAD2.js +9924 -0
  397. package/dist/chunk-TK644IOG.js +1813 -0
  398. package/dist/chunk-TRSVUPCX.js +25 -0
  399. package/dist/chunk-TSPQONRT.js +4533 -0
  400. package/dist/chunk-TSXGRLPR.js +107 -0
  401. package/dist/chunk-TWYLVAS2.js +152 -0
  402. package/dist/chunk-U2S3YEX3.js +224 -0
  403. package/dist/chunk-U32HWI76.js +437 -0
  404. package/dist/chunk-U45RTRGY.js +818 -0
  405. package/dist/chunk-U62VCQGR.js +49 -0
  406. package/dist/chunk-UDMS5AD3.js +307 -0
  407. package/dist/chunk-UGX7GI37.js +94 -0
  408. package/dist/chunk-UH3JJSHK.js +1 -0
  409. package/dist/chunk-UHRBTZYY.js +208 -0
  410. package/dist/chunk-UHT2KRG5.js +193 -0
  411. package/dist/chunk-UI2F6DJ5.js +118 -0
  412. package/dist/chunk-UKMAFG7A.js +189 -0
  413. package/dist/chunk-UUH2RVKS.js +585 -0
  414. package/dist/chunk-UVBBFDFQ.js +270 -0
  415. package/dist/chunk-UXZF3B7T.js +75 -0
  416. package/dist/chunk-V6YLL5WA.js +3746 -0
  417. package/dist/chunk-V72RMBM4.js +48 -0
  418. package/dist/chunk-VBNCKCCI.js +16 -0
  419. package/dist/chunk-VCAUV5XQ.js +3679 -0
  420. package/dist/chunk-VDSH7O4Y.js +152 -0
  421. package/dist/chunk-VNSYKC25.js +24 -0
  422. package/dist/chunk-VTLNJQ44.js +133 -0
  423. package/dist/chunk-VV6HOXRC.js +302 -0
  424. package/dist/chunk-VVGEPBPS.js +218 -0
  425. package/dist/chunk-VXF4Q3FW.js +20 -0
  426. package/dist/chunk-W3ZGW3C5.js +331 -0
  427. package/dist/chunk-W4OMESPG.js +271 -0
  428. package/dist/chunk-WDUORIHF.js +877 -0
  429. package/dist/chunk-WDVTY4U6.js +148 -0
  430. package/dist/chunk-WGXYDLMX.js +4386 -0
  431. package/dist/chunk-WMPU2UOV.js +82 -0
  432. package/dist/chunk-WOEVVPDP.js +1125 -0
  433. package/dist/chunk-WTLMSPBQ.js +256 -0
  434. package/dist/chunk-X43NMU4Z.js +1124 -0
  435. package/dist/chunk-X5NTI5U5.js +368 -0
  436. package/dist/chunk-X6UIEADS.js +949 -0
  437. package/dist/chunk-XAONGNST.js +57 -0
  438. package/dist/chunk-XB5YLCLB.js +13 -0
  439. package/dist/chunk-XGYF2QMZ.js +351 -0
  440. package/dist/chunk-XHEKQENB.js +255 -0
  441. package/dist/chunk-XPHKYHO4.js +878 -0
  442. package/dist/chunk-XQD2B6BB.js +507 -0
  443. package/dist/chunk-XT2ZQVTC.js +558 -0
  444. package/dist/chunk-XUSRFFA7.js +1859 -0
  445. package/dist/chunk-XUXVDPSZ.js +50 -0
  446. package/dist/chunk-XV7NZL4B.js +57 -0
  447. package/dist/chunk-XXCGJGSQ.js +121 -0
  448. package/dist/chunk-XYGDZCB5.js +659 -0
  449. package/dist/chunk-XZAMZUX5.js +992 -0
  450. package/dist/chunk-XZE4XARH.js +563 -0
  451. package/dist/chunk-Y34DUC4A.js +1356 -0
  452. package/dist/chunk-Y3J4JMTU.js +61 -0
  453. package/dist/chunk-Y4RC2YFX.js +1270 -0
  454. package/dist/chunk-Y55LZN5U.js +52 -0
  455. package/dist/chunk-Y5677NDO.js +183 -0
  456. package/dist/chunk-YESZJFK6.js +220 -0
  457. package/dist/chunk-YGXKOBQQ.js +292 -0
  458. package/dist/chunk-YMX76IOS.js +31 -0
  459. package/dist/chunk-YOTXESEH.js +257 -0
  460. package/dist/chunk-YQAAKTVH.js +712 -0
  461. package/dist/chunk-YVORHQ2S.js +579 -0
  462. package/dist/chunk-YWNAHW24.js +1552 -0
  463. package/dist/chunk-Z476RATD.js +1689 -0
  464. package/dist/chunk-ZDTGECTN.js +235 -0
  465. package/dist/chunk-ZDTMICNY.js +316 -0
  466. package/dist/chunk-ZIPWI2LY.js +151 -0
  467. package/dist/chunk-ZIVYXF7A.js +2344 -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-HUOTBRM3.js +40 -0
  472. package/dist/cli-validation-WLXWLUJL.js +111 -0
  473. package/dist/commit-utils-3QV2P6RA.js +202 -0
  474. package/dist/compete-config-resolver-SNH3TT2Q.js +76 -0
  475. package/dist/compete-request-XWNPOARL.js +364 -0
  476. package/dist/compete-results-PAP67LDR.js +208 -0
  477. package/dist/competition-outcome-tracker-GOZXNAQU.js +38 -0
  478. package/dist/config-HWHUNA72.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-L3VRNTSG.js +67 -0
  483. package/dist/config-validator-SIIQEOFQ.js +72 -0
  484. package/dist/cost-7CX37DU3.js +53 -0
  485. package/dist/coverage-orchestrator-MNKHD6YC.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-CGBCD7IQ.js +186 -0
  492. package/dist/domain-analyzer-DL6BDR2N.js +29 -0
  493. package/dist/ensure-initialized-4BY73HLE.js +52 -0
  494. package/dist/entry.js +940 -0
  495. package/dist/environment-IGVH5X53.js +81 -0
  496. package/dist/error-parser-core-PPZ36A4S.js +50 -0
  497. package/dist/escalation-ladder-NWY5BJ57.js +130 -0
  498. package/dist/evaluation-context-KMWDSDYD.js +35 -0
  499. package/dist/evidence-plan-resolver-YIVH76PU.js +85 -0
  500. package/dist/execution-data-writer-OHAQ7G5H.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-KBH2MC3M.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-IYBMCZG7.js +149 -0
  507. package/dist/file-utils-XIVR2ZMA.js +47 -0
  508. package/dist/flywheel-autoloop-executor-R3KD2G4D.js +249 -0
  509. package/dist/flywheel-competition-executor-XCFGVJSK.js +259 -0
  510. package/dist/flywheel-executor-LTSIZN2L.js +369 -0
  511. package/dist/flywheel-git-isolation-CZ5YVVZY.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-6E33DJDK.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-AZ46EPRP.js +73 -0
  519. package/dist/git-worktree-IY6V6DUO.js +18 -0
  520. package/dist/github-pr-manager-4XUO2YTM.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 +108644 -0
  525. package/dist/instructions-CM6THDV7.js +64 -0
  526. package/dist/invoke-provider-auth-V5TC5UDS.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-VA6VXNOV.js +23 -0
  531. package/dist/linux-host-class-UY4KVLFD.js +29 -0
  532. package/dist/llm-judge-executor-34YPIRJ7.js +133 -0
  533. package/dist/local-executor-LJJSCWZX.js +223 -0
  534. package/dist/logger-6PRYM56M.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-LHDTJ4TY.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-MCI3F4PX.js +72 -0
  542. package/dist/next-HQKDXIIR.js +90 -0
  543. package/dist/next-JC3V2UCS.js +69 -0
  544. package/dist/optimization-config-resolver-QPSFLCJU.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-DZK24LSZ.js +270 -0
  552. package/dist/plan-backlog-show-fast-63GBBH6Q.js +406 -0
  553. package/dist/plan-sprint-list-fast-TJ6ZUF5E.js +162 -0
  554. package/dist/plan-sprint-status-fast-YWE5X3NG.js +208 -0
  555. package/dist/plan-task-status-fast-K22BTTBW.js +349 -0
  556. package/dist/plan-to-flywheel-VFGCPINA.js +456 -0
  557. package/dist/planning-backlog-Y6TIJYWU.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-2XP3FWH2.js +149 -0
  565. package/dist/prompts-EPAAAMMF.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-KWTYA5QV.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-33SHK43X.js +70 -0
  575. package/dist/quickstart-E32SODTA.js +62 -0
  576. package/dist/readiness-REWW7OSV.js +96 -0
  577. package/dist/registry-N6L36RE2.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-LXQYDSKS.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-VGQU35QM.js +160 -0
  587. package/dist/run-poetic-tui-ZZXFDOQ4.js +13517 -0
  588. package/dist/run-simulation.js +376 -0
  589. package/dist/runner-2YPKOJ6A.js +1092 -0
  590. package/dist/runner-HEJJ65AJ.js +1571 -0
  591. package/dist/safety-OCC4KJJR.js +64 -0
  592. package/dist/safety-stanza-BSVE6OJU.js +60 -0
  593. package/dist/sandbox-3AG2WJLM.js +94 -0
  594. package/dist/sandbox-5JOFBS75.js +81 -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-QGXLN3SO.js +338 -0
  603. package/dist/sprint-bridge-FNKQCJGL.js +68 -0
  604. package/dist/sprint-execution-service-4ELKNJDS.js +311 -0
  605. package/dist/sprint-manager-7TNCXCIX.js +91 -0
  606. package/dist/sqlite-wrapper-UDWCTNLJ.js +17 -0
  607. package/dist/stale-cleanup-orchestrator-H5XKGZP2.js +62 -0
  608. package/dist/storage-access-F6ALDN4S.js +22 -0
  609. package/dist/synthesis-TGQUVAW3.js +185 -0
  610. package/dist/task-classifier-DZIRBSS2.js +494 -0
  611. package/dist/task-list-fast-PJ2EXVZE.js +147 -0
  612. package/dist/task-manager-5742GMJK.js +93 -0
  613. package/dist/task-splitter-6MBXSWF6.js +79 -0
  614. package/dist/task-type-detector-OLVOMXZO.js +21 -0
  615. package/dist/task-type-resolver-4HG6TXFV.js +42 -0
  616. package/dist/telemetry-JX7EMNOZ.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-2MLJ4J6B.js +125 -0
  620. package/dist/token-estimator-PDU345YE.js +37 -0
  621. package/dist/transports-3UEO6C5Y.js +255 -0
  622. package/dist/unified-cost-tracker-F3W5NMPG.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-XCOYVCM4.js +33 -0
  627. package/dist/variant-state-cleanup-QIEKRULB.js +280 -0
  628. package/dist/variant-success-PJXWE3ZV.js +12 -0
  629. package/dist/variant-worker-HPTUA37Z.js +4196 -0
  630. package/dist/variant-worker.js +24 -0
  631. package/dist/variants-2HDYZOCG.js +233 -0
  632. package/dist/verification-toolchains-VVKT3GBF.js +28 -0
  633. package/dist/verify-commands-5F6CJV4B.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-AGWHD4D2.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 +7040 -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/package.json +331 -0
  720. package/schemas/README.md +80 -0
  721. package/schemas/config-v1.schema.json +136 -0
  722. package/schemas/execution-config.schema.json +47 -0
  723. package/schemas/judge-scoring.schema.json +370 -0
  724. package/schemas/poetic.config.schema.json +2214 -0
  725. package/schemas/provider-config.schema.json +203 -0
  726. package/schemas/telemetry-config.schema.json +79 -0
  727. package/schemas/user-preferences.schema.json +141 -0
  728. package/scripts/assert-node-runtime.mjs +140 -0
  729. package/scripts/preflight-native.mjs +49 -0
  730. package/scripts/preinstall-node-check.mjs +78 -0
  731. package/scripts/setup-git-hooks.mjs +24 -0
  732. package/scripts/sync.sh +2722 -0
  733. package/scripts/write-node-launcher.sh +108 -0
  734. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  735. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  736. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  737. package/templates/.poetic/README.md +37 -0
  738. package/templates/.poetic/agents/README.md +296 -0
  739. package/templates/.poetic/agents/api-documenter.md +147 -0
  740. package/templates/.poetic/agents/backend-architect.md +31 -0
  741. package/templates/.poetic/agents/code-reviewer.md +157 -0
  742. package/templates/.poetic/agents/data-scientist.md +179 -0
  743. package/templates/.poetic/agents/database-optimizer.md +145 -0
  744. package/templates/.poetic/agents/debugger.md +31 -0
  745. package/templates/.poetic/agents/deployment-engineer.md +164 -0
  746. package/templates/.poetic/agents/devops-troubleshooter.md +139 -0
  747. package/templates/.poetic/agents/frontend-developer.md +150 -0
  748. package/templates/.poetic/agents/javascript-pro.md +36 -0
  749. package/templates/.poetic/agents/performance-engineer.md +151 -0
  750. package/templates/.poetic/agents/python-pro.md +137 -0
  751. package/templates/.poetic/agents/test-automator.md +147 -0
  752. package/templates/.poetic/agents/typescript-pro.md +34 -0
  753. package/templates/.poetic/config/poetic.config.jsonc +69 -0
  754. package/templates/.poetic/config/project-context.template.json +6 -0
  755. package/templates/.poetic/config/task-type-aliases.presets/kanban.yaml +14 -0
  756. package/templates/.poetic/config/task-type-aliases.presets/scrum.yaml +17 -0
  757. package/templates/.poetic/config/task-type-aliases.presets/xp.yaml +12 -0
  758. package/templates/.poetic/config/task-type-aliases.yaml +28 -0
  759. package/templates/.poetic/gitignore.template +55 -0
  760. package/templates/.poetic/task-types/analysis.yaml +40 -0
  761. package/templates/.poetic/task-types/architecture.yaml +38 -0
  762. package/templates/.poetic/task-types/doc.yaml +35 -0
  763. package/templates/.poetic/task-types/feature.yaml +23 -0
  764. package/templates/.poetic/task-types/general.yaml +6 -0
  765. package/templates/.poetic/task-types/security.yaml +39 -0
  766. package/templates/AGENTS.template.md +99 -0
  767. package/templates/CLAUDE.template.md +1 -0
  768. package/templates/GEMINI.template.md +1 -0
  769. package/templates/builtin-workflows/code-review.yaml +73 -0
  770. package/templates/builtin-workflows/compete-streak.yaml +78 -0
  771. package/templates/builtin-workflows/hello-verify.yaml +10 -0
  772. package/templates/builtin-workflows/judge-regression.yaml +114 -0
  773. package/templates/builtin-workflows/skills/code-review/SKILL.md +60 -0
  774. package/templates/builtin-workflows/skills/hello-verify/SKILL.md +6 -0
  775. package/templates/guard-kit/GUARD_SETUP.md.template +255 -0
  776. package/templates/guard-kit/check.mjs.template +777 -0
  777. package/templates/guard-kit/config.json.template +6 -0
  778. package/templates/guard-kit/poetic-guard.yml.template +189 -0
  779. package/templates/profiles/README.md +56 -0
  780. package/templates/profiles/frontier-claude.json +27 -0
  781. package/templates/profiles/frontier-codex.json +26 -0
@@ -0,0 +1,924 @@
1
+ import {
2
+ metadata
3
+ } from "./chunk-3FLXLLB7.js";
4
+ import {
5
+ reportTransportDecision,
6
+ selectProviderExecutor
7
+ } from "./chunk-R2ZYWNW3.js";
8
+ import {
9
+ resolveConfiguredProviderExecutionTransport
10
+ } from "./chunk-IZZK3H6I.js";
11
+ import {
12
+ resolveProviderStreamingEnabled
13
+ } from "./chunk-HIO33P3G.js";
14
+ import {
15
+ TMUX_COMPLETION_SIGNAL_GRACE_MS,
16
+ createLineDelimitedTmuxCompletionSignal,
17
+ executeProviderCommand
18
+ } from "./chunk-SQZRPY23.js";
19
+ import {
20
+ writeFileAtomic
21
+ } from "./chunk-36PEBZAF.js";
22
+ import {
23
+ createRetryOptions,
24
+ withRetry
25
+ } from "./chunk-T6VPI2XP.js";
26
+ import {
27
+ deriveOpencodePrefixes
28
+ } from "./chunk-XT2ZQVTC.js";
29
+ import {
30
+ safeJsonParse
31
+ } from "./chunk-S54MKU6V.js";
32
+ import {
33
+ ProviderExecutionError
34
+ } from "./chunk-LUVKFFWR.js";
35
+ import {
36
+ PROVIDER_CATALOG_SHA256,
37
+ ProviderRegistry,
38
+ getRefreshOverlayOperatorNotice,
39
+ resolveRefreshOverlayDisposition
40
+ } from "./chunk-AT4TNPWW.js";
41
+ import {
42
+ findProjectRoot,
43
+ resolveProvidersConfigPath
44
+ } from "./chunk-L6OM4A22.js";
45
+ import {
46
+ debugLog,
47
+ isDebugMode
48
+ } from "./chunk-EJGCZGUF.js";
49
+
50
+ // src/core/providers/opencode/output-adapter.ts
51
+ function asRecord(value) {
52
+ return value && typeof value === "object" ? value : void 0;
53
+ }
54
+ function readNumberField(record, keys) {
55
+ for (const key of keys) {
56
+ const value = record?.[key];
57
+ if (typeof value === "number") return value;
58
+ if (typeof value === "string") {
59
+ const parsed = Number(value);
60
+ if (Number.isFinite(parsed)) return parsed;
61
+ }
62
+ }
63
+ return void 0;
64
+ }
65
+ function parseJsonObjectsFromStream(stream) {
66
+ const objects = [];
67
+ let start = -1;
68
+ let depth = 0;
69
+ let inString = false;
70
+ let escaping = false;
71
+ for (let index = 0; index < stream.length; index++) {
72
+ const char = stream[index];
73
+ if (start === -1) {
74
+ if (char === "{") {
75
+ start = index;
76
+ depth = 1;
77
+ inString = false;
78
+ escaping = false;
79
+ }
80
+ continue;
81
+ }
82
+ if (inString) {
83
+ if (escaping) {
84
+ escaping = false;
85
+ } else if (char === "\\") {
86
+ escaping = true;
87
+ } else if (char === '"') {
88
+ inString = false;
89
+ }
90
+ continue;
91
+ }
92
+ if (char === '"') {
93
+ inString = true;
94
+ continue;
95
+ }
96
+ if (char === "{") {
97
+ depth++;
98
+ continue;
99
+ }
100
+ if (char === "}") {
101
+ depth--;
102
+ if (depth === 0) {
103
+ objects.push(stream.slice(start, index + 1));
104
+ start = -1;
105
+ }
106
+ }
107
+ }
108
+ return objects;
109
+ }
110
+ function extractTextFromContent(content) {
111
+ if (typeof content === "string") return content;
112
+ if (!Array.isArray(content)) return "";
113
+ let aggregate = "";
114
+ for (const item of content) {
115
+ if (typeof item === "string") {
116
+ aggregate += item;
117
+ continue;
118
+ }
119
+ const record = asRecord(item);
120
+ if (!record) continue;
121
+ if (typeof record.text === "string") {
122
+ aggregate += record.text;
123
+ continue;
124
+ }
125
+ if (typeof record.content === "string") {
126
+ aggregate += record.content;
127
+ continue;
128
+ }
129
+ if (typeof record.value === "string") {
130
+ aggregate += record.value;
131
+ }
132
+ }
133
+ return aggregate;
134
+ }
135
+ function extractTextFromEvent(evt) {
136
+ if (typeof evt.text === "string") return evt.text;
137
+ if (typeof evt.delta === "string") return evt.delta;
138
+ if (typeof evt.message === "string") return evt.message;
139
+ if (typeof evt.output === "string") return evt.output;
140
+ if (typeof evt.content === "string") return evt.content;
141
+ const contentText = extractTextFromContent(evt.content);
142
+ if (contentText) return contentText;
143
+ const part = asRecord(evt.part);
144
+ if (typeof part?.text === "string") return part.text;
145
+ if (typeof part?.content === "string") return part.content;
146
+ const partContentText = extractTextFromContent(part?.content);
147
+ if (partContentText) return partContentText;
148
+ const data = asRecord(evt.data);
149
+ if (!data) return "";
150
+ if (typeof data.text === "string") return data.text;
151
+ if (typeof data.message === "string") return data.message;
152
+ if (typeof data.content === "string") return data.content;
153
+ if (typeof data.output === "string") return data.output;
154
+ return extractTextFromContent(data.content);
155
+ }
156
+ function readStringField(record, keys) {
157
+ for (const key of keys) {
158
+ const value = record?.[key];
159
+ if (typeof value === "string" && value.trim().length > 0) {
160
+ return value.trim();
161
+ }
162
+ }
163
+ return void 0;
164
+ }
165
+ function extractErrorMessage(errorRecord) {
166
+ if (!errorRecord) return void 0;
167
+ const direct = readStringField(errorRecord, ["message", "error", "detail", "description"]) ?? readStringField(asRecord(errorRecord.data), ["message", "error", "detail", "description"]);
168
+ if (direct) return direct;
169
+ const ownKeys = Object.keys(errorRecord);
170
+ const informativeKeys = ownKeys.filter((k) => k !== "type");
171
+ if (informativeKeys.length === 0) return void 0;
172
+ try {
173
+ const encoded = JSON.stringify(errorRecord);
174
+ return encoded === "{}" ? void 0 : encoded;
175
+ } catch {
176
+ return void 0;
177
+ }
178
+ }
179
+ function isStepFinishEvent(evt) {
180
+ const evtType = typeof evt.type === "string" ? evt.type : void 0;
181
+ const evtEvent = typeof evt.event === "string" ? evt.event : void 0;
182
+ const part = asRecord(evt.part);
183
+ const partType = typeof part?.type === "string" ? part.type : void 0;
184
+ return evtType === "step_finish" || evtType === "step-finish" || evtEvent === "step_finish" || evtEvent === "step-finish" || partType === "step-finish" || partType === "step_finish";
185
+ }
186
+ function extractStepFinishReason(evt) {
187
+ if (!isStepFinishEvent(evt)) return void 0;
188
+ const part = asRecord(evt.part);
189
+ return readStringField(evt, ["reason", "finish_reason", "finishReason"]) ?? readStringField(part, ["reason", "finish_reason", "finishReason"]) ?? readStringField(asRecord(evt.data), ["reason", "finish_reason", "finishReason"]);
190
+ }
191
+ var OPENCODE_CONTINUATION_FINISH_REASONS = /* @__PURE__ */ new Set([
192
+ "tool-calls",
193
+ "tool_calls",
194
+ "tool-call",
195
+ "tool_call",
196
+ "tool_use",
197
+ "tool-use"
198
+ ]);
199
+ function isOpencodeTerminalEvent(evt) {
200
+ const record = asRecord(evt);
201
+ if (!record) return false;
202
+ if (!isStepFinishEvent(record)) return false;
203
+ const reason = extractStepFinishReason(record);
204
+ if (reason === void 0) return true;
205
+ return !OPENCODE_CONTINUATION_FINISH_REASONS.has(reason.trim().toLowerCase());
206
+ }
207
+ function opencodeLineConcludes(line) {
208
+ const trimmed = line.trim();
209
+ if (trimmed[0] !== "{") return false;
210
+ const evt = safeJsonParse(trimmed, {
211
+ context: "OpenCode tmux completion-signal event",
212
+ debug: false
213
+ });
214
+ return isOpencodeTerminalEvent(evt);
215
+ }
216
+ function createOpencodeTmuxCompletionSignal() {
217
+ return createLineDelimitedTmuxCompletionSignal(opencodeLineConcludes);
218
+ }
219
+ function classifyRetryableError(message, errorType) {
220
+ const text = `${errorType ?? ""}
221
+ ${message}`.toLowerCase();
222
+ if (/auth|unauthorized|forbidden|invalid[_ -]?api[_ -]?key|not[_ -]?found/.test(text)) {
223
+ return false;
224
+ }
225
+ return /timeout|temporar|unavailable|overload|rate[_ -]?limit|serviceunavailable|gateway|provider_unavailable/.test(
226
+ text
227
+ );
228
+ }
229
+ function extractErrorEvent(evt) {
230
+ const stepFinishReason = extractStepFinishReason(evt);
231
+ if (stepFinishReason === "length") {
232
+ return {
233
+ message: "OpenCode stopped because the model context length was exhausted.",
234
+ type: "step_finish",
235
+ errorType: "length",
236
+ retryable: false,
237
+ raw: evt
238
+ };
239
+ }
240
+ const evtType = typeof evt.type === "string" ? evt.type : void 0;
241
+ const errorRecord = asRecord(evt.error) ?? asRecord(evt.data) ?? (evtType === "error" ? evt : void 0);
242
+ const message = extractErrorMessage(errorRecord) ?? (evtType === "error" ? extractTextFromEvent(evt) : void 0);
243
+ if (evtType !== "error" && !message) return void 0;
244
+ const errorType = readStringField(errorRecord, ["error_type", "errorType", "type", "code", "status"]) ?? readStringField(asRecord(errorRecord?.data), [
245
+ "error_type",
246
+ "errorType",
247
+ "type",
248
+ "code",
249
+ "status"
250
+ ]) ?? readStringField(asRecord(errorRecord?.metadata), [
251
+ "error_type",
252
+ "errorType",
253
+ "type",
254
+ "code",
255
+ "status"
256
+ ]) ?? readStringField(asRecord(asRecord(errorRecord?.data)?.metadata), [
257
+ "error_type",
258
+ "errorType",
259
+ "type",
260
+ "code",
261
+ "status"
262
+ ]);
263
+ if (evtType === "error" && !message && (!errorType || errorType === evtType)) return void 0;
264
+ const normalizedMessage = message ?? "OpenCode reported an error event";
265
+ return {
266
+ message: normalizedMessage,
267
+ ...evtType ? { type: evtType } : {},
268
+ ...errorType ? { errorType } : {},
269
+ retryable: classifyRetryableError(normalizedMessage, errorType),
270
+ raw: evt
271
+ };
272
+ }
273
+ function parseOpencodeProviderOutput(stdout, stderr) {
274
+ let text = "";
275
+ let structuredEventCount = 0;
276
+ let tokenUsage;
277
+ let totalCostUsd;
278
+ let resolvedModel;
279
+ const errorEvents = [];
280
+ const detectedSubAgentTypes = /* @__PURE__ */ new Set();
281
+ let subAgentInvocationCount = 0;
282
+ let firstAgentUsed;
283
+ const seenJsonEvents = /* @__PURE__ */ new Set();
284
+ for (const stream of [stdout, stderr]) {
285
+ for (const candidate of parseJsonObjectsFromStream(stream)) {
286
+ const trimmed = candidate.trim();
287
+ if (!trimmed.startsWith("{")) continue;
288
+ try {
289
+ const evt = safeJsonParse(trimmed, {
290
+ context: "OpenCode JSONL event",
291
+ debug: false
292
+ });
293
+ const canonicalEvent = JSON.stringify(evt);
294
+ if (seenJsonEvents.has(canonicalEvent)) continue;
295
+ seenJsonEvents.add(canonicalEvent);
296
+ structuredEventCount++;
297
+ const eventText = extractTextFromEvent(evt);
298
+ if (eventText) {
299
+ text += eventText;
300
+ }
301
+ const evtType = evt.type;
302
+ const evtEvent = evt.event;
303
+ const trustedTelemetryEvent = evtType === "message" || evtType === "step_finish" || evtType === "step-finish" || evtType === "result" || evtType === "usage" || evtEvent === "step_finish" || evtEvent === "step-finish";
304
+ const errorEvent = extractErrorEvent(evt);
305
+ if (errorEvent) {
306
+ errorEvents.push(errorEvent);
307
+ }
308
+ const part = asRecord(evt.part);
309
+ if (evtType === "tool_use" && part?.tool === "task") {
310
+ const state = asRecord(part?.state);
311
+ const input = asRecord(state?.input);
312
+ const agentType = (typeof input?.subagent_type === "string" ? input.subagent_type : void 0) ?? (typeof input?.agent_type === "string" ? input.agent_type : void 0) ?? (typeof input?.agent === "string" ? input.agent : void 0);
313
+ if (agentType) {
314
+ detectedSubAgentTypes.add(agentType);
315
+ subAgentInvocationCount++;
316
+ firstAgentUsed ??= agentType;
317
+ }
318
+ }
319
+ if (trustedTelemetryEvent && !resolvedModel) {
320
+ const data = asRecord(evt.data);
321
+ const usageRecord = asRecord(evt.usage);
322
+ const providerId = (typeof evt.providerID === "string" ? evt.providerID : void 0) ?? (typeof data?.providerID === "string" ? data.providerID : void 0) ?? (typeof usageRecord?.providerID === "string" ? usageRecord.providerID : void 0);
323
+ const candidateModel = (typeof evt.model === "string" ? evt.model : void 0) ?? (typeof data?.model === "string" ? data.model : void 0) ?? (typeof usageRecord?.model === "string" ? usageRecord.model : void 0) ?? (typeof evt.modelID === "string" ? evt.modelID : void 0) ?? (typeof data?.modelID === "string" ? data.modelID : void 0) ?? (typeof usageRecord?.modelID === "string" ? usageRecord.modelID : void 0);
324
+ if (candidateModel) {
325
+ resolvedModel = providerId && !candidateModel.includes("/") ? `${providerId}/${candidateModel}` : candidateModel;
326
+ }
327
+ }
328
+ const usage = trustedTelemetryEvent ? asRecord(evt.usage) ?? asRecord(evt.tokens) ?? asRecord(part?.usage) ?? asRecord(part?.tokens) ?? asRecord(asRecord(evt.data)?.usage) ?? asRecord(asRecord(evt.data)?.tokens) : void 0;
329
+ if (usage) {
330
+ const inputTokens = readNumberField(usage, [
331
+ "input_tokens",
332
+ "inputTokens",
333
+ "prompt_tokens",
334
+ "input"
335
+ ]);
336
+ const outputTokens = readNumberField(usage, [
337
+ "output_tokens",
338
+ "outputTokens",
339
+ "completion_tokens",
340
+ "output"
341
+ ]);
342
+ if (inputTokens !== void 0 || outputTokens !== void 0) {
343
+ tokenUsage = {
344
+ inputTokens: (tokenUsage?.inputTokens ?? 0) + (inputTokens ?? 0),
345
+ outputTokens: (tokenUsage?.outputTokens ?? 0) + (outputTokens ?? 0)
346
+ };
347
+ }
348
+ }
349
+ const cost = trustedTelemetryEvent ? readNumberField(evt, ["cost", "total_cost", "cost_usd", "totalCostUsd"]) ?? readNumberField(part, ["cost", "total_cost", "cost_usd", "totalCostUsd"]) ?? readNumberField(usage, ["cost", "total_cost", "cost_usd", "totalCostUsd"]) : void 0;
350
+ if (cost !== void 0) {
351
+ totalCostUsd = (totalCostUsd ?? 0) + cost;
352
+ }
353
+ } catch {
354
+ }
355
+ }
356
+ }
357
+ return {
358
+ text,
359
+ tokenUsage,
360
+ totalCostUsd,
361
+ resolvedModel,
362
+ agentUsed: firstAgentUsed,
363
+ subAgentInvocations: subAgentInvocationCount || void 0,
364
+ subAgentTypes: detectedSubAgentTypes.size > 0 ? [...detectedSubAgentTypes] : void 0,
365
+ structuredEventCount,
366
+ ...errorEvents.length > 0 ? { errorEvents } : {}
367
+ };
368
+ }
369
+
370
+ // src/core/providers/opencode/bootstrap.ts
371
+ import { readFileSync as readFileSync2, statSync } from "fs";
372
+ import * as fs2 from "fs/promises";
373
+ import { homedir } from "os";
374
+ import * as path2 from "path";
375
+
376
+ // src/core/providers/refresh/freshness.ts
377
+ import * as fs from "fs";
378
+ import * as path from "path";
379
+ function resolveProjectRoot(configPath) {
380
+ const configDir = path.dirname(configPath);
381
+ return path.basename(configDir) === "config" && path.basename(path.dirname(configDir)) === ".poetic" ? path.dirname(path.dirname(configDir)) : path.dirname(configPath);
382
+ }
383
+ function latestCommittedRefreshEvidence(providerId, auditPath) {
384
+ try {
385
+ const lines = fs.readFileSync(auditPath, "utf8").trim().split("\n").filter(Boolean);
386
+ for (let index = lines.length - 1; index >= 0; index--) {
387
+ const entry = JSON.parse(lines[index]);
388
+ if (entry.kind === "overlay") continue;
389
+ const provider = entry.providers?.find(
390
+ (candidate) => candidate.providerId === providerId && candidate.ok && candidate.source
391
+ );
392
+ if (!provider?.source) continue;
393
+ const timestamp = Date.parse(entry.timestamp ?? "");
394
+ if (Number.isFinite(timestamp)) return { timestamp, source: provider.source };
395
+ }
396
+ } catch {
397
+ }
398
+ return void 0;
399
+ }
400
+ function acceptedOverlayRefreshEvidence(providerId, overlayPath) {
401
+ try {
402
+ const disposition = resolveRefreshOverlayDisposition(fs.readFileSync(overlayPath, "utf8"), {
403
+ expectedBaseCatalogDigest: PROVIDER_CATALOG_SHA256
404
+ });
405
+ if (disposition.status !== "ready") return void 0;
406
+ const slices = disposition.overlay.providers[providerId]?.slices;
407
+ const candidates = [slices?.models, slices?.pricing].flatMap((slice) => {
408
+ if (!slice) return [];
409
+ const timestamp = Date.parse(slice.fetchedAt);
410
+ return Number.isFinite(timestamp) ? [{ timestamp, source: slice.source }] : [];
411
+ });
412
+ return candidates.sort((left, right) => right.timestamp - left.timestamp)[0];
413
+ } catch {
414
+ return void 0;
415
+ }
416
+ }
417
+ function getProviderRefreshEvidence(providerId, options = {}) {
418
+ const configPath = path.resolve(
419
+ options.configPath ?? resolveProvidersConfigPath({ cwd: options.projectRoot ?? process.cwd() })
420
+ );
421
+ const projectRoot = options.projectRoot ?? resolveProjectRoot(configPath);
422
+ const overlayEvidence = acceptedOverlayRefreshEvidence(
423
+ providerId,
424
+ path.join(projectRoot, ".poetic", "cache", "model-update", "refresh-overlay.json")
425
+ );
426
+ if (overlayEvidence) return overlayEvidence;
427
+ const auditEvidence = latestCommittedRefreshEvidence(
428
+ providerId,
429
+ path.join(projectRoot, ".poetic", "logs", "provider-refresh.jsonl")
430
+ );
431
+ if (auditEvidence) return auditEvidence;
432
+ try {
433
+ const registry = ProviderRegistry.load(configPath, projectRoot);
434
+ const config = ProviderRegistry.getProviderConfig(providerId, registry);
435
+ const meta = config.pricing?._meta;
436
+ const lastUpdate = meta?.last_pricing_update;
437
+ if (typeof lastUpdate === "string") {
438
+ const parsed = Date.parse(lastUpdate);
439
+ if (Number.isFinite(parsed)) return { timestamp: parsed, source: "pricing-only" };
440
+ }
441
+ } catch {
442
+ }
443
+ return void 0;
444
+ }
445
+ function getProviderSliceAgeMs(providerId, options = {}) {
446
+ const evidence = getProviderRefreshEvidence(providerId, options);
447
+ return evidence ? Math.max(0, (options.now ?? Date.now()) - evidence.timestamp) : void 0;
448
+ }
449
+ function formatCacheAge(ageMs) {
450
+ const hours = ageMs / 36e5;
451
+ if (hours < 1) return "<1h";
452
+ if (hours < 48) return `${Math.round(hours)}h`;
453
+ return `${Math.round(hours / 24)}d`;
454
+ }
455
+ function isFetchedAtFresh(fetchedAt, ttlMs, now = Date.now()) {
456
+ return typeof fetchedAt === "number" && Number.isFinite(fetchedAt) && Number.isFinite(ttlMs) && ttlMs >= 0 && now - fetchedAt < ttlMs;
457
+ }
458
+ function getFetchedAtAgeMs(fetchedAt, now = Date.now()) {
459
+ if (typeof fetchedAt !== "number" || !Number.isFinite(fetchedAt)) return void 0;
460
+ return Math.max(0, now - fetchedAt);
461
+ }
462
+ function getProjectRefreshOverlayNotice(projectRoot) {
463
+ const root = projectRoot ?? findProjectRoot(process.cwd()) ?? process.cwd();
464
+ return getRefreshOverlayOperatorNotice(
465
+ path.join(root, ".poetic", "cache", "model-update", "refresh-overlay.json"),
466
+ PROVIDER_CATALOG_SHA256
467
+ );
468
+ }
469
+
470
+ // src/core/providers/opencode/bootstrap.ts
471
+ var OPENCODE_MODELS_CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
472
+ var OPENCODE_MODEL_ID_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._/:-]*$/;
473
+ function isOpencodeBunInstallFailure(error) {
474
+ const haystack = `${error.message}
475
+ ${error.stderr ?? ""}
476
+ ${error.stdout ?? ""}`;
477
+ return /BunInstallFailedError/i.test(haystack) || /\bbun\b.*\binstall\b/i.test(haystack);
478
+ }
479
+ function makeRetryableBootstrapError(error, providerName, operation) {
480
+ return new ProviderExecutionError(`${providerName} ${operation} failed (bootstrap race)`, {
481
+ retryable: true,
482
+ exitCode: error.exitCode,
483
+ reason: error.reason ?? "bootstrap_install",
484
+ stderr: error.stderr,
485
+ stdout: error.stdout,
486
+ // The public fields above may already be truncated, and a stream size must
487
+ // never be re-derived from a truncated string. Forward the structured sizes.
488
+ streamBytes: { stdout: error.stdoutBytes, stderr: error.stderrBytes }
489
+ });
490
+ }
491
+ var LOCK_HEARTBEAT_INTERVAL_MS = 3e4;
492
+ var OPENCODE_BOOTSTRAP_DEADLINE_SAFETY_BUFFER_MS = 5e3;
493
+ function resolveOpencodeBootstrapAttemptTimeoutMs(timeoutMs, deadlineMs) {
494
+ if (deadlineMs == null) {
495
+ return timeoutMs;
496
+ }
497
+ const remainingMs = deadlineMs - Date.now() - OPENCODE_BOOTSTRAP_DEADLINE_SAFETY_BUFFER_MS;
498
+ if (remainingMs <= 0) {
499
+ throw new ProviderExecutionError("OpenCode bootstrap deadline exceeded before attempt start.", {
500
+ retryable: false,
501
+ reason: "deadline_exhausted"
502
+ });
503
+ }
504
+ return Math.max(1, Math.min(timeoutMs, remainingMs));
505
+ }
506
+ function sanitizeVersionForFilename(version) {
507
+ const sanitized = version.trim().replace(/[^A-Za-z0-9._-]+/g, "-").replace(/\.\.+/g, ".").replace(/^-+|-+$/g, "").replace(/^\.+/, "").slice(0, 80);
508
+ return sanitized || "unknown";
509
+ }
510
+ function startLockHeartbeat(lockFile) {
511
+ return setInterval(() => {
512
+ const now = /* @__PURE__ */ new Date();
513
+ void fs2.utimes(lockFile, now, now).catch(() => {
514
+ });
515
+ }, LOCK_HEARTBEAT_INTERVAL_MS);
516
+ }
517
+ function parseWarmupLockPayload(raw) {
518
+ try {
519
+ const parsed = JSON.parse(raw);
520
+ return parsed && typeof parsed === "object" ? parsed : null;
521
+ } catch {
522
+ return null;
523
+ }
524
+ }
525
+ function isProcessAlive(pid) {
526
+ if (!Number.isInteger(pid) || (pid ?? 0) <= 0) return false;
527
+ try {
528
+ process.kill(pid, 0);
529
+ return true;
530
+ } catch (error) {
531
+ if (error.code === "EPERM") {
532
+ return true;
533
+ }
534
+ return false;
535
+ }
536
+ }
537
+ async function acquireLockFile(lockFile, options) {
538
+ const start = Date.now();
539
+ await fs2.mkdir(path2.dirname(lockFile), { recursive: true });
540
+ while (Date.now() - start < options.timeoutMs) {
541
+ try {
542
+ await fs2.writeFile(
543
+ lockFile,
544
+ JSON.stringify({
545
+ pid: process.pid,
546
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
547
+ host: process.env.HOSTNAME ?? process.env.COMPUTERNAME ?? "unknown"
548
+ }),
549
+ { flag: "wx" }
550
+ );
551
+ return;
552
+ } catch (error) {
553
+ const code = error.code;
554
+ if (code !== "EEXIST") throw error;
555
+ try {
556
+ const stat2 = await fs2.stat(lockFile);
557
+ if (Date.now() - stat2.mtimeMs > options.staleMs) {
558
+ const payload = parseWarmupLockPayload(
559
+ await fs2.readFile(lockFile, "utf8").catch(() => "")
560
+ );
561
+ const sameHost = payload?.host === void 0 || payload.host === (process.env.HOSTNAME ?? process.env.COMPUTERNAME ?? "unknown");
562
+ if (!sameHost || !isProcessAlive(payload?.pid)) {
563
+ await fs2.unlink(lockFile).catch(() => {
564
+ });
565
+ continue;
566
+ }
567
+ }
568
+ } catch {
569
+ }
570
+ await new Promise((resolve2) => setTimeout(resolve2, 100));
571
+ }
572
+ }
573
+ throw new Error(
574
+ `Failed to acquire OpenCode warmup lock within ${options.timeoutMs}ms: ${lockFile}`
575
+ );
576
+ }
577
+ async function releaseLockFile(lockFile) {
578
+ await fs2.unlink(lockFile).catch(() => {
579
+ });
580
+ }
581
+ var MODELS_CACHE_FILENAME = "models.json";
582
+ var cachedModelsSnapshot = null;
583
+ function resolveOpencodeModelsCacheDir(cacheDir) {
584
+ return cacheDir ?? path2.join(homedir(), ".poetic", "cache", "opencode");
585
+ }
586
+ function sanitizeOpencodeModelIds(modelIds) {
587
+ const seen = /* @__PURE__ */ new Set();
588
+ const sanitized = [];
589
+ for (const raw of modelIds) {
590
+ if (typeof raw !== "string") continue;
591
+ const id = raw.trim();
592
+ if (id.length >= 2 && id.length <= 128 && OPENCODE_MODEL_ID_PATTERN.test(id) && /[/-]/.test(id) && !seen.has(id)) {
593
+ seen.add(id);
594
+ sanitized.push(id);
595
+ }
596
+ }
597
+ return sanitized;
598
+ }
599
+ function rememberModelsSnapshot(cachePath, mtimeMs, modelIds, fetchedAt) {
600
+ cachedModelsSnapshot = { cachePath, mtimeMs, modelIds, fetchedAt };
601
+ }
602
+ function readModelsCacheFromDisk(cachePath) {
603
+ try {
604
+ const stat2 = statSync(cachePath);
605
+ if (cachedModelsSnapshot && cachedModelsSnapshot.cachePath === cachePath && cachedModelsSnapshot.mtimeMs === stat2.mtimeMs) {
606
+ return {
607
+ modelIds: cachedModelsSnapshot.modelIds,
608
+ fetchedAt: cachedModelsSnapshot.fetchedAt,
609
+ mtimeMs: stat2.mtimeMs
610
+ };
611
+ }
612
+ const raw = readFileSync2(cachePath, "utf-8");
613
+ const entry = JSON.parse(raw);
614
+ if (!Array.isArray(entry?.modelIds)) {
615
+ return null;
616
+ }
617
+ const modelIds = sanitizeOpencodeModelIds(entry.modelIds);
618
+ const fetchedAt = typeof entry.fetchedAt === "number" && Number.isFinite(entry.fetchedAt) ? entry.fetchedAt : void 0;
619
+ rememberModelsSnapshot(cachePath, stat2.mtimeMs, modelIds, fetchedAt);
620
+ return { modelIds, fetchedAt, mtimeMs: stat2.mtimeMs };
621
+ } catch {
622
+ return null;
623
+ }
624
+ }
625
+ function getCachedOpencodeModelIds(cacheDir) {
626
+ const cachePath = path2.join(resolveOpencodeModelsCacheDir(cacheDir), MODELS_CACHE_FILENAME);
627
+ const cached = readModelsCacheFromDisk(cachePath);
628
+ if (cached) return cached.modelIds;
629
+ if (cachedModelsSnapshot?.cachePath === cachePath) {
630
+ cachedModelsSnapshot = null;
631
+ }
632
+ return [];
633
+ }
634
+ function getOpencodeModelsCacheInfo(cacheDir, now = Date.now()) {
635
+ const cachePath = path2.join(resolveOpencodeModelsCacheDir(cacheDir), MODELS_CACHE_FILENAME);
636
+ const cached = readModelsCacheFromDisk(cachePath);
637
+ const fetchedAt = cached?.fetchedAt;
638
+ const ageMs = getFetchedAtAgeMs(fetchedAt, now);
639
+ return {
640
+ cachePath,
641
+ modelIds: cached?.modelIds ?? [],
642
+ fetchedAt,
643
+ ageMs,
644
+ stale: !isFetchedAtFresh(fetchedAt, OPENCODE_MODELS_CACHE_TTL_MS, now)
645
+ };
646
+ }
647
+ async function persistOpencodeModelsCache(modelIds, options) {
648
+ const sanitized = sanitizeOpencodeModelIds(modelIds);
649
+ const cacheDir = resolveOpencodeModelsCacheDir(options?.cacheDir);
650
+ await fs2.mkdir(cacheDir, { recursive: true });
651
+ const cachePath = path2.join(cacheDir, MODELS_CACHE_FILENAME);
652
+ const lockFile = path2.join(cacheDir, "warmup.lock");
653
+ const fetchedAt = options?.fetchedAt ?? Date.now();
654
+ const cacheEntry = { modelIds: sanitized, fetchedAt };
655
+ let heartbeat;
656
+ if (!options?.alreadyLocked) {
657
+ await acquireLockFile(lockFile, { timeoutMs: 6e4, staleMs: 10 * 6e4 });
658
+ heartbeat = startLockHeartbeat(lockFile);
659
+ }
660
+ try {
661
+ await writeFileAtomic(cachePath, JSON.stringify(cacheEntry, null, 2));
662
+ const stat2 = await fs2.stat(cachePath);
663
+ rememberModelsSnapshot(cachePath, stat2.mtimeMs, sanitized, fetchedAt);
664
+ return sanitized;
665
+ } finally {
666
+ if (heartbeat) clearInterval(heartbeat);
667
+ if (!options?.alreadyLocked) {
668
+ await releaseLockFile(lockFile);
669
+ }
670
+ }
671
+ }
672
+ async function ensureOpencodeWarm(options) {
673
+ const runningUnderVitest = Boolean(process.env.VITEST || process.env.VITEST_WORKER_ID) || process.env.NODE_ENV === "test" || process.argv.some((arg) => arg.includes("vitest"));
674
+ if (runningUnderVitest && process.env.POETIC_OPENCODE_WARMUP_FORCE !== "1") return;
675
+ const cacheDir = resolveOpencodeModelsCacheDir(options.cacheDir);
676
+ await fs2.mkdir(cacheDir, { recursive: true });
677
+ const lockFile = path2.join(cacheDir, "warmup.lock");
678
+ const versionFile = path2.join(cacheDir, "version.txt");
679
+ let cachedVersion = "";
680
+ try {
681
+ const raw = await fs2.readFile(versionFile, "utf-8");
682
+ cachedVersion = raw.trim();
683
+ } catch {
684
+ }
685
+ let version = "";
686
+ try {
687
+ const result = await executeProviderCommand({
688
+ command: options.command,
689
+ args: [...options.prefixArgs ?? [], "--version"],
690
+ workingDir: options.workingDir,
691
+ stdinMode: "ignore",
692
+ timeout: Math.min(options.timeoutMs ?? 1e4, 1e4),
693
+ metadata: {
694
+ id: metadata.id,
695
+ name: metadata.name,
696
+ installCommand: metadata.installCommand,
697
+ authHint: metadata.authHint,
698
+ docsPath: metadata.docsPath,
699
+ docsAnchor: metadata.docsAnchor
700
+ }
701
+ });
702
+ version = (result.stdout ?? "").trim();
703
+ if (version && version !== cachedVersion) {
704
+ await writeFileAtomic(versionFile, version).catch(() => {
705
+ });
706
+ }
707
+ } catch {
708
+ version = cachedVersion;
709
+ }
710
+ if (!version) {
711
+ return;
712
+ }
713
+ const sentinel = path2.join(cacheDir, `warm-${sanitizeVersionForFilename(version)}.json`);
714
+ const sentinelReady = await fs2.access(sentinel).then(() => true).catch(() => false);
715
+ if (sentinelReady) {
716
+ return;
717
+ }
718
+ await acquireLockFile(lockFile, { timeoutMs: 6e4, staleMs: 10 * 6e4 });
719
+ const heartbeat = startLockHeartbeat(lockFile);
720
+ try {
721
+ const sentinelReadyAfterLock = await fs2.access(sentinel).then(() => true).catch(() => false);
722
+ if (!sentinelReadyAfterLock) {
723
+ await executeProviderCommand({
724
+ command: options.command,
725
+ args: [...options.prefixArgs ?? [], "auth", "list"],
726
+ workingDir: options.workingDir,
727
+ stdinMode: "ignore",
728
+ timeout: Math.min(options.timeoutMs ?? 2e4, 2e4),
729
+ metadata: {
730
+ id: metadata.id,
731
+ name: metadata.name,
732
+ installCommand: metadata.installCommand,
733
+ authHint: metadata.authHint,
734
+ docsPath: metadata.docsPath,
735
+ docsAnchor: metadata.docsAnchor
736
+ }
737
+ });
738
+ await writeFileAtomic(
739
+ sentinel,
740
+ JSON.stringify({ version, warmedAt: (/* @__PURE__ */ new Date()).toISOString() }, null, 2)
741
+ ).catch(() => {
742
+ });
743
+ }
744
+ } finally {
745
+ clearInterval(heartbeat);
746
+ await releaseLockFile(lockFile);
747
+ }
748
+ }
749
+ async function executeOpencodeCommandWithBootstrapRetry(options) {
750
+ const runningUnderVitest = Boolean(process.env.VITEST || process.env.VITEST_WORKER_ID) || process.env.NODE_ENV === "test" || process.argv.some((arg) => arg.includes("vitest"));
751
+ const budgetRemaining = options.retryBudget?.remaining;
752
+ const defaultMaxAttempts = budgetRemaining !== void 0 ? Math.max(1, Math.min(3, budgetRemaining)) : 3;
753
+ const maxAttempts = typeof options.maxAttempts === "number" && Number.isFinite(options.maxAttempts) ? Math.max(1, Math.min(3, Math.floor(options.maxAttempts))) : defaultMaxAttempts;
754
+ let pendingRetryError;
755
+ const retry = createRetryOptions({
756
+ providerName: options.metadata.name,
757
+ operation: options.operation,
758
+ maxAttempts,
759
+ initialDelayMs: runningUnderVitest ? 10 : 1e3,
760
+ maxDelayMs: 15e3,
761
+ backoffMultiplier: 2,
762
+ retryBudget: options.retryBudget,
763
+ abortSignal: options.abortSignal,
764
+ deadlineMs: options.deadlineMs,
765
+ minimumAttemptTimeMs: Math.min(options.timeout, 3e4),
766
+ onRetry: (attempt2, error) => {
767
+ pendingRetryError = error;
768
+ if (!runningUnderVitest && attempt2 >= 1 && error instanceof ProviderExecutionError) {
769
+ debugLog(
770
+ `[OpenCode] ${options.operation} retry ${attempt2 + 1}/${retry.maxAttempts}: ${error.message}`
771
+ );
772
+ }
773
+ }
774
+ });
775
+ const providerId = options.metadata.id ?? metadata.id;
776
+ const { execute, decision } = await selectProviderExecutor({
777
+ provider: providerId,
778
+ requested: options.executionTransport,
779
+ configured: resolveConfiguredProviderExecutionTransport(providerId, options.workingDir).value,
780
+ env: options.env,
781
+ executionIntent: options.executionIntent,
782
+ readOnlyWorkingDir: options.readOnlyWorkingDir,
783
+ headless: executeProviderCommand,
784
+ onDecision: (decision2) => reportTransportDecision(providerId, decision2, debugLog)
785
+ });
786
+ const wantsTmuxCompletionSignal = decision.resolved === "tmux-exec";
787
+ let attempt = 0;
788
+ const result = await withRetry(async () => {
789
+ attempt++;
790
+ if (attempt > 1 && options.beforeRetryAttempt) {
791
+ await options.beforeRetryAttempt(pendingRetryError);
792
+ }
793
+ const args = attempt > 1 ? [...options.args, "--print-logs", "--log-level", "ERROR"] : [...options.args];
794
+ const runnerMetadata = {
795
+ ...options.metadata,
796
+ installCommand: options.metadata.installCommand ?? metadata.installCommand
797
+ };
798
+ try {
799
+ const streamOutput = resolveProviderStreamingEnabled(options.env);
800
+ const tmuxCompletionSignal = wantsTmuxCompletionSignal ? createOpencodeTmuxCompletionSignal() : void 0;
801
+ return await execute({
802
+ command: options.command,
803
+ args,
804
+ workingDir: options.workingDir,
805
+ env: options.env,
806
+ input: options.input,
807
+ stdinMode: options.input === void 0 ? "ignore" : "pipe",
808
+ timeout: resolveOpencodeBootstrapAttemptTimeoutMs(options.timeout, options.deadlineMs),
809
+ extraWritePaths: options.extraWritePaths,
810
+ readOnlyWorkingDir: options.readOnlyWorkingDir,
811
+ providerInternalSandboxBypass: options.providerInternalSandboxBypass,
812
+ idleWarnMs: options.idleWarnMs,
813
+ idleKillMs: options.idleKillMs,
814
+ onData: options.onData,
815
+ onErrorData: options.onErrorData,
816
+ onStdoutChunk: options.onStdoutChunk,
817
+ onStderrChunk: options.onStderrChunk,
818
+ onActivity: options.onActivity,
819
+ onFirstOutput: options.onFirstOutput,
820
+ abortSignal: options.abortSignal,
821
+ metadata: runnerMetadata,
822
+ ...streamOutput ? { streamOutput: true } : {},
823
+ ...tmuxCompletionSignal ? {
824
+ completionSignal: tmuxCompletionSignal,
825
+ completionSignalGraceMs: TMUX_COMPLETION_SIGNAL_GRACE_MS
826
+ } : {}
827
+ });
828
+ } catch (error) {
829
+ if (error instanceof ProviderExecutionError && isOpencodeBunInstallFailure(error)) {
830
+ throw makeRetryableBootstrapError(error, options.metadata.name, options.operation);
831
+ }
832
+ throw error;
833
+ }
834
+ }, retry);
835
+ return result.result;
836
+ }
837
+
838
+ // src/core/providers/opencode/model-canonicalizer.ts
839
+ var KNOWN_OPENCODE_PREFIXES = /* @__PURE__ */ new Set([
840
+ "openrouter",
841
+ "opencode",
842
+ "opencode-go",
843
+ "amazon-bedrock",
844
+ "zai-coding-plan",
845
+ "zai-coding",
846
+ "anthropic",
847
+ "openai",
848
+ "google",
849
+ "fireworks",
850
+ "deepseek",
851
+ "mistral",
852
+ "groq",
853
+ "together",
854
+ "xai",
855
+ "perplexity",
856
+ "cohere"
857
+ ]);
858
+ function buildEffectivePrefixes(cachedModelIds) {
859
+ if (!cachedModelIds || cachedModelIds.length === 0) {
860
+ return KNOWN_OPENCODE_PREFIXES;
861
+ }
862
+ const effective = new Set(KNOWN_OPENCODE_PREFIXES);
863
+ for (const prefix of deriveOpencodePrefixes(cachedModelIds)) {
864
+ effective.add(prefix);
865
+ }
866
+ return effective;
867
+ }
868
+ function canonicalizeOpencodeModelId(model, cachedModelIds) {
869
+ const slashCount = (model.match(/\//g) || []).length;
870
+ if (slashCount === 0) return model;
871
+ const openrouterCandidate = slashCount === 1 && cachedModelIds?.includes(`openrouter/${model}`) ? `openrouter/${model}` : void 0;
872
+ const exactCachedMatch = cachedModelIds?.includes(model);
873
+ const effectivePrefixes = buildEffectivePrefixes(cachedModelIds);
874
+ const firstSegment = model.split("/")[0]?.toLowerCase();
875
+ if (firstSegment && effectivePrefixes.has(firstSegment)) {
876
+ if (exactCachedMatch) {
877
+ return model;
878
+ }
879
+ if (firstSegment !== "openrouter" && openrouterCandidate) {
880
+ if (isDebugMode()) {
881
+ console.debug(
882
+ `[opencode-model] Preferring canonical OpenRouter model: ${model} \u2192 ${openrouterCandidate}`
883
+ );
884
+ }
885
+ return openrouterCandidate;
886
+ }
887
+ if (slashCount === 1 && firstSegment === "openrouter" && cachedModelIds && cachedModelIds.length > 0) {
888
+ const isInCache = cachedModelIds.includes(model);
889
+ const has3SegmentVariant = cachedModelIds.some((id) => id.startsWith(`${model}/`));
890
+ if (!isInCache && !has3SegmentVariant) {
891
+ if (isDebugMode()) {
892
+ debugLog(
893
+ `[opencode-model] WARNING: Model '${model}' may fail OpenCode resolution due to upstream bug. OpenCode splits 2-segment IDs and looks up just '${model.split("/")[1]}' in the provider dict. If the model is keyed by the full ID '${model}' in OpenCode's catalog, this will fail. Consider using a 3-segment form if available, or report this to OpenCode maintainers.`
894
+ );
895
+ }
896
+ }
897
+ }
898
+ return model;
899
+ }
900
+ if (cachedModelIds?.includes(model)) return model;
901
+ if (slashCount >= 2) return model;
902
+ if (openrouterCandidate) {
903
+ if (isDebugMode()) {
904
+ console.debug(`[opencode-model] Auto-prefixing model: ${model} \u2192 ${openrouterCandidate}`);
905
+ }
906
+ return openrouterCandidate;
907
+ }
908
+ return model;
909
+ }
910
+
911
+ export {
912
+ getProviderRefreshEvidence,
913
+ getProviderSliceAgeMs,
914
+ formatCacheAge,
915
+ getProjectRefreshOverlayNotice,
916
+ parseOpencodeProviderOutput,
917
+ getCachedOpencodeModelIds,
918
+ getOpencodeModelsCacheInfo,
919
+ persistOpencodeModelsCache,
920
+ ensureOpencodeWarm,
921
+ executeOpencodeCommandWithBootstrapRetry,
922
+ canonicalizeOpencodeModelId
923
+ };
924
+ //# sourceMappingURL=chunk-CJHRFSNY.js.map