@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,1571 @@
1
+ import {
2
+ canonicalizeOpencodeModelId,
3
+ ensureOpencodeWarm,
4
+ executeOpencodeCommandWithBootstrapRetry,
5
+ formatCacheAge,
6
+ getCachedOpencodeModelIds,
7
+ getOpencodeModelsCacheInfo,
8
+ parseOpencodeProviderOutput
9
+ } from "./chunk-GPEL3FBM.js";
10
+ import {
11
+ aggregateCredentialResidueErrors,
12
+ contextualizeCredentialCleanupError,
13
+ markRunOwnedRoot,
14
+ normalizeProviderCliVersion,
15
+ removeAndVerifyRunOwnedRoot,
16
+ resolveCallerOwnedPath
17
+ } from "./chunk-XZYR5EDO.js";
18
+ import {
19
+ metadata
20
+ } from "./chunk-3FLXLLB7.js";
21
+ import {
22
+ reportOutputDrift,
23
+ resolveSettings
24
+ } from "./chunk-QTCJ5CC5.js";
25
+ import {
26
+ assembleSteering
27
+ } from "./chunk-MWHF5V7U.js";
28
+ import "./chunk-3FOZ2VHV.js";
29
+ import {
30
+ runMockNative
31
+ } from "./chunk-P47VN5F4.js";
32
+ import {
33
+ DEFAULT_PROVIDER_CIRCUIT_BREAKER_OPTIONS,
34
+ RetryBudget,
35
+ assertWorkspaceRetryIsSafe,
36
+ captureRetryWorktreeState,
37
+ captureWorkspaceRetryState,
38
+ executeWithResilience,
39
+ recordInvocationTiming,
40
+ rejectUnsafeFullPromptRetry,
41
+ resolveProviderTimeoutMs
42
+ } from "./chunk-WZ6U3O7I.js";
43
+ import {
44
+ detectGitChangedFiles,
45
+ getGitHead,
46
+ getGitStatusPaths,
47
+ stripAnsiSequences
48
+ } from "./chunk-VTW7HP3R.js";
49
+ import "./chunk-4CUY7AFY.js";
50
+ import {
51
+ acquireRateLimitToken
52
+ } from "./chunk-MWK5UZQ3.js";
53
+ import "./chunk-MN6PL4AN.js";
54
+ import "./chunk-NS33V3IM.js";
55
+ import {
56
+ inferProviderFailurePhase,
57
+ recordProviderRunFailure,
58
+ recordProviderRunSuccess
59
+ } from "./chunk-UHRBTZYY.js";
60
+ import "./chunk-H2AYQIHW.js";
61
+ import {
62
+ detectTaskType
63
+ } from "./chunk-FATUVIIN.js";
64
+ import "./chunk-XPU2XADL.js";
65
+ import "./chunk-AURFMVCD.js";
66
+ import "./chunk-VBNCKCCI.js";
67
+ import "./chunk-SZ7DL357.js";
68
+ import "./chunk-HIO33P3G.js";
69
+ import {
70
+ buildProviderExecutionEnv
71
+ } from "./chunk-APV6MK5E.js";
72
+ import "./chunk-ZYG7GGKO.js";
73
+ import {
74
+ providerOutputTail,
75
+ redactProviderArgv,
76
+ sanitizeDiagnosticOutput
77
+ } from "./chunk-PFTQBXS6.js";
78
+ import "./chunk-E3NTPHEO.js";
79
+ import "./chunk-4NXPXE62.js";
80
+ import "./chunk-4VJITV4P.js";
81
+ import "./chunk-GHHFDU2U.js";
82
+ import {
83
+ getProviderRuntimeQuirks
84
+ } from "./chunk-FC23CTXV.js";
85
+ import "./chunk-36PEBZAF.js";
86
+ import {
87
+ resolveProviderCliCommand
88
+ } from "./chunk-SURZ2WFE.js";
89
+ import "./chunk-SP3LFU6B.js";
90
+ import "./chunk-R4UWBC35.js";
91
+ import "./chunk-2YFUIER7.js";
92
+ import "./chunk-CKNX3TTP.js";
93
+ import "./chunk-FYOILAN5.js";
94
+ import "./chunk-J62KPGII.js";
95
+ import "./chunk-XAONGNST.js";
96
+ import "./chunk-GAFJEYLK.js";
97
+ import "./chunk-H6G7QRMQ.js";
98
+ import "./chunk-J6P3FWWW.js";
99
+ import "./chunk-CP7H3HSP.js";
100
+ import "./chunk-ETYDXCK7.js";
101
+ import "./chunk-BSE4R6XD.js";
102
+ import {
103
+ applyWorkspaceMode,
104
+ resolveEffectiveMode
105
+ } from "./chunk-UR2IBGIM.js";
106
+ import "./chunk-JSWMRQYG.js";
107
+ import "./chunk-XGYF2QMZ.js";
108
+ import "./chunk-72YTZMAM.js";
109
+ import "./chunk-S2VQCZO4.js";
110
+ import "./chunk-WMPU2UOV.js";
111
+ import "./chunk-VX3UMWB7.js";
112
+ import {
113
+ deriveOpencodePrefixes
114
+ } from "./chunk-XT2ZQVTC.js";
115
+ import "./chunk-YGXKOBQQ.js";
116
+ import "./chunk-V72RMBM4.js";
117
+ import "./chunk-ZDTGECTN.js";
118
+ import "./chunk-G36W2T2S.js";
119
+ import "./chunk-GKN3HMN4.js";
120
+ import "./chunk-QVZMFDYG.js";
121
+ import "./chunk-S54MKU6V.js";
122
+ import "./chunk-3S62LLWJ.js";
123
+ import "./chunk-45FPSA3B.js";
124
+ import {
125
+ emitTelemetryFallbackWarning
126
+ } from "./chunk-YMX76IOS.js";
127
+ import "./chunk-6Y5U7UFY.js";
128
+ import "./chunk-XV7NZL4B.js";
129
+ import "./chunk-CD7ISXA4.js";
130
+ import "./chunk-QGJDMEOV.js";
131
+ import "./chunk-6TZJRKNW.js";
132
+ import {
133
+ requireActivePolicyBoundary,
134
+ requireActiveSandboxBoundary
135
+ } from "./chunk-PCAGC5MR.js";
136
+ import "./chunk-5WCQRDRB.js";
137
+ import "./chunk-5WRLK5KW.js";
138
+ import {
139
+ mkPoeticTempDir
140
+ } from "./chunk-C57KJOUQ.js";
141
+ import "./chunk-DF5SLDE4.js";
142
+ import "./chunk-TGON4N4O.js";
143
+ import "./chunk-I5WRT7ZR.js";
144
+ import "./chunk-A3YGID55.js";
145
+ import "./chunk-5EERLVZB.js";
146
+ import "./chunk-XQD2B6BB.js";
147
+ import "./chunk-34CNP2HB.js";
148
+ import "./chunk-KNDYMVWN.js";
149
+ import "./chunk-RWREC3KJ.js";
150
+ import "./chunk-7R2WLDOS.js";
151
+ import "./chunk-LAMKBTXX.js";
152
+ import "./chunk-FD4ERYEG.js";
153
+ import "./chunk-KTMW65UX.js";
154
+ import "./chunk-FHOWVDF5.js";
155
+ import "./chunk-UDMS5AD3.js";
156
+ import "./chunk-MWHLBPNU.js";
157
+ import "./chunk-JLS65NUQ.js";
158
+ import "./chunk-TRSVUPCX.js";
159
+ import "./chunk-FKAUPHMR.js";
160
+ import "./chunk-TSXGRLPR.js";
161
+ import {
162
+ CredentialResidueError,
163
+ ProviderExecutionError
164
+ } from "./chunk-LUVKFFWR.js";
165
+ import "./chunk-ENRGKNR5.js";
166
+ import "./chunk-XB5YLCLB.js";
167
+ import "./chunk-QOCOVLUH.js";
168
+ import "./chunk-2VSQMRCB.js";
169
+ import {
170
+ logReasoningEffortResolution,
171
+ resolveReasoningEffort
172
+ } from "./chunk-ON3G73BU.js";
173
+ import "./chunk-3G6FZCRF.js";
174
+ import "./chunk-N5DX4JAK.js";
175
+ import "./chunk-2QLYTVYX.js";
176
+ import "./chunk-7GDRQBQC.js";
177
+ import "./chunk-PGSPX4SU.js";
178
+ import "./chunk-AT4TNPWW.js";
179
+ import "./chunk-GSGD5E4C.js";
180
+ import {
181
+ getExecutionContext
182
+ } from "./chunk-UI2F6DJ5.js";
183
+ import "./chunk-4BTDUT2S.js";
184
+ import "./chunk-L6OM4A22.js";
185
+ import "./chunk-G4THLFV3.js";
186
+ import "./chunk-RGWHUI5E.js";
187
+ import "./chunk-UUH2RVKS.js";
188
+ import "./chunk-LEIIWPWQ.js";
189
+ import "./chunk-L7JZLXQL.js";
190
+ import "./chunk-IZYIQQ7X.js";
191
+ import "./chunk-JPKSXKNB.js";
192
+ import "./chunk-TAJPCXSB.js";
193
+ import "./chunk-XZE4XARH.js";
194
+ import {
195
+ debugLog,
196
+ isDebugMode
197
+ } from "./chunk-EJGCZGUF.js";
198
+ import "./chunk-LPITVM7M.js";
199
+ import {
200
+ POETIC_ALLOW_MOCK_PROVIDERS,
201
+ POETIC_MOCK_PROVIDERS,
202
+ POETIC_OPENCODE_TRANSIENT_AGENT,
203
+ POETIC_OPENCODE_XDG_CACHE_HOME,
204
+ POETIC_OPENCODE_XDG_CONFIG_HOME,
205
+ POETIC_OPENCODE_XDG_DATA_HOME,
206
+ POETIC_OPENCODE_XDG_STATE_HOME,
207
+ POETIC_TEST_FAST_RETRY,
208
+ readEnv,
209
+ readRawEnv
210
+ } from "./chunk-5DLKYTQX.js";
211
+ import "./chunk-PZ5AY32C.js";
212
+
213
+ // src/core/providers/opencode/execution/runner.ts
214
+ import * as fs2 from "fs/promises";
215
+ import { homedir, tmpdir } from "os";
216
+ import * as path2 from "path";
217
+
218
+ // src/core/steering/transport/opencode.ts
219
+ import { randomBytes } from "crypto";
220
+ function buildOpencodeSteering(options) {
221
+ return assembleSteering({
222
+ provider: "opencode",
223
+ guidance: options.guidance
224
+ });
225
+ }
226
+ function planOpencodeTransientAgent(payload, options = {}) {
227
+ if (!payload.systemChannel) return void 0;
228
+ const suffix = options.randomSuffix ?? randomBytes(8).toString("hex");
229
+ const agentName = `poetic-steering-${suffix}`;
230
+ const config = {
231
+ $schema: "https://opencode.ai/config.json",
232
+ agent: {
233
+ [agentName]: {
234
+ description: "Poetic runtime steering (transient, per-invocation).",
235
+ mode: "primary",
236
+ prompt: payload.systemChannel
237
+ }
238
+ }
239
+ };
240
+ return {
241
+ agentName,
242
+ configContent: JSON.stringify(config)
243
+ };
244
+ }
245
+ function applyOpencodePreambleFallback(payload, userPrompt) {
246
+ if (!payload.systemChannel) return userPrompt;
247
+ return `${payload.systemChannel}
248
+
249
+ ${userPrompt}`;
250
+ }
251
+
252
+ // src/core/providers/opencode/capabilities.ts
253
+ var capabilityCache = null;
254
+ var capabilityCacheValidatedAt = 0;
255
+ var capabilityProbePromise = null;
256
+ var capabilityCacheKey = null;
257
+ function hasHelpTextShape(text) {
258
+ return /\b(usage|options|positionals)\b/i.test(text);
259
+ }
260
+ function hasCliFlag(text, longFlag) {
261
+ const escaped = longFlag.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
262
+ return new RegExp(`(^|[\\s,])${escaped}(?=$|[\\s,])`).test(text);
263
+ }
264
+ function defaultCapabilities() {
265
+ return {
266
+ supportsFormatJson: false,
267
+ supportsTitle: false,
268
+ supportsVariant: false,
269
+ supportsFile: false,
270
+ supportsAgent: false,
271
+ supportsDir: false,
272
+ supportsDangerouslySkipPermissions: false,
273
+ supportsPure: false
274
+ };
275
+ }
276
+ async function getOpencodeRunCapabilities(env) {
277
+ const now = Date.now();
278
+ if (capabilityProbePromise) {
279
+ return capabilityProbePromise;
280
+ }
281
+ capabilityProbePromise = (async () => {
282
+ const capabilities = defaultCapabilities();
283
+ try {
284
+ const { execa } = await import("execa");
285
+ const { command, prefixArgs } = resolveProviderCliCommand("opencode");
286
+ const mergedEnv = {
287
+ ...process.env,
288
+ ...env ?? {}
289
+ };
290
+ const version = await execa(command, [...prefixArgs, "--version"], {
291
+ reject: false,
292
+ timeout: 5e3,
293
+ env: mergedEnv
294
+ });
295
+ const cacheKey = `${command} ${prefixArgs.join(" ")}::${(version.stdout ?? "").trim()}`;
296
+ const cliVersion = normalizeProviderCliVersion(version.stdout);
297
+ if (version.exitCode === 0 && cliVersion) {
298
+ capabilities.cliVersion = cliVersion;
299
+ }
300
+ if (capabilityCache && capabilityCacheValidatedAt && capabilityCacheKey === cacheKey && now - capabilityCacheValidatedAt < 6e4) {
301
+ return capabilityCache;
302
+ }
303
+ const help = await execa(command, [...prefixArgs, "run", "--help"], {
304
+ reject: false,
305
+ timeout: 5e3,
306
+ env: mergedEnv
307
+ });
308
+ const text = `${help.stdout ?? ""}
309
+ ${help.stderr ?? ""}`;
310
+ if (hasHelpTextShape(text)) {
311
+ capabilities.supportsFormatJson = hasCliFlag(text, "--format") && /\bjson\b/.test(text);
312
+ capabilities.supportsTitle = hasCliFlag(text, "--title");
313
+ capabilities.supportsVariant = hasCliFlag(text, "--variant");
314
+ capabilities.supportsFile = hasCliFlag(text, "--file");
315
+ capabilities.supportsAgent = hasCliFlag(text, "--agent");
316
+ capabilities.supportsDir = hasCliFlag(text, "--dir");
317
+ capabilities.supportsDangerouslySkipPermissions = hasCliFlag(
318
+ text,
319
+ "--dangerously-skip-permissions"
320
+ );
321
+ capabilities.supportsPure = hasCliFlag(text, "--pure");
322
+ }
323
+ capabilityCacheKey = cacheKey;
324
+ } catch (error) {
325
+ debugLog(
326
+ `[OpenCode] CLI capability probe failed; falling back to conservative flags. Error: ${error instanceof Error ? error.message : String(error)}`
327
+ );
328
+ }
329
+ capabilityCache = capabilities;
330
+ capabilityCacheValidatedAt = Date.now();
331
+ return capabilities;
332
+ })();
333
+ try {
334
+ return await capabilityProbePromise;
335
+ } finally {
336
+ capabilityProbePromise = null;
337
+ }
338
+ }
339
+
340
+ // src/core/providers/opencode/error-parser.ts
341
+ var MODEL_NOT_FOUND_PATTERN = /\bmodel_not_found\b|providermodelnotfound|\bmodel not found\b|\bunknown model\b|no such model|model\s+["'`][^"'`]+["'`]\s+not found/i;
342
+ function extractRequestedModelId(...texts) {
343
+ const combined = texts.filter(Boolean).join("\n");
344
+ const patterns = [
345
+ /model[_\s-]?not[_\s-]?found[:\s]+["'`]?([A-Za-z0-9._/:-]+)/i,
346
+ /unknown model[:\s]+["'`]?([A-Za-z0-9._/:-]+)/i,
347
+ /model ["'`]([^"'`]+)["'`]/i,
348
+ /--model\s+([A-Za-z0-9._/:-]+)/i
349
+ ];
350
+ for (const pattern of patterns) {
351
+ const match = combined.match(pattern);
352
+ const id = match?.[1]?.trim();
353
+ if (id) return id;
354
+ }
355
+ return void 0;
356
+ }
357
+ function buildOpencodeModelNotFoundUserMessage(context = {}) {
358
+ const requested = context.requestedModel?.trim() || "unknown";
359
+ const cliVersion = context.cliVersion?.trim() || "unknown";
360
+ const inventoryAge = context.inventoryAgeMs === void 0 ? "unknown" : formatCacheAge(context.inventoryAgeMs);
361
+ const parts = [
362
+ `OpenCode could not resolve model "${requested}".`,
363
+ `CLI version: ${cliVersion}. Inventory age: ${inventoryAge}.`
364
+ ];
365
+ const inventory = context.inventoryModelIds;
366
+ if (inventory === void 0) {
367
+ parts.push(
368
+ "The local OpenCode model inventory is unavailable, so Poetic could not compare the requested model with it."
369
+ );
370
+ } else if (inventory.length === 0) {
371
+ parts.push("The local OpenCode model inventory is available but empty.");
372
+ } else {
373
+ const canonicalRequested = canonicalizeOpencodeModelId(requested, [...inventory]);
374
+ if (canonicalRequested !== requested) {
375
+ parts.push(`Canonical inventory model: "${canonicalRequested}".`);
376
+ }
377
+ if (inventory.includes(canonicalRequested)) {
378
+ parts.push(
379
+ "The local inventory lists that model; the OpenCode execution error remains authoritative."
380
+ );
381
+ } else {
382
+ const [requestedPrefix] = deriveOpencodePrefixes([canonicalRequested]);
383
+ const inventoryPrefixes = deriveOpencodePrefixes(inventory);
384
+ if (requestedPrefix && !inventoryPrefixes.has(requestedPrefix)) {
385
+ parts.push(
386
+ `The local inventory does not list models for provider prefix "${requestedPrefix}".`
387
+ );
388
+ } else if (requestedPrefix) {
389
+ parts.push(
390
+ `The local inventory lists provider prefix "${requestedPrefix}" but does not list model "${canonicalRequested}".`
391
+ );
392
+ } else {
393
+ parts.push(`The local inventory does not list model "${canonicalRequested}".`);
394
+ }
395
+ }
396
+ }
397
+ parts.push("Refresh the local inventory with `opencode models --refresh`.");
398
+ return parts.join(" ");
399
+ }
400
+ function parseOpencodeError(error, context = {}) {
401
+ const message = error instanceof Error ? error.message : String(error);
402
+ const providerError = error instanceof ProviderExecutionError ? error : void 0;
403
+ const stderr = providerError?.stderr ?? "";
404
+ const stdout = providerError?.stdout ?? "";
405
+ const exitCode = providerError?.exitCode;
406
+ const reason = providerError?.reason;
407
+ const combined = `${message}
408
+ ${stderr}
409
+ ${stdout}`.toLowerCase();
410
+ const hasHttpStatusContext = /\b(?:http|status|response|error|code)\s*(?:[:=]|\bis\b)?\s*(401|403|429|500|502|503|504|400)\b/i.test(
411
+ combined
412
+ );
413
+ const hasAuthSignal = /unauthorized|unauthenticated|authentication required|login required|invalid api key|api key has been revoked|(?:api|access|authorization|account).*permission denied|permission denied.*(?:api|key|token|account)|forbidden|not authenticated|session expired|credentials invalid|could not load credentials|load credentials/i.test(
414
+ combined
415
+ );
416
+ const isFilesystemPermissionError = /(?:eacces|eperm|operation not permitted|read-only file system|permission denied)/i.test(
417
+ combined
418
+ ) && /(?:file|directory|path|mkdir|open|write|rename|unlink|chmod|stat)\b/i.test(combined);
419
+ if (reason === "command_not_found" || /\bcommand not found\b/i.test(combined) || /spawn .* enoent/i.test(combined)) {
420
+ return {
421
+ type: "command_not_found",
422
+ retryable: false,
423
+ userMessage: "OpenCode CLI not found. Install with `curl -fsSL https://opencode.ai/install | bash` or `npm install -g opencode-ai`, then run `opencode auth login`.",
424
+ original: { message, stderr, stdout, exitCode, reason }
425
+ };
426
+ }
427
+ if ((hasAuthSignal || hasHttpStatusContext && /\b401\b|\b403\b/.test(combined)) && !isFilesystemPermissionError) {
428
+ return {
429
+ type: "auth",
430
+ retryable: false,
431
+ userMessage: "OpenCode authentication failed. Run `opencode auth login` to re-authenticate.",
432
+ original: { message, stderr, stdout, exitCode, reason }
433
+ };
434
+ }
435
+ if (/\brate limit\b|\btoo many requests\b|\bquota exceeded\b|resource_exhausted/i.test(combined) || hasHttpStatusContext && /\b429\b/.test(combined)) {
436
+ return {
437
+ type: "rate_limit",
438
+ retryable: true,
439
+ userMessage: "OpenCode rate limit or quota exceeded. Retrying may succeed after backoff.",
440
+ original: { message, stderr, stdout, exitCode, reason }
441
+ };
442
+ }
443
+ if (/service unavailable|temporarily unavailable|server is overloaded|overloaded/i.test(combined) || hasHttpStatusContext && /\b503\b|\b502\b|\b500\b|\b504\b/.test(combined)) {
444
+ return {
445
+ type: "capacity",
446
+ retryable: true,
447
+ userMessage: "OpenCode service temporarily unavailable. Retrying may succeed.",
448
+ original: { message, stderr, stdout, exitCode, reason }
449
+ };
450
+ }
451
+ if (/performing one time database migration/i.test(combined)) {
452
+ return {
453
+ type: "bootstrap",
454
+ retryable: true,
455
+ userMessage: "OpenCode is performing first-run setup. Retrying may succeed.",
456
+ original: { message, stderr, stdout, exitCode, reason }
457
+ };
458
+ }
459
+ if (reason === "timeout" || /execution timed out/i.test(combined)) {
460
+ return {
461
+ type: "timeout",
462
+ retryable: false,
463
+ userMessage: "OpenCode execution timed out. Consider increasing timeout or simplifying the task.",
464
+ original: { message, stderr, stdout, exitCode, reason }
465
+ };
466
+ }
467
+ if (/econnreset|econnrefused|enotfound|enetunreach|etimedout|eai_again|socket hang up|fetch failed|network error|getaddrinfo|connection.*timeout/i.test(
468
+ combined
469
+ )) {
470
+ return {
471
+ type: "network",
472
+ retryable: true,
473
+ userMessage: "Network error connecting to OpenCode. Retrying may succeed.",
474
+ original: { message, stderr, stdout, exitCode, reason }
475
+ };
476
+ }
477
+ if (MODEL_NOT_FOUND_PATTERN.test(combined)) {
478
+ const requestedModel = context.requestedModel?.trim() || extractRequestedModelId(message, stderr, stdout) || void 0;
479
+ return {
480
+ type: "model_not_found",
481
+ retryable: false,
482
+ userMessage: buildOpencodeModelNotFoundUserMessage({
483
+ requestedModel,
484
+ cliVersion: context.cliVersion,
485
+ inventoryModelIds: context.inventoryModelIds,
486
+ inventoryAgeMs: context.inventoryAgeMs
487
+ }),
488
+ original: { message, stderr, stdout, exitCode, reason }
489
+ };
490
+ }
491
+ if (/maximum context length|context window|token limit|too many tokens|prompt too long|input is too long|request exceeds/i.test(
492
+ combined
493
+ )) {
494
+ return {
495
+ type: "validation",
496
+ retryable: false,
497
+ userMessage: "OpenCode request is too large for the model context window.",
498
+ original: { message, stderr, stdout, exitCode, reason }
499
+ };
500
+ }
501
+ if (/invalid arguments|unknown option|unrecognized|usage:|bad request/i.test(combined) || hasHttpStatusContext && /\b400\b/.test(combined)) {
502
+ return {
503
+ type: "validation",
504
+ retryable: false,
505
+ userMessage: "Invalid request to OpenCode CLI. This may be a Poetic configuration bug.",
506
+ original: { message, stderr, stdout, exitCode, reason }
507
+ };
508
+ }
509
+ return {
510
+ type: "unknown",
511
+ retryable: false,
512
+ userMessage: "OpenCode execution failed with an unknown error.",
513
+ original: { message, stderr, stdout, exitCode, reason }
514
+ };
515
+ }
516
+
517
+ // src/core/providers/opencode/log-diagnostics.ts
518
+ import * as fs from "fs/promises";
519
+ import * as path from "path";
520
+ var MAX_OPENCODE_LOG_ERRORS = 5;
521
+ var MAX_OPENCODE_LOG_BYTES = 256 * 1024;
522
+ var LOG_FIELD_PATTERN = /(?:^|\s)(providerID|modelID|message|error(?:\.error)?)=("(?:\\.|[^"])*"|[^\s]+)/g;
523
+ function decodeLogValue(raw) {
524
+ if (!raw.startsWith('"')) return raw;
525
+ try {
526
+ return JSON.parse(raw);
527
+ } catch {
528
+ return raw.slice(1, -1);
529
+ }
530
+ }
531
+ function extractOpencodeLogErrors(logText) {
532
+ const summaries = [];
533
+ const seen = /* @__PURE__ */ new Set();
534
+ for (const line of logText.split(/\r?\n/)) {
535
+ if (!/\blevel=ERROR\b/.test(line)) continue;
536
+ const fields = /* @__PURE__ */ new Map();
537
+ for (const match of line.matchAll(LOG_FIELD_PATTERN)) {
538
+ const key = match[1];
539
+ const value = match[2];
540
+ if (key && value) fields.set(key, decodeLogValue(value));
541
+ }
542
+ const error = fields.get("error.error") ?? fields.get("error");
543
+ const parts = [
544
+ fields.get("providerID") ? `provider=${fields.get("providerID")}` : void 0,
545
+ fields.get("modelID") ? `model=${fields.get("modelID")}` : void 0,
546
+ fields.get("message") ? `message=${fields.get("message")}` : void 0,
547
+ error ? `error=${error}` : void 0
548
+ ].filter(Boolean);
549
+ if (parts.length === 0) continue;
550
+ const summary = sanitizeDiagnosticOutput(`OpenCode log error: ${parts.join(" ")}`, 500);
551
+ if (!summary || seen.has(summary)) continue;
552
+ seen.add(summary);
553
+ summaries.push(summary);
554
+ }
555
+ return summaries.slice(-MAX_OPENCODE_LOG_ERRORS);
556
+ }
557
+ async function captureOpencodeLogCheckpoint(dataHome) {
558
+ const logPath = path.join(dataHome, "opencode", "log", "opencode.log");
559
+ try {
560
+ const stat2 = await fs.stat(logPath);
561
+ return { path: logPath, offset: stat2.size };
562
+ } catch {
563
+ return { path: logPath, offset: 0 };
564
+ }
565
+ }
566
+ async function readOpencodeLogErrorsSince(checkpoint) {
567
+ let handle;
568
+ try {
569
+ const stat2 = await fs.stat(checkpoint.path);
570
+ if (stat2.size <= checkpoint.offset) return [];
571
+ const start = Math.max(checkpoint.offset, stat2.size - MAX_OPENCODE_LOG_BYTES);
572
+ const length = stat2.size - start;
573
+ const buffer = Buffer.alloc(length);
574
+ handle = await fs.open(checkpoint.path, "r");
575
+ const { bytesRead } = await handle.read(buffer, 0, length, start);
576
+ return extractOpencodeLogErrors(buffer.subarray(0, bytesRead).toString("utf8"));
577
+ } catch {
578
+ return [];
579
+ } finally {
580
+ await handle?.close().catch(() => {
581
+ });
582
+ }
583
+ }
584
+
585
+ // src/core/providers/opencode/prompt-adapter.ts
586
+ function adaptPromptForOpencode(prompt, options = {}) {
587
+ const effectiveMode = resolveEffectiveMode(
588
+ options.promptMode ?? null,
589
+ options.globalWorkspaceMode ?? null,
590
+ "opencode"
591
+ );
592
+ if (effectiveMode === "passthrough") {
593
+ return {
594
+ original: prompt,
595
+ adapted: prompt,
596
+ adaptations: ["Passthrough prompt for native OpenCode CLI parity"],
597
+ promptMode: effectiveMode
598
+ };
599
+ }
600
+ const strategy = (options.strategy ?? "conservative").trim().toLowerCase();
601
+ const composed = applyWorkspaceMode(prompt, {
602
+ mode: effectiveMode,
603
+ provider: "OPENCODE",
604
+ executionIntent: options.executionIntent ?? "mixed",
605
+ strategy: strategy === "innovative" ? "innovative" : strategy === "hybrid" ? "hybrid" : "conservative",
606
+ targetFiles: options.files,
607
+ projectRoot: options.projectRoot
608
+ });
609
+ return {
610
+ original: prompt,
611
+ adapted: composed.adapted,
612
+ adaptations: composed.operations,
613
+ promptMode: composed.mode,
614
+ completionSignalVariant: composed.completionSignalVariant
615
+ };
616
+ }
617
+ function formatAdaptations(adaptation) {
618
+ const lines = [];
619
+ lines.push("[PromptAdapter] OpenCode prompt adapted");
620
+ lines.push(` - Mode: ${adaptation.promptMode}`);
621
+ lines.push(` - Original length: ${adaptation.original.length} chars`);
622
+ lines.push(` - Adapted length: ${adaptation.adapted.length} chars`);
623
+ lines.push(` - Transformations applied: ${adaptation.adaptations.length}`);
624
+ if (adaptation.adaptations.length > 0) {
625
+ lines.push(" - Applied:");
626
+ for (const item of adaptation.adaptations) {
627
+ lines.push(` - ${item}`);
628
+ }
629
+ }
630
+ if (isDebugMode()) {
631
+ lines.push(` - Size delta: ${adaptation.adapted.length - adaptation.original.length} chars`);
632
+ }
633
+ return lines.join("\n");
634
+ }
635
+
636
+ // src/core/providers/opencode/reasoning-variant.ts
637
+ function normalizeOpencodeReasoningEffort(value) {
638
+ if (typeof value !== "string") return void 0;
639
+ const normalized = value.trim().toLowerCase().replace(/[_\s]/g, "-");
640
+ if (normalized === "low" || normalized === "medium" || normalized === "high") {
641
+ return normalized;
642
+ }
643
+ if (normalized === "xhigh" || normalized === "x-high" || normalized === "extra-high") {
644
+ return "xhigh";
645
+ }
646
+ if (normalized === "max") return "max";
647
+ return void 0;
648
+ }
649
+ function mapReasoningEffortToOpencodeVariant(effort) {
650
+ return resolveReasoningEffort("opencode", effort, false).variantMapping;
651
+ }
652
+
653
+ // src/core/providers/opencode/execution/runner.ts
654
+ var OPENCODE_CIRCUIT_BREAKER_OPTIONS = DEFAULT_PROVIDER_CIRCUIT_BREAKER_OPTIONS;
655
+ var OPENCODE_DEADLINE_SAFETY_BUFFER_MS = 5e3;
656
+ function readOpencodeRuntimeEnv(env, spec) {
657
+ const envValue = env?.[spec.name]?.trim();
658
+ if (envValue) {
659
+ return envValue;
660
+ }
661
+ const contextValue = getExecutionContext().envOverrides[spec.name]?.trim();
662
+ if (contextValue) {
663
+ return contextValue;
664
+ }
665
+ return readRawEnv(spec)?.trim();
666
+ }
667
+ function isOpencodeRuntimeEnvEnabled(env, spec) {
668
+ const raw = readOpencodeRuntimeEnv(env, spec);
669
+ if (raw === void 0) {
670
+ return spec.default ?? false;
671
+ }
672
+ const normalized = raw.toLowerCase();
673
+ if (["1", "true", "yes", "on"].includes(normalized)) return true;
674
+ if (["0", "false", "no", "off"].includes(normalized)) return false;
675
+ throw new Error(
676
+ `Invalid boolean value for ${spec.name}: "${raw}". Expected one of: 1, true, yes, on, 0, false, no, off`
677
+ );
678
+ }
679
+ function resolveOpencodeAttemptTimeoutMs(timeoutMs, deadlineMs) {
680
+ if (deadlineMs == null) {
681
+ return timeoutMs;
682
+ }
683
+ const remainingMs = deadlineMs - Date.now() - OPENCODE_DEADLINE_SAFETY_BUFFER_MS;
684
+ if (remainingMs <= 0) {
685
+ throw new ProviderExecutionError("OpenCode deadline exceeded before attempt start.", {
686
+ providerName: metadata.id,
687
+ retryable: false,
688
+ reason: "deadline_exhausted"
689
+ });
690
+ }
691
+ return Math.max(1, Math.min(timeoutMs, remainingMs));
692
+ }
693
+ function resolveOpencodeIdleTimeout(requested, providerDefault, allowAboveProviderDefault) {
694
+ if (requested == null) return providerDefault;
695
+ if (providerDefault == null || allowAboveProviderDefault) return requested;
696
+ return Math.min(requested, providerDefault);
697
+ }
698
+ function resolveTaskAwareVariant(prompt) {
699
+ const taskType = detectTaskType(prompt);
700
+ const generationSettings = resolveSettings(taskType, "opencode");
701
+ const taskEffort = normalizeOpencodeReasoningEffort(generationSettings.reasoningEffort);
702
+ if (!taskEffort) {
703
+ return void 0;
704
+ }
705
+ const resolution = resolveReasoningEffort("opencode", taskEffort, false);
706
+ logReasoningEffortResolution(resolution, "opencode");
707
+ if (resolution.variantMapping) {
708
+ debugLog(
709
+ `[OpenCode] Task-aware variant selected: ${resolution.variantMapping} (taskType=${taskType})`
710
+ );
711
+ }
712
+ return resolution.variantMapping;
713
+ }
714
+ function formatResolvedOpencodeModel(providerId, modelId) {
715
+ if (typeof modelId !== "string" || modelId.trim().length === 0) {
716
+ return void 0;
717
+ }
718
+ const trimmedModel = modelId.trim();
719
+ if (trimmedModel.includes("/")) {
720
+ return trimmedModel;
721
+ }
722
+ return typeof providerId === "string" && providerId.trim().length > 0 ? `${providerId.trim()}/${trimmedModel}` : trimmedModel;
723
+ }
724
+ function extractUsefulOpencodeRawOutput(stdout, stderr) {
725
+ return stripAnsiSequences(`${stdout}
726
+ ${stderr}`).split(/\r?\n/).map((line) => line.trim()).filter((line) => {
727
+ if (!line) return false;
728
+ if (line === "Performing one time database migration, may take a few minutes...") {
729
+ return false;
730
+ }
731
+ if (line === "sqlite-migration:done") return false;
732
+ if (line === "Database migration complete.") return false;
733
+ if (/^>\s+build\s+·\s+/i.test(line)) return false;
734
+ return true;
735
+ }).join("\n").trim();
736
+ }
737
+ function hasOpencodeReportedToolFailure(output) {
738
+ return output.split(/\r?\n/).some((line) => /^\u2717\s+.+\s+failed\b/i.test(line.trim()));
739
+ }
740
+ function summarizeOpencodeErrorEvents(errorEvents) {
741
+ return errorEvents.slice(0, 3).map((event) => {
742
+ const type = event.errorType ? ` (${event.errorType})` : "";
743
+ const retryable = event.retryable === false ? "hard" : "retryable/degraded";
744
+ return `OpenCode error event${type} [${retryable}]: ${event.message}`;
745
+ }).join("\n");
746
+ }
747
+ function resolveUserOpencodeDataHome() {
748
+ return process.env.XDG_DATA_HOME?.trim() || path2.join(homedir(), ".local", "share");
749
+ }
750
+ function resolveUserOpencodeConfigHome() {
751
+ return process.env.XDG_CONFIG_HOME?.trim() || path2.join(homedir(), ".config");
752
+ }
753
+ var OPENCODE_USER_CONFIG_FILES = ["opencode.json", "config.json"];
754
+ var OPENCODE_USER_CONFIG_DIRS = ["agent"];
755
+ async function seedOpencodeUserConfig(sourceConfigHome, destinationConfigHome) {
756
+ if (path2.resolve(sourceConfigHome) === path2.resolve(destinationConfigHome)) {
757
+ return;
758
+ }
759
+ const sourceDir = path2.join(sourceConfigHome, "opencode");
760
+ const destinationDir = path2.join(destinationConfigHome, "opencode");
761
+ try {
762
+ await fs2.access(sourceDir);
763
+ } catch {
764
+ return;
765
+ }
766
+ try {
767
+ await fs2.mkdir(destinationDir, { recursive: true });
768
+ } catch (error) {
769
+ throw new Error(
770
+ `Failed to create isolated OpenCode config directory: ${error instanceof Error ? error.message : String(error)}`
771
+ );
772
+ }
773
+ for (const fileName of OPENCODE_USER_CONFIG_FILES) {
774
+ const src = path2.join(sourceDir, fileName);
775
+ const dst = path2.join(destinationDir, fileName);
776
+ try {
777
+ await fs2.copyFile(src, dst);
778
+ } catch (error) {
779
+ const code = error.code;
780
+ if (code !== "ENOENT") {
781
+ throw new Error(
782
+ `Failed to seed OpenCode ${fileName} into isolated XDG_CONFIG_HOME: ${error instanceof Error ? error.message : String(error)}`
783
+ );
784
+ }
785
+ }
786
+ }
787
+ for (const dirName of OPENCODE_USER_CONFIG_DIRS) {
788
+ const src = path2.join(sourceDir, dirName);
789
+ const dst = path2.join(destinationDir, dirName);
790
+ try {
791
+ await fs2.cp(src, dst, { recursive: true, errorOnExist: false, force: true });
792
+ } catch (error) {
793
+ const code = error.code;
794
+ if (code !== "ENOENT") {
795
+ throw new Error(
796
+ `Failed to seed OpenCode ${dirName}/ into isolated XDG_CONFIG_HOME: ${error instanceof Error ? error.message : String(error)}`
797
+ );
798
+ }
799
+ }
800
+ }
801
+ }
802
+ async function seedOpencodeCredentials(sourceDataHome, destinationDataHome) {
803
+ if (path2.resolve(sourceDataHome) === path2.resolve(destinationDataHome)) {
804
+ return;
805
+ }
806
+ const sourceAuthPath = path2.join(sourceDataHome, "opencode", "auth.json");
807
+ const destinationDir = path2.join(destinationDataHome, "opencode");
808
+ const destinationAuthPath = path2.join(destinationDir, "auth.json");
809
+ try {
810
+ await fs2.mkdir(destinationDir, { recursive: true });
811
+ await fs2.copyFile(sourceAuthPath, destinationAuthPath);
812
+ } catch (error) {
813
+ const code = error.code;
814
+ if (code !== "ENOENT") {
815
+ debugLog(
816
+ `[OpenCode] Failed to seed auth.json into isolated XDG_DATA_HOME: ${error instanceof Error ? error.message : String(error)}`
817
+ );
818
+ }
819
+ }
820
+ }
821
+ async function resolveOpencodeDataHome(env) {
822
+ const caller = resolveCallerOwnedPath(
823
+ env?.XDG_DATA_HOME,
824
+ readOpencodeRuntimeEnv(env, POETIC_OPENCODE_XDG_DATA_HOME)
825
+ );
826
+ if (caller) return { dataHome: caller.path };
827
+ const dataHome = await mkPoeticTempDir("opencode-xdg");
828
+ await seedOpencodeCredentials(resolveUserOpencodeDataHome(), dataHome);
829
+ const owned = markRunOwnedRoot(dataHome);
830
+ return {
831
+ dataHome,
832
+ cleanup: async () => {
833
+ await removeAndVerifyRunOwnedRoot(owned, { role: "opencode-xdg-data" });
834
+ }
835
+ };
836
+ }
837
+ async function resolveOpencodeStateHome(env) {
838
+ const caller = resolveCallerOwnedPath(
839
+ env?.XDG_STATE_HOME,
840
+ readOpencodeRuntimeEnv(env, POETIC_OPENCODE_XDG_STATE_HOME)
841
+ );
842
+ if (caller) return { stateHome: caller.path };
843
+ const stateHome = await mkPoeticTempDir("opencode-state");
844
+ const owned = markRunOwnedRoot(stateHome);
845
+ return {
846
+ stateHome,
847
+ cleanup: async () => {
848
+ await removeAndVerifyRunOwnedRoot(owned, { role: "opencode-xdg-state" });
849
+ }
850
+ };
851
+ }
852
+ async function resolveOpencodeConfigHome(env) {
853
+ const caller = resolveCallerOwnedPath(
854
+ env?.XDG_CONFIG_HOME,
855
+ readOpencodeRuntimeEnv(env, POETIC_OPENCODE_XDG_CONFIG_HOME)
856
+ );
857
+ if (caller) return { configHome: caller.path };
858
+ const configHome = await mkPoeticTempDir("opencode-config");
859
+ const owned = markRunOwnedRoot(configHome);
860
+ try {
861
+ await seedOpencodeUserConfig(resolveUserOpencodeConfigHome(), configHome);
862
+ } catch (error) {
863
+ try {
864
+ await removeAndVerifyRunOwnedRoot(owned, { role: "opencode-xdg-config-seed-abort" });
865
+ } catch (cleanupError) {
866
+ if (cleanupError instanceof CredentialResidueError) {
867
+ throw contextualizeCredentialCleanupError(
868
+ cleanupError,
869
+ error,
870
+ "opencode-xdg-config-seed-abort"
871
+ );
872
+ }
873
+ throw cleanupError;
874
+ }
875
+ throw error;
876
+ }
877
+ return {
878
+ configHome,
879
+ cleanup: async () => {
880
+ await removeAndVerifyRunOwnedRoot(owned, { role: "opencode-xdg-config" });
881
+ }
882
+ };
883
+ }
884
+ async function resolveOpencodeCacheHome(env) {
885
+ const caller = resolveCallerOwnedPath(
886
+ env?.XDG_CACHE_HOME,
887
+ readOpencodeRuntimeEnv(env, POETIC_OPENCODE_XDG_CACHE_HOME)
888
+ );
889
+ if (caller) return { cacheHome: caller.path };
890
+ const cacheHome = await mkPoeticTempDir("opencode-cache");
891
+ const owned = markRunOwnedRoot(cacheHome);
892
+ return {
893
+ cacheHome,
894
+ cleanup: async () => {
895
+ await removeAndVerifyRunOwnedRoot(owned, { role: "opencode-xdg-cache" });
896
+ }
897
+ };
898
+ }
899
+ async function hasOpenrouterCredential(childEnv, dataHome) {
900
+ if (childEnv.OPENROUTER_API_KEY?.trim() || childEnv.OPENROUTER_KEY?.trim()) {
901
+ return true;
902
+ }
903
+ try {
904
+ const authJson = await fs2.readFile(path2.join(dataHome, "opencode", "auth.json"), "utf8");
905
+ return /"openrouter"\s*:/.test(authJson);
906
+ } catch {
907
+ return false;
908
+ }
909
+ }
910
+ async function resolveOpencodeSessionFromDb(workingDir, dataHome) {
911
+ try {
912
+ const dbPath = path2.join(dataHome, "opencode", "opencode.db");
913
+ const { default: Database } = await import("better-sqlite3");
914
+ const db = new Database(dbPath, { readonly: true, fileMustExist: true });
915
+ try {
916
+ const session = db.prepare(
917
+ `
918
+ SELECT id
919
+ FROM session
920
+ WHERE directory = ?
921
+ ORDER BY time_updated DESC
922
+ LIMIT 1
923
+ `
924
+ ).get(workingDir);
925
+ if (typeof session?.id !== "string") {
926
+ return {};
927
+ }
928
+ const modelRow = db.prepare(
929
+ `
930
+ SELECT
931
+ json_extract(data, '$.providerID') AS providerID,
932
+ json_extract(data, '$.modelID') AS modelID,
933
+ json_extract(data, '$.model') AS model
934
+ FROM message
935
+ WHERE session_id = ?
936
+ AND json_extract(data, '$.role') = 'assistant'
937
+ AND (
938
+ json_extract(data, '$.modelID') IS NOT NULL
939
+ OR json_extract(data, '$.model') IS NOT NULL
940
+ )
941
+ ORDER BY time_created DESC
942
+ LIMIT 1
943
+ `
944
+ ).get(session.id);
945
+ return {
946
+ sessionId: session.id,
947
+ resolvedModel: formatResolvedOpencodeModel(modelRow?.providerID, modelRow?.modelID) ?? formatResolvedOpencodeModel(void 0, modelRow?.model)
948
+ };
949
+ } finally {
950
+ db.close();
951
+ }
952
+ } catch {
953
+ return {};
954
+ }
955
+ }
956
+ async function resolveAttachedFilePaths(workingDir, files, attachments) {
957
+ const candidates = [...files ?? [], ...attachments ?? []].map((entry) => entry.trim()).filter((entry) => entry.length > 0);
958
+ const deduped = /* @__PURE__ */ new Set();
959
+ const root = path2.resolve(workingDir);
960
+ for (const candidate of candidates) {
961
+ const resolved = path2.isAbsolute(candidate) ? candidate : path2.resolve(workingDir, candidate);
962
+ if (resolved !== root && !resolved.startsWith(root + path2.sep)) {
963
+ throw new Error(`OpenCode attachment must be within working directory: ${candidate}`);
964
+ }
965
+ try {
966
+ await fs2.access(resolved);
967
+ deduped.add(resolved);
968
+ } catch {
969
+ debugLog(`[OpenCode] Skipping missing attachment path: ${candidate}`);
970
+ }
971
+ }
972
+ return [...deduped];
973
+ }
974
+ async function writePromptAttachment(prompt) {
975
+ const dir = await mkPoeticTempDir("opencode-prompt");
976
+ const filePath = path2.join(dir, "prompt.md");
977
+ try {
978
+ await fs2.writeFile(filePath, prompt, "utf8");
979
+ } catch (error) {
980
+ await fs2.rm(dir, { recursive: true, force: true }).catch((cleanupError) => {
981
+ debugLog(
982
+ `[OpenCode] Failed to clean prompt attachment ${dir} after write failure: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`
983
+ );
984
+ });
985
+ throw error;
986
+ }
987
+ return {
988
+ filePath,
989
+ cleanup: async () => {
990
+ try {
991
+ await fs2.rm(dir, { recursive: true, force: true });
992
+ } catch (error) {
993
+ debugLog(
994
+ `[OpenCode] Failed to clean prompt attachment ${dir}: ${error instanceof Error ? error.message : String(error)}`
995
+ );
996
+ }
997
+ }
998
+ };
999
+ }
1000
+ async function clearMacProvenanceAttributes(filePaths) {
1001
+ if (process.platform !== "darwin" || filePaths.length === 0) {
1002
+ return;
1003
+ }
1004
+ try {
1005
+ const { execa } = await import("execa");
1006
+ for (const filePath of filePaths) {
1007
+ try {
1008
+ await execa("xattr", ["-d", "com.apple.provenance", filePath], {
1009
+ reject: false,
1010
+ timeout: 5e3
1011
+ });
1012
+ } catch (error) {
1013
+ debugLog(
1014
+ `[OpenCode] Failed to clear com.apple.provenance from ${filePath}: ${error instanceof Error ? error.message : String(error)}`
1015
+ );
1016
+ }
1017
+ }
1018
+ } catch (error) {
1019
+ debugLog(
1020
+ `[OpenCode] Unable to prepare macOS provenance cleanup: ${error instanceof Error ? error.message : String(error)}`
1021
+ );
1022
+ }
1023
+ }
1024
+ function attachOpencodeInvocationDiagnostics(error, diagnostics) {
1025
+ if (!error || typeof error !== "object") {
1026
+ return;
1027
+ }
1028
+ const diagnosticError = error;
1029
+ diagnosticError.commandPath ??= diagnostics.commandPath;
1030
+ diagnosticError.argvRedacted ??= diagnostics.argvRedacted;
1031
+ diagnosticError.stdoutTail ??= providerOutputTail(diagnostics.stdout ?? "");
1032
+ diagnosticError.stderrTail ??= providerOutputTail(diagnostics.stderr ?? "");
1033
+ diagnosticError.providerDiagnostics ??= diagnostics.providerDiagnostics;
1034
+ diagnosticError.filesModified ??= diagnostics.filesModified;
1035
+ }
1036
+ async function runOpencodeNative(options) {
1037
+ const {
1038
+ prompt,
1039
+ workingDir,
1040
+ env,
1041
+ onData,
1042
+ onErrorData,
1043
+ model,
1044
+ modelReasoningEffort,
1045
+ generationSettings,
1046
+ files,
1047
+ attachments,
1048
+ abortSignal,
1049
+ strategy,
1050
+ executionIntent
1051
+ } = options;
1052
+ const mockProvidersEnabled = env?.POETIC_MOCK_PROVIDERS === "1" || process.env.NODE_ENV !== "test" && readEnv(POETIC_MOCK_PROVIDERS).value === "1";
1053
+ if (mockProvidersEnabled) {
1054
+ if (process.env.NODE_ENV === "production" && !readEnv(POETIC_ALLOW_MOCK_PROVIDERS).value) {
1055
+ throw new Error(
1056
+ "POETIC_MOCK_PROVIDERS is enabled in production without explicit allow; aborting to prevent synthetic responses."
1057
+ );
1058
+ }
1059
+ emitTelemetryFallbackWarning(
1060
+ "POETIC_MOCK_PROVIDERS enabled for OpenCode; responses are synthetic"
1061
+ );
1062
+ return runMockNative({
1063
+ ...options,
1064
+ provider: metadata.id
1065
+ });
1066
+ }
1067
+ await acquireRateLimitToken(metadata.id, model);
1068
+ const baselineHead = await getGitHead(workingDir);
1069
+ const baselineStatusPaths = await getGitStatusPaths(workingDir).catch(() => /* @__PURE__ */ new Set());
1070
+ const timeout = resolveProviderTimeoutMs(metadata.id, options.timeout);
1071
+ const { command, prefixArgs } = resolveProviderCliCommand(metadata.id);
1072
+ const runtimeQuirks = getProviderRuntimeQuirks(metadata.id);
1073
+ try {
1074
+ await ensureOpencodeWarm({ command, prefixArgs, workingDir });
1075
+ } catch (error) {
1076
+ debugLog(
1077
+ `[OpenCode] Warmup failed; continuing without warmup: ${error instanceof Error ? error.message : String(error)}`
1078
+ );
1079
+ }
1080
+ const capabilities = await getOpencodeRunCapabilities(env);
1081
+ const capabilityWarnings = [];
1082
+ let effectiveModel = model;
1083
+ if (model && options.modelExecutionPolicy !== "exact") {
1084
+ const cachedModels = getCachedOpencodeModelIds();
1085
+ const canonicalizedModel = canonicalizeOpencodeModelId(model, cachedModels);
1086
+ effectiveModel = canonicalizedModel;
1087
+ if (cachedModels.length > 0 && !cachedModels.includes(canonicalizedModel)) {
1088
+ const suggestion = `openrouter/${model}`;
1089
+ const suggestionHint = model.split("/").length === 2 && cachedModels.includes(suggestion) ? ` Did you mean "${suggestion}"?` : "";
1090
+ const warning = `[OpenCode] Model "${model}" not found in cached model list.${suggestionHint}`;
1091
+ capabilityWarnings.push(warning);
1092
+ debugLog(warning);
1093
+ }
1094
+ }
1095
+ const requestedWorkspaceMode = options.workspaceMode ?? options.promptMode;
1096
+ const adaptation = adaptPromptForOpencode(prompt, {
1097
+ executionIntent: executionIntent ?? "mixed",
1098
+ files,
1099
+ strategy,
1100
+ promptMode: requestedWorkspaceMode,
1101
+ projectRoot: workingDir
1102
+ });
1103
+ let adaptedPrompt = adaptation.adapted;
1104
+ debugLog(formatAdaptations(adaptation));
1105
+ const transientAgentEnabled = isOpencodeRuntimeEnvEnabled(env, POETIC_OPENCODE_TRANSIENT_AGENT);
1106
+ const shouldApplyOpencodeSteering = adaptation.promptMode !== "passthrough" || transientAgentEnabled && capabilities.supportsAgent;
1107
+ const opencodeSteeringPayload = shouldApplyOpencodeSteering ? buildOpencodeSteering({
1108
+ guidance: {
1109
+ strategy,
1110
+ recentContext: options.recentContext,
1111
+ subagents: Boolean(options.delegatedSubagents)
1112
+ }
1113
+ }) : void 0;
1114
+ let steeringAgentName;
1115
+ let steeringConfigContent;
1116
+ if (opencodeSteeringPayload && capabilities.supportsAgent && transientAgentEnabled) {
1117
+ try {
1118
+ const plan = planOpencodeTransientAgent(opencodeSteeringPayload);
1119
+ if (plan) {
1120
+ steeringAgentName = plan.agentName;
1121
+ steeringConfigContent = plan.configContent;
1122
+ }
1123
+ } catch (error) {
1124
+ debugLog(
1125
+ `[OpenCode] Transient steering-agent planning failed; preamble fallback is used only outside passthrough mode. Error: ${error instanceof Error ? error.message : String(error)}`
1126
+ );
1127
+ }
1128
+ }
1129
+ if (opencodeSteeringPayload && !steeringAgentName && adaptation.promptMode !== "passthrough") {
1130
+ adaptedPrompt = applyOpencodePreambleFallback(opencodeSteeringPayload, adaptedPrompt);
1131
+ }
1132
+ const explicitEffort = normalizeOpencodeReasoningEffort(modelReasoningEffort) ?? normalizeOpencodeReasoningEffort(generationSettings?.reasoningEffort);
1133
+ const effectiveVariant = explicitEffort ? mapReasoningEffortToOpencodeVariant(explicitEffort) : resolveTaskAwareVariant(prompt);
1134
+ const attachedFiles = await resolveAttachedFilePaths(workingDir, files, attachments);
1135
+ await clearMacProvenanceAttributes(attachedFiles);
1136
+ requireActiveSandboxBoundary(
1137
+ "OpenCode",
1138
+ "OpenCode automation bypass (OPENCODE_PERMISSION allow-all)",
1139
+ "opencode"
1140
+ );
1141
+ let opencodeDataHome;
1142
+ let opencodeStateHome;
1143
+ let opencodeConfigHome;
1144
+ let opencodeCacheHome;
1145
+ let promptAttachmentCleanup;
1146
+ let runError;
1147
+ try {
1148
+ opencodeDataHome = await resolveOpencodeDataHome(env);
1149
+ opencodeStateHome = await resolveOpencodeStateHome(env);
1150
+ opencodeConfigHome = await resolveOpencodeConfigHome(env);
1151
+ opencodeCacheHome = await resolveOpencodeCacheHome(env);
1152
+ debugLog(
1153
+ `[OpenCode] Runtime directories: TMPDIR=${env?.TMPDIR ?? process.env.TMPDIR ?? tmpdir()} XDG_STATE_HOME=${opencodeStateHome.stateHome}`
1154
+ );
1155
+ const headlessEnv = {
1156
+ OPENCODE_PERMISSION: JSON.stringify({ "*": { "*": "allow" } }),
1157
+ XDG_CACHE_HOME: opencodeCacheHome.cacheHome,
1158
+ XDG_CONFIG_HOME: opencodeConfigHome.configHome,
1159
+ XDG_DATA_HOME: opencodeDataHome.dataHome,
1160
+ XDG_STATE_HOME: opencodeStateHome.stateHome
1161
+ };
1162
+ if (steeringConfigContent) {
1163
+ headlessEnv.OPENCODE_CONFIG_CONTENT = steeringConfigContent;
1164
+ }
1165
+ const childEnv = buildProviderExecutionEnv("opencode", { ...env ?? {}, ...headlessEnv });
1166
+ const opencodeLogCheckpoint = await captureOpencodeLogCheckpoint(opencodeDataHome.dataHome);
1167
+ const opencodeWorkspaceStateDir = path2.join(workingDir, ".opencode");
1168
+ const opencodeRuntimeWritePaths = [
1169
+ opencodeCacheHome.cacheHome,
1170
+ opencodeConfigHome.configHome,
1171
+ opencodeDataHome.dataHome,
1172
+ opencodeStateHome.stateHome,
1173
+ opencodeWorkspaceStateDir
1174
+ ];
1175
+ requireActivePolicyBoundary(
1176
+ "OpenCode",
1177
+ "OpenCode automation bypass (OPENCODE_PERMISSION allow-all)",
1178
+ "opencode",
1179
+ { env: childEnv }
1180
+ );
1181
+ if (effectiveModel?.toLowerCase().startsWith("openrouter/") && !await hasOpenrouterCredential(childEnv, opencodeDataHome.dataHome)) {
1182
+ const stderr = "OpenCode OpenRouter credentials missing. Set OPENROUTER_API_KEY or run `opencode auth login` before using OpenRouter models.";
1183
+ return {
1184
+ stdout: "",
1185
+ stderr,
1186
+ exitCode: 1,
1187
+ commandPath: command,
1188
+ argvRedacted: redactProviderArgv([...prefixArgs, "run"]),
1189
+ stdoutTail: "",
1190
+ stderrTail: providerOutputTail(stderr),
1191
+ workspaceMode: options.workspaceMode ?? options.promptMode,
1192
+ workspaceModeRequested: options.workspaceMode ?? options.promptMode,
1193
+ promptMode: options.workspaceMode ?? options.promptMode,
1194
+ promptModeRequested: options.workspaceMode ?? options.promptMode
1195
+ };
1196
+ }
1197
+ const args = [...prefixArgs, "run"];
1198
+ if (capabilities.supportsPure) {
1199
+ args.push("--pure");
1200
+ }
1201
+ if (capabilities.supportsDir) {
1202
+ args.push("--dir", workingDir);
1203
+ }
1204
+ if (steeringAgentName) {
1205
+ args.push("--agent", steeringAgentName);
1206
+ }
1207
+ if (capabilities.supportsFormatJson) {
1208
+ args.push("--format", "json");
1209
+ }
1210
+ if (capabilities.supportsTitle) {
1211
+ args.push("--title", `Poetic (${metadata.id}) - ${path2.basename(workingDir)}`);
1212
+ }
1213
+ if (capabilities.supportsDangerouslySkipPermissions) {
1214
+ args.push("--dangerously-skip-permissions");
1215
+ }
1216
+ if (effectiveModel && effectiveModel !== "auto") {
1217
+ args.push("--model", effectiveModel);
1218
+ }
1219
+ if (effectiveVariant) {
1220
+ if (capabilities.supportsVariant) {
1221
+ args.push("--variant", effectiveVariant);
1222
+ } else if (isDebugMode()) {
1223
+ const warning = `[OpenCode] Variant "${effectiveVariant}" requested but this CLI version does not support --variant.`;
1224
+ capabilityWarnings.push(warning);
1225
+ debugLog(warning);
1226
+ } else {
1227
+ capabilityWarnings.push(
1228
+ `[OpenCode] Variant "${effectiveVariant}" requested but this CLI version does not support --variant.`
1229
+ );
1230
+ }
1231
+ }
1232
+ if (attachedFiles.length > 0) {
1233
+ if (capabilities.supportsFile) {
1234
+ for (const filePath of attachedFiles) {
1235
+ args.push("--file", filePath);
1236
+ }
1237
+ } else if (isDebugMode()) {
1238
+ debugLog(
1239
+ `[OpenCode] ${attachedFiles.length} attachment(s) were provided but this CLI version does not support --file.`
1240
+ );
1241
+ }
1242
+ }
1243
+ if (capabilities.supportsFile) {
1244
+ const promptAttachment = await writePromptAttachment(adaptedPrompt);
1245
+ promptAttachmentCleanup = promptAttachment.cleanup;
1246
+ args.push("--file", promptAttachment.filePath);
1247
+ args.push("--");
1248
+ args.push("Read the attached prompt file and complete the task exactly as specified.");
1249
+ } else {
1250
+ args.push("--");
1251
+ args.push(adaptedPrompt);
1252
+ }
1253
+ const fastRetry = process.env.NODE_ENV === "test" || process.env.VITEST === "true" || readEnv(POETIC_TEST_FAST_RETRY).value;
1254
+ const callerRetryBudget = options.retryBudget;
1255
+ const retryBudget = callerRetryBudget ?? new RetryBudget({ maxTotalAttempts: 3 });
1256
+ const callerConstrainedToOneAttempt = callerRetryBudget !== void 0 && callerRetryBudget.remaining <= 1;
1257
+ const maxAttempts = callerConstrainedToOneAttempt ? 1 : 3;
1258
+ const outerRetryBudget = callerConstrainedToOneAttempt ? void 0 : retryBudget;
1259
+ const bootstrapRetryBudget = callerConstrainedToOneAttempt ? callerRetryBudget : void 0;
1260
+ const bootstrapMaxAttempts = callerConstrainedToOneAttempt ? 1 : 3;
1261
+ const invocationTimeRequestSentMs = Date.now();
1262
+ let invocationTimeFirstTokenMs = null;
1263
+ const opencodeLivenessStartedAtMs = invocationTimeRequestSentMs;
1264
+ const opencodeLivenessPhasesMs = {
1265
+ // Anchor phase for downstream relative timings; not a measured launch duration.
1266
+ cliLaunch: 0
1267
+ };
1268
+ const argvRedacted = redactProviderArgv(args, { promptValues: [adaptedPrompt] });
1269
+ let retryResult;
1270
+ try {
1271
+ retryResult = await executeWithResilience(
1272
+ async () => {
1273
+ const bootstrapAttemptStartState = await captureRetryWorktreeState(workingDir);
1274
+ const attemptStartState = await captureWorkspaceRetryState(workingDir);
1275
+ try {
1276
+ return await executeOpencodeCommandWithBootstrapRetry({
1277
+ command,
1278
+ args,
1279
+ workingDir,
1280
+ // Fall back to a sanitized inherited env when the caller did not
1281
+ // supply one, so PATH/HOME/auth-related vars reach the subprocess.
1282
+ env: childEnv,
1283
+ timeout: resolveOpencodeAttemptTimeoutMs(timeout, options.deadlineMs),
1284
+ deadlineMs: options.deadlineMs,
1285
+ extraWritePaths: opencodeRuntimeWritePaths,
1286
+ readOnlyWorkingDir: options.readOnlyWorkingDir,
1287
+ // OPENCODE_PERMISSION disables the provider's tool-approval layer
1288
+ // even when capability discovery omits the equivalent argv flag.
1289
+ // Carry that fact to the final post-wrap proof-pair guard.
1290
+ providerInternalSandboxBypass: "OPENCODE_PERMISSION allow-all",
1291
+ executionIntent: options.executionIntent,
1292
+ executionTransport: options.executionTransport,
1293
+ idleWarnMs: resolveOpencodeIdleTimeout(
1294
+ options.idleWarnMs,
1295
+ runtimeQuirks?.idleDefaults?.idleWarnMs,
1296
+ options.allowIdleTimeoutAboveProviderDefault
1297
+ ),
1298
+ idleKillMs: resolveOpencodeIdleTimeout(
1299
+ options.idleKillMs,
1300
+ runtimeQuirks?.idleDefaults?.idleKillMs,
1301
+ options.allowIdleTimeoutAboveProviderDefault
1302
+ ),
1303
+ onData,
1304
+ onErrorData,
1305
+ onStdoutChunk: options.onStdoutChunk,
1306
+ onStderrChunk: options.onStderrChunk,
1307
+ onActivity: options.onActivity,
1308
+ onFirstOutput: () => {
1309
+ if (!invocationTimeFirstTokenMs) {
1310
+ invocationTimeFirstTokenMs = Date.now();
1311
+ opencodeLivenessPhasesMs.firstOutput = invocationTimeFirstTokenMs - opencodeLivenessStartedAtMs;
1312
+ }
1313
+ },
1314
+ abortSignal,
1315
+ operation: "run",
1316
+ // Thread caller budgets into bootstrap so BunInstall recovery cannot
1317
+ // outrun the invoke one-attempt contract. Omitted for ordinary runs.
1318
+ ...bootstrapRetryBudget ? { retryBudget: bootstrapRetryBudget } : {},
1319
+ maxAttempts: bootstrapMaxAttempts,
1320
+ beforeRetryAttempt: (error) => rejectUnsafeFullPromptRetry({
1321
+ workingDir,
1322
+ attemptStartState: bootstrapAttemptStartState,
1323
+ error,
1324
+ providerName: metadata.id,
1325
+ requireCleanState: true
1326
+ }),
1327
+ metadata: {
1328
+ id: metadata.id,
1329
+ name: metadata.name,
1330
+ installCommand: metadata.installCommand,
1331
+ authHint: metadata.authHint,
1332
+ docsPath: metadata.docsPath,
1333
+ docsAnchor: metadata.docsAnchor
1334
+ }
1335
+ });
1336
+ } catch (error) {
1337
+ await assertWorkspaceRetryIsSafe({
1338
+ providerId: metadata.id,
1339
+ providerName: metadata.name,
1340
+ workingDir,
1341
+ attemptStartState,
1342
+ originalError: error,
1343
+ retryable: parseOpencodeError(error, {
1344
+ requestedModel: effectiveModel ?? model,
1345
+ cliVersion: capabilities.cliVersion,
1346
+ inventoryModelIds: getCachedOpencodeModelIds(),
1347
+ inventoryAgeMs: getOpencodeModelsCacheInfo().ageMs
1348
+ }).retryable
1349
+ });
1350
+ throw error;
1351
+ }
1352
+ },
1353
+ {
1354
+ providerName: metadata.id,
1355
+ providerId: metadata.id,
1356
+ operation: "run",
1357
+ maxAttempts,
1358
+ abortSignal,
1359
+ fastRetryMode: fastRetry,
1360
+ retryBudget: outerRetryBudget,
1361
+ errorParser: (error) => parseOpencodeError(error, {
1362
+ requestedModel: effectiveModel ?? model,
1363
+ cliVersion: capabilities.cliVersion,
1364
+ inventoryModelIds: getCachedOpencodeModelIds(),
1365
+ inventoryAgeMs: getOpencodeModelsCacheInfo().ageMs
1366
+ }),
1367
+ circuitBreakerOptions: OPENCODE_CIRCUIT_BREAKER_OPTIONS,
1368
+ circuitBreakerScope: options.circuitBreakerScope,
1369
+ deadlineMs: options.deadlineMs ?? Date.now() + timeout,
1370
+ minimumAttemptTimeMs: Math.min(timeout, 3e4),
1371
+ retryWorktreeDir: workingDir
1372
+ }
1373
+ );
1374
+ } catch (error) {
1375
+ const exitCode = typeof error?.exitCode === "number" ? error.exitCode ?? null : null;
1376
+ const stdout = typeof error?.stdout === "string" ? error.stdout : void 0;
1377
+ const stderr = typeof error?.stderr === "string" ? error.stderr : void 0;
1378
+ const logErrors = await readOpencodeLogErrorsSince(opencodeLogCheckpoint);
1379
+ const partialFilesModified = await detectGitChangedFiles(workingDir, {
1380
+ baselineHead,
1381
+ baselineStatusPaths
1382
+ }).catch(() => void 0);
1383
+ attachOpencodeInvocationDiagnostics(error, {
1384
+ commandPath: command,
1385
+ argvRedacted,
1386
+ stdout,
1387
+ stderr,
1388
+ ...logErrors.length > 0 ? {
1389
+ providerDiagnostics: {
1390
+ transportErrors: logErrors,
1391
+ stderrSeverity: "error"
1392
+ }
1393
+ } : {},
1394
+ ...partialFilesModified?.length ? { filesModified: partialFilesModified } : {}
1395
+ });
1396
+ await recordInvocationTiming({
1397
+ providerId: metadata.id,
1398
+ modelId: model ?? "auto",
1399
+ timeRequestSentMs: invocationTimeRequestSentMs,
1400
+ timeFirstTokenMs: invocationTimeFirstTokenMs,
1401
+ timeLastTokenMs: Date.now(),
1402
+ status: "error",
1403
+ errorCode: exitCode !== null ? `EXIT_${exitCode}` : "UNKNOWN",
1404
+ env
1405
+ });
1406
+ const errMsg = error instanceof Error ? error.message : String(error);
1407
+ const isHardFailure = errMsg.includes("auth") || errMsg.includes("unauthorized") || errMsg.includes("not_found") || errMsg.includes("aborted");
1408
+ recordProviderRunFailure("opencode", {
1409
+ severity: isHardFailure ? "hard" : "normal",
1410
+ phase: inferProviderFailurePhase({
1411
+ error,
1412
+ exitCode
1413
+ })
1414
+ });
1415
+ throw error;
1416
+ }
1417
+ const result = retryResult.result;
1418
+ const {
1419
+ text: parsedText,
1420
+ tokenUsage,
1421
+ totalCostUsd,
1422
+ resolvedModel,
1423
+ agentUsed,
1424
+ subAgentInvocations,
1425
+ subAgentTypes,
1426
+ structuredEventCount,
1427
+ errorEvents
1428
+ } = parseOpencodeProviderOutput(result.stdout, result.stderr);
1429
+ const opencodeSession = await resolveOpencodeSessionFromDb(
1430
+ workingDir,
1431
+ opencodeDataHome.dataHome
1432
+ );
1433
+ const effectiveResolvedModel = resolvedModel ?? opencodeSession.resolvedModel;
1434
+ const opencodeLogErrors = await readOpencodeLogErrorsSince(opencodeLogCheckpoint);
1435
+ let filesModified;
1436
+ try {
1437
+ filesModified = await detectGitChangedFiles(workingDir, {
1438
+ baselineHead,
1439
+ baselineStatusPaths
1440
+ });
1441
+ } catch {
1442
+ }
1443
+ const rawStdoutNonEmpty = result.stdout.trim().length > 0;
1444
+ const usefulRawOutput = extractUsefulOpencodeRawOutput(result.stdout, result.stderr);
1445
+ const reportedToolFailure = hasOpencodeReportedToolFailure(usefulRawOutput);
1446
+ const reportedProviderError = (errorEvents?.length ?? 0) > 0;
1447
+ const reportedContextLengthExhaustion = errorEvents?.some((event) => event.errorType === "length") === true;
1448
+ const hasMeaningfulDelivery = parsedText.trim().length > 0 || (filesModified?.length ?? 0) > 0;
1449
+ if (hasMeaningfulDelivery && opencodeLivenessPhasesMs.firstUsefulAction === void 0) {
1450
+ opencodeLivenessPhasesMs.firstUsefulAction = Date.now() - opencodeLivenessStartedAtMs;
1451
+ }
1452
+ const noContentSuccess = result.exitCode === 0 && parsedText.trim().length === 0 && usefulRawOutput.length === 0 && (filesModified?.length ?? 0) === 0;
1453
+ const effectiveExitCode = noContentSuccess || reportedToolFailure || reportedContextLengthExhaustion || reportedProviderError && !hasMeaningfulDelivery ? 1 : result.exitCode;
1454
+ const emptySuccessMessage = "OpenCode exited 0 but produced no assistant output and no file changes.";
1455
+ const reportedToolFailureMessage = "OpenCode exited 0 but reported a failed internal tool operation.";
1456
+ const reportedProviderErrorMessage = reportedProviderError ? summarizeOpencodeErrorEvents(errorEvents ?? []) : void 0;
1457
+ await recordInvocationTiming({
1458
+ providerId: metadata.id,
1459
+ modelId: effectiveResolvedModel ?? model ?? "auto",
1460
+ timeRequestSentMs: invocationTimeRequestSentMs,
1461
+ timeFirstTokenMs: invocationTimeFirstTokenMs,
1462
+ timeLastTokenMs: Date.now(),
1463
+ tokensIn: tokenUsage?.inputTokens,
1464
+ tokensOut: tokenUsage?.outputTokens,
1465
+ status: effectiveExitCode === 0 ? "success" : "error",
1466
+ errorCode: effectiveExitCode !== 0 ? `EXIT_${effectiveExitCode}` : null,
1467
+ env
1468
+ });
1469
+ if (effectiveExitCode !== 0 && rawStdoutNonEmpty && structuredEventCount === 0 && (filesModified?.length ?? 0) === 0) {
1470
+ reportOutputDrift({
1471
+ provider: "opencode",
1472
+ severity: "parse_fallback",
1473
+ field: "jsonlParse",
1474
+ detail: "stdout was non-empty but JSONL extraction produced no events and no edits",
1475
+ outputShapeTag: "no-jsonl-events-no-edits"
1476
+ });
1477
+ }
1478
+ if (effectiveExitCode === 0) {
1479
+ recordProviderRunSuccess("opencode");
1480
+ } else {
1481
+ recordProviderRunFailure("opencode", {
1482
+ severity: "normal",
1483
+ phase: inferProviderFailurePhase({
1484
+ exitCode: effectiveExitCode,
1485
+ stderr: result.stderr,
1486
+ stdout: result.stdout,
1487
+ filesModifiedCount: filesModified?.length ?? 0,
1488
+ producedOutput: Boolean((parsedText || usefulRawOutput).trim().length)
1489
+ })
1490
+ });
1491
+ }
1492
+ const appliedWorkspaceMode = adaptation.promptMode;
1493
+ opencodeLivenessPhasesMs.finalResponse = Date.now() - opencodeLivenessStartedAtMs;
1494
+ const baseStderr = noContentSuccess || reportedToolFailure || reportedProviderError ? [
1495
+ result.stderr.trim(),
1496
+ noContentSuccess ? emptySuccessMessage : void 0,
1497
+ reportedToolFailure ? reportedToolFailureMessage : void 0,
1498
+ reportedProviderErrorMessage
1499
+ ].filter(Boolean).join("\n") : result.stderr;
1500
+ const finalStderr = [capabilityWarnings.join("\n"), baseStderr.trim()].filter(Boolean).join("\n");
1501
+ const finalResult = {
1502
+ stdout: parsedText || usefulRawOutput || result.stdout,
1503
+ stderr: finalStderr,
1504
+ exitCode: effectiveExitCode,
1505
+ commandPath: command,
1506
+ argvRedacted,
1507
+ stdoutTail: providerOutputTail(result.stdout),
1508
+ stderrTail: providerOutputTail(finalStderr),
1509
+ providerDiagnostics: {
1510
+ finalAnswerPresent: Boolean(parsedText.trim().length || usefulRawOutput.trim().length),
1511
+ ...reportedToolFailure ? { toolErrors: [reportedToolFailureMessage] } : {},
1512
+ ...reportedProviderError && reportedProviderErrorMessage ? { transportErrors: [reportedProviderErrorMessage] } : opencodeLogErrors.length > 0 && effectiveExitCode !== 0 ? { transportErrors: opencodeLogErrors } : {},
1513
+ ...opencodeLogErrors.length > 0 && effectiveExitCode === 0 ? { retryErrors: opencodeLogErrors } : {},
1514
+ stderrSeverity: reportedToolFailure || reportedProviderError || noContentSuccess ? "error" : capabilityWarnings.length > 0 || opencodeLogErrors.length > 0 ? "warning" : "none"
1515
+ },
1516
+ providerLivenessPhasesMs: opencodeLivenessPhasesMs,
1517
+ ...capabilities.cliVersion ? { providerCliVersion: capabilities.cliVersion } : {},
1518
+ sessionId: opencodeSession.sessionId,
1519
+ workspaceMode: appliedWorkspaceMode,
1520
+ workspaceModeRequested: requestedWorkspaceMode,
1521
+ // Backwards compatibility
1522
+ promptMode: appliedWorkspaceMode,
1523
+ promptModeRequested: requestedWorkspaceMode,
1524
+ completionSignalVariant: adaptation.completionSignalVariant,
1525
+ tokenUsage,
1526
+ totalCostUsd,
1527
+ filesModified,
1528
+ // Actual model chosen by OpenCode at runtime (only set when extracted from JSONL
1529
+ // output). When model='auto', the CLI selects its own default and this captures
1530
+ // what it actually used, allowing downstream telemetry to record the real model
1531
+ // instead of the placeholder 'auto'.
1532
+ ...effectiveResolvedModel ? { resolvedModel: effectiveResolvedModel } : {},
1533
+ agentUsed,
1534
+ subAgentInvocations,
1535
+ subAgentTypes
1536
+ };
1537
+ return finalResult;
1538
+ } catch (error) {
1539
+ runError = error;
1540
+ throw error;
1541
+ } finally {
1542
+ const cleanupResults = await Promise.allSettled([
1543
+ promptAttachmentCleanup?.(),
1544
+ opencodeDataHome?.cleanup?.(),
1545
+ opencodeStateHome?.cleanup?.(),
1546
+ opencodeConfigHome?.cleanup?.(),
1547
+ opencodeCacheHome?.cleanup?.()
1548
+ ]);
1549
+ const cleanupErrors = cleanupResults.filter((result) => result.status === "rejected").map((result) => result.reason);
1550
+ const residueErrors = cleanupErrors.filter(
1551
+ (error) => error instanceof CredentialResidueError
1552
+ );
1553
+ if (residueErrors.length > 0) {
1554
+ throw aggregateCredentialResidueErrors(residueErrors, {
1555
+ ownership: "run-owned",
1556
+ role: "opencode-runtime-cleanup",
1557
+ ...runError !== void 0 ? { primaryError: runError } : {}
1558
+ });
1559
+ }
1560
+ if (cleanupErrors.length > 0) {
1561
+ const cleanupError = cleanupErrors[0];
1562
+ throw cleanupError;
1563
+ }
1564
+ }
1565
+ }
1566
+ export {
1567
+ runOpencodeNative,
1568
+ seedOpencodeCredentials,
1569
+ seedOpencodeUserConfig
1570
+ };
1571
+ //# sourceMappingURL=runner-HHH7ZN2Z.js.map