@xopcai/xopcbot 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/README.md +6 -6
  2. package/README.zh-CN.md +6 -6
  3. package/dist/agent/__tests__/media-processing.test.d.ts +6 -0
  4. package/dist/agent/__tests__/media-processing.test.js +385 -0
  5. package/dist/agent/__tests__/media-processing.test.js.map +1 -0
  6. package/dist/agent/fallback/__tests__/index.test.js +16 -5
  7. package/dist/agent/fallback/__tests__/index.test.js.map +1 -1
  8. package/dist/agent/fallback/candidates.d.ts +2 -4
  9. package/dist/agent/fallback/candidates.js +19 -26
  10. package/dist/agent/fallback/candidates.js.map +1 -1
  11. package/dist/agent/helpers.d.ts +1 -0
  12. package/dist/agent/helpers.js.map +1 -1
  13. package/dist/agent/index.d.ts +6 -1
  14. package/dist/agent/index.js +10 -1
  15. package/dist/agent/index.js.map +1 -1
  16. package/dist/agent/models/compat.d.ts +35 -0
  17. package/dist/agent/models/compat.js +110 -0
  18. package/dist/agent/models/compat.js.map +1 -0
  19. package/dist/agent/models/fallback.d.ts +38 -0
  20. package/dist/agent/models/fallback.js +133 -0
  21. package/dist/agent/models/fallback.js.map +1 -0
  22. package/dist/agent/models/index.d.ts +10 -0
  23. package/dist/agent/models/index.js +11 -0
  24. package/dist/agent/models/index.js.map +1 -0
  25. package/dist/agent/{model-manager.d.ts → models/manager.d.ts} +2 -8
  26. package/dist/agent/{model-manager.js → models/manager.js} +38 -24
  27. package/dist/agent/models/manager.js.map +1 -0
  28. package/dist/agent/models/scan.d.ts +46 -0
  29. package/dist/agent/models/scan.js +177 -0
  30. package/dist/agent/models/scan.js.map +1 -0
  31. package/dist/agent/models/selection.d.ts +44 -0
  32. package/dist/agent/models/selection.js +141 -0
  33. package/dist/agent/models/selection.js.map +1 -0
  34. package/dist/agent/prompt/index.js +1 -1
  35. package/dist/agent/prompt/index.js.map +1 -1
  36. package/dist/agent/service.js +34 -16
  37. package/dist/agent/service.js.map +1 -1
  38. package/dist/agent/skills/__tests__/test-framework.test.js +15 -7
  39. package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -1
  40. package/dist/agent/skills/config.d.ts +1 -1
  41. package/dist/agent/skills/config.js +2 -2
  42. package/dist/agent/skills/config.js.map +1 -1
  43. package/dist/agent/skills/index.js +15 -28
  44. package/dist/agent/skills/index.js.map +1 -1
  45. package/dist/agent/skills/installer.d.ts +1 -1
  46. package/dist/agent/skills/installer.js +1 -1
  47. package/dist/agent/skills/scanner.d.ts +1 -1
  48. package/dist/agent/skills/scanner.js +1 -1
  49. package/dist/agent/skills/test-framework.js +21 -20
  50. package/dist/agent/skills/test-framework.js.map +1 -1
  51. package/dist/agent/skills/types.d.ts +3 -3
  52. package/dist/agent/skills/types.js +1 -1
  53. package/dist/agent/skills/watcher.d.ts +1 -1
  54. package/dist/agent/skills/watcher.js +1 -1
  55. package/dist/agent/system-prompt.d.ts +67 -0
  56. package/dist/agent/system-prompt.js +351 -0
  57. package/dist/agent/system-prompt.js.map +1 -0
  58. package/dist/agent/tools/__tests__/send-media.test.d.ts +6 -0
  59. package/dist/agent/tools/__tests__/send-media.test.js +251 -0
  60. package/dist/agent/tools/__tests__/send-media.test.js.map +1 -0
  61. package/dist/agent/types.agent-defaults.d.ts +48 -0
  62. package/dist/agent/types.agent-defaults.js +5 -0
  63. package/dist/agent/types.agent-defaults.js.map +1 -0
  64. package/dist/agent/types.d.ts +14 -6
  65. package/dist/agent/types.js +5 -0
  66. package/dist/agent/types.js.map +1 -1
  67. package/dist/agent/workspace.d.ts +94 -0
  68. package/dist/agent/workspace.js +625 -0
  69. package/dist/agent/workspace.js.map +1 -0
  70. package/dist/auth/index.js +1 -1
  71. package/dist/auth/index.js.map +1 -1
  72. package/dist/auth/oauth/index.d.ts +1 -0
  73. package/dist/auth/oauth/index.js +1 -0
  74. package/dist/auth/oauth/index.js.map +1 -1
  75. package/dist/auth/oauth/kimi.d.ts +2 -1
  76. package/dist/auth/oauth/kimi.js +51 -48
  77. package/dist/auth/oauth/kimi.js.map +1 -1
  78. package/dist/auth/oauth/minimax-cn.d.ts +12 -0
  79. package/dist/auth/oauth/minimax-cn.js +111 -0
  80. package/dist/auth/oauth/minimax-cn.js.map +1 -0
  81. package/dist/auth/oauth/qwen.d.ts +5 -0
  82. package/dist/auth/oauth/qwen.js +54 -84
  83. package/dist/auth/oauth/qwen.js.map +1 -1
  84. package/dist/auth/profiles/index.d.ts +0 -2
  85. package/dist/auth/profiles/index.js +0 -2
  86. package/dist/auth/profiles/index.js.map +1 -1
  87. package/dist/auth/storage.js +7 -1
  88. package/dist/auth/storage.js.map +1 -1
  89. package/dist/channels/__tests__/media-integration.test.d.ts +6 -0
  90. package/dist/channels/__tests__/media-integration.test.js +398 -0
  91. package/dist/channels/__tests__/media-integration.test.js.map +1 -0
  92. package/dist/channels/__tests__/media.test.d.ts +6 -0
  93. package/dist/channels/__tests__/media.test.js +251 -0
  94. package/dist/channels/__tests__/media.test.js.map +1 -0
  95. package/dist/channels/access-control.d.ts +1 -1
  96. package/dist/channels/access-control.js +1 -1
  97. package/dist/channels/draft-stream.d.ts +1 -1
  98. package/dist/channels/draft-stream.js +1 -1
  99. package/dist/channels/format.d.ts +1 -1
  100. package/dist/channels/format.js +1 -1
  101. package/dist/channels/telegram/command-handler.js +15 -48
  102. package/dist/channels/telegram/command-handler.js.map +1 -1
  103. package/dist/channels/telegram/plugin.js +3 -2
  104. package/dist/channels/telegram/plugin.js.map +1 -1
  105. package/dist/channels/telegram/webhook.d.ts +1 -1
  106. package/dist/channels/telegram/webhook.js +1 -1
  107. package/dist/channels/types.d.ts +1 -1
  108. package/dist/channels/types.js +1 -1
  109. package/dist/channels/update-offset-store.d.ts +1 -1
  110. package/dist/channels/update-offset-store.js +1 -1
  111. package/dist/cli/commands/auth.js +8 -23
  112. package/dist/cli/commands/auth.js.map +1 -1
  113. package/dist/cli/commands/gateway.js +9 -1
  114. package/dist/cli/commands/gateway.js.map +1 -1
  115. package/dist/cli/commands/models.js +35 -29
  116. package/dist/cli/commands/models.js.map +1 -1
  117. package/dist/cli/commands/onboard.js +73 -58
  118. package/dist/cli/commands/onboard.js.map +1 -1
  119. package/dist/cli/commands/skills.js +6 -6
  120. package/dist/cli/commands/skills.js.map +1 -1
  121. package/dist/cli/index.js +0 -0
  122. package/dist/cli/templates.d.ts +2 -0
  123. package/dist/cli/templates.js +1 -1
  124. package/dist/cli/templates.js.map +1 -1
  125. package/dist/config/defaults.d.ts +19 -0
  126. package/dist/config/defaults.js +168 -0
  127. package/dist/config/defaults.js.map +1 -0
  128. package/dist/config/index.d.ts +5 -0
  129. package/dist/config/index.js +4 -0
  130. package/dist/config/index.js.map +1 -1
  131. package/dist/config/integration.d.ts +12 -0
  132. package/dist/config/integration.js +14 -0
  133. package/dist/config/integration.js.map +1 -0
  134. package/dist/config/models-json.d.ts +454 -0
  135. package/dist/config/models-json.js +323 -0
  136. package/dist/config/models-json.js.map +1 -0
  137. package/dist/config/paths.d.ts +2 -0
  138. package/dist/config/paths.js +4 -0
  139. package/dist/config/paths.js.map +1 -1
  140. package/dist/config/reload.d.ts +1 -1
  141. package/dist/config/reload.js +3 -3
  142. package/dist/config/reload.js.map +1 -1
  143. package/dist/config/resolve-config-value.d.ts +36 -0
  144. package/dist/config/resolve-config-value.js +218 -0
  145. package/dist/config/resolve-config-value.js.map +1 -0
  146. package/dist/config/rules.js +3 -2
  147. package/dist/config/rules.js.map +1 -1
  148. package/dist/config/schema.d.ts +17 -884
  149. package/dist/config/schema.js +36 -312
  150. package/dist/config/schema.js.map +1 -1
  151. package/dist/config/types.models.d.ts +54 -0
  152. package/dist/config/types.models.js +2 -0
  153. package/dist/config/types.models.js.map +1 -0
  154. package/dist/cron/validation.d.ts +4 -4
  155. package/dist/gateway/hono/app.js +230 -78
  156. package/dist/gateway/hono/app.js.map +1 -1
  157. package/dist/gateway/hono/oauth-async.d.ts +14 -0
  158. package/dist/gateway/hono/oauth-async.js +285 -0
  159. package/dist/gateway/hono/oauth-async.js.map +1 -0
  160. package/dist/gateway/hono/oauth.d.ts +9 -0
  161. package/dist/gateway/hono/oauth.js +157 -0
  162. package/dist/gateway/hono/oauth.js.map +1 -0
  163. package/dist/gateway/hono/sse.js +5 -2
  164. package/dist/gateway/hono/sse.js.map +1 -1
  165. package/dist/gateway/service.d.ts +6 -2
  166. package/dist/gateway/service.js +20 -6
  167. package/dist/gateway/service.js.map +1 -1
  168. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js +2 -0
  169. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js.map +1 -0
  170. package/dist/gateway/static/root/assets/main-Br2tw-87.js +5168 -0
  171. package/dist/gateway/static/root/assets/main-Br2tw-87.js.map +1 -0
  172. package/dist/gateway/static/root/assets/main-DwlbPf8Z.css +1 -0
  173. package/dist/gateway/static/root/index.html +2 -2
  174. package/dist/plugins/index.d.ts +0 -2
  175. package/dist/plugins/index.js +0 -2
  176. package/dist/plugins/index.js.map +1 -1
  177. package/dist/plugins/types.d.ts +0 -2
  178. package/dist/plugins/types.js +0 -2
  179. package/dist/plugins/types.js.map +1 -1
  180. package/dist/providers/index.d.ts +50 -22
  181. package/dist/providers/index.js +276 -50
  182. package/dist/providers/index.js.map +1 -1
  183. package/dist/providers/model-registry.d.ts +84 -0
  184. package/dist/providers/model-registry.js +385 -0
  185. package/dist/providers/model-registry.js.map +1 -0
  186. package/dist/types/providers.d.ts +2 -63
  187. package/dist/types/providers.js +1 -1
  188. package/dist/utils/__tests__/frontmatter.test.js +4 -3
  189. package/dist/utils/__tests__/frontmatter.test.js.map +1 -1
  190. package/dist/utils/diagnostic-events.d.ts +230 -0
  191. package/dist/utils/diagnostic-events.js +189 -0
  192. package/dist/utils/diagnostic-events.js.map +1 -0
  193. package/dist/utils/frontmatter.d.ts +0 -1
  194. package/dist/utils/frontmatter.js +13 -77
  195. package/dist/utils/frontmatter.js.map +1 -1
  196. package/dist/utils/log-stream.d.ts +95 -0
  197. package/dist/utils/log-stream.js +229 -0
  198. package/dist/utils/log-stream.js.map +1 -0
  199. package/dist/utils/logger.d.ts +5 -0
  200. package/dist/utils/logger.js +25 -0
  201. package/dist/utils/logger.js.map +1 -1
  202. package/dist/utils/redact.d.ts +73 -0
  203. package/dist/utils/redact.js +245 -0
  204. package/dist/utils/redact.js.map +1 -0
  205. package/package.json +6 -4
  206. package/skills/find-skills/SKILL.md +0 -9
  207. package/dist/__tests__/core.test.d.ts +0 -1
  208. package/dist/__tests__/core.test.js +0 -72
  209. package/dist/__tests__/core.test.js.map +0 -1
  210. package/dist/agent/model-manager.js.map +0 -1
  211. package/dist/cli/commands/configure.d.ts +0 -1
  212. package/dist/cli/commands/configure.js +0 -171
  213. package/dist/cli/commands/configure.js.map +0 -1
  214. package/dist/cli/commands/gateway-daemon.d.ts +0 -1
  215. package/dist/cli/commands/gateway-daemon.js +0 -141
  216. package/dist/cli/commands/gateway-daemon.js.map +0 -1
  217. package/dist/config/__tests__/diff.test.d.ts +0 -1
  218. package/dist/config/__tests__/diff.test.js +0 -192
  219. package/dist/config/__tests__/diff.test.js.map +0 -1
  220. package/dist/config/__tests__/loader.test.d.ts +0 -1
  221. package/dist/config/__tests__/loader.test.js +0 -356
  222. package/dist/config/__tests__/loader.test.js.map +0 -1
  223. package/dist/config/__tests__/paths.test.d.ts +0 -1
  224. package/dist/config/__tests__/paths.test.js +0 -192
  225. package/dist/config/__tests__/paths.test.js.map +0 -1
  226. package/dist/config/__tests__/reload.test.d.ts +0 -1
  227. package/dist/config/__tests__/reload.test.js +0 -374
  228. package/dist/config/__tests__/reload.test.js.map +0 -1
  229. package/dist/config/__tests__/rules.test.d.ts +0 -1
  230. package/dist/config/__tests__/rules.test.js +0 -204
  231. package/dist/config/__tests__/rules.test.js.map +0 -1
  232. package/dist/config/__tests__/schema.test.d.ts +0 -1
  233. package/dist/config/__tests__/schema.test.js +0 -672
  234. package/dist/config/__tests__/schema.test.js.map +0 -1
  235. package/dist/daemon/background-start.d.ts +0 -33
  236. package/dist/daemon/background-start.js +0 -89
  237. package/dist/daemon/background-start.js.map +0 -1
  238. package/dist/daemon/gateway-manager.d.ts +0 -87
  239. package/dist/daemon/gateway-manager.js +0 -324
  240. package/dist/daemon/gateway-manager.js.map +0 -1
  241. package/dist/daemon/index.d.ts +0 -5
  242. package/dist/daemon/index.js +0 -6
  243. package/dist/daemon/index.js.map +0 -1
  244. package/dist/gateway/static/root/assets/main-DevbZW9K.js +0 -2227
  245. package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +0 -1
  246. package/dist/gateway/static/root/assets/main-DxZg1Nmz.css +0 -1
  247. package/dist/providers/__tests__/registry.test.d.ts +0 -1
  248. package/dist/providers/__tests__/registry.test.js +0 -110
  249. package/dist/providers/__tests__/registry.test.js.map +0 -1
  250. package/dist/providers/api-strategies.d.ts +0 -15
  251. package/dist/providers/api-strategies.js +0 -96
  252. package/dist/providers/api-strategies.js.map +0 -1
  253. package/dist/providers/auto-discovery.d.ts +0 -39
  254. package/dist/providers/auto-discovery.js +0 -189
  255. package/dist/providers/auto-discovery.js.map +0 -1
  256. package/dist/providers/config.d.ts +0 -25
  257. package/dist/providers/config.js +0 -42
  258. package/dist/providers/config.js.map +0 -1
  259. package/dist/providers/model-catalog.d.ts +0 -92
  260. package/dist/providers/model-catalog.js +0 -998
  261. package/dist/providers/model-catalog.js.map +0 -1
  262. package/dist/providers/models-dev-data.d.ts +0 -11
  263. package/dist/providers/models-dev-data.js +0 -1035
  264. package/dist/providers/models-dev-data.js.map +0 -1
  265. package/dist/providers/models-dev.d.ts +0 -34
  266. package/dist/providers/models-dev.js +0 -33
  267. package/dist/providers/models-dev.js.map +0 -1
  268. package/dist/providers/pi-ai.d.ts +0 -62
  269. package/dist/providers/pi-ai.js +0 -221
  270. package/dist/providers/pi-ai.js.map +0 -1
  271. package/dist/providers/provider-catalog.d.ts +0 -91
  272. package/dist/providers/provider-catalog.js +0 -791
  273. package/dist/providers/provider-catalog.js.map +0 -1
  274. package/dist/providers/registry.d.ts +0 -135
  275. package/dist/providers/registry.js +0 -475
  276. package/dist/providers/registry.js.map +0 -1
  277. package/dist/providers/types.d.ts +0 -95
  278. package/dist/providers/types.js +0 -7
  279. package/dist/providers/types.js.map +0 -1
  280. package/dist/session/chat-manager.d.ts +0 -49
  281. package/dist/session/chat-manager.js +0 -167
  282. package/dist/session/chat-manager.js.map +0 -1
  283. package/dist/session/chat-types.d.ts +0 -53
  284. package/dist/session/chat-types.js +0 -63
  285. package/dist/session/chat-types.js.map +0 -1
@@ -1,791 +0,0 @@
1
- // ============================================
2
- // Provider Registry
3
- // ============================================
4
- export const PROVIDER_CATALOG = {
5
- // ============================================
6
- // Native Providers
7
- // ============================================
8
- openai: {
9
- id: 'openai',
10
- name: 'OpenAI',
11
- category: 'native',
12
- description: 'OpenAI API - GPT-4, o1, o3 系列',
13
- auth: {
14
- type: 'api_key',
15
- envKeys: ['OPENAI_API_KEY'],
16
- headerPrefix: 'Bearer ',
17
- supportsOAuth: false,
18
- },
19
- api: {
20
- type: 'openai',
21
- baseUrl: 'https://api.openai.com/v1',
22
- strategy: 'openai-completions',
23
- },
24
- capabilities: {
25
- multimodal: true,
26
- streaming: true,
27
- functionCalling: true,
28
- vision: true,
29
- reasoning: true,
30
- jsonMode: true,
31
- systemPrompt: true,
32
- tools: true,
33
- imageGeneration: true,
34
- },
35
- defaults: {
36
- temperature: 0.7,
37
- maxTokens: 4096,
38
- timeout: 60000,
39
- contextWindow: 128000,
40
- },
41
- modelPrefixes: ['gpt-', 'o1', 'o3', 'o4'],
42
- },
43
- anthropic: {
44
- id: 'anthropic',
45
- name: 'Anthropic',
46
- category: 'native',
47
- description: 'Anthropic Claude 系列',
48
- auth: {
49
- type: 'api_key',
50
- envKeys: ['ANTHROPIC_API_KEY'],
51
- headerPrefix: 'Bearer ',
52
- supportsOAuth: true,
53
- },
54
- api: {
55
- type: 'anthropic',
56
- baseUrl: 'https://api.anthropic.com',
57
- strategy: 'anthropic-messages',
58
- },
59
- capabilities: {
60
- multimodal: true,
61
- streaming: true,
62
- functionCalling: true,
63
- vision: true,
64
- reasoning: true,
65
- jsonMode: false,
66
- systemPrompt: true,
67
- tools: true,
68
- },
69
- defaults: {
70
- temperature: 0.7,
71
- maxTokens: 8192,
72
- timeout: 60000,
73
- contextWindow: 200000,
74
- },
75
- modelPrefixes: ['claude-'],
76
- },
77
- google: {
78
- id: 'google',
79
- name: 'Google',
80
- category: 'native',
81
- description: 'Google Gemini 系列',
82
- auth: {
83
- type: 'api_key',
84
- envKeys: ['GOOGLE_API_KEY', 'GEMINI_API_KEY'],
85
- headerPrefix: '',
86
- supportsOAuth: false,
87
- },
88
- api: {
89
- type: 'google',
90
- baseUrl: 'https://generativelanguage.googleapis.com/v1',
91
- strategy: 'google-generative-ai',
92
- },
93
- capabilities: {
94
- multimodal: true,
95
- streaming: true,
96
- functionCalling: true,
97
- vision: true,
98
- reasoning: true,
99
- jsonMode: true,
100
- systemPrompt: true,
101
- tools: true,
102
- },
103
- defaults: {
104
- temperature: 0.7,
105
- maxTokens: 8192,
106
- timeout: 60000,
107
- contextWindow: 1000000,
108
- },
109
- modelPrefixes: ['gemini-', 'gemma-'],
110
- },
111
- // ============================================
112
- // OpenAI-Compatible Providers
113
- // ============================================
114
- qwen: {
115
- id: 'qwen',
116
- name: 'Qwen (通义千问)',
117
- category: 'openai-compatible',
118
- description: '阿里云通义千问',
119
- auth: {
120
- type: 'api_key',
121
- envKeys: ['QWEN_API_KEY', 'DASHSCOPE_API_KEY'],
122
- headerPrefix: 'Bearer ',
123
- supportsOAuth: true,
124
- },
125
- api: {
126
- type: 'openai',
127
- baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
128
- strategy: 'openai-completions',
129
- },
130
- capabilities: {
131
- multimodal: true,
132
- streaming: true,
133
- functionCalling: true,
134
- vision: true,
135
- reasoning: true,
136
- jsonMode: true,
137
- systemPrompt: true,
138
- tools: true,
139
- },
140
- defaults: {
141
- temperature: 0.7,
142
- maxTokens: 4096,
143
- timeout: 60000,
144
- contextWindow: 128000,
145
- },
146
- modelPrefixes: ['qwen', 'qwq'],
147
- },
148
- kimi: {
149
- id: 'kimi',
150
- name: 'Kimi (月之暗面)',
151
- category: 'openai-compatible',
152
- description: 'Moonshot Kimi 系列',
153
- auth: {
154
- type: 'api_key',
155
- envKeys: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],
156
- headerPrefix: 'Bearer ',
157
- supportsOAuth: true,
158
- },
159
- api: {
160
- type: 'openai',
161
- baseUrl: 'https://api.moonshot.cn/v1',
162
- strategy: 'openai-completions',
163
- },
164
- capabilities: {
165
- multimodal: false,
166
- streaming: true,
167
- functionCalling: true,
168
- vision: false,
169
- reasoning: true,
170
- jsonMode: true,
171
- systemPrompt: true,
172
- tools: true,
173
- },
174
- defaults: {
175
- temperature: 0.7,
176
- maxTokens: 4096,
177
- timeout: 60000,
178
- contextWindow: 256000,
179
- },
180
- modelPrefixes: ['kimi'],
181
- },
182
- moonshot: {
183
- id: 'moonshot',
184
- name: 'Moonshot AI',
185
- category: 'openai-compatible',
186
- description: 'Moonshot AI',
187
- auth: {
188
- type: 'api_key',
189
- envKeys: ['MOONSHOT_API_KEY'],
190
- headerPrefix: 'Bearer ',
191
- supportsOAuth: false,
192
- },
193
- api: {
194
- type: 'openai',
195
- baseUrl: 'https://api.moonshot.ai/v1',
196
- strategy: 'openai-completions',
197
- },
198
- capabilities: {
199
- multimodal: false,
200
- streaming: true,
201
- functionCalling: true,
202
- vision: false,
203
- reasoning: true,
204
- jsonMode: true,
205
- systemPrompt: true,
206
- tools: true,
207
- },
208
- defaults: {
209
- temperature: 0.7,
210
- maxTokens: 4096,
211
- timeout: 60000,
212
- contextWindow: 128000,
213
- },
214
- modelPrefixes: ['moonshot'],
215
- },
216
- deepseek: {
217
- id: 'deepseek',
218
- name: 'DeepSeek',
219
- category: 'openai-compatible',
220
- description: 'DeepSeek 大模型',
221
- auth: {
222
- type: 'api_key',
223
- envKeys: ['DEEPSEEK_API_KEY'],
224
- headerPrefix: 'Bearer ',
225
- supportsOAuth: false,
226
- },
227
- api: {
228
- type: 'openai',
229
- baseUrl: 'https://api.deepseek.com/v1',
230
- strategy: 'openai-completions',
231
- },
232
- capabilities: {
233
- multimodal: false,
234
- streaming: true,
235
- functionCalling: true,
236
- vision: false,
237
- reasoning: true,
238
- jsonMode: true,
239
- systemPrompt: true,
240
- tools: true,
241
- },
242
- defaults: {
243
- temperature: 0.7,
244
- maxTokens: 8192,
245
- timeout: 60000,
246
- contextWindow: 64000,
247
- },
248
- modelPrefixes: ['deepseek', 'r1'],
249
- },
250
- groq: {
251
- id: 'groq',
252
- name: 'Groq',
253
- category: 'openai-compatible',
254
- description: 'Groq 高速推理',
255
- auth: {
256
- type: 'api_key',
257
- envKeys: ['GROQ_API_KEY'],
258
- headerPrefix: 'Bearer ',
259
- supportsOAuth: false,
260
- },
261
- api: {
262
- type: 'openai',
263
- baseUrl: 'https://api.groq.com/openai/v1',
264
- strategy: 'openai-completions',
265
- },
266
- capabilities: {
267
- multimodal: false,
268
- streaming: true,
269
- functionCalling: true,
270
- vision: false,
271
- reasoning: false,
272
- jsonMode: true,
273
- systemPrompt: true,
274
- tools: true,
275
- },
276
- defaults: {
277
- temperature: 0.7,
278
- maxTokens: 4096,
279
- timeout: 30000,
280
- contextWindow: 128000,
281
- },
282
- modelPrefixes: ['llama', 'mixtral', 'gemma'],
283
- },
284
- openrouter: {
285
- id: 'openrouter',
286
- name: 'OpenRouter',
287
- category: 'openai-compatible',
288
- description: 'OpenRouter 模型聚合',
289
- auth: {
290
- type: 'api_key',
291
- envKeys: ['OPENROUTER_API_KEY'],
292
- headerPrefix: 'Bearer ',
293
- supportsOAuth: false,
294
- },
295
- api: {
296
- type: 'openai',
297
- baseUrl: 'https://openrouter.ai/api/v1',
298
- strategy: 'openai-completions',
299
- },
300
- capabilities: {
301
- multimodal: true,
302
- streaming: true,
303
- functionCalling: true,
304
- vision: true,
305
- reasoning: true,
306
- jsonMode: true,
307
- systemPrompt: true,
308
- tools: true,
309
- },
310
- defaults: {
311
- temperature: 0.7,
312
- maxTokens: 4096,
313
- timeout: 60000,
314
- contextWindow: 128000,
315
- },
316
- modelPrefixes: [],
317
- },
318
- xai: {
319
- id: 'xai',
320
- name: 'xAI (Grok)',
321
- category: 'openai-compatible',
322
- description: 'xAI Grok 系列',
323
- auth: {
324
- type: 'api_key',
325
- envKeys: ['XAI_API_KEY'],
326
- headerPrefix: 'Bearer ',
327
- supportsOAuth: false,
328
- },
329
- api: {
330
- type: 'openai',
331
- baseUrl: 'https://api.x.ai/v1',
332
- strategy: 'openai-completions',
333
- },
334
- capabilities: {
335
- multimodal: true,
336
- streaming: true,
337
- functionCalling: true,
338
- vision: true,
339
- reasoning: true,
340
- jsonMode: true,
341
- systemPrompt: true,
342
- tools: true,
343
- },
344
- defaults: {
345
- temperature: 0.7,
346
- maxTokens: 4096,
347
- timeout: 60000,
348
- contextWindow: 128000,
349
- },
350
- modelPrefixes: ['grok'],
351
- },
352
- cerebras: {
353
- id: 'cerebras',
354
- name: 'Cerebras',
355
- category: 'openai-compatible',
356
- description: 'Cerebras 推理',
357
- auth: {
358
- type: 'api_key',
359
- envKeys: ['CEREBRAS_API_KEY'],
360
- headerPrefix: 'Bearer ',
361
- supportsOAuth: false,
362
- },
363
- api: {
364
- type: 'openai',
365
- baseUrl: 'https://api.cerebras.ai/v1',
366
- strategy: 'openai-completions',
367
- },
368
- capabilities: {
369
- multimodal: false,
370
- streaming: true,
371
- functionCalling: false,
372
- vision: false,
373
- reasoning: false,
374
- jsonMode: true,
375
- systemPrompt: true,
376
- tools: false,
377
- },
378
- defaults: {
379
- temperature: 0.7,
380
- maxTokens: 4096,
381
- timeout: 30000,
382
- contextWindow: 8192,
383
- },
384
- modelPrefixes: [],
385
- },
386
- mistral: {
387
- id: 'mistral',
388
- name: 'Mistral AI',
389
- category: 'openai-compatible',
390
- description: 'Mistral 大模型',
391
- auth: {
392
- type: 'api_key',
393
- envKeys: ['MISTRAL_API_KEY'],
394
- headerPrefix: 'Bearer ',
395
- supportsOAuth: false,
396
- },
397
- api: {
398
- type: 'openai',
399
- baseUrl: 'https://api.mistral.ai/v1',
400
- strategy: 'openai-completions',
401
- },
402
- capabilities: {
403
- multimodal: false,
404
- streaming: true,
405
- functionCalling: true,
406
- vision: false,
407
- reasoning: false,
408
- jsonMode: true,
409
- systemPrompt: true,
410
- tools: true,
411
- },
412
- defaults: {
413
- temperature: 0.7,
414
- maxTokens: 4096,
415
- timeout: 60000,
416
- contextWindow: 32000,
417
- },
418
- modelPrefixes: ['mistral'],
419
- },
420
- // ============================================
421
- // Anthropic-Compatible Providers
422
- // ============================================
423
- minimax: {
424
- id: 'minimax',
425
- name: 'MiniMax',
426
- category: 'anthropic-compatible',
427
- description: 'MiniMax 海外版',
428
- auth: {
429
- type: 'api_key',
430
- envKeys: ['MINIMAX_API_KEY'],
431
- headerPrefix: 'Bearer ',
432
- supportsOAuth: true,
433
- },
434
- api: {
435
- type: 'openai',
436
- baseUrl: 'https://api.minimax.io/anthropic',
437
- strategy: 'anthropic-messages',
438
- },
439
- capabilities: {
440
- multimodal: false,
441
- streaming: true,
442
- functionCalling: true,
443
- vision: false,
444
- reasoning: true,
445
- jsonMode: true,
446
- systemPrompt: true,
447
- tools: true,
448
- },
449
- defaults: {
450
- temperature: 0.7,
451
- maxTokens: 4096,
452
- timeout: 60000,
453
- contextWindow: 1000000,
454
- },
455
- modelPrefixes: ['minimax'],
456
- },
457
- 'minimax-cn': {
458
- id: 'minimax-cn',
459
- name: 'MiniMax CN',
460
- category: 'anthropic-compatible',
461
- description: 'MiniMax 国内版',
462
- auth: {
463
- type: 'api_key',
464
- envKeys: ['MINIMAX_CN_API_KEY', 'MINIMAX_API_KEY'],
465
- headerPrefix: 'Bearer ',
466
- supportsOAuth: false,
467
- },
468
- api: {
469
- type: 'openai',
470
- baseUrl: 'https://api.minimaxi.com/anthropic',
471
- strategy: 'anthropic-messages',
472
- },
473
- capabilities: {
474
- multimodal: false,
475
- streaming: true,
476
- functionCalling: true,
477
- vision: false,
478
- reasoning: true,
479
- jsonMode: true,
480
- systemPrompt: true,
481
- tools: true,
482
- },
483
- defaults: {
484
- temperature: 0.7,
485
- maxTokens: 4096,
486
- timeout: 60000,
487
- contextWindow: 1000000,
488
- },
489
- modelPrefixes: ['minimax-cn'],
490
- },
491
- zhipu: {
492
- id: 'zhipu',
493
- name: 'Zhipu (智谱)',
494
- category: 'openai-compatible',
495
- description: '智谱 GLM 系列',
496
- auth: {
497
- type: 'api_key',
498
- envKeys: ['ZHIPU_API_KEY'],
499
- headerPrefix: 'Bearer ',
500
- supportsOAuth: false,
501
- },
502
- api: {
503
- type: 'openai',
504
- baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
505
- strategy: 'openai-completions',
506
- },
507
- capabilities: {
508
- multimodal: true,
509
- streaming: true,
510
- functionCalling: true,
511
- vision: true,
512
- reasoning: false,
513
- jsonMode: true,
514
- systemPrompt: true,
515
- tools: true,
516
- },
517
- defaults: {
518
- temperature: 0.7,
519
- maxTokens: 4096,
520
- timeout: 60000,
521
- contextWindow: 128000,
522
- },
523
- modelPrefixes: ['glm-'],
524
- },
525
- 'zhipu-cn': {
526
- id: 'zhipu-cn',
527
- name: 'Zhipu CN',
528
- category: 'openai-compatible',
529
- description: '智谱国内版',
530
- auth: {
531
- type: 'api_key',
532
- envKeys: ['ZHIPU_CN_API_KEY', 'ZHIPU_API_KEY'],
533
- headerPrefix: 'Bearer ',
534
- supportsOAuth: false,
535
- },
536
- api: {
537
- type: 'openai',
538
- baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
539
- strategy: 'openai-completions',
540
- },
541
- capabilities: {
542
- multimodal: true,
543
- streaming: true,
544
- functionCalling: true,
545
- vision: true,
546
- reasoning: false,
547
- jsonMode: true,
548
- systemPrompt: true,
549
- tools: true,
550
- },
551
- defaults: {
552
- temperature: 0.7,
553
- maxTokens: 4096,
554
- timeout: 60000,
555
- contextWindow: 128000,
556
- },
557
- modelPrefixes: ['glm-'],
558
- },
559
- // ============================================
560
- // Local Providers
561
- // ============================================
562
- ollama: {
563
- id: 'ollama',
564
- name: 'Ollama',
565
- category: 'local',
566
- description: '本地 Ollama 模型',
567
- auth: {
568
- type: 'api_key',
569
- envKeys: ['OLLAMA_API_KEY'],
570
- headerPrefix: 'Bearer ',
571
- supportsOAuth: false,
572
- },
573
- api: {
574
- type: 'ollama',
575
- baseUrl: 'http://127.0.0.1:11434/v1',
576
- strategy: 'openai-completions',
577
- },
578
- capabilities: {
579
- multimodal: true,
580
- streaming: true,
581
- functionCalling: true,
582
- vision: true,
583
- reasoning: true,
584
- jsonMode: true,
585
- systemPrompt: true,
586
- tools: true,
587
- },
588
- defaults: {
589
- temperature: 0.7,
590
- maxTokens: 4096,
591
- timeout: 60000,
592
- contextWindow: 128000,
593
- },
594
- modelPrefixes: [],
595
- },
596
- // ============================================
597
- // Special Providers
598
- // ============================================
599
- 'github-copilot': {
600
- id: 'github-copilot',
601
- name: 'GitHub Copilot',
602
- category: 'native',
603
- description: 'GitHub Copilot Chat',
604
- auth: {
605
- type: 'token',
606
- envKeys: ['GITHUB_COPILOT_TOKEN'],
607
- headerPrefix: 'token ',
608
- supportsOAuth: true,
609
- },
610
- api: {
611
- type: 'custom',
612
- baseUrl: '',
613
- strategy: 'github-copilot',
614
- },
615
- capabilities: {
616
- multimodal: false,
617
- streaming: true,
618
- functionCalling: false,
619
- vision: false,
620
- reasoning: false,
621
- jsonMode: false,
622
- systemPrompt: true,
623
- tools: false,
624
- },
625
- defaults: {
626
- temperature: 0.7,
627
- maxTokens: 4096,
628
- timeout: 60000,
629
- contextWindow: 128000,
630
- },
631
- modelPrefixes: [],
632
- },
633
- // ============================================
634
- // Bailian Coding Plan
635
- // ============================================
636
- bailian: {
637
- id: 'bailian',
638
- name: 'Bailian Coding Plan',
639
- category: 'openai-compatible',
640
- description: '阿里云百炼 Coding Plan 专属 API',
641
- auth: {
642
- type: 'api_key',
643
- envKeys: ['BAILIAN_API_KEY', 'BAILIAN_CODING_API_KEY'],
644
- headerPrefix: 'Bearer ',
645
- supportsOAuth: false,
646
- },
647
- api: {
648
- type: 'openai',
649
- baseUrl: 'https://coding.dashscope.aliyuncs.com/v1',
650
- strategy: 'openai-completions',
651
- },
652
- capabilities: {
653
- multimodal: false,
654
- streaming: true,
655
- functionCalling: true,
656
- vision: false,
657
- reasoning: true,
658
- jsonMode: true,
659
- systemPrompt: true,
660
- tools: true,
661
- },
662
- defaults: {
663
- temperature: 0.7,
664
- maxTokens: 65536,
665
- timeout: 120000,
666
- contextWindow: 262144,
667
- },
668
- modelPrefixes: ['qwen3'],
669
- },
670
- };
671
- export function getProvider(id) {
672
- return PROVIDER_CATALOG[id];
673
- }
674
- export function getAllProviders() {
675
- return Object.values(PROVIDER_CATALOG);
676
- }
677
- export function detectProviderByModel(modelId) {
678
- const lowerId = modelId.toLowerCase();
679
- for (const [providerId, provider] of Object.entries(PROVIDER_CATALOG)) {
680
- if (provider.modelPrefixes?.some(prefix => lowerId.startsWith(prefix.toLowerCase()))) {
681
- return providerId;
682
- }
683
- if (lowerId.includes(providerId.toLowerCase())) {
684
- return providerId;
685
- }
686
- }
687
- return undefined;
688
- }
689
- export function isProviderConfigured(id) {
690
- const provider = PROVIDER_CATALOG[id];
691
- if (!provider)
692
- return false;
693
- return provider.auth.envKeys.some(key => {
694
- const value = process.env[key];
695
- return value && value.length > 0;
696
- });
697
- }
698
- export function getConfiguredProviders() {
699
- return getAllProviders().filter(p => isProviderConfigured(p.id));
700
- }
701
- export function getProviderApiKey(id) {
702
- const provider = PROVIDER_CATALOG[id];
703
- if (!provider)
704
- return undefined;
705
- for (const key of provider.auth.envKeys) {
706
- const value = process.env[key];
707
- if (value && value.length > 0)
708
- return value;
709
- }
710
- return undefined;
711
- }
712
- export function getProviderDisplayInfo(id) {
713
- const provider = PROVIDER_CATALOG[id];
714
- if (!provider)
715
- return undefined;
716
- return {
717
- id: provider.id,
718
- name: provider.name,
719
- description: provider.description || '',
720
- envKeys: provider.auth.envKeys,
721
- authType: provider.auth.type,
722
- supportsOAuth: provider.auth.supportsOAuth || false,
723
- baseUrl: provider.api.baseUrl,
724
- logo: provider.logo,
725
- configured: isProviderConfigured(id),
726
- };
727
- }
728
- export function getAllProviderDisplayInfo() {
729
- return getAllProviders()
730
- .map(p => getProviderDisplayInfo(p.id))
731
- .filter((p) => p !== undefined);
732
- }
733
- export function parseModelRef(modelRef) {
734
- if (modelRef.includes('/')) {
735
- const [provider, ...modelParts] = modelRef.split('/');
736
- return {
737
- provider,
738
- model: modelParts.join('/'),
739
- isFullRef: true,
740
- };
741
- }
742
- const detected = detectProviderByModel(modelRef);
743
- if (detected) {
744
- return {
745
- provider: detected,
746
- model: modelRef,
747
- isFullRef: false,
748
- };
749
- }
750
- return {
751
- provider: 'openai',
752
- model: modelRef,
753
- isFullRef: false,
754
- };
755
- }
756
- export function registerCustomProvider(definition) {
757
- PROVIDER_CATALOG[definition.id] = definition;
758
- }
759
- export function createCustomProviderFromConfig(id, name, config) {
760
- return {
761
- id,
762
- name,
763
- category: config.category || 'openai-compatible',
764
- auth: {
765
- type: 'api_key',
766
- envKeys: config.envKey ? [config.envKey] : [`${id.toUpperCase().replace(/-/g, '_')}_API_KEY`],
767
- headerPrefix: 'Bearer ',
768
- },
769
- api: {
770
- type: 'openai',
771
- baseUrl: config.baseUrl,
772
- strategy: config.strategy || 'openai-completions',
773
- },
774
- capabilities: {
775
- multimodal: false,
776
- streaming: true,
777
- functionCalling: true,
778
- vision: false,
779
- reasoning: false,
780
- jsonMode: true,
781
- systemPrompt: true,
782
- tools: true,
783
- },
784
- defaults: {
785
- temperature: 0.7,
786
- maxTokens: 4096,
787
- timeout: 60000,
788
- },
789
- };
790
- }
791
- //# sourceMappingURL=provider-catalog.js.map