@skaile/workspaces 5.18.1 → 6.0.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 (746) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +8 -8
  3. package/dist/app-sdk/index.js +1 -1
  4. package/dist/{asset-feeds-MKB5JUML.js → asset-feeds-PXUWCXVI.js} +21 -21
  5. package/dist/{asset-feeds-MKB5JUML.js.map → asset-feeds-PXUWCXVI.js.map} +1 -1
  6. package/dist/asset-manager/catalog-deployer.js +10 -10
  7. package/dist/asset-manager/index.js +17 -17
  8. package/dist/asset-manager/installer.js +13 -13
  9. package/dist/asset-manager/renderers.js +12 -12
  10. package/dist/asset-manager/src/index.d.ts +113 -24
  11. package/dist/asset-manager/src/index.d.ts.map +1 -1
  12. package/dist/asset-manager/src/install-agent.d.ts +2 -2
  13. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  14. package/dist/asset-manager/src/install-instances.d.ts +8 -8
  15. package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
  16. package/dist/asset-manager/src/installer.d.ts +3 -3
  17. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  18. package/dist/asset-manager/src/mcp-config.d.ts +39 -13
  19. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  20. package/dist/asset-manager/src/renderers.d.ts +12 -12
  21. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  22. package/dist/bridge/codex-app-server.js +2 -2
  23. package/dist/bridge/harnesses/claude-sdk.d.ts +2 -0
  24. package/dist/bridge/{drivers → harnesses}/claude-sdk.js +75 -73
  25. package/dist/bridge/harnesses/claude-sdk.js.map +1 -0
  26. package/dist/bridge/{drivers/gemini.d.ts → harnesses/codex.d.ts} +1 -1
  27. package/dist/bridge/{drivers → harnesses}/codex.js +52 -52
  28. package/dist/bridge/harnesses/codex.js.map +1 -0
  29. package/dist/bridge/{drivers/claude-sdk.d.ts → harnesses/continue.d.ts} +1 -1
  30. package/dist/bridge/{drivers → harnesses}/continue.js +29 -29
  31. package/dist/bridge/harnesses/continue.js.map +1 -0
  32. package/dist/bridge/{drivers → harnesses}/echo.d.ts +1 -1
  33. package/dist/bridge/{drivers → harnesses}/echo.js +27 -27
  34. package/dist/bridge/harnesses/echo.js.map +1 -0
  35. package/dist/bridge/{drivers/continue.d.ts → harnesses/gemini.d.ts} +1 -1
  36. package/dist/bridge/harnesses/gemini.js +18 -0
  37. package/dist/bridge/{drivers → harnesses}/goose.d.ts +1 -1
  38. package/dist/bridge/{drivers → harnesses}/goose.js +29 -29
  39. package/dist/bridge/harnesses/goose.js.map +1 -0
  40. package/dist/bridge/{drivers → harnesses}/omp.d.ts +1 -1
  41. package/dist/bridge/{drivers → harnesses}/omp.js +43 -485
  42. package/dist/bridge/harnesses/omp.js.map +1 -0
  43. package/dist/bridge/{drivers → harnesses}/opencode.d.ts +1 -1
  44. package/dist/bridge/{drivers → harnesses}/opencode.js +30 -30
  45. package/dist/bridge/harnesses/opencode.js.map +1 -0
  46. package/dist/bridge/{drivers → harnesses}/qwen.d.ts +1 -1
  47. package/dist/bridge/{drivers → harnesses}/qwen.js +20 -20
  48. package/dist/bridge/harnesses/qwen.js.map +1 -0
  49. package/dist/bridge/index.js +24 -22
  50. package/dist/bridge/src/agent-exec.d.ts +2 -2
  51. package/dist/bridge/src/agent-transcript.d.ts +1 -1
  52. package/dist/bridge/src/agent-transcript.d.ts.map +1 -1
  53. package/dist/bridge/src/approval-card.d.ts +3 -3
  54. package/dist/bridge/src/capability-dispatch.d.ts +5 -5
  55. package/dist/bridge/src/cloud.d.ts +4 -4
  56. package/dist/bridge/src/codex/config-toml.d.ts +3 -3
  57. package/dist/bridge/src/codex/friendly-error.d.ts +1 -1
  58. package/dist/bridge/src/codex/friendly-error.d.ts.map +1 -1
  59. package/dist/bridge/src/codex/{managed-driver.d.ts → managed-harness.d.ts} +5 -5
  60. package/dist/bridge/src/codex/managed-harness.d.ts.map +1 -0
  61. package/dist/bridge/src/codex/native-approvals.d.ts +1 -1
  62. package/dist/bridge/src/codex/native-approvals.d.ts.map +1 -1
  63. package/dist/bridge/src/error-classifier.d.ts +7 -7
  64. package/dist/bridge/src/{driver-capabilities.d.ts → harness-capabilities.d.ts} +18 -18
  65. package/dist/bridge/src/harness-capabilities.d.ts.map +1 -0
  66. package/dist/bridge/src/harness-model-check.d.ts +25 -0
  67. package/dist/bridge/src/harness-model-check.d.ts.map +1 -0
  68. package/dist/bridge/src/{drivers → harnesses}/_subprocess-cli.d.ts +8 -8
  69. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -0
  70. package/dist/bridge/src/{drivers → harnesses}/claude-context-usage.d.ts +5 -5
  71. package/dist/bridge/src/harnesses/claude-context-usage.d.ts.map +1 -0
  72. package/dist/bridge/src/{drivers → harnesses}/claude-sdk.d.ts +27 -27
  73. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -0
  74. package/dist/bridge/src/{drivers → harnesses}/claude-self-turns.d.ts +5 -5
  75. package/dist/bridge/src/harnesses/claude-self-turns.d.ts.map +1 -0
  76. package/dist/bridge/src/{drivers → harnesses}/claude-tool-allowlist.d.ts +4 -4
  77. package/dist/bridge/src/harnesses/claude-tool-allowlist.d.ts.map +1 -0
  78. package/dist/bridge/src/{drivers → harnesses}/codex.d.ts +14 -14
  79. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -0
  80. package/dist/bridge/src/{drivers → harnesses}/continue.d.ts +12 -12
  81. package/dist/bridge/src/harnesses/continue.d.ts.map +1 -0
  82. package/dist/bridge/src/{drivers → harnesses}/echo.d.ts +16 -16
  83. package/dist/bridge/src/harnesses/echo.d.ts.map +1 -0
  84. package/dist/bridge/src/{drivers → harnesses}/flow-script.d.ts +9 -9
  85. package/dist/bridge/src/harnesses/flow-script.d.ts.map +1 -0
  86. package/dist/bridge/src/{drivers → harnesses}/gemini.d.ts +15 -15
  87. package/dist/bridge/src/harnesses/gemini.d.ts.map +1 -0
  88. package/dist/bridge/src/{drivers → harnesses}/goose.d.ts +10 -10
  89. package/dist/bridge/src/harnesses/goose.d.ts.map +1 -0
  90. package/dist/bridge/src/{drivers → harnesses}/omp-models-yml.d.ts +23 -12
  91. package/dist/bridge/src/harnesses/omp-models-yml.d.ts.map +1 -0
  92. package/dist/bridge/src/{drivers → harnesses}/omp.d.ts +23 -23
  93. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -0
  94. package/dist/bridge/src/{drivers → harnesses}/opencode.d.ts +11 -11
  95. package/dist/bridge/src/harnesses/opencode.d.ts.map +1 -0
  96. package/dist/bridge/src/{drivers → harnesses}/qwen.d.ts +12 -12
  97. package/dist/bridge/src/harnesses/qwen.d.ts.map +1 -0
  98. package/dist/bridge/src/{drivers → harnesses}/recovery-policy.d.ts +4 -4
  99. package/dist/bridge/src/harnesses/recovery-policy.d.ts.map +1 -0
  100. package/dist/bridge/src/{drivers → harnesses}/resume-probe.d.ts +3 -3
  101. package/dist/bridge/src/harnesses/resume-probe.d.ts.map +1 -0
  102. package/dist/bridge/src/{drivers → harnesses}/sanitize-assistant-text.d.ts +1 -1
  103. package/dist/bridge/src/harnesses/sanitize-assistant-text.d.ts.map +1 -0
  104. package/dist/bridge/src/{drivers → harnesses}/scrub-transcript.d.ts +1 -1
  105. package/dist/bridge/src/harnesses/scrub-transcript.d.ts.map +1 -0
  106. package/dist/bridge/src/index.d.ts +4 -4
  107. package/dist/bridge/src/index.d.ts.map +1 -1
  108. package/dist/bridge/src/logger.d.ts +4 -4
  109. package/dist/bridge/src/models.d.ts +1 -1
  110. package/dist/bridge/src/normalizer.d.ts +2 -2
  111. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +5 -5
  112. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
  113. package/dist/bridge/src/provider-materialize/credential-env.d.ts +3 -3
  114. package/dist/bridge/src/provider-materialize/{env-drivers.d.ts → env-harnesses.d.ts} +19 -19
  115. package/dist/bridge/src/provider-materialize/env-harnesses.d.ts.map +1 -0
  116. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +5 -5
  117. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts.map +1 -1
  118. package/dist/bridge/src/provider-materialize/opencode-config.d.ts +7 -7
  119. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
  120. package/dist/bridge/src/provider-materialize/session-config-home.d.ts +5 -5
  121. package/dist/bridge/src/provider-materialize/session-config-home.d.ts.map +1 -1
  122. package/dist/bridge/src/provider-registry-derive.d.ts +4 -4
  123. package/dist/bridge/src/provider-registry-derive.d.ts.map +1 -1
  124. package/dist/bridge/src/reconfigure-ledger.d.ts +8 -8
  125. package/dist/bridge/src/reconfigure-ledger.d.ts.map +1 -1
  126. package/dist/bridge/src/registry.d.ts +34 -41
  127. package/dist/bridge/src/registry.d.ts.map +1 -1
  128. package/dist/bridge/src/runner-private-env.d.ts +2 -2
  129. package/dist/bridge/src/runtime.d.ts +11 -11
  130. package/dist/bridge/src/runtime.d.ts.map +1 -1
  131. package/dist/bridge/src/types.d.ts +158 -158
  132. package/dist/bridge/src/types.d.ts.map +1 -1
  133. package/dist/{chunk-CKBCX3HQ.js → chunk-2UUKCROR.js} +4 -4
  134. package/dist/{chunk-CKBCX3HQ.js.map → chunk-2UUKCROR.js.map} +1 -1
  135. package/dist/{chunk-7ANRSTNR.js → chunk-3IXIEHUB.js} +36 -17
  136. package/dist/chunk-3IXIEHUB.js.map +1 -0
  137. package/dist/{chunk-YZ3N7IUU.js → chunk-3JKGY2YC.js} +91 -55
  138. package/dist/chunk-3JKGY2YC.js.map +1 -0
  139. package/dist/{chunk-X5YPJV4N.js → chunk-3MWQKQUB.js} +2 -2
  140. package/dist/{chunk-X5YPJV4N.js.map → chunk-3MWQKQUB.js.map} +1 -1
  141. package/dist/{chunk-EPBKISS5.js → chunk-3TG2NV2F.js} +2 -2
  142. package/dist/chunk-3TG2NV2F.js.map +1 -0
  143. package/dist/{chunk-L2AMXONH.js → chunk-3X7VTCPG.js} +2 -2
  144. package/dist/chunk-3X7VTCPG.js.map +1 -0
  145. package/dist/{chunk-3KMREAR2.js → chunk-4DWBSTYA.js} +24 -24
  146. package/dist/chunk-4DWBSTYA.js.map +1 -0
  147. package/dist/{chunk-YARXR3CN.js → chunk-4XWLB7JB.js} +52 -46
  148. package/dist/chunk-4XWLB7JB.js.map +1 -0
  149. package/dist/{chunk-5TBFN46Z.js → chunk-5KRMNUL4.js} +4 -4
  150. package/dist/chunk-5KRMNUL4.js.map +1 -0
  151. package/dist/{chunk-YIF2IJUA.js → chunk-6GWSDPBP.js} +3 -3
  152. package/dist/{chunk-YIF2IJUA.js.map → chunk-6GWSDPBP.js.map} +1 -1
  153. package/dist/{chunk-BBWSGVVE.js → chunk-7CV3HFWJ.js} +5 -5
  154. package/dist/chunk-7CV3HFWJ.js.map +1 -0
  155. package/dist/{chunk-YROR332M.js → chunk-7DN6JKP2.js} +2 -2
  156. package/dist/chunk-7DN6JKP2.js.map +1 -0
  157. package/dist/{chunk-IZCR27MU.js → chunk-7EKQDY2T.js} +3 -3
  158. package/dist/chunk-7EKQDY2T.js.map +1 -0
  159. package/dist/{chunk-VOBXINUZ.js → chunk-7TPYPVAH.js} +4 -4
  160. package/dist/{chunk-VOBXINUZ.js.map → chunk-7TPYPVAH.js.map} +1 -1
  161. package/dist/{chunk-U2FI547Z.js → chunk-7XSAW5OC.js} +3 -3
  162. package/dist/{chunk-U2FI547Z.js.map → chunk-7XSAW5OC.js.map} +1 -1
  163. package/dist/{chunk-ICSCSM5D.js → chunk-ADPM6AYF.js} +3 -3
  164. package/dist/{chunk-ICSCSM5D.js.map → chunk-ADPM6AYF.js.map} +1 -1
  165. package/dist/{chunk-LW7ZI6EQ.js → chunk-AF432MS3.js} +3 -3
  166. package/dist/chunk-AF432MS3.js.map +1 -0
  167. package/dist/{chunk-WJLYL6RY.js → chunk-ARWKK325.js} +5 -5
  168. package/dist/{chunk-WJLYL6RY.js.map → chunk-ARWKK325.js.map} +1 -1
  169. package/dist/{chunk-AJ7EGIFR.js → chunk-BIRW3HOG.js} +3 -3
  170. package/dist/chunk-BIRW3HOG.js.map +1 -0
  171. package/dist/{chunk-X3AUS4RW.js → chunk-DHYSUJ3H.js} +4 -4
  172. package/dist/{chunk-X3AUS4RW.js.map → chunk-DHYSUJ3H.js.map} +1 -1
  173. package/dist/{chunk-SRNCN4X2.js → chunk-DUMTLYSO.js} +10 -10
  174. package/dist/chunk-DUMTLYSO.js.map +1 -0
  175. package/dist/{chunk-GOK4QRJR.js → chunk-E3GPGTW3.js} +8 -8
  176. package/dist/chunk-E3GPGTW3.js.map +1 -0
  177. package/dist/{chunk-CKNIYIV2.js → chunk-E572OHGY.js} +5 -5
  178. package/dist/chunk-E572OHGY.js.map +1 -0
  179. package/dist/{chunk-KY4UXX7M.js → chunk-F2GOZMRA.js} +63 -64
  180. package/dist/chunk-F2GOZMRA.js.map +1 -0
  181. package/dist/{chunk-6E6PKKAD.js → chunk-G5SUWZEU.js} +18 -8
  182. package/dist/chunk-G5SUWZEU.js.map +1 -0
  183. package/dist/{chunk-7FHZB2QU.js → chunk-GEQSUC6U.js} +12 -12
  184. package/dist/chunk-GEQSUC6U.js.map +1 -0
  185. package/dist/{chunk-AIBAOXDU.js → chunk-GN4VVSAA.js} +18 -18
  186. package/dist/chunk-GN4VVSAA.js.map +1 -0
  187. package/dist/{chunk-XTO436PV.js → chunk-HK7HMEPT.js} +13 -13
  188. package/dist/chunk-HK7HMEPT.js.map +1 -0
  189. package/dist/{chunk-Y56YIT6J.js → chunk-JCPD4QRM.js} +4 -4
  190. package/dist/chunk-JCPD4QRM.js.map +1 -0
  191. package/dist/{chunk-GBYNC5V3.js → chunk-JDR6ILCW.js} +4 -4
  192. package/dist/chunk-JDR6ILCW.js.map +1 -0
  193. package/dist/{chunk-K4O6L3WH.js → chunk-KNY356I3.js} +3 -3
  194. package/dist/{chunk-K4O6L3WH.js.map → chunk-KNY356I3.js.map} +1 -1
  195. package/dist/{chunk-4ZTPYIBE.js → chunk-KW37WNXY.js} +12 -12
  196. package/dist/chunk-KW37WNXY.js.map +1 -0
  197. package/dist/{chunk-BO426QWN.js → chunk-KX2PT5Q4.js} +8 -8
  198. package/dist/chunk-KX2PT5Q4.js.map +1 -0
  199. package/dist/{chunk-T2TQAH2X.js → chunk-L4YKW5AY.js} +105 -38
  200. package/dist/chunk-L4YKW5AY.js.map +1 -0
  201. package/dist/{chunk-WJCQFNF6.js → chunk-LN6QB7XI.js} +3 -3
  202. package/dist/{chunk-WJCQFNF6.js.map → chunk-LN6QB7XI.js.map} +1 -1
  203. package/dist/{chunk-MJHSLODD.js → chunk-LSI2IVFT.js} +2 -2
  204. package/dist/chunk-LSI2IVFT.js.map +1 -0
  205. package/dist/{chunk-2ABUJYVI.js → chunk-MCUJTNY5.js} +3 -3
  206. package/dist/{chunk-2ABUJYVI.js.map → chunk-MCUJTNY5.js.map} +1 -1
  207. package/dist/{chunk-A2ULN3KX.js → chunk-MWXYN6NY.js} +2 -2
  208. package/dist/{chunk-A2ULN3KX.js.map → chunk-MWXYN6NY.js.map} +1 -1
  209. package/dist/{chunk-EAZECHPM.js → chunk-NBAGV6L2.js} +5 -5
  210. package/dist/chunk-NBAGV6L2.js.map +1 -0
  211. package/dist/{chunk-U7V5SIFW.js → chunk-NMI2TWMH.js} +46 -18
  212. package/dist/chunk-NMI2TWMH.js.map +1 -0
  213. package/dist/{chunk-VM3PH7BB.js → chunk-OAHVKSQJ.js} +604 -178
  214. package/dist/chunk-OAHVKSQJ.js.map +1 -0
  215. package/dist/{chunk-2NOLF7B2.js → chunk-OHNKYHRR.js} +53 -17
  216. package/dist/chunk-OHNKYHRR.js.map +1 -0
  217. package/dist/{chunk-KC6HGWXN.js → chunk-OTIB4D2K.js} +3 -3
  218. package/dist/{chunk-KC6HGWXN.js.map → chunk-OTIB4D2K.js.map} +1 -1
  219. package/dist/{chunk-WMF2C5U7.js → chunk-OULSJRXV.js} +17 -17
  220. package/dist/chunk-OULSJRXV.js.map +1 -0
  221. package/dist/{chunk-HPVMTX6M.js → chunk-QOM5Z62G.js} +47 -12
  222. package/dist/chunk-QOM5Z62G.js.map +1 -0
  223. package/dist/{chunk-ZBMC6IAE.js → chunk-SNEE6UGY.js} +33 -32
  224. package/dist/chunk-SNEE6UGY.js.map +1 -0
  225. package/dist/{chunk-RD6N2D7I.js → chunk-SRODW6M2.js} +4 -4
  226. package/dist/{chunk-RD6N2D7I.js.map → chunk-SRODW6M2.js.map} +1 -1
  227. package/dist/{chunk-D6UBEYQH.js → chunk-SZXGRHQQ.js} +6 -6
  228. package/dist/chunk-SZXGRHQQ.js.map +1 -0
  229. package/dist/{chunk-X6GUNN7X.js → chunk-T2BDID2J.js} +39 -39
  230. package/dist/chunk-T2BDID2J.js.map +1 -0
  231. package/dist/{chunk-RP3FZ2T6.js → chunk-TKHJXPSB.js} +110 -37
  232. package/dist/chunk-TKHJXPSB.js.map +1 -0
  233. package/dist/{chunk-CD7SVH6W.js → chunk-U56GGCC2.js} +4 -4
  234. package/dist/{chunk-CD7SVH6W.js.map → chunk-U56GGCC2.js.map} +1 -1
  235. package/dist/{chunk-VKPBUPH7.js → chunk-UL22SDGR.js} +36 -11
  236. package/dist/chunk-UL22SDGR.js.map +1 -0
  237. package/dist/{chunk-CKICWXMU.js → chunk-UQ33Y4DM.js} +139 -10
  238. package/dist/chunk-UQ33Y4DM.js.map +1 -0
  239. package/dist/{chunk-34C2EKWJ.js → chunk-UVVVR4XO.js} +38 -38
  240. package/dist/chunk-UVVVR4XO.js.map +1 -0
  241. package/dist/{chunk-KSBDLCZI.js → chunk-VBI7HGHB.js} +11 -11
  242. package/dist/{chunk-KSBDLCZI.js.map → chunk-VBI7HGHB.js.map} +1 -1
  243. package/dist/{chunk-PBSN4RTV.js → chunk-VJRTDKXS.js} +590 -450
  244. package/dist/chunk-VJRTDKXS.js.map +1 -0
  245. package/dist/{chunk-IG5LZ3WU.js → chunk-VTETQCR6.js} +10 -10
  246. package/dist/chunk-VTETQCR6.js.map +1 -0
  247. package/dist/{chunk-EFLKSMCO.js → chunk-VUJXZDCY.js} +5 -5
  248. package/dist/{chunk-EFLKSMCO.js.map → chunk-VUJXZDCY.js.map} +1 -1
  249. package/dist/{chunk-V3D4HQMS.js → chunk-VXEYX73S.js} +4 -4
  250. package/dist/{chunk-V3D4HQMS.js.map → chunk-VXEYX73S.js.map} +1 -1
  251. package/dist/{chunk-M3WPBTGJ.js → chunk-WD3L5QSU.js} +2 -2
  252. package/dist/{chunk-M3WPBTGJ.js.map → chunk-WD3L5QSU.js.map} +1 -1
  253. package/dist/chunk-WDAIWDLK.js +505 -0
  254. package/dist/chunk-WDAIWDLK.js.map +1 -0
  255. package/dist/{chunk-IW6F6R2W.js → chunk-WEH33JSG.js} +105 -35
  256. package/dist/chunk-WEH33JSG.js.map +1 -0
  257. package/dist/{chunk-OYIENLJI.js → chunk-WYHQUCHR.js} +15 -15
  258. package/dist/{chunk-OYIENLJI.js.map → chunk-WYHQUCHR.js.map} +1 -1
  259. package/dist/{chunk-R6O6YWU7.js → chunk-WYZXSJBK.js} +3 -3
  260. package/dist/{chunk-R6O6YWU7.js.map → chunk-WYZXSJBK.js.map} +1 -1
  261. package/dist/{chunk-B4X2N7JQ.js → chunk-XFIEVEU7.js} +14 -14
  262. package/dist/chunk-XFIEVEU7.js.map +1 -0
  263. package/dist/{chunk-Q6E6FM7P.js → chunk-XKNXPLKR.js} +6 -6
  264. package/dist/{chunk-Q6E6FM7P.js.map → chunk-XKNXPLKR.js.map} +1 -1
  265. package/dist/chunk-Y2TO2U7W.js +285 -0
  266. package/dist/chunk-Y2TO2U7W.js.map +1 -0
  267. package/dist/{chunk-JYWW32JI.js → chunk-YGRZNFRO.js} +18 -6
  268. package/dist/chunk-YGRZNFRO.js.map +1 -0
  269. package/dist/{chunk-5BEFNLOR.js → chunk-Z7ZEZZB6.js} +8 -8
  270. package/dist/chunk-Z7ZEZZB6.js.map +1 -0
  271. package/dist/{chunk-PHRNUTSG.js → chunk-ZFUZ5AKM.js} +4 -4
  272. package/dist/{chunk-PHRNUTSG.js.map → chunk-ZFUZ5AKM.js.map} +1 -1
  273. package/dist/claude-code-VJGYBXQR.js +10 -0
  274. package/dist/claude-code-VJGYBXQR.js.map +1 -0
  275. package/dist/cli/index.js +930 -685
  276. package/dist/cli/index.js.map +1 -1
  277. package/dist/cli/src/agent-checks.d.ts +5 -0
  278. package/dist/cli/src/agent-checks.d.ts.map +1 -1
  279. package/dist/cli/src/agent-pins.d.ts +18 -0
  280. package/dist/cli/src/agent-pins.d.ts.map +1 -0
  281. package/dist/cli/src/commands/catalog.d.ts +9 -3
  282. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  283. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  284. package/dist/cli/src/commands/config.d.ts +2 -2
  285. package/dist/cli/src/commands/config.d.ts.map +1 -1
  286. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  287. package/dist/cli/src/commands/flow.d.ts +8 -8
  288. package/dist/cli/src/commands/flow.d.ts.map +1 -1
  289. package/dist/cli/src/commands/integration.d.ts +1 -1
  290. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  291. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  292. package/dist/cli/src/commands/library-index.d.ts +17 -5
  293. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  294. package/dist/cli/src/commands/library-publish.d.ts +3 -0
  295. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  296. package/dist/cli/src/commands/migrate-assets.d.ts +2 -0
  297. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  298. package/dist/cli/src/commands/migrate-files.d.ts +14 -0
  299. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  300. package/dist/cli/src/commands/migrate-harness.d.ts +49 -0
  301. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -0
  302. package/dist/cli/src/commands/migrate.d.ts +4 -2
  303. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  304. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  305. package/dist/cli/src/commands/plugin/claude-code.d.ts +6 -0
  306. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  307. package/dist/cli/src/commands/plugin/codex.d.ts +19 -4
  308. package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
  309. package/dist/cli/src/commands/plugin/types.d.ts +1 -6
  310. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  311. package/dist/cli/src/commands/plugin-registry-cmd.d.ts +1 -1
  312. package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
  313. package/dist/cli/src/commands/preset-export.d.ts +1 -1
  314. package/dist/cli/src/commands/project.d.ts +7 -4
  315. package/dist/cli/src/commands/project.d.ts.map +1 -1
  316. package/dist/cli/src/commands/providers.d.ts +13 -0
  317. package/dist/cli/src/commands/providers.d.ts.map +1 -1
  318. package/dist/cli/src/commands/run.d.ts +2 -2
  319. package/dist/cli/src/commands/run.d.ts.map +1 -1
  320. package/dist/cli/src/commands/serve-preflight.d.ts +30 -7
  321. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  322. package/dist/cli/src/commands/serve.d.ts +1 -1
  323. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  324. package/dist/cli/src/commands/update.d.ts.map +1 -1
  325. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  326. package/dist/cli/src/flow-discovery.d.ts +69 -53
  327. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  328. package/dist/cli/src/harness-error.d.ts +47 -0
  329. package/dist/cli/src/harness-error.d.ts.map +1 -0
  330. package/dist/cli/src/helpers.d.ts +5 -5
  331. package/dist/cli/src/helpers.d.ts.map +1 -1
  332. package/dist/cli/src/plugin-store/index.d.ts +8 -4
  333. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  334. package/dist/cli/src/setup.d.ts +3 -3
  335. package/dist/cli/src/setup.d.ts.map +1 -1
  336. package/dist/cli/src/skill-checks.d.ts +32 -1
  337. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  338. package/dist/connectors/config.js +4 -4
  339. package/dist/connectors/index.js +29 -27
  340. package/dist/connectors/src/connector-prompt.d.ts +5 -5
  341. package/dist/connectors/src/connector-registry.d.ts +1 -1
  342. package/dist/connectors-CXZLXAFZ.js +48 -0
  343. package/dist/{connectors-YNQ3WJGM.js.map → connectors-CXZLXAFZ.js.map} +1 -1
  344. package/dist/connectors-shared/index.js +2 -2
  345. package/dist/core/discovery.js +1 -1
  346. package/dist/core/framework.js +1 -1
  347. package/dist/{bridge/drivers/codex.d.ts → core/harness-targets.d.ts} +1 -1
  348. package/dist/core/harness-targets.js +4 -0
  349. package/dist/core/harness-targets.js.map +1 -0
  350. package/dist/core/index.js +10 -10
  351. package/dist/core/provider-registry-credentials.js +2 -2
  352. package/dist/core/provider-registry.js +1 -1
  353. package/dist/core/publish-manifest.js +1 -1
  354. package/dist/core/runtime-assets.js +4 -4
  355. package/dist/core/src/asset-roots.d.ts +16 -2
  356. package/dist/core/src/asset-roots.d.ts.map +1 -1
  357. package/dist/core/src/bind.d.ts +33 -14
  358. package/dist/core/src/bind.d.ts.map +1 -1
  359. package/dist/core/src/discovery.d.ts +1 -1
  360. package/dist/core/src/framework.d.ts +21 -21
  361. package/dist/core/src/framework.d.ts.map +1 -1
  362. package/dist/core/src/{driver-sdk.d.ts → harness-sdk.d.ts} +9 -9
  363. package/dist/core/src/harness-sdk.d.ts.map +1 -0
  364. package/dist/core/src/harness-targets.d.ts +71 -0
  365. package/dist/core/src/harness-targets.d.ts.map +1 -0
  366. package/dist/core/src/index.d.ts +11 -11
  367. package/dist/core/src/index.d.ts.map +1 -1
  368. package/dist/core/src/lock.d.ts +8 -0
  369. package/dist/core/src/lock.d.ts.map +1 -1
  370. package/dist/core/src/provider-registry.d.ts +2 -2
  371. package/dist/core/src/publish-manifest.d.ts +45 -10
  372. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  373. package/dist/core/src/settings.d.ts +17 -16
  374. package/dist/core/src/settings.d.ts.map +1 -1
  375. package/dist/core/src/store.d.ts +12 -12
  376. package/dist/core/src/store.d.ts.map +1 -1
  377. package/dist/core/src/workspace-config.d.ts +49 -22
  378. package/dist/core/src/workspace-config.d.ts.map +1 -1
  379. package/dist/core/src/workspace-yaml-editor.d.ts +1 -1
  380. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  381. package/dist/core/store.js +2 -2
  382. package/dist/core/workspace-config.js +3 -3
  383. package/dist/deploy/index.js +11 -11
  384. package/dist/discovery/index.js +3 -3
  385. package/dist/discovery/src/discover-manifest.d.ts +1 -1
  386. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  387. package/dist/discovery/src/discover.d.ts.map +1 -1
  388. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  389. package/dist/{ensure-sources-UJWEZSR3.js → ensure-sources-UPTHZKGF.js} +20 -20
  390. package/dist/{ensure-sources-UJWEZSR3.js.map → ensure-sources-UPTHZKGF.js.map} +1 -1
  391. package/dist/factory-assets/connectors/box.js +29 -27
  392. package/dist/factory-assets/connectors/deploy.js +29 -27
  393. package/dist/factory-assets/connectors/devserver.js +29 -27
  394. package/dist/factory-assets/connectors/flow/CONNECTOR.md +5 -5
  395. package/dist/factory-assets/connectors/flow/adapter.d.ts +3 -3
  396. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  397. package/dist/factory-assets/connectors/flow/adapter.js +29 -27
  398. package/dist/factory-assets/connectors/flow/engine/loader.d.ts +1 -1
  399. package/dist/factory-assets/connectors/flow/engine/locate.d.ts +8 -5
  400. package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
  401. package/dist/factory-assets/connectors/flow/engine/types.d.ts +1 -1
  402. package/dist/factory-assets/connectors/flow/engine.js +11 -11
  403. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts +2 -2
  404. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
  405. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts +4 -4
  406. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts.map +1 -1
  407. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +1 -1
  408. package/dist/factory-assets/connectors/flow/prompt-fragments.js +1 -1
  409. package/dist/factory-assets/connectors/flow/run-flow.d.ts +12 -12
  410. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  411. package/dist/factory-assets/connectors/flow/run-flow.js +30 -28
  412. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +1 -1
  413. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
  414. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +22 -22
  415. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  416. package/dist/factory-assets/connectors/flow.js +29 -27
  417. package/dist/factory-assets/connectors/git.js +29 -27
  418. package/dist/factory-assets/connectors/gmail.js +29 -27
  419. package/dist/factory-assets/connectors/googledrive.js +29 -27
  420. package/dist/factory-assets/connectors/local.js +29 -27
  421. package/dist/factory-assets/connectors/mattermost.js +29 -27
  422. package/dist/factory-assets/connectors/memory.js +29 -27
  423. package/dist/factory-assets/connectors/minio.js +29 -27
  424. package/dist/factory-assets/connectors/postgres.js +29 -27
  425. package/dist/factory-assets/connectors/s3.js +29 -27
  426. package/dist/factory-assets/connectors/sharepoint.js +29 -27
  427. package/dist/factory-assets/connectors/sqlite.js +29 -27
  428. package/dist/factory-assets/connectors/static-server.js +29 -27
  429. package/dist/factory-assets/connectors/tunnel.js +29 -27
  430. package/dist/factory-assets/connectors/webdav.js +29 -27
  431. package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
  432. package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
  433. package/dist/factory-assets/connectors/xstate-store.js +29 -27
  434. package/dist/factory-assets/connectors/xstate.js +29 -27
  435. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  436. package/dist/flows-TJQIMGUX.js +26 -0
  437. package/dist/{flows-BHY73K3O.js.map → flows-TJQIMGUX.js.map} +1 -1
  438. package/dist/{helpers-3CG7ZVX4.js → helpers-DE53KG3E.js} +20 -20
  439. package/dist/{helpers-3CG7ZVX4.js.map → helpers-DE53KG3E.js.map} +1 -1
  440. package/dist/library/index.js +14 -14
  441. package/dist/library/install.js +2 -2
  442. package/dist/library/src/index.d.ts +1 -1
  443. package/dist/library/src/index.d.ts.map +1 -1
  444. package/dist/library/src/manifest-writer.d.ts +13 -0
  445. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  446. package/dist/{library-publish-NWWVYJUK.js → library-publish-KKQ2ULLX.js} +140 -63
  447. package/dist/library-publish-KKQ2ULLX.js.map +1 -0
  448. package/dist/model-endpoint/index.js +14 -14
  449. package/dist/model-endpoint/src/resolve.d.ts +1 -1
  450. package/dist/open-library-RJGJIW5H.js +42 -0
  451. package/dist/{open-library-7ZG2FFAX.js.map → open-library-RJGJIW5H.js.map} +1 -1
  452. package/dist/open-registry-3QS3J7KO.js +32 -0
  453. package/dist/{open-registry-RBELV5YH.js.map → open-registry-3QS3J7KO.js.map} +1 -1
  454. package/dist/paths-QAV4C3KX.js +22 -0
  455. package/dist/{paths-BFM6K2QO.js.map → paths-QAV4C3KX.js.map} +1 -1
  456. package/dist/plugin-registry/index.js +1 -1
  457. package/dist/plugin-registry/src/context.d.ts +3 -3
  458. package/dist/plugin-registry/src/context.d.ts.map +1 -1
  459. package/dist/plugin-registry/src/deploy-handle.d.ts +1 -1
  460. package/dist/plugin-registry/src/index.d.ts +2 -2
  461. package/dist/plugin-registry/src/index.d.ts.map +1 -1
  462. package/dist/plugin-registry/src/internal.d.ts.map +1 -1
  463. package/dist/plugin-registry/src/registry.d.ts +3 -3
  464. package/dist/plugin-registry/src/registry.d.ts.map +1 -1
  465. package/dist/plugin-registry/src/targets.d.ts +9 -9
  466. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  467. package/dist/plugin-store-MSH6GK6T.js +23 -0
  468. package/dist/{plugin-store-QOQDM24E.js.map → plugin-store-MSH6GK6T.js.map} +1 -1
  469. package/dist/plugins/src/asset-kind-provider.d.ts +1 -1
  470. package/dist/project-HZW2MZPA.js +84 -0
  471. package/dist/{project-YQM3I25D.js.map → project-HZW2MZPA.js.map} +1 -1
  472. package/dist/resolver/index.js +10 -10
  473. package/dist/runner/index.js +45 -44
  474. package/dist/runner/src/agent.d.ts +3 -3
  475. package/dist/runner/src/agent.d.ts.map +1 -1
  476. package/dist/runner/src/agents/in-process-host.d.ts +1 -1
  477. package/dist/runner/src/agents/instances.d.ts +1 -1
  478. package/dist/runner/src/agents/instances.d.ts.map +1 -1
  479. package/dist/runner/src/agents/run-controller.d.ts +7 -7
  480. package/dist/runner/src/agents/run-controller.d.ts.map +1 -1
  481. package/dist/runner/src/agents/standalone-surface.d.ts +2 -2
  482. package/dist/runner/src/agents/standalone-surface.d.ts.map +1 -1
  483. package/dist/runner/src/ai-provider-switch.d.ts +7 -7
  484. package/dist/runner/src/assistant-home.d.ts +1 -1
  485. package/dist/runner/src/capability-registry.d.ts +2 -2
  486. package/dist/runner/src/coalesced-restart.d.ts +2 -2
  487. package/dist/runner/src/compaction/context-window.d.ts +8 -8
  488. package/dist/runner/src/compaction/context-window.d.ts.map +1 -1
  489. package/dist/runner/src/compaction/orchestrator.d.ts +24 -24
  490. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  491. package/dist/runner/src/compaction-gate.d.ts +30 -30
  492. package/dist/runner/src/compaction-gate.d.ts.map +1 -1
  493. package/dist/runner/src/composition/compile.d.ts +11 -0
  494. package/dist/runner/src/composition/compile.d.ts.map +1 -1
  495. package/dist/runner/src/composition/dry-run.d.ts +2 -2
  496. package/dist/runner/src/composition/dry-run.d.ts.map +1 -1
  497. package/dist/runner/src/composition/index.d.ts +1 -1
  498. package/dist/runner/src/composition/index.d.ts.map +1 -1
  499. package/dist/runner/src/composition/resolve-instance.d.ts +2 -2
  500. package/dist/runner/src/composition/resolve.d.ts +1 -1
  501. package/dist/runner/src/config.d.ts +3 -3
  502. package/dist/runner/src/config.d.ts.map +1 -1
  503. package/dist/runner/src/context-usage/collector.d.ts +15 -15
  504. package/dist/runner/src/context-usage/collector.d.ts.map +1 -1
  505. package/dist/runner/src/context-usage/compose.d.ts +6 -6
  506. package/dist/runner/src/context-usage/compose.d.ts.map +1 -1
  507. package/dist/runner/src/context-usage/estimator.d.ts +1 -1
  508. package/dist/runner/src/context-usage/index.d.ts +1 -1
  509. package/dist/runner/src/context-usage/index.d.ts.map +1 -1
  510. package/dist/runner/src/context-usage/transcript-tracker.d.ts +2 -2
  511. package/dist/runner/src/context-usage/transcript-tracker.d.ts.map +1 -1
  512. package/dist/runner/src/credential-notice.d.ts +3 -3
  513. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  514. package/dist/runner/src/credential-rotated.d.ts +1 -1
  515. package/dist/runner/src/final-text.d.ts +1 -1
  516. package/dist/runner/src/{driver-swap-gate.d.ts → harness-swap-gate.d.ts} +21 -21
  517. package/dist/runner/src/harness-swap-gate.d.ts.map +1 -0
  518. package/dist/runner/src/late-mcp-rebuild.d.ts +6 -6
  519. package/dist/runner/src/late-mcp-rebuild.d.ts.map +1 -1
  520. package/dist/runner/src/lifecycle-handler.d.ts +1 -1
  521. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  522. package/dist/runner/src/manifest.d.ts +1 -1
  523. package/dist/runner/src/mcp-runtime-handlers.d.ts +6 -6
  524. package/dist/runner/src/mcp-runtime-handlers.d.ts.map +1 -1
  525. package/dist/runner/src/model-endpoint-discovery.d.ts +1 -1
  526. package/dist/runner/src/pending-turns.d.ts +3 -3
  527. package/dist/runner/src/platform-blocks.d.ts +5 -5
  528. package/dist/runner/src/platform-blocks.d.ts.map +1 -1
  529. package/dist/runner/src/prompt-turn-queue.d.ts +1 -1
  530. package/dist/runner/src/provider-quota-forwarder.d.ts +1 -1
  531. package/dist/runner/src/provider-quota-forwarder.d.ts.map +1 -1
  532. package/dist/runner/src/reconfigure-handler.d.ts +14 -14
  533. package/dist/runner/src/reconfigure-handler.d.ts.map +1 -1
  534. package/dist/runner/src/resource-handler.d.ts +1 -1
  535. package/dist/runner/src/resources.d.ts +5 -5
  536. package/dist/runner/src/resources.d.ts.map +1 -1
  537. package/dist/runner/src/runner-capabilities.d.ts +7 -7
  538. package/dist/runner/src/runtime-session-emit.d.ts +5 -5
  539. package/dist/runner/src/runtime-session-emit.d.ts.map +1 -1
  540. package/dist/runner/src/s3-presign-client.d.ts +1 -1
  541. package/dist/runner/src/serve-credentials.d.ts +7 -7
  542. package/dist/runner/src/serve-credentials.d.ts.map +1 -1
  543. package/dist/runner/src/serve.d.ts +32 -32
  544. package/dist/runner/src/serve.d.ts.map +1 -1
  545. package/dist/runner/src/session-builder.d.ts +41 -41
  546. package/dist/runner/src/session-builder.d.ts.map +1 -1
  547. package/dist/runner/src/session-capability-wiring.d.ts +9 -9
  548. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  549. package/dist/runner/src/session-stimulus.d.ts +1 -1
  550. package/dist/runner/src/session.d.ts +5 -5
  551. package/dist/runner/src/session.d.ts.map +1 -1
  552. package/dist/runner/src/skill-staging.d.ts +16 -16
  553. package/dist/runner/src/skill-staging.d.ts.map +1 -1
  554. package/dist/runner/src/turn-end-contract.d.ts +55 -0
  555. package/dist/runner/src/turn-end-contract.d.ts.map +1 -0
  556. package/dist/runner/src/turn-scheduler.d.ts +27 -22
  557. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  558. package/dist/runner/src/turn-status-replay.d.ts +1 -1
  559. package/dist/runner/src/usage-limit-turn-hold.d.ts +1 -1
  560. package/dist/sdk/asset-manager.js +17 -17
  561. package/dist/sdk/bridge.js +24 -22
  562. package/dist/sdk/core.js +10 -10
  563. package/dist/sdk/flow.js +11 -11
  564. package/dist/sdk/index.js +49 -48
  565. package/dist/sdk/index.js.map +1 -1
  566. package/dist/sdk/resolver.js +10 -10
  567. package/dist/sdk/runner.js +45 -44
  568. package/dist/sdk/session.js +2 -2
  569. package/dist/sdk/src/agent-session.d.ts +1 -1
  570. package/dist/sdk/src/local-runtime.d.ts +1 -1
  571. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  572. package/dist/sdk/src/types.d.ts +1 -1
  573. package/dist/sdk/src/types.d.ts.map +1 -1
  574. package/dist/sdk/store.js +2 -2
  575. package/dist/sdk/transport/ws/server.js +11 -11
  576. package/dist/sdk/transport/ws.js +11 -11
  577. package/dist/sdk/transport.js +11 -11
  578. package/dist/sdk/types.js +1 -1
  579. package/dist/serve-preflight-L4POEHNQ.js +108 -0
  580. package/dist/serve-preflight-L4POEHNQ.js.map +1 -0
  581. package/dist/session/index.js +2 -2
  582. package/dist/session/src/dispatcher.d.ts +2 -2
  583. package/dist/sessions-2Q7SSYPT.js +5 -0
  584. package/dist/{sessions-DICDEONJ.js.map → sessions-2Q7SSYPT.js.map} +1 -1
  585. package/dist/{setup-AAHVAXRA.js → setup-AGYB4PKR.js} +50 -48
  586. package/dist/setup-AGYB4PKR.js.map +1 -0
  587. package/dist/skills-2LMQ2IAD.js +26 -0
  588. package/dist/{skills-RSZVUIYZ.js.map → skills-2LMQ2IAD.js.map} +1 -1
  589. package/dist/source-GBMYD3RO.js +85 -0
  590. package/dist/{source-KWMCMEMB.js.map → source-GBMYD3RO.js.map} +1 -1
  591. package/dist/{source-manifest-publish-EDYKM4YZ.js → source-manifest-publish-FK22TVQT.js} +57 -56
  592. package/dist/source-manifest-publish-FK22TVQT.js.map +1 -0
  593. package/dist/store/index.js +2 -2
  594. package/dist/store/src/store.d.ts +3 -3
  595. package/dist/store/src/store.d.ts.map +1 -1
  596. package/dist/transport/index.js +11 -11
  597. package/dist/transport/src/ws/server.d.ts +1 -1
  598. package/dist/transport/src/ws/server.d.ts.map +1 -1
  599. package/dist/transport/ws/server.js +11 -11
  600. package/dist/transport/ws.js +11 -11
  601. package/dist/tui/index.js +65 -64
  602. package/dist/tui/index.js.map +1 -1
  603. package/dist/tui/src/repl-session.d.ts +5 -5
  604. package/dist/tui/src/repl.d.ts +5 -5
  605. package/dist/tui/src/repl.d.ts.map +1 -1
  606. package/dist/types/index.js +1 -1
  607. package/dist/types/manifests.js +1 -1
  608. package/dist/types/src/agent-lifecycle.d.ts +1 -1
  609. package/dist/types/src/agent-lifecycle.d.ts.map +1 -1
  610. package/dist/types/src/ask-slots.d.ts +1 -1
  611. package/dist/types/src/capabilities.d.ts +1 -1
  612. package/dist/types/src/context-usage.d.ts +22 -22
  613. package/dist/types/src/context-usage.d.ts.map +1 -1
  614. package/dist/types/src/events.d.ts +49 -49
  615. package/dist/types/src/events.d.ts.map +1 -1
  616. package/dist/types/src/index.d.ts +2 -2
  617. package/dist/types/src/index.d.ts.map +1 -1
  618. package/dist/types/src/lifecycle.d.ts +6 -6
  619. package/dist/types/src/lifecycle.d.ts.map +1 -1
  620. package/dist/types/src/logging.d.ts +1 -1
  621. package/dist/types/src/manifests/agent.d.ts +3 -3
  622. package/dist/types/src/manifests/scaffold-body.d.ts +6 -3
  623. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  624. package/dist/types/src/protocol.d.ts +4 -4
  625. package/dist/types/src/runtime.d.ts +38 -38
  626. package/dist/types/src/runtime.d.ts.map +1 -1
  627. package/dist/types/src/version.d.ts +22 -11
  628. package/dist/types/src/version.d.ts.map +1 -1
  629. package/dist/validator-DRHMJ457.js +5 -0
  630. package/dist/{validator-FA2PFW6N.js.map → validator-DRHMJ457.js.map} +1 -1
  631. package/dist/workspace-plugin/adapters/mcp.js +36 -34
  632. package/dist/workspace-plugin/adapters/omp.js +26 -26
  633. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  634. package/dist/workspace-plugin/index.js +3 -3
  635. package/dist/workspace-plugin/src/plugin.d.ts +5 -5
  636. package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
  637. package/dist/workspace-plugin/src/tools/flows.d.ts +1 -1
  638. package/dist/workspace-plugin/src/tools/validator.d.ts +6 -6
  639. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  640. package/dist/workspace-plugin/src/types.d.ts +2 -2
  641. package/dist/workspace-plugin/src/types.d.ts.map +1 -1
  642. package/package.json +59 -59
  643. package/dist/bridge/drivers/claude-sdk.js.map +0 -1
  644. package/dist/bridge/drivers/codex.js.map +0 -1
  645. package/dist/bridge/drivers/continue.js.map +0 -1
  646. package/dist/bridge/drivers/echo.js.map +0 -1
  647. package/dist/bridge/drivers/gemini.js +0 -18
  648. package/dist/bridge/drivers/goose.js.map +0 -1
  649. package/dist/bridge/drivers/omp.js.map +0 -1
  650. package/dist/bridge/drivers/opencode.js.map +0 -1
  651. package/dist/bridge/drivers/qwen.js.map +0 -1
  652. package/dist/bridge/src/codex/managed-driver.d.ts.map +0 -1
  653. package/dist/bridge/src/driver-capabilities.d.ts.map +0 -1
  654. package/dist/bridge/src/driver-model-check.d.ts +0 -21
  655. package/dist/bridge/src/driver-model-check.d.ts.map +0 -1
  656. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +0 -1
  657. package/dist/bridge/src/drivers/claude-context-usage.d.ts.map +0 -1
  658. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +0 -1
  659. package/dist/bridge/src/drivers/claude-self-turns.d.ts.map +0 -1
  660. package/dist/bridge/src/drivers/claude-tool-allowlist.d.ts.map +0 -1
  661. package/dist/bridge/src/drivers/codex.d.ts.map +0 -1
  662. package/dist/bridge/src/drivers/continue.d.ts.map +0 -1
  663. package/dist/bridge/src/drivers/echo.d.ts.map +0 -1
  664. package/dist/bridge/src/drivers/flow-script.d.ts.map +0 -1
  665. package/dist/bridge/src/drivers/gemini.d.ts.map +0 -1
  666. package/dist/bridge/src/drivers/goose.d.ts.map +0 -1
  667. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +0 -1
  668. package/dist/bridge/src/drivers/omp.d.ts.map +0 -1
  669. package/dist/bridge/src/drivers/opencode.d.ts.map +0 -1
  670. package/dist/bridge/src/drivers/qwen.d.ts.map +0 -1
  671. package/dist/bridge/src/drivers/recovery-policy.d.ts.map +0 -1
  672. package/dist/bridge/src/drivers/resume-probe.d.ts.map +0 -1
  673. package/dist/bridge/src/drivers/sanitize-assistant-text.d.ts.map +0 -1
  674. package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +0 -1
  675. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +0 -1
  676. package/dist/chunk-2NOLF7B2.js.map +0 -1
  677. package/dist/chunk-34C2EKWJ.js.map +0 -1
  678. package/dist/chunk-3KMREAR2.js.map +0 -1
  679. package/dist/chunk-4ZTPYIBE.js.map +0 -1
  680. package/dist/chunk-5BEFNLOR.js.map +0 -1
  681. package/dist/chunk-5TBFN46Z.js.map +0 -1
  682. package/dist/chunk-6E6PKKAD.js.map +0 -1
  683. package/dist/chunk-7ANRSTNR.js.map +0 -1
  684. package/dist/chunk-7FHZB2QU.js.map +0 -1
  685. package/dist/chunk-AIBAOXDU.js.map +0 -1
  686. package/dist/chunk-AJ7EGIFR.js.map +0 -1
  687. package/dist/chunk-B4X2N7JQ.js.map +0 -1
  688. package/dist/chunk-BBWSGVVE.js.map +0 -1
  689. package/dist/chunk-BO426QWN.js.map +0 -1
  690. package/dist/chunk-CKICWXMU.js.map +0 -1
  691. package/dist/chunk-CKNIYIV2.js.map +0 -1
  692. package/dist/chunk-D6UBEYQH.js.map +0 -1
  693. package/dist/chunk-EAZECHPM.js.map +0 -1
  694. package/dist/chunk-EPBKISS5.js.map +0 -1
  695. package/dist/chunk-GBYNC5V3.js.map +0 -1
  696. package/dist/chunk-GOK4QRJR.js.map +0 -1
  697. package/dist/chunk-HPVMTX6M.js.map +0 -1
  698. package/dist/chunk-IG5LZ3WU.js.map +0 -1
  699. package/dist/chunk-IW6F6R2W.js.map +0 -1
  700. package/dist/chunk-IZCR27MU.js.map +0 -1
  701. package/dist/chunk-JYWW32JI.js.map +0 -1
  702. package/dist/chunk-KY4UXX7M.js.map +0 -1
  703. package/dist/chunk-L2AMXONH.js.map +0 -1
  704. package/dist/chunk-LW7ZI6EQ.js.map +0 -1
  705. package/dist/chunk-MJHSLODD.js.map +0 -1
  706. package/dist/chunk-PBSN4RTV.js.map +0 -1
  707. package/dist/chunk-RP3FZ2T6.js.map +0 -1
  708. package/dist/chunk-SRNCN4X2.js.map +0 -1
  709. package/dist/chunk-T2TQAH2X.js.map +0 -1
  710. package/dist/chunk-U7V5SIFW.js.map +0 -1
  711. package/dist/chunk-VKPBUPH7.js.map +0 -1
  712. package/dist/chunk-VM3PH7BB.js.map +0 -1
  713. package/dist/chunk-WMF2C5U7.js.map +0 -1
  714. package/dist/chunk-X6GUNN7X.js.map +0 -1
  715. package/dist/chunk-XTO436PV.js.map +0 -1
  716. package/dist/chunk-Y56YIT6J.js.map +0 -1
  717. package/dist/chunk-YARXR3CN.js.map +0 -1
  718. package/dist/chunk-YROR332M.js.map +0 -1
  719. package/dist/chunk-YZ3N7IUU.js.map +0 -1
  720. package/dist/chunk-ZBMC6IAE.js.map +0 -1
  721. package/dist/cli/src/driver-error.d.ts +0 -21
  722. package/dist/cli/src/driver-error.d.ts.map +0 -1
  723. package/dist/connectors-YNQ3WJGM.js +0 -46
  724. package/dist/core/driver-targets.d.ts +0 -2
  725. package/dist/core/driver-targets.js +0 -4
  726. package/dist/core/driver-targets.js.map +0 -1
  727. package/dist/core/src/driver-sdk.d.ts.map +0 -1
  728. package/dist/core/src/driver-targets.d.ts +0 -71
  729. package/dist/core/src/driver-targets.d.ts.map +0 -1
  730. package/dist/flows-BHY73K3O.js +0 -26
  731. package/dist/library-publish-NWWVYJUK.js.map +0 -1
  732. package/dist/open-library-7ZG2FFAX.js +0 -42
  733. package/dist/open-registry-RBELV5YH.js +0 -32
  734. package/dist/paths-BFM6K2QO.js +0 -22
  735. package/dist/plugin-store-QOQDM24E.js +0 -23
  736. package/dist/project-YQM3I25D.js +0 -83
  737. package/dist/runner/src/driver-swap-gate.d.ts.map +0 -1
  738. package/dist/serve-preflight-5QMY7DBC.js +0 -60
  739. package/dist/serve-preflight-5QMY7DBC.js.map +0 -1
  740. package/dist/sessions-DICDEONJ.js +0 -5
  741. package/dist/setup-AAHVAXRA.js.map +0 -1
  742. package/dist/skills-RSZVUIYZ.js +0 -26
  743. package/dist/source-KWMCMEMB.js +0 -84
  744. package/dist/source-manifest-publish-EDYKM4YZ.js.map +0 -1
  745. package/dist/validator-FA2PFW6N.js +0 -5
  746. /package/dist/bridge/{drivers → harnesses}/gemini.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../bridge/src/provider-catalog.ts","../bridge/src/provider-materialize/credential-env.ts","../bridge/src/harness-capabilities.ts","../bridge/src/registry.ts"],"names":[],"mappings":"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","file":"chunk-F2GOZMRA.js","sourcesContent":["/**\n * The AI provider catalog — the preset layer of the provider registry (§1.5,\n * layer 5).\n *\n * A preset is the three-or-four literals an endpoint needs beyond a credential:\n * its wire `surface`, its `base_url` (or the transport that derives one), the\n * header the credential rides in, and the path a read-only probe can GET. With\n * them, `skaile providers add --preset groq` needs nothing but an env var name.\n *\n * This replaced `provider-endpoints.ts` `PROVIDER_ENDPOINTS`: every endpoint\n * that table knew is present here, with the surface/transport/credential facts\n * it could not express.\n *\n * The record types come from `@skaile/workspaces/core/provider-registry` — the\n * schema has exactly one home.\n *\n * @see PROVIDER-CONFIG-PLAN.md §1.2, §1.3, §2.5\n */\n\nimport {\n AI_PROVIDER_BASE_URL_TEMPLATES,\n type AIProviderCredentialKind,\n type AIProviderDiscovery,\n type AIProviderEntry,\n type AIProviderKind,\n type AIProviderLlmEntry,\n type AIProviderRegistry,\n type AIProviderRegistryLayer,\n type AIProviderRegistryPatch,\n type AIProviderSurface,\n type AIProviderTransport,\n type AIProviderVoiceParams,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\n\n/**\n * Where the credential goes on the wire. `{credential}` is replaced with the\n * resolved secret. Needed because `credential.kind` alone is ambiguous:\n * `api_key_header` is `x-api-key` for Anthropic, `x-goog-api-key` for Gemini,\n * `api-key` for Azure OpenAI and `Authorization: Token …` for Deepgram.\n */\nexport interface AIProviderAuthHeader {\n name: string;\n template: string;\n}\n\n/** A catalog preset — the fields an entry inherits by naming it. */\nexport interface AIProviderPreset {\n /** Preset id; also the default entry id `skaile providers add` writes. */\n id: string;\n kind: AIProviderKind;\n label: string;\n /** `llm`/`embed` only. */\n surface?: AIProviderSurface;\n /** `llm`/`embed` only; omitted means `direct`. */\n transport?: AIProviderTransport;\n /** Literal endpoint. Absent when the transport derives one from `params`. */\n base_url?: string;\n /**\n * Env var the vendor's own SDK reads as a base-URL override, when one\n * exists. Consulted by the callers that still address an endpoint by preset\n * id — model discovery, key validation, and `skaile migrate providers` — so\n * a shell already pointed at a gateway keeps pointing there.\n */\n base_url_env?: string;\n /** Static non-secret headers, e.g. Anthropic's `anthropic-version`. */\n headers?: Record<string, string>;\n /** Credential shape plus the conventional env var holding the secret. */\n credential: { kind: AIProviderCredentialKind; env?: string };\n /** Header the credential rides in; defaults per surface when omitted. */\n auth_header?: AIProviderAuthHeader;\n /** Default routing/voice parameters. */\n params?: Record<string, string>;\n /** `params` keys the operator must supply — the preset cannot know them. */\n required_params?: string[];\n /**\n * Read-only path a health probe GETs, relative to `base_url`: the models\n * list for LLM surfaces, an equivalent authenticated read for voice.\n * Absent when the endpoint has none (Bedrock's runtime host).\n */\n probe_path?: string;\n discovery?: AIProviderDiscovery;\n /** Anything the operator has to know that the fields do not say. */\n notes?: string;\n}\n\nconst ANTHROPIC_VERSION_HEADER: Record<string, string> = { \"anthropic-version\": \"2023-06-01\" };\n\nconst X_API_KEY: AIProviderAuthHeader = { name: \"x-api-key\", template: \"{credential}\" };\n\nconst OPENAI_MODELS_PATH = \"/v1/models\";\n\n/**\n * Every preset the runtime ships.\n *\n * Insertion order is display order in `skaile providers list`: first-party\n * clouds, then OpenAI-compatible vendors, then the transports that need\n * routing parameters, then local runtimes and gateways, then voice.\n *\n * Sources: `platform/_devlog/reports/2026-09-20-inference-provider-market-survey.md`\n * (36 endpoints, base URLs and auth headers verified there).\n */\nexport const AI_PROVIDER_PRESETS: Record<string, AIProviderPreset> = {\n anthropic: {\n id: \"anthropic\",\n kind: \"llm\",\n label: \"Anthropic\",\n surface: \"anthropic-messages\",\n base_url: \"https://api.anthropic.com\",\n base_url_env: \"ANTHROPIC_BASE_URL\",\n headers: ANTHROPIC_VERSION_HEADER,\n credential: { kind: \"api_key_header\", env: \"ANTHROPIC_API_KEY\" },\n auth_header: X_API_KEY,\n probe_path: \"/v1/models\",\n discovery: { type: \"anthropic-models-list\" },\n },\n openai: {\n id: \"openai\",\n kind: \"llm\",\n label: \"OpenAI\",\n surface: \"openai-responses\",\n base_url: \"https://api.openai.com/v1\",\n base_url_env: \"OPENAI_BASE_URL\",\n credential: { kind: \"bearer\", env: \"OPENAI_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n notes:\n \"Responses is OpenAI's current API; set surface openai-completions for chat-only clients.\",\n },\n google: {\n id: \"google\",\n kind: \"llm\",\n label: \"Google Gemini API\",\n surface: \"google-generative-ai\",\n base_url: \"https://generativelanguage.googleapis.com/v1beta\",\n credential: { kind: \"api_key_header\", env: \"GEMINI_API_KEY\" },\n auth_header: { name: \"x-goog-api-key\", template: \"{credential}\" },\n probe_path: \"/v1beta/models\",\n discovery: { type: \"google-models-list\" },\n },\n groq: {\n id: \"groq\",\n kind: \"llm\",\n label: \"Groq\",\n surface: \"openai-completions\",\n base_url: \"https://api.groq.com/openai/v1\",\n credential: { kind: \"bearer\", env: \"GROQ_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n deepseek: {\n id: \"deepseek\",\n kind: \"llm\",\n label: \"DeepSeek\",\n surface: \"openai-completions\",\n base_url: \"https://api.deepseek.com\",\n credential: { kind: \"bearer\", env: \"DEEPSEEK_API_KEY\" },\n probe_path: \"/models\",\n discovery: { type: \"openai-models-list\" },\n notes:\n \"Anthropic-shaped clients use https://api.deepseek.com/anthropic with surface anthropic-messages.\",\n },\n openrouter: {\n id: \"openrouter\",\n kind: \"llm\",\n label: \"OpenRouter\",\n surface: \"openai-completions\",\n base_url: \"https://openrouter.ai/api/v1\",\n credential: { kind: \"bearer\", env: \"OPENROUTER_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n mistral: {\n id: \"mistral\",\n kind: \"llm\",\n label: \"Mistral\",\n surface: \"openai-completions\",\n base_url: \"https://api.mistral.ai/v1\",\n credential: { kind: \"bearer\", env: \"MISTRAL_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n xai: {\n id: \"xai\",\n kind: \"llm\",\n label: \"xAI (Grok)\",\n surface: \"openai-completions\",\n base_url: \"https://api.x.ai/v1\",\n credential: { kind: \"bearer\", env: \"XAI_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n together: {\n id: \"together\",\n kind: \"llm\",\n label: \"Together AI\",\n surface: \"openai-completions\",\n base_url: \"https://api.together.ai/v1\",\n credential: { kind: \"bearer\", env: \"TOGETHER_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n fireworks: {\n id: \"fireworks\",\n kind: \"llm\",\n label: \"Fireworks AI\",\n surface: \"openai-completions\",\n base_url: \"https://api.fireworks.ai/inference/v1\",\n credential: { kind: \"bearer\", env: \"FIREWORKS_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n bedrock: {\n id: \"bedrock\",\n kind: \"llm\",\n label: \"AWS Bedrock\",\n surface: \"bedrock-converse-stream\",\n transport: \"bedrock\",\n credential: { kind: \"sigv4\" },\n required_params: [\"region\"],\n notes: \"Credentials come from the AWS default chain; the runtime host serves no models list.\",\n },\n vertex: {\n id: \"vertex\",\n kind: \"llm\",\n label: \"Google Vertex AI\",\n surface: \"google-vertex\",\n transport: \"vertex\",\n credential: { kind: \"google_adc\" },\n params: { publisher: \"google\" },\n required_params: [\"project\", \"location\"],\n probe_path: \"/models\",\n },\n \"azure-openai\": {\n id: \"azure-openai\",\n kind: \"llm\",\n label: \"Azure OpenAI\",\n surface: \"azure-openai-responses\",\n transport: \"azure-openai\",\n credential: { kind: \"api_key_header\", env: \"AZURE_OPENAI_API_KEY\" },\n auth_header: { name: \"api-key\", template: \"{credential}\" },\n required_params: [\"resource\", \"deployment\", \"api_version\"],\n probe_path: \"/models\",\n notes:\n \"api_version is mirrored into query_params['api-version']; switch credential.kind to azure_entra for Entra tokens.\",\n },\n foundry: {\n id: \"foundry\",\n kind: \"llm\",\n label: \"Claude on Microsoft Foundry\",\n surface: \"anthropic-messages\",\n transport: \"foundry\",\n headers: ANTHROPIC_VERSION_HEADER,\n credential: { kind: \"api_key_header\", env: \"ANTHROPIC_FOUNDRY_API_KEY\" },\n auth_header: X_API_KEY,\n required_params: [\"resource\"],\n probe_path: \"/v1/models\",\n },\n ollama: {\n id: \"ollama\",\n kind: \"llm\",\n label: \"Ollama (local)\",\n surface: \"openai-completions\",\n base_url: \"http://localhost:11434/v1\",\n credential: { kind: \"none\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n lmstudio: {\n id: \"lmstudio\",\n kind: \"llm\",\n label: \"LM Studio (local)\",\n surface: \"openai-completions\",\n base_url: \"http://localhost:1234/v1\",\n credential: { kind: \"none\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n },\n vllm: {\n id: \"vllm\",\n kind: \"llm\",\n label: \"vLLM (self-hosted)\",\n surface: \"openai-completions\",\n base_url: \"http://localhost:8000/v1\",\n credential: { kind: \"none\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n notes: \"A server started with --api-key expects credential.kind bearer and an env: ref.\",\n },\n litellm: {\n id: \"litellm\",\n kind: \"llm\",\n label: \"LiteLLM proxy\",\n surface: \"openai-completions\",\n base_url: \"http://localhost:4000\",\n credential: { kind: \"bearer\", env: \"LITELLM_API_KEY\" },\n probe_path: OPENAI_MODELS_PATH,\n discovery: { type: \"openai-models-list\" },\n notes: \"The credential is the proxy's virtual key; upstream keys stay in the proxy config.\",\n },\n deepgram: {\n id: \"deepgram\",\n kind: \"stt\",\n label: \"Deepgram\",\n base_url: \"https://api.deepgram.com\",\n credential: { kind: \"api_key_header\", env: \"DEEPGRAM_API_KEY\" },\n auth_header: { name: \"Authorization\", template: \"Token {credential}\" },\n params: { model: \"nova-3\", language: \"en\" },\n probe_path: \"/v1/projects\",\n },\n elevenlabs: {\n id: \"elevenlabs\",\n kind: \"tts\",\n label: \"ElevenLabs\",\n base_url: \"https://api.elevenlabs.io\",\n credential: { kind: \"api_key_header\", env: \"ELEVENLABS_API_KEY\" },\n auth_header: { name: \"xi-api-key\", template: \"{credential}\" },\n params: { voice_id: \"21m00Tcm4TlvDq8ikWAM\", output_format: \"mp3_44100_128\" },\n probe_path: \"/v1/models\",\n },\n};\n\n/** Presets in catalog order. */\nexport function listProviderPresets(): AIProviderPreset[] {\n return Object.values(AI_PROVIDER_PRESETS);\n}\n\n/** Look up a preset by id. */\nexport function getProviderPreset(id: string): AIProviderPreset | undefined {\n return AI_PROVIDER_PRESETS[id];\n}\n\n/**\n * The endpoint `skaile providers list` shows for a preset: the literal when\n * there is one, otherwise the transport's `base_url` template (§1.3) with its\n * `{param}` placeholders left in — they are exactly what the operator must\n * supply.\n */\nexport function presetBaseUrl(preset: AIProviderPreset): string | undefined {\n if (preset.base_url) return preset.base_url;\n if (!preset.transport || preset.transport === \"direct\") return undefined;\n return AI_PROVIDER_BASE_URL_TEMPLATES[preset.transport];\n}\n\n/**\n * The endpoint a request to this preset should actually go to: an explicit\n * override first, then the vendor's own `*_BASE_URL` variable\n * ({@link AIProviderPreset.base_url_env}), then the preset literal.\n *\n * Behind a gateway the credential in play is the *gateway's*, not the\n * vendor's, so discovery and key validation have to follow dispatch — firing\n * either at the vendor's public API 401s and yields an empty catalog, which a\n * caller that reads \"empty\" as \"unknown\" then degrades into \"accept anything\".\n *\n * Pure: reads only the `env` record it is handed.\n */\nexport function resolvePresetBaseUrl(\n preset: AIProviderPreset,\n options: { baseUrl?: string; env?: Record<string, string | undefined> } = {},\n): string | undefined {\n const explicit = options.baseUrl?.trim();\n if (explicit) return explicit;\n const fromEnv = preset.base_url_env ? options.env?.[preset.base_url_env]?.trim() : undefined;\n return fromEnv || preset.base_url;\n}\n\n/** Overrides {@link expandPreset} accepts from `skaile providers add`. */\nexport interface ExpandPresetOptions {\n /** `env:NAME` / `cmd:…` / `platform:…` / `keyring:…`. Never a literal. */\n credentialRef?: string;\n baseUrl?: string;\n surface?: AIProviderSurface;\n label?: string;\n /** Transport routing parameters, or voice parameters for `stt`/`tts`. */\n params?: Record<string, string>;\n}\n\n/**\n * Materialize a preset into a registry entry.\n *\n * The credential is always a reference: the preset's conventional `env:` var\n * unless the caller names another ref. No code path here can write a secret.\n * For `transport: azure-openai` the `api_version` parameter is mirrored into\n * `query_params['api-version']`, which is where the wire expects it (§1.3).\n */\nexport function expandPreset(\n preset: AIProviderPreset,\n options: ExpandPresetOptions = {},\n): AIProviderEntry {\n const ref =\n options.credentialRef ?? (preset.credential.env ? `env:${preset.credential.env}` : undefined);\n const credential = ref ? { kind: preset.credential.kind, ref } : { kind: preset.credential.kind };\n const base_url = options.baseUrl ?? preset.base_url;\n const params = { ...preset.params, ...options.params };\n\n if (preset.kind === \"stt\" || preset.kind === \"tts\") {\n return {\n kind: preset.kind,\n label: options.label ?? preset.label,\n preset: preset.id,\n ...(base_url ? { base_url } : {}),\n ...(preset.headers ? { headers: { ...preset.headers } } : {}),\n credential,\n ...(Object.keys(params).length > 0 ? { params: params as AIProviderVoiceParams } : {}),\n };\n }\n\n const transport = preset.transport ?? \"direct\";\n const entry: AIProviderLlmEntry = {\n kind: preset.kind === \"embed\" ? \"embed\" : \"llm\",\n label: options.label ?? preset.label,\n preset: preset.id,\n ...((options.surface ?? preset.surface) ? { surface: options.surface ?? preset.surface } : {}),\n ...(base_url ? { base_url } : {}),\n ...(preset.headers ? { headers: { ...preset.headers } } : {}),\n credential,\n ...(preset.discovery ? { discovery: { ...preset.discovery } } : {}),\n } as AIProviderLlmEntry;\n\n if (transport !== \"direct\") {\n Object.assign(entry, { transport, params });\n if (transport === \"azure-openai\" && params.api_version) {\n entry.query_params = { \"api-version\": params.api_version };\n }\n }\n return entry;\n}\n\n/**\n * Build the catalog merge layer for a set of configured entries (§1.5).\n *\n * Only the presets actually referenced by a `preset:` key are expanded, keyed\n * by the *entry* id — so `groq: {kind: llm, preset: groq}` deep-merges onto a\n * full Groq definition while an unreferenced preset stays out of the registry.\n *\n * Takes the **pre-gate** merge (`LoadedProviderRegistry.patches`), not the\n * gated registry: an entry that leaves `kind` or its transport `params` to the\n * preset is exactly the one the gate drops before this layer exists, and a\n * dropped entry names no preset to expand.\n */\nexport function catalogLayer(providers: AIProviderRegistryPatch): AIProviderRegistryLayer {\n const expanded: AIProviderRegistry = {};\n for (const [id, entry] of Object.entries(providers)) {\n if (!entry.preset) continue;\n const preset = AI_PROVIDER_PRESETS[entry.preset];\n if (!preset) continue;\n expanded[id] = expandPreset(preset);\n }\n return { layer: \"catalog\", providers: expanded };\n}\n\n/**\n * Join a base URL and a path without duplicating a shared leading segment:\n * `(\"https://gw/v1\", \"/v1/models\")` → `https://gw/v1/models`. Both spellings\n * are common in the wild, and a preset's path must work against a gateway base\n * the operator typed either way.\n */\nfunction joinBaseAndPath(base: string, path: string): string {\n const trimmed = base.replace(/\\/+$/, \"\");\n const segments = path.split(\"/\").filter(Boolean);\n const lead = segments[0];\n if (lead && trimmed.toLowerCase().endsWith(`/${lead.toLowerCase()}`)) {\n return `${trimmed}/${segments.slice(1).join(\"/\")}`;\n }\n return `${trimmed}${path}`;\n}\n\n/**\n * The read-only URL a health probe or model discovery can GET for an entry —\n * the models list on LLM surfaces, the equivalent authenticated read on voice\n * ones. `undefined` when the entry has no endpoint yet (missing transport\n * parameters) or the surface serves no such path (Bedrock runtime).\n *\n * This is the catalog method that supersedes `resolveProviderModelsUrl`.\n */\nexport function resolveProbeUrl(entry: AIProviderEntry): string | undefined {\n const base = resolveEntryBaseUrl(entry);\n if (!base) return undefined;\n const preset = entry.preset ? AI_PROVIDER_PRESETS[entry.preset] : undefined;\n const path = (entry as AIProviderLlmEntry).discovery?.path ?? preset?.probe_path;\n if (!path) return undefined;\n const url = joinBaseAndPath(base, path);\n const query = (entry as AIProviderLlmEntry).query_params;\n if (!query || Object.keys(query).length === 0) return url;\n const search = new URLSearchParams(query).toString();\n return `${url}${url.includes(\"?\") ? \"&\" : \"?\"}${search}`;\n}\n\n/**\n * The header(s) that present a credential on the wire for an entry.\n *\n * `credential.kind` alone does not determine the header — `api_key_header` is\n * `x-api-key` at Anthropic, `x-goog-api-key` at Google and `api-key` at Azure —\n * so the preset's `auth_header` wins, then a per-surface default.\n * Returns `{}` when the credential is signed elsewhere (`sigv4`, `google_adc`)\n * or absent.\n */\nexport function buildCredentialHeaders(\n entry: AIProviderEntry,\n secret: string | undefined,\n): Record<string, string> {\n const kind = entry.credential?.kind ?? \"none\";\n if (!secret || kind === \"none\" || kind === \"sigv4\" || kind === \"google_adc\") return {};\n\n const preset = entry.preset ? AI_PROVIDER_PRESETS[entry.preset] : undefined;\n if (preset?.auth_header) {\n return {\n [preset.auth_header.name]: preset.auth_header.template.replace(\"{credential}\", secret),\n };\n }\n if (kind === \"api_key_header\") {\n const surface = (entry as AIProviderLlmEntry).surface;\n if (surface === \"google-generative-ai\") return { \"x-goog-api-key\": secret };\n if (surface === \"azure-openai-responses\") return { \"api-key\": secret };\n return { \"x-api-key\": secret };\n }\n return { Authorization: `Bearer ${secret}` };\n}\n\n/** Outcome of {@link probeProviderEntry}. Never carries the credential. */\nexport interface AIProviderProbeResult {\n /** The endpoint answered 2xx. */\n ok: boolean;\n /** `false` when no request was made — nothing was verified either way. */\n probed: boolean;\n url?: string;\n status?: number;\n /** Human-readable outcome. Secret-free. */\n detail: string;\n}\n\n/** Options for {@link probeProviderEntry}. */\nexport interface ProbeProviderOptions {\n /** Resolved credential value, if the entry has one. Never logged. */\n secret?: string;\n /** Request deadline; default 8000 ms, matching `validateApiKey`. */\n timeoutMs?: number;\n}\n\n/**\n * Send one minimal, read-only request to an entry's endpoint and report what\n * came back.\n *\n * Returns `probed: false` — rather than a false negative — when the entry has\n * no probe path (Bedrock's runtime host) or no resolvable endpoint yet: a\n * SigV4- or ADC-signed request is the transport SDK's job, not this function's.\n */\nexport async function probeProviderEntry(\n entry: AIProviderEntry,\n options: ProbeProviderOptions = {},\n): Promise<AIProviderProbeResult> {\n const url = resolveProbeUrl(entry);\n if (!url) {\n const base = resolveEntryBaseUrl(entry);\n return {\n ok: false,\n probed: false,\n detail: base\n ? `no read-only probe endpoint is defined for this entry (${base})`\n : \"no base_url could be resolved — set base_url or the transport's params\",\n };\n }\n\n const headers: Record<string, string> = {\n ...entry.headers,\n ...buildCredentialHeaders(entry, options.secret),\n };\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? 8000);\n try {\n const response = await fetch(url, { method: \"GET\", headers, signal: controller.signal });\n if (response.ok) {\n return { ok: true, probed: true, url, status: response.status, detail: \"endpoint reachable\" };\n }\n const detail =\n response.status === 401 || response.status === 403\n ? \"credential rejected (authentication failed)\"\n : `endpoint returned HTTP ${response.status}`;\n return { ok: false, probed: true, url, status: response.status, detail };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const detail =\n err instanceof Error && err.name === \"AbortError\"\n ? `request timed out after ${options.timeoutMs ?? 8000}ms`\n : message;\n return { ok: false, probed: true, url, detail };\n } finally {\n clearTimeout(timeout);\n }\n}\n","/**\n * Credential delivery for harness adapters — the one naming rule (§2.3).\n *\n * Every adapter that hands a registry entry's secret to a child process, and\n * every renderer that has to *name* that secret in a config file it writes\n * (omp's `models.yml` `apiKey:`, Codex's `env_key`, OpenCode's `{env:…}`),\n * agrees on one env-var name per entry: `SKAILE_AIP_<UPPER_ID>_KEY`. The name\n * goes in the file, the value goes in the child environment — a rendered\n * config never contains a secret.\n *\n * The platform's secret-env allowlist is a prefix rule on exactly that name,\n * and forge-common delivers the same names when it spawns `skaile serve`, so\n * the transform below is a cross-repo contract: uppercase, every character\n * outside `[A-Za-z0-9]` mapped to `_` (registry ids are `[a-z0-9][a-z0-9_-]*`,\n * so in practice only `-`).\n *\n * Alongside the canonical name, {@link registryCredentialEnv} also sets the\n * *conventional* carrier a CLI already reads (`ANTHROPIC_API_KEY`,\n * `GEMINI_API_KEY`, `GROQ_API_KEY`, …) so a catalog-preset entry works in a\n * harness that has no per-endpoint config file yet.\n *\n * @see PROVIDER-CONFIG-PLAN.md §1.4, §2.3\n */\n\nimport {\n type AIProviderEntry,\n type AIProviderRegistry,\n isEntryEnabled,\n type MergedAIProviderRegistry,\n parseCredentialRef,\n registryEntries,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { resolveCredential } from \"@skaile/workspaces/core/provider-registry-credentials\";\nimport { AI_PROVIDER_PRESETS } from \"../provider-catalog.js\";\n\n/** Options shared by every registry-shaped credential resolution. */\nexport interface RegistryCredentialOptions {\n /** Restrict resolution to one entry — the provider half of a `modelRef`. */\n providerId?: string;\n /** Environment `env:` refs resolve against. Defaults to `process.env`. */\n env?: Record<string, string | undefined>;\n /** Control-plane secrets keyed by config id, for `platform:` refs. */\n secrets?: Record<string, string>;\n /** Run `cmd:` references. Default `true`. */\n allowCommand?: boolean;\n}\n\n/** Prefix of the canonical per-entry credential variable. */\nexport const PROVIDER_CREDENTIAL_ENV_PREFIX = \"SKAILE_AIP_\";\n\n/** Suffix of the canonical per-entry credential variable. */\nexport const PROVIDER_CREDENTIAL_ENV_SUFFIX = \"_KEY\";\n\n/**\n * The env-var name that carries a registry entry's credential:\n * `anthropic` → `SKAILE_AIP_ANTHROPIC_KEY`, `my-gw.eu` → `SKAILE_AIP_MY_GW_EU_KEY`.\n *\n * Pure: no environment, no registry, no I/O. Renderers call it per entry while\n * emitting a config file, adapters call it while assembling a child env, and\n * the platform allowlist matches the prefix.\n */\nexport function providerCredentialEnvName(providerId: string): string {\n const slug = providerId.replace(/[^A-Za-z0-9]/g, \"_\").toUpperCase();\n return `${PROVIDER_CREDENTIAL_ENV_PREFIX}${slug}${PROVIDER_CREDENTIAL_ENV_SUFFIX}`;\n}\n\n/**\n * The env var a harness already looks for on its own, when the entry names one.\n *\n * The catalog preset's conventional carrier wins (`GEMINI_API_KEY` for\n * `google`), because that is the name the vendor's own CLI reads; otherwise an\n * `env:NAME` credential reference is taken at face value — the operator named\n * that variable, so the child gets it under the same name. `cmd:`, `platform:`\n * and `keyring:` refs have no conventional carrier and return `undefined`.\n */\nexport function conventionalCredentialEnvName(entry: AIProviderEntry): string | undefined {\n const preset = entry.preset ? AI_PROVIDER_PRESETS[entry.preset] : undefined;\n if (preset?.credential.env) return preset.credential.env;\n const ref = entry.credential?.ref ? parseCredentialRef(entry.credential.ref) : undefined;\n return ref?.form === \"env\" ? ref.name : undefined;\n}\n\n/**\n * Resolve one entry's credential to its value, or `undefined` when there is\n * none to hand over (`kind: none`, an ambient `sigv4`/`google_adc` chain, an\n * unset variable, a reserved `keyring:` ref).\n */\nexport function resolveEntryCredential(\n entry: AIProviderEntry,\n options: RegistryCredentialOptions = {},\n): string | undefined {\n return resolveCredential(entry, {\n ...(options.env ? { env: options.env } : {}),\n ...(options.secrets ? { secrets: options.secrets } : {}),\n ...(options.allowCommand === undefined ? {} : { allowCommand: options.allowCommand }),\n }).value;\n}\n\n/**\n * One entry's credential value, including the one the session boundary\n * already resolved for it.\n *\n * A `platform:<configId>` reference is resolved by the runner — it holds the\n * `session_init` secrets map, the harness does not — and materialized into the\n * child environment under {@link providerCredentialEnvName}. So when the\n * reference itself yields nothing, that carrier is consulted: it is the same\n * secret, delivered one step earlier.\n */\nexport function entryCredentialValue(\n providerId: string,\n entry: AIProviderEntry,\n options: RegistryCredentialOptions = {},\n): string | undefined {\n return (\n resolveEntryCredential(entry, options) ?? options.env?.[providerCredentialEnvName(providerId)]\n );\n}\n\n/** One enabled entry whose credential is declared but cannot be resolved. */\nexport interface UnresolvedProviderCredential {\n providerId: string;\n /** Why it does not resolve, e.g. `environment variable ANTHROPIC_API_KEY is not set`. */\n reason: string;\n}\n\n/**\n * The enabled LLM/embed entries that name a credential this process cannot\n * resolve (the variable is unset, the command fails). A harness must not be\n * handed such an entry: the child would send an empty key and fail with a 401\n * instead of using its own login. Entries with no credential, an ambient\n * signing chain, or a value the session boundary already delivered under\n * {@link providerCredentialEnvName} are fine.\n */\nexport function unresolvedProviderCredentials(\n registry: AIProviderRegistry | MergedAIProviderRegistry,\n options: RegistryCredentialOptions = {},\n): UnresolvedProviderCredential[] {\n const out: UnresolvedProviderCredential[] = [];\n for (const [id, entry] of registryEntries(registry)) {\n if (entry.kind !== \"llm\" && entry.kind !== \"embed\") continue;\n if (!isEntryEnabled(entry)) continue;\n if (options.providerId && id !== options.providerId) continue;\n const resolved = resolveCredential(entry, {\n ...(options.env ? { env: options.env } : {}),\n ...(options.secrets ? { secrets: options.secrets } : {}),\n ...(options.allowCommand === undefined ? {} : { allowCommand: options.allowCommand }),\n });\n if (!resolved.error) continue;\n if (options.env?.[providerCredentialEnvName(id)]) continue;\n out.push({ providerId: id, reason: resolved.error });\n }\n return out;\n}\n\n/** Options for {@link entryCredentialEnv} / {@link registryCredentialEnv}. */\nexport interface RegistryCredentialEnvOptions extends RegistryCredentialOptions {\n /**\n * Also set the harness-conventional carrier\n * ({@link conventionalCredentialEnvName}). Default `true`. Set `false` for a\n * harness that reads every endpoint out of a rendered config file and must\n * not inherit a vendor default from a neighbouring entry.\n */\n aliases?: boolean;\n}\n\n/**\n * The credential variables one entry contributes: always\n * `SKAILE_AIP_<ID>_KEY`, plus the conventional carrier unless `aliases` is\n * `false`. Empty when the entry has no resolvable secret.\n */\nexport function entryCredentialEnv(\n providerId: string,\n entry: AIProviderEntry,\n options: RegistryCredentialEnvOptions = {},\n): Record<string, string> {\n const value = resolveEntryCredential(entry, options);\n if (!value) return {};\n const out: Record<string, string> = { [providerCredentialEnvName(providerId)]: value };\n if (options.aliases !== false) {\n const alias = conventionalCredentialEnvName(entry);\n if (alias) out[alias] = value;\n }\n return out;\n}\n\n/**\n * Every enabled entry's credential, as a child-process environment fragment.\n *\n * One canonical `SKAILE_AIP_<ID>_KEY` per entry whose credential resolves; the\n * conventional carriers are added underneath, first entry in registry order\n * winning a collision (registry order is highest-precedence layer first, so\n * the alias follows the same precedence the selector does). Entries whose\n * credential cannot be resolved contribute nothing.\n */\nexport function registryCredentialEnv(\n registry: AIProviderRegistry | MergedAIProviderRegistry,\n options: RegistryCredentialEnvOptions = {},\n): Record<string, string> {\n const canonical: Record<string, string> = {};\n const aliases: Record<string, string> = {};\n for (const [id, entry] of registryEntries(registry)) {\n if (options.providerId && id !== options.providerId) continue;\n if (!isEntryEnabled(entry)) continue;\n const value = resolveEntryCredential(entry, options);\n if (!value) continue;\n canonical[providerCredentialEnvName(id)] = value;\n if (options.aliases === false) continue;\n const alias = conventionalCredentialEnvName(entry);\n if (alias && aliases[alias] === undefined) aliases[alias] = value;\n }\n return { ...aliases, ...canonical };\n}\n","/**\n * What the runner may ask of a harness, by harness id.\n *\n * Deliberately light: this module imports no harness, no SDK and no `zod`, so a\n * runner file that only needs a capability can import it without loading the\n * harness graph. The plugin-registry singleton is read through its `internal`\n * module (the same file `@skaile/workspaces/plugin-registry` re-exports, so one\n * instance under the bundler's shared chunks), not through the package index,\n * which pulls in the deploy helpers and their `zod` schemas.\n *\n * @docLink packages/bridge/api-reference#registry\n */\n\nimport { pluginRegistry } from \"../../plugin-registry/src/internal.js\";\nimport type { HarnessCapabilities } from \"@skaile/workspaces/types\";\n\n/**\n * Capabilities of a harness that declares none: it recomposes its tools per\n * turn like every bridge harness that is not an in-process SDK, and has no\n * managed session, credentials file or transcript-file resume.\n */\nconst GENERIC_HARNESS_CAPABILITIES: HarnessCapabilities = {\n inProcessMcpServers: false,\n liveToolUpdates: true,\n managedSession: false,\n claudeCodeCredentials: false,\n resumeNeedsTranscript: false,\n};\n\n/**\n * Declared capabilities of the built-in harnesses that differ from nothing.\n * `BUILTIN_HARNESS_CATALOG` rows point at these entries, so `listHarnesses()` and\n * {@link harnessCapabilities} read one table. A built-in absent here (echo,\n * gemini, qwen, opencode, goose, continue) takes the generic defaults.\n */\nexport const BUILTIN_HARNESS_CAPABILITIES = {\n // Recomposes its tools per turn, so a hot-plugged MCP server is live.\n omp: {\n inProcessMcpServers: false,\n liveToolUpdates: true,\n managedSession: false,\n claudeCodeCredentials: false,\n resumeNeedsTranscript: false,\n },\n // The SDK takes in-process server instances and bakes its tool set at\n // creation; it reads Claude's `~/.claude` credentials and JSONL transcripts.\n \"claude-sdk\": {\n inProcessMcpServers: true,\n liveToolUpdates: false,\n managedSession: false,\n claudeCodeCredentials: true,\n resumeNeedsTranscript: true,\n },\n // Standalone SDK recomposes its tools per turn. A host-managed session\n // (native app-server) refreshes its own native tool snapshot instead.\n codex: {\n inProcessMcpServers: false,\n liveToolUpdates: true,\n managedSession: true,\n claudeCodeCredentials: false,\n resumeNeedsTranscript: false,\n },\n} as const satisfies Record<string, HarnessCapabilities>;\n\n/**\n * Resolve what the runner may ask of a harness, by harness id, without loading\n * its module. Built-ins read {@link BUILTIN_HARNESS_CAPABILITIES}; a third-party\n * harness reads its registered `HarnessTarget`; an unknown or absent id gets the\n * generic defaults. Fields a harness omits take the generic default too.\n *\n * This is the one place the runner learns harness facts — it never compares an\n * id against `\"claude-sdk\"`, `\"codex\"` or `\"omp\"`.\n *\n * @param id - Harness id (e.g. a session's `harnessType`); `undefined` resolves to the defaults.\n * @docLink packages/bridge/api-reference#registry\n */\nexport function harnessCapabilities(id: string | undefined): HarnessCapabilities {\n const declared = id\n ? Object.hasOwn(BUILTIN_HARNESS_CAPABILITIES, id)\n ? BUILTIN_HARNESS_CAPABILITIES[id as keyof typeof BUILTIN_HARNESS_CAPABILITIES]\n : pluginRegistry.get(\"harness\", id)?.capabilities\n : undefined;\n return { ...GENERIC_HARNESS_CAPABILITIES, ...declared };\n}\n\n/**\n * Whether a hot-plugged MCP server reaches the agent's next turn without a\n * harness restart. A host-managed session refreshes its native tool snapshot\n * itself, so it never takes live updates, whatever the standalone harness does.\n *\n * @param id - Harness id of the live session.\n * @param managed - Whether the session is host-managed (`managedCodex`).\n * @docLink packages/bridge/api-reference#registry\n */\nexport function supportsLiveToolUpdates(id: string | undefined, managed = false): boolean {\n const caps = harnessCapabilities(id);\n return caps.liveToolUpdates && !(managed && caps.managedSession);\n}\n","import type {\n AIProviderRegistry,\n AIProviderSurface,\n MergedAIProviderRegistry,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport type { HarnessContext } from \"@skaile/workspaces/plugin-registry\";\nimport { type PluginRegistry, pluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport type { ModelEntry } from \"./models.js\";\nimport type { RegistryCredentialOptions } from \"./provider-materialize/credential-env.js\";\nimport { BUILTIN_HARNESS_CAPABILITIES } from \"./harness-capabilities.js\";\nimport type { AgentConfig, AgentHarness, HarnessInfo } from \"./types.js\";\n\n// Build-time harness gating. `bun build --compile --define:__INCLUDE_*__=...`\n// folds these to literal booleans so an excluded harness module and\n// its SDK are dead-code-stripped from the binary. Under tsup / vitest / bun\n// run-on-source no `--define` runs and the `typeof` guard defaults to `true` —\n// every harness is available (the SDKs stay optional peers).\ndeclare const __INCLUDE_CLAUDE_SDK__: boolean;\ndeclare const __INCLUDE_CODEX__: boolean;\nconst INCLUDE_CLAUDE_SDK =\n typeof __INCLUDE_CLAUDE_SDK__ === \"undefined\" ? true : __INCLUDE_CLAUDE_SDK__;\nconst INCLUDE_CODEX = typeof __INCLUDE_CODEX__ === \"undefined\" ? true : __INCLUDE_CODEX__;\n\n/**\n * Every wire surface omp can speak — it is the harness the `surface` enum was\n * lifted from, so its list is the enum.\n */\nconst OMP_SURFACES = [\n \"anthropic-messages\",\n \"openai-completions\",\n \"openai-responses\",\n \"openai-codex-responses\",\n \"azure-openai-responses\",\n \"bedrock-converse-stream\",\n \"google-generative-ai\",\n \"google-vertex\",\n] as const satisfies readonly AIProviderSurface[];\n\n/**\n * Static capability metadata for every built-in harness.\n *\n * Pure data — this object imports no harness module and references no harness\n * SDK. {@link listHarnesses} returns it (merged with any third-party harnesses)\n * so selection UIs can enumerate every harness without loading a single\n * harness module. The matching harness module's `HarnessTarget` is registered\n * into the plugin registry by {@link registerBuiltinHarnesses}.\n *\n * `surfaces` and `providerPlurality` are the harness-capability declaration\n * the AI provider registry resolves against (plan §2.3): which wire protocols\n * a harness can be pointed at, and how many registry entries it can use at\n * once. The platform's resolver filters candidate entries on `surfaces`\n * instead of matching vendor names.\n *\n * @docLink packages/bridge/api-reference#registry\n */\nexport const BUILTIN_HARNESS_CATALOG: Record<string, HarnessInfo> = {\n omp: {\n id: \"omp\",\n name: \"omp (oh-my-pi)\",\n modelAgnostic: true,\n supportsInBandAbort: true,\n surfaces: OMP_SURFACES,\n // omp renders the whole registry as its own `models.yml`, so every entry\n // stays selectable and roles / per-subagent models resolve across them.\n providerPlurality: \"registry\",\n capabilities: BUILTIN_HARNESS_CAPABILITIES.omp,\n },\n \"claude-sdk\": {\n id: \"claude-sdk\",\n name: \"Claude Agent SDK\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n // Anthropic's own API, plus the two clouds the SDK addresses natively.\n // Foundry is `anthropic-messages` at a different host, not a surface.\n surfaces: [\"anthropic-messages\", \"bedrock-converse-stream\", \"google-vertex\"],\n providerPlurality: \"single\",\n capabilities: BUILTIN_HARNESS_CAPABILITIES[\"claude-sdk\"],\n },\n codex: {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n // Codex's `wire_api` is `responses` or `chat`; its subscription transport\n // is the codex-specific responses flavour.\n surfaces: [\"openai-codex-responses\", \"openai-responses\", \"openai-completions\"],\n providerPlurality: \"single\",\n capabilities: BUILTIN_HARNESS_CAPABILITIES.codex,\n },\n echo: {\n id: \"echo\",\n name: \"Echo (E2E mock)\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n // Deterministic mock: it never opens a connection, so it speaks no wire\n // surface and no registry entry can be dispatched to it.\n surfaces: [],\n providerPlurality: \"single\",\n },\n gemini: {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n surfaces: [\"google-generative-ai\"],\n providerPlurality: \"single\",\n },\n qwen: {\n id: \"qwen\",\n name: \"Qwen Code\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n // Driven entirely through OPENAI_BASE_URL / OPENAI_API_KEY.\n surfaces: [\"openai-completions\"],\n providerPlurality: \"single\",\n },\n opencode: {\n id: \"opencode\",\n name: \"OpenCode\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n surfaces: [\n \"anthropic-messages\",\n \"openai-completions\",\n \"openai-responses\",\n \"google-generative-ai\",\n ],\n providerPlurality: \"credentials-n\",\n },\n goose: {\n id: \"goose\",\n name: \"Goose\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n surfaces: [\n \"anthropic-messages\",\n \"openai-completions\",\n \"google-generative-ai\",\n \"bedrock-converse-stream\",\n ],\n providerPlurality: \"credentials-n\",\n },\n continue: {\n id: \"continue\",\n name: \"Continue CLI\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n surfaces: [\"anthropic-messages\", \"openai-completions\", \"google-generative-ai\"],\n providerPlurality: \"credentials-n\",\n },\n};\n\nlet _harnessesRegistered = false;\n\n/**\n * Register every built-in harness's `HarnessTarget` into the plugin registry.\n *\n * This is the single id → module map in bridge core. Every specifier is a\n * literal string so `bun --compile` can statically bundle the harness module\n * (and, transitively, its SDK). The in-process-SDK harnesses (`claude-sdk`,\n * `codex`) are wrapped in build-constant guards so an excluded harness's\n * `await import` folds to dead code in the compiled binary. `omp` and `echo`\n * carry no SDK weight and are always available.\n *\n * **Static import discipline.** Every `import()` specifier below must be a\n * string literal — never aliased through a variable. Indirection defeats\n * `bun --compile`'s static analysis and silently drops the module from the\n * binary.\n *\n * Idempotent: guarded by a module flag so a second call is a no-op (a duplicate\n * `register` would otherwise throw `RegistrationError`).\n *\n * @docLink packages/bridge/api-reference#registry\n */\nexport async function registerBuiltinHarnesses(\n registry: PluginRegistry = pluginRegistry,\n): Promise<void> {\n if (registry === pluginRegistry && _harnessesRegistered) return;\n\n if (!registry.get(\"harness\", \"omp\")) {\n const m = await import(\"@skaile/workspaces/harnesses/omp\");\n registry.register(\"harness\", m.ompHarnessTarget);\n }\n if (!registry.get(\"harness\", \"echo\")) {\n const m = await import(\"@skaile/workspaces/harnesses/echo\");\n registry.register(\"harness\", m.echoHarnessTarget);\n }\n if (INCLUDE_CLAUDE_SDK && !registry.get(\"harness\", \"claude-sdk\")) {\n const m = await import(\"@skaile/workspaces/harnesses/claude-sdk\");\n registry.register(\"harness\", m.claudeSdkHarnessTarget);\n }\n if (INCLUDE_CODEX && !registry.get(\"harness\", \"codex\")) {\n const m = await import(\"@skaile/workspaces/harnesses/codex\");\n registry.register(\"harness\", m.codexHarnessTarget);\n }\n // Subprocess CLI harnesses spawn an external binary the user installs\n // separately — no bundled SDK to dead-code-strip, so (like omp/echo) they\n // carry no build constant and are always registered.\n if (!registry.get(\"harness\", \"gemini\")) {\n const m = await import(\"@skaile/workspaces/harnesses/gemini\");\n registry.register(\"harness\", m.geminiHarnessTarget);\n }\n if (!registry.get(\"harness\", \"qwen\")) {\n const m = await import(\"@skaile/workspaces/harnesses/qwen\");\n registry.register(\"harness\", m.qwenHarnessTarget);\n }\n if (!registry.get(\"harness\", \"opencode\")) {\n const m = await import(\"@skaile/workspaces/harnesses/opencode\");\n registry.register(\"harness\", m.opencodeHarnessTarget);\n }\n if (!registry.get(\"harness\", \"goose\")) {\n const m = await import(\"@skaile/workspaces/harnesses/goose\");\n registry.register(\"harness\", m.gooseHarnessTarget);\n }\n if (!registry.get(\"harness\", \"continue\")) {\n const m = await import(\"@skaile/workspaces/harnesses/continue\");\n registry.register(\"harness\", m.continueHarnessTarget);\n }\n\n if (registry === pluginRegistry) _harnessesRegistered = true;\n}\n\n/**\n * Creates a new harness instance for the given harness id.\n *\n * Ensures the built-in harness targets are registered (idempotent), then looks\n * up the target in the plugin registry and calls its `create()`. The returned\n * harness has not been started yet — call `harness.start()` before sending\n * prompts.\n *\n * @param id - Registered harness identifier (e.g. `\"omp\"`, `\"claude-sdk\"`).\n * @param config - Configuration forwarded to the harness constructor.\n * @param ctx - Optional harness context (logger / abort signal). Defaults to `{}`.\n * @returns A freshly constructed (not yet started) {@link AgentHarness}.\n * @throws {Error} When `id` is a known harness excluded from this build, or\n * when `id` does not match any registered harness at all.\n * @docLink packages/bridge/api-reference#registry\n */\nexport async function createHarness(\n id: string,\n config: AgentConfig,\n ctx?: HarnessContext,\n): Promise<AgentHarness> {\n const target = await resolveHarnessTarget(id);\n return target.create(config, ctx ?? {});\n}\n\n/**\n * Resolve a registered harness target by id, ensuring the built-ins are\n * registered first. Throws the canonical \"not bundled\" / \"unknown harness\"\n * errors so every caller (`createHarness`, `listModelsForHarness`) reports an\n * unrecognized id the same way instead of silently degrading.\n *\n * @throws {Error} When `id` is a known harness excluded from this build, or\n * when `id` does not match any registered harness at all.\n */\nasync function resolveHarnessTarget(id: string) {\n await registerBuiltinHarnesses();\n const target = pluginRegistry.get(\"harness\", id);\n if (!target) {\n if (id in BUILTIN_HARNESS_CATALOG) {\n throw new Error(`Agent harness \"${id}\" is not bundled in this build.`);\n }\n throw new Error(\n `Unknown agent harness: \"${id}\". Available: ${listHarnesses()\n .map((d) => d.id)\n .join(\", \")}`,\n );\n }\n return target;\n}\n\n/**\n * Returns the capability metadata for every available harness.\n *\n * Enumerates every built-in harness from {@link BUILTIN_HARNESS_CATALOG} without\n * loading a single harness module or harness SDK, then merges in any third-party\n * harness targets registered into the plugin registry that are not already in\n * the catalog. Use this to populate harness selection UIs.\n *\n * @returns Array of {@link HarnessInfo} objects, one per available harness.\n * @docLink packages/bridge/api-reference#registry\n */\nexport function listHarnesses(): HarnessInfo[] {\n const merged = new Map<string, HarnessInfo>();\n for (const info of Object.values(BUILTIN_HARNESS_CATALOG)) {\n merged.set(info.id, info);\n }\n for (const meta of pluginRegistry.list(\"harness\")) {\n if (!merged.has(meta.id)) {\n // Third-party harnesses carry no HarnessInfo row; read the capability flags\n // off the registered target (defaulting to conservative false) so a\n // model-agnostic / in-band-abort harness can still advertise them.\n const target = pluginRegistry.get(\"harness\", meta.id);\n merged.set(meta.id, {\n id: meta.id,\n name: meta.displayName,\n modelAgnostic: target?.modelAgnostic ?? false,\n supportsInBandAbort: target?.supportsInBandAbort ?? false,\n // Left absent when the target declares nothing: \"speaks no surface\" and\n // \"did not say\" are different claims, and the platform resolver must be\n // able to tell them apart before it filters a harness out.\n ...(target?.surfaces ? { surfaces: target.surfaces } : {}),\n ...(target?.providerPlurality ? { providerPlurality: target.providerPlurality } : {}),\n ...(target?.capabilities ? { capabilities: target.capabilities } : {}),\n });\n }\n }\n return [...merged.values()];\n}\n\n/**\n * List models available to a specific harness without starting a full agent session.\n *\n * Ensures the built-in harness targets are registered (idempotent), then\n * delegates to the target's optional `listModels()`. Throws on an unknown /\n * not-bundled id (same contract as {@link createHarness}); returns `[]` only\n * when the target exists but exposes no `listModels`.\n *\n * @param harnessId - Registered harness id (e.g. `\"omp\"`, `\"claude-sdk\"`, `\"codex\"`).\n * @param registry - The AI provider registry to discover against — either the\n * bare `id → entry` map or a merged view. Each entry names its credential by\n * reference, resolved through `options` and delivered to the throwaway\n * harness as `SKAILE_AIP_<ID>_KEY` environment entries.\n * @param options - Which entry to restrict to, and where `env:` / `platform:`\n * references resolve from. Defaults to the whole registry against\n * `process.env`.\n * @throws {Error} When `harnessId` is unknown or excluded from this build.\n * @docLink packages/bridge/api-reference#registry\n */\nexport async function listModelsForHarness(\n harnessId: string,\n registry: AIProviderRegistry | MergedAIProviderRegistry,\n options?: RegistryCredentialOptions,\n): Promise<ModelEntry[]> {\n const target = await resolveHarnessTarget(harnessId);\n return (await target.listModels?.(registry, options)) ?? [];\n}\n"]}
@@ -31,32 +31,42 @@ var DeployTargetNotFoundError = class extends Error {
31
31
  // plugin-registry/src/internal.ts
32
32
  var MapPluginRegistry = class {
33
33
  apiVersion = 1;
34
- // One Map per kind keeps lookups kind-scoped — a driver and a connector may
34
+ // One Map per kind keeps lookups kind-scoped — a harness and a connector may
35
35
  // share an id without colliding.
36
36
  stores = {
37
- driver: /* @__PURE__ */ new Map(),
37
+ harness: /* @__PURE__ */ new Map(),
38
38
  connector: /* @__PURE__ */ new Map(),
39
39
  deployTarget: /* @__PURE__ */ new Map()
40
40
  };
41
+ /** The store of `kind`; a retired or unknown kind is a loud error, not a silent no-op. */
42
+ storeFor(kind) {
43
+ if (Object.hasOwn(this.stores, kind)) return this.stores[kind];
44
+ if (kind === "driver") {
45
+ throw new Error(
46
+ 'plugin kind "driver" was renamed to "harness" in @skaile/workspaces 6.0.0; register("harness", \u2026)'
47
+ );
48
+ }
49
+ throw new Error(`unknown plugin kind "${kind}"`);
50
+ }
41
51
  register(kind, target) {
52
+ const store = this.storeFor(kind);
42
53
  const t = target;
43
54
  if (t.apiVersion !== 1) {
44
55
  throw new ApiVersionMismatchError(kind, t.id, t.apiVersion);
45
56
  }
46
- const store = this.stores[kind];
47
57
  if (store.has(t.id)) {
48
58
  throw new RegistrationError(kind, t.id);
49
59
  }
50
60
  store.set(t.id, t);
51
61
  }
52
62
  unregister(kind, id) {
53
- return this.stores[kind].delete(id);
63
+ return this.storeFor(kind).delete(id);
54
64
  }
55
65
  get(kind, id) {
56
- return this.stores[kind].get(id);
66
+ return this.storeFor(kind).get(id);
57
67
  }
58
68
  list(kind) {
59
- return [...this.stores[kind].values()].map((t) => ({
69
+ return [...this.storeFor(kind).values()].map((t) => ({
60
70
  id: t.id,
61
71
  displayName: t.displayName
62
72
  }));
@@ -157,5 +167,5 @@ function makeDeployHandle(opts) {
157
167
  }
158
168
 
159
169
  export { ApiVersionMismatchError, DeployTargetNotFoundError, MissingTargetError, RegistrationError, buildStrategySchema, createPluginRegistry, getDeployTarget, listDeployTargets, makeDeployHandle, pluginRegistry, pollUntil, resolveDeployTarget, sleep };
160
- //# sourceMappingURL=chunk-6E6PKKAD.js.map
161
- //# sourceMappingURL=chunk-6E6PKKAD.js.map
170
+ //# sourceMappingURL=chunk-G5SUWZEU.js.map
171
+ //# sourceMappingURL=chunk-G5SUWZEU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../plugin-registry/src/errors.ts","../plugin-registry/src/internal.ts","../plugin-registry/src/deploy-handle.ts","../plugin-registry/src/deploy-helpers.ts"],"names":["target"],"mappings":"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","file":"chunk-G5SUWZEU.js","sourcesContent":["/**\n * Error types thrown by the plugin registry and deploy resolution.\n *\n * Each carries a stable `.name` so callers can branch on identity without\n * importing the class (cross-package / cross-bundle `instanceof` is unreliable).\n */\n\n/** Thrown by `register()` when a target id is already registered for its kind. */\nexport class RegistrationError extends Error {\n constructor(kind: string, id: string) {\n super(`A \"${kind}\" target with id \"${id}\" is already registered.`);\n this.name = \"RegistrationError\";\n }\n}\n\n/** Thrown when a lookup by id finds no registered target for the given kind. */\nexport class MissingTargetError extends Error {\n constructor(kind: string, id: string) {\n super(`No \"${kind}\" target registered with id \"${id}\".`);\n this.name = \"MissingTargetError\";\n }\n}\n\n/** Thrown by `register()` when a target declares an unsupported `apiVersion`. */\nexport class ApiVersionMismatchError extends Error {\n constructor(kind: string, id: string, got: unknown) {\n super(\n `Target \"${id}\" (kind \"${kind}\") declares apiVersion ${String(got)}; registry requires apiVersion 1.`,\n );\n this.name = \"ApiVersionMismatchError\";\n }\n}\n\n/** Thrown by `resolveDeployTarget()` when the requested deploy target id is unknown. */\nexport class DeployTargetNotFoundError extends Error {\n constructor(id: string) {\n super(`No deploy target registered with id \"${id}\".`);\n this.name = \"DeployTargetNotFoundError\";\n }\n}\n","/**\n * Map-backed `PluginRegistry` implementation + the process-wide singleton.\n *\n * Storage is one Map per kind. Registration rejects duplicate ids\n * (`RegistrationError`) and any target not on `apiVersion: 1`\n * (`ApiVersionMismatchError`).\n */\n\nimport { ApiVersionMismatchError, RegistrationError } from \"./errors.js\";\nimport type { PluginRegistry, Target, TargetKind, TargetMeta } from \"./registry.js\";\n\ntype AnyTarget = { id: string; displayName: string; apiVersion: unknown };\n\nclass MapPluginRegistry implements PluginRegistry {\n readonly apiVersion = 1 as const;\n\n // One Map per kind keeps lookups kind-scoped — a harness and a connector may\n // share an id without colliding.\n private readonly stores: Record<TargetKind, Map<string, AnyTarget>> = {\n harness: new Map(),\n connector: new Map(),\n deployTarget: new Map(),\n };\n\n /** The store of `kind`; a retired or unknown kind is a loud error, not a silent no-op. */\n private storeFor(kind: string): Map<string, AnyTarget> {\n if (Object.hasOwn(this.stores, kind)) return this.stores[kind as TargetKind];\n if (kind === \"driver\") {\n throw new Error(\n 'plugin kind \"driver\" was renamed to \"harness\" in @skaile/workspaces 6.0.0; register(\"harness\", …)',\n );\n }\n throw new Error(`unknown plugin kind \"${kind}\"`);\n }\n\n register<K extends TargetKind>(kind: K, target: Target<K>): void {\n const store = this.storeFor(kind);\n const t = target as unknown as AnyTarget;\n if (t.apiVersion !== 1) {\n throw new ApiVersionMismatchError(kind, t.id, t.apiVersion);\n }\n if (store.has(t.id)) {\n throw new RegistrationError(kind, t.id);\n }\n store.set(t.id, t);\n }\n\n unregister<K extends TargetKind>(kind: K, id: string): boolean {\n return this.storeFor(kind).delete(id);\n }\n\n get<K extends TargetKind>(kind: K, id: string): Target<K> | undefined {\n return this.storeFor(kind).get(id) as Target<K> | undefined;\n }\n\n list<K extends TargetKind>(kind: K): readonly TargetMeta[] {\n return [...this.storeFor(kind).values()].map((t) => ({\n id: t.id,\n displayName: t.displayName,\n }));\n }\n}\n\n/** Create a fresh, isolated registry — used by tests so cases never share state. */\nexport function createPluginRegistry(): PluginRegistry {\n return new MapPluginRegistry();\n}\n\n/** Process-wide default registry. Built-ins and loaded plugins register here. */\nexport const pluginRegistry: PluginRegistry = createPluginRegistry();\n","/**\n * Deploy handle contract + the `resolveDeployTarget` precedence resolver.\n *\n * A `DeployHandle` is the live, restorable result of standing up a workspace on\n * a deploy target. `resolveDeployTarget` picks which target+config to use with\n * an explicit override > yaml > default chain.\n */\n\nimport { DeployTargetNotFoundError } from \"./errors.js\";\nimport { pluginRegistry } from \"./internal.js\";\nimport type { PluginRegistry, TargetMeta } from \"./registry.js\";\nimport type { DeployTarget } from \"./targets.js\";\n\n/**\n * Live handle to a deployed workspace. `payload` is the target's own opaque\n * persistence slice (written to `.skaile/deploy/handle.json` and fed back into\n * `restore()`); the registry wrapper never inspects it.\n */\nexport interface DeployHandle<S = unknown> {\n readonly wsUrl: string;\n /** Redacted form of the auth token, safe to log. */\n readonly wsAuth?: string;\n readonly state: \"starting\" | \"ready\" | \"stopping\" | \"stopped\" | \"errored\";\n readonly payload: S;\n waitReady(timeoutMs?: number): Promise<void>;\n health(): Promise<{ healthy: boolean; detail?: string }>;\n logs?(opts?: { sinceMs?: number; follow?: boolean }): AsyncIterable<{ ts: number; line: string }>;\n stop(): Promise<void>;\n}\n\n/**\n * List the registered deploy targets as lightweight `{ id, displayName }` rows,\n * the symmetric counterpart to `listHarnesses()` / `listConnectors()`. Reads the\n * process-wide `pluginRegistry` by default, so call\n * `registerBuiltinDeployTargets()` (and load any plugins) first — unregistered\n * targets do not appear. Enough to populate a target picker without resolving a\n * config; use `getDeployTarget(id)` for the full target.\n */\nexport function listDeployTargets(\n registry: PluginRegistry = pluginRegistry,\n): readonly TargetMeta[] {\n return registry.list(\"deployTarget\");\n}\n\n/**\n * Look up a single registered deploy target by id, or `undefined` if none is\n * registered under that id. Thin wrapper over `pluginRegistry.get`, mirroring\n * `getConnector()`; unlike `resolveDeployTarget` it neither applies the\n * override/yaml/default precedence nor parses a config.\n */\nexport function getDeployTarget(\n id: string,\n registry: PluginRegistry = pluginRegistry,\n): DeployTarget | undefined {\n return registry.get(\"deployTarget\", id);\n}\n\n/** Outcome of `resolveDeployTarget`: the chosen target, its parsed config, and where it came from. */\nexport interface DeployResolution {\n target: DeployTarget;\n config: unknown;\n provenance: { source: \"default\" | \"yaml\" | \"override\"; reason?: string };\n}\n\n/**\n * Resolve which deploy target + config to use, with explicit precedence:\n * CLI override > `skaile.yaml` `deploy:` block > the built-in `local` default.\n * Config is parsed through the chosen target's `configSchema`, so validation\n * failures propagate to the caller.\n */\nexport async function resolveDeployTarget(\n yaml: { deploy?: { target: string; config?: unknown } },\n override?: { target: string; config?: unknown; reason: string },\n registry: PluginRegistry = pluginRegistry,\n): Promise<DeployResolution> {\n if (override) {\n const target = registry.get(\"deployTarget\", override.target);\n if (!target) throw new DeployTargetNotFoundError(override.target);\n return {\n target,\n config: target.configSchema.parse(override.config ?? {}),\n provenance: { source: \"override\", reason: override.reason },\n };\n }\n if (yaml.deploy) {\n const target = registry.get(\"deployTarget\", yaml.deploy.target);\n if (!target) throw new DeployTargetNotFoundError(yaml.deploy.target);\n return {\n target,\n config: target.configSchema.parse(yaml.deploy.config ?? {}),\n provenance: { source: \"yaml\" },\n };\n }\n const target = registry.get(\"deployTarget\", \"local\");\n if (!target) throw new DeployTargetNotFoundError(\"local\");\n return {\n target,\n config: target.configSchema.parse({}),\n provenance: { source: \"default\" },\n };\n}\n","/**\n * Shared building blocks for `DeployTarget` implementations.\n *\n * These lift the byte-for-byte duplication that had accumulated across the\n * provider packages (the `buildStrategy` enum, an abort-aware `sleep`, the\n * poll-until-ready loop, and the `DeployHandle` wrapper) into one authoritative\n * place — the package that already owns the `DeployHandle` contract.\n */\n\nimport * as z from \"zod\";\nimport type { DeployContext } from \"./context.js\";\nimport type { DeployHandle } from \"./deploy-handle.js\";\n\n/**\n * The authoritative build-strategy enum shared by every deploy target.\n * `local`/`managed` need an operator-supplied image; `remote` builds one.\n */\nexport const buildStrategySchema = z.enum([\"local\", \"remote\", \"managed\"]);\n\nexport type BuildStrategy = z.infer<typeof buildStrategySchema>;\n\n/**\n * Abort-aware sleep. Resolves after `ms`, or rejects immediately if `signal`\n * aborts first (so a cancelled deploy stops polling promptly).\n */\nexport async function sleep(ms: number, signal: AbortSignal): Promise<void> {\n return await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(new Error(\"aborted while polling\"));\n };\n if (signal.aborted) onAbort();\n else signal.addEventListener(\"abort\", onAbort);\n });\n}\n\n/** Options for {@link pollUntil}. */\nexport interface PollUntilOptions {\n /** Predicate polled until it returns true. */\n check: () => Promise<boolean>;\n /** Deadline relative to `Date.now()` at the first failing check. */\n timeoutMs: number;\n /** Delay between attempts, via the abort-aware {@link sleep}. */\n intervalMs: number;\n signal: AbortSignal;\n /** Descriptive message for the timeout error; defaults to \"timed out\". */\n timeoutMessage?: string;\n}\n\n/**\n * Poll `check()` until it returns true. Sleeps `intervalMs` between attempts\n * and throws once `Date.now()` passes the deadline. Generalizes the readiness\n * loops the deploy providers each re-implemented.\n */\nexport async function pollUntil(opts: PollUntilOptions): Promise<void> {\n const deadline = Date.now() + opts.timeoutMs;\n for (;;) {\n if (await opts.check()) return;\n if (Date.now() > deadline) {\n throw new Error(opts.timeoutMessage ?? \"timed out\");\n }\n await sleep(opts.intervalMs, opts.signal);\n }\n}\n\n/** Options for {@link makeDeployHandle}. */\nexport interface MakeDeployHandleOptions<S> {\n wsUrl: string;\n /** Source of `wsAuth` redaction and the abort `signal` for the ready routine. */\n ctx: DeployContext;\n payload: S;\n initialState: DeployHandle[\"state\"];\n /** Timeout passed to `ready` when `waitReady` is called without one. */\n defaultReadyTimeoutMs: number;\n /** Readiness routine; receives the EFFECTIVE timeout (caller's or the default). */\n ready: (timeoutMs: number, signal: AbortSignal) => Promise<void>;\n health: () => Promise<{ healthy: boolean; detail?: string }>;\n stop: () => Promise<void>;\n logs?: DeployHandle<S>[\"logs\"];\n}\n\n/**\n * Build a `DeployHandle` from per-target seams, replacing the wrapper each\n * provider had copy-pasted. Unlike those wrappers, `waitReady(timeoutMs)`\n * forwards the caller's timeout to `ready` instead of discarding it.\n */\nexport function makeDeployHandle<S>(opts: MakeDeployHandleOptions<S>): DeployHandle<S> {\n let state: DeployHandle[\"state\"] = opts.initialState;\n const handle: DeployHandle<S> = {\n wsUrl: opts.wsUrl,\n wsAuth: opts.ctx.wsAuth ? \"<redacted>\" : undefined,\n get state() {\n return state;\n },\n payload: opts.payload,\n async waitReady(timeoutMs?: number) {\n const effective = timeoutMs ?? opts.defaultReadyTimeoutMs;\n try {\n await opts.ready(effective, opts.ctx.signal);\n state = \"ready\";\n } catch (err) {\n state = \"errored\";\n throw err;\n }\n },\n health: opts.health,\n async stop() {\n state = \"stopping\";\n await opts.stop();\n state = \"stopped\";\n },\n };\n if (opts.logs) handle.logs = opts.logs;\n return handle;\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { getProviderPreset, registryCredentialEnv, providerCredentialEnvName, BUILTIN_DRIVER_CATALOG } from './chunk-KY4UXX7M.js';
2
- import { mergeRegistries, resolveEntryBaseUrl, normalizeEntryBaseUrl, registryEntries, isEntryEnabled, parseModelRef } from './chunk-MJHSLODD.js';
1
+ import { getProviderPreset, registryCredentialEnv, providerCredentialEnvName, BUILTIN_HARNESS_CATALOG } from './chunk-F2GOZMRA.js';
2
+ import { mergeRegistries, resolveEntryBaseUrl, normalizeEntryBaseUrl, registryEntries, isEntryEnabled, parseModelRef } from './chunk-LSI2IVFT.js';
3
3
 
4
- // bridge/src/provider-materialize/env-drivers.ts
5
- function resolveEnvDriverSession(config, processEnv = process.env) {
4
+ // bridge/src/provider-materialize/env-harnesses.ts
5
+ function resolveEnvHarnessSession(config, processEnv = process.env) {
6
6
  return {
7
7
  registry: config.registry ?? mergeRegistries([]),
8
8
  lookupEnv: { ...processEnv, ...config.env },
@@ -89,13 +89,13 @@ function resolveRegistryBinding(session) {
89
89
  function credentialsForEveryProvider(session) {
90
90
  return registryCredentialEnv(session.registry, { env: session.lookupEnv });
91
91
  }
92
- function assertDriverSpeaksSurface(driverId, productName, binding) {
93
- const supported = BUILTIN_DRIVER_CATALOG[driverId]?.surfaces;
92
+ function assertHarnessSpeaksSurface(harnessId, productName, binding) {
93
+ const supported = BUILTIN_HARNESS_CATALOG[harnessId]?.surfaces;
94
94
  if (!supported || supported.length === 0) return;
95
95
  const surface = binding.surface;
96
96
  if (!surface || supported.includes(surface)) return;
97
97
  throw new Error(
98
- `${productName} cannot speak the '${surface}' surface of AI provider entry '${binding.providerId}'. ${productName} speaks: ${supported.join(", ")}. Point this session's model at an entry with one of those surfaces, or run it on a driver that speaks '${surface}'.`
98
+ `${productName} cannot speak the '${surface}' surface of AI provider entry '${binding.providerId}'. ${productName} speaks: ${supported.join(", ")}. Point this session's model at an entry with one of those surfaces, or run it on a harness that speaks '${surface}'.`
99
99
  );
100
100
  }
101
101
  function registryModelEntries(session) {
@@ -113,10 +113,10 @@ function registryModelEntries(session) {
113
113
  }
114
114
  return out;
115
115
  }
116
- function bindSingleProviderEntry(driverId, productName, session) {
116
+ function bindSingleProviderEntry(harnessId, productName, session) {
117
117
  const binding = resolveRegistryBinding(session);
118
118
  if (!binding) return void 0;
119
- assertDriverSpeaksSurface(driverId, productName, binding);
119
+ assertHarnessSpeaksSurface(harnessId, productName, binding);
120
120
  return binding;
121
121
  }
122
122
  function harnessModelSelector(binding) {
@@ -136,6 +136,6 @@ function continueRoleBinding(session) {
136
136
  };
137
137
  }
138
138
 
139
- export { bindSingleProviderEntry, continueRoleBinding, credentialsForEveryProvider, entryBaseUrl, entryModelIds, entrySurface, harnessModelSelector, harnessProviderName, isStockCatalogEndpoint, registryModelEntries, resolveEnvDriverSession, resolveRegistryBinding, selectableEntries, versionedAnthropicBaseUrl };
140
- //# sourceMappingURL=chunk-7FHZB2QU.js.map
141
- //# sourceMappingURL=chunk-7FHZB2QU.js.map
139
+ export { bindSingleProviderEntry, continueRoleBinding, credentialsForEveryProvider, entryBaseUrl, entryModelIds, entrySurface, harnessModelSelector, harnessProviderName, isStockCatalogEndpoint, registryModelEntries, resolveEnvHarnessSession, resolveRegistryBinding, selectableEntries, versionedAnthropicBaseUrl };
140
+ //# sourceMappingURL=chunk-GEQSUC6U.js.map
141
+ //# sourceMappingURL=chunk-GEQSUC6U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../bridge/src/provider-materialize/env-harnesses.ts"],"names":[],"mappings":";;;;AAyEO,SAAS,wBAAA,CACd,MAAA,EACA,UAAA,GAAiD,OAAA,CAAQ,GAAA,EACtC;AACnB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,eAAA,CAAgB,EAAE,CAAA;AAAA,IAC/C,WAAW,EAAE,GAAG,UAAA,EAAY,GAAG,OAAO,GAAA,EAAI;AAAA,IAC1C,GAAI,OAAO,QAAA,GAAW,EAAE,UAAU,MAAA,CAAO,QAAA,KAAa,EAAC;AAAA,IACvD,GAAI,OAAO,KAAA,GAAQ,EAAE,OAAO,MAAA,CAAO,KAAA,KAAU;AAAC,GAChD;AACF;AA2BO,SAAS,aAAa,KAAA,EAA0D;AACrF,EAAA,IAAI,KAAA,CAAM,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA;AAChC,EAAA,OAAO,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,GAAG,OAAA,GAAU,MAAA;AACnE;AAcO,SAAS,aAAa,KAAA,EAA+C;AAC1E,EAAA,MAAM,QAAA,GACJ,mBAAA,CAAoB,KAAK,CAAA,KACxB,KAAA,CAAM,SAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,EAAG,QAAA,GAAW,MAAA,CAAA;AAC9D,EAAA,OAAO,qBAAA,CAAsB,QAAA,EAAU,YAAA,CAAa,KAAK,CAAC,CAAA;AAC5D;AASO,SAAS,yBAAA,CACd,SACA,OAAA,EACQ;AACR,EAAA,IAAI,OAAA,KAAY,sBAAsB,OAAO,OAAA;AAE7C,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAO,CAAA;AAC3B,IAAA,GAAA,CAAI,WAAW,CAAA,EAAG,GAAA,CAAI,SAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,GAAA,CAAA;AAClD,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAG,OAAO,CAAA,GAAA,CAAA;AAAA,EACnB;AACF;AAcO,SAAS,uBAAuB,KAAA,EAAoC;AACzE,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAChE,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,KAAM,qBAAA,CAAsB,OAAO,QAAA,EAAU,YAAA,CAAa,KAAK,CAAC,CAAA;AAC3F;AAaO,SAAS,mBAAA,CAAoB,YAAoB,KAAA,EAAmC;AACzF,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAChE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,sBAAA,CAAuB,KAAK,GAAG,OAAO,UAAA;AACtD,EAAA,OAAO,MAAA,CAAO,EAAA;AAChB;AAQO,SAAS,kBACd,QAAA,EACqC;AACrC,EAAA,OAAO,eAAA,CAAgB,QAAQ,CAAA,CAAE,MAAA;AAAA,IAC/B,CAAC,IAAA,KAAA,CACE,IAAA,CAAK,CAAC,EAAE,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,CAAC,EAAE,IAAA,KAAS,OAAA,KAAY,cAAA,CAAe,IAAA,CAAK,CAAC,CAAC;AAAA,GAClF;AACF;AAOO,SAAS,cAAc,KAAA,EAAoD;AAChF,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,GAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,SAAA,IAAa,EAAE,CAAA;AAAA,IACpC,GAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,YAAA,IAAgB,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,OAAO,EAAE,EAAA,KAAO,KAAA,CAAM,SAAA,IAAa,EAAC,CAAA,CAAG;AAAA,GAC1F;AACA,EAAA,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAO,CAAC,EAAA,EAAI,KAAA,CAAM,SAAA,GAAY,EAAE,CAAA,IAAK,EAAE,CAAC,CAAA;AACjE;AAEA,SAAS,eAAA,CACP,UAAA,EACA,KAAA,EACA,OAAA,EACA,iBACA,QAAA,EACsB;AACtB,EAAA,MAAM,OAAA,GAAU,aAAa,KAAK,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,aAAa,KAAK,CAAA;AAClC,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAI,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAQ;AAAA,IAC3C,GAAI,eAAA,KAAoB,MAAA,GAAY,EAAC,GAAI,EAAE,eAAA,EAAgB;AAAA,IAC3D,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,IAC7B,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,IAC7B,iBAAA,EAAmB,mBAAA,CAAoB,UAAA,EAAY,KAAK,CAAA;AAAA,IACxD;AAAA,GACF;AACF;AAUO,SAAS,uBACd,OAAA,EACkC;AAClC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,OAAA,CAAQ,QAAQ,CAAA;AAClD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEjC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,EAAU,IAAA,EAAK;AACxC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,CAAC,UAAA,EAAY,KAAK,CAAA,GAAI,QAAQ,CAAC,CAAA;AACrC,IAAA,OAAO,gBAAgB,UAAA,EAAY,KAAA,EAAO,MAAA,EAAW,MAAA,EAAW,EAAE,CAAA;AAAA,EACpE;AAKA,EAAA,MAAM,KAAA,GAAQ,QAAQ,IAAA,CAAK,CAAC,CAAC,EAAE,CAAA,KAAM,OAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,KAAA,EAAO,OAAO,eAAA,CAAgB,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,MAAA,EAAW,MAAA,EAAW,EAAE,CAAA;AAE9E,EAAA,MAAM,WAAW,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,QAAQ,KAAK,CAAA;AACxE,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,QAAQ,IAAA,CAAK,CAAC,CAAC,EAAE,CAAA,KAAM,EAAA,KAAO,QAAA,CAAS,UAAU,CAAA;AAC/D,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,eAAA;AAAA,IACL,MAAM,CAAC,CAAA;AAAA,IACP,MAAM,CAAC,CAAA;AAAA,IACP,QAAA,CAAS,OAAA;AAAA,IACT,QAAA,CAAS,eAAA;AAAA,IACT,QAAA,CAAS;AAAA,GACX;AACF;AAQO,SAAS,4BAA4B,OAAA,EAAoD;AAC9F,EAAA,OAAO,sBAAsB,OAAA,CAAQ,QAAA,EAAU,EAAE,GAAA,EAAK,OAAA,CAAQ,WAAW,CAAA;AAC3E;AASO,SAAS,0BAAA,CACd,SAAA,EACA,WAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,SAAA,GAAY,uBAAA,CAAwB,SAAS,CAAA,EAAG,QAAA;AACtD,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAC1C,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,EAAA,IAAI,CAAC,OAAA,IAAW,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7C,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,EAAG,WAAW,CAAA,mBAAA,EAAsB,OAAO,mCACrC,OAAA,CAAQ,UAAU,CAAA,GAAA,EAAM,WAAW,YAAY,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,4GAEhC,OAAO,CAAA,EAAA;AAAA,GAClD;AACF;AAYO,SAAS,qBAAqB,OAAA,EAA0C;AAC7E,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,iBAAA,CAAkB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACrE,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,UAAA,EAAY,KAAK,CAAA;AACvD,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,UAAA;AAC7B,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,eAAe,CAAA,IAAK,aAAA,CAAc,KAAK,CAAA,EAAG;AAC/D,MAAA,MAAM,EAAA,GAAK,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA;AAC1C,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,CAAA;AAAA,IAChD;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAWO,SAAS,uBAAA,CACd,SAAA,EACA,WAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,OAAA,GAAU,uBAAuB,OAAO,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,0BAAA,CAA2B,SAAA,EAAW,aAAa,OAAO,CAAA;AAC1D,EAAA,OAAO,OAAA;AACT;AAOO,SAAS,qBAAqB,OAAA,EAAmD;AACtF,EAAA,IAAI,CAAC,OAAA,CAAQ,eAAA,EAAiB,OAAO,MAAA;AACrC,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,iBAAiB,CAAA,CAAA,EAAI,QAAQ,eAAe,CAAA,CAAA;AAChE;AAgCO,SAAS,oBAAoB,OAAA,EAA6D;AAC/F,EAAA,MAAM,OAAA,GAAU,uBAAuB,OAAO,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ,iBAAA;AAAA,IAClB,GAAI,QAAQ,eAAA,GAAkB,EAAE,OAAO,OAAA,CAAQ,eAAA,KAAoB,EAAC;AAAA,IACpE,GAAI,OAAA,CAAQ,OAAA,GACR,EAAE,OAAA,EAAS,yBAAA,CAA0B,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,EAAE,GACvE,EAAC;AAAA,IACL,SAAA,EAAW,yBAAA,CAA0B,OAAA,CAAQ,UAAU;AAAA,GACzD;AACF","file":"chunk-GEQSUC6U.js","sourcesContent":["/**\n * Registry adapter for the **env-shaped CLI harnesses** — Gemini, Qwen, OpenCode,\n * Goose and Continue (§2.3).\n *\n * These harnesses take their endpoint from the environment rather than from a\n * config file, so the adapter's job is three things: resolve which registry\n * entry the session's model selector names, refuse at start when that entry\n * speaks a wire surface the harness cannot, and hand the harness the\n * provider-side model id it must put on the command line.\n *\n * Two pluralities meet here (`BUILTIN_HARNESS_CATALOG.providerPlurality`):\n *\n * - `single` — Gemini and Qwen address exactly one endpoint. The bound entry\n * supplies the credential *and* the base URL, and a surface mismatch is\n * fatal: a Gemini CLI pointed at an `openai-completions` endpoint cannot\n * work, and failing at start names the surface instead of leaving the user\n * with an opaque error mid-turn.\n * - `credentials-n` — OpenCode, Goose and Continue accept every enabled\n * entry's credential at once and select one active model. The credential\n * fan-out is `registryCredentialEnv`; the active model is this module's\n * `<provider>/<model>` binding.\n *\n * Writing the per-endpoint config files those three need for *custom*\n * endpoints (`opencode.json`, Goose `custom_providers/*.json`, Continue\n * `config.yaml`) is the file half, and is deliberately not here.\n *\n * @see PROVIDER-CONFIG-PLAN.md §2.3\n */\n\nimport {\n type AIProviderLlmEntry,\n type AIProviderSurface,\n isEntryEnabled,\n type MergedAIProviderRegistry,\n mergeRegistries,\n normalizeEntryBaseUrl,\n parseModelRef,\n registryEntries,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport type { ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig } from \"../types.js\";\nimport { providerCredentialEnvName, registryCredentialEnv } from \"./credential-env.js\";\n\n/**\n * Everything a CLI harness needs to know about this session's AI providers,\n * resolved once from its {@link AgentConfig}.\n */\nexport interface EnvHarnessSession {\n /** The merged registry this session may address. Empty when none was configured. */\n registry: MergedAIProviderRegistry;\n /**\n * Environment `credential.ref` lookups resolve against — the process\n * environment widened with `config.env`, which is where the session\n * boundary delivered every resolved `SKAILE_AIP_<ID>_KEY`.\n */\n lookupEnv: Record<string, string | undefined>;\n /** Model selector: `<providerId>/<modelId>`, a bare id, or `@role`. */\n modelRef?: string;\n /** Roles table an `@role` selector resolves through. */\n roles?: Record<string, string>;\n}\n\n/**\n * Resolve the session's providers once, from its {@link AgentConfig}.\n *\n * `config.env` is folded into `lookupEnv` rather than kept apart: it is part\n * of the session's environment, not an extra, and a credential or\n * `*_BASE_URL` delivered there must be visible exactly as the child will see\n * it.\n */\nexport function resolveEnvHarnessSession(\n config: AgentConfig,\n processEnv: Record<string, string | undefined> = process.env,\n): EnvHarnessSession {\n return {\n registry: config.registry ?? mergeRegistries([]),\n lookupEnv: { ...processEnv, ...config.env },\n ...(config.modelRef ? { modelRef: config.modelRef } : {}),\n ...(config.roles ? { roles: config.roles } : {}),\n };\n}\n\n/** One resolved endpoint + model — everything a harness needs to spawn. */\nexport interface RegistryModelBinding {\n /** Registry id of the selected entry. */\n providerId: string;\n /** The selected entry itself. */\n entry: AIProviderLlmEntry;\n /** Logical model id, after `@role` expansion and before `model_map`. */\n modelId?: string;\n /** Provider-side model id — what goes on the wire / command line. */\n providerModelId?: string;\n /** Wire protocol, from the entry or its preset. */\n surface?: AIProviderSurface;\n /** Resolved endpoint, from the entry, its transport params, or its preset. */\n baseUrl?: string;\n /**\n * The provider name the *harness* knows this endpoint by — a catalog preset\n * id for a stock endpoint, the registry id for anything custom. See\n * {@link harnessProviderName}.\n */\n harnessProviderId: string;\n /** Non-fatal notes from `parseModelRef` (dangling role, disabled provider). */\n warnings: string[];\n}\n\n/** The entry's wire surface: its own, else its preset's. */\nexport function entrySurface(entry: AIProviderLlmEntry): AIProviderSurface | undefined {\n if (entry.surface) return entry.surface;\n return entry.preset ? getProviderPreset(entry.preset)?.surface : undefined;\n}\n\n/**\n * The entry's endpoint: its literal or transport-derived URL, else its\n * preset's literal, in the canonical spelling for its surface\n * (`normalizeEntryBaseUrl`: an `anthropic-messages` endpoint is its host root,\n * so `https://api.anthropic.com/v1` reads as `https://api.anthropic.com`).\n * Transport templates that still carry `{param}` placeholders never come\n * back — `resolveEntryBaseUrl` withholds those, and a preset's template is not\n * a URL.\n *\n * Every adapter reads the endpoint here and only re-spells it for a client\n * that wants something else ({@link versionedAnthropicBaseUrl}).\n */\nexport function entryBaseUrl(entry: AIProviderLlmEntry): string | undefined {\n const resolved =\n resolveEntryBaseUrl(entry) ??\n (entry.preset ? getProviderPreset(entry.preset)?.base_url : undefined);\n return normalizeEntryBaseUrl(resolved, entrySurface(entry));\n}\n\n/**\n * An `anthropic-messages` endpoint spelled for a client that appends only\n * `/messages` — `@ai-sdk/anthropic` (OpenCode) and Continue — rather than\n * `/v1/messages` like the Claude CLI, the Anthropic SDK and Goose. `baseUrl`\n * must already be canonical ({@link entryBaseUrl}); every other surface passes\n * through unchanged.\n */\nexport function versionedAnthropicBaseUrl(\n baseUrl: string,\n surface: AIProviderSurface | undefined,\n): string {\n if (surface !== \"anthropic-messages\") return baseUrl;\n // Append to the path, not the string: a query or fragment stays at the end.\n try {\n const url = new URL(baseUrl);\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/v1`;\n return url.toString();\n } catch {\n return `${baseUrl}/v1`;\n }\n}\n\n/**\n * True when a `credentials-n` harness already knows this endpoint under its\n * own catalog name — the entry names a preset and did not move it somewhere\n * else. Both sides are compared canonically, so `https://api.anthropic.com/v1`\n * is still the `anthropic` preset's endpoint.\n *\n * The one rule both halves of §2.3 read: it decides the name the env half\n * puts on the command line ({@link harnessProviderName}) *and* whether the\n * file half has to describe the endpoint at all. Reading it twice is what\n * keeps `-m <name>/<model>` and the generated provider file talking about the\n * same thing.\n */\nexport function isStockCatalogEndpoint(entry: AIProviderLlmEntry): boolean {\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n if (!preset) return false;\n return entryBaseUrl(entry) === normalizeEntryBaseUrl(preset.base_url, entrySurface(entry));\n}\n\n/**\n * The provider name to give a `credentials-n` harness (`-m <name>/<model>`,\n * `GOOSE_PROVIDER`).\n *\n * A stock catalog endpoint is named by its preset, because that is the name\n * OpenCode's models.dev list and Goose's built-in provider table already use —\n * `prod-claude: {preset: anthropic}` is still Anthropic to them. An entry with\n * an endpoint of its own is named by its registry id: no built-in table knows\n * it, so the id is what its generated provider file is keyed by (the file half\n * of §2.3).\n */\nexport function harnessProviderName(providerId: string, entry: AIProviderLlmEntry): string {\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n if (!preset || !isStockCatalogEndpoint(entry)) return providerId;\n return preset.id;\n}\n\n/**\n * Enabled `llm`/`embed` entries, in registry order. Also the set the file\n * adapters render (`opencode-config.ts`, `goose-custom-providers.ts`,\n * `continue-config-yaml.ts`): the env half and the file half must agree on\n * which entries exist before they can agree on what to call them.\n */\nexport function selectableEntries(\n registry: MergedAIProviderRegistry,\n): Array<[string, AIProviderLlmEntry]> {\n return registryEntries(registry).filter(\n (pair): pair is [string, AIProviderLlmEntry] =>\n (pair[1].kind === \"llm\" || pair[1].kind === \"embed\") && isEntryEnabled(pair[1]),\n );\n}\n\n/**\n * The provider-side model ids an entry declares, as `[logicalId, providerId]`\n * pairs in declaration order: every `model_map` entry, plus every\n * `capabilities` key the map does not rename.\n */\nexport function entryModelIds(entry: AIProviderLlmEntry): Array<[string, string]> {\n const logicalIds = [\n ...Object.keys(entry.model_map ?? {}),\n ...Object.keys(entry.capabilities ?? {}).filter((id) => !(id in (entry.model_map ?? {}))),\n ];\n return logicalIds.map((id) => [id, entry.model_map?.[id] ?? id]);\n}\n\nfunction describeBinding(\n providerId: string,\n entry: AIProviderLlmEntry,\n modelId: string | undefined,\n providerModelId: string | undefined,\n warnings: string[],\n): RegistryModelBinding {\n const surface = entrySurface(entry);\n const baseUrl = entryBaseUrl(entry);\n return {\n providerId,\n entry,\n ...(modelId === undefined ? {} : { modelId }),\n ...(providerModelId === undefined ? {} : { providerModelId }),\n ...(surface ? { surface } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n harnessProviderId: harnessProviderName(providerId, entry),\n warnings,\n };\n}\n\n/**\n * Resolve the session's endpoint + model.\n *\n * With no selector the first entry in registry order wins and the harness\n * keeps its own default model — exactly what an absent `model` meant before\n * the registry existed. Returns `undefined` when no entry can serve a model\n * (an empty, fully-disabled or voice-only registry).\n */\nexport function resolveRegistryBinding(\n session: EnvHarnessSession,\n): RegistryModelBinding | undefined {\n const entries = selectableEntries(session.registry);\n if (entries.length === 0) return undefined;\n\n const selector = session.modelRef?.trim();\n if (!selector) {\n const [providerId, entry] = entries[0];\n return describeBinding(providerId, entry, undefined, undefined, []);\n }\n\n // A selector that is exactly an entry id names the endpoint and nothing\n // else: the harness keeps its own default model. `parseModelRef` would read\n // it as a bare *model* id and fall back to registry order.\n const named = entries.find(([id]) => id === selector);\n if (named) return describeBinding(named[0], named[1], undefined, undefined, []);\n\n const resolved = parseModelRef(selector, session.registry, session.roles);\n if (!resolved) return undefined;\n const match = entries.find(([id]) => id === resolved.providerId);\n if (!match) return undefined;\n return describeBinding(\n match[0],\n match[1],\n resolved.modelId,\n resolved.providerModelId,\n resolved.warnings,\n );\n}\n\n/**\n * Every credential a `credentials-n` harness may use: one variable per\n * enabled registry entry. OpenCode, Goose and Continue have always received\n * *all* of them, not just the selected endpoint's, because they route across\n * providers inside a single session.\n */\nexport function credentialsForEveryProvider(session: EnvHarnessSession): Record<string, string> {\n return registryCredentialEnv(session.registry, { env: session.lookupEnv });\n}\n\n/**\n * Throw when the bound entry speaks a wire surface this harness cannot.\n *\n * The message names the offending surface and lists the ones the harness does\n * speak (`BUILTIN_HARNESS_CATALOG[harnessId].surfaces`). An entry that declares\n * no surface and names no preset is not judged — there is nothing to compare.\n */\nexport function assertHarnessSpeaksSurface(\n harnessId: string,\n productName: string,\n binding: RegistryModelBinding,\n): void {\n const supported = BUILTIN_HARNESS_CATALOG[harnessId]?.surfaces;\n if (!supported || supported.length === 0) return;\n const surface = binding.surface;\n if (!surface || supported.includes(surface)) return;\n throw new Error(\n `${productName} cannot speak the '${surface}' surface of AI provider entry ` +\n `'${binding.providerId}'. ${productName} speaks: ${supported.join(\", \")}. ` +\n `Point this session's model at an entry with one of those surfaces, ` +\n `or run it on a harness that speaks '${surface}'.`,\n );\n}\n\n/**\n * The models a `credentials-n` harness can be pointed at, straight from the\n * registry: every enabled entry's mapped ids, namespaced the way the harness\n * takes them (`-m <provider>/<model>`).\n *\n * These harnesses have no model-list endpoint of their own — OpenCode reads\n * models.dev, Goose and Continue read their config — so the registry is the\n * only list that describes *this* session's reachable models, and it needs no\n * network call to produce.\n */\nexport function registryModelEntries(session: EnvHarnessSession): ModelEntry[] {\n const out: ModelEntry[] = [];\n const seen = new Set<string>();\n for (const [providerId, entry] of selectableEntries(session.registry)) {\n const harnessId = harnessProviderName(providerId, entry);\n const label = entry.label ?? providerId;\n for (const [logicalId, providerModelId] of entryModelIds(entry)) {\n const id = `${harnessId}/${providerModelId}`;\n if (seen.has(id)) continue;\n seen.add(id);\n out.push({ id, name: `${label} ${logicalId}` });\n }\n }\n return out;\n}\n\n/**\n * Resolve the binding and enforce the surface — what a `single`-plurality\n * harness does at start.\n *\n * The registry is authoritative: pointing the harness at an entry it cannot\n * speak throws rather than silently running somewhere else. `undefined` when\n * the session configured no endpoint at all, which leaves the harness on its\n * own native auth.\n */\nexport function bindSingleProviderEntry(\n harnessId: string,\n productName: string,\n session: EnvHarnessSession,\n): RegistryModelBinding | undefined {\n const binding = resolveRegistryBinding(session);\n if (!binding) return undefined;\n assertHarnessSpeaksSurface(harnessId, productName, binding);\n return binding;\n}\n\n/**\n * The `<provider>/<model>` selector a `credentials-n` harness takes on its\n * command line (`opencode -m`). `undefined` when no model was selected — the\n * harness then uses its own default rather than being handed a bare provider.\n */\nexport function harnessModelSelector(binding: RegistryModelBinding): string | undefined {\n if (!binding.providerModelId) return undefined;\n return `${binding.harnessProviderId}/${binding.providerModelId}`;\n}\n\n/**\n * Continue's model selection is a **role binding**, not a flag: `cn` has no\n * `--model` option (only `--config <slug>`), and its `config.yaml` binds each\n * model to roles (`chat`, `edit`, `apply`, …). This is the binding for the\n * role a headless `cn -p` turn runs as, and the shape its generated\n * `config.yaml` is rendered from.\n *\n * `apiKeyEnv` is a variable *name*: the secret travels in the child\n * environment, never in a rendered config.\n */\nexport interface ContinueRoleBinding {\n /** Continue role this model serves. A headless prompt is a `chat` turn. */\n role: \"chat\";\n /** Registry id of the entry. */\n providerId: string;\n /** Provider name Continue knows the endpoint by. */\n provider: string;\n /** Provider-side model id. */\n model?: string;\n /** Endpoint, when the entry states one, spelled the way Continue's `apiBase` wants it. */\n apiBase?: string;\n /** Env var holding the credential — the name, never the value. */\n apiKeyEnv: string;\n}\n\n/**\n * Map the session's chosen endpoint onto the Continue role a headless turn\n * runs as. `undefined` when the session configured no endpoint — `cn` then\n * runs against whatever its own `config.yaml` / Hub login provides.\n */\nexport function continueRoleBinding(session: EnvHarnessSession): ContinueRoleBinding | undefined {\n const binding = resolveRegistryBinding(session);\n if (!binding) return undefined;\n return {\n role: \"chat\",\n providerId: binding.providerId,\n provider: binding.harnessProviderId,\n ...(binding.providerModelId ? { model: binding.providerModelId } : {}),\n ...(binding.baseUrl\n ? { apiBase: versionedAnthropicBaseUrl(binding.baseUrl, binding.surface) }\n : {}),\n apiKeyEnv: providerCredentialEnvName(binding.providerId),\n };\n}\n"]}
@@ -1,12 +1,12 @@
1
- import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-XTO436PV.js';
2
- import { resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-7FHZB2QU.js';
3
- import { getStaticModels, fetchProviderModels } from './chunk-BBWSGVVE.js';
4
- import { getBridgeLogger, registryDriverConfig } from './chunk-34C2EKWJ.js';
5
- import { getProviderPreset, BUILTIN_DRIVER_CATALOG, entryCredentialValue } from './chunk-KY4UXX7M.js';
1
+ import { SubprocessCliHarness, extractText, extractCost, extractTokens } from './chunk-HK7HMEPT.js';
2
+ import { getStaticModels, fetchProviderModels } from './chunk-7CV3HFWJ.js';
3
+ import { resolveEnvHarnessSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-GEQSUC6U.js';
4
+ import { getBridgeLogger, registryHarnessConfig } from './chunk-UVVVR4XO.js';
5
+ import { getProviderPreset, BUILTIN_HARNESS_CATALOG, entryCredentialValue } from './chunk-F2GOZMRA.js';
6
6
  import * as z from 'zod';
7
7
 
8
8
  var GOOGLE_DEFAULT_BASE_URL = getProviderPreset("google")?.base_url;
9
- var GeminiFamilyDriver = class extends SubprocessCliDriver {
9
+ var GeminiFamilyHarness = class extends SubprocessCliHarness {
10
10
  handleJson(json) {
11
11
  switch (json?.type) {
12
12
  case "init":
@@ -55,7 +55,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
55
55
  bindingResolved = false;
56
56
  /** This session's AI providers, resolved once from the config. */
57
57
  providerSession() {
58
- this.providers ??= resolveEnvDriverSession(this.config);
58
+ this.providers ??= resolveEnvHarnessSession(this.config);
59
59
  return this.providers;
60
60
  }
61
61
  /**
@@ -70,7 +70,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
70
70
  registryBinding() {
71
71
  if (this.bindingResolved) return this.boundEntry;
72
72
  const binding = bindSingleProviderEntry(
73
- this.driverInfo.id,
73
+ this.harnessInfo.id,
74
74
  this.productName,
75
75
  this.providerSession()
76
76
  );
@@ -98,8 +98,8 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
98
98
  return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;
99
99
  }
100
100
  };
101
- var GeminiDriver = class extends GeminiFamilyDriver {
102
- driverInfo = {
101
+ var GeminiHarness = class extends GeminiFamilyHarness {
102
+ harnessInfo = {
103
103
  id: "gemini",
104
104
  name: "Gemini CLI",
105
105
  modelAgnostic: false,
@@ -170,19 +170,19 @@ var GeminiDriver = class extends GeminiFamilyDriver {
170
170
  return result.ok && result.models.length > 0 ? result.models : getStaticModels("google");
171
171
  }
172
172
  };
173
- var geminiDriverTarget = {
173
+ var geminiHarnessTarget = {
174
174
  id: "gemini",
175
- displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? "Gemini CLI",
175
+ displayName: BUILTIN_HARNESS_CATALOG.gemini?.name ?? "Gemini CLI",
176
176
  apiVersion: 1,
177
177
  configSchema: z.custom(() => true),
178
- create: async (config, _ctx) => new GeminiDriver(config),
179
- listModels: async (registry, options) => new GeminiDriver({
178
+ create: async (config, _ctx) => new GeminiHarness(config),
179
+ listModels: async (registry, options) => new GeminiHarness({
180
180
  cwd: process.cwd(),
181
181
  sessionId: "model-list",
182
- ...registryDriverConfig(registry, options)
182
+ ...registryHarnessConfig(registry, options)
183
183
  }).listModels()
184
184
  };
185
185
 
186
- export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget };
187
- //# sourceMappingURL=chunk-AIBAOXDU.js.map
188
- //# sourceMappingURL=chunk-AIBAOXDU.js.map
186
+ export { GeminiFamilyHarness, GeminiHarness, geminiHarnessTarget };
187
+ //# sourceMappingURL=chunk-GN4VVSAA.js.map
188
+ //# sourceMappingURL=chunk-GN4VVSAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../bridge/src/harnesses/gemini.ts"],"names":[],"mappings":"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","file":"chunk-GN4VVSAA.js","sourcesContent":["import type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport {\n bindSingleProviderEntry,\n type EnvHarnessSession,\n type RegistryModelBinding,\n resolveEnvHarnessSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-harnesses.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, HarnessInfo, ReconfigureApplied } from \"../types.js\";\nimport {\n extractCost,\n extractText,\n extractTokens,\n SubprocessCliHarness,\n} from \"./_subprocess-cli.js\";\n\n/**\n * The Gemini API host the CLI talks to unless told otherwise — the catalog's\n * `google` preset, so the two can never drift apart.\n */\nconst GOOGLE_DEFAULT_BASE_URL = getProviderPreset(\"google\")?.base_url;\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/harnesses#gemini-harness\n */\nexport abstract class GeminiFamilyHarness extends SubprocessCliHarness {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n this.captureSession(json.sessionId ?? json.session_id);\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n\n // ── Registry binding ──────────────────────────────────────────────────────\n\n private providers?: EnvHarnessSession;\n private boundEntry?: RegistryModelBinding;\n private bindingResolved = false;\n\n /** This session's AI providers, resolved once from the config. */\n protected providerSession(): EnvHarnessSession {\n this.providers ??= resolveEnvHarnessSession(this.config);\n return this.providers;\n }\n\n /**\n * The AI provider entry this session's model selector names, memoized until\n * the model changes.\n *\n * Gemini CLI and Qwen Code are `single`-plurality harnesses (§2.3): they\n * address one endpoint, so the bound entry supplies both the credential and\n * the base URL. Resolving through {@link bindSingleProviderEntry} is what\n * puts the surface check — which throws — on the start path.\n */\n protected registryBinding(): RegistryModelBinding | undefined {\n if (this.bindingResolved) return this.boundEntry;\n const binding = bindSingleProviderEntry(\n this.harnessInfo.id,\n this.productName,\n this.providerSession(),\n );\n for (const warning of binding?.warnings ?? []) this.log.warn(warning);\n this.boundEntry = binding;\n this.bindingResolved = true;\n return binding;\n }\n\n /**\n * Fail before the first spawn when the bound entry speaks a surface this\n * harness cannot — the error names the surface.\n */\n override async start(): Promise<void> {\n this.registryBinding();\n await super.start();\n }\n\n protected override onReconfigured(applied: ReconfigureApplied): void {\n if (applied.model !== undefined) {\n this.providers = undefined;\n this.bindingResolved = false;\n }\n }\n\n /** The provider-side model id the harness is actually run with. */\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n}\n\n/**\n * Agent harness for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google\n * models only (`surface: google-generative-ai`): the AI provider entry the\n * session's model selector names supplies `GEMINI_API_KEY`, the `-m` model id\n * and — for a non-default endpoint — `GOOGLE_GEMINI_BASE_URL`.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this harness runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/harnesses#gemini-harness\n */\nexport class GeminiHarness extends GeminiFamilyHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n const model = this.registryBinding()?.providerModelId ?? this.config.model;\n if (model) args.push(\"-m\", model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\", \"GOOGLE_GEMINI_BASE_URL\"]);\n const binding = this.registryBinding();\n if (!binding) return env;\n\n // The entry is the authority: inherited Google carriers are dropped so an\n // ambient key cannot authenticate a session pointed somewhere else.\n delete env.GEMINI_API_KEY;\n delete env.GOOGLE_API_KEY;\n delete env.GOOGLE_GEMINI_BASE_URL;\n const key = entryCredentialValue(binding.providerId, binding.entry, {\n env: this.providerSession().lookupEnv,\n });\n if (key) env.GEMINI_API_KEY = key;\n // Only a non-default endpoint is worth naming: Gemini CLI reads\n // GOOGLE_GEMINI_BASE_URL as an override of its own default host.\n if (binding.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL) {\n env.GOOGLE_GEMINI_BASE_URL = binding.baseUrl;\n }\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n /**\n * Discovery runs against the bound entry: its credential and, for a\n * non-default endpoint, its base URL. Without an entry the ambient\n * `GEMINI_API_KEY` is the last resort, and an unreachable API falls back to\n * the static Google catalog.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const session = this.providerSession();\n const binding = resolveRegistryBinding(session);\n const key = binding\n ? entryCredentialValue(binding.providerId, binding.entry, { env: session.lookupEnv })\n : session.lookupEnv.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\n \"google\",\n key,\n binding?.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL\n ? { baseUrl: binding.baseUrl }\n : {},\n );\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `HarnessTarget` wrapper for the gemini harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`.\n */\nexport const geminiHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_HARNESS_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiHarness(config),\n listModels: async (registry, options) =>\n new GeminiHarness({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,10 +1,10 @@
1
- import { ReconfigureLedger, classifyGenericErrorMessage, stripRunnerPrivateEnv } from './chunk-B4X2N7JQ.js';
2
- import { wrapAgentCommand, resolveAgentExec } from './chunk-YROR332M.js';
3
- import { AgentDriver } from './chunk-34C2EKWJ.js';
1
+ import { ReconfigureLedger, classifyGenericErrorMessage, stripRunnerPrivateEnv } from './chunk-XFIEVEU7.js';
2
+ import { wrapAgentCommand, resolveAgentExec } from './chunk-7DN6JKP2.js';
3
+ import { AgentHarness } from './chunk-UVVVR4XO.js';
4
4
  import { spawn } from 'child_process';
5
5
  import { createInterface } from 'readline';
6
6
 
7
- var SubprocessCliDriver = class extends AgentDriver {
7
+ var SubprocessCliHarness = class extends AgentHarness {
8
8
  /** `"jsonl"` streams events line-by-line; `"buffered"` parses all stdout once on exit. */
9
9
  mode = "jsonl";
10
10
  config;
@@ -107,7 +107,7 @@ var SubprocessCliDriver = class extends AgentDriver {
107
107
  procEmitter.on("error", (err) => {
108
108
  const detail = this.classifyProcessError(err);
109
109
  this.log.error("spawn error", err, { detail });
110
- this.pushError(detail);
110
+ this.pushError(detail, true);
111
111
  this.emit("agent-event", { type: "agent_end" });
112
112
  this.settleReject(Object.assign(new Error(detail.message), { detail }));
113
113
  });
@@ -137,7 +137,7 @@ var SubprocessCliDriver = class extends AgentDriver {
137
137
  });
138
138
  });
139
139
  }
140
- /** Out-of-band abort: terminates the current child. Driver stays usable for the next prompt. */
140
+ /** Out-of-band abort: terminates the current child. Harness stays usable for the next prompt. */
141
141
  async abort() {
142
142
  this.aborting = true;
143
143
  this.proc?.kill("SIGTERM");
@@ -260,11 +260,11 @@ ${message}` : message;
260
260
  this._sessionId = id;
261
261
  this.emit("agent-event", {
262
262
  type: "session_info",
263
- driverSessionId: id,
263
+ harnessSessionId: id,
264
264
  ...file ? { sessionFile: file } : {}
265
265
  });
266
266
  }
267
- /** Shared keyword classification + per-driver hint copy (mirrors omp/codex). */
267
+ /** Shared keyword classification + per-harness hint copy (mirrors omp/codex). */
268
268
  classifyMessage(message) {
269
269
  const generic = classifyGenericErrorMessage(message);
270
270
  if (!generic) {
@@ -282,7 +282,7 @@ ${message}` : message;
282
282
  /**
283
283
  * Explicit env whitelist forwarded to the child. Omits anything provisioned
284
284
  * by `provision_secrets` so user credentials stay out of the subprocess
285
- * environment. Always passes through the driver's test-seam vars and
285
+ * environment. Always passes through the harness's test-seam vars and
286
286
  * `FAKE_CLI_*`.
287
287
  *
288
288
  * `config.env` is merged **over** the whitelist, not in place of it. It used
@@ -347,7 +347,7 @@ ${message}` : message;
347
347
  if (exitErr && !this.sawResult) {
348
348
  this.pushAssistantEnd();
349
349
  this.flushToolResults();
350
- this.pushError(exitErr);
350
+ this.pushError(exitErr, true);
351
351
  this.emit("agent-event", { type: "agent_end" });
352
352
  this.settleReject(Object.assign(new Error(exitErr.message), { detail: exitErr }));
353
353
  return;
@@ -441,6 +441,6 @@ function extractCost(json) {
441
441
  return typeof c === "number" ? c : void 0;
442
442
  }
443
443
 
444
- export { SubprocessCliDriver, extractCost, extractText, extractTokens };
445
- //# sourceMappingURL=chunk-XTO436PV.js.map
446
- //# sourceMappingURL=chunk-XTO436PV.js.map
444
+ export { SubprocessCliHarness, extractCost, extractText, extractTokens };
445
+ //# sourceMappingURL=chunk-HK7HMEPT.js.map
446
+ //# sourceMappingURL=chunk-HK7HMEPT.js.map