mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 13:21:25 +00:00
* feat: add LiteLLM provider types, env var, credentials, and auth choice Add litellm-api-key auth choice, LITELLM_API_KEY env var mapping, setLitellmApiKey() credential storage, and LITELLM_DEFAULT_MODEL_REF. * feat: add LiteLLM onboarding handler and provider config Add applyLitellmProviderConfig which properly registers models.providers.litellm with baseUrl, api type, and model definitions. This fixes the critical bug from PR #6488 where the provider entry was never created, causing model resolution to fail at runtime. * docs: add LiteLLM provider documentation Add setup guide covering onboarding, manual config, virtual keys, model routing, and usage tracking. Link from provider index. * docs: add LiteLLM to sidebar navigation in docs.json Add providers/litellm to both English and Chinese provider page lists so the docs page appears in the sidebar navigation. * test: add LiteLLM non-interactive onboarding test Wire up litellmApiKey flag inference and auth-choice handler for the non-interactive onboarding path, and add an integration test covering profile, model default, and credential storage. * fix: register --litellm-api-key CLI flag and add preferred provider mapping Wire up the missing Commander CLI option, action handler mapping, and help text for --litellm-api-key. Add litellm-api-key to the preferred provider map for consistency with other providers. * fix: remove zh-CN sidebar entry for litellm (no localized page yet) * style: format buildLitellmModelDefinition return type * fix(onboarding): harden LiteLLM provider setup (#12823) * refactor(onboarding): keep auth-choice provider dispatcher under size limit --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
130 lines
3.5 KiB
TypeScript
130 lines
3.5 KiB
TypeScript
import type { ChannelId } from "../channels/plugins/types.js";
|
|
import type { GatewayDaemonRuntime } from "./daemon-runtime.js";
|
|
|
|
export type OnboardMode = "local" | "remote";
|
|
export type AuthChoice =
|
|
// Legacy alias for `setup-token` (kept for backwards CLI compatibility).
|
|
| "oauth"
|
|
| "setup-token"
|
|
| "claude-cli"
|
|
| "token"
|
|
| "chutes"
|
|
| "openai-codex"
|
|
| "openai-api-key"
|
|
| "openrouter-api-key"
|
|
| "litellm-api-key"
|
|
| "ai-gateway-api-key"
|
|
| "cloudflare-ai-gateway-api-key"
|
|
| "moonshot-api-key"
|
|
| "moonshot-api-key-cn"
|
|
| "kimi-code-api-key"
|
|
| "synthetic-api-key"
|
|
| "venice-api-key"
|
|
| "together-api-key"
|
|
| "codex-cli"
|
|
| "apiKey"
|
|
| "gemini-api-key"
|
|
| "google-antigravity"
|
|
| "google-gemini-cli"
|
|
| "zai-api-key"
|
|
| "xiaomi-api-key"
|
|
| "minimax-cloud"
|
|
| "minimax"
|
|
| "minimax-api"
|
|
| "minimax-api-lightning"
|
|
| "minimax-portal"
|
|
| "opencode-zen"
|
|
| "github-copilot"
|
|
| "copilot-proxy"
|
|
| "qwen-portal"
|
|
| "xai-api-key"
|
|
| "qianfan-api-key"
|
|
| "custom-api-key"
|
|
| "skip";
|
|
export type AuthChoiceGroupId =
|
|
| "openai"
|
|
| "anthropic"
|
|
| "google"
|
|
| "copilot"
|
|
| "openrouter"
|
|
| "ai-gateway"
|
|
| "cloudflare-ai-gateway"
|
|
| "moonshot"
|
|
| "zai"
|
|
| "xiaomi"
|
|
| "opencode-zen"
|
|
| "minimax"
|
|
| "synthetic"
|
|
| "venice"
|
|
| "qwen"
|
|
| "qianfan"
|
|
| "xai"
|
|
| "custom";
|
|
export type GatewayAuthChoice = "token" | "password";
|
|
export type ResetScope = "config" | "config+creds+sessions" | "full";
|
|
export type GatewayBind = "loopback" | "lan" | "auto" | "custom" | "tailnet";
|
|
export type TailscaleMode = "off" | "serve" | "funnel";
|
|
export type NodeManagerChoice = "npm" | "pnpm" | "bun";
|
|
export type ChannelChoice = ChannelId;
|
|
// Legacy alias (pre-rename).
|
|
export type ProviderChoice = ChannelChoice;
|
|
|
|
export type OnboardOptions = {
|
|
mode?: OnboardMode;
|
|
/** "manual" is an alias for "advanced". */
|
|
flow?: "quickstart" | "advanced" | "manual";
|
|
workspace?: string;
|
|
nonInteractive?: boolean;
|
|
/** Required for non-interactive onboarding; skips the interactive risk prompt when true. */
|
|
acceptRisk?: boolean;
|
|
reset?: boolean;
|
|
authChoice?: AuthChoice;
|
|
/** Used when `authChoice=token` in non-interactive mode. */
|
|
tokenProvider?: string;
|
|
/** Used when `authChoice=token` in non-interactive mode. */
|
|
token?: string;
|
|
/** Used when `authChoice=token` in non-interactive mode. */
|
|
tokenProfileId?: string;
|
|
/** Used when `authChoice=token` in non-interactive mode. */
|
|
tokenExpiresIn?: string;
|
|
anthropicApiKey?: string;
|
|
openaiApiKey?: string;
|
|
openrouterApiKey?: string;
|
|
litellmApiKey?: string;
|
|
aiGatewayApiKey?: string;
|
|
cloudflareAiGatewayAccountId?: string;
|
|
cloudflareAiGatewayGatewayId?: string;
|
|
cloudflareAiGatewayApiKey?: string;
|
|
moonshotApiKey?: string;
|
|
kimiCodeApiKey?: string;
|
|
geminiApiKey?: string;
|
|
zaiApiKey?: string;
|
|
xiaomiApiKey?: string;
|
|
minimaxApiKey?: string;
|
|
syntheticApiKey?: string;
|
|
veniceApiKey?: string;
|
|
togetherApiKey?: string;
|
|
opencodeZenApiKey?: string;
|
|
xaiApiKey?: string;
|
|
qianfanApiKey?: string;
|
|
gatewayPort?: number;
|
|
gatewayBind?: GatewayBind;
|
|
gatewayAuth?: GatewayAuthChoice;
|
|
gatewayToken?: string;
|
|
gatewayPassword?: string;
|
|
tailscale?: TailscaleMode;
|
|
tailscaleResetOnExit?: boolean;
|
|
installDaemon?: boolean;
|
|
daemonRuntime?: GatewayDaemonRuntime;
|
|
skipChannels?: boolean;
|
|
/** @deprecated Legacy alias for `skipChannels`. */
|
|
skipProviders?: boolean;
|
|
skipSkills?: boolean;
|
|
skipHealth?: boolean;
|
|
skipUi?: boolean;
|
|
nodeManager?: NodeManagerChoice;
|
|
remoteUrl?: string;
|
|
remoteToken?: string;
|
|
json?: boolean;
|
|
};
|