Cline (api.cline.bot) wraps non-stream chat completions in
{"success":true,"data":{...choices...}}, which both the dashboard model-test
ping and the proxy non-stream path read at top level, producing "Provider
returned no completion choices for this model" (#3644). Unwrap the envelope
before usage extraction and response translation; the error envelope
({"success":false,...}) never matches and passes through untouched.
Scoped through `transport.quirks.clineEnvelope` so only cline/clinepass opt
in — no other provider's response body is ever rewritten.
Also adds a live Cline catalog: `fetchClineRawModels()` is shared between
`resolveClineModels()` (full catalog, including free-tier ids such as
z-ai/glm-5.3-flash) and `resolveClinepassModels()` (cline-pass/* only), wired
into /v1/models, the per-provider models route, and the combo selector's
model picker with the static catalog kept as fallback.
Refreshes the dead api-airforce free models (anthropic/claude-3.7-sonnet,
moonshot/kimi-k2.6, google/gemini-2.5-flash) with the live gpt-oss-120b,
gpt-oss-20b and kimi-k2.7-code, plus passthroughModels, forceStream and a
suggested-models filter.
56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
export default {
|
|
id: "cline",
|
|
priority: 80,
|
|
alias: "cl",
|
|
uiAlias: "cl",
|
|
display: {
|
|
name: "Cline",
|
|
icon: "smart_toy",
|
|
color: "#5B9BD5",
|
|
textIcon: "CL",
|
|
website: "https://cline.bot",
|
|
notice: {
|
|
signupUrl: "https://cline.bot",
|
|
},
|
|
},
|
|
category: "oauth",
|
|
authModes: ["oauth"],
|
|
hasOAuth: true,
|
|
transport: {
|
|
baseUrl: "https://api.cline.bot/api/v1/chat/completions",
|
|
headers: {
|
|
"HTTP-Referer": "https://cline.bot",
|
|
"X-Title": "Cline",
|
|
},
|
|
// Non-stream chat completions come back wrapped in {"success":true,"data":{...}}
|
|
quirks: { clineEnvelope: true },
|
|
tokenUrl: "https://api.cline.bot/api/v1/auth/token",
|
|
refreshUrl: "https://api.cline.bot/api/v1/auth/refresh",
|
|
auth: {
|
|
combined: true,
|
|
header: "Authorization",
|
|
scheme: "bearer",
|
|
hooks: [
|
|
"clineHeaders",
|
|
],
|
|
},
|
|
},
|
|
models: [
|
|
{ id: "anthropic/claude-opus-4.7", name: "Claude Opus 4.7" },
|
|
{ id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
|
|
{ id: "anthropic/claude-opus-4.6", name: "Claude Opus 4.6" },
|
|
{ id: "openai/gpt-5.3-codex", name: "GPT-5.3 Codex" },
|
|
{ id: "openai/gpt-5.4", name: "GPT-5.4" },
|
|
{ id: "google/gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview" },
|
|
{ id: "google/gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview" },
|
|
{ id: "kwaipilot/kat-coder-pro", name: "KAT Coder Pro" },
|
|
],
|
|
oauth: {
|
|
appBaseUrl: "https://app.cline.bot",
|
|
apiBaseUrl: "https://api.cline.bot",
|
|
authorizeUrl: "https://api.cline.bot/api/v1/auth/authorize",
|
|
tokenExchangeUrl: "https://api.cline.bot/api/v1/auth/token",
|
|
refreshUrl: "https://api.cline.bot/api/v1/auth/refresh",
|
|
},
|
|
};
|