feat(kimi): merge OAuth into dual-auth provider, add K3/K2.7 models

Gộp kimi-coding vào kimi (oauth+apikey), parity CLIProxyAPI device flow/headers/refresh.
Thêm K3 + K2.7 Code (+ Kimi Code ids), pricing/caps vision, cập nhật baseline.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
decolua
2026-07-17 12:09:14 +07:00
co-authored by Cursor
parent bc252ea802
commit 68566f53dc
21 changed files with 332 additions and 228 deletions
@@ -154,6 +154,7 @@ export async function GET(request, { params }) {
const noPkceDeviceProviders = [
"github",
"kiro",
"kimi",
"kimi-coding",
"kilocode",
"codebuddy-cn",
@@ -279,10 +280,11 @@ export async function POST(request, { params }) {
}
// Providers that don't use PKCE for device code
const noPkceProviders = ["github", "kimi-coding", "kilocode", "codebuddy-cn"];
const noPkceProviders = ["github", "kimi", "kimi-coding", "kilocode", "codebuddy-cn"];
let result;
if (noPkceProviders.includes(provider)) {
result = await pollForToken(provider, deviceCode);
// kimi needs extraData._kimiDeviceId for stable X-Msh-Device-Id (CLIProxyAPI parity)
result = await pollForToken(provider, deviceCode, null, extraData);
} else if (provider === "kiro") {
// Kiro needs extraData (clientId, clientSecret) from device code response
result = await pollForToken(provider, deviceCode, null, extraData);
@@ -303,9 +305,10 @@ export async function POST(request, { params }) {
}
if (result.success) {
// Save to database
// Save to database (legacy kimi-coding OAuth → dual-auth kimi)
const providerId = provider === "kimi-coding" ? "kimi" : provider;
const connection = await createProviderConnection({
provider,
provider: providerId,
authType: "oauth",
...result.tokens,
expiresAt: result.tokens.expiresIn
+2 -1
View File
@@ -75,7 +75,8 @@ const OAUTH_TEST_CONFIG = {
authPrefix: "Bearer ",
refreshable: false,
},
"kimi-coding": { checkExpiry: true, refreshable: false },
kimi: { checkExpiry: true, refreshable: true },
"kimi-coding": { checkExpiry: true, refreshable: true },
cursor: { tokenExists: true },
kilocode: {
url: `${KILOCODE_CONFIG.apiBaseUrl}/api/profile`,