@skaile/workspaces 3.27.1 → 4.1.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 (356) hide show
  1. package/CHANGELOG.md +482 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-QF7LGRUX.js → asset-feeds-VEPD5ZU7.js} +11 -9
  4. package/dist/asset-feeds-VEPD5ZU7.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +5 -3
  6. package/dist/asset-manager/index.js +11 -9
  7. package/dist/asset-manager/installer.js +8 -6
  8. package/dist/asset-manager/renderers.js +2 -2
  9. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  10. package/dist/bridge/codex-app-server.js +15 -1
  11. package/dist/bridge/drivers/claude-sdk.js +102 -55
  12. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  13. package/dist/bridge/drivers/codex.js +179 -23
  14. package/dist/bridge/drivers/codex.js.map +1 -1
  15. package/dist/bridge/drivers/continue.js +199 -7
  16. package/dist/bridge/drivers/continue.js.map +1 -1
  17. package/dist/bridge/drivers/echo.js +10 -4
  18. package/dist/bridge/drivers/echo.js.map +1 -1
  19. package/dist/bridge/drivers/gemini.js +7 -4
  20. package/dist/bridge/drivers/goose.js +160 -7
  21. package/dist/bridge/drivers/goose.js.map +1 -1
  22. package/dist/bridge/drivers/omp.js +321 -96
  23. package/dist/bridge/drivers/omp.js.map +1 -1
  24. package/dist/bridge/drivers/opencode.js +148 -13
  25. package/dist/bridge/drivers/opencode.js.map +1 -1
  26. package/dist/bridge/drivers/qwen.js +41 -11
  27. package/dist/bridge/drivers/qwen.js.map +1 -1
  28. package/dist/bridge/index.js +12 -9
  29. package/dist/bridge/src/cloud.d.ts +62 -71
  30. package/dist/bridge/src/cloud.d.ts.map +1 -1
  31. package/dist/bridge/src/codex/config-toml.d.ts +128 -0
  32. package/dist/bridge/src/codex/config-toml.d.ts.map +1 -0
  33. package/dist/bridge/src/codex/credentials.d.ts +26 -0
  34. package/dist/bridge/src/codex/credentials.d.ts.map +1 -1
  35. package/dist/bridge/src/codex/managed-driver.d.ts.map +1 -1
  36. package/dist/bridge/src/codex-app-server.d.ts.map +1 -1
  37. package/dist/bridge/src/drivers/_subprocess-cli.d.ts +9 -4
  38. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +1 -1
  39. package/dist/bridge/src/drivers/claude-sdk.d.ts +19 -11
  40. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  41. package/dist/bridge/src/drivers/codex.d.ts +26 -1
  42. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  43. package/dist/bridge/src/drivers/continue.d.ts +31 -5
  44. package/dist/bridge/src/drivers/continue.d.ts.map +1 -1
  45. package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
  46. package/dist/bridge/src/drivers/gemini.d.ts +34 -3
  47. package/dist/bridge/src/drivers/gemini.d.ts.map +1 -1
  48. package/dist/bridge/src/drivers/goose.d.ts +26 -2
  49. package/dist/bridge/src/drivers/goose.d.ts.map +1 -1
  50. package/dist/bridge/src/drivers/omp-models-yml.d.ts +216 -0
  51. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -0
  52. package/dist/bridge/src/drivers/omp.d.ts +26 -23
  53. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  54. package/dist/bridge/src/drivers/opencode.d.ts +28 -3
  55. package/dist/bridge/src/drivers/opencode.d.ts.map +1 -1
  56. package/dist/bridge/src/drivers/qwen.d.ts +10 -4
  57. package/dist/bridge/src/drivers/qwen.d.ts.map +1 -1
  58. package/dist/bridge/src/index.d.ts +3 -1
  59. package/dist/bridge/src/index.d.ts.map +1 -1
  60. package/dist/bridge/src/models.d.ts +118 -19
  61. package/dist/bridge/src/models.d.ts.map +1 -1
  62. package/dist/bridge/src/provider-catalog.d.ts +188 -0
  63. package/dist/bridge/src/provider-catalog.d.ts.map +1 -0
  64. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +117 -0
  65. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -0
  66. package/dist/bridge/src/provider-materialize/credential-env.d.ts +103 -0
  67. package/dist/bridge/src/provider-materialize/credential-env.d.ts.map +1 -0
  68. package/dist/bridge/src/provider-materialize/env-drivers.d.ts +209 -0
  69. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +1 -0
  70. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +127 -0
  71. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts.map +1 -0
  72. package/dist/bridge/src/provider-materialize/opencode-config.d.ts +127 -0
  73. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -0
  74. package/dist/bridge/src/provider-materialize/session-config-home.d.ts +63 -0
  75. package/dist/bridge/src/provider-materialize/session-config-home.d.ts.map +1 -0
  76. package/dist/bridge/src/provider-registry-derive.d.ts +59 -0
  77. package/dist/bridge/src/provider-registry-derive.d.ts.map +1 -0
  78. package/dist/bridge/src/registry.d.ts +19 -7
  79. package/dist/bridge/src/registry.d.ts.map +1 -1
  80. package/dist/bridge/src/runtime.d.ts.map +1 -1
  81. package/dist/bridge/src/types.d.ts +79 -60
  82. package/dist/bridge/src/types.d.ts.map +1 -1
  83. package/dist/bridge/src/validation.d.ts +2 -3
  84. package/dist/bridge/src/validation.d.ts.map +1 -1
  85. package/dist/{chunk-ZEXYTJ6Y.js → chunk-2GF42G2J.js} +6 -6
  86. package/dist/{chunk-ZEXYTJ6Y.js.map → chunk-2GF42G2J.js.map} +1 -1
  87. package/dist/{chunk-WWGU3REE.js → chunk-2K7NURDN.js} +7 -7
  88. package/dist/{chunk-WWGU3REE.js.map → chunk-2K7NURDN.js.map} +1 -1
  89. package/dist/{chunk-TCHEW3T2.js → chunk-2RO6N7DN.js} +6 -6
  90. package/dist/{chunk-TCHEW3T2.js.map → chunk-2RO6N7DN.js.map} +1 -1
  91. package/dist/{chunk-HSRHO7SK.js → chunk-3VSRJE3M.js} +155 -143
  92. package/dist/chunk-3VSRJE3M.js.map +1 -0
  93. package/dist/{chunk-T3YLZQS4.js → chunk-45LLHKQ2.js} +24 -3
  94. package/dist/chunk-45LLHKQ2.js.map +1 -0
  95. package/dist/chunk-5DQWB5TW.js +843 -0
  96. package/dist/chunk-5DQWB5TW.js.map +1 -0
  97. package/dist/{chunk-JMYOJ3PA.js → chunk-5HT5M5HX.js} +3 -3
  98. package/dist/{chunk-JMYOJ3PA.js.map → chunk-5HT5M5HX.js.map} +1 -1
  99. package/dist/{chunk-VN7DELUT.js → chunk-6AMTSRRO.js} +4 -4
  100. package/dist/{chunk-VN7DELUT.js.map → chunk-6AMTSRRO.js.map} +1 -1
  101. package/dist/{chunk-MX6TGDZ7.js → chunk-6DI4NTZN.js} +5 -5
  102. package/dist/{chunk-MX6TGDZ7.js.map → chunk-6DI4NTZN.js.map} +1 -1
  103. package/dist/{chunk-FFE7YLYO.js → chunk-AN7E2IL5.js} +7 -7
  104. package/dist/chunk-AN7E2IL5.js.map +1 -0
  105. package/dist/{chunk-A3HTL7XV.js → chunk-APDN5LW4.js} +3 -3
  106. package/dist/{chunk-A3HTL7XV.js.map → chunk-APDN5LW4.js.map} +1 -1
  107. package/dist/{chunk-FACPWN6P.js → chunk-ASU5IJZS.js} +9 -12
  108. package/dist/chunk-ASU5IJZS.js.map +1 -0
  109. package/dist/{chunk-J3IXRPZB.js → chunk-BTMDSMXF.js} +10 -10
  110. package/dist/{chunk-J3IXRPZB.js.map → chunk-BTMDSMXF.js.map} +1 -1
  111. package/dist/chunk-CTBUPYOQ.js +500 -0
  112. package/dist/chunk-CTBUPYOQ.js.map +1 -0
  113. package/dist/{chunk-K6VZQNTR.js → chunk-DKCFWSVW.js} +3 -3
  114. package/dist/{chunk-K6VZQNTR.js.map → chunk-DKCFWSVW.js.map} +1 -1
  115. package/dist/{chunk-MQASB52N.js → chunk-FEFTOV2Y.js} +3 -3
  116. package/dist/{chunk-MQASB52N.js.map → chunk-FEFTOV2Y.js.map} +1 -1
  117. package/dist/{chunk-XMULHVKX.js → chunk-FGTYTU6Q.js} +17 -15
  118. package/dist/chunk-FGTYTU6Q.js.map +1 -0
  119. package/dist/{chunk-WJVBJAM5.js → chunk-HHC2T7BM.js} +7 -7
  120. package/dist/{chunk-WJVBJAM5.js.map → chunk-HHC2T7BM.js.map} +1 -1
  121. package/dist/chunk-ILG4BXYE.js +936 -0
  122. package/dist/chunk-ILG4BXYE.js.map +1 -0
  123. package/dist/{chunk-E7HKNQTH.js → chunk-JXCUUZA3.js} +3 -4
  124. package/dist/chunk-JXCUUZA3.js.map +1 -0
  125. package/dist/{chunk-MBARHWMZ.js → chunk-K27T47OO.js} +79 -53
  126. package/dist/chunk-K27T47OO.js.map +1 -0
  127. package/dist/chunk-KSIRR5PL.js +142 -0
  128. package/dist/chunk-KSIRR5PL.js.map +1 -0
  129. package/dist/{chunk-SIREWRZE.js → chunk-KW7YIRYL.js} +3 -3
  130. package/dist/{chunk-SIREWRZE.js.map → chunk-KW7YIRYL.js.map} +1 -1
  131. package/dist/{chunk-3U3ZKYR7.js → chunk-LPF24MZA.js} +139 -29
  132. package/dist/chunk-LPF24MZA.js.map +1 -0
  133. package/dist/chunk-M2F5UXCX.js +187 -0
  134. package/dist/chunk-M2F5UXCX.js.map +1 -0
  135. package/dist/{chunk-DZ4UZOFB.js → chunk-M5H4DWIA.js} +3 -3
  136. package/dist/{chunk-DZ4UZOFB.js.map → chunk-M5H4DWIA.js.map} +1 -1
  137. package/dist/{chunk-PHBYB4XT.js → chunk-MLDJHV2U.js} +4 -8
  138. package/dist/chunk-MLDJHV2U.js.map +1 -0
  139. package/dist/{chunk-773WLEXL.js → chunk-MVBK4JUK.js} +3 -3
  140. package/dist/{chunk-773WLEXL.js.map → chunk-MVBK4JUK.js.map} +1 -1
  141. package/dist/{chunk-AN6NAFRT.js → chunk-N7B3LZ7V.js} +31 -6
  142. package/dist/chunk-N7B3LZ7V.js.map +1 -0
  143. package/dist/{chunk-EB72L5ZL.js → chunk-ORZBDXNS.js} +18 -30
  144. package/dist/chunk-ORZBDXNS.js.map +1 -0
  145. package/dist/{chunk-6H6HLMWG.js → chunk-OXTPH6HT.js} +3 -3
  146. package/dist/{chunk-6H6HLMWG.js.map → chunk-OXTPH6HT.js.map} +1 -1
  147. package/dist/{chunk-QSPCI4W2.js → chunk-PI244HAH.js} +175 -178
  148. package/dist/chunk-PI244HAH.js.map +1 -0
  149. package/dist/{chunk-NW65H5EV.js → chunk-PTETBRRC.js} +3 -3
  150. package/dist/{chunk-NW65H5EV.js.map → chunk-PTETBRRC.js.map} +1 -1
  151. package/dist/{chunk-UL4LD7KD.js → chunk-QQL3ET3J.js} +3 -3
  152. package/dist/{chunk-UL4LD7KD.js.map → chunk-QQL3ET3J.js.map} +1 -1
  153. package/dist/{chunk-GURXUF2J.js → chunk-R2GE2NXM.js} +95 -80
  154. package/dist/chunk-R2GE2NXM.js.map +1 -0
  155. package/dist/{chunk-IB4XKQMQ.js → chunk-REILIKVM.js} +3 -3
  156. package/dist/{chunk-IB4XKQMQ.js.map → chunk-REILIKVM.js.map} +1 -1
  157. package/dist/{chunk-3NCGSSCU.js → chunk-WLFRA5RM.js} +47 -45
  158. package/dist/chunk-WLFRA5RM.js.map +1 -0
  159. package/dist/{chunk-2BK4N3FS.js → chunk-WO65FA7W.js} +2 -7
  160. package/dist/chunk-WO65FA7W.js.map +1 -0
  161. package/dist/{chunk-72DG6GSB.js → chunk-YS4XBN7O.js} +4 -4
  162. package/dist/{chunk-72DG6GSB.js.map → chunk-YS4XBN7O.js.map} +1 -1
  163. package/dist/chunk-YSJKLJD4.js +32 -0
  164. package/dist/chunk-YSJKLJD4.js.map +1 -0
  165. package/dist/cli/index.js +765 -334
  166. package/dist/cli/index.js.map +1 -1
  167. package/dist/cli/src/commands/config.d.ts +17 -6
  168. package/dist/cli/src/commands/config.d.ts.map +1 -1
  169. package/dist/cli/src/commands/migrate-legacy-entry.d.ts +46 -0
  170. package/dist/cli/src/commands/migrate-legacy-entry.d.ts.map +1 -0
  171. package/dist/cli/src/commands/migrate-providers.d.ts +93 -0
  172. package/dist/cli/src/commands/migrate-providers.d.ts.map +1 -0
  173. package/dist/cli/src/commands/providers.d.ts +89 -0
  174. package/dist/cli/src/commands/providers.d.ts.map +1 -0
  175. package/dist/cli/src/commands/run.d.ts +1 -1
  176. package/dist/cli/src/commands/run.d.ts.map +1 -1
  177. package/dist/cli/src/setup.d.ts +46 -6
  178. package/dist/cli/src/setup.d.ts.map +1 -1
  179. package/dist/connectors/config.js +6 -4
  180. package/dist/connectors/index.js +15 -12
  181. package/dist/core/index.js +5 -3
  182. package/dist/core/provider-registry-credentials.d.ts +2 -0
  183. package/dist/core/provider-registry-credentials.js +5 -0
  184. package/dist/core/provider-registry-credentials.js.map +1 -0
  185. package/dist/core/provider-registry.d.ts +2 -0
  186. package/dist/core/provider-registry.js +4 -0
  187. package/dist/core/provider-registry.js.map +1 -0
  188. package/dist/core/runtime-assets.js +2 -2
  189. package/dist/core/src/index.d.ts +11 -4
  190. package/dist/core/src/index.d.ts.map +1 -1
  191. package/dist/core/src/process-alive.d.ts +28 -0
  192. package/dist/core/src/process-alive.d.ts.map +1 -0
  193. package/dist/core/src/provider-registry-credentials.d.ts +50 -0
  194. package/dist/core/src/provider-registry-credentials.d.ts.map +1 -0
  195. package/dist/core/src/provider-registry-files.d.ts +97 -0
  196. package/dist/core/src/provider-registry-files.d.ts.map +1 -0
  197. package/dist/core/src/provider-registry.d.ts +450 -0
  198. package/dist/core/src/provider-registry.d.ts.map +1 -0
  199. package/dist/core/src/settings.d.ts +18 -78
  200. package/dist/core/src/settings.d.ts.map +1 -1
  201. package/dist/core/src/workspace-config.d.ts +31 -47
  202. package/dist/core/src/workspace-config.d.ts.map +1 -1
  203. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  204. package/dist/core/workspace-config.js +1 -1
  205. package/dist/deploy/index.js +9 -16
  206. package/dist/deploy/index.js.map +1 -1
  207. package/dist/deploy/src/targets/local.d.ts.map +1 -1
  208. package/dist/deploy/src/targets/nix.d.ts.map +1 -1
  209. package/dist/deploy/src/targets/process-handle.d.ts +0 -2
  210. package/dist/deploy/src/targets/process-handle.d.ts.map +1 -1
  211. package/dist/discovery/index.js +2 -2
  212. package/dist/{ensure-sources-GEJGBQIP.js → ensure-sources-B3VWHD5M.js} +14 -12
  213. package/dist/ensure-sources-B3VWHD5M.js.map +1 -0
  214. package/dist/factory-assets/connectors/box.js +15 -12
  215. package/dist/factory-assets/connectors/deploy.js +15 -12
  216. package/dist/factory-assets/connectors/devserver/adapter.d.ts.map +1 -1
  217. package/dist/factory-assets/connectors/devserver.js +15 -12
  218. package/dist/factory-assets/connectors/flow/adapter.js +15 -12
  219. package/dist/factory-assets/connectors/flow/engine.js +6 -4
  220. package/dist/factory-assets/connectors/flow/index.d.ts +1 -1
  221. package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -1
  222. package/dist/factory-assets/connectors/flow/run-flow.d.ts +0 -3
  223. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  224. package/dist/factory-assets/connectors/flow/run-flow.js +16 -13
  225. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +31 -28
  226. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  227. package/dist/factory-assets/connectors/flow.js +15 -12
  228. package/dist/factory-assets/connectors/git.js +15 -12
  229. package/dist/factory-assets/connectors/gmail.js +15 -12
  230. package/dist/factory-assets/connectors/googledrive.js +15 -12
  231. package/dist/factory-assets/connectors/local.js +15 -12
  232. package/dist/factory-assets/connectors/mattermost.js +15 -12
  233. package/dist/factory-assets/connectors/memory.js +15 -12
  234. package/dist/factory-assets/connectors/minio.js +15 -12
  235. package/dist/factory-assets/connectors/postgres.js +15 -12
  236. package/dist/factory-assets/connectors/s3.js +15 -12
  237. package/dist/factory-assets/connectors/sharepoint.js +15 -12
  238. package/dist/factory-assets/connectors/sqlite.js +15 -12
  239. package/dist/factory-assets/connectors/static-server.js +15 -12
  240. package/dist/factory-assets/connectors/tunnel.js +15 -12
  241. package/dist/factory-assets/connectors/webdav.js +15 -12
  242. package/dist/factory-assets/connectors/xstate-store.js +15 -12
  243. package/dist/factory-assets/connectors/xstate.js +15 -12
  244. package/dist/{flows-MI2VM5JZ.js → flows-KIQH2VGA.js} +9 -7
  245. package/dist/{flows-MI2VM5JZ.js.map → flows-KIQH2VGA.js.map} +1 -1
  246. package/dist/{helpers-DXZOHX25.js → helpers-72W3NZ2L.js} +14 -12
  247. package/dist/{helpers-DXZOHX25.js.map → helpers-72W3NZ2L.js.map} +1 -1
  248. package/dist/library/index.js +8 -6
  249. package/dist/library/install.js +5 -3
  250. package/dist/{library-publish-CUPDG5NI.js → library-publish-YPHKEA6L.js} +18 -16
  251. package/dist/library-publish-YPHKEA6L.js.map +1 -0
  252. package/dist/{open-library-32XAI2LH.js → open-library-7OIUAGAH.js} +16 -14
  253. package/dist/{open-library-32XAI2LH.js.map → open-library-7OIUAGAH.js.map} +1 -1
  254. package/dist/paths-XLSP5K6C.js +18 -0
  255. package/dist/{paths-CZEH643M.js.map → paths-XLSP5K6C.js.map} +1 -1
  256. package/dist/plugin-registry/src/targets.d.ts +16 -2
  257. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  258. package/dist/{plugin-store-QJNBPIQK.js → plugin-store-V5BMOYGS.js} +7 -5
  259. package/dist/plugin-store-V5BMOYGS.js.map +1 -0
  260. package/dist/{project-RRHUCVXW.js → project-KNAZV4B3.js} +15 -13
  261. package/dist/{project-RRHUCVXW.js.map → project-KNAZV4B3.js.map} +1 -1
  262. package/dist/resolver/index.js +5 -3
  263. package/dist/runner/index.js +25 -22
  264. package/dist/runner/src/agent.d.ts +0 -2
  265. package/dist/runner/src/agent.d.ts.map +1 -1
  266. package/dist/runner/src/codex-init.d.ts.map +1 -1
  267. package/dist/runner/src/codex-resource-tools.d.ts.map +1 -1
  268. package/dist/runner/src/managed-codex-bootstrap.d.ts.map +1 -1
  269. package/dist/runner/src/resources.d.ts +1 -2
  270. package/dist/runner/src/resources.d.ts.map +1 -1
  271. package/dist/runner/src/serve.d.ts.map +1 -1
  272. package/dist/runner/src/session-builder.d.ts +31 -35
  273. package/dist/runner/src/session-builder.d.ts.map +1 -1
  274. package/dist/runner/src/session.d.ts +0 -2
  275. package/dist/runner/src/session.d.ts.map +1 -1
  276. package/dist/sdk/asset-manager.js +11 -9
  277. package/dist/sdk/bridge.js +12 -9
  278. package/dist/sdk/core.js +5 -3
  279. package/dist/sdk/flow.js +6 -4
  280. package/dist/sdk/index.js +25 -22
  281. package/dist/sdk/index.js.map +1 -1
  282. package/dist/sdk/resolver.js +5 -3
  283. package/dist/sdk/runner.js +25 -22
  284. package/dist/sdk/session.js +2 -2
  285. package/dist/sdk/types.js +1 -1
  286. package/dist/session/index.js +2 -2
  287. package/dist/setup-TG4KECRQ.js +435 -0
  288. package/dist/setup-TG4KECRQ.js.map +1 -0
  289. package/dist/{skills-IE3IWWB7.js → skills-KHBYF6AU.js} +7 -5
  290. package/dist/{skills-IE3IWWB7.js.map → skills-KHBYF6AU.js.map} +1 -1
  291. package/dist/{source-RHQLCTWA.js → source-7AFRUD3U.js} +17 -15
  292. package/dist/{source-RHQLCTWA.js.map → source-7AFRUD3U.js.map} +1 -1
  293. package/dist/{source-manifest-publish-DXMCSKU7.js → source-manifest-publish-JWOT7O3A.js} +19 -17
  294. package/dist/source-manifest-publish-JWOT7O3A.js.map +1 -0
  295. package/dist/tui/index.js +25 -23
  296. package/dist/tui/index.js.map +1 -1
  297. package/dist/tui/src/repl.d.ts +0 -2
  298. package/dist/tui/src/repl.d.ts.map +1 -1
  299. package/dist/types/index.js +1 -1
  300. package/dist/types/manifests.js +1 -1
  301. package/dist/types/src/index.d.ts +1 -1
  302. package/dist/types/src/index.d.ts.map +1 -1
  303. package/dist/types/src/lifecycle.d.ts +35 -10
  304. package/dist/types/src/lifecycle.d.ts.map +1 -1
  305. package/dist/types/src/manifests/agent.d.ts +116 -22
  306. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  307. package/dist/types/src/manifests/index.d.ts +2 -2
  308. package/dist/types/src/manifests/index.d.ts.map +1 -1
  309. package/dist/types/src/manifests/preset.d.ts +5 -5
  310. package/dist/types/src/runtime.d.ts +51 -5
  311. package/dist/types/src/runtime.d.ts.map +1 -1
  312. package/dist/types/src/version.d.ts +18 -2
  313. package/dist/types/src/version.d.ts.map +1 -1
  314. package/dist/validator-P5ESKTW5.js +5 -0
  315. package/dist/{validator-RN64BKFW.js.map → validator-P5ESKTW5.js.map} +1 -1
  316. package/dist/workspace-plugin/adapters/mcp.js +11 -9
  317. package/dist/workspace-plugin/adapters/omp.js +11 -11
  318. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  319. package/dist/workspace-plugin/index.js +1 -1
  320. package/dist/workspace-plugin/src/plugin.d.ts +1 -4
  321. package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
  322. package/dist/workspace-plugin/src/tools/validator.d.ts +4 -4
  323. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  324. package/package.json +13 -1
  325. package/dist/asset-feeds-QF7LGRUX.js.map +0 -1
  326. package/dist/bridge/src/provider-endpoints.d.ts +0 -55
  327. package/dist/bridge/src/provider-endpoints.d.ts.map +0 -1
  328. package/dist/chunk-2BK4N3FS.js.map +0 -1
  329. package/dist/chunk-3NCGSSCU.js.map +0 -1
  330. package/dist/chunk-3U3ZKYR7.js.map +0 -1
  331. package/dist/chunk-AN6NAFRT.js.map +0 -1
  332. package/dist/chunk-AQW4BWNR.js +0 -324
  333. package/dist/chunk-AQW4BWNR.js.map +0 -1
  334. package/dist/chunk-E7HKNQTH.js.map +0 -1
  335. package/dist/chunk-EB72L5ZL.js.map +0 -1
  336. package/dist/chunk-FACPWN6P.js.map +0 -1
  337. package/dist/chunk-FFE7YLYO.js.map +0 -1
  338. package/dist/chunk-FYIHH56K.js +0 -110
  339. package/dist/chunk-FYIHH56K.js.map +0 -1
  340. package/dist/chunk-GURXUF2J.js.map +0 -1
  341. package/dist/chunk-HSRHO7SK.js.map +0 -1
  342. package/dist/chunk-MBARHWMZ.js.map +0 -1
  343. package/dist/chunk-PHBYB4XT.js.map +0 -1
  344. package/dist/chunk-QSPCI4W2.js.map +0 -1
  345. package/dist/chunk-T3YLZQS4.js.map +0 -1
  346. package/dist/chunk-XMULHVKX.js.map +0 -1
  347. package/dist/ensure-sources-GEJGBQIP.js.map +0 -1
  348. package/dist/library-publish-CUPDG5NI.js.map +0 -1
  349. package/dist/paths-CZEH643M.js +0 -16
  350. package/dist/plugin-store-QJNBPIQK.js.map +0 -1
  351. package/dist/runner/src/cloud-bundle.d.ts +0 -36
  352. package/dist/runner/src/cloud-bundle.d.ts.map +0 -1
  353. package/dist/setup-CIRH5BYB.js +0 -517
  354. package/dist/setup-CIRH5BYB.js.map +0 -1
  355. package/dist/source-manifest-publish-DXMCSKU7.js.map +0 -1
  356. package/dist/validator-RN64BKFW.js +0 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bridge/src/drivers/opencode.ts"],"names":[],"mappings":"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","file":"opencode.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport type { ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport {\n extractCost,\n extractText,\n extractTokens,\n mapApiKeysToEnv,\n SubprocessCliDriver,\n} from \"./_subprocess-cli.js\";\n\n/**\n * Agent driver for **OpenCode** (`opencode`), the model-agnostic open-source\n * coding agent.\n *\n * Spawns `opencode run \"<prompt>\" --format json` per turn and maps OpenCode's\n * JSON event stream to the unified {@link AgentEvent} stream. Model-agnostic:\n * the model is passed as `provider/model` via `-m`, and provider API keys are\n * forwarded through the environment.\n *\n * @remarks\n * - The prompt is a **positional argument** — OpenCode's `-p` flag is a\n * basic-auth password, not the prompt.\n * - Session resume via `-s <id>`; the session id is captured from the run's\n * session event and emitted as `session_info`.\n * - OpenCode's `run --format json` event field names are not fully pinned\n * upstream; {@link handleJson} reads them defensively.\n *\n * @see https://github.com/sst/opencode\n * @docLink packages/bridge/drivers#opencode-driver\n */\nexport class OpenCodeDriver extends SubprocessCliDriver {\n readonly driverInfo: DriverInfo = {\n id: \"opencode\",\n name: \"OpenCode\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"opencode\");\n protected readonly defaultBin = \"opencode\";\n protected readonly productName = \"OpenCode\";\n protected readonly envPrefix = \"OPENCODE\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"run\", message, \"--format\", \"json\"];\n const model =\n this.config.provider && this.config.model\n ? `${this.config.provider}/${this.config.model}`\n : this.config.model;\n if (model) args.push(\"-m\", model);\n if (resumeId) args.push(\"-s\", resumeId);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"GEMINI_API_KEY\",\n \"OPENROUTER_API_KEY\",\n \"GROQ_API_KEY\",\n ]);\n return { ...env, ...mapApiKeysToEnv(this.config.apiKeys) };\n }\n\n protected installHint(): string {\n return \"OpenCode is not installed or not on your PATH. Install it with `npm i -g opencode-ai`.\";\n }\n\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"session\":\n case \"session.start\":\n case \"init\":\n this.captureSession(json.id ?? json.sessionId ?? json.session?.id);\n break;\n\n case \"message\":\n case \"message.part\":\n case \"part\": {\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) this.pushAssistantEnd(text);\n else this.pushAssistantDelta(text);\n break;\n }\n\n case \"tool\":\n case \"tool_use\":\n case \"tool.start\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n case \"tool.end\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? 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 case \"done\":\n case \"finish\":\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 override async listModels(): Promise<ModelEntry[]> {\n return [];\n }\n}\n\n/**\n * `DriverTarget` wrapper for the opencode driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const opencodeDriverTarget: DriverTarget<AgentConfig> = {\n id: \"opencode\",\n displayName: BUILTIN_DRIVER_CATALOG.opencode?.name ?? \"OpenCode\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new OpenCodeDriver(config),\n};\n"]}
1
+ {"version":3,"sources":["../../../bridge/src/provider-materialize/opencode-config.ts","../../../bridge/src/drivers/opencode.ts"],"names":[],"mappings":"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","file":"opencode.js","sourcesContent":["/**\n * OpenCode's `opencode.json` adapter — the file half of the OpenCode row\n * (§2.3).\n *\n * OpenCode names providers out of [models.dev](https://models.dev): a stock\n * endpoint is already in that list, so the env half's `-m <preset>/<model>`\n * reaches it with nothing written. An endpoint models.dev has never heard of —\n * a self-hosted gateway, a LiteLLM proxy, an Ollama box — exists for OpenCode\n * only if a `provider` block in `opencode.json` describes it:\n *\n * ```jsonc\n * {\n * \"provider\": {\n * \"corp-gateway\": {\n * \"npm\": \"@ai-sdk/openai-compatible\",\n * \"name\": \"Corp Gateway\",\n * \"options\": {\n * \"baseURL\": \"https://llm.corp.example/v1\",\n * \"apiKey\": \"{env:SKAILE_AIP_CORP_GATEWAY_KEY}\"\n * },\n * \"models\": { \"corp-fast-1\": { \"name\": \"corp-fast-1\" } }\n * }\n * }\n * }\n * ```\n *\n * The block is keyed by {@link backendProviderName}, so the name in the file\n * is the name the env half already puts on `-m`. `npm` is the Vercel AI SDK\n * package for the entry's wire `surface`; OpenCode instantiates the provider\n * from it, which is why an entry on a surface with no package is left out\n * rather than guessed at.\n *\n * **Credentials never enter the file.** `options.apiKey` holds OpenCode's own\n * `{env:VAR}` indirection naming the per-entry variable\n * `SKAILE_AIP_<ID>_KEY`; the value rides in the child environment.\n *\n * The document is written to `<home>/opencode/opencode.json` and the child's\n * `XDG_CONFIG_HOME` is pointed at `<home>` — see\n * {@link driverSessionConfigHome} for why that, and not the developer's\n * `~/.config/opencode`.\n *\n * @docLink packages/bridge/drivers#one-shot-cli-drivers-gemini-qwen-opencode-goose-continue\n */\n\nimport { join } from \"node:path\";\nimport type {\n AIProviderLlmEntry,\n AIProviderSurface,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { providerCredentialEnvName } from \"./credential-env.js\";\nimport {\n backendModelSelector,\n entryBaseUrl,\n entryModelIds,\n entrySurface,\n type EnvDriverSession,\n isStockCatalogEndpoint,\n resolveRegistryBinding,\n selectableEntries,\n} from \"./env-drivers.js\";\nimport {\n driverSessionConfigHome,\n removeSessionConfigFile,\n writeSessionConfigFile,\n} from \"./session-config-home.js\";\n\n/**\n * `surface` → the Vercel AI SDK package OpenCode loads for it. These are the\n * four surfaces `BUILTIN_DRIVER_CATALOG.opencode.surfaces` declares; a surface\n * with no package here cannot be instantiated, so the entry is skipped.\n */\nconst OPENCODE_NPM_PACKAGE: Partial<Record<AIProviderSurface, string>> = {\n \"anthropic-messages\": \"@ai-sdk/anthropic\",\n \"openai-completions\": \"@ai-sdk/openai-compatible\",\n \"openai-responses\": \"@ai-sdk/openai\",\n \"google-generative-ai\": \"@ai-sdk/google\",\n};\n\n/** Credential kinds whose value the adapter hands over in an env var. */\nconst ENV_DELIVERED_CREDENTIALS: Record<string, true> = {\n api_key_header: true,\n bearer: true,\n command: true,\n};\n\n/** Subdirectory OpenCode reads its global config from, under the config home. */\nexport const OPENCODE_CONFIG_DIRNAME = \"opencode\";\n\n/** Filename OpenCode reads its global config from. */\nexport const OPENCODE_CONFIG_FILENAME = \"opencode.json\";\n\n/** One `provider.<id>` block, in OpenCode's own vocabulary. */\nexport interface OpenCodeProviderBlock {\n /** AI SDK package OpenCode instantiates the provider from. */\n npm: string;\n /** Display name in the `/models` picker. */\n name: string;\n options: {\n baseURL?: string;\n /** OpenCode's `{env:VAR}` indirection — never a secret. */\n apiKey?: string;\n headers?: Record<string, string>;\n };\n /** Provider-side model id → its display entry. */\n models: Record<string, { name: string }>;\n}\n\n/** The subset of `opencode.json` this adapter owns. */\nexport interface OpenCodeConfigDocument {\n $schema: string;\n /** `<provider>/<model>` the session selected, when it selected one. */\n model?: string;\n provider: Record<string, OpenCodeProviderBlock>;\n}\n\n/** An entry OpenCode cannot be taught, and why. */\nexport interface OpenCodeSkippedEntry {\n id: string;\n reason: string;\n}\n\n/** Result of {@link buildOpenCodeConfigDocument}. */\nexport interface OpenCodeConfigBuild {\n document: OpenCodeConfigDocument;\n /** Entries left out of the document — non-fatal, logged by the driver. */\n skipped: OpenCodeSkippedEntry[];\n}\n\n/**\n * Render one entry as a provider block, or explain why OpenCode cannot load\n * it.\n */\nexport function renderOpenCodeProvider(\n providerId: string,\n entry: AIProviderLlmEntry,\n): { block: OpenCodeProviderBlock } | { skipped: string } {\n const surface = entrySurface(entry);\n const npm = surface ? OPENCODE_NPM_PACKAGE[surface] : undefined;\n if (!npm)\n return {\n skipped: surface\n ? `OpenCode has no AI SDK package for surface '${surface}'`\n : \"entry declares no surface\",\n };\n const baseUrl = entryBaseUrl(entry);\n if (!baseUrl)\n return { skipped: \"entry states no base_url, and OpenCode does not know this provider\" };\n\n const models: Record<string, { name: string }> = {};\n for (const [logicalId, providerModelId] of entryModelIds(entry)) {\n models[providerModelId] = { name: `${entry.label ?? providerId} ${logicalId}` };\n }\n\n const block: OpenCodeProviderBlock = {\n npm,\n name: entry.label ?? providerId,\n options: { baseURL: baseUrl },\n models,\n };\n const credentialKind = entry.credential?.kind;\n if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])\n block.options.apiKey = `{env:${providerCredentialEnvName(providerId)}}`;\n if (entry.headers && Object.keys(entry.headers).length > 0)\n block.options.headers = { ...entry.headers };\n return { block };\n}\n\n/**\n * Build the document for a session: one block per entry OpenCode cannot name\n * on its own, plus the selected `<provider>/<model>`.\n *\n * The selected model is added to its provider's `models` map even when no\n * `model_map` declared it — a selector naming a model the registry did not\n * enumerate still has to resolve, and `-m` would otherwise name a model the\n * provider block does not list.\n *\n * An empty registry renders nothing — there is no endpoint of the session's\n * own to tell OpenCode about, and models.dev already covers the stock ones.\n */\nexport function buildOpenCodeConfigDocument(session: EnvDriverSession): OpenCodeConfigBuild {\n const document: OpenCodeConfigDocument = {\n $schema: \"https://opencode.ai/config.json\",\n provider: {},\n };\n const skipped: OpenCodeSkippedEntry[] = [];\n\n for (const [providerId, entry] of selectableEntries(session.registry)) {\n // OpenCode already knows every catalog endpoint through models.dev, under\n // the same name `backendProviderName` gives `-m`. What it cannot know is\n // an endpoint of the session's own, and that is exactly what this file is\n // for — one rule, read by both halves.\n if (isStockCatalogEndpoint(entry)) continue;\n const rendered = renderOpenCodeProvider(providerId, entry);\n if (\"skipped\" in rendered) skipped.push({ id: providerId, reason: rendered.skipped });\n else document.provider[providerId] = rendered.block;\n }\n\n const binding = resolveRegistryBinding(session);\n const selector = binding ? backendModelSelector(binding) : undefined;\n if (binding && selector) {\n document.model = selector;\n const block = document.provider[binding.providerId];\n if (block && binding.providerModelId && !block.models[binding.providerModelId])\n block.models[binding.providerModelId] = { name: binding.providerModelId };\n }\n\n return { document, skipped };\n}\n\n/** What {@link materializeOpenCodeConfig} handed the driver. */\nexport interface OpenCodeMaterialization extends OpenCodeConfigBuild {\n /** Child env fragment: `XDG_CONFIG_HOME`, or empty when nothing was written. */\n env: Record<string, string>;\n /** Absolute path of the rendered file, when one was written. */\n path?: string;\n}\n\n/**\n * Render the session's custom endpoints and point the child at them.\n *\n * A session whose every endpoint is already a models.dev provider writes\n * nothing and leaves `XDG_CONFIG_HOME` alone: relocating it would hide the\n * developer's own `~/.config/opencode` for no gain. A file left by an earlier\n * render of the same session is removed in that case, so a session that drops\n * its custom endpoint stops answering to it.\n */\nexport function materializeOpenCodeConfig(\n session: EnvDriverSession,\n config: { cwd: string; sessionId?: string },\n): OpenCodeMaterialization {\n const build = buildOpenCodeConfigDocument(session);\n const home = driverSessionConfigHome(\"opencode\", config);\n const dir = join(home, OPENCODE_CONFIG_DIRNAME);\n if (Object.keys(build.document.provider).length === 0) {\n removeSessionConfigFile(dir, OPENCODE_CONFIG_FILENAME);\n return { ...build, env: {} };\n }\n const path = writeSessionConfigFile(\n dir,\n OPENCODE_CONFIG_FILENAME,\n `${JSON.stringify(build.document, null, 2)}\\n`,\n );\n return { ...build, env: { XDG_CONFIG_HOME: home }, path };\n}\n","import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport type { ModelEntry } from \"../models.js\";\nimport {\n backendModelSelector,\n credentialsForEveryProvider,\n type EnvDriverSession,\n registryModelEntries,\n resolveEnvDriverSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-drivers.js\";\nimport { materializeOpenCodeConfig } from \"../provider-materialize/opencode-config.js\";\nimport { registryDriverConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * Agent driver for **OpenCode** (`opencode`), the model-agnostic open-source\n * coding agent.\n *\n * Spawns `opencode run \"<prompt>\" --format json` per turn and maps OpenCode's\n * JSON event stream to the unified {@link AgentEvent} stream. A\n * `credentials-n` backend (§2.3): every enabled AI provider entry's\n * credential reaches the child environment, and the active model is selected\n * as `-m <provider>/<model>`. An endpoint models.dev does not know is\n * additionally rendered into a session-private `opencode.json`\n * (`provider-materialize/opencode-config.ts`) that `XDG_CONFIG_HOME` points\n * the child at.\n *\n * @remarks\n * - The prompt is a **positional argument** — OpenCode's `-p` flag is a\n * basic-auth password, not the prompt.\n * - Session resume via `-s <id>`; the session id is captured from the run's\n * session event and emitted as `session_info`.\n * - OpenCode's `run --format json` event field names are not fully pinned\n * upstream; {@link handleJson} reads them defensively.\n *\n * @see https://github.com/sst/opencode\n * @docLink packages/bridge/drivers#opencode-driver\n */\nexport class OpenCodeDriver extends SubprocessCliDriver {\n readonly driverInfo: DriverInfo = {\n id: \"opencode\",\n name: \"OpenCode\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"opencode\");\n protected readonly defaultBin = \"opencode\";\n protected readonly productName = \"OpenCode\";\n protected readonly envPrefix = \"OPENCODE\";\n\n private providers?: EnvDriverSession;\n\n /** This session's AI providers, resolved once from the config. */\n private providerSession(): EnvDriverSession {\n this.providers ??= resolveEnvDriverSession(this.config);\n return this.providers;\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n super.reconfigure(patch);\n if (patch.model !== undefined) this.providers = undefined;\n }\n\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"run\", message, \"--format\", \"json\"];\n const binding = resolveRegistryBinding(this.providerSession());\n const model = binding ? backendModelSelector(binding) : this.config.model;\n if (model) args.push(\"-m\", model);\n if (resumeId) args.push(\"-s\", resumeId);\n return args;\n }\n\n /**\n * Base env plus one credential variable per enabled registry entry — the\n * canonical `SKAILE_AIP_<ID>_KEY` and, for a stock catalog endpoint, the\n * vendor carrier OpenCode reads on its own (`ANTHROPIC_API_KEY`, …). There\n * is no per-driver key allowlist: what reaches the child is exactly what\n * the registry can authenticate.\n *\n * This is also where the session's custom endpoints are rendered. It runs\n * once per spawn, so a `reconfigure()` between turns re-renders rather than\n * leaving the child pointed at the previous selection.\n */\n protected buildEnv(): Record<string, string> {\n const session = this.providerSession();\n const materialized = materializeOpenCodeConfig(session, this.config);\n for (const entry of materialized.skipped)\n this.log.warn(\"OpenCode cannot address an AI provider entry\", {\n providerId: entry.id,\n reason: entry.reason,\n });\n if (materialized.path)\n this.log.debug(\"rendered OpenCode provider config\", { path: materialized.path });\n return {\n ...this.baseEnv(),\n ...credentialsForEveryProvider(session),\n ...materialized.env,\n };\n }\n\n protected installHint(): string {\n return \"OpenCode is not installed or not on your PATH. Install it with `npm i -g opencode-ai`.\";\n }\n\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"session\":\n case \"session.start\":\n case \"init\":\n this.captureSession(json.id ?? json.sessionId ?? json.session?.id);\n break;\n\n case \"message\":\n case \"message.part\":\n case \"part\": {\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) this.pushAssistantEnd(text);\n else this.pushAssistantDelta(text);\n break;\n }\n\n case \"tool\":\n case \"tool_use\":\n case \"tool.start\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n case \"tool.end\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? 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 case \"done\":\n case \"finish\":\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 /**\n * OpenCode has no model-list endpoint of its own (it reads models.dev), so\n * the session's registry is the list: every enabled entry's mapped ids,\n * namespaced exactly as `-m` takes them.\n */\n override async listModels(): Promise<ModelEntry[]> {\n return registryModelEntries(this.providerSession());\n }\n}\n\n/**\n * `DriverTarget` wrapper for the opencode driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const opencodeDriverTarget: DriverTarget<AgentConfig> = {\n id: \"opencode\",\n displayName: BUILTIN_DRIVER_CATALOG.opencode?.name ?? \"OpenCode\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new OpenCodeDriver(config),\n listModels: async (registry, options) =>\n new OpenCodeDriver({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryDriverConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,11 +1,14 @@
1
- import { GeminiFamilyDriver } from '../../chunk-FYIHH56K.js';
2
- import '../../chunk-3U3ZKYR7.js';
3
- import { fetchProviderModels } from '../../chunk-GURXUF2J.js';
1
+ import { GeminiFamilyDriver } from '../../chunk-M2F5UXCX.js';
2
+ import { resolveRegistryBinding } from '../../chunk-LPF24MZA.js';
3
+ import { fetchProviderModels } from '../../chunk-R2GE2NXM.js';
4
4
  import '../../chunk-GAH4YRCI.js';
5
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-AQW4BWNR.js';
5
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from '../../chunk-5DQWB5TW.js';
6
6
  import '../../chunk-6E6PKKAD.js';
7
7
  import '../../chunk-FTG7CRFD.js';
8
+ import '../../chunk-KSIRR5PL.js';
9
+ import '../../chunk-ILG4BXYE.js';
8
10
  import '../../chunk-W4IPN3DD.js';
11
+ import '../../chunk-N7B3LZ7V.js';
9
12
  import '../../chunk-NSBPE2FW.js';
10
13
  import * as z from 'zod';
11
14
 
@@ -22,25 +25,48 @@ var QwenDriver = class extends GeminiFamilyDriver {
22
25
  envPrefix = "QWEN";
23
26
  buildArgs(message, resumeId) {
24
27
  const args = ["-p", message, "-o", "stream-json", "--include-partial-messages"];
25
- if (this.config.model) args.push("-m", this.config.model);
28
+ const model = this.registryBinding()?.providerModelId ?? this.config.model;
29
+ if (model) args.push("-m", model);
26
30
  if (resumeId) args.push("--resume", resumeId);
27
31
  return args;
28
32
  }
29
33
  buildEnv() {
30
34
  const env = this.baseEnv(["OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_MODEL"]);
31
- const key = this.config.apiKeys?.openai ?? this.config.apiKeys?.qwen ?? this.config.env?.OPENAI_API_KEY ?? process.env.OPENAI_API_KEY;
32
- if (key) env.OPENAI_API_KEY = key;
33
- if (this.config.model) env.OPENAI_MODEL = this.config.model;
34
35
  env.QWEN_CODE_UNATTENDED_RETRY = "1";
36
+ const binding = this.registryBinding();
37
+ if (!binding) {
38
+ if (this.config.model) env.OPENAI_MODEL = this.config.model;
39
+ return env;
40
+ }
41
+ delete env.OPENAI_API_KEY;
42
+ delete env.OPENAI_BASE_URL;
43
+ delete env.OPENAI_MODEL;
44
+ const key = entryCredentialValue(binding.providerId, binding.entry, {
45
+ env: this.providerSession().lookupEnv
46
+ });
47
+ if (key) env.OPENAI_API_KEY = key;
48
+ if (binding.baseUrl) env.OPENAI_BASE_URL = binding.baseUrl;
49
+ if (binding.providerModelId) env.OPENAI_MODEL = binding.providerModelId;
35
50
  return env;
36
51
  }
37
52
  installHint() {
38
53
  return "Qwen Code is not installed or not on your PATH. Install it with `npm i -g @qwen-code/qwen-code`.";
39
54
  }
55
+ /**
56
+ * Discovery runs against the bound entry — its credential and its endpoint,
57
+ * so a custom OpenAI-compatible host lists its own models rather than
58
+ * OpenAI's.
59
+ */
40
60
  async listModels() {
41
- const key = this.config.apiKeys?.openai ?? process.env.OPENAI_API_KEY;
61
+ const session = this.providerSession();
62
+ const binding = resolveRegistryBinding(session);
63
+ const key = binding ? entryCredentialValue(binding.providerId, binding.entry, { env: session.lookupEnv }) : session.lookupEnv.OPENAI_API_KEY;
42
64
  if (!key) return [];
43
- const result = await fetchProviderModels("openai", key);
65
+ const result = await fetchProviderModels(
66
+ "openai",
67
+ key,
68
+ binding?.baseUrl ? { baseUrl: binding.baseUrl } : {}
69
+ );
44
70
  return result.ok ? result.models : [];
45
71
  }
46
72
  };
@@ -50,7 +76,11 @@ var qwenDriverTarget = {
50
76
  apiVersion: 1,
51
77
  configSchema: z.custom(() => true),
52
78
  create: async (config, _ctx) => new QwenDriver(config),
53
- listModels: async (apiKeys) => new QwenDriver({ cwd: process.cwd(), sessionId: "model-list", apiKeys }).listModels()
79
+ listModels: async (registry, options) => new QwenDriver({
80
+ cwd: process.cwd(),
81
+ sessionId: "model-list",
82
+ ...registryDriverConfig(registry, options)
83
+ }).listModels()
54
84
  };
55
85
 
56
86
  export { QwenDriver, qwenDriverTarget };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bridge/src/drivers/qwen.ts"],"names":[],"mappings":";;;;;;;;;;;AA0BO,IAAM,UAAA,GAAN,cAAyB,kBAAA,CAAmB;AAAA,EACxC,UAAA,GAAyB;AAAA,IAChC,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,WAAA;AAAA,IACN,aAAA,EAAe,IAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EAEmB,GAAA,GAAc,gBAAgB,MAAM,CAAA;AAAA,EACpC,UAAA,GAAa,MAAA;AAAA,EACb,WAAA,GAAc,WAAA;AAAA,EACd,SAAA,GAAY,MAAA;AAAA,EAErB,SAAA,CAAU,SAAiB,QAAA,EAAwC;AAC3E,IAAA,MAAM,OAAO,CAAC,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,eAAe,4BAA4B,CAAA;AAC9E,IAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,KAAK,IAAA,EAAM,IAAA,CAAK,OAAO,KAAK,CAAA;AACxD,IAAA,IAAI,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEU,QAAA,GAAmC;AAC3C,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,gBAAA,EAAkB,iBAAA,EAAmB,cAAc,CAAC,CAAA;AAC9E,IAAA,MAAM,GAAA,GACJ,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,UACrB,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,IAAA,IACrB,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,cAAA,IACjB,QAAQ,GAAA,CAAI,cAAA;AACd,IAAA,IAAI,GAAA,MAAS,cAAA,GAAiB,GAAA;AAC9B,IAAA,IAAI,KAAK,MAAA,CAAO,KAAA,EAAO,GAAA,CAAI,YAAA,GAAe,KAAK,MAAA,CAAO,KAAA;AACtD,IAAA,GAAA,CAAI,0BAAA,GAA6B,GAAA;AACjC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEU,WAAA,GAAsB;AAC9B,IAAA,OAAO,kGAAA;AAAA,EACT;AAAA,EAEA,MAAe,UAAA,GAAoC;AACjD,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,MAAA,IAAU,QAAQ,GAAA,CAAI,cAAA;AACvD,IAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,CAAoB,QAAA,EAAU,GAAG,CAAA;AACtD,IAAA,OAAO,MAAA,CAAO,EAAA,GAAK,MAAA,CAAO,MAAA,GAAS,EAAC;AAAA,EACtC;AACF;AAMO,IAAM,gBAAA,GAA8C;AAAA,EACzD,EAAA,EAAI,MAAA;AAAA,EACJ,WAAA,EAAa,sBAAA,CAAuB,IAAA,EAAM,IAAA,IAAQ,WAAA;AAAA,EAClD,UAAA,EAAY,CAAA;AAAA,EACZ,YAAA,EAAgB,CAAA,CAAA,MAAA,CAAoB,MAAM,IAAI,CAAA;AAAA,EAC9C,QAAQ,OAAO,MAAA,EAAQ,IAAA,KAAS,IAAI,WAAW,MAAM,CAAA;AAAA,EACrD,UAAA,EAAY,OAAO,OAAA,KACjB,IAAI,WAAW,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,IAAO,SAAA,EAAW,YAAA,EAAc,OAAA,EAAS,EAAE,UAAA;AAC7E","file":"qwen.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { GeminiFamilyDriver } from \"./gemini.js\";\n\n/**\n * Agent driver for **Qwen Code** (`qwen`) — a fork of Gemini CLI.\n *\n * Reuses {@link GeminiFamilyDriver}'s stream-json event mapping. Unlike Gemini,\n * Qwen is **model-agnostic / OpenAI-compatible**: it reads `OPENAI_API_KEY`,\n * `OPENAI_BASE_URL`, and `OPENAI_MODEL`, so it works against any\n * OpenAI-completions endpoint (Alibaba DashScope by default).\n *\n * @remarks\n * - Spawns `qwen -p \"<prompt>\" -o stream-json --include-partial-messages`.\n * - Sets `QWEN_CODE_UNATTENDED_RETRY=1` so the CLI backs off on 429/529 in\n * unattended driver contexts.\n * - Supports headless session resume via `--resume <id>`.\n *\n * @see https://github.com/QwenLM/qwen-code\n * @docLink packages/bridge/drivers#qwen-driver\n */\nexport class QwenDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"qwen\",\n name: \"Qwen Code\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"qwen\");\n protected readonly defaultBin = \"qwen\";\n protected readonly productName = \"Qwen Code\";\n protected readonly envPrefix = \"QWEN\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"-p\", message, \"-o\", \"stream-json\", \"--include-partial-messages\"];\n if (this.config.model) args.push(\"-m\", this.config.model);\n if (resumeId) args.push(\"--resume\", resumeId);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"OPENAI_API_KEY\", \"OPENAI_BASE_URL\", \"OPENAI_MODEL\"]);\n const key =\n this.config.apiKeys?.openai ??\n this.config.apiKeys?.qwen ??\n this.config.env?.OPENAI_API_KEY ??\n process.env.OPENAI_API_KEY;\n if (key) env.OPENAI_API_KEY = key;\n if (this.config.model) env.OPENAI_MODEL = this.config.model;\n env.QWEN_CODE_UNATTENDED_RETRY = \"1\";\n return env;\n }\n\n protected installHint(): string {\n return \"Qwen Code is not installed or not on your PATH. Install it with `npm i -g @qwen-code/qwen-code`.\";\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n const key = this.config.apiKeys?.openai ?? process.env.OPENAI_API_KEY;\n if (!key) return [];\n const result = await fetchProviderModels(\"openai\", key);\n return result.ok ? result.models : [];\n }\n}\n\n/**\n * `DriverTarget` wrapper for the qwen driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const qwenDriverTarget: DriverTarget<AgentConfig> = {\n id: \"qwen\",\n displayName: BUILTIN_DRIVER_CATALOG.qwen?.name ?? \"Qwen Code\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new QwenDriver(config),\n listModels: async (apiKeys) =>\n new QwenDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
1
+ {"version":3,"sources":["../../../bridge/src/drivers/qwen.ts"],"names":[],"mappings":"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","file":"qwen.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, type ModelEntry } from \"../models.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport { resolveRegistryBinding } from \"../provider-materialize/env-drivers.js\";\nimport { registryDriverConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { GeminiFamilyDriver } from \"./gemini.js\";\n\n/**\n * Agent driver for **Qwen Code** (`qwen`) — a fork of Gemini CLI.\n *\n * Reuses {@link GeminiFamilyDriver}'s stream-json event mapping. Unlike\n * Gemini, Qwen is **OpenAI-compatible**: it reads `OPENAI_API_KEY`,\n * `OPENAI_BASE_URL` and `OPENAI_MODEL`, so the AI provider entry the session's\n * model selector names maps onto it one-to-one — any `openai-completions`\n * endpoint (Alibaba DashScope by default).\n *\n * @remarks\n * - Spawns `qwen -p \"<prompt>\" -o stream-json --include-partial-messages`.\n * - Sets `QWEN_CODE_UNATTENDED_RETRY=1` so the CLI backs off on 429/529 in\n * unattended driver contexts.\n * - Supports headless session resume via `--resume <id>`.\n *\n * @see https://github.com/QwenLM/qwen-code\n * @docLink packages/bridge/drivers#qwen-driver\n */\nexport class QwenDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"qwen\",\n name: \"Qwen Code\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"qwen\");\n protected readonly defaultBin = \"qwen\";\n protected readonly productName = \"Qwen Code\";\n protected readonly envPrefix = \"QWEN\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"-p\", message, \"-o\", \"stream-json\", \"--include-partial-messages\"];\n const model = this.registryBinding()?.providerModelId ?? this.config.model;\n if (model) args.push(\"-m\", model);\n if (resumeId) args.push(\"--resume\", resumeId);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"OPENAI_API_KEY\", \"OPENAI_BASE_URL\", \"OPENAI_MODEL\"]);\n env.QWEN_CODE_UNATTENDED_RETRY = \"1\";\n const binding = this.registryBinding();\n if (!binding) {\n if (this.config.model) env.OPENAI_MODEL = this.config.model;\n return env;\n }\n\n // The entry is the authority: an inherited OPENAI_* triple must not\n // silently re-point a session that names its own endpoint.\n delete env.OPENAI_API_KEY;\n delete env.OPENAI_BASE_URL;\n delete env.OPENAI_MODEL;\n const key = entryCredentialValue(binding.providerId, binding.entry, {\n env: this.providerSession().lookupEnv,\n });\n if (key) env.OPENAI_API_KEY = key;\n if (binding.baseUrl) env.OPENAI_BASE_URL = binding.baseUrl;\n if (binding.providerModelId) env.OPENAI_MODEL = binding.providerModelId;\n return env;\n }\n\n protected installHint(): string {\n return \"Qwen Code is not installed or not on your PATH. Install it with `npm i -g @qwen-code/qwen-code`.\";\n }\n\n /**\n * Discovery runs against the bound entry — its credential and its endpoint,\n * so a custom OpenAI-compatible host lists its own models rather than\n * OpenAI's.\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.OPENAI_API_KEY;\n if (!key) return [];\n const result = await fetchProviderModels(\n \"openai\",\n key,\n binding?.baseUrl ? { baseUrl: binding.baseUrl } : {},\n );\n return result.ok ? result.models : [];\n }\n}\n\n/**\n * `DriverTarget` wrapper for the qwen driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const qwenDriverTarget: DriverTarget<AgentConfig> = {\n id: \"qwen\",\n displayName: BUILTIN_DRIVER_CATALOG.qwen?.name ?? \"Qwen Code\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new QwenDriver(config),\n listModels: async (registry, options) =>\n new QwenDriver({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryDriverConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,24 +1,27 @@
1
- export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, labelToolCall, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-XMULHVKX.js';
2
- export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv, probeResumeTranscript, resolveClaudeConfigDir } from '../chunk-3NCGSSCU.js';
1
+ export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, labelToolCall, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-FGTYTU6Q.js';
2
+ export { ANTHROPIC_DEFAULT_BASE_URL, buildClaudeEndpointEnv, claudeEndpointMode, probeResumeTranscript, resolveClaudeConfigDir } from '../chunk-WLFRA5RM.js';
3
3
  export { CODEX_NATIVE_STATE_FORMAT, CodexNativeStateUnavailable } from '../chunk-LOO5CB5M.js';
4
- export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-UL4LD7KD.js';
5
- export { ModelTierResolutionError, PROVIDER_ENDPOINTS, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, resolveModelTier, resolveProviderModelsUrl } from '../chunk-GURXUF2J.js';
4
+ export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-QQL3ET3J.js';
5
+ export { ModelTierResolutionError, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, modelIdTargetForEntry, resolveManifestModel, resolveModelCapabilities, resolveModelTier } from '../chunk-R2GE2NXM.js';
6
6
  export { AccountUnavailableError, AuthError, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable } from '../chunk-GAH4YRCI.js';
7
- export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-AQW4BWNR.js';
7
+ export { AI_PROVIDER_PRESETS, AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, PROVIDER_CREDENTIAL_ENV_PREFIX, PROVIDER_CREDENTIAL_ENV_SUFFIX, buildCredentialHeaders, catalogLayer, conventionalCredentialEnvName, createDriver, deriveRegistryFromLegacyApiKeys, entryCredentialEnv, entryCredentialValue, expandPreset, getBridgeLogger, getProviderPreset, listDrivers, listModelsForDriver, listProviderPresets, presetBaseUrl, probeProviderEntry, providerCredentialEnvName, registerBuiltinDrivers, registryCredentialEnv, registryDriverConfig, resolveEntryCredential, resolvePresetBaseUrl, resolveProbeUrl, toMergedRegistry } from '../chunk-5DQWB5TW.js';
8
8
  import '../chunk-6E6PKKAD.js';
9
- import '../chunk-72DG6GSB.js';
10
- import '../chunk-HSRHO7SK.js';
9
+ import '../chunk-YS4XBN7O.js';
10
+ import '../chunk-3VSRJE3M.js';
11
+ import '../chunk-REILIKVM.js';
11
12
  import '../chunk-F3HNW354.js';
12
13
  import '../chunk-K5GBV4SA.js';
13
14
  import '../chunk-QVZA2MDT.js';
14
- import '../chunk-IB4XKQMQ.js';
15
- import '../chunk-MBARHWMZ.js';
15
+ import '../chunk-K27T47OO.js';
16
16
  import '../chunk-MENCWIHW.js';
17
17
  import '../chunk-P4VHQA4N.js';
18
18
  import '../chunk-MKZOK4JU.js';
19
19
  import '../chunk-GEEW6SY2.js';
20
20
  import '../chunk-FTG7CRFD.js';
21
+ import '../chunk-KSIRR5PL.js';
22
+ import '../chunk-ILG4BXYE.js';
21
23
  import '../chunk-W4IPN3DD.js';
24
+ import '../chunk-N7B3LZ7V.js';
22
25
  import '../chunk-NSBPE2FW.js';
23
26
  //# sourceMappingURL=index.js.map
24
27
  //# sourceMappingURL=index.js.map
@@ -1,89 +1,80 @@
1
1
  /**
2
- * AI cloud-provider transport dimension for the `claude-sdk` driver.
2
+ * AI endpoint transport for the `claude-sdk` driver — the Claude Agent SDK's
3
+ * child-process environment.
3
4
  *
4
- * `cloud` is a config axis orthogonal to `provider` (model vendor) and
5
- * `driver` (agent runtime). Under `driver: claude-sdk` each non-default value
6
- * maps to one of the Claude Agent SDK's native env-var transports:
7
- * Amazon Bedrock, Google Vertex AI, Azure AI Foundry, or a generic
8
- * `ANTHROPIC_BASE_URL` gateway (LiteLLM / corporate proxy).
5
+ * {@link buildClaudeEndpointEnv} takes an **AI provider registry entry** and
6
+ * is what the driver calls, on every transport. It is plan §2.3's
7
+ * `buildEndpointEnv` for the claude-sdk row (named for the driver because the
8
+ * vars it emits — `CLAUDE_CODE_USE_*`, `ANTHROPIC_*` — are the Claude Agent
9
+ * SDK's own contract, not a portable one).
10
+ *
11
+ * A registry entry says what the deleted `cloud` axis said — Amazon Bedrock,
12
+ * Google Vertex AI, Azure AI Foundry, a generic gateway — with `surface` +
13
+ * `transport` + `base_url` + `credential`, and says it for the direct
14
+ * endpoint too, which the `cloud` axis could not address at all.
9
15
  *
10
16
  * Cross-repo contract: env key names and semantics here are load-bearing —
11
17
  * the platform resolves credential bundles against the same key set.
12
18
  */
19
+ import { type AIProviderEntry } from "@skaile/workspaces/core/provider-registry";
13
20
  /**
14
- * Canonical list of supported cloud transports. `"default"` (or an absent
15
- * `cloud` field) means the provider's native API — today's behavior, unchanged.
16
- *
17
- * The codec in `core/workspace-config.ts` keeps a local copy (`KNOWN_CLOUDS`)
18
- * to avoid an import cycle; a drift test asserts parity.
19
- *
20
- * @since 1.3.0
21
+ * The Anthropic first-party endpoint. An entry that resolves to exactly this
22
+ * host needs no `ANTHROPIC_BASE_URL`: the SDK already points there, and an
23
+ * explicit value would make every default session look like a third-party
24
+ * redirect to Claude Code's own telemetry and auth heuristics.
21
25
  */
22
- export declare const SUPPORTED_CLOUDS: readonly ["default", "bedrock", "vertex", "azure", "gateway"];
23
- /** One of the supported cloud transport identifiers. */
24
- export type CloudId = (typeof SUPPORTED_CLOUDS)[number];
26
+ export declare const ANTHROPIC_DEFAULT_BASE_URL = "https://api.anthropic.com";
25
27
  /**
26
- * Non-secret transport settings for a cloud. Sourced from skaile.yaml
27
- * `cloud_config` (snake_case on the wire, camelCase in-process — converted
28
- * exactly once at the settings/serve boundary).
28
+ * Which of the Claude Agent SDK's four native transports an entry addresses.
29
29
  *
30
- * Must stay field-identical with core's `CloudTransportConfig` and the inline
31
- * `AgentSessionConfig.cloudConfig` shape (kept separate to avoid a core↔bridge
32
- * import cycle) — a field added here must be added there too.
33
- *
34
- * @since 1.3.0
30
+ * The SDK has no `transport` field: it switches on a `CLAUDE_CODE_USE_*` flag.
31
+ * Bedrock and Vertex are their own wire surfaces, so they are recognized by
32
+ * `surface` as well as by `transport` — a legacy-derived entry that had no
33
+ * region (and therefore no `params`, and therefore no `transport`) is still a
34
+ * Bedrock session, exactly as it was before the registry existed.
35
35
  */
36
- export interface CloudConfig {
37
- /** bedrock: AWS region (`AWS_REGION`); vertex: `CLOUD_ML_REGION`. */
38
- region?: string;
39
- /** vertex only: GCP project (`ANTHROPIC_VERTEX_PROJECT_ID`). */
40
- projectId?: string;
41
- /** azure only: Foundry resource name (`ANTHROPIC_FOUNDRY_RESOURCE`). */
42
- resource?: string;
43
- /** azure (alternative to `resource`) / gateway (required): endpoint base URL. */
44
- baseUrl?: string;
36
+ export type ClaudeEndpointMode = "anthropic" | "bedrock" | "vertex" | "foundry";
37
+ /** Classify a registry entry into its {@link ClaudeEndpointMode}. */
38
+ export declare function claudeEndpointMode(entry: AIProviderEntry): ClaudeEndpointMode;
39
+ /** Arguments for {@link buildClaudeEndpointEnv}. */
40
+ export interface ClaudeEndpointEnvInput {
41
+ /** The selected registry entry — the whole endpoint definition. */
42
+ entry: AIProviderEntry;
43
+ /**
44
+ * The entry's credential, already resolved from its `credential.ref`
45
+ * (`resolveEntryCredential`). Absent for `kind: none`, for an ambient
46
+ * `sigv4` / `google_adc` / `azure_entra` chain, for `oauth` (whose blob the
47
+ * runner writes to the Claude credentials file, never to the env), and for a
48
+ * reference that did not resolve.
49
+ */
50
+ credential?: string;
51
+ /**
52
+ * The driver's base environment — `process.env` with `undefined` dropped.
53
+ * The endpoint vars are layered **on top** of it, never instead of it, so
54
+ * `PATH`, `HOME` and `SKAILE_SESSION_ID` reach the child.
55
+ */
56
+ baseEnv: Record<string, string>;
57
+ /** `AgentConfig.env` plus any credential material the session carried. */
58
+ configEnv?: Record<string, string>;
45
59
  }
46
60
  /**
47
- * Secret env keys that make up the credential bundle for each non-default
48
- * cloud. The platform delivers these env-keyed in the `session_init` secrets
49
- * map; the runner picks them out via `resolveCloudSecretBundle`.
61
+ * Assemble the Claude Agent SDK child env for one registry entry (plan §2.3).
50
62
  *
51
- * Vertex note: `GOOGLE_APPLICATION_CREDENTIALS_JSON` is our convention for the
52
- * raw service-account JSON blob. The runner materializes it to a 0600 file and
53
- * hands the driver `GOOGLE_APPLICATION_CREDENTIALS` (a path) instead — the
54
- * driver never sees the raw JSON.
63
+ * Pure (no external state read, no input mutated). Starts from `baseEnv`
64
+ * merged with `configEnv`, scrubs the inherited Anthropic credential/routing
65
+ * vars and every `CLAUDE_CODE_USE_*` flag, then writes exactly what the entry
66
+ * describes: at most one transport flag, the endpoint, and the credential in
67
+ * the carrier its `kind` names.
55
68
  *
56
- * @since 1.3.0
57
- */
58
- export declare const CLOUD_SECRET_ENV_KEYS: Record<Exclude<CloudId, "default">, readonly string[]>;
59
- /**
60
- * Assemble the Claude Agent SDK child env for a non-default cloud transport.
61
- *
62
- * Pure function (no external state touched; the returned `env` is a fresh
63
- * object — inputs are never mutated): starts from `baseEnv` (caller passes a
64
- * copy of `process.env` with undefined stripped) merged with `configEnv`,
65
- * scrubs inherited Anthropic
66
- * credential/routing vars and every `CLAUDE_CODE_USE_*` flag, then sets exactly
67
- * one `CLAUDE_CODE_USE_*` flag (none for gateway) plus the cloud's credential
68
- * bundle and derived non-secret vars. AWS_* / GOOGLE_* ambient values are NOT
69
- * scrubbed, so a standalone CLI inherits ambient cloud credentials when no
70
- * explicit `cloudSecrets` bundle is provided. Gateway is the mirror case: its
71
- * carriers ARE the scrubbed Anthropic vars, so the gateway branch restores
72
- * them from `cloudSecrets` → `fallbackApiKey` (resolved `apiKeys.anthropic`)
73
- * → the pre-scrub config/ambient value — otherwise a standalone gateway
74
- * session would have no reachable auth carrier at all.
69
+ * Credential kinds (§1.4): `api_key_header` → `ANTHROPIC_API_KEY` (the SDK
70
+ * sends it as `x-api-key`); `bearer` → `ANTHROPIC_AUTH_TOKEN` (sent as
71
+ * `Authorization: Bearer`); `sigv4` / `google_adc` / `azure_entra` emit
72
+ * nothing and let the AWS/Google/Azure chain sign — which is why the scrub
73
+ * deliberately spares ambient `AWS_*` / `GOOGLE_*` values; `oauth` and `none`
74
+ * emit nothing, and the pre-scrub ambient carriers are restored so an OAuth or
75
+ * shell-configured session keeps the auth it had.
75
76
  *
76
- * Never returns `undefined` values; absent settings are simply omitted.
77
- *
78
- * @since 1.3.0
77
+ * Never returns `undefined` or empty values; absent settings are omitted.
79
78
  */
80
- export declare function buildClaudeCloudEnv(args: {
81
- cloud: Exclude<CloudId, "default">;
82
- cloudConfig?: CloudConfig;
83
- cloudSecrets?: Record<string, string>;
84
- baseEnv: Record<string, string>;
85
- configEnv?: Record<string, string>;
86
- /** Resolved API key (e.g. `apiKeys.anthropic`) — gateway auth fallback only. */
87
- fallbackApiKey?: string;
88
- }): Record<string, string>;
79
+ export declare function buildClaudeEndpointEnv(args: ClaudeEndpointEnvInput): Record<string, string>;
89
80
  //# sourceMappingURL=cloud.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../../bridge/src/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,+DAAgE,CAAC;AAE9F,wDAAwD;AACxD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAUxF,CAAC;AAeF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuEzB"}
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../../bridge/src/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,2CAA2C,CAAC;AAgBnD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AActE;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhF,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAO7E;AAED,oDAAoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,KAAK,EAAE,eAAe,CAAC;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4E3F"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Codex's `config.toml` adapter — the AI provider registry materialized into
3
+ * the only provider surface the Codex CLI reads (plan §2.3, codex rows).
4
+ *
5
+ * Codex is a **file-shaped** driver: it takes its endpoints from
6
+ * `$CODEX_HOME/config.toml`, never from per-request options. Both codex modes
7
+ * therefore get a session-private `CODEX_HOME` holding a rendered document:
8
+ *
9
+ * - every addressable registry entry becomes `[model_providers.<id>]` with
10
+ * `base_url`, `env_key`, `wire_api`, `query_params` and `http_headers`
11
+ * mapping 1:1 onto the entry's `base_url`, `credential`, `surface`,
12
+ * `query_params` and `headers`;
13
+ * - `model_provider` and `model` at the top level name the selected entry.
14
+ *
15
+ * The rendered file never contains a credential **value** — `env_key` holds
16
+ * the *name* of the per-entry variable (`SKAILE_AIP_<ID>_KEY`, minted by
17
+ * {@link providerCredentialEnvName}), and the value rides in the child
18
+ * environment. An `oauth` entry has no env carrier at all: it gets
19
+ * `requires_openai_auth`, which routes codex to its own auth manager.
20
+ *
21
+ * **Surface coverage.** Codex names the wire protocol `wire_api` and, as of
22
+ * codex-cli 0.154, accepts exactly one value: `responses`. `chat` was removed
23
+ * ("`wire_api = \"chat\"` is no longer supported", openai/codex#7782), and an
24
+ * unknown value fails the *whole* document at load time — one unaddressable
25
+ * entry would take the rest of the registry down with it. Entries whose
26
+ * surface codex cannot speak (`openai-completions`, `anthropic-messages`,
27
+ * `bedrock-converse-stream`, `google-*`) are therefore left out and reported
28
+ * in {@link CodexConfigBuild.skipped} for the driver to log.
29
+ *
30
+ * @docLink packages/bridge/drivers#codex-driver
31
+ */
32
+ import { type AIProviderEntry, type AIProviderRegistry, type MergedAIProviderRegistry } from "@skaile/workspaces/core/provider-registry";
33
+ /** One `[model_providers.<id>]` table, in codex's own vocabulary. */
34
+ export interface CodexModelProviderTable {
35
+ /** Display name. Codex rejects a provider table without one. */
36
+ name: string;
37
+ base_url?: string;
38
+ /** Name of the variable carrying the credential — never the credential. */
39
+ env_key?: string;
40
+ wire_api?: string;
41
+ /** Routes codex to its own auth manager (ChatGPT subscription / stored key). */
42
+ requires_openai_auth?: boolean;
43
+ query_params?: Record<string, string>;
44
+ http_headers?: Record<string, string>;
45
+ }
46
+ /** The subset of codex's `config.toml` this adapter owns. */
47
+ export interface CodexConfigDocument {
48
+ /** Entry id the session addresses; absent when nothing rendered. */
49
+ model_provider?: string;
50
+ /** Provider-side model id. */
51
+ model?: string;
52
+ model_providers: Record<string, CodexModelProviderTable>;
53
+ }
54
+ /** An entry codex cannot address, and why. */
55
+ export interface CodexSkippedEntry {
56
+ id: string;
57
+ reason: string;
58
+ }
59
+ /** Result of {@link buildCodexConfigDocument}. */
60
+ export interface CodexConfigBuild {
61
+ document: CodexConfigDocument;
62
+ /** Selected entry id, when it rendered. */
63
+ providerId?: string;
64
+ /** Provider-side model id of the selection, when the selector named one. */
65
+ model?: string;
66
+ /**
67
+ * Entries left out of the document. Non-fatal: codex keeps its built-in
68
+ * providers, so a session whose selection was skipped behaves exactly as it
69
+ * did before the registry existed.
70
+ */
71
+ skipped: CodexSkippedEntry[];
72
+ /** Notes from `modelRef` resolution (dangling role, disabled provider, …). */
73
+ warnings: string[];
74
+ }
75
+ /** Inputs {@link buildCodexConfigDocument} reads off an `AgentConfig`. */
76
+ export interface CodexConfigInput {
77
+ registry?: AIProviderRegistry | MergedAIProviderRegistry;
78
+ /** `"<providerId>/<modelId>"`, a bare model id, or `"@role"`. */
79
+ modelRef?: string;
80
+ /** Legacy model field, used as the selector when `modelRef` is absent. */
81
+ model?: string;
82
+ /** Roles table (`skaile.yaml`), consulted for an `@role` selector. */
83
+ roles?: Record<string, string>;
84
+ }
85
+ /**
86
+ * Render one entry as a codex provider table, or explain why codex cannot
87
+ * address it.
88
+ */
89
+ export declare function renderCodexProviderTable(id: string, entry: AIProviderEntry): {
90
+ table: CodexModelProviderTable;
91
+ } | {
92
+ skipped: string;
93
+ };
94
+ /**
95
+ * Build the document for a session: every addressable entry, plus the
96
+ * selection when it resolved to one of them.
97
+ */
98
+ export declare function buildCodexConfigDocument(input: CodexConfigInput): CodexConfigBuild;
99
+ /** Serialize a document to TOML. Deterministic: registry order throughout. */
100
+ export declare function renderCodexConfigToml(document: CodexConfigDocument): string;
101
+ /**
102
+ * The session-private codex home.
103
+ *
104
+ * Deliberately outside `cwd`: codex's `workspace-write` sandbox makes the
105
+ * working tree writable by the model, and a config home inside it would let a
106
+ * turn rewrite its own `base_url`. `$SKAILE_HOME` (honoured by
107
+ * {@link globalSkaileDir}) relocates the whole tree, which is also the test
108
+ * seam.
109
+ */
110
+ export declare function codexSessionHome(config: {
111
+ cwd: string;
112
+ sessionId?: string;
113
+ }): string;
114
+ /**
115
+ * Write `<home>/config.toml`, creating the home if needed. Atomic: a
116
+ * partially written document would fail codex's config load for the whole
117
+ * session.
118
+ *
119
+ * A document with no provider tables says nothing codex does not already
120
+ * know, so nothing is written and a file left by an earlier render is
121
+ * removed — a session that no longer carries a registry must not keep
122
+ * answering to the one it used to have.
123
+ *
124
+ * @returns the absolute path written, or `undefined` when there was nothing
125
+ * to render.
126
+ */
127
+ export declare function writeCodexConfigToml(home: string, document: CodexConfigDocument): string | undefined;
128
+ //# sourceMappingURL=config-toml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-toml.d.ts","sourceRoot":"","sources":["../../../../bridge/src/codex/config-toml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAMH,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EAGvB,KAAK,wBAAwB,EAI9B,MAAM,2CAA2C,CAAC;AAuBnD,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CAC1D;AAED,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,kBAAkB,GAAG,wBAAwB,CAAC;IACzD,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,GACrB;IAAE,KAAK,EAAE,uBAAuB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CA8B1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CA+BlF;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAM3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CASpF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,mBAAmB,GAC5B,MAAM,GAAG,SAAS,CAYpB"}
@@ -1,3 +1,4 @@
1
+ import { type AIProviderRegistry, type MergedAIProviderRegistry } from "@skaile/workspaces/core/provider-registry";
1
2
  import type { CodexCredentialDelivery, CodexSubscriptionRefreshInput, CodexSubscriptionRefreshResult } from "@skaile/workspaces/types";
2
3
  /** Validate credential shape and provenance without including input values in errors. */
3
4
  export declare function parseCodexCredential(value: unknown, now?: number): CodexCredentialDelivery;
@@ -9,4 +10,29 @@ export declare function parseCodexRefreshInput(value: unknown, pinned: Extract<C
9
10
  export declare function parseCodexRefreshResult(value: unknown, pinned: Extract<CodexCredentialDelivery, {
10
11
  kind: "codex-subscription";
11
12
  }>, now?: number): CodexSubscriptionRefreshResult;
13
+ /**
14
+ * The AI provider registry a managed-codex session may carry (plan §2.2).
15
+ *
16
+ * Managed codex runs on a platform-minted, short-lived credential that the
17
+ * host never writes to disk and never puts in the child environment. That
18
+ * isolation is only meaningful if the session cannot *also* be told to talk
19
+ * somewhere else, or to pick a credential up from the environment. Restated
20
+ * on the registry, the admissible shape is exactly one enabled `llm` entry,
21
+ * on codex's own OpenAI surface, whose credential is a platform-injected
22
+ * `oauth` reference. A second entry, a different surface, or an `env:` /
23
+ * `cmd:` / `keyring:` reference is an invalid AI profile.
24
+ *
25
+ * `surface` is read literally — no catalog-preset fallback. No preset
26
+ * declares `openai-codex-responses`, so a preset-shaped entry reaching here
27
+ * is a mis-provisioned session, not a terse one.
28
+ *
29
+ * An absent or empty registry is *not* a violation: nothing was configured,
30
+ * and the credential the platform minted is the only one the session has.
31
+ * Every configured entry is judged, whichever layer it came from — the
32
+ * control-plane session layer, the user/workspace `providers.yml` files, or
33
+ * a runtime override.
34
+ *
35
+ * @returns the reason the registry is inadmissible, or `undefined` when it is.
36
+ */
37
+ export declare function managedCodexRegistryViolation(registry: AIProviderRegistry | MergedAIProviderRegistry | undefined): string | undefined;
12
38
  //# sourceMappingURL=credentials.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../../bridge/src/codex/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,0BAA0B,CAAC;AA0BlC,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAa,GAAG,uBAAuB,CAa9F;AAED,+FAA+F;AAC/F,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,GACvE,6BAA6B,CAgB/B;AAED,iGAAiG;AACjG,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,EACxE,GAAG,SAAa,GACf,8BAA8B,CAsBhC"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../../bridge/src/codex/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAG9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,0BAA0B,CAAC;AA0BlC,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAa,GAAG,uBAAuB,CAa9F;AAED,+FAA+F;AAC/F,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,GACvE,6BAA6B,CAgB/B;AAED,iGAAiG;AACjG,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,EACxE,GAAG,SAAa,GACf,8BAA8B,CAsBhC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB,GAAG,SAAS,GAClE,MAAM,GAAG,SAAS,CAmBpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"managed-driver.d.ts","sourceRoot":"","sources":["../../../../bridge/src/codex/managed-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-driver.d.ts","sourceRoot":"","sources":["../../../../bridge/src/codex/managed-driver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-app-server.d.ts","sourceRoot":"","sources":["../../../bridge/src/codex-app-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-app-server.d.ts","sourceRoot":"","sources":["../../../bridge/src/codex-app-server.ts"],"names":[],"mappings":"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"}