@opengoat/core 2026.2.9

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 (288) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -0
  3. package/dist/apps/runtime/create-opengoat-runtime.d.ts +14 -0
  4. package/dist/apps/runtime/create-opengoat-runtime.js +23 -0
  5. package/dist/apps/runtime/create-opengoat-runtime.js.map +1 -0
  6. package/dist/core/acp/application/acp-agent.d.ts +60 -0
  7. package/dist/core/acp/application/acp-agent.js +424 -0
  8. package/dist/core/acp/application/acp-agent.js.map +1 -0
  9. package/dist/core/acp/application/session-store.d.ts +13 -0
  10. package/dist/core/acp/application/session-store.js +40 -0
  11. package/dist/core/acp/application/session-store.js.map +1 -0
  12. package/dist/core/acp/domain/meta.d.ts +7 -0
  13. package/dist/core/acp/domain/meta.js +31 -0
  14. package/dist/core/acp/domain/meta.js.map +1 -0
  15. package/dist/core/acp/domain/session.d.ts +23 -0
  16. package/dist/core/acp/domain/session.js +2 -0
  17. package/dist/core/acp/domain/session.js.map +1 -0
  18. package/dist/core/acp/index.d.ts +5 -0
  19. package/dist/core/acp/index.js +4 -0
  20. package/dist/core/acp/index.js.map +1 -0
  21. package/dist/core/agents/application/agent-manifest.service.d.ts +20 -0
  22. package/dist/core/agents/application/agent-manifest.service.js +89 -0
  23. package/dist/core/agents/application/agent-manifest.service.js.map +1 -0
  24. package/dist/core/agents/application/agent.service.d.ts +25 -0
  25. package/dist/core/agents/application/agent.service.js +191 -0
  26. package/dist/core/agents/application/agent.service.js.map +1 -0
  27. package/dist/core/agents/application/workspace-context.service.d.ts +28 -0
  28. package/dist/core/agents/application/workspace-context.service.js +157 -0
  29. package/dist/core/agents/application/workspace-context.service.js.map +1 -0
  30. package/dist/core/agents/domain/agent-manifest.d.ts +37 -0
  31. package/dist/core/agents/domain/agent-manifest.js +228 -0
  32. package/dist/core/agents/domain/agent-manifest.js.map +1 -0
  33. package/dist/core/agents/domain/workspace-context.d.ts +13 -0
  34. package/dist/core/agents/domain/workspace-context.js +14 -0
  35. package/dist/core/agents/domain/workspace-context.js.map +1 -0
  36. package/dist/core/agents/index.d.ts +6 -0
  37. package/dist/core/agents/index.js +6 -0
  38. package/dist/core/agents/index.js.map +1 -0
  39. package/dist/core/bootstrap/application/bootstrap.service.d.ts +24 -0
  40. package/dist/core/bootstrap/application/bootstrap.service.js +108 -0
  41. package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -0
  42. package/dist/core/bootstrap/index.d.ts +1 -0
  43. package/dist/core/bootstrap/index.js +2 -0
  44. package/dist/core/bootstrap/index.js.map +1 -0
  45. package/dist/core/domain/agent-id.d.ts +3 -0
  46. package/dist/core/domain/agent-id.js +12 -0
  47. package/dist/core/domain/agent-id.js.map +1 -0
  48. package/dist/core/domain/agent.d.ts +39 -0
  49. package/dist/core/domain/agent.js +2 -0
  50. package/dist/core/domain/agent.js.map +1 -0
  51. package/dist/core/domain/opengoat-paths.d.ts +29 -0
  52. package/dist/core/domain/opengoat-paths.js +2 -0
  53. package/dist/core/domain/opengoat-paths.js.map +1 -0
  54. package/dist/core/gateway/domain/protocol.d.ts +113 -0
  55. package/dist/core/gateway/domain/protocol.js +394 -0
  56. package/dist/core/gateway/domain/protocol.js.map +1 -0
  57. package/dist/core/gateway/index.d.ts +2 -0
  58. package/dist/core/gateway/index.js +2 -0
  59. package/dist/core/gateway/index.js.map +1 -0
  60. package/dist/core/llm/application/vercel-ai-text-runtime.d.ts +26 -0
  61. package/dist/core/llm/application/vercel-ai-text-runtime.js +223 -0
  62. package/dist/core/llm/application/vercel-ai-text-runtime.js.map +1 -0
  63. package/dist/core/llm/domain/text-runtime.d.ts +22 -0
  64. package/dist/core/llm/domain/text-runtime.js +2 -0
  65. package/dist/core/llm/domain/text-runtime.js.map +1 -0
  66. package/dist/core/llm/index.d.ts +2 -0
  67. package/dist/core/llm/index.js +2 -0
  68. package/dist/core/llm/index.js.map +1 -0
  69. package/dist/core/logging/application/structured-logger.d.ts +29 -0
  70. package/dist/core/logging/application/structured-logger.js +86 -0
  71. package/dist/core/logging/application/structured-logger.js.map +1 -0
  72. package/dist/core/logging/domain/logger.d.ts +16 -0
  73. package/dist/core/logging/domain/logger.js +18 -0
  74. package/dist/core/logging/domain/logger.js.map +1 -0
  75. package/dist/core/logging/index.d.ts +3 -0
  76. package/dist/core/logging/index.js +3 -0
  77. package/dist/core/logging/index.js.map +1 -0
  78. package/dist/core/opengoat/application/opengoat.service.d.ts +84 -0
  79. package/dist/core/opengoat/application/opengoat.service.js +308 -0
  80. package/dist/core/opengoat/application/opengoat.service.js.map +1 -0
  81. package/dist/core/opengoat/index.d.ts +1 -0
  82. package/dist/core/opengoat/index.js +2 -0
  83. package/dist/core/opengoat/index.js.map +1 -0
  84. package/dist/core/orchestration/application/orchestration-planner.service.d.ts +28 -0
  85. package/dist/core/orchestration/application/orchestration-planner.service.js +279 -0
  86. package/dist/core/orchestration/application/orchestration-planner.service.js.map +1 -0
  87. package/dist/core/orchestration/application/orchestration.service.d.ts +52 -0
  88. package/dist/core/orchestration/application/orchestration.service.js +1044 -0
  89. package/dist/core/orchestration/application/orchestration.service.js.map +1 -0
  90. package/dist/core/orchestration/application/routing.service.d.ts +11 -0
  91. package/dist/core/orchestration/application/routing.service.js +108 -0
  92. package/dist/core/orchestration/application/routing.service.js.map +1 -0
  93. package/dist/core/orchestration/domain/loop.d.ts +119 -0
  94. package/dist/core/orchestration/domain/loop.js +2 -0
  95. package/dist/core/orchestration/domain/loop.js.map +1 -0
  96. package/dist/core/orchestration/domain/routing.d.ts +58 -0
  97. package/dist/core/orchestration/domain/routing.js +2 -0
  98. package/dist/core/orchestration/domain/routing.js.map +1 -0
  99. package/dist/core/orchestration/domain/run-events.d.ts +21 -0
  100. package/dist/core/orchestration/domain/run-events.js +2 -0
  101. package/dist/core/orchestration/domain/run-events.js.map +1 -0
  102. package/dist/core/orchestration/index.d.ts +6 -0
  103. package/dist/core/orchestration/index.js +4 -0
  104. package/dist/core/orchestration/index.js.map +1 -0
  105. package/dist/core/plugins/application/plugin.service.d.ts +32 -0
  106. package/dist/core/plugins/application/plugin.service.js +236 -0
  107. package/dist/core/plugins/application/plugin.service.js.map +1 -0
  108. package/dist/core/plugins/domain/openclaw-compat.d.ts +60 -0
  109. package/dist/core/plugins/domain/openclaw-compat.js +9 -0
  110. package/dist/core/plugins/domain/openclaw-compat.js.map +1 -0
  111. package/dist/core/plugins/index.d.ts +3 -0
  112. package/dist/core/plugins/index.js +3 -0
  113. package/dist/core/plugins/index.js.map +1 -0
  114. package/dist/core/ports/command-runner.port.d.ts +14 -0
  115. package/dist/core/ports/command-runner.port.js +2 -0
  116. package/dist/core/ports/command-runner.port.js.map +1 -0
  117. package/dist/core/ports/file-system.port.d.ts +9 -0
  118. package/dist/core/ports/file-system.port.js +2 -0
  119. package/dist/core/ports/file-system.port.js.map +1 -0
  120. package/dist/core/ports/path.port.d.ts +3 -0
  121. package/dist/core/ports/path.port.js +2 -0
  122. package/dist/core/ports/path.port.js.map +1 -0
  123. package/dist/core/ports/paths-provider.port.d.ts +4 -0
  124. package/dist/core/ports/paths-provider.port.js +2 -0
  125. package/dist/core/ports/paths-provider.port.js.map +1 -0
  126. package/dist/core/providers/application/provider.service.d.ts +80 -0
  127. package/dist/core/providers/application/provider.service.js +391 -0
  128. package/dist/core/providers/application/provider.service.js.map +1 -0
  129. package/dist/core/providers/base-provider.d.ts +20 -0
  130. package/dist/core/providers/base-provider.js +44 -0
  131. package/dist/core/providers/base-provider.js.map +1 -0
  132. package/dist/core/providers/cli-provider.d.ts +26 -0
  133. package/dist/core/providers/cli-provider.js +151 -0
  134. package/dist/core/providers/cli-provider.js.map +1 -0
  135. package/dist/core/providers/command-executor.d.ts +12 -0
  136. package/dist/core/providers/command-executor.js +76 -0
  137. package/dist/core/providers/command-executor.js.map +1 -0
  138. package/dist/core/providers/errors.d.ts +30 -0
  139. package/dist/core/providers/errors.js +52 -0
  140. package/dist/core/providers/errors.js.map +1 -0
  141. package/dist/core/providers/index.d.ts +18 -0
  142. package/dist/core/providers/index.js +27 -0
  143. package/dist/core/providers/index.js.map +1 -0
  144. package/dist/core/providers/loader.d.ts +2 -0
  145. package/dist/core/providers/loader.js +99 -0
  146. package/dist/core/providers/loader.js.map +1 -0
  147. package/dist/core/providers/onboarding.d.ts +13 -0
  148. package/dist/core/providers/onboarding.js +149 -0
  149. package/dist/core/providers/onboarding.js.map +1 -0
  150. package/dist/core/providers/provider-module.d.ts +19 -0
  151. package/dist/core/providers/provider-module.js +2 -0
  152. package/dist/core/providers/provider-module.js.map +1 -0
  153. package/dist/core/providers/provider-session.d.ts +3 -0
  154. package/dist/core/providers/provider-session.js +44 -0
  155. package/dist/core/providers/provider-session.js.map +1 -0
  156. package/dist/core/providers/providers/claude/index.d.ts +4 -0
  157. package/dist/core/providers/providers/claude/index.js +19 -0
  158. package/dist/core/providers/providers/claude/index.js.map +1 -0
  159. package/dist/core/providers/providers/claude/provider.d.ts +8 -0
  160. package/dist/core/providers/providers/claude/provider.js +106 -0
  161. package/dist/core/providers/providers/claude/provider.js.map +1 -0
  162. package/dist/core/providers/providers/codex/index.d.ts +4 -0
  163. package/dist/core/providers/providers/codex/index.js +19 -0
  164. package/dist/core/providers/providers/codex/index.js.map +1 -0
  165. package/dist/core/providers/providers/codex/provider.d.ts +7 -0
  166. package/dist/core/providers/providers/codex/provider.js +31 -0
  167. package/dist/core/providers/providers/codex/provider.js.map +1 -0
  168. package/dist/core/providers/providers/cursor/index.d.ts +4 -0
  169. package/dist/core/providers/providers/cursor/index.js +19 -0
  170. package/dist/core/providers/providers/cursor/index.js.map +1 -0
  171. package/dist/core/providers/providers/cursor/provider.d.ts +11 -0
  172. package/dist/core/providers/providers/cursor/provider.js +90 -0
  173. package/dist/core/providers/providers/cursor/provider.js.map +1 -0
  174. package/dist/core/providers/providers/extended-http/catalog.d.ts +40 -0
  175. package/dist/core/providers/providers/extended-http/catalog.js +728 -0
  176. package/dist/core/providers/providers/extended-http/catalog.js.map +1 -0
  177. package/dist/core/providers/providers/extended-http/index.d.ts +5 -0
  178. package/dist/core/providers/providers/extended-http/index.js +13 -0
  179. package/dist/core/providers/providers/extended-http/index.js.map +1 -0
  180. package/dist/core/providers/providers/extended-http/provider.d.ts +31 -0
  181. package/dist/core/providers/providers/extended-http/provider.js +580 -0
  182. package/dist/core/providers/providers/extended-http/provider.js.map +1 -0
  183. package/dist/core/providers/providers/gemini/index.d.ts +4 -0
  184. package/dist/core/providers/providers/gemini/index.js +37 -0
  185. package/dist/core/providers/providers/gemini/index.js.map +1 -0
  186. package/dist/core/providers/providers/gemini/provider.d.ts +7 -0
  187. package/dist/core/providers/providers/gemini/provider.js +59 -0
  188. package/dist/core/providers/providers/gemini/provider.js.map +1 -0
  189. package/dist/core/providers/providers/grok/index.d.ts +4 -0
  190. package/dist/core/providers/providers/grok/index.js +41 -0
  191. package/dist/core/providers/providers/grok/index.js.map +1 -0
  192. package/dist/core/providers/providers/grok/provider.d.ts +13 -0
  193. package/dist/core/providers/providers/grok/provider.js +95 -0
  194. package/dist/core/providers/providers/grok/provider.js.map +1 -0
  195. package/dist/core/providers/providers/openai/index.d.ts +4 -0
  196. package/dist/core/providers/providers/openai/index.js +45 -0
  197. package/dist/core/providers/providers/openai/index.js.map +1 -0
  198. package/dist/core/providers/providers/openai/provider.d.ts +14 -0
  199. package/dist/core/providers/providers/openai/provider.js +203 -0
  200. package/dist/core/providers/providers/openai/provider.js.map +1 -0
  201. package/dist/core/providers/providers/openclaw/index.d.ts +4 -0
  202. package/dist/core/providers/providers/openclaw/index.js +31 -0
  203. package/dist/core/providers/providers/openclaw/index.js.map +1 -0
  204. package/dist/core/providers/providers/openclaw/provider.d.ts +11 -0
  205. package/dist/core/providers/providers/openclaw/provider.js +108 -0
  206. package/dist/core/providers/providers/openclaw/provider.js.map +1 -0
  207. package/dist/core/providers/providers/opencode/index.d.ts +4 -0
  208. package/dist/core/providers/providers/opencode/index.js +23 -0
  209. package/dist/core/providers/providers/opencode/index.js.map +1 -0
  210. package/dist/core/providers/providers/opencode/provider.d.ts +11 -0
  211. package/dist/core/providers/providers/opencode/provider.js +215 -0
  212. package/dist/core/providers/providers/opencode/provider.js.map +1 -0
  213. package/dist/core/providers/providers/openrouter/index.d.ts +4 -0
  214. package/dist/core/providers/providers/openrouter/index.js +37 -0
  215. package/dist/core/providers/providers/openrouter/index.js.map +1 -0
  216. package/dist/core/providers/providers/openrouter/provider.d.ts +13 -0
  217. package/dist/core/providers/providers/openrouter/provider.js +80 -0
  218. package/dist/core/providers/providers/openrouter/provider.js.map +1 -0
  219. package/dist/core/providers/registry.d.ts +13 -0
  220. package/dist/core/providers/registry.js +36 -0
  221. package/dist/core/providers/registry.js.map +1 -0
  222. package/dist/core/providers/types.d.ts +101 -0
  223. package/dist/core/providers/types.js +2 -0
  224. package/dist/core/providers/types.js.map +1 -0
  225. package/dist/core/scenarios/application/scenario-runner.service.d.ts +23 -0
  226. package/dist/core/scenarios/application/scenario-runner.service.js +172 -0
  227. package/dist/core/scenarios/application/scenario-runner.service.js.map +1 -0
  228. package/dist/core/scenarios/domain/scenario.d.ts +43 -0
  229. package/dist/core/scenarios/domain/scenario.js +2 -0
  230. package/dist/core/scenarios/domain/scenario.js.map +1 -0
  231. package/dist/core/scenarios/index.d.ts +2 -0
  232. package/dist/core/scenarios/index.js +2 -0
  233. package/dist/core/scenarios/index.js.map +1 -0
  234. package/dist/core/sessions/application/session.service.d.ts +74 -0
  235. package/dist/core/sessions/application/session.service.js +895 -0
  236. package/dist/core/sessions/application/session.service.js.map +1 -0
  237. package/dist/core/sessions/domain/session.d.ts +80 -0
  238. package/dist/core/sessions/domain/session.js +24 -0
  239. package/dist/core/sessions/domain/session.js.map +1 -0
  240. package/dist/core/sessions/domain/transcript.d.ts +28 -0
  241. package/dist/core/sessions/domain/transcript.js +10 -0
  242. package/dist/core/sessions/domain/transcript.js.map +1 -0
  243. package/dist/core/sessions/errors.d.ts +12 -0
  244. package/dist/core/sessions/errors.js +22 -0
  245. package/dist/core/sessions/errors.js.map +1 -0
  246. package/dist/core/sessions/index.d.ts +6 -0
  247. package/dist/core/sessions/index.js +4 -0
  248. package/dist/core/sessions/index.js.map +1 -0
  249. package/dist/core/skills/application/skill.service.d.ts +24 -0
  250. package/dist/core/skills/application/skill.service.js +375 -0
  251. package/dist/core/skills/application/skill.service.js.map +1 -0
  252. package/dist/core/skills/domain/skill.d.ts +62 -0
  253. package/dist/core/skills/domain/skill.js +46 -0
  254. package/dist/core/skills/domain/skill.js.map +1 -0
  255. package/dist/core/skills/index.d.ts +3 -0
  256. package/dist/core/skills/index.js +3 -0
  257. package/dist/core/skills/index.js.map +1 -0
  258. package/dist/core/templates/default-templates.d.ts +19 -0
  259. package/dist/core/templates/default-templates.js +259 -0
  260. package/dist/core/templates/default-templates.js.map +1 -0
  261. package/dist/index.d.ts +27 -0
  262. package/dist/index.js +28 -0
  263. package/dist/index.js.map +1 -0
  264. package/dist/platform/node/acp-server.d.ts +12 -0
  265. package/dist/platform/node/acp-server.js +18 -0
  266. package/dist/platform/node/acp-server.js.map +1 -0
  267. package/dist/platform/node/dotenv.d.ts +6 -0
  268. package/dist/platform/node/dotenv.js +67 -0
  269. package/dist/platform/node/dotenv.js.map +1 -0
  270. package/dist/platform/node/node-command-runner.d.ts +4 -0
  271. package/dist/platform/node/node-command-runner.js +29 -0
  272. package/dist/platform/node/node-command-runner.js.map +1 -0
  273. package/dist/platform/node/node-file-system.d.ts +10 -0
  274. package/dist/platform/node/node-file-system.js +47 -0
  275. package/dist/platform/node/node-file-system.js.map +1 -0
  276. package/dist/platform/node/node-logger.d.ts +9 -0
  277. package/dist/platform/node/node-logger.js +124 -0
  278. package/dist/platform/node/node-logger.js.map +1 -0
  279. package/dist/platform/node/node-path.port.d.ts +9 -0
  280. package/dist/platform/node/node-path.port.js +41 -0
  281. package/dist/platform/node/node-path.port.js.map +1 -0
  282. package/dist/platform/node/opengoat-gateway-client.d.ts +19 -0
  283. package/dist/platform/node/opengoat-gateway-client.js +194 -0
  284. package/dist/platform/node/opengoat-gateway-client.js.map +1 -0
  285. package/dist/platform/node/opengoat-gateway-server.d.ts +53 -0
  286. package/dist/platform/node/opengoat-gateway-server.js +906 -0
  287. package/dist/platform/node/opengoat-gateway-server.js.map +1 -0
  288. package/package.json +37 -0
@@ -0,0 +1,728 @@
1
+ const field = (key, description, options = {}) => ({
2
+ key,
3
+ description,
4
+ required: options.required,
5
+ secret: options.secret
6
+ });
7
+ function resolveCloudflareGatewayBaseUrl(env) {
8
+ const accountId = env.CLOUDFLARE_AI_GATEWAY_ACCOUNT_ID?.trim();
9
+ const gatewayId = env.CLOUDFLARE_AI_GATEWAY_GATEWAY_ID?.trim();
10
+ if (!accountId || !gatewayId) {
11
+ return undefined;
12
+ }
13
+ return `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/anthropic`;
14
+ }
15
+ export const extendedHttpProviderCatalog = [
16
+ {
17
+ id: "amazon-bedrock",
18
+ displayName: "Amazon Bedrock",
19
+ protocol: "bedrock-converse",
20
+ endpoint: {},
21
+ requiredEnv: [field("AMAZON_BEDROCK_MODEL", "Default Bedrock model id", { required: true })],
22
+ modelEnvVar: "AMAZON_BEDROCK_MODEL",
23
+ stripProviderPrefix: true
24
+ },
25
+ {
26
+ id: "anthropic",
27
+ displayName: "Anthropic",
28
+ protocol: "anthropic-messages",
29
+ endpoint: {
30
+ baseUrl: "https://api.anthropic.com",
31
+ baseUrlEnvVar: "ANTHROPIC_BASE_URL",
32
+ endpointPath: "/v1/messages",
33
+ endpointPathEnvVar: "ANTHROPIC_ENDPOINT_PATH",
34
+ endpointEnvVar: "ANTHROPIC_ENDPOINT"
35
+ },
36
+ auth: {
37
+ envVars: ["ANTHROPIC_API_KEY", "ANTHROPIC_OAUTH_TOKEN"],
38
+ header: "x-api-key",
39
+ oauthTokenHeader: "bearer"
40
+ },
41
+ requiredEnv: [
42
+ field("ANTHROPIC_API_KEY", "Anthropic API key (or set ANTHROPIC_OAUTH_TOKEN)", {
43
+ required: true,
44
+ secret: true
45
+ })
46
+ ],
47
+ modelEnvVar: "ANTHROPIC_MODEL",
48
+ defaultModel: "claude-opus-4-5",
49
+ stripProviderPrefix: true,
50
+ fixedHeaders: {
51
+ "anthropic-version": "2023-06-01"
52
+ },
53
+ headersFromEnv: [{ name: "anthropic-version", envVar: "ANTHROPIC_VERSION" }],
54
+ maxTokensEnvVar: "ANTHROPIC_MAX_TOKENS",
55
+ defaultMaxTokens: 4096
56
+ },
57
+ {
58
+ id: "azure-openai-responses",
59
+ displayName: "Azure OpenAI Responses",
60
+ protocol: "openai-chat",
61
+ endpoint: {
62
+ endpointEnvVar: "AZURE_OPENAI_ENDPOINT"
63
+ },
64
+ auth: {
65
+ envVars: ["AZURE_OPENAI_API_KEY"],
66
+ header: "api-key"
67
+ },
68
+ requiredEnv: [
69
+ field("AZURE_OPENAI_API_KEY", "Azure OpenAI API key", { required: true, secret: true }),
70
+ field("AZURE_OPENAI_ENDPOINT", "Azure OpenAI endpoint (full chat completions URL)", {
71
+ required: true
72
+ }),
73
+ field("AZURE_OPENAI_MODEL", "Azure OpenAI model/deployment id", { required: true })
74
+ ],
75
+ modelEnvVar: "AZURE_OPENAI_MODEL",
76
+ stripProviderPrefix: true
77
+ },
78
+ {
79
+ id: "cerebras",
80
+ displayName: "Cerebras",
81
+ protocol: "openai-chat",
82
+ endpoint: {
83
+ baseUrl: "https://api.cerebras.ai/v1",
84
+ baseUrlEnvVar: "CEREBRAS_BASE_URL",
85
+ endpointPath: "/chat/completions",
86
+ endpointPathEnvVar: "CEREBRAS_ENDPOINT_PATH",
87
+ endpointEnvVar: "CEREBRAS_ENDPOINT"
88
+ },
89
+ auth: {
90
+ envVars: ["CEREBRAS_API_KEY"],
91
+ header: "bearer"
92
+ },
93
+ requiredEnv: [field("CEREBRAS_API_KEY", "Cerebras API key", { required: true, secret: true })],
94
+ modelEnvVar: "CEREBRAS_MODEL",
95
+ stripProviderPrefix: true
96
+ },
97
+ {
98
+ id: "chutes",
99
+ displayName: "Chutes",
100
+ protocol: "openai-chat",
101
+ endpoint: {
102
+ baseUrl: "https://llm.chutes.ai/v1",
103
+ baseUrlEnvVar: "CHUTES_BASE_URL",
104
+ endpointPath: "/chat/completions",
105
+ endpointPathEnvVar: "CHUTES_ENDPOINT_PATH",
106
+ endpointEnvVar: "CHUTES_ENDPOINT"
107
+ },
108
+ auth: {
109
+ envVars: ["CHUTES_API_KEY", "CHUTES_OAUTH_TOKEN"],
110
+ header: "bearer",
111
+ oauthTokenHeader: "bearer"
112
+ },
113
+ requiredEnv: [
114
+ field("CHUTES_API_KEY", "Chutes API key (or set CHUTES_OAUTH_TOKEN)", {
115
+ required: true,
116
+ secret: true
117
+ })
118
+ ],
119
+ modelEnvVar: "CHUTES_MODEL",
120
+ stripProviderPrefix: true
121
+ },
122
+ {
123
+ id: "cloudflare-ai-gateway",
124
+ displayName: "Cloudflare AI Gateway",
125
+ protocol: "anthropic-messages",
126
+ endpoint: {
127
+ resolveBaseUrl: resolveCloudflareGatewayBaseUrl,
128
+ endpointPath: "/v1/messages",
129
+ endpointPathEnvVar: "CLOUDFLARE_AI_GATEWAY_ENDPOINT_PATH",
130
+ endpointEnvVar: "CLOUDFLARE_AI_GATEWAY_ENDPOINT"
131
+ },
132
+ auth: {
133
+ envVars: ["CLOUDFLARE_AI_GATEWAY_API_KEY"],
134
+ header: "bearer"
135
+ },
136
+ requiredEnv: [
137
+ field("CLOUDFLARE_AI_GATEWAY_API_KEY", "Cloudflare AI Gateway API key", {
138
+ required: true,
139
+ secret: true
140
+ }),
141
+ field("CLOUDFLARE_AI_GATEWAY_ACCOUNT_ID", "Cloudflare account id", { required: true }),
142
+ field("CLOUDFLARE_AI_GATEWAY_GATEWAY_ID", "Cloudflare AI Gateway id", { required: true })
143
+ ],
144
+ modelEnvVar: "CLOUDFLARE_AI_GATEWAY_MODEL",
145
+ defaultModel: "claude-sonnet-4-5",
146
+ stripProviderPrefix: true,
147
+ fixedHeaders: {
148
+ "anthropic-version": "2023-06-01"
149
+ },
150
+ maxTokensEnvVar: "CLOUDFLARE_AI_GATEWAY_MAX_TOKENS",
151
+ defaultMaxTokens: 4096
152
+ },
153
+ {
154
+ id: "copilot-proxy",
155
+ displayName: "Copilot Proxy",
156
+ protocol: "openai-chat",
157
+ endpoint: {
158
+ baseUrl: "http://127.0.0.1:4141/v1",
159
+ baseUrlEnvVar: "COPILOT_PROXY_BASE_URL",
160
+ endpointPath: "/chat/completions",
161
+ endpointPathEnvVar: "COPILOT_PROXY_ENDPOINT_PATH",
162
+ endpointEnvVar: "COPILOT_PROXY_ENDPOINT"
163
+ },
164
+ auth: {
165
+ envVars: ["COPILOT_GITHUB_TOKEN", "GH_TOKEN", "GITHUB_TOKEN"],
166
+ header: "bearer"
167
+ },
168
+ requiredEnv: [
169
+ field("COPILOT_GITHUB_TOKEN", "GitHub token (use guided GitHub login)", {
170
+ required: true,
171
+ secret: true
172
+ })
173
+ ],
174
+ modelEnvVar: "COPILOT_PROXY_MODEL",
175
+ stripProviderPrefix: true
176
+ },
177
+ {
178
+ id: "github-copilot",
179
+ displayName: "GitHub Copilot",
180
+ protocol: "openai-chat",
181
+ endpoint: {
182
+ baseUrl: "https://api.githubcopilot.com",
183
+ baseUrlEnvVar: "GITHUB_COPILOT_BASE_URL",
184
+ endpointPath: "/chat/completions",
185
+ endpointPathEnvVar: "GITHUB_COPILOT_ENDPOINT_PATH",
186
+ endpointEnvVar: "GITHUB_COPILOT_ENDPOINT"
187
+ },
188
+ auth: {
189
+ envVars: ["COPILOT_GITHUB_TOKEN", "GH_TOKEN", "GITHUB_TOKEN"],
190
+ header: "bearer"
191
+ },
192
+ requiredEnv: [
193
+ field("COPILOT_GITHUB_TOKEN", "GitHub token (use guided GitHub login)", {
194
+ required: true,
195
+ secret: true
196
+ })
197
+ ],
198
+ modelEnvVar: "GITHUB_COPILOT_MODEL",
199
+ stripProviderPrefix: true
200
+ },
201
+ {
202
+ id: "google",
203
+ displayName: "Google Gemini",
204
+ protocol: "openai-chat",
205
+ endpoint: {
206
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
207
+ baseUrlEnvVar: "GOOGLE_BASE_URL",
208
+ endpointPath: "/chat/completions",
209
+ endpointPathEnvVar: "GOOGLE_ENDPOINT_PATH",
210
+ endpointEnvVar: "GOOGLE_ENDPOINT"
211
+ },
212
+ auth: {
213
+ envVars: ["GEMINI_API_KEY", "GOOGLE_API_KEY"],
214
+ header: "bearer"
215
+ },
216
+ requiredEnv: [
217
+ field("GEMINI_API_KEY", "Gemini API key", { required: true, secret: true }),
218
+ field("GEMINI_MODEL", "Optional default model id")
219
+ ],
220
+ modelEnvVar: "GEMINI_MODEL",
221
+ defaultModel: "gemini-3-pro-preview",
222
+ stripProviderPrefix: true
223
+ },
224
+ {
225
+ id: "google-antigravity",
226
+ displayName: "Google Antigravity",
227
+ protocol: "openai-chat",
228
+ endpoint: {
229
+ baseUrl: "https://cloudcode-pa.googleapis.com/v1",
230
+ baseUrlEnvVar: "GOOGLE_ANTIGRAVITY_BASE_URL",
231
+ endpointPath: "/chat/completions",
232
+ endpointPathEnvVar: "GOOGLE_ANTIGRAVITY_ENDPOINT_PATH",
233
+ endpointEnvVar: "GOOGLE_ANTIGRAVITY_ENDPOINT"
234
+ },
235
+ auth: {
236
+ envVars: ["GOOGLE_ANTIGRAVITY_TOKEN"],
237
+ header: "bearer"
238
+ },
239
+ requiredEnv: [
240
+ field("GOOGLE_ANTIGRAVITY_TOKEN", "Google Antigravity OAuth token (use guided sign-in)", {
241
+ required: true,
242
+ secret: true
243
+ })
244
+ ],
245
+ modelEnvVar: "GOOGLE_ANTIGRAVITY_MODEL",
246
+ stripProviderPrefix: true
247
+ },
248
+ {
249
+ id: "google-gemini-cli",
250
+ displayName: "Google Gemini CLI OAuth",
251
+ protocol: "openai-chat",
252
+ endpoint: {
253
+ baseUrl: "https://cloudcode-pa.googleapis.com/v1",
254
+ baseUrlEnvVar: "GOOGLE_GEMINI_CLI_BASE_URL",
255
+ endpointPath: "/chat/completions",
256
+ endpointPathEnvVar: "GOOGLE_GEMINI_CLI_ENDPOINT_PATH",
257
+ endpointEnvVar: "GOOGLE_GEMINI_CLI_ENDPOINT"
258
+ },
259
+ auth: {
260
+ envVars: ["GOOGLE_GEMINI_CLI_OAUTH_TOKEN"],
261
+ header: "bearer"
262
+ },
263
+ requiredEnv: [
264
+ field("GOOGLE_GEMINI_CLI_OAUTH_TOKEN", "Google Gemini CLI OAuth token (use guided sign-in)", {
265
+ required: true,
266
+ secret: true
267
+ })
268
+ ],
269
+ modelEnvVar: "GOOGLE_GEMINI_CLI_MODEL",
270
+ stripProviderPrefix: true
271
+ },
272
+ {
273
+ id: "google-vertex",
274
+ displayName: "Google Vertex",
275
+ protocol: "openai-chat",
276
+ endpoint: {
277
+ baseUrlEnvVar: "GOOGLE_VERTEX_BASE_URL",
278
+ endpointPath: "/chat/completions",
279
+ endpointPathEnvVar: "GOOGLE_VERTEX_ENDPOINT_PATH",
280
+ endpointEnvVar: "GOOGLE_VERTEX_ENDPOINT"
281
+ },
282
+ auth: {
283
+ envVars: ["GOOGLE_VERTEX_ACCESS_TOKEN"],
284
+ header: "bearer"
285
+ },
286
+ requiredEnv: [
287
+ field("GOOGLE_VERTEX_BASE_URL", "Google Vertex OpenAI-compatible base URL", {
288
+ required: true
289
+ }),
290
+ field("GOOGLE_VERTEX_ACCESS_TOKEN", "Google Vertex access token", {
291
+ required: true,
292
+ secret: true
293
+ })
294
+ ],
295
+ modelEnvVar: "GOOGLE_VERTEX_MODEL",
296
+ stripProviderPrefix: true
297
+ },
298
+ {
299
+ id: "groq",
300
+ displayName: "Groq",
301
+ protocol: "openai-chat",
302
+ endpoint: {
303
+ baseUrl: "https://api.groq.com/openai/v1",
304
+ baseUrlEnvVar: "GROQ_BASE_URL",
305
+ endpointPath: "/chat/completions",
306
+ endpointPathEnvVar: "GROQ_ENDPOINT_PATH",
307
+ endpointEnvVar: "GROQ_ENDPOINT"
308
+ },
309
+ auth: {
310
+ envVars: ["GROQ_API_KEY"],
311
+ header: "bearer"
312
+ },
313
+ requiredEnv: [field("GROQ_API_KEY", "Groq API key", { required: true, secret: true })],
314
+ modelEnvVar: "GROQ_MODEL",
315
+ defaultModel: "llama-3.3-70b-versatile",
316
+ stripProviderPrefix: true
317
+ },
318
+ {
319
+ id: "huggingface",
320
+ displayName: "Hugging Face",
321
+ protocol: "openai-chat",
322
+ endpoint: {
323
+ baseUrl: "https://router.huggingface.co/v1",
324
+ baseUrlEnvVar: "HUGGINGFACE_BASE_URL",
325
+ endpointPath: "/chat/completions",
326
+ endpointPathEnvVar: "HUGGINGFACE_ENDPOINT_PATH",
327
+ endpointEnvVar: "HUGGINGFACE_ENDPOINT"
328
+ },
329
+ auth: {
330
+ envVars: ["HF_TOKEN"],
331
+ header: "bearer"
332
+ },
333
+ requiredEnv: [field("HF_TOKEN", "Hugging Face token", { required: true, secret: true })],
334
+ modelEnvVar: "HUGGINGFACE_MODEL",
335
+ stripProviderPrefix: true
336
+ },
337
+ {
338
+ id: "kimi-coding",
339
+ displayName: "Kimi Coding",
340
+ protocol: "openai-chat",
341
+ endpoint: {
342
+ baseUrl: "https://api.moonshot.ai/v1",
343
+ baseUrlEnvVar: "KIMI_CODING_BASE_URL",
344
+ endpointPath: "/chat/completions",
345
+ endpointPathEnvVar: "KIMI_CODING_ENDPOINT_PATH",
346
+ endpointEnvVar: "KIMI_CODING_ENDPOINT"
347
+ },
348
+ auth: {
349
+ envVars: ["KIMI_API_KEY", "KIMICODE_API_KEY"],
350
+ header: "bearer"
351
+ },
352
+ requiredEnv: [
353
+ field("KIMI_API_KEY", "Kimi Coding API key (or set KIMICODE_API_KEY)", {
354
+ required: true,
355
+ secret: true
356
+ })
357
+ ],
358
+ modelEnvVar: "KIMI_CODING_MODEL",
359
+ defaultModel: "k2p5",
360
+ stripProviderPrefix: true
361
+ },
362
+ {
363
+ id: "minimax",
364
+ displayName: "MiniMax",
365
+ protocol: "openai-chat",
366
+ endpoint: {
367
+ baseUrl: "https://api.minimax.chat/v1",
368
+ baseUrlEnvVar: "MINIMAX_BASE_URL",
369
+ endpointPath: "/chat/completions",
370
+ endpointPathEnvVar: "MINIMAX_ENDPOINT_PATH",
371
+ endpointEnvVar: "MINIMAX_ENDPOINT"
372
+ },
373
+ auth: {
374
+ envVars: ["MINIMAX_API_KEY"],
375
+ header: "bearer"
376
+ },
377
+ requiredEnv: [field("MINIMAX_API_KEY", "MiniMax API key", { required: true, secret: true })],
378
+ modelEnvVar: "MINIMAX_MODEL",
379
+ defaultModel: "MiniMax-M2.1",
380
+ stripProviderPrefix: true
381
+ },
382
+ {
383
+ id: "minimax-cn",
384
+ displayName: "MiniMax CN",
385
+ protocol: "openai-chat",
386
+ endpoint: {
387
+ baseUrl: "https://api.minimax.chat/v1",
388
+ baseUrlEnvVar: "MINIMAX_CN_BASE_URL",
389
+ endpointPath: "/chat/completions",
390
+ endpointPathEnvVar: "MINIMAX_CN_ENDPOINT_PATH",
391
+ endpointEnvVar: "MINIMAX_CN_ENDPOINT"
392
+ },
393
+ auth: {
394
+ envVars: ["MINIMAX_API_KEY"],
395
+ header: "bearer"
396
+ },
397
+ requiredEnv: [field("MINIMAX_API_KEY", "MiniMax API key", { required: true, secret: true })],
398
+ modelEnvVar: "MINIMAX_CN_MODEL",
399
+ defaultModel: "MiniMax-M2.1-lightning",
400
+ stripProviderPrefix: true
401
+ },
402
+ {
403
+ id: "minimax-portal",
404
+ displayName: "MiniMax Portal OAuth",
405
+ protocol: "anthropic-messages",
406
+ endpoint: {
407
+ baseUrl: "https://api.minimax.io/anthropic",
408
+ baseUrlEnvVar: "MINIMAX_PORTAL_BASE_URL",
409
+ endpointPath: "/v1/messages",
410
+ endpointPathEnvVar: "MINIMAX_PORTAL_ENDPOINT_PATH",
411
+ endpointEnvVar: "MINIMAX_PORTAL_ENDPOINT"
412
+ },
413
+ auth: {
414
+ envVars: ["MINIMAX_OAUTH_TOKEN", "MINIMAX_API_KEY"],
415
+ header: "x-api-key",
416
+ oauthTokenHeader: "bearer"
417
+ },
418
+ requiredEnv: [
419
+ field("MINIMAX_OAUTH_TOKEN", "MiniMax OAuth token (use guided sign-in, or set MINIMAX_API_KEY)", {
420
+ required: true,
421
+ secret: true
422
+ })
423
+ ],
424
+ modelEnvVar: "MINIMAX_PORTAL_MODEL",
425
+ defaultModel: "MiniMax-M2.1",
426
+ stripProviderPrefix: true,
427
+ fixedHeaders: {
428
+ "anthropic-version": "2023-06-01"
429
+ },
430
+ maxTokensEnvVar: "MINIMAX_PORTAL_MAX_TOKENS",
431
+ defaultMaxTokens: 4096
432
+ },
433
+ {
434
+ id: "mistral",
435
+ displayName: "Mistral",
436
+ protocol: "openai-chat",
437
+ endpoint: {
438
+ baseUrl: "https://api.mistral.ai/v1",
439
+ baseUrlEnvVar: "MISTRAL_BASE_URL",
440
+ endpointPath: "/chat/completions",
441
+ endpointPathEnvVar: "MISTRAL_ENDPOINT_PATH",
442
+ endpointEnvVar: "MISTRAL_ENDPOINT"
443
+ },
444
+ auth: {
445
+ envVars: ["MISTRAL_API_KEY"],
446
+ header: "bearer"
447
+ },
448
+ requiredEnv: [field("MISTRAL_API_KEY", "Mistral API key", { required: true, secret: true })],
449
+ modelEnvVar: "MISTRAL_MODEL",
450
+ defaultModel: "mistral-large-latest",
451
+ stripProviderPrefix: true
452
+ },
453
+ {
454
+ id: "moonshot",
455
+ displayName: "Moonshot",
456
+ protocol: "openai-chat",
457
+ endpoint: {
458
+ baseUrl: "https://api.moonshot.ai/v1",
459
+ baseUrlEnvVar: "MOONSHOT_BASE_URL",
460
+ endpointPath: "/chat/completions",
461
+ endpointPathEnvVar: "MOONSHOT_ENDPOINT_PATH",
462
+ endpointEnvVar: "MOONSHOT_ENDPOINT"
463
+ },
464
+ auth: {
465
+ envVars: ["MOONSHOT_API_KEY"],
466
+ header: "bearer"
467
+ },
468
+ requiredEnv: [field("MOONSHOT_API_KEY", "Moonshot API key", { required: true, secret: true })],
469
+ modelEnvVar: "MOONSHOT_MODEL",
470
+ defaultModel: "kimi-k2.5",
471
+ stripProviderPrefix: true
472
+ },
473
+ {
474
+ id: "ollama",
475
+ displayName: "Ollama",
476
+ protocol: "openai-chat",
477
+ endpoint: {
478
+ baseUrl: "http://127.0.0.1:11434/v1",
479
+ baseUrlEnvVar: "OLLAMA_BASE_URL",
480
+ endpointPath: "/chat/completions",
481
+ endpointPathEnvVar: "OLLAMA_ENDPOINT_PATH",
482
+ endpointEnvVar: "OLLAMA_ENDPOINT"
483
+ },
484
+ auth: {
485
+ envVars: ["OLLAMA_API_KEY"],
486
+ header: "bearer",
487
+ optional: true
488
+ },
489
+ requiredEnv: [],
490
+ modelEnvVar: "OLLAMA_MODEL",
491
+ defaultModel: "llama3.3",
492
+ stripProviderPrefix: true
493
+ },
494
+ {
495
+ id: "openai-codex",
496
+ displayName: "OpenAI Codex OAuth",
497
+ protocol: "openai-chat",
498
+ endpoint: {
499
+ baseUrl: "https://api.openai.com/v1",
500
+ baseUrlEnvVar: "OPENAI_CODEX_BASE_URL",
501
+ endpointPath: "/chat/completions",
502
+ endpointPathEnvVar: "OPENAI_CODEX_ENDPOINT_PATH",
503
+ endpointEnvVar: "OPENAI_CODEX_ENDPOINT"
504
+ },
505
+ auth: {
506
+ envVars: ["OPENAI_CODEX_OAUTH_TOKEN", "OPENAI_API_KEY"],
507
+ header: "bearer"
508
+ },
509
+ requiredEnv: [
510
+ field("OPENAI_CODEX_OAUTH_TOKEN", "OpenAI Codex OAuth token (or set OPENAI_API_KEY; API key recommended)", {
511
+ required: true,
512
+ secret: true
513
+ })
514
+ ],
515
+ modelEnvVar: "OPENAI_CODEX_MODEL",
516
+ defaultModel: "gpt-5.3-codex",
517
+ stripProviderPrefix: true
518
+ },
519
+ {
520
+ id: "opencode-zen",
521
+ displayName: "OpenCode Zen",
522
+ protocol: "openai-chat",
523
+ endpoint: {
524
+ baseUrl: "https://opencode.ai/zen/v1",
525
+ baseUrlEnvVar: "OPENCODE_ZEN_BASE_URL",
526
+ endpointPath: "/chat/completions",
527
+ endpointPathEnvVar: "OPENCODE_ZEN_ENDPOINT_PATH",
528
+ endpointEnvVar: "OPENCODE_ZEN_ENDPOINT"
529
+ },
530
+ auth: {
531
+ envVars: ["OPENCODE_API_KEY", "OPENCODE_ZEN_API_KEY"],
532
+ header: "bearer"
533
+ },
534
+ requiredEnv: [
535
+ field("OPENCODE_API_KEY", "OpenCode Zen API key (or set OPENCODE_ZEN_API_KEY)", {
536
+ required: true,
537
+ secret: true
538
+ })
539
+ ],
540
+ modelEnvVar: "OPENCODE_ZEN_MODEL",
541
+ defaultModel: "claude-opus-4-6",
542
+ stripProviderPrefix: true
543
+ },
544
+ {
545
+ id: "qianfan",
546
+ displayName: "Qianfan",
547
+ protocol: "openai-chat",
548
+ endpoint: {
549
+ baseUrl: "https://qianfan.baidubce.com/v2",
550
+ baseUrlEnvVar: "QIANFAN_BASE_URL",
551
+ endpointPath: "/chat/completions",
552
+ endpointPathEnvVar: "QIANFAN_ENDPOINT_PATH",
553
+ endpointEnvVar: "QIANFAN_ENDPOINT"
554
+ },
555
+ auth: {
556
+ envVars: ["QIANFAN_API_KEY"],
557
+ header: "bearer"
558
+ },
559
+ requiredEnv: [field("QIANFAN_API_KEY", "Qianfan API key", { required: true, secret: true })],
560
+ modelEnvVar: "QIANFAN_MODEL",
561
+ defaultModel: "deepseek-v3.2",
562
+ stripProviderPrefix: true
563
+ },
564
+ {
565
+ id: "qwen-portal",
566
+ displayName: "Qwen Portal OAuth",
567
+ protocol: "openai-chat",
568
+ endpoint: {
569
+ baseUrl: "https://portal.qwen.ai/v1",
570
+ baseUrlEnvVar: "QWEN_PORTAL_BASE_URL",
571
+ endpointPath: "/chat/completions",
572
+ endpointPathEnvVar: "QWEN_PORTAL_ENDPOINT_PATH",
573
+ endpointEnvVar: "QWEN_PORTAL_ENDPOINT"
574
+ },
575
+ auth: {
576
+ envVars: ["QWEN_OAUTH_TOKEN", "QWEN_PORTAL_API_KEY"],
577
+ header: "bearer"
578
+ },
579
+ requiredEnv: [
580
+ field("QWEN_OAUTH_TOKEN", "Qwen OAuth token (use guided sign-in, or set QWEN_PORTAL_API_KEY)", {
581
+ required: true,
582
+ secret: true
583
+ })
584
+ ],
585
+ modelEnvVar: "QWEN_PORTAL_MODEL",
586
+ defaultModel: "coder-model",
587
+ stripProviderPrefix: true
588
+ },
589
+ {
590
+ id: "synthetic",
591
+ displayName: "Synthetic",
592
+ protocol: "anthropic-messages",
593
+ endpoint: {
594
+ baseUrl: "https://api.synthetic.new/anthropic",
595
+ baseUrlEnvVar: "SYNTHETIC_BASE_URL",
596
+ endpointPath: "/v1/messages",
597
+ endpointPathEnvVar: "SYNTHETIC_ENDPOINT_PATH",
598
+ endpointEnvVar: "SYNTHETIC_ENDPOINT"
599
+ },
600
+ auth: {
601
+ envVars: ["SYNTHETIC_API_KEY"],
602
+ header: "x-api-key"
603
+ },
604
+ requiredEnv: [field("SYNTHETIC_API_KEY", "Synthetic API key", { required: true, secret: true })],
605
+ modelEnvVar: "SYNTHETIC_MODEL",
606
+ defaultModel: "hf:MiniMaxAI/MiniMax-M2.1",
607
+ stripProviderPrefix: true,
608
+ fixedHeaders: {
609
+ "anthropic-version": "2023-06-01"
610
+ },
611
+ maxTokensEnvVar: "SYNTHETIC_MAX_TOKENS",
612
+ defaultMaxTokens: 4096
613
+ },
614
+ {
615
+ id: "venice",
616
+ displayName: "Venice",
617
+ protocol: "openai-chat",
618
+ endpoint: {
619
+ baseUrl: "https://api.venice.ai/api/v1",
620
+ baseUrlEnvVar: "VENICE_BASE_URL",
621
+ endpointPath: "/chat/completions",
622
+ endpointPathEnvVar: "VENICE_ENDPOINT_PATH",
623
+ endpointEnvVar: "VENICE_ENDPOINT"
624
+ },
625
+ auth: {
626
+ envVars: ["VENICE_API_KEY"],
627
+ header: "bearer"
628
+ },
629
+ requiredEnv: [field("VENICE_API_KEY", "Venice API key", { required: true, secret: true })],
630
+ modelEnvVar: "VENICE_MODEL",
631
+ defaultModel: "llama-3.3-70b",
632
+ stripProviderPrefix: true
633
+ },
634
+ {
635
+ id: "vercel-ai-gateway",
636
+ displayName: "Vercel AI Gateway",
637
+ protocol: "openai-chat",
638
+ endpoint: {
639
+ baseUrl: "https://ai-gateway.vercel.sh/v1",
640
+ baseUrlEnvVar: "VERCEL_AI_GATEWAY_BASE_URL",
641
+ endpointPath: "/chat/completions",
642
+ endpointPathEnvVar: "VERCEL_AI_GATEWAY_ENDPOINT_PATH",
643
+ endpointEnvVar: "VERCEL_AI_GATEWAY_ENDPOINT"
644
+ },
645
+ auth: {
646
+ envVars: ["AI_GATEWAY_API_KEY"],
647
+ header: "bearer"
648
+ },
649
+ requiredEnv: [
650
+ field("AI_GATEWAY_API_KEY", "Vercel AI Gateway API key", {
651
+ required: true,
652
+ secret: true
653
+ })
654
+ ],
655
+ modelEnvVar: "AI_GATEWAY_MODEL",
656
+ defaultModel: "anthropic/claude-opus-4.6",
657
+ stripProviderPrefix: true
658
+ },
659
+ {
660
+ id: "xiaomi",
661
+ displayName: "Xiaomi",
662
+ protocol: "anthropic-messages",
663
+ endpoint: {
664
+ baseUrl: "https://api.xiaomimimo.com/anthropic",
665
+ baseUrlEnvVar: "XIAOMI_BASE_URL",
666
+ endpointPath: "/v1/messages",
667
+ endpointPathEnvVar: "XIAOMI_ENDPOINT_PATH",
668
+ endpointEnvVar: "XIAOMI_ENDPOINT"
669
+ },
670
+ auth: {
671
+ envVars: ["XIAOMI_API_KEY"],
672
+ header: "x-api-key"
673
+ },
674
+ requiredEnv: [field("XIAOMI_API_KEY", "Xiaomi API key", { required: true, secret: true })],
675
+ modelEnvVar: "XIAOMI_MODEL",
676
+ defaultModel: "mimo-v2-flash",
677
+ stripProviderPrefix: true,
678
+ fixedHeaders: {
679
+ "anthropic-version": "2023-06-01"
680
+ },
681
+ maxTokensEnvVar: "XIAOMI_MAX_TOKENS",
682
+ defaultMaxTokens: 4096
683
+ },
684
+ {
685
+ id: "zai",
686
+ displayName: "Z.AI",
687
+ protocol: "openai-chat",
688
+ endpoint: {
689
+ baseUrl: "https://api.z.ai/v1",
690
+ baseUrlEnvVar: "ZAI_BASE_URL",
691
+ endpointPath: "/chat/completions",
692
+ endpointPathEnvVar: "ZAI_ENDPOINT_PATH",
693
+ endpointEnvVar: "ZAI_ENDPOINT"
694
+ },
695
+ auth: {
696
+ envVars: ["ZAI_API_KEY", "Z_AI_API_KEY"],
697
+ header: "bearer"
698
+ },
699
+ requiredEnv: [
700
+ field("ZAI_API_KEY", "Z.AI API key (or set Z_AI_API_KEY)", {
701
+ required: true,
702
+ secret: true
703
+ })
704
+ ],
705
+ modelEnvVar: "ZAI_MODEL",
706
+ defaultModel: "glm-4.7",
707
+ stripProviderPrefix: true
708
+ }
709
+ ];
710
+ const modelEnvByProviderId = new Map(extendedHttpProviderCatalog.map((spec) => [spec.id, spec.modelEnvVar]));
711
+ export function resolveExtendedHttpProviderModelEnvVar(providerId) {
712
+ return modelEnvByProviderId.get(providerId.trim().toLowerCase());
713
+ }
714
+ export function resolveExtendedHttpProviderOnboarding(spec) {
715
+ const env = spec.requiredEnv.map((entry) => ({ ...entry }));
716
+ const hasRequiredModelField = env.some((fieldEntry) => fieldEntry.key === spec.modelEnvVar && Boolean(fieldEntry.required));
717
+ if (!spec.defaultModel && !hasRequiredModelField) {
718
+ env.push(field(spec.modelEnvVar, `Default model for ${spec.displayName}`, { required: true }));
719
+ }
720
+ return {
721
+ env,
722
+ auth: {
723
+ supported: false,
724
+ description: "Configure required credentials directly in provider settings."
725
+ }
726
+ };
727
+ }
728
+ //# sourceMappingURL=catalog.js.map