@xopcai/xopc 0.0.101 → 0.0.103

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 (323) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/transport/webhook/monitor.js +2 -2
  6. package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +1 -1
  7. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  8. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  9. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +1 -1
  11. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  12. package/dist/extensions/telegram/src/send-options.js +8 -5
  13. package/dist/extensions/telegram/src/send-options.js.map +1 -1
  14. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  15. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  16. package/dist/extensions/telegram/xopc.extension.json +1 -1
  17. package/dist/extensions/weixin/src/api/api.js +2 -2
  18. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  19. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  20. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  21. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  22. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  23. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  24. package/dist/extensions/weixin/src/plugin.js +1 -1
  25. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  26. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  27. package/dist/gateway/static/root/assets/{agents-u8cmUfGQ.js → agents-BwXkia_W.js} +1 -1
  28. package/dist/gateway/static/root/assets/{apps-page-DF8m9cUE.js → apps-page-C5RmwmTT.js} +1 -1
  29. package/dist/gateway/static/root/assets/{channels-settings-BM3doRvi.js → channels-settings-tlOTdaXw.js} +1 -1
  30. package/dist/gateway/static/root/assets/{channels-status-swr-ah4zWEIP.js → channels-status-swr-D4XjqwqC.js} +1 -1
  31. package/dist/gateway/static/root/assets/{cron-api-DgMuL_2b.js → cron-api-DcmfGuj0.js} +1 -1
  32. package/dist/gateway/static/root/assets/{cron-page-COfUPKfq.js → cron-page-CijJ4G6F.js} +1 -1
  33. package/dist/gateway/static/root/assets/{dist-Dzy3Q0ZH.js → dist-CWm8hTXZ.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-kyxxefKh.js → extension-debug-page-BzYgTkS9.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-BVbCBHoI.js → extension-page-BmTZH6gL.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-t1lb2A7v.js → extension-settings-page-CyJk_G64.js} +1 -1
  37. package/dist/gateway/static/root/assets/{fetch-drJUxxKP.js → fetch-CMoWY2Si.js} +1 -1
  38. package/dist/gateway/static/root/assets/{field-primitives-6Vo1Yga4.js → field-primitives-C4GpxsDo.js} +1 -1
  39. package/dist/gateway/static/root/assets/{heartbeat-config-api-BF3psu4O.js → heartbeat-config-api-CLD0Gpi3.js} +1 -1
  40. package/dist/gateway/static/root/assets/index-0HmunJW9.js +4845 -0
  41. package/dist/gateway/static/root/assets/index-Bk75Phrd.css +1 -0
  42. package/dist/gateway/static/root/assets/{logs-page-BTVPXcHV.js → logs-page-BjdQjHwk.js} +1 -1
  43. package/dist/gateway/static/root/assets/{note-detail-page-DqSAg_5Z.js → note-detail-page-8Er4197b.js} +2 -2
  44. package/dist/gateway/static/root/assets/{note-time-FSOjchic.js → note-time-CF3vf1jm.js} +1 -1
  45. package/dist/gateway/static/root/assets/{notes-page-DkRX7BE2.js → notes-page-BBnTh0uI.js} +1 -1
  46. package/dist/gateway/static/root/assets/{sessions-page-Khdw35Zk.js → sessions-page-B0riYK7j.js} +1 -1
  47. package/dist/gateway/static/root/assets/{settings-advanced-gate-DspC8oEm.js → settings-advanced-gate-DiP_WHu_.js} +1 -1
  48. package/dist/gateway/static/root/assets/{settings-form-section-DuxvUuur.js → settings-form-section-C7qA7y0J.js} +1 -1
  49. package/dist/gateway/static/root/assets/{settings-page-DN8JBZ8F.js → settings-page-1ZPhcCZ9.js} +2 -2
  50. package/dist/gateway/static/root/assets/share-preview-page-Tvr5Mtq5.js +2 -0
  51. package/dist/gateway/static/root/assets/{skills-page-ByYT0fXZ.js → skills-page-BQ1hllKD.js} +1 -1
  52. package/dist/gateway/static/root/assets/{theme-store-B6KXPHgK.js → theme-store-HTvJlFLL.js} +1 -1
  53. package/dist/gateway/static/root/assets/url-F3_D_6zZ.js +3 -0
  54. package/dist/gateway/static/root/assets/{utils-DK_1H47k.js → utils-CPr3FBh2.js} +1 -1
  55. package/dist/gateway/static/root/assets/{voice-api-key-field-BYN2EIMs.js → voice-api-key-field-BkbDl6dH.js} +1 -1
  56. package/dist/gateway/static/root/assets/{workflow-page.utils-Bi19YNTr.js → workflow-page.utils-CeBkAjP7.js} +1 -1
  57. package/dist/gateway/static/root/assets/{workflows-page-DP57FEKW.js → workflows-page-D059ysoF.js} +1 -1
  58. package/dist/gateway/static/root/index.html +5 -5
  59. package/dist/package.js +1 -1
  60. package/dist/src/agent/agent-manager.js +7 -7
  61. package/dist/src/agent/agent-scope.js +1 -1
  62. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  63. package/dist/src/agent/context/workspace-seed.js +2 -2
  64. package/dist/src/agent/context/workspace-state.js +1 -1
  65. package/dist/src/agent/goals/goal-run-store.js +4 -4
  66. package/dist/src/agent/goals/persistent-goal-service.js +1 -1
  67. package/dist/src/agent/goals/post-turn.js +2 -2
  68. package/dist/src/agent/image/load-image-media.js +2 -2
  69. package/dist/src/agent/inbound/attachment-pipeline.js +2 -2
  70. package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -1
  71. package/dist/src/agent/ipc/bus.js +1 -1
  72. package/dist/src/agent/ipc/inbox.js +2 -2
  73. package/dist/src/agent/ipc/socket.js +1 -1
  74. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  75. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  76. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  77. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  78. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  79. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  80. package/dist/src/agent/memory/dreaming/events.js +1 -1
  81. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  82. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  83. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  84. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  85. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  86. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  87. package/dist/src/agent/memory/memory-flush.js +1 -1
  88. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  89. package/dist/src/agent/models/manager.js +1 -1
  90. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  91. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  92. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  93. package/dist/src/agent/sandbox/path-policy.js +2 -2
  94. package/dist/src/agent/service.js +4 -4
  95. package/dist/src/agent/session/session-inspector.js +1 -1
  96. package/dist/src/agent/skills/config.js +1 -1
  97. package/dist/src/agent/skills/hub-hash.js +2 -2
  98. package/dist/src/agent/skills/hub-lock.js +1 -1
  99. package/dist/src/agent/skills/hub-pull.js +2 -2
  100. package/dist/src/agent/skills/index.js +1 -1
  101. package/dist/src/agent/skills/managed-store.js +1 -1
  102. package/dist/src/agent/skills/scanner.js +1 -1
  103. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  104. package/dist/src/agent/skills/skill-manager.js +1 -1
  105. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  106. package/dist/src/agent/tools/factory.js +1 -1
  107. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  108. package/dist/src/agent/tools/send-media.js +2 -3
  109. package/dist/src/agent/tools/send-media.js.map +1 -1
  110. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  111. package/dist/src/agent/tools/workflow-tool.js +1 -1
  112. package/dist/src/agent/tools/write.js +1 -1
  113. package/dist/src/agent/workflow/catalog.js +1 -1
  114. package/dist/src/auth/credentials.d.ts +7 -0
  115. package/dist/src/auth/credentials.js +37 -4
  116. package/dist/src/auth/credentials.js.map +1 -1
  117. package/dist/src/auth/index.d.ts +1 -1
  118. package/dist/src/auth/index.js.map +1 -1
  119. package/dist/src/auth/oauth/github-copilot.d.ts +1 -1
  120. package/dist/src/auth/oauth/google-antigravity.d.ts +1 -3
  121. package/dist/src/auth/oauth/google-antigravity.js +1 -1
  122. package/dist/src/auth/oauth/google-gemini-cli.d.ts +1 -3
  123. package/dist/src/auth/oauth/google-gemini-cli.js +1 -1
  124. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.js +3 -5
  125. package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +1 -0
  126. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.js +4 -5
  127. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +1 -0
  128. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.js +12 -4
  129. package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +1 -0
  130. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.d.ts +1 -1
  131. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.js +2 -2
  132. package/dist/src/auth/oauth/google-oauth/pkce.js.map +1 -0
  133. package/dist/src/auth/oauth/index.js +2 -2
  134. package/dist/src/auth/oauth/kimi-coding.d.ts +1 -1
  135. package/dist/src/auth/oauth/kimi-coding.js +1 -1
  136. package/dist/src/auth/oauth/kimi-coding.js.map +1 -1
  137. package/dist/src/auth/oauth/minimax-cn.js +1 -1
  138. package/dist/src/auth/oauth/minimax-cn.js.map +1 -1
  139. package/dist/src/auth/oauth/minimax.js +1 -1
  140. package/dist/src/auth/oauth/minimax.js.map +1 -1
  141. package/dist/src/auth/oauth/openai-codex.d.ts +7 -2
  142. package/dist/src/auth/oauth/openai-codex.js +318 -1
  143. package/dist/src/auth/oauth/openai-codex.js.map +1 -0
  144. package/dist/src/auth/profiles/store.js +4 -3
  145. package/dist/src/auth/profiles/store.js.map +1 -1
  146. package/dist/src/auth/sync-provider-auth.js +1 -1
  147. package/dist/src/browser/cache-dir-policy.js +1 -1
  148. package/dist/src/browser/cdp-local-launcher.js +2 -2
  149. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  150. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  151. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  152. package/dist/src/browser/stealth.js +1 -1
  153. package/dist/src/channels/attachments/attachment-classifiers.d.ts +1 -0
  154. package/dist/src/channels/attachments/attachment-classifiers.js +13 -2
  155. package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -1
  156. package/dist/src/channels/outbound/persist-store.js +1 -1
  157. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  158. package/dist/src/channels/pairing/pairing-store.js +2 -2
  159. package/dist/src/chat-commands/agent-edit.js +2 -2
  160. package/dist/src/chat-commands/builtins/config.js +2 -2
  161. package/dist/src/chat-commands/builtins/model.js +2 -2
  162. package/dist/src/chat-commands/builtins/model.js.map +1 -1
  163. package/dist/src/chat-commands/context.js +1 -1
  164. package/dist/src/cli/command-manifest.js +1 -1
  165. package/dist/src/cli/command-manifest.js.map +1 -1
  166. package/dist/src/cli/commands/auth.js +39 -51
  167. package/dist/src/cli/commands/auth.js.map +1 -1
  168. package/dist/src/cli/commands/config.js +1 -1
  169. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  170. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  171. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  172. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  173. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  174. package/dist/src/cli/commands/extension-dev.js +1 -1
  175. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  176. package/dist/src/cli/commands/extension-pack.js +1 -1
  177. package/dist/src/cli/commands/gateway/logs.js +1 -1
  178. package/dist/src/cli/commands/image.js +1 -1
  179. package/dist/src/cli/commands/init.js +3 -3
  180. package/dist/src/cli/commands/models.js +189 -54
  181. package/dist/src/cli/commands/models.js.map +1 -1
  182. package/dist/src/cli/commands/onboard/model.d.ts +1 -4
  183. package/dist/src/cli/commands/onboard/model.js +253 -183
  184. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  185. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  186. package/dist/src/cli/utils/oauth-login.d.ts +17 -0
  187. package/dist/src/cli/utils/oauth-login.js +93 -0
  188. package/dist/src/cli/utils/oauth-login.js.map +1 -0
  189. package/dist/src/cli/utils/oauth-providers.js +2 -2
  190. package/dist/src/commands/agents.config.js +1 -1
  191. package/dist/src/config/agent-profile.js +1 -1
  192. package/dist/src/config/gateway-bind.js +1 -1
  193. package/dist/src/config/index.js +5 -5
  194. package/dist/src/config/loader.js +2 -2
  195. package/dist/src/config/models-json.js +2 -2
  196. package/dist/src/config/paths-state.js +1 -1
  197. package/dist/src/config/profile.js +2 -2
  198. package/dist/src/config/workspace-path.js +1 -1
  199. package/dist/src/cron/executor.js +2 -2
  200. package/dist/src/cron/persistence.js +1 -1
  201. package/dist/src/daemon/constants.js +1 -1
  202. package/dist/src/daemon/install-plan.js +2 -2
  203. package/dist/src/daemon/launchd.js +2 -2
  204. package/dist/src/daemon/schtasks.js +2 -2
  205. package/dist/src/daemon/systemd.js +2 -2
  206. package/dist/src/extensions/bundle-mcp.js +1 -1
  207. package/dist/src/extensions/discover-extensions.js +1 -1
  208. package/dist/src/extensions/health.js +1 -1
  209. package/dist/src/extensions/loader.js +1 -1
  210. package/dist/src/extensions/lockfile.js +2 -2
  211. package/dist/src/extensions/update.js +1 -1
  212. package/dist/src/gateway/agents-admin.js +3 -3
  213. package/dist/src/gateway/file-path-classifier.js +2 -2
  214. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  215. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  216. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  217. package/dist/src/gateway/hono/oauth-async.js +3 -3
  218. package/dist/src/gateway/hono/oauth.js +3 -3
  219. package/dist/src/gateway/hono/routes/agents.js +1 -1
  220. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  221. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  222. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  223. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  224. package/dist/src/gateway/hono/routes/models.js +26 -6
  225. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  226. package/dist/src/gateway/hono/routes/notes.js +9 -22
  227. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  228. package/dist/src/gateway/hono/routes/shares.js +1 -1
  229. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  230. package/dist/src/gateway/lock.js +3 -3
  231. package/dist/src/gateway/ports.js +1 -1
  232. package/dist/src/gateway/service/agent-runner.js +2 -2
  233. package/dist/src/gateway/service/marketplace-service.js +2 -2
  234. package/dist/src/gateway/service.js +1 -1
  235. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  236. package/dist/src/infra/brew.js +1 -1
  237. package/dist/src/infra/package-json.js +1 -1
  238. package/dist/src/infra/package-update-steps.js +1 -1
  239. package/dist/src/infra/path-env.js +2 -2
  240. package/dist/src/infra/restart.js +2 -2
  241. package/dist/src/infra/stable-node-path.js +1 -1
  242. package/dist/src/infra/update-check.js +1 -1
  243. package/dist/src/infra/update-global.js +1 -1
  244. package/dist/src/infra/update-lock.js +3 -3
  245. package/dist/src/infra/update-runner.js +1 -1
  246. package/dist/src/infra/update-startup.js +2 -2
  247. package/dist/src/infra/write-file-atomic.js +2 -2
  248. package/dist/src/media/store.js +4 -1
  249. package/dist/src/media/store.js.map +1 -1
  250. package/dist/src/notes/note-attachment-sync.d.ts +2 -3
  251. package/dist/src/notes/note-attachment-sync.js +2 -27
  252. package/dist/src/notes/note-attachment-sync.js.map +1 -1
  253. package/dist/src/notes/note-index-meta.d.ts +6 -2
  254. package/dist/src/notes/note-index-meta.js +11 -16
  255. package/dist/src/notes/note-index-meta.js.map +1 -1
  256. package/dist/src/notes/note-markdown.d.ts +61 -0
  257. package/dist/src/notes/note-markdown.js +177 -0
  258. package/dist/src/notes/note-markdown.js.map +1 -0
  259. package/dist/src/notes/service.d.ts +9 -7
  260. package/dist/src/notes/service.js +163 -312
  261. package/dist/src/notes/service.js.map +1 -1
  262. package/dist/src/notes/store.js +4 -5
  263. package/dist/src/notes/store.js.map +1 -1
  264. package/dist/src/notes/types.d.ts +29 -58
  265. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  266. package/dist/src/providers/index.d.ts +3 -3
  267. package/dist/src/providers/index.js +25 -17
  268. package/dist/src/providers/index.js.map +1 -1
  269. package/dist/src/providers/model-registry.js +1 -1
  270. package/dist/src/providers/presentation.d.ts +34 -0
  271. package/dist/src/providers/presentation.js +162 -0
  272. package/dist/src/providers/presentation.js.map +1 -0
  273. package/dist/src/session/init-session-turn.js +2 -2
  274. package/dist/src/session/resolve-session.js +3 -3
  275. package/dist/src/session/session-title.js +2 -2
  276. package/dist/src/session/store.js +2 -2
  277. package/dist/src/share/share-auto.js +2 -2
  278. package/dist/src/share/share-store.js +3 -3
  279. package/dist/src/share/share-thumbnail.js +2 -2
  280. package/dist/src/share/share-zip.js +1 -1
  281. package/dist/src/share/site-share-store.js +3 -3
  282. package/dist/src/share/site-static-serve.js +1 -1
  283. package/dist/src/storage/sqlite/connection.js +2 -2
  284. package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
  285. package/dist/src/storage/sqlite/migrations/003_add_note_markdown_meta.sql +4 -0
  286. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  287. package/dist/src/storage/sqlite/migrations/runner.d.ts +2 -2
  288. package/dist/src/storage/sqlite/migrations/runner.js +5 -5
  289. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  290. package/dist/src/storage/sqlite/migrations/runner.ts +2 -2
  291. package/dist/src/storage/sqlite/notes-repository.js +18 -6
  292. package/dist/src/storage/sqlite/notes-repository.js.map +1 -1
  293. package/dist/src/storage/sqlite/schema.js +4 -4
  294. package/dist/src/storage/sqlite/schema.sql +5 -1
  295. package/dist/src/tui/clipboard-image.js +3 -3
  296. package/dist/src/tui/theme-manager.js +1 -1
  297. package/dist/src/tui/tui-keybindings-file.js +1 -1
  298. package/dist/src/tui/tui-scoped-models.js +2 -2
  299. package/dist/src/tui/tui-settings.js +1 -1
  300. package/dist/src/tui/tui.js +3 -3
  301. package/dist/src/tunnel/frpc-binary.js +3 -3
  302. package/dist/src/tunnel/frpc-config.js +1 -1
  303. package/dist/src/tunnel/frpc-extract.js +1 -1
  304. package/dist/src/tunnel/tunnel-state.js +1 -1
  305. package/dist/src/utils/logger/audit.js +1 -1
  306. package/dist/src/utils/logger/log-store.js +1 -1
  307. package/dist/src/utils/logger/rotation.js +1 -1
  308. package/dist/src/voice/tts/audio.js +1 -1
  309. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  310. package/dist/src/workflows/store/event-store.js +1 -1
  311. package/dist/src/workflows/store/run-store.js +1 -1
  312. package/package.json +1 -1
  313. package/dist/gateway/static/root/assets/index-DjNDHzwG.css +0 -1
  314. package/dist/gateway/static/root/assets/index-WAyKAilR.js +0 -4840
  315. package/dist/gateway/static/root/assets/share-preview-page-UNAcbiMb.js +0 -2
  316. package/dist/gateway/static/root/assets/url-q28QhI7l.js +0 -3
  317. package/dist/src/auth/oauth/vendor-pi-google/google-antigravity.js.map +0 -1
  318. package/dist/src/auth/oauth/vendor-pi-google/google-gemini-cli.js.map +0 -1
  319. package/dist/src/auth/oauth/vendor-pi-google/oauth-page.js.map +0 -1
  320. package/dist/src/auth/oauth/vendor-pi-google/pkce.js.map +0 -1
  321. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.d.ts +0 -0
  322. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.d.ts +0 -0
  323. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.d.ts +0 -0
@@ -1,92 +1,204 @@
1
- import { loadConfig } from "../../config/loader.js";
2
- import { getAllModels, getAvailableModels, getConfiguredProviders, init_providers, isProviderConfigured } from "../../providers/index.js";
1
+ import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
2
+ import { loadConfig, saveConfig } from "../../config/loader.js";
3
+ import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
3
4
  import { formatExamples, register } from "../registry.js";
4
5
  import { getContextWithOpts } from "../context.js";
5
6
  import "../../config/index.js";
7
+ import { colors } from "../utils/colors.js";
8
+ import { runCliOAuthLogin } from "../utils/oauth-login.js";
9
+ import { input } from "@inquirer/prompts";
6
10
  import { Command } from "commander";
7
11
  //#region src/cli/commands/models.ts
12
+ init_credentials();
8
13
  init_providers();
14
+ const IMAGE_GENERATION_IDS = new Set([
15
+ "gpt-image-1",
16
+ "dall-e-3",
17
+ "dall-e-2",
18
+ "wan2.6-t2i",
19
+ "wan2.7-image-pro",
20
+ "wan2.7-image",
21
+ "wan2.1-t2i-turbo",
22
+ "wan2.1-t2i-plus",
23
+ "image-01",
24
+ "image-01-live"
25
+ ]);
26
+ const VISION_IDS = new Set([
27
+ "gpt-4o",
28
+ "gpt-4o-mini",
29
+ "gpt-4-turbo",
30
+ "claude-sonnet-4-5",
31
+ "claude-haiku-3-5",
32
+ "gemini-2.0-flash",
33
+ "gemini-1.5-pro",
34
+ "qwen-vl-max",
35
+ "qwen2.5-vl-72b-instruct"
36
+ ]);
37
+ function currentModelRef(config) {
38
+ return config.agents?.defaults?.model?.primary;
39
+ }
40
+ function setDefaultModel(config, modelRef) {
41
+ config.agents = config.agents ?? {};
42
+ config.agents.defaults = config.agents.defaults ?? {};
43
+ config.agents.defaults.model = {
44
+ primary: modelRef,
45
+ fallbacks: []
46
+ };
47
+ return config;
48
+ }
49
+ function modelRef(provider, id) {
50
+ return `${provider}/${id}`;
51
+ }
9
52
  async function runModelsList(options) {
10
53
  const config = loadConfig(getContextWithOpts().configPath);
11
54
  const configuredProviders = await getConfiguredProviders();
55
+ const providerFilter = options.provider?.trim();
56
+ const models = (options.all ? getAllModels() : await getAvailableModels()).filter((m) => providerFilter ? m.provider === providerFilter : true);
12
57
  if (options.json) {
13
- const models = options.all ? getAllModels() : await getAvailableModels();
14
58
  console.log(JSON.stringify({
59
+ defaultModel: currentModelRef(config) ?? null,
15
60
  providers: configuredProviders,
16
61
  models: models.map((m) => ({
17
- id: `${m.provider}/${m.id}`,
62
+ id: modelRef(m.provider, m.id),
18
63
  name: m.name,
19
- provider: m.provider
64
+ provider: m.provider,
65
+ authConfigured: configuredProviders.includes(m.provider)
20
66
  }))
21
67
  }, null, 2));
22
68
  return;
23
69
  }
24
- console.log("\n🤖 Available Models\n");
70
+ console.log("\n🤖 Models\n");
25
71
  console.log("═".repeat(60));
26
- if (configuredProviders.length > 0) {
27
- console.log("\n📦 Configured Providers\n");
28
- for (const provider of configuredProviders) console.log(` ✓ ${provider}`);
29
- console.log("");
30
- }
31
- const models = options.all ? getAllModels() : await getAvailableModels();
32
- console.log("\n📚 Models\n");
72
+ console.log(`\n📌 Current default model: ${currentModelRef(config) ?? "Not set"}\n`);
33
73
  const byProvider = /* @__PURE__ */ new Map();
34
74
  for (const model of models) {
35
75
  const list = byProvider.get(model.provider) ?? [];
36
76
  list.push(model);
37
77
  byProvider.set(model.provider, list);
38
78
  }
39
- const IMAGE_GENERATION_IDS = new Set([
40
- "gpt-image-1",
41
- "dall-e-3",
42
- "dall-e-2",
43
- "wan2.6-t2i",
44
- "wan2.7-image-pro",
45
- "wan2.7-image",
46
- "wan2.1-t2i-turbo",
47
- "wan2.1-t2i-plus",
48
- "image-01",
49
- "image-01-live"
50
- ]);
51
- const VISION_IDS = new Set([
52
- "gpt-4o",
53
- "gpt-4o-mini",
54
- "gpt-4-turbo",
55
- "claude-sonnet-4-5",
56
- "claude-haiku-3-5",
57
- "gemini-2.0-flash",
58
- "gemini-1.5-pro",
59
- "qwen-vl-max",
60
- "qwen2.5-vl-72b-instruct"
61
- ]);
62
79
  for (const [provider, providerModels] of byProvider) {
63
- console.log(` [${provider}]`);
80
+ const available = await isProviderConfigured(provider);
81
+ console.log(` [${provider}] ${available ? colors.green("configured") : colors.gray("not configured")}`);
64
82
  for (const model of providerModels) {
65
- const status = await isProviderConfigured(provider) ? "✓" : "○";
66
83
  const badges = [];
67
84
  if (IMAGE_GENERATION_IDS.has(model.id)) badges.push("gen");
68
85
  if (model.input?.includes("image") || VISION_IDS.has(model.id)) badges.push("vision");
69
86
  const badgeStr = badges.length > 0 ? ` [${badges.join(", ")}]` : "";
70
- console.log(` ${status} ${model.name}${badgeStr}`);
87
+ console.log(` ${available ? "✓" : "○"} ${modelRef(model.provider, model.id)}${badgeStr}`);
71
88
  }
72
89
  }
73
- console.log("");
74
- console.log("".repeat(60));
75
- console.log(`\n📌 Current default model: ${config.agents?.defaults?.model || "Not set"}`);
76
- console.log("\n📝 Usage:");
77
- console.log(" export OPENAI_API_KEY=\"sk-...\" # Set API key via env");
78
- console.log(" xopc agent -m \"Hello\" # Use default model");
79
- console.log(" xopc agent -m \"Hello\" --model openai/gpt-4o # Specify model");
90
+ console.log("\nUsage:");
91
+ console.log(" xopc models set openai/gpt-5.5");
92
+ console.log(" xopc models auth login --provider anthropic");
93
+ console.log(" xopc models auth paste-api-key --provider deepseek");
94
+ }
95
+ async function runModelsStatus(options) {
96
+ const config = loadConfig(getContextWithOpts().configPath);
97
+ const providers = Array.from(new Set(getAllModels().map((m) => m.provider))).sort();
98
+ const auth = [];
99
+ for (const provider of providers) {
100
+ const state = await getProviderAuthState(provider);
101
+ if (state.authMode !== "none") auth.push({
102
+ provider,
103
+ ...state
104
+ });
105
+ }
106
+ if (options.json) {
107
+ console.log(JSON.stringify({
108
+ defaultModel: currentModelRef(config) ?? null,
109
+ auth
110
+ }, null, 2));
111
+ return;
112
+ }
113
+ console.log("\n🤖 Model status\n");
114
+ console.log(`Default: ${currentModelRef(config) ?? "Not set"}`);
115
+ console.log("\nAuth:");
116
+ if (auth.length === 0) {
117
+ console.log(" No provider credentials configured.");
118
+ return;
119
+ }
120
+ for (const entry of auth) {
121
+ const status = entry.authStatus === "connected" ? colors.green(entry.authStatus) : colors.yellow(entry.authStatus);
122
+ console.log(` ${entry.provider}: ${status} (${entry.authMode})`);
123
+ }
124
+ }
125
+ async function runModelsSet(model) {
126
+ const ctx = getContextWithOpts();
127
+ const config = loadConfig(ctx.configPath);
128
+ const resolved = resolveModel(model);
129
+ const ref = modelRef(resolved.provider, resolved.id);
130
+ setDefaultModel(config, ref);
131
+ await saveConfig(config, ctx.configPath);
132
+ console.log(`✅ Default model set: ${ref}`);
133
+ }
134
+ async function runAuthList(options) {
135
+ const resolver = new CredentialResolver();
136
+ const profiles = (await resolver.listProfiles()).filter((profile) => options.provider ? profile.provider === options.provider : true);
137
+ const oauthTokens = (await resolver.listOAuthTokens()).filter((token) => options.provider ? token.provider === options.provider : true);
138
+ if (options.json) {
139
+ console.log(JSON.stringify({
140
+ profiles,
141
+ oauth: oauthTokens
142
+ }, null, 2));
143
+ return;
144
+ }
145
+ console.log("\n🔐 Model auth\n");
146
+ if (profiles.length === 0 && oauthTokens.length === 0) {
147
+ console.log(" No model credentials configured.");
148
+ return;
149
+ }
150
+ for (const profile of profiles) console.log(` ${profile.id} ${colors.blue("api-key")} ${profile.provider} ${profile.source}`);
151
+ for (const token of oauthTokens) {
152
+ const expires = token.expiresAt ? ` expires ${new Date(token.expiresAt).toLocaleString()}` : "";
153
+ console.log(` ${token.provider}:oauth ${colors.yellow("oauth")} ${token.hasAccess ? "configured" : "missing"}${expires}`);
154
+ }
155
+ }
156
+ async function runAuthPasteApiKey(provider) {
157
+ if (!providerSupportsApiKey(provider)) throw new Error(`Provider ${provider} does not support API key auth`);
158
+ const key = await input({
159
+ message: `API key for ${provider}:`,
160
+ validate: (value) => value.trim().length > 0 || "Required"
161
+ });
162
+ await new CredentialResolver().saveApiKey(provider, key.trim(), { profileName: "default" });
163
+ console.log(`✅ API key saved for ${provider}`);
164
+ }
165
+ function resolveAuthMethod(provider, rawMethod) {
166
+ if (rawMethod && rawMethod !== "oauth" && rawMethod !== "api-key") throw new Error(`Unsupported auth method: ${rawMethod}`);
167
+ if (rawMethod === "oauth" || rawMethod === "api-key") return rawMethod;
168
+ return providerSupportsOAuth(provider) ? "oauth" : "api-key";
169
+ }
170
+ async function runAuthLogin(provider, options) {
171
+ if (resolveAuthMethod(provider, options.method) === "api-key") await runAuthPasteApiKey(provider);
172
+ else {
173
+ if (!providerSupportsOAuth(provider)) throw new Error(`Provider ${provider} does not support OAuth`);
174
+ console.log(`\n🔐 Starting ${getProviderDisplayName(provider)} OAuth login...`);
175
+ await runCliOAuthLogin({
176
+ provider,
177
+ onProgress: (message) => console.log(" →", message)
178
+ });
179
+ console.log(`✅ OAuth login successful for ${provider}`);
180
+ }
181
+ if (options.setDefault) {
182
+ const first = getAllModels().find((model) => model.provider === provider);
183
+ if (!first) throw new Error(`No models found for provider ${provider}`);
184
+ await runModelsSet(modelRef(first.provider, first.id));
185
+ }
186
+ }
187
+ async function runAuthLogout(provider) {
188
+ await new CredentialResolver().deleteProviderCredential(provider);
189
+ console.log(`✅ Credentials removed for ${provider}`);
80
190
  }
81
191
  function attachModelsListOptions(command) {
82
- return command.option("--json", "Output as JSON", false).option("--all, -a", "Show all built-in models", false);
192
+ return command.option("--json", "Output as JSON", false).option("--all, -a", "Show all built-in models", false).option("--provider <id>", "Filter by provider id");
83
193
  }
84
194
  function createModelsCommand(_ctx) {
85
- const cmd = new Command("models").description("List and manage available models").addHelpText("after", formatExamples([
86
- "xopc models list # List all available models",
87
- "xopc models list --all # Show all built-in models",
88
- "xopc models list --json # Output as JSON",
89
- "xopc models --all # Same as models list --all"
195
+ const cmd = new Command("models").description("List and manage models and model auth").addHelpText("after", formatExamples([
196
+ "xopc models list",
197
+ "xopc models status",
198
+ "xopc models set openai/gpt-5.5",
199
+ "xopc models auth list",
200
+ "xopc models auth login --provider anthropic",
201
+ "xopc models auth paste-api-key --provider deepseek"
90
202
  ]));
91
203
  attachModelsListOptions(cmd).action(async (options) => {
92
204
  await runModelsList(options);
@@ -94,16 +206,39 @@ function createModelsCommand(_ctx) {
94
206
  attachModelsListOptions(cmd.command("list").description("List available models")).action(async (options) => {
95
207
  await runModelsList(options);
96
208
  });
209
+ cmd.command("status").description("Show default model and provider auth status").option("--json", "Output as JSON", false).action(async (options) => {
210
+ await runModelsStatus(options);
211
+ });
212
+ cmd.command("set <model>").description("Set the default model").action(async (model) => {
213
+ await runModelsSet(model);
214
+ });
215
+ const auth = cmd.command("auth").description("Manage model provider auth");
216
+ auth.command("list").description("List model auth credentials").option("--provider <id>", "Filter by provider id").option("--json", "Output as JSON", false).action(async (options) => {
217
+ await runAuthList(options);
218
+ });
219
+ auth.command("login").description("Run provider auth flow").requiredOption("--provider <id>", "Provider id").option("--method <method>", "Auth method: oauth or api-key").option("--set-default", "Set the provider first model as default after login", false).action(async (options) => {
220
+ await runAuthLogin(options.provider, options);
221
+ });
222
+ auth.command("paste-api-key").description("Paste and save an API key").requiredOption("--provider <id>", "Provider id").action(async (options) => {
223
+ await runAuthPasteApiKey(options.provider);
224
+ });
225
+ auth.command("logout").description("Remove provider credentials").requiredOption("--provider <id>", "Provider id").action(async (options) => {
226
+ await runAuthLogout(options.provider);
227
+ });
97
228
  return cmd;
98
229
  }
99
230
  register({
100
231
  id: "models",
101
232
  name: "models",
102
- description: "List and manage available models",
233
+ description: "List and manage models and model auth",
103
234
  factory: createModelsCommand,
104
235
  metadata: {
105
236
  category: "utility",
106
- examples: ["xopc models list", "xopc models list --all"]
237
+ examples: [
238
+ "xopc models list",
239
+ "xopc models status",
240
+ "xopc models auth list"
241
+ ]
107
242
  }
108
243
  });
109
244
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","names":[],"sources":["../../../../src/cli/commands/models.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { getContextWithOpts } from '../context.js';\nimport {\n getAllModels,\n getAvailableModels,\n getConfiguredProviders,\n isProviderConfigured,\n} from '../../providers/index.js';\nimport { loadConfig } from '../../config/index.js';\n\ntype ModelsListOptions = {\n json?: boolean;\n all?: boolean;\n};\n\nasync function runModelsList(options: ModelsListOptions): Promise<void> {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const configuredProviders = await getConfiguredProviders();\n\n if (options.json) {\n const models = options.all ? getAllModels() : await getAvailableModels();\n console.log(\n JSON.stringify(\n {\n providers: configuredProviders,\n models: models.map((m) => ({\n id: `${m.provider}/${m.id}`,\n name: m.name,\n provider: m.provider,\n })),\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log('\\n🤖 Available Models\\n');\n console.log('═'.repeat(60));\n\n if (configuredProviders.length > 0) {\n console.log('\\n📦 Configured Providers\\n');\n for (const provider of configuredProviders) {\n console.log(` ✓ ${provider}`);\n }\n console.log('');\n }\n\n const models = options.all ? getAllModels() : await getAvailableModels();\n\n console.log('\\n📚 Models\\n');\n\n const byProvider = new Map<string, ReturnType<typeof getAllModels>[number][]>();\n for (const model of models) {\n const list = byProvider.get(model.provider) ?? [];\n list.push(model);\n byProvider.set(model.provider, list);\n }\n\n const IMAGE_GENERATION_IDS = new Set([\n 'gpt-image-1',\n 'dall-e-3',\n 'dall-e-2',\n 'wan2.6-t2i',\n 'wan2.7-image-pro',\n 'wan2.7-image',\n 'wan2.1-t2i-turbo',\n 'wan2.1-t2i-plus',\n 'image-01',\n 'image-01-live',\n ]);\n const VISION_IDS = new Set([\n 'gpt-4o',\n 'gpt-4o-mini',\n 'gpt-4-turbo',\n 'claude-sonnet-4-5',\n 'claude-haiku-3-5',\n 'gemini-2.0-flash',\n 'gemini-1.5-pro',\n 'qwen-vl-max',\n 'qwen2.5-vl-72b-instruct',\n ]);\n\n for (const [provider, providerModels] of byProvider) {\n console.log(` [${provider}]`);\n for (const model of providerModels) {\n const available = await isProviderConfigured(provider);\n const status = available ? '✓' : '○';\n const badges: string[] = [];\n if (IMAGE_GENERATION_IDS.has(model.id)) {\n badges.push('gen');\n }\n if (model.input?.includes('image') || VISION_IDS.has(model.id)) {\n badges.push('vision');\n }\n const badgeStr = badges.length > 0 ? ` [${badges.join(', ')}]` : '';\n console.log(` ${status} ${model.name}${badgeStr}`);\n }\n }\n console.log('');\n\n console.log('═'.repeat(60));\n console.log(`\\n📌 Current default model: ${config.agents?.defaults?.model || 'Not set'}`);\n\n console.log('\\n📝 Usage:');\n console.log(' export OPENAI_API_KEY=\"sk-...\" # Set API key via env');\n console.log(' xopc agent -m \"Hello\" # Use default model');\n console.log(' xopc agent -m \"Hello\" --model openai/gpt-4o # Specify model');\n}\n\nfunction attachModelsListOptions(command: Command): Command {\n return command\n .option('--json', 'Output as JSON', false)\n .option('--all, -a', 'Show all built-in models', false);\n}\n\nfunction createModelsCommand(_ctx: CLIContext): Command {\n const cmd = new Command('models')\n .description('List and manage available models')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc models list # List all available models',\n 'xopc models list --all # Show all built-in models',\n 'xopc models list --json # Output as JSON',\n 'xopc models --all # Same as models list --all',\n ]),\n );\n\n attachModelsListOptions(cmd).action(async (options) => {\n await runModelsList(options);\n });\n\n attachModelsListOptions(\n cmd.command('list').description('List available models'),\n ).action(async (options) => {\n await runModelsList(options);\n });\n\n return cmd;\n}\n\nregister({\n id: 'models',\n name: 'models',\n description: 'List and manage available models',\n factory: createModelsCommand,\n metadata: {\n category: 'utility',\n examples: [\n 'xopc models list',\n 'xopc models list --all',\n ],\n },\n});\n\nexport { createModelsCommand };\n"],"mappings":"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"}
1
+ {"version":3,"file":"models.js","names":[],"sources":["../../../../src/cli/commands/models.ts"],"sourcesContent":["import { input } from '@inquirer/prompts';\nimport { Command } from 'commander';\n\nimport { CredentialResolver } from '../../auth/credentials.js';\nimport { loadConfig, saveConfig } from '../../config/index.js';\nimport type { Config } from '../../config/schema.js';\nimport {\n getAllModels,\n getAvailableModels,\n getConfiguredProviders,\n getProviderAuthState,\n getProviderDisplayName,\n isProviderConfigured,\n providerSupportsApiKey,\n providerSupportsOAuth,\n resolveModel,\n} from '../../providers/index.js';\n\nimport { getContextWithOpts } from '../context.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\nimport { runCliOAuthLogin } from '../utils/oauth-login.js';\n\nconst IMAGE_GENERATION_IDS = new Set([\n 'gpt-image-1',\n 'dall-e-3',\n 'dall-e-2',\n 'wan2.6-t2i',\n 'wan2.7-image-pro',\n 'wan2.7-image',\n 'wan2.1-t2i-turbo',\n 'wan2.1-t2i-plus',\n 'image-01',\n 'image-01-live',\n]);\n\nconst VISION_IDS = new Set([\n 'gpt-4o',\n 'gpt-4o-mini',\n 'gpt-4-turbo',\n 'claude-sonnet-4-5',\n 'claude-haiku-3-5',\n 'gemini-2.0-flash',\n 'gemini-1.5-pro',\n 'qwen-vl-max',\n 'qwen2.5-vl-72b-instruct',\n]);\n\ntype ModelsListOptions = {\n json?: boolean;\n all?: boolean;\n provider?: string;\n};\n\ntype ModelsAuthListOptions = {\n provider?: string;\n json?: boolean;\n};\n\ntype ModelsAuthLoginOptions = {\n method?: 'oauth' | 'api-key';\n setDefault?: boolean;\n};\n\nfunction currentModelRef(config: Config): string | undefined {\n return config.agents?.defaults?.model?.primary;\n}\n\nfunction setDefaultModel(config: Config, modelRef: string): Config {\n config.agents = config.agents ?? {};\n config.agents.defaults = config.agents.defaults ?? {} as NonNullable<Config['agents']>['defaults'];\n config.agents.defaults.model = { primary: modelRef, fallbacks: [] };\n return config;\n}\n\nfunction modelRef(provider: string, id: string): string {\n return `${provider}/${id}`;\n}\n\nasync function runModelsList(options: ModelsListOptions): Promise<void> {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const configuredProviders = await getConfiguredProviders();\n const providerFilter = options.provider?.trim();\n const models = (options.all ? getAllModels() : await getAvailableModels()).filter((m) =>\n providerFilter ? m.provider === providerFilter : true,\n );\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n defaultModel: currentModelRef(config) ?? null,\n providers: configuredProviders,\n models: models.map((m) => ({\n id: modelRef(m.provider, m.id),\n name: m.name,\n provider: m.provider,\n authConfigured: configuredProviders.includes(m.provider),\n })),\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log('\\n🤖 Models\\n');\n console.log('═'.repeat(60));\n\n console.log(`\\n📌 Current default model: ${currentModelRef(config) ?? 'Not set'}\\n`);\n\n const byProvider = new Map<string, typeof models>();\n for (const model of models) {\n const list = byProvider.get(model.provider) ?? [];\n list.push(model);\n byProvider.set(model.provider, list);\n }\n\n for (const [provider, providerModels] of byProvider) {\n const available = await isProviderConfigured(provider);\n console.log(` [${provider}] ${available ? colors.green('configured') : colors.gray('not configured')}`);\n for (const model of providerModels) {\n const badges: string[] = [];\n if (IMAGE_GENERATION_IDS.has(model.id)) badges.push('gen');\n if (model.input?.includes('image') || VISION_IDS.has(model.id)) badges.push('vision');\n const badgeStr = badges.length > 0 ? ` [${badges.join(', ')}]` : '';\n console.log(` ${available ? '✓' : '○'} ${modelRef(model.provider, model.id)}${badgeStr}`);\n }\n }\n\n console.log('\\nUsage:');\n console.log(' xopc models set openai/gpt-5.5');\n console.log(' xopc models auth login --provider anthropic');\n console.log(' xopc models auth paste-api-key --provider deepseek');\n}\n\nasync function runModelsStatus(options: { json?: boolean }): Promise<void> {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const providers = Array.from(new Set(getAllModels().map((m) => m.provider))).sort();\n const auth = [];\n for (const provider of providers) {\n const state = await getProviderAuthState(provider);\n if (state.authMode !== 'none') {\n auth.push({ provider, ...state });\n }\n }\n\n if (options.json) {\n console.log(JSON.stringify({ defaultModel: currentModelRef(config) ?? null, auth }, null, 2));\n return;\n }\n\n console.log('\\n🤖 Model status\\n');\n console.log(`Default: ${currentModelRef(config) ?? 'Not set'}`);\n console.log('\\nAuth:');\n if (auth.length === 0) {\n console.log(' No provider credentials configured.');\n return;\n }\n for (const entry of auth) {\n const status = entry.authStatus === 'connected' ? colors.green(entry.authStatus) : colors.yellow(entry.authStatus);\n console.log(` ${entry.provider}: ${status} (${entry.authMode})`);\n }\n}\n\nasync function runModelsSet(model: string): Promise<void> {\n const ctx = getContextWithOpts();\n const config = loadConfig(ctx.configPath);\n const resolved = resolveModel(model);\n const ref = modelRef(resolved.provider, resolved.id);\n setDefaultModel(config, ref);\n await saveConfig(config, ctx.configPath);\n console.log(`✅ Default model set: ${ref}`);\n}\n\nasync function runAuthList(options: ModelsAuthListOptions): Promise<void> {\n const resolver = new CredentialResolver();\n const profiles = (await resolver.listProfiles()).filter((profile) =>\n options.provider ? profile.provider === options.provider : true,\n );\n const oauthTokens = (await resolver.listOAuthTokens()).filter((token) =>\n options.provider ? token.provider === options.provider : true,\n );\n\n if (options.json) {\n console.log(JSON.stringify({ profiles, oauth: oauthTokens }, null, 2));\n return;\n }\n\n console.log('\\n🔐 Model auth\\n');\n if (profiles.length === 0 && oauthTokens.length === 0) {\n console.log(' No model credentials configured.');\n return;\n }\n for (const profile of profiles) {\n console.log(` ${profile.id} ${colors.blue('api-key')} ${profile.provider} ${profile.source}`);\n }\n for (const token of oauthTokens) {\n const expires = token.expiresAt ? ` expires ${new Date(token.expiresAt).toLocaleString()}` : '';\n console.log(` ${token.provider}:oauth ${colors.yellow('oauth')} ${token.hasAccess ? 'configured' : 'missing'}${expires}`);\n }\n}\n\nasync function runAuthPasteApiKey(provider: string): Promise<void> {\n if (!providerSupportsApiKey(provider)) {\n throw new Error(`Provider ${provider} does not support API key auth`);\n }\n const key = await input({\n message: `API key for ${provider}:`,\n validate: (value: string) => value.trim().length > 0 || 'Required',\n });\n await new CredentialResolver().saveApiKey(provider, key.trim(), { profileName: 'default' });\n console.log(`✅ API key saved for ${provider}`);\n}\n\nfunction resolveAuthMethod(provider: string, rawMethod?: string): 'oauth' | 'api-key' {\n if (rawMethod && rawMethod !== 'oauth' && rawMethod !== 'api-key') {\n throw new Error(`Unsupported auth method: ${rawMethod}`);\n }\n if (rawMethod === 'oauth' || rawMethod === 'api-key') return rawMethod;\n return providerSupportsOAuth(provider) ? 'oauth' : 'api-key';\n}\n\nasync function runAuthLogin(provider: string, options: ModelsAuthLoginOptions): Promise<void> {\n const method = resolveAuthMethod(provider, options.method);\n if (method === 'api-key') {\n await runAuthPasteApiKey(provider);\n } else {\n if (!providerSupportsOAuth(provider)) {\n throw new Error(`Provider ${provider} does not support OAuth`);\n }\n console.log(`\\n🔐 Starting ${getProviderDisplayName(provider)} OAuth login...`);\n await runCliOAuthLogin({ provider, onProgress: (message) => console.log(' →', message) });\n console.log(`✅ OAuth login successful for ${provider}`);\n }\n\n if (options.setDefault) {\n const first = getAllModels().find((model) => model.provider === provider);\n if (!first) throw new Error(`No models found for provider ${provider}`);\n await runModelsSet(modelRef(first.provider, first.id));\n }\n}\n\nasync function runAuthLogout(provider: string): Promise<void> {\n await new CredentialResolver().deleteProviderCredential(provider);\n console.log(`✅ Credentials removed for ${provider}`);\n}\n\nfunction attachModelsListOptions(command: Command): Command {\n return command\n .option('--json', 'Output as JSON', false)\n .option('--all, -a', 'Show all built-in models', false)\n .option('--provider <id>', 'Filter by provider id');\n}\n\nfunction createModelsCommand(_ctx: CLIContext): Command {\n const cmd = new Command('models')\n .description('List and manage models and model auth')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc models list',\n 'xopc models status',\n 'xopc models set openai/gpt-5.5',\n 'xopc models auth list',\n 'xopc models auth login --provider anthropic',\n 'xopc models auth paste-api-key --provider deepseek',\n ]),\n );\n\n attachModelsListOptions(cmd).action(async (options) => {\n await runModelsList(options);\n });\n\n attachModelsListOptions(cmd.command('list').description('List available models')).action(async (options) => {\n await runModelsList(options);\n });\n\n cmd\n .command('status')\n .description('Show default model and provider auth status')\n .option('--json', 'Output as JSON', false)\n .action(async (options: { json?: boolean }) => {\n await runModelsStatus(options);\n });\n\n cmd\n .command('set <model>')\n .description('Set the default model')\n .action(async (model: string) => {\n await runModelsSet(model);\n });\n\n const auth = cmd.command('auth').description('Manage model provider auth');\n\n auth\n .command('list')\n .description('List model auth credentials')\n .option('--provider <id>', 'Filter by provider id')\n .option('--json', 'Output as JSON', false)\n .action(async (options: ModelsAuthListOptions) => {\n await runAuthList(options);\n });\n\n auth\n .command('login')\n .description('Run provider auth flow')\n .requiredOption('--provider <id>', 'Provider id')\n .option('--method <method>', 'Auth method: oauth or api-key')\n .option('--set-default', 'Set the provider first model as default after login', false)\n .action(async (options: ModelsAuthLoginOptions & { provider: string }) => {\n await runAuthLogin(options.provider, options);\n });\n\n auth\n .command('paste-api-key')\n .description('Paste and save an API key')\n .requiredOption('--provider <id>', 'Provider id')\n .action(async (options: { provider: string }) => {\n await runAuthPasteApiKey(options.provider);\n });\n\n auth\n .command('logout')\n .description('Remove provider credentials')\n .requiredOption('--provider <id>', 'Provider id')\n .action(async (options: { provider: string }) => {\n await runAuthLogout(options.provider);\n });\n\n return cmd;\n}\n\nregister({\n id: 'models',\n name: 'models',\n description: 'List and manage models and model auth',\n factory: createModelsCommand,\n metadata: {\n category: 'utility',\n examples: ['xopc models list', 'xopc models status', 'xopc models auth list'],\n },\n});\n\nexport { createModelsCommand };\n"],"mappings":"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"}
@@ -1,9 +1,6 @@
1
1
  /**
2
- * Model Configuration for Onboarding
2
+ * Catalog-driven model configuration for onboarding.
3
3
  */
4
4
  import type { Config } from '../../../config/schema.js';
5
5
  import type { CLIContext } from '../../registry.js';
6
- /**
7
- * Configure AI model provider and model
8
- */
9
6
  export declare function setupModel(existingConfig: Config | null, ctx: CLIContext): Promise<Config>;