@xopcai/xopc 0.0.163 → 0.0.165

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 (216) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/{activity-store-Xj95LzTv.js → activity-store-DkALQFJT.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-C-QeUFwU.js → agent-avatar-dicebear-CKVX2TyD.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-F8749KZ_.js +2 -0
  7. package/dist/gateway/static/root/assets/{api-BTLmAm1_.js → api-DPIXEcIq.js} +1 -1
  8. package/dist/gateway/static/root/assets/{app-management-settings-panel-zc6Gf-S5.js → app-management-settings-panel-ClToHdDF.js} +1 -1
  9. package/dist/gateway/static/root/assets/{appearance-settings-0fMLnOWn.js → appearance-settings-Ci2jWAkQ.js} +1 -1
  10. package/dist/gateway/static/root/assets/apps-page-DCow0nte.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-DOiR_E21.js → archive-plugin-CKv5A1_M.js} +1 -1
  12. package/dist/gateway/static/root/assets/{attachment-load-BxmYl1D1.js → attachment-load-LgoN-Vwo.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automation-suggestion-card-BhZOirad.js → automation-suggestion-card-BwnZqDQE.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-DWWHMqCZ.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-DTTKsvgk.js → binary-plugins-WwMRnBdP.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-C7se7iqg.js → block-editor-CThEfJSn.js} +47 -47
  17. package/dist/gateway/static/root/assets/browser-settings-page-7x8rKLOl.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-kxmStCcv.js → browser-workflow-inputs-DCj9DG0A.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-CwYf9OM_.js → browser-workflows-page-C1k2vHLV.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-DIwGIpuS.js +2 -0
  21. package/dist/gateway/static/root/assets/{capability-presets-api-BZKh2cWX.js → capability-presets-api-C_NVbV7o.js} +1 -1
  22. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DBdvIcV0.js +2 -0
  23. package/dist/gateway/static/root/assets/{channel-recipient-api-r7tdbnJE.js → channel-recipient-api-B5rLegwk.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-DU93p9RZ.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-status-swr-DZZq0upi.js +1 -0
  26. package/dist/gateway/static/root/assets/{connector-logo-BpnQYAxA.js → connector-logo-au5xzRMl.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-B9sD56hT.js +2 -0
  28. package/dist/gateway/static/root/assets/desktop-pet-CaTO9bAV.js +1 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-settings-uv8Grtgk.js → desktop-pet-settings-CORq2BIE.js} +1 -1
  30. package/dist/gateway/static/root/assets/{directory-picker-path-field-C4TTvf7p.js → directory-picker-path-field-Daf0tqrN.js} +1 -1
  31. package/dist/gateway/static/root/assets/{dreaming-settings-CzJAUPvM.js → dreaming-settings-CJqJpvgc.js} +3 -3
  32. package/dist/gateway/static/root/assets/{extension-debug-page-Ci2mOYUt.js → extension-debug-page-0XmiUqsm.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-DeXdmhXQ.js → extension-page-C_9HSvyu.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-settings-page-C93vaOsU.js → extension-settings-page-DcmUCmOu.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-config-api-C31Hlblp.js → gateway-config-api-CZqfsxJf.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-D3zS6RZh.js → gateway-settings-CzX8TVmO.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-CSRvCqxh.js → gateway-startup-retry-ulwTJovP.js} +1 -1
  38. package/dist/gateway/static/root/assets/goal-create-dialog-Dbj_sgV-.js +1 -0
  39. package/dist/gateway/static/root/assets/goal-detail-page-BdkiZwW-.js +4 -0
  40. package/dist/gateway/static/root/assets/{goals-config-api-D4wYNRrf.js → goals-config-api-Cvlq3jyf.js} +1 -1
  41. package/dist/gateway/static/root/assets/goals-page-BD9ztXNA.js +2 -0
  42. package/dist/gateway/static/root/assets/{goals-settings-Bx2jVvhQ.js → goals-settings-CSGvHJDi.js} +1 -1
  43. package/dist/gateway/static/root/assets/{heartbeat-settings-BEIF1eXy.js → heartbeat-settings-BvXA7oNN.js} +1 -1
  44. package/dist/gateway/static/root/assets/{index-HZdBKfk_.js → index-CfOzvGDb.js} +70 -70
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DOEDpvTM.js → keyboard-shortcuts-settings-xb6mna1C.js} +1 -1
  46. package/dist/gateway/static/root/assets/local-app-workbench-page-DH4nglP_.js +2 -0
  47. package/dist/gateway/static/root/assets/{local-apps-page-B0OpGpxv.js → local-apps-page-BScdXqMo.js} +1 -1
  48. package/dist/gateway/static/root/assets/{locale-store-Ys6RP7Be.js → locale-store-C_ax27uc.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-BBpAWjyF.js +7 -0
  50. package/dist/gateway/static/root/assets/{markdown-split-CEZwysCH.js → markdown-split-8hnAS25m.js} +1 -1
  51. package/dist/gateway/static/root/assets/{media-plugins-CpGKE7B0.js → media-plugins-DzlHseMD.js} +1 -1
  52. package/dist/gateway/static/root/assets/{messages-BzI9Wx30.js → messages-C96Zjb0V.js} +2 -2
  53. package/dist/gateway/static/root/assets/{notes-page-CdiuDZ5a.js → notes-page-DbDHFPiI.js} +1 -1
  54. package/dist/gateway/static/root/assets/notes-workbench-B-A9whbg.js +4 -0
  55. package/dist/gateway/static/root/assets/{page-tabs-BkH5AVV2.js → page-tabs-CXJiygUJ.js} +1 -1
  56. package/dist/gateway/static/root/assets/{preview-open-alternatives-CQai8f9D.js → preview-open-alternatives-Cq6aue5a.js} +1 -1
  57. package/dist/gateway/static/root/assets/{product-open-page-B2kSdB2b.js → product-open-page-nP8vuNlJ.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-BXrscUbq.js +1 -0
  59. package/dist/gateway/static/root/assets/projects-page-m0EKUeaY.js +1 -0
  60. package/dist/gateway/static/root/assets/remote-access-hub-B16uQSY5.js +1 -0
  61. package/dist/gateway/static/root/assets/{save-bar-controls-NGYnO7n7.js → save-bar-controls-BPgnLY1p.js} +1 -1
  62. package/dist/gateway/static/root/assets/{schedule-field-nLOphnv3.js → schedule-field-rHWpueWl.js} +1 -1
  63. package/dist/gateway/static/root/assets/{schema-form-D0e90ndE.js → schema-form-CHKIUrzk.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-C5_qtznc.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-DQlbm1mA.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-form-section-X2Sl-EAk.js → settings-form-section-CR4J0N4X.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-loading-skeleton-DOnUabm7.js → settings-loading-skeleton-B8v-lHKT.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-page-C4UUNi1n.js → settings-page-BcLf8Rd5.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-page-layout-C1yYqbT6.js → settings-page-layout-Co31Becn.js} +1 -1
  70. package/dist/gateway/static/root/assets/setup-status-panel-BFLA1Fsj.js +1 -0
  71. package/dist/gateway/static/root/assets/{share-preview-page-Cfy_pH7V.js → share-preview-page-B5vMe8DY.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-DL2tKPq6.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-C8jkuLob.js +1 -0
  74. package/dist/gateway/static/root/assets/skills-page-DAOZXlp5.js +2 -0
  75. package/dist/gateway/static/root/assets/{system-settings-panel-Da81RJ6G.js → system-settings-panel-CHt3FXI8.js} +1 -1
  76. package/dist/gateway/static/root/assets/{theme-store-DflSp9o4.js → theme-store-D37XLD_C.js} +1 -1
  77. package/dist/gateway/static/root/assets/{time-picker-BIkOW-2L.js → time-picker-C9Rr1IUV.js} +1 -1
  78. package/dist/gateway/static/root/assets/{typed-models-lib--HptwFcD.js → typed-models-lib-QMF30Yvh.js} +1 -1
  79. package/dist/gateway/static/root/assets/{use-channel-catalog-CMHY4ZfW.js → use-channel-catalog-DBh0dOC9.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-context-page-D6EEhj-e.js +1 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-nvIZerol.js → voice-api-key-field-Gjjs3qih.js} +1 -1
  82. package/dist/gateway/static/root/assets/work-discovery-page-CDnL9daG.js +1 -0
  83. package/dist/gateway/static/root/assets/work-item-detail-page-BCoT4p1E.js +1 -0
  84. package/dist/gateway/static/root/assets/work-page-l8h2Y50w.js +1 -0
  85. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-D96MHABy.js → workflow-run-setup-panel-DnOfronD.js} +2 -2
  86. package/dist/gateway/static/root/assets/workflows-page-IVbQ83CW.js +11 -0
  87. package/dist/gateway/static/root/index.html +6 -6
  88. package/dist/package.js +1 -1
  89. package/dist/src/agent/agent-manager.js +3 -3
  90. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  91. package/dist/src/agent/embedded/model-runtime.d.ts +4 -0
  92. package/dist/src/agent/embedded/model-runtime.js +49 -0
  93. package/dist/src/agent/embedded/run-turn.js +9 -2
  94. package/dist/src/agent/embedded/session-runner.js +3 -3
  95. package/dist/src/agent/goals/post-turn.js +1 -1
  96. package/dist/src/agent/image/tool-model-config.js +1 -1
  97. package/dist/src/agent/index.js +1 -1
  98. package/dist/src/agent/ipc/inbox.js +1 -1
  99. package/dist/src/agent/memory/dreaming/config.js +1 -1
  100. package/dist/src/agent/service.js +2 -2
  101. package/dist/src/agent/skills/hub-lock.js +1 -1
  102. package/dist/src/agent-runtime/index.js +1 -1
  103. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  104. package/dist/src/auth/credentials.js +46 -3
  105. package/dist/src/auth/index.js +2 -1
  106. package/dist/src/auth/oauth/anthropic.js +27 -24
  107. package/dist/src/auth/oauth/github-copilot.js +20 -15
  108. package/dist/src/auth/oauth/google-antigravity.js +9 -2
  109. package/dist/src/auth/oauth/google-gemini-cli.js +9 -2
  110. package/dist/src/auth/oauth/google-oauth/google-antigravity.js +47 -40
  111. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +48 -41
  112. package/dist/src/auth/oauth/google-oauth/oauth-page.js +7 -2
  113. package/dist/src/auth/oauth/google-oauth/pkce.js +4 -1
  114. package/dist/src/auth/oauth/index.d.ts +2 -0
  115. package/dist/src/auth/oauth/index.js +24 -10
  116. package/dist/src/auth/oauth/kimi-coding.js +76 -71
  117. package/dist/src/auth/oauth/minimax-cn.js +78 -73
  118. package/dist/src/auth/oauth/minimax.js +78 -73
  119. package/dist/src/auth/oauth/openai-codex.js +31 -25
  120. package/dist/src/auth/oauth/pkce.js +4 -1
  121. package/dist/src/auth/oauth/registry.d.ts +13 -0
  122. package/dist/src/auth/oauth/registry.js +65 -0
  123. package/dist/src/auth/oauth/xopc-cloud.d.ts +2 -0
  124. package/dist/src/auth/oauth/xopc-cloud.js +101 -0
  125. package/dist/src/auth/profiles/store.js +1 -1
  126. package/dist/src/auth/sync-provider-auth.js +6 -1
  127. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  128. package/dist/src/cli/commands/channels.js +1 -1
  129. package/dist/src/cli/commands/connectors.js +2 -2
  130. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  131. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  132. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  133. package/dist/src/cli/commands/models.js +2 -2
  134. package/dist/src/cli/commands/onboard.js +1 -1
  135. package/dist/src/cli/commands/update.js +1 -1
  136. package/dist/src/cli/utils/oauth-providers.d.ts +3 -26
  137. package/dist/src/cli/utils/oauth-providers.js +6 -80
  138. package/dist/src/config/agent-profile.js +1 -1
  139. package/dist/src/config/index.js +4 -4
  140. package/dist/src/config/loader.js +1 -1
  141. package/dist/src/config/models-json.js +9 -1
  142. package/dist/src/connectors/connector-memory-sync.js +1 -1
  143. package/dist/src/connectors/health.js +1 -1
  144. package/dist/src/extensions/lockfile.js +1 -1
  145. package/dist/src/extensions/sdk/index.js +1 -1
  146. package/dist/src/gateway/agents-admin.js +2 -2
  147. package/dist/src/gateway/file-path-classifier.js +1 -1
  148. package/dist/src/gateway/heartbeat/service.js +1 -1
  149. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  150. package/dist/src/gateway/hono/oauth-async.js +3 -19
  151. package/dist/src/gateway/hono/oauth.js +3 -19
  152. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  153. package/dist/src/gateway/hono/routes/models.js +2 -56
  154. package/dist/src/gateway/hono/routes/update.js +2 -2
  155. package/dist/src/gateway/index.js +1 -1
  156. package/dist/src/gateway/run-loop.js +1 -1
  157. package/dist/src/gateway/service/config-coordinator.js +1 -1
  158. package/dist/src/gateway/service.js +6 -6
  159. package/dist/src/goals/goal-workflow-judge.js +1 -1
  160. package/dist/src/heartbeat/index.js +1 -1
  161. package/dist/src/infra/gateway-processes.js +1 -1
  162. package/dist/src/infra/update-restart.js +1 -1
  163. package/dist/src/infra/update-runner.js +2 -2
  164. package/dist/src/infra/update-startup.js +1 -1
  165. package/dist/src/mcp/channel-bridge.js +1 -1
  166. package/dist/src/notes/service.js +1 -1
  167. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  168. package/dist/src/providers/domestic-presets.d.ts +0 -20
  169. package/dist/src/providers/domestic-presets.js +0 -25
  170. package/dist/src/providers/index.js +10 -1
  171. package/dist/src/providers/model-catalog-store.d.ts +20 -58
  172. package/dist/src/providers/model-catalog-store.js +18 -57
  173. package/dist/src/providers/model-catalog-sync-service.d.ts +3 -4
  174. package/dist/src/providers/model-catalog-sync-service.js +3 -13
  175. package/dist/src/providers/model-registry.js +1 -3
  176. package/dist/src/providers/xopc-cloud-model-source.d.ts +30 -0
  177. package/dist/src/providers/xopc-cloud-model-source.js +68 -0
  178. package/dist/src/tui/tui-startup-resources.js +2 -2
  179. package/dist/src/tui/tui.js +1 -1
  180. package/dist/src/work-discovery/analyzer.js +27 -14
  181. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  182. package/package.json +1 -1
  183. package/dist/gateway/static/root/assets/agents-DVKlWKJE.js +0 -2
  184. package/dist/gateway/static/root/assets/apps-page-BZXEJDIV.js +0 -1
  185. package/dist/gateway/static/root/assets/automations-page-B8CnkoXv.js +0 -6
  186. package/dist/gateway/static/root/assets/browser-settings-page-BCPWKI9V.js +0 -8
  187. package/dist/gateway/static/root/assets/capabilities-settings-panel-C7lr_mX2.js +0 -2
  188. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Ble9kHRu.js +0 -2
  189. package/dist/gateway/static/root/assets/channels-settings-CtQQQHrv.js +0 -1
  190. package/dist/gateway/static/root/assets/channels-status-swr-_VirfMKW.js +0 -1
  191. package/dist/gateway/static/root/assets/connectors-page-BXWJSJeY.js +0 -2
  192. package/dist/gateway/static/root/assets/desktop-pet-B86W4a5c.js +0 -1
  193. package/dist/gateway/static/root/assets/goal-create-dialog-CWp2b7__.js +0 -1
  194. package/dist/gateway/static/root/assets/goal-detail-page-Dtm29FxD.js +0 -4
  195. package/dist/gateway/static/root/assets/goals-page-jMzBJs6e.js +0 -2
  196. package/dist/gateway/static/root/assets/local-app-workbench-page-CseW9jD3.js +0 -2
  197. package/dist/gateway/static/root/assets/logs-page-DVqPbth5.js +0 -7
  198. package/dist/gateway/static/root/assets/notes-workbench-mrc3xtpn.js +0 -4
  199. package/dist/gateway/static/root/assets/project-detail-page-CfhPJLkH.js +0 -1
  200. package/dist/gateway/static/root/assets/projects-page-BfMoKjdm.js +0 -1
  201. package/dist/gateway/static/root/assets/remote-access-hub-CrDtcsZ9.js +0 -1
  202. package/dist/gateway/static/root/assets/sessions-page-D3DbF3dV.js +0 -1
  203. package/dist/gateway/static/root/assets/settings-advanced-gate-BZp0O2dH.js +0 -1
  204. package/dist/gateway/static/root/assets/setup-status-panel-84iao4DZ.js +0 -1
  205. package/dist/gateway/static/root/assets/shares-settings-DtcwQvRG.js +0 -1
  206. package/dist/gateway/static/root/assets/skill-reload-api-L7j5Gc8Z.js +0 -1
  207. package/dist/gateway/static/root/assets/skills-page-1Ps8PjsP.js +0 -2
  208. package/dist/gateway/static/root/assets/user-context-page-BYAAs2iW.js +0 -1
  209. package/dist/gateway/static/root/assets/work-discovery-page-J35JkJ7_.js +0 -1
  210. package/dist/gateway/static/root/assets/work-item-detail-page-C4wYDYqV.js +0 -1
  211. package/dist/gateway/static/root/assets/work-page-DMvitV6c.js +0 -1
  212. package/dist/gateway/static/root/assets/workflows-page-JMN0nMbM.js +0 -11
  213. package/dist/src/agent/embedded/xopc-auth-storage.d.ts +0 -19
  214. package/dist/src/agent/embedded/xopc-auth-storage.js +0 -40
  215. package/dist/src/providers/xopc-cloud-connection.d.ts +0 -51
  216. package/dist/src/providers/xopc-cloud-connection.js +0 -196
@@ -1,4 +1,5 @@
1
- import { generatePKCE } from "./pkce.js";
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { generatePKCE, init_pkce } from "./pkce.js";
2
3
  import { randomBytes } from "node:crypto";
3
4
  import http from "node:http";
4
5
  //#region src/auth/oauth/openai-codex.ts
@@ -7,15 +8,6 @@ import http from "node:http";
7
8
  *
8
9
  * Owns callback validation, manual prompt handling, and success/error pages.
9
10
  */
10
- const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
11
- const AUTHORIZE_URL = "https://auth.openai.com/oauth/authorize";
12
- const TOKEN_URL = "https://auth.openai.com/oauth/token";
13
- const CALLBACK_PORT = 1455;
14
- const CALLBACK_PATH = "/auth/callback";
15
- const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
16
- const SCOPE = "openid profile email offline_access";
17
- const MANUAL_PROMPT_DELAY_MS = 15e3;
18
- const TOKEN_REQUEST_TIMEOUT_MS = 3e4;
19
11
  function xopcOAuthHtml(params) {
20
12
  const color = params.tone === "success" ? "#2563eb" : "#dc2626";
21
13
  const escapedTitle = escapeHtml(params.title);
@@ -299,19 +291,33 @@ async function loginOpenAICodex(callbacks) {
299
291
  async function refreshOpenAICodexToken(refreshToken) {
300
292
  return refreshAccessToken(refreshToken);
301
293
  }
302
- const openaiCodexOAuthProvider = {
303
- id: "openai-codex",
304
- name: "OpenAI Codex",
305
- usesCallbackServer: true,
306
- async login(callbacks) {
307
- return loginOpenAICodex(callbacks);
308
- },
309
- async refreshToken(credentials) {
310
- return refreshOpenAICodexToken(credentials.refresh);
311
- },
312
- getApiKey(credentials) {
313
- return credentials.access;
314
- }
315
- };
294
+ var CLIENT_ID, AUTHORIZE_URL, TOKEN_URL, CALLBACK_PORT, CALLBACK_PATH, REDIRECT_URI, SCOPE, MANUAL_PROMPT_DELAY_MS, TOKEN_REQUEST_TIMEOUT_MS, openaiCodexOAuthProvider;
295
+ var init_openai_codex = __esmMin((() => {
296
+ init_pkce();
297
+ CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
298
+ AUTHORIZE_URL = "https://auth.openai.com/oauth/authorize";
299
+ TOKEN_URL = "https://auth.openai.com/oauth/token";
300
+ CALLBACK_PORT = 1455;
301
+ CALLBACK_PATH = "/auth/callback";
302
+ REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
303
+ SCOPE = "openid profile email offline_access";
304
+ MANUAL_PROMPT_DELAY_MS = 15e3;
305
+ TOKEN_REQUEST_TIMEOUT_MS = 3e4;
306
+ openaiCodexOAuthProvider = {
307
+ id: "openai-codex",
308
+ name: "OpenAI Codex",
309
+ usesCallbackServer: true,
310
+ async login(callbacks) {
311
+ return loginOpenAICodex(callbacks);
312
+ },
313
+ async refreshToken(credentials) {
314
+ return refreshOpenAICodexToken(credentials.refresh);
315
+ },
316
+ getApiKey(credentials) {
317
+ return credentials.access;
318
+ }
319
+ };
320
+ }));
316
321
  //#endregion
317
- export { loginOpenAICodex, openaiCodexOAuthProvider, refreshOpenAICodexToken };
322
+ init_openai_codex();
323
+ export { init_openai_codex, loginOpenAICodex, openaiCodexOAuthProvider, refreshOpenAICodexToken };
@@ -1,3 +1,4 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
1
2
  //#region src/auth/oauth/pkce.ts
2
3
  /**
3
4
  * PKCE utilities using Web Crypto API.
@@ -19,5 +20,7 @@ async function generatePKCE() {
19
20
  challenge: base64urlEncode(new Uint8Array(hashBuffer))
20
21
  };
21
22
  }
23
+ var init_pkce = __esmMin((() => {}));
22
24
  //#endregion
23
- export { generatePKCE };
25
+ init_pkce();
26
+ export { generatePKCE, init_pkce };
@@ -0,0 +1,13 @@
1
+ import type { OAuthProviderInterface } from './types.js';
2
+ export interface OAuthProviderDefinition {
3
+ displayName: string;
4
+ oauthOnly?: boolean;
5
+ provider: OAuthProviderInterface;
6
+ profileId: string;
7
+ urlPrompt: string;
8
+ }
9
+ export declare const OAUTH_PROVIDER_DEFINITIONS: Readonly<Record<string, OAuthProviderDefinition>>;
10
+ export declare function getOAuthProviderDefinition(provider: string): OAuthProviderDefinition | undefined;
11
+ export declare function getOAuthProviderInterfaces(): Record<string, OAuthProviderInterface>;
12
+ export declare function getOAuthProviderIds(): string[];
13
+ export declare function isOAuthOnlyProvider(provider: string): boolean;
@@ -0,0 +1,65 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { anthropicOAuthProvider, init_anthropic } from "./anthropic.js";
3
+ import { githubCopilotOAuthProvider, init_github_copilot } from "./github-copilot.js";
4
+ import { antigravityOAuthProvider } from "./google-oauth/google-antigravity.js";
5
+ import { init_google_antigravity } from "./google-antigravity.js";
6
+ import { geminiCliOAuthProvider } from "./google-oauth/google-gemini-cli.js";
7
+ import { init_google_gemini_cli } from "./google-gemini-cli.js";
8
+ import { init_kimi_coding, kimiCodingOAuthProvider } from "./kimi-coding.js";
9
+ import { init_minimax_cn, minimaxCnOAuthProvider } from "./minimax-cn.js";
10
+ import { init_minimax, minimaxOAuthProvider } from "./minimax.js";
11
+ import { init_openai_codex, openaiCodexOAuthProvider } from "./openai-codex.js";
12
+ import { init_xopc_cloud, xopcCloudOAuthProvider } from "./xopc-cloud.js";
13
+ //#region src/auth/oauth/registry.ts
14
+ function definition(provider, displayName = provider.name) {
15
+ return {
16
+ displayName,
17
+ provider,
18
+ profileId: `${provider.id}:default`,
19
+ urlPrompt: "🌐 Please open this URL in your browser:\n"
20
+ };
21
+ }
22
+ function getOAuthProviderDefinition(provider) {
23
+ return OAUTH_PROVIDER_DEFINITIONS[provider];
24
+ }
25
+ function getOAuthProviderInterfaces() {
26
+ return Object.fromEntries(Object.entries(OAUTH_PROVIDER_DEFINITIONS).map(([id, value]) => [id, value.provider]));
27
+ }
28
+ function getOAuthProviderIds() {
29
+ return Object.keys(OAUTH_PROVIDER_DEFINITIONS);
30
+ }
31
+ function isOAuthOnlyProvider(provider) {
32
+ return OAUTH_PROVIDER_DEFINITIONS[provider]?.oauthOnly === true;
33
+ }
34
+ var OAUTH_PROVIDER_DEFINITIONS;
35
+ var init_registry = __esmMin((() => {
36
+ init_anthropic();
37
+ init_github_copilot();
38
+ init_google_antigravity();
39
+ init_google_gemini_cli();
40
+ init_kimi_coding();
41
+ init_minimax_cn();
42
+ init_minimax();
43
+ init_openai_codex();
44
+ init_xopc_cloud();
45
+ OAUTH_PROVIDER_DEFINITIONS = {
46
+ "xopc-cloud": {
47
+ ...definition(xopcCloudOAuthProvider),
48
+ oauthOnly: true
49
+ },
50
+ anthropic: definition(anthropicOAuthProvider, "Anthropic (Claude)"),
51
+ minimax: definition(minimaxOAuthProvider, "MiniMax (幂维智能)"),
52
+ "minimax-cn": {
53
+ ...definition(minimaxCnOAuthProvider, "MiniMax CN"),
54
+ urlPrompt: "🌐 请在浏览器中打开以下 URL:\n"
55
+ },
56
+ "kimi-coding": definition(kimiCodingOAuthProvider, "Kimi For Coding (月之暗面)"),
57
+ "github-copilot": definition(githubCopilotOAuthProvider),
58
+ "google-gemini-cli": definition(geminiCliOAuthProvider),
59
+ "google-antigravity": definition(antigravityOAuthProvider),
60
+ "openai-codex": definition(openaiCodexOAuthProvider)
61
+ };
62
+ }));
63
+ //#endregion
64
+ init_registry();
65
+ export { OAUTH_PROVIDER_DEFINITIONS, getOAuthProviderDefinition, getOAuthProviderIds, getOAuthProviderInterfaces, init_registry, isOAuthOnlyProvider };
@@ -0,0 +1,2 @@
1
+ import type { OAuthProviderInterface } from './types.js';
2
+ export declare const xopcCloudOAuthProvider: OAuthProviderInterface;
@@ -0,0 +1,101 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { hostname } from "node:os";
3
+ import { setTimeout } from "node:timers/promises";
4
+ //#region src/auth/oauth/xopc-cloud.ts
5
+ function consoleUrl() {
6
+ return (process.env.XOPC_CONSOLE_URL ?? DEFAULT_CONSOLE_URL).replace(/\/+$/, "");
7
+ }
8
+ async function readJson(response) {
9
+ const body = await response.json().catch(() => null);
10
+ return body && typeof body === "object" ? body : {};
11
+ }
12
+ function credentials(body) {
13
+ if (typeof body.access_token !== "string" || body.access_token.length === 0 || typeof body.refresh_token !== "string" || body.refresh_token.length === 0 || typeof body.expires_in !== "number" || !Number.isFinite(body.expires_in) || body.expires_in <= 0) throw new Error("XOPC OAuth token response is incomplete");
14
+ return {
15
+ access: body.access_token,
16
+ refresh: body.refresh_token,
17
+ expires: Date.now() + body.expires_in * 1e3,
18
+ scope: typeof body.scope === "string" ? body.scope.split(" ").filter(Boolean) : []
19
+ };
20
+ }
21
+ async function tokenRequest(body, signal) {
22
+ return fetch(`${consoleUrl()}/oauth/token`, {
23
+ method: "POST",
24
+ headers: {
25
+ "content-type": "application/x-www-form-urlencoded",
26
+ accept: "application/json"
27
+ },
28
+ body,
29
+ signal: signal ?? AbortSignal.timeout(3e4)
30
+ });
31
+ }
32
+ async function login(callbacks) {
33
+ const response = await fetch(`${consoleUrl()}/oauth/device_authorization`, {
34
+ method: "POST",
35
+ headers: {
36
+ "content-type": "application/x-www-form-urlencoded",
37
+ accept: "application/json"
38
+ },
39
+ body: new URLSearchParams({
40
+ client_id: CLIENT_ID,
41
+ scope: DEFAULT_SCOPE,
42
+ device_name: hostname() || "XOPC client",
43
+ client_type: "cli"
44
+ }),
45
+ signal: callbacks.signal ?? AbortSignal.timeout(3e4)
46
+ });
47
+ const body = await readJson(response);
48
+ if (!response.ok) throw new Error(body.error_description ?? body.error ?? "XOPC OAuth authorization failed");
49
+ const deviceCode = typeof body.device_code === "string" ? body.device_code : "";
50
+ const userCode = typeof body.user_code === "string" ? body.user_code : "";
51
+ const verificationUri = typeof body.verification_uri_complete === "string" ? body.verification_uri_complete : typeof body.verification_uri === "string" ? body.verification_uri : "";
52
+ if (!deviceCode || !userCode || !verificationUri) throw new Error("XOPC OAuth response is incomplete");
53
+ const intervalMs = Math.max(1, Number(body.interval) || 5) * 1e3;
54
+ const expiresAt = Date.now() + Math.max(1, Number(body.expires_in) || 600) * 1e3;
55
+ callbacks.onDeviceCode({
56
+ userCode,
57
+ verificationUri,
58
+ intervalSeconds: intervalMs / 1e3,
59
+ expiresInSeconds: Math.floor((expiresAt - Date.now()) / 1e3)
60
+ });
61
+ while (Date.now() < expiresAt) {
62
+ if (callbacks.signal?.aborted) throw callbacks.signal.reason ?? /* @__PURE__ */ new Error("OAuth login cancelled");
63
+ await setTimeout(intervalMs, void 0, callbacks.signal ? { signal: callbacks.signal } : void 0);
64
+ const token = await tokenRequest(new URLSearchParams({
65
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
66
+ client_id: CLIENT_ID,
67
+ device_code: deviceCode
68
+ }), callbacks.signal);
69
+ const tokenBody = await readJson(token);
70
+ if (token.ok) return credentials(tokenBody);
71
+ if (tokenBody.error === "authorization_pending" || tokenBody.error === "slow_down") continue;
72
+ throw new Error(tokenBody.error_description ?? tokenBody.error ?? "XOPC OAuth token exchange failed");
73
+ }
74
+ throw new Error("XOPC OAuth authorization expired");
75
+ }
76
+ async function refreshToken(current) {
77
+ const response = await tokenRequest(new URLSearchParams({
78
+ grant_type: "refresh_token",
79
+ client_id: CLIENT_ID,
80
+ refresh_token: current.refresh
81
+ }));
82
+ const body = await readJson(response);
83
+ if (!response.ok) throw new Error(body.error_description ?? body.error ?? "XOPC OAuth refresh failed");
84
+ return credentials(body);
85
+ }
86
+ var CLIENT_ID, DEFAULT_CONSOLE_URL, DEFAULT_SCOPE, xopcCloudOAuthProvider;
87
+ var init_xopc_cloud = __esmMin((() => {
88
+ CLIENT_ID = "xopc-native";
89
+ DEFAULT_CONSOLE_URL = "https://console.xopc.ai";
90
+ DEFAULT_SCOPE = "models:read models:invoke account:usage offline_access";
91
+ xopcCloudOAuthProvider = {
92
+ id: "xopc-cloud",
93
+ name: "XOPC Model Service",
94
+ login,
95
+ refreshToken,
96
+ getApiKey: (value) => value.access
97
+ };
98
+ }));
99
+ //#endregion
100
+ init_xopc_cloud();
101
+ export { init_xopc_cloud, xopcCloudOAuthProvider };
@@ -1,5 +1,5 @@
1
- import { init_paths, resolveCredentialsDir } from "../../config/paths.js";
2
1
  import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
2
+ import { init_paths, resolveCredentialsDir } from "../../config/paths.js";
3
3
  import path from "node:path";
4
4
  import { chmodSync, existsSync, mkdirSync, readFileSync } from "node:fs";
5
5
  //#region src/auth/profiles/store.ts
@@ -1,7 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
3
2
  import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveOAuthPath } from "../config/paths.js";
3
+ import { init_registry, isOAuthOnlyProvider } from "./oauth/registry.js";
4
4
  import { init_loader, loadConfig } from "../config/loader.js";
5
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
5
6
  import { existsSync, readFileSync } from "node:fs";
6
7
  //#region src/auth/sync-provider-auth.ts
7
8
  /**
@@ -81,6 +82,7 @@ function readOAuthAccessTokenSync(provider) {
81
82
  */
82
83
  function resolveProviderApiKeySync(provider) {
83
84
  const normalized = provider.toLowerCase();
85
+ if (isOAuthOnlyProvider(normalized)) return readOAuthAccessTokenSync(normalized);
84
86
  const cfg = loadConfig();
85
87
  const fromAgent = readApiKeyFromProfilesFile(resolveAgentAuthProfilesPath(cfg, getDefaultAgentId(cfg)), normalized);
86
88
  if (fromAgent) return fromAgent;
@@ -91,6 +93,7 @@ function resolveProviderApiKeySync(provider) {
91
93
  /** Resolve one agent's private credential, then the shared credential and OAuth token. */
92
94
  function resolveProviderApiKeyForAgentSync(provider, agentId, config) {
93
95
  const normalized = provider.toLowerCase();
96
+ if (isOAuthOnlyProvider(normalized)) return readOAuthAccessTokenSync(normalized);
94
97
  if (agentId?.trim()) {
95
98
  const fromAgent = readApiKeyFromProfilesFile(resolveAgentAuthProfilesPath(config ?? loadConfig(), agentId.trim()), normalized);
96
99
  if (fromAgent) return fromAgent;
@@ -104,6 +107,7 @@ function resolveProviderApiKeyForAgentSync(provider, agentId, config) {
104
107
  * matching async CredentialResolver resolution (excluding env — callers check env separately).
105
108
  */
106
109
  function hasProviderAuthOnDiskSync(provider) {
110
+ if (isOAuthOnlyProvider(provider.toLowerCase())) return hasOAuthTokenSync(provider);
107
111
  const cfg = loadConfig();
108
112
  if (hasApiKeyInProfilesFile(resolveAgentAuthProfilesPath(cfg, getDefaultAgentId(cfg)), provider)) return true;
109
113
  if (hasApiKeyInProfilesFile(resolveAuthProfilesPath(), provider)) return true;
@@ -114,6 +118,7 @@ var init_sync_provider_auth = __esmMin((() => {
114
118
  init_paths();
115
119
  init_loader();
116
120
  init_resolve_route();
121
+ init_registry();
117
122
  }));
118
123
  //#endregion
119
124
  init_sync_provider_auth();
@@ -2,8 +2,8 @@ import { PACKAGE_VERSION, init_package_version } from "../../package-version.js"
2
2
  import { createLogger } from "../../utils/logger/index.js";
3
3
  import { init_logger } from "../../utils/logger.js";
4
4
  import { assertCacheDir, init_cache_dir_policy } from "../cache-dir-policy.js";
5
- import { init_paths, resolveBinDir } from "../../config/paths.js";
6
5
  import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
6
+ import { init_paths, resolveBinDir } from "../../config/paths.js";
7
7
  import { resolvePackageRoot } from "../../infra/update-check.js";
8
8
  import { dirname, join } from "node:path";
9
9
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1,8 +1,8 @@
1
1
  import { buildChannelCatalogForConfig, init_channel_catalog_service } from "../../channels/catalog/channel-catalog-service.js";
2
2
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
3
+ import { formatExamples, register } from "../registry.js";
3
4
  import { listChannelPairingState } from "../../channels/pairing/pairing-service.js";
4
5
  import { approveChannelPairingFromCli } from "../../channels/pairing/approve-cli.js";
5
- import { formatExamples, register } from "../registry.js";
6
6
  import { colors } from "../utils/colors.js";
7
7
  import { Command } from "commander";
8
8
  //#region src/cli/commands/channels.ts
@@ -1,8 +1,8 @@
1
1
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
2
- import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
3
2
  import { register } from "../registry.js";
4
- import { confirm } from "@inquirer/prompts";
3
+ import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
5
4
  import { Command } from "commander";
5
+ import { confirm } from "@inquirer/prompts";
6
6
  //#region src/cli/commands/connectors.ts
7
7
  init_loader();
8
8
  function parsePairs(values, option) {
@@ -1,6 +1,6 @@
1
1
  import { getAgentDefaultModelRef, init_schema, parseModelRef } from "../../../../config/schema.js";
2
- import { init_loader, loadConfig } from "../../../../config/loader.js";
3
2
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "../../../../providers/env-keys.js";
3
+ import { init_loader, loadConfig } from "../../../../config/loader.js";
4
4
  import { existsSync } from "node:fs";
5
5
  //#region src/cli/commands/doctor/checks/provider-auth.ts
6
6
  init_loader();
@@ -1,7 +1,7 @@
1
1
  import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
2
2
  import { init_loader, loadConfig } from "../../config/loader.js";
3
- import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl, verifyStoreArtifactSha256 } from "../../agent/skills/marketplace/adapters/store/store-api-client.js";
4
3
  import { getContextWithOpts } from "../context.js";
4
+ import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl, verifyStoreArtifactSha256 } from "../../agent/skills/marketplace/adapters/store/store-api-client.js";
5
5
  import { getExtensionLockfileManager } from "../../extensions/lockfile.js";
6
6
  import { installFromLocal, installFromNpm, peekExtensionManifestFromStoreZip } from "../../extensions/install.js";
7
7
  import { commitStagedExtensionInstall, finalizeStagedExtensionInstall, rollbackStagedExtensionInstall, stageExtensionStoreZip } from "../../extensions/install-transaction.js";
@@ -12,8 +12,8 @@ import { join, resolve } from "node:path";
12
12
  import { existsSync, readFileSync, rmSync, statSync } from "node:fs";
13
13
  import { execSync } from "node:child_process";
14
14
  import { createHash } from "node:crypto";
15
- import { confirm } from "@inquirer/prompts";
16
15
  import { Command } from "commander";
16
+ import { confirm } from "@inquirer/prompts";
17
17
  import semver from "semver";
18
18
  //#region src/cli/commands/extension-marketplace.ts
19
19
  init_loader();
@@ -3,8 +3,8 @@ import { loadConfig } from "../../../config/loader.js";
3
3
  import "../../../config/index.js";
4
4
  import { isRestartEnabled } from "../../../config/commands.flags.js";
5
5
  import { resolveGatewayService } from "../../../daemon/service.js";
6
- import { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from "../../../infra/restart.js";
7
6
  import { findVerifiedGatewayListenerPidsOnPortSync, formatGatewayPidList, signalVerifiedGatewayPidSync } from "../../../infra/gateway-processes.js";
7
+ import { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from "../../../infra/restart.js";
8
8
  import { runServiceRestart, runServiceStop } from "./lifecycle-core.js";
9
9
  import { DEFAULT_RESTART_HEALTH_ATTEMPTS, renderGatewayPortHealthDiagnostics, waitForGatewayHealthyListener } from "./restart-health.js";
10
10
  import { parsePortFromArgs, renderGatewayServiceStartHints, resolveGatewayPortFromConfig } from "./shared.js";
@@ -1,6 +1,6 @@
1
1
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
2
- import { loadConfig, saveConfig } from "../../config/loader.js";
3
2
  import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
3
+ import { loadConfig, saveConfig } from "../../config/loader.js";
4
4
  import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
5
5
  import { formatExamples, register } from "../registry.js";
6
6
  import { getContextWithOpts } from "../context.js";
@@ -8,8 +8,8 @@ import "../../config/index.js";
8
8
  import { prepareUpdateGlobalDefaults } from "../../gateway/global-defaults-admin.js";
9
9
  import { colors } from "../utils/colors.js";
10
10
  import { runCliOAuthLogin } from "../utils/oauth-login.js";
11
- import { input } from "@inquirer/prompts";
12
11
  import { Command } from "commander";
12
+ import { input } from "@inquirer/prompts";
13
13
  //#region src/cli/commands/models.ts
14
14
  init_credentials();
15
15
  init_schema();
@@ -8,8 +8,8 @@ import { initWorkspace } from "../utils/init-workspace.js";
8
8
  import { setupModel } from "./onboard/model.js";
9
9
  import { getChannelConfigurators } from "./onboard/channels/registry.js";
10
10
  import { setupChannels } from "./onboard/channels/index.js";
11
- import { select } from "@inquirer/prompts";
12
11
  import { Command } from "commander";
12
+ import { select } from "@inquirer/prompts";
13
13
  //#region src/cli/commands/onboard.ts
14
14
  init_schema();
15
15
  function isInteractive() {
@@ -2,9 +2,9 @@ import { PACKAGE_VERSION, init_package_version } from "../../package-version.js"
2
2
  import { loadConfig } from "../../config/loader.js";
3
3
  import { formatExamples, register } from "../registry.js";
4
4
  import "../../config/index.js";
5
- import { acquireUpdateLock } from "../../infra/update-lock.js";
6
5
  import { normalizeUpdateChannel } from "../../infra/update-channels.js";
7
6
  import { compareSemver, resolveNpmChannelTag } from "../../infra/update-check.js";
7
+ import { acquireUpdateLock } from "../../infra/update-lock.js";
8
8
  import { formatUpdateApiResult, resolveUpdateInstallSurface, runGatewayUpdateWithPostSteps } from "../../infra/update-runner.js";
9
9
  import { Command } from "commander";
10
10
  //#region src/cli/commands/update.ts
@@ -1,29 +1,6 @@
1
- /**
2
- * OAuth Provider Configuration
3
- *
4
- * Centralized OAuth provider definitions for CLI commands.
5
- * Used by both auth.ts and onboard.ts to avoid duplication.
6
- */
7
- import type { OAuthProviderInterface } from '../../auth/oauth/types.js';
8
- export interface OAuthProviderConfig {
9
- displayName: string;
10
- provider: OAuthProviderInterface;
11
- profileId: string;
12
- urlPrompt: string;
13
- }
14
- /**
15
- * Map of provider IDs to their OAuth configuration.
16
- */
17
- export declare const OAUTH_PROVIDERS: Record<string, OAuthProviderConfig>;
18
- /**
19
- * Get supported OAuth provider IDs.
20
- */
1
+ import { type OAuthProviderDefinition } from '../../auth/oauth/registry.js';
2
+ export type OAuthProviderConfig = OAuthProviderDefinition;
3
+ export declare const OAUTH_PROVIDERS: Readonly<Record<string, OAuthProviderDefinition>>;
21
4
  export declare function getSupportedOAuthProviders(): string[];
22
- /**
23
- * Check if a provider supports OAuth.
24
- */
25
5
  export declare function supportsOAuth(provider: string): boolean;
26
- /**
27
- * Get OAuth provider config by ID.
28
- */
29
6
  export declare function getOAuthProvider(provider: string): OAuthProviderConfig | undefined;
@@ -1,89 +1,15 @@
1
- import { anthropicOAuthProvider } from "../../auth/oauth/anthropic.js";
2
- import { minimaxOAuthProvider } from "../../auth/oauth/minimax.js";
3
- import { minimaxCnOAuthProvider } from "../../auth/oauth/minimax-cn.js";
4
- import { kimiCodingOAuthProvider } from "../../auth/oauth/kimi-coding.js";
5
- import { githubCopilotOAuthProvider } from "../../auth/oauth/github-copilot.js";
6
- import { geminiCliOAuthProvider } from "../../auth/oauth/google-oauth/google-gemini-cli.js";
7
- import { antigravityOAuthProvider } from "../../auth/oauth/google-oauth/google-antigravity.js";
8
- import { openaiCodexOAuthProvider } from "../../auth/oauth/openai-codex.js";
9
- import "../../auth/oauth/index.js";
1
+ import { OAUTH_PROVIDER_DEFINITIONS, getOAuthProviderDefinition, init_registry } from "../../auth/oauth/registry.js";
10
2
  //#region src/cli/utils/oauth-providers.ts
11
- /**
12
- * OAuth Provider Configuration
13
- *
14
- * Centralized OAuth provider definitions for CLI commands.
15
- * Used by both auth.ts and onboard.ts to avoid duplication.
16
- */
17
- /**
18
- * Map of provider IDs to their OAuth configuration.
19
- */
20
- const OAUTH_PROVIDERS = {
21
- anthropic: {
22
- displayName: "Anthropic (Claude)",
23
- provider: anthropicOAuthProvider,
24
- profileId: "anthropic:default",
25
- urlPrompt: "🌐 Please open this URL in your browser:\n"
26
- },
27
- minimax: {
28
- displayName: "MiniMax (幂维智能)",
29
- provider: minimaxOAuthProvider,
30
- profileId: "minimax:default",
31
- urlPrompt: "🌐 Please open this URL in your browser:\n"
32
- },
33
- "minimax-cn": {
34
- displayName: "MiniMax CN",
35
- provider: minimaxCnOAuthProvider,
36
- profileId: "minimax-cn:default",
37
- urlPrompt: "🌐 请在浏览器中打开以下 URL:\n"
38
- },
39
- "kimi-coding": {
40
- displayName: "Kimi For Coding (月之暗面)",
41
- provider: kimiCodingOAuthProvider,
42
- profileId: "kimi-coding:default",
43
- urlPrompt: "🌐 Please open this URL in your browser:\n"
44
- },
45
- "github-copilot": {
46
- displayName: "GitHub Copilot",
47
- provider: githubCopilotOAuthProvider,
48
- profileId: "github-copilot:default",
49
- urlPrompt: "🌐 Please open this URL in your browser:\n"
50
- },
51
- "google-gemini-cli": {
52
- displayName: "Google Gemini CLI",
53
- provider: geminiCliOAuthProvider,
54
- profileId: "google-gemini-cli:default",
55
- urlPrompt: "🌐 Please open this URL in your browser:\n"
56
- },
57
- "google-antigravity": {
58
- displayName: "Google Antigravity",
59
- provider: antigravityOAuthProvider,
60
- profileId: "google-antigravity:default",
61
- urlPrompt: "🌐 Please open this URL in your browser:\n"
62
- },
63
- "openai-codex": {
64
- displayName: "OpenAI Codex",
65
- provider: openaiCodexOAuthProvider,
66
- profileId: "openai-codex:default",
67
- urlPrompt: "🌐 Please open this URL in your browser:\n"
68
- }
69
- };
70
- /**
71
- * Get supported OAuth provider IDs.
72
- */
3
+ init_registry();
4
+ const OAUTH_PROVIDERS = OAUTH_PROVIDER_DEFINITIONS;
73
5
  function getSupportedOAuthProviders() {
74
- return Object.keys(OAUTH_PROVIDERS);
6
+ return Object.keys(OAUTH_PROVIDER_DEFINITIONS);
75
7
  }
76
- /**
77
- * Check if a provider supports OAuth.
78
- */
79
8
  function supportsOAuth(provider) {
80
- return provider in OAUTH_PROVIDERS;
9
+ return Boolean(getOAuthProviderDefinition(provider));
81
10
  }
82
- /**
83
- * Get OAuth provider config by ID.
84
- */
85
11
  function getOAuthProvider(provider) {
86
- return OAUTH_PROVIDERS[provider];
12
+ return getOAuthProviderDefinition(provider);
87
13
  }
88
14
  //#endregion
89
15
  export { OAUTH_PROVIDERS, getOAuthProvider, getSupportedOAuthProviders, supportsOAuth };
@@ -1,6 +1,6 @@
1
- import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
2
1
  import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
3
2
  import "../agent-manifest/index.js";
3
+ import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
4
4
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
5
5
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
6
6
  //#region src/config/agent-profile.ts
@@ -2,15 +2,15 @@ import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXop
2
2
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
3
3
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
4
4
  import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
5
- import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
5
+ import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
6
6
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
7
7
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
8
8
  import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
9
- import { extractProfileAgentId, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
10
9
  import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
11
- import { init_loader, loadConfig, saveConfig } from "./loader.js";
12
- import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
13
10
  import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
11
+ import { init_loader, loadConfig, saveConfig } from "./loader.js";
12
+ import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
13
+ import { extractProfileAgentId, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
14
14
  import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
15
15
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
16
16
  import { getWorkspacePath } from "./workspace-path-helpers.js";
@@ -2,8 +2,8 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { ConfigSchema, init_schema } from "./schema.js";
5
- import { init_paths, resolveConfigPath } from "./paths.js";
6
5
  import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
+ import { init_paths, resolveConfigPath } from "./paths.js";
7
7
  import { assertChannelPluginConfigs, init_validate_channel_configs } from "./validate-channel-configs.js";
8
8
  import { dirname } from "path";
9
9
  import { existsSync, mkdirSync, promises, readFileSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { init_paths, resolveModelsJsonPath } from "./paths.js";
3
2
  import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
3
+ import { init_paths, resolveModelsJsonPath } from "./paths.js";
4
4
  import { existsSync, readFileSync } from "fs";
5
5
  import { z } from "zod";
6
6
  //#region src/config/models-json.ts
@@ -27,6 +27,14 @@ function validateModelsConfig(config) {
27
27
  }
28
28
  const data = result.data;
29
29
  for (const [providerName, providerConfig] of Object.entries(data.providers)) {
30
+ if (providerName === "xopc-cloud") {
31
+ errors.push({
32
+ path: "providers.xopc-cloud",
33
+ message: "xopc-cloud is managed by OAuth and the runtime model catalog; it cannot be configured in models.json",
34
+ severity: "error"
35
+ });
36
+ continue;
37
+ }
30
38
  if (!PROVIDER_ID_REGEX.test(providerName)) errors.push({
31
39
  path: `providers.${providerName}`,
32
40
  message: "Provider ID must start/end with alphanumeric, contain only lowercase letters, numbers, hyphens, and underscores",