feat(provider): add CodeBuddy CN provider (copilot.tencent.com)

Add Tencent CodeBuddy CN (codebuddy-cn) OAuth provider with full support:
OAuth login (GET poll with state query param), token refresh, 15-model
catalog, /v2 inference endpoint, forced streaming, OpenAI-style reasoning,
and per-model capabilities. Renamed from codebuddy to codebuddy-cn to allow
a future codebuddy-ai variant.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Janu Yoga
2026-06-19 15:33:26 +07:00
committed by decolua
co-authored by Cursor
parent db4499d6df
commit efd20be8d8
18 changed files with 234 additions and 59 deletions
+2 -2
View File
@@ -105,7 +105,7 @@
"claude": "cc",
"cline": "cl",
"cloudflare-ai": "cloudflare-ai",
"codebuddy": "codebuddy",
"codebuddy-cn": "codebuddy-cn",
"codex": "cx",
"cohere": "cohere",
"commandcode": "commandcode",
@@ -231,4 +231,4 @@
"xiaomi-mimo",
"xiaomi-tokenplan"
]
}
}
+2 -2
View File
@@ -349,8 +349,8 @@
"baseUrl": "https://gitlab.com/api/v4/chat/completions",
"format": "openai"
},
"codebuddy": {
"baseUrl": "https://copilot.tencent.com/v1/chat/completions",
"codebuddy-cn": {
"baseUrl": "https://copilot.tencent.com/v2/chat/completions",
"format": "openai"
},
"opencode-go": {
@@ -287,21 +287,39 @@ exports[`GOLDEN buildHeaders (default executor providers) > cloudflare-ai → he
}
`;
exports[`GOLDEN buildHeaders (default executor providers) > codebuddy → headers (apiKey / oauth) 1`] = `
exports[`GOLDEN buildHeaders (default executor providers) > codebuddy-cn → headers (apiKey / oauth) 1`] = `
{
"apiKey": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json",
"User-Agent": "CLI/2.108.1 CodeBuddy/2.108.1",
"X-IDE-Name": "CLI",
"X-IDE-Type": "CLI",
"X-Product": "SaaS",
"x-codebuddy-request": "1",
"x-requested-with": "XMLHttpRequest",
},
"nonStream": {
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json",
"User-Agent": "CLI/2.108.1 CodeBuddy/2.108.1",
"X-IDE-Name": "CLI",
"X-IDE-Type": "CLI",
"X-Product": "SaaS",
"x-codebuddy-request": "1",
"x-requested-with": "XMLHttpRequest",
},
"oauth": {
"Accept": "text/event-stream",
"Authorization": "Bearer <TOK>",
"Content-Type": "application/json",
"User-Agent": "CLI/2.108.1 CodeBuddy/2.108.1",
"X-IDE-Name": "CLI",
"X-IDE-Type": "CLI",
"X-Product": "SaaS",
"x-codebuddy-request": "1",
"x-requested-with": "XMLHttpRequest",
},
}
`;
@@ -1001,10 +1019,10 @@ exports[`GOLDEN buildUrl (default executor providers) > cloudflare-ai → url (s
}
`;
exports[`GOLDEN buildUrl (default executor providers) > codebuddy → url (stream + non-stream) 1`] = `
exports[`GOLDEN buildUrl (default executor providers) > codebuddy-cn → url (stream + non-stream) 1`] = `
{
"nonStream": "https://copilot.tencent.com/v1/chat/completions",
"stream": "https://copilot.tencent.com/v1/chat/completions",
"nonStream": "https://copilot.tencent.com/v2/chat/completions",
"stream": "https://copilot.tencent.com/v2/chat/completions",
}
`;