From dfa03b746a0e697c7a3c466c3239da738d9675a3 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 17 Jun 2026 13:04:23 +0800 Subject: [PATCH] feat(providers): add prime-partner heart badge for Kimi presets Introduce an optional primePartner flag on all provider preset interfaces. Regular partners keep the gold star badge; prime partners render a solid gold heart (no badge frame). Mark the first-party Moonshot Kimi presets (Kimi / Kimi For Coding / Kimi K2.7 Code) across claude, codex, claude desktop, opencode, openclaw and hermes as prime partners. --- .../forms/ProviderPresetSelector.tsx | 27 +++++++++++++++---- src/config/claudeDesktopProviderPresets.ts | 3 +++ src/config/claudeProviderPresets.ts | 3 +++ src/config/codexProviderPresets.ts | 3 +++ src/config/geminiProviderPresets.ts | 1 + src/config/hermesProviderPresets.ts | 3 +++ src/config/openclawProviderPresets.ts | 3 +++ src/config/opencodeProviderPresets.ts | 3 +++ 8 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/components/providers/forms/ProviderPresetSelector.tsx b/src/components/providers/forms/ProviderPresetSelector.tsx index f283b4b05..da82dbbd4 100644 --- a/src/components/providers/forms/ProviderPresetSelector.tsx +++ b/src/components/providers/forms/ProviderPresetSelector.tsx @@ -4,7 +4,15 @@ import { FormLabel } from "@/components/ui/form"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { ClaudeIcon, CodexIcon, GeminiIcon } from "@/components/BrandIcons"; -import { ArrowUpAZ, Search, Zap, Star, Layers, Settings2 } from "lucide-react"; +import { + ArrowUpAZ, + Search, + Zap, + Star, + Heart, + Layers, + Settings2, +} from "lucide-react"; import type { ProviderPreset } from "@/config/claudeProviderPresets"; import type { CodexProviderPreset } from "@/config/codexProviderPresets"; import type { GeminiProviderPreset } from "@/config/geminiProviderPresets"; @@ -380,6 +388,7 @@ export function ProviderPresetSelector({ {visiblePresetEntries.map((entry) => { const isSelected = selectedPresetId === entry.id; const isPartner = entry.preset.isPartner; + const isPrimePartner = entry.preset.primePartner; const presetCategory = entry.preset.category ?? "others"; return ( ); diff --git a/src/config/claudeDesktopProviderPresets.ts b/src/config/claudeDesktopProviderPresets.ts index f13be211a..4b30595cd 100644 --- a/src/config/claudeDesktopProviderPresets.ts +++ b/src/config/claudeDesktopProviderPresets.ts @@ -47,6 +47,7 @@ export interface ClaudeDesktopProviderPreset { apiKeyUrl?: string; category?: ProviderCategory; isPartner?: boolean; + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; baseUrl: string; @@ -414,6 +415,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ }, { name: "Kimi", + primePartner: true, websiteUrl: "https://platform.moonshot.cn/console?aff=cc-switch", category: "cn_official", baseUrl: "https://api.moonshot.cn/anthropic", @@ -429,6 +431,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ }, { name: "Kimi For Coding", + primePartner: true, websiteUrl: "https://www.kimi.com/code/docs/?aff=cc-switch", category: "cn_official", baseUrl: "https://api.kimi.com/coding/", diff --git a/src/config/claudeProviderPresets.ts b/src/config/claudeProviderPresets.ts index 09ee68da1..1211577d4 100644 --- a/src/config/claudeProviderPresets.ts +++ b/src/config/claudeProviderPresets.ts @@ -31,6 +31,7 @@ export interface ProviderPreset { settingsConfig: object; isOfficial?: boolean; // 标识是否为官方预设 isPartner?: boolean; // 标识是否为商业合作伙伴 + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; // 合作伙伴促销信息的 i18n key category?: ProviderCategory; // 新增:分类 // 新增:指定该预设所使用的 API Key 字段名(默认 ANTHROPIC_AUTH_TOKEN) @@ -367,6 +368,7 @@ export const providerPresets: ProviderPreset[] = [ }, { name: "Kimi", + primePartner: true, websiteUrl: "https://platform.moonshot.cn/console?aff=cc-switch", settingsConfig: { env: { @@ -384,6 +386,7 @@ export const providerPresets: ProviderPreset[] = [ }, { name: "Kimi For Coding", + primePartner: true, websiteUrl: "https://www.kimi.com/code/docs/?aff=cc-switch", settingsConfig: { env: { diff --git a/src/config/codexProviderPresets.ts b/src/config/codexProviderPresets.ts index d36c40e9c..ae70a4cd9 100644 --- a/src/config/codexProviderPresets.ts +++ b/src/config/codexProviderPresets.ts @@ -19,6 +19,7 @@ export interface CodexProviderPreset { config: string; // 将写入 ~/.codex/config.toml(TOML 字符串) isOfficial?: boolean; // 标识是否为官方预设 isPartner?: boolean; // 标识是否为商业合作伙伴 + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; // 合作伙伴促销信息的 i18n key category?: ProviderCategory; // 新增:分类 isCustomTemplate?: boolean; // 标识是否为自定义模板 @@ -420,6 +421,7 @@ requires_openai_auth = true`, }, { name: "Kimi", + primePartner: true, websiteUrl: "https://platform.moonshot.cn/console?aff=cc-switch", apiKeyUrl: "https://platform.moonshot.cn/console/api-keys?aff=cc-switch", auth: generateThirdPartyAuth(""), @@ -450,6 +452,7 @@ requires_openai_auth = true`, }, { name: "Kimi For Coding", + primePartner: true, websiteUrl: "https://www.kimi.com/code/docs/", apiKeyUrl: "https://www.kimi.com/code/", auth: generateThirdPartyAuth(""), diff --git a/src/config/geminiProviderPresets.ts b/src/config/geminiProviderPresets.ts index 20bbec6dd..1f1fdb6cd 100644 --- a/src/config/geminiProviderPresets.ts +++ b/src/config/geminiProviderPresets.ts @@ -23,6 +23,7 @@ export interface GeminiProviderPreset { description?: string; category?: ProviderCategory; isPartner?: boolean; + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; endpointCandidates?: string[]; theme?: GeminiPresetTheme; diff --git a/src/config/hermesProviderPresets.ts b/src/config/hermesProviderPresets.ts index 21c728672..817998dbc 100644 --- a/src/config/hermesProviderPresets.ts +++ b/src/config/hermesProviderPresets.ts @@ -104,6 +104,7 @@ export interface HermesProviderPreset { settingsConfig: HermesProviderSettingsConfig; isOfficial?: boolean; isPartner?: boolean; + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; category?: ProviderCategory; templateValues?: Record; @@ -515,6 +516,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ }, { name: "Kimi", + primePartner: true, websiteUrl: "https://platform.moonshot.cn/console?aff=cc-switch", settingsConfig: { name: "kimi", @@ -532,6 +534,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ }, { name: "Kimi For Coding", + primePartner: true, websiteUrl: "https://www.kimi.com/code/docs/?aff=cc-switch", settingsConfig: { name: "kimi_coding", diff --git a/src/config/openclawProviderPresets.ts b/src/config/openclawProviderPresets.ts index 00ddbce85..d3d7f3262 100644 --- a/src/config/openclawProviderPresets.ts +++ b/src/config/openclawProviderPresets.ts @@ -26,6 +26,7 @@ export interface OpenClawProviderPreset { settingsConfig: OpenClawProviderConfig; isOfficial?: boolean; isPartner?: boolean; + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; category?: ProviderCategory; /** Template variable definitions */ @@ -491,6 +492,7 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, { name: "Kimi K2.7 Code", + primePartner: true, websiteUrl: "https://platform.moonshot.cn/console?aff=cc-switch", apiKeyUrl: "https://platform.moonshot.cn/console/api-keys", settingsConfig: { @@ -529,6 +531,7 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, { name: "Kimi For Coding", + primePartner: true, websiteUrl: "https://www.kimi.com/code/docs/?aff=cc-switch", apiKeyUrl: "https://platform.moonshot.cn/console/api-keys", settingsConfig: { diff --git a/src/config/opencodeProviderPresets.ts b/src/config/opencodeProviderPresets.ts index f69431c46..52df735ce 100644 --- a/src/config/opencodeProviderPresets.ts +++ b/src/config/opencodeProviderPresets.ts @@ -9,6 +9,7 @@ export interface OpenCodeProviderPreset { settingsConfig: OpenCodeProviderConfig; isOfficial?: boolean; isPartner?: boolean; + primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形 partnerPromotionKey?: string; category?: ProviderCategory; templateValues?: Record; @@ -589,6 +590,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ }, { name: "Kimi K2.7 Code", + primePartner: true, websiteUrl: "https://platform.moonshot.cn/console?aff=cc-switch", apiKeyUrl: "https://platform.moonshot.cn/console/api-keys?aff=cc-switch", settingsConfig: { @@ -622,6 +624,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ }, { name: "Kimi For Coding", + primePartner: true, websiteUrl: "https://www.kimi.com/code/docs/?aff=cc-switch", apiKeyUrl: "https://platform.moonshot.cn/console/api-keys?aff=cc-switch", settingsConfig: {