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.
This commit is contained in:
Jason
2026-06-17 13:04:23 +08:00
parent 3d30dc03e8
commit dfa03b746a
8 changed files with 41 additions and 5 deletions
@@ -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 (
<button
@@ -397,10 +406,18 @@ export function ProviderPresetSelector({
<span className="truncate">
{getPresetDisplayName(entry.preset, t)}
</span>
{isPartner && (
<span className="absolute -top-1 -right-1 flex items-center gap-0.5 rounded-full bg-gradient-to-r from-amber-500 to-yellow-500 px-1.5 py-0.5 text-[10px] font-bold text-white shadow-md">
<Star className="h-2.5 w-2.5 fill-current" />
</span>
{isPrimePartner ? (
<Heart
className="absolute -top-1 -right-1 h-5 w-5 fill-amber-500 text-amber-500 drop-shadow-sm"
strokeWidth={0}
aria-hidden
/>
) : (
isPartner && (
<span className="absolute -top-1 -right-1 flex items-center gap-0.5 rounded-full bg-gradient-to-r from-amber-500 to-yellow-500 px-1.5 py-0.5 text-[10px] font-bold text-white shadow-md">
<Star className="h-2.5 w-2.5 fill-current" />
</span>
)
)}
</button>
);
@@ -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/",
+3
View File
@@ -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: {
+3
View File
@@ -19,6 +19,7 @@ export interface CodexProviderPreset {
config: string; // 将写入 ~/.codex/config.tomlTOML 字符串)
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(""),
+1
View File
@@ -23,6 +23,7 @@ export interface GeminiProviderPreset {
description?: string;
category?: ProviderCategory;
isPartner?: boolean;
primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形
partnerPromotionKey?: string;
endpointCandidates?: string[];
theme?: GeminiPresetTheme;
+3
View File
@@ -104,6 +104,7 @@ export interface HermesProviderPreset {
settingsConfig: HermesProviderSettingsConfig;
isOfficial?: boolean;
isPartner?: boolean;
primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形
partnerPromotionKey?: string;
category?: ProviderCategory;
templateValues?: Record<string, TemplateValueConfig>;
@@ -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",
+3
View File
@@ -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: {
+3
View File
@@ -9,6 +9,7 @@ export interface OpenCodeProviderPreset {
settingsConfig: OpenCodeProviderConfig;
isOfficial?: boolean;
isPartner?: boolean;
primePartner?: boolean; // 置顶合作伙伴(顶级):徽章显示为心形
partnerPromotionKey?: string;
category?: ProviderCategory;
templateValues?: Record<string, TemplateValueConfig>;
@@ -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: {