feat(website): 更新官网至 v0.7.12 并去 AI 味改版
- 版本号/下载链接模板化(VERSION 单点维护),changelog 增 v0.7.12 条目 - 数据修正:模型库 5910 → 7495 / 供应商 212,JSON-LD softwareVersion 同步 - 文案重写:清除一键/开箱即用/一目了然等八股措辞(中英 ~50 处), 改为具体可验证的说法;英文标题 sentence case - 视觉降 AI 感:删网格底纹与光晕、主色降饱和、Download 三等宽卡改 Windows 主推不对称布局、Privacy 改单面板、Features 双列错落 - gh-pages 已随本次改动重新部署
This commit is contained in:
1 parent
5138a295e0
commit
4de13ad353
12 files changed
+210
-193
No files matched your search
+10
-10
@@ -6,10 +6,10 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="theme-color" content="#efebe1" media="(prefers-color-scheme: light)" />
|
<meta name="theme-color" content="#efebe1" media="(prefers-color-scheme: light)" />
|
||||||
<meta name="theme-color" content="#231f1a" media="(prefers-color-scheme: dark)" />
|
<meta name="theme-color" content="#231f1a" media="(prefers-color-scheme: dark)" />
|
||||||
<title>Kimi Switch — 多 LLM 供应商统一管理 · 用量监控 · 账单一目了然</title>
|
<title>Kimi Switch — 多 LLM 供应商配置管理 · 用量与账单监控</title>
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="Kimi Switch / KimiCodeSwitch — Windows 桌面端多 LLM 供应商统一管理器,一键切换 Kimi / 智谱 GLM / MiniMax / DeepSeek / OpenRouter / 基元律动,用量账单实时监控,开源 MIT。"
|
content="Kimi Switch / KimiCodeSwitch — 桌面端 LLM 供应商配置管理器:22 个预设选好即写入 config.toml,用量与账单直读各厂商官方接口。Tauri + Rust,开源 MIT。"
|
||||||
/>
|
/>
|
||||||
<meta
|
<meta
|
||||||
name="keywords"
|
name="keywords"
|
||||||
@@ -18,20 +18,20 @@
|
|||||||
|
|
||||||
<!-- Open Graph -->
|
<!-- Open Graph -->
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:title" content="Kimi Switch — 多 LLM 供应商统一管理" />
|
<meta property="og:title" content="Kimi Switch — 多 LLM 供应商配置管理" />
|
||||||
<meta
|
<meta
|
||||||
property="og:description"
|
property="og:description"
|
||||||
content="一键切换 Kimi / 智谱 GLM / MiniMax / DeepSeek 等供应商,用量与账单一目了然,开源 MIT。"
|
content="把 Kimi Code 的供应商配置搬进图形界面:22 个预设、用量与账单直读官方接口,免费开源 MIT。"
|
||||||
/>
|
/>
|
||||||
<meta property="og:url" content="https://billowliu2.github.io/KimiSwitch/" />
|
<meta property="og:url" content="https://billowliu2.github.io/KimiSwitch/" />
|
||||||
<meta property="og:image" content="https://billowliu2.github.io/KimiSwitch/og.png" />
|
<meta property="og:image" content="https://billowliu2.github.io/KimiSwitch/og.png" />
|
||||||
|
|
||||||
<!-- Twitter -->
|
<!-- Twitter -->
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
<meta name="twitter:title" content="Kimi Switch — 多 LLM 供应商统一管理" />
|
<meta name="twitter:title" content="Kimi Switch — 多 LLM 供应商配置管理" />
|
||||||
<meta
|
<meta
|
||||||
name="twitter:description"
|
name="twitter:description"
|
||||||
content="一键切换 Kimi / 智谱 GLM / MiniMax / DeepSeek 等供应商,用量与账单一目了然,开源 MIT。"
|
content="把 Kimi Code 的供应商配置搬进图形界面:22 个预设、用量与账单直读官方接口,免费开源 MIT。"
|
||||||
/>
|
/>
|
||||||
<meta name="twitter:image" content="https://billowliu2.github.io/KimiSwitch/og.png" />
|
<meta name="twitter:image" content="https://billowliu2.github.io/KimiSwitch/og.png" />
|
||||||
|
|
||||||
@@ -49,10 +49,10 @@
|
|||||||
"alternateName": ["KimiSwitch", "KimiCodeSwitch", "Kimi Switch", "KimiCode Switch"],
|
"alternateName": ["KimiSwitch", "KimiCodeSwitch", "Kimi Switch", "KimiCode Switch"],
|
||||||
"url": "https://billowliu2.github.io/KimiSwitch/",
|
"url": "https://billowliu2.github.io/KimiSwitch/",
|
||||||
"applicationCategory": "DeveloperApplication",
|
"applicationCategory": "DeveloperApplication",
|
||||||
"operatingSystem": "Windows 10, Windows 11",
|
"operatingSystem": "Windows 10, Windows 11, macOS, Linux",
|
||||||
"softwareVersion": "0.6.7",
|
"softwareVersion": "0.7.12",
|
||||||
"dateModified": "2026-08-01",
|
"dateModified": "2026-09-03",
|
||||||
"description": "Windows 桌面端多 LLM 供应商统一管理器,一键切换 Kimi / 智谱 GLM / MiniMax / DeepSeek / OpenRouter / 基元律动,用量账单实时监控,开源 MIT。",
|
"description": "桌面端 LLM 供应商配置管理器:22 个预设选好即写入 config.toml,用量与账单直读各厂商官方接口。Tauri + Rust,开源 MIT。",
|
||||||
"downloadUrl": "https://github.com/billowliu2/KimiSwitch/releases",
|
"downloadUrl": "https://github.com/billowliu2/KimiSwitch/releases",
|
||||||
"softwareHelp": "https://github.com/billowliu2/KimiSwitch",
|
"softwareHelp": "https://github.com/billowliu2/KimiSwitch",
|
||||||
"license": "https://opensource.org/licenses/MIT",
|
"license": "https://opensource.org/licenses/MIT",
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ export default function Footer() {
|
|||||||
href={link.url}
|
href={link.url}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noreferrer"
|
rel="noreferrer"
|
||||||
className="group flex items-start gap-3 rounded-2xl border border-border bg-card p-4 transition-all duration-200 hover:-translate-y-0.5 hover:border-primary/40"
|
className="group flex items-start gap-3 rounded-xl border border-border bg-card p-4 transition-all duration-200 hover:-translate-y-0.5 hover:border-primary/40"
|
||||||
style={{ boxShadow: "var(--shadow-soft)" }}
|
style={{ boxShadow: "var(--shadow-soft)" }}
|
||||||
>
|
>
|
||||||
<div className="flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-xl border border-border bg-white">
|
<div className="flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-xl border border-border bg-white">
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ export default function Nav() {
|
|||||||
/>
|
/>
|
||||||
<span>Kimi Switch</span>
|
<span>Kimi Switch</span>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
<nav className="flex items-center gap-5 overflow-x-auto overflow-y-hidden text-sm text-muted-foreground [scrollbar-width:none] [&::-webkit-scrollbar]:hidden">
|
<nav
|
||||||
|
aria-label="Primary"
|
||||||
|
className="flex items-center gap-5 overflow-x-auto overflow-y-hidden text-sm text-muted-foreground [scrollbar-width:none] [&::-webkit-scrollbar]:hidden">
|
||||||
{links.map((l) => (
|
{links.map((l) => (
|
||||||
<NavLink
|
<NavLink
|
||||||
key={l.to}
|
key={l.to}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default function SectionShell({ id, title, subtitle, children }: SectionS
|
|||||||
ref={ref}
|
ref={ref}
|
||||||
id={id}
|
id={id}
|
||||||
aria-labelledby={`${id}-title`}
|
aria-labelledby={`${id}-title`}
|
||||||
className={`py-20 transition-all duration-700 ease-out ${
|
className={`pt-16 pb-20 transition-all duration-700 ease-out ${
|
||||||
inView
|
inView
|
||||||
? "motion-safe:opacity-100 motion-safe:translate-y-0"
|
? "motion-safe:opacity-100 motion-safe:translate-y-0"
|
||||||
: "motion-safe:opacity-0 motion-safe:translate-y-6"
|
: "motion-safe:opacity-0 motion-safe:translate-y-6"
|
||||||
@@ -30,7 +30,9 @@ export default function SectionShell({ id, title, subtitle, children }: SectionS
|
|||||||
{title}
|
{title}
|
||||||
</h2>
|
</h2>
|
||||||
{subtitle && (
|
{subtitle && (
|
||||||
<p className="mt-3 text-base leading-relaxed text-muted-foreground">{subtitle}</p>
|
<p className="mt-3 max-w-[68ch] text-base leading-relaxed text-muted-foreground">
|
||||||
|
{subtitle}
|
||||||
|
</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
+100
-78
@@ -16,43 +16,43 @@ const zh = {
|
|||||||
performance: "性能",
|
performance: "性能",
|
||||||
changelog: "更新日志",
|
changelog: "更新日志",
|
||||||
download: "下载",
|
download: "下载",
|
||||||
downloadBtn: "下载 v0.7.4",
|
downloadBtn: "下载 v0.7.12",
|
||||||
},
|
},
|
||||||
hero: {
|
hero: {
|
||||||
badge: "v0.7.4 · 开源 MIT · Windows / macOS / Linux",
|
badge: "v0.7.12 · 开源 MIT · Windows / macOS / Linux",
|
||||||
titleBefore: "统一管理你的",
|
titleBefore: "统一管理你的",
|
||||||
titleAccent: "AI 供应商",
|
titleAccent: "AI 供应商",
|
||||||
titleAfter: "",
|
titleAfter: "",
|
||||||
subtitle:
|
subtitle:
|
||||||
"一键切换 Kimi / 智谱 GLM / MiniMax / DeepSeek / OpenRouter / 基元律动,用量与账单一目了然。",
|
"Kimi Code 的供应商配置不用再手改 config.toml:22 个预设选好即写入(写入前自动备份),用量与账单直读各厂商官方接口。",
|
||||||
download: "免费下载",
|
download: "免费下载",
|
||||||
source: "查看源码",
|
source: "查看源码",
|
||||||
stats: [
|
stats: [
|
||||||
{ value: "22", label: "预设供应商" },
|
{ value: "22", label: "预设供应商" },
|
||||||
{ value: "5910", label: "模型价格库" },
|
{ value: "7495", label: "模型价格库" },
|
||||||
{ value: "100%", label: "开源免费" },
|
{ value: "MIT", label: "开源协议" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
features: {
|
features: {
|
||||||
title: "核心功能",
|
title: "核心功能",
|
||||||
subtitle: "从多供应商管理到用量监控,一站搞定。",
|
subtitle: "配置、切换、用量、账单、会话——都落在本机那份 ~/.kimi-code/config.toml 上。",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: "multi-provider",
|
id: "multi-provider",
|
||||||
title: "多供应商管理",
|
title: "多供应商管理",
|
||||||
desc: "Kimi / 智谱 GLM / MiniMax / DeepSeek / OpenRouter / 基元律动等 22 个预设,一键添加与切换。",
|
desc: "Kimi / 智谱 GLM / MiniMax / DeepSeek / OpenRouter / 基元律动等 22 个预设,Base URL 与模型映射已填好,选定即写入配置。",
|
||||||
img: "screenshots/preset-picker.png",
|
img: "screenshots/preset-picker.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "custom-provider",
|
id: "custom-provider",
|
||||||
title: "自定义供应商",
|
title: "自定义供应商",
|
||||||
desc: "自定义 Base URL / API Key / 模型映射,支持 JSON 高级编辑。",
|
desc: "Base URL、API Key、模型别名逐字段编辑,也可切到 JSON 页签直接改;配置里的未知字段原样保留。",
|
||||||
img: "screenshots/edit-provider-basic-managed.png",
|
img: "screenshots/edit-provider-basic-managed.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "usage",
|
id: "usage",
|
||||||
title: "用量与账单监控",
|
title: "用量与账单监控",
|
||||||
desc: "套餐类 5 小时 / 每周用量 + 按量余额,models.dev 真实价格计算成本,卡片直显。",
|
desc: "套餐的 5 小时 / 每周额度与按量余额直接显示在卡片上,成本按 models.dev 牌价折算。",
|
||||||
img: "screenshots/dashboard-light.png",
|
img: "screenshots/dashboard-light.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ const zh = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "kimi-auth",
|
id: "kimi-auth",
|
||||||
title: "Kimi 一键授权登录",
|
title: "Kimi 授权登录",
|
||||||
desc: "应用内置设备码授权(等同 kimi login),浏览器授权即用,15 分钟过期自动续期。",
|
desc: "应用内置设备码授权(等同 kimi login),浏览器授权即用,15 分钟过期自动续期。",
|
||||||
img: "screenshots/kimi-oauth-dialog.png",
|
img: "screenshots/kimi-oauth-dialog.png",
|
||||||
},
|
},
|
||||||
@@ -75,31 +75,31 @@ const zh = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "model-discovery",
|
id: "model-discovery",
|
||||||
title: "智能模型发现",
|
title: "模型自动发现",
|
||||||
desc: "模型能力 / 上下文大小自动从 models.dev 同步,构建时自动拉取,5910 模型覆盖。",
|
desc: "可用模型直接问供应商 API;显示名 / 上下文 / 能力取自 models.dev 快照(当前 7495 个模型、212 家供应商)。",
|
||||||
img: "screenshots/kimi-cli-select-model.png",
|
img: "screenshots/kimi-cli-select-model.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "auto-update",
|
id: "auto-update",
|
||||||
title: "自动更新",
|
title: "自动更新",
|
||||||
desc: "自动检测新版本,一键下载安装,始终保持最新。",
|
desc: "启动时和每 8 小时各查一次新版本(私有镜像优先、GitHub 兜底),应用内下载并引导安装。",
|
||||||
img: "screenshots/settings.png",
|
img: "screenshots/settings.png",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
showcase: {
|
showcase: {
|
||||||
title: "界面演示",
|
title: "界面演示",
|
||||||
subtitle: "真实界面截图,所见即所得。",
|
subtitle: "以下截图取自 v0.7.12 实机运行。",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
src: "screenshots/usage-config-page.png",
|
src: "screenshots/usage-config-page.png",
|
||||||
title: "配置用量查询",
|
title: "配置用量查询",
|
||||||
desc: "NewAPI 中转站模板、超时与自动刷新、测试查询一屏搞定",
|
desc: "NewAPI 中转站模板、超时与自动刷新、测试查询放在同一页",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/preset-picker.png",
|
src: "screenshots/preset-picker.png",
|
||||||
title: "预设供应商",
|
title: "预设供应商",
|
||||||
desc: "22 个预设开箱即用,一键添加常用厂商",
|
desc: "22 个预设,勾选即可添加常用厂商",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/kimi-oauth-dialog.png",
|
src: "screenshots/kimi-oauth-dialog.png",
|
||||||
@@ -125,7 +125,7 @@ const zh = {
|
|||||||
},
|
},
|
||||||
performance: {
|
performance: {
|
||||||
title: "轻量原生",
|
title: "轻量原生",
|
||||||
subtitle: "Tauri + Rust 内核,WebView2 前端,常驻托盘零负担。",
|
subtitle: "Tauri + Rust,复用系统 WebView2,不打包 Chromium。下面三项是空闲状态实测。",
|
||||||
metrics: [
|
metrics: [
|
||||||
{ target: 93, suffix: " MB", label: "Working Set", desc: "程序空闲态工作集内存" },
|
{ target: 93, suffix: " MB", label: "Working Set", desc: "程序空闲态工作集内存" },
|
||||||
{ target: 34, suffix: " MB", label: "Private WS", desc: "独占内存(WebView2 共享部分扣除)" },
|
{ target: 34, suffix: " MB", label: "Private WS", desc: "独占内存(WebView2 共享部分扣除)" },
|
||||||
@@ -140,6 +140,17 @@ const zh = {
|
|||||||
syncedNote: "数据已同步 GitHub Releases",
|
syncedNote: "数据已同步 GitHub Releases",
|
||||||
fallbackNote: "内置版本记录",
|
fallbackNote: "内置版本记录",
|
||||||
entries: [
|
entries: [
|
||||||
|
{
|
||||||
|
version: "v0.7.12",
|
||||||
|
date: "2026-09-03",
|
||||||
|
items: [
|
||||||
|
"适配 kimi-code 0.40.1:实验 flag 清单更新(新增 file_history / search_worker,secondary-model 默认开启)",
|
||||||
|
"flag 优先级语义修正:显式配置优先于总开关,总开关不再锁定全部实验开关",
|
||||||
|
"新增危险命令守卫开关:Auto 模式直接拒绝 rm -rf / shutdown 等危险命令,其它模式强制询问",
|
||||||
|
"修复 WebUI 首次打开慢时多次点击的竞态报错",
|
||||||
|
"models-dev 快照更新至 7495 模型 / 212 供应商",
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
version: "v0.7.4",
|
version: "v0.7.4",
|
||||||
date: "2026-08-09",
|
date: "2026-08-09",
|
||||||
@@ -170,7 +181,7 @@ const zh = {
|
|||||||
"兼容 kimi-code 0.33+(v2 引擎):循环控制改用新键 max_attempts_per_step,旧配置自动迁移",
|
"兼容 kimi-code 0.33+(v2 引擎):循环控制改用新键 max_attempts_per_step,旧配置自动迁移",
|
||||||
"models.dev 模型列表与价格数据同步更新",
|
"models.dev 模型列表与价格数据同步更新",
|
||||||
"官网企业版视觉升级;出品公司标识统一为 codingplan.site",
|
"官网企业版视觉升级;出品公司标识统一为 codingplan.site",
|
||||||
"macOS 安装优化:Release 附带 install-macos.sh 一键脚本,自动清除下载隔离,免去手动右键打开",
|
"macOS 安装优化:Release 附带 install-macos.sh,自动清除下载隔离,免去手动右键打开",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -201,7 +212,7 @@ const zh = {
|
|||||||
version: "v0.6.9",
|
version: "v0.6.9",
|
||||||
date: "2026-08-01",
|
date: "2026-08-01",
|
||||||
items: [
|
items: [
|
||||||
"最近请求新增缓存命中率列,每次请求命中一目了然",
|
"最近请求新增缓存命中率列,逐条请求的命中情况直接可见",
|
||||||
"中文模式费用按最新汇率换算人民币(¥)显示,英文模式保持美元",
|
"中文模式费用按最新汇率换算人民币(¥)显示,英文模式保持美元",
|
||||||
"仪表盘性能再优化:价格解析记忆化缓存,扫描从秒级降到百毫秒级;右上角新增加载耗时/数据量跟踪",
|
"仪表盘性能再优化:价格解析记忆化缓存,扫描从秒级降到百毫秒级;右上角新增加载耗时/数据量跟踪",
|
||||||
],
|
],
|
||||||
@@ -229,7 +240,7 @@ const zh = {
|
|||||||
version: "v0.6.6",
|
version: "v0.6.6",
|
||||||
date: "2026-08-01",
|
date: "2026-08-01",
|
||||||
items: [
|
items: [
|
||||||
"模型价格对标 models.dev,覆盖 5910 个模型",
|
"模型价格数据对标 models.dev,快照随版本更新",
|
||||||
"新增基元律动供应商与推荐链接",
|
"新增基元律动供应商与推荐链接",
|
||||||
"设置页文案与参考来源说明优化",
|
"设置页文案与参考来源说明优化",
|
||||||
],
|
],
|
||||||
@@ -311,34 +322,34 @@ const zh = {
|
|||||||
},
|
},
|
||||||
download: {
|
download: {
|
||||||
title: "下载 Kimi Switch",
|
title: "下载 Kimi Switch",
|
||||||
subtitle: "当前版本 v0.7.4 · Windows / macOS / Linux 三平台已发布",
|
subtitle: "当前版本 v0.7.12 · Windows / macOS / Linux 三平台已发布",
|
||||||
autoUpdate: "应用内置自动检测更新,新版本发布后在设置页一键升级。",
|
autoUpdate: "更新检查跑在启动时和每 8 小时的周期任务里,设置页也可以手动触发。",
|
||||||
ready: "已发布",
|
ready: "已发布",
|
||||||
wip: "开发中",
|
wip: "开发中",
|
||||||
githubBtn: "GitHub 下载",
|
githubBtn: "GitHub 下载",
|
||||||
mirrorBtn: "镜像下载",
|
mirrorBtn: "镜像下载",
|
||||||
items: [
|
items: [
|
||||||
{ id: "windows", name: "Windows", ready: true, note: ".msi 安装包,系统托盘常驻" },
|
{ id: "windows", name: "Windows", ready: true, note: ".msi 安装包,系统托盘常驻" },
|
||||||
{ id: "macos", name: "macOS", ready: true, note: ".dmg 安装包(Apple Silicon),未签名:下载 install-macos.sh 后运行 bash install-macos.sh 一键安装" },
|
{ id: "macos", name: "macOS", ready: true, note: ".dmg 安装包(Apple Silicon),未签名:下载 Release 附带的 install-macos.sh,运行 bash install-macos.sh 清除隔离属性" },
|
||||||
{ id: "linux", name: "Linux", ready: true, note: ".deb / .AppImage / .rpm 三格式" },
|
{ id: "linux", name: "Linux", ready: true, note: ".deb / .AppImage / .rpm 三格式" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
cta: {
|
cta: {
|
||||||
title: "现在就把所有供应商,放进一个应用",
|
title: "把供应商配置、用量和账单收进一个窗口",
|
||||||
subtitle: "免费 · 开源 MIT · 一分钟完成安装",
|
subtitle: "免费 · MIT 开源 · Windows / macOS / Linux",
|
||||||
download: "免费下载",
|
download: "免费下载",
|
||||||
source: "GitHub 源码",
|
source: "GitHub 源码",
|
||||||
},
|
},
|
||||||
seo: {
|
seo: {
|
||||||
home: {
|
home: {
|
||||||
title: "Kimi Switch — 多 LLM 供应商统一管理 · 用量监控 · 账单一目了然",
|
title: "Kimi Switch — 多 LLM 供应商配置管理 · 用量与账单监控",
|
||||||
description:
|
description:
|
||||||
"Kimi Switch / KimiCodeSwitch — Windows 桌面端多 LLM 供应商统一管理器,一键切换 Kimi / 智谱 GLM / MiniMax / DeepSeek / OpenRouter / 基元律动,用量账单实时监控,开源 MIT。",
|
"Kimi Switch / KimiCodeSwitch — 桌面端 LLM 供应商配置管理器:22 个预设选好即写入 config.toml,用量与账单直读各厂商官方接口。Tauri + Rust,开源 MIT。",
|
||||||
},
|
},
|
||||||
features: {
|
features: {
|
||||||
title: "核心功能 - Kimi Switch",
|
title: "核心功能 - Kimi Switch",
|
||||||
description:
|
description:
|
||||||
"Kimi Switch 核心功能:多供应商管理、用量与账单监控、Kimi 一键授权登录、智能模型发现与自动更新,22 个预设开箱即用。",
|
"Kimi Switch 功能页:多供应商预设与自定义配置、用量与账单监控、Kimi 设备码授权、模型自动发现与周期更新检查。",
|
||||||
},
|
},
|
||||||
changelog: {
|
changelog: {
|
||||||
title: "更新日志 - Kimi Switch",
|
title: "更新日志 - Kimi Switch",
|
||||||
@@ -380,116 +391,116 @@ const en: Dict = {
|
|||||||
performance: "Performance",
|
performance: "Performance",
|
||||||
changelog: "Changelog",
|
changelog: "Changelog",
|
||||||
download: "Download",
|
download: "Download",
|
||||||
downloadBtn: "Download v0.7.4",
|
downloadBtn: "Download v0.7.12",
|
||||||
},
|
},
|
||||||
hero: {
|
hero: {
|
||||||
badge: "v0.7.4 · Open source MIT · Windows / macOS / Linux",
|
badge: "v0.7.12 · Open source MIT · Windows / macOS / Linux",
|
||||||
titleBefore: "One app for all your ",
|
titleBefore: "One app for all your ",
|
||||||
titleAccent: "AI providers",
|
titleAccent: "AI providers",
|
||||||
titleAfter: "",
|
titleAfter: "",
|
||||||
subtitle:
|
subtitle:
|
||||||
"Switch between Kimi, Zhipu GLM, MiniMax, DeepSeek, OpenRouter and TokenRhythm in one click, with usage and billing at a glance.",
|
"Stop hand-editing ~/.kimi-code/config.toml. Pick one of 22 provider presets and it goes straight into your config (backed up first); usage and billing read from each vendor's own API.",
|
||||||
download: "Free Download",
|
download: "Free Download",
|
||||||
source: "View Source",
|
source: "View source",
|
||||||
stats: [
|
stats: [
|
||||||
{ value: "22", label: "Provider presets" },
|
{ value: "22", label: "Provider presets" },
|
||||||
{ value: "5910", label: "Model price DB" },
|
{ value: "7495", label: "Model price DB" },
|
||||||
{ value: "100%", label: "Open source" },
|
{ value: "MIT", label: "License" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
features: {
|
features: {
|
||||||
title: "Core Features",
|
title: "Core features",
|
||||||
subtitle: "From multi-provider management to usage monitoring, all in one place.",
|
subtitle: "Configuration, switching, usage, billing and sessions — all against the config.toml on your machine.",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: "multi-provider",
|
id: "multi-provider",
|
||||||
title: "Multi-Provider Management",
|
title: "Provider presets",
|
||||||
desc: "22 presets including Kimi, Zhipu GLM, MiniMax, DeepSeek, OpenRouter and TokenRhythm. Add and switch in one click.",
|
desc: "22 presets — Kimi, Zhipu GLM, MiniMax, DeepSeek, OpenRouter, TokenRhythm and more — ship with Base URL and model mapping filled in; picking one writes it to your config.",
|
||||||
img: "screenshots/preset-picker.png",
|
img: "screenshots/preset-picker.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "custom-provider",
|
id: "custom-provider",
|
||||||
title: "Custom Providers",
|
title: "Custom providers",
|
||||||
desc: "Custom Base URL, API Key and model mapping, with advanced JSON editing.",
|
desc: "Edit Base URL, API key and model aliases field by field, or switch to the raw JSON tab; unknown fields are passed through untouched.",
|
||||||
img: "screenshots/edit-provider-basic-managed.png",
|
img: "screenshots/edit-provider-basic-managed.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "usage",
|
id: "usage",
|
||||||
title: "Usage & Billing",
|
title: "Usage & billing",
|
||||||
desc: "5-hour / weekly plan quotas plus pay-as-you-go balance, priced with real models.dev rates and shown on cards.",
|
desc: "5-hour / weekly plan quotas and pay-as-you-go balance shown directly on cards, with costs computed at models.dev list prices.",
|
||||||
img: "screenshots/dashboard-light.png",
|
img: "screenshots/dashboard-light.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "sessions",
|
id: "sessions",
|
||||||
title: "Session Manager",
|
title: "Session manager",
|
||||||
desc: "Browse, search and resume past sessions across providers.",
|
desc: "Browse, search and resume past sessions across providers.",
|
||||||
img: "screenshots/sessions-light.png",
|
img: "screenshots/sessions-light.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "kimi-auth",
|
id: "kimi-auth",
|
||||||
title: "One-Click Kimi Login",
|
title: "Kimi device-code login",
|
||||||
desc: "Built-in device-code authorization (same as kimi login). Authorize in the browser; 15-minute expiry auto-renews.",
|
desc: "Built-in device-code authorization (same as kimi login). Authorize in the browser; 15-minute expiry auto-renews.",
|
||||||
img: "screenshots/kimi-oauth-dialog.png",
|
img: "screenshots/kimi-oauth-dialog.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "usage-config",
|
id: "usage-config",
|
||||||
title: "Usage Query Setup",
|
title: "Usage query setup",
|
||||||
desc: "Full-page config: NewAPI relay templates, timeout, auto-refresh interval, and a test query.",
|
desc: "Full-page config: NewAPI relay templates, timeout, auto-refresh interval, and a test query.",
|
||||||
img: "screenshots/usage-config-page.png",
|
img: "screenshots/usage-config-page.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "model-discovery",
|
id: "model-discovery",
|
||||||
title: "Smart Model Discovery",
|
title: "Model discovery",
|
||||||
desc: "Model capabilities and context sizes sync from models.dev at build time, covering 5910 models.",
|
desc: "Model lists are fetched from the provider API itself; display names, context sizes and capabilities come from a build-time models.dev snapshot (7495 models, 212 providers).",
|
||||||
img: "screenshots/kimi-cli-select-model.png",
|
img: "screenshots/kimi-cli-select-model.png",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "auto-update",
|
id: "auto-update",
|
||||||
title: "Auto Updates",
|
title: "Auto updates",
|
||||||
desc: "Automatically detects new versions and installs them in one click.",
|
desc: "Checks at startup and every 8 hours (private mirror first, GitHub fallback), downloads in-app and walks you through install.",
|
||||||
img: "screenshots/settings.png",
|
img: "screenshots/settings.png",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
showcase: {
|
showcase: {
|
||||||
title: "Screenshots",
|
title: "Screenshots",
|
||||||
subtitle: "Real screenshots from the app. What you see is what you get.",
|
subtitle: "All screenshots below are taken from the running v0.7.12 build.",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
src: "screenshots/usage-config-page.png",
|
src: "screenshots/usage-config-page.png",
|
||||||
title: "Usage Query Setup",
|
title: "Usage query setup",
|
||||||
desc: "NewAPI relay templates, timeout and auto-refresh, plus a test query, all on one page",
|
desc: "NewAPI relay templates, timeout and auto-refresh, plus a test query, all on one page",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/preset-picker.png",
|
src: "screenshots/preset-picker.png",
|
||||||
title: "Provider Presets",
|
title: "Provider presets",
|
||||||
desc: "22 presets ready out of the box, add popular vendors in one click",
|
desc: "Tick through 22 presets to add popular vendors",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/kimi-oauth-dialog.png",
|
src: "screenshots/kimi-oauth-dialog.png",
|
||||||
title: "Kimi Authorization",
|
title: "Kimi authorization",
|
||||||
desc: "Device-code flow identical to kimi login, auto-renews on expiry",
|
desc: "Device-code flow identical to kimi login, auto-renews on expiry",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/dashboard-daily-detail.png",
|
src: "screenshots/dashboard-daily-detail.png",
|
||||||
title: "Usage Details",
|
title: "Usage details",
|
||||||
desc: "Daily token and cost trends",
|
desc: "Daily token and cost trends",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/sessions-light.png",
|
src: "screenshots/sessions-light.png",
|
||||||
title: "Session Manager",
|
title: "Session manager",
|
||||||
desc: "Browse and resume past sessions across providers",
|
desc: "Browse and resume past sessions across providers",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: "screenshots/kimi-plan-quota-card.png",
|
src: "screenshots/kimi-plan-quota-card.png",
|
||||||
title: "Plan Quota Card",
|
title: "Plan quota card",
|
||||||
desc: "5-hour / weekly quotas at a glance",
|
desc: "5-hour / weekly quotas read straight off the card",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
performance: {
|
performance: {
|
||||||
title: "Lightweight & Native",
|
title: "Lightweight and native",
|
||||||
subtitle: "Tauri + Rust core with a WebView2 frontend. Zero tray overhead.",
|
subtitle: "Tauri + Rust on the system WebView2 — no bundled Chromium. The three numbers below are idle-state measurements.",
|
||||||
metrics: [
|
metrics: [
|
||||||
{ target: 93, suffix: " MB", label: "Working Set", desc: "Idle working-set memory" },
|
{ target: 93, suffix: " MB", label: "Working Set", desc: "Idle working-set memory" },
|
||||||
{ target: 34, suffix: " MB", label: "Private WS", desc: "Private memory (shared WebView2 excluded)" },
|
{ target: 34, suffix: " MB", label: "Private WS", desc: "Private memory (shared WebView2 excluded)" },
|
||||||
@@ -504,6 +515,17 @@ const en: Dict = {
|
|||||||
syncedNote: "Synced from GitHub Releases",
|
syncedNote: "Synced from GitHub Releases",
|
||||||
fallbackNote: "Built-in release notes",
|
fallbackNote: "Built-in release notes",
|
||||||
entries: [
|
entries: [
|
||||||
|
{
|
||||||
|
version: "v0.7.12",
|
||||||
|
date: "2026-09-03",
|
||||||
|
items: [
|
||||||
|
"Adapted to kimi-code 0.40.1: experimental flag list updated (adds file_history / search_worker; secondary-model now on by default)",
|
||||||
|
"Flag priority semantics fixed: explicit configuration takes precedence over the master toggle, which no longer locks every switch",
|
||||||
|
"New dangerous-command guard toggle: Auto mode rejects rm -rf / shutdown outright, other modes force a confirmation prompt",
|
||||||
|
"Fix race-condition errors when clicking repeatedly while the WebUI is slow to open for the first time",
|
||||||
|
"models-dev snapshot updated to 7495 models / 212 providers",
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
version: "v0.7.4",
|
version: "v0.7.4",
|
||||||
date: "2026-08-09",
|
date: "2026-08-09",
|
||||||
@@ -534,7 +556,7 @@ const en: Dict = {
|
|||||||
"Compatible with kimi-code 0.33+ (v2 engine): loop control now writes max_attempts_per_step with auto-migration",
|
"Compatible with kimi-code 0.33+ (v2 engine): loop control now writes max_attempts_per_step with auto-migration",
|
||||||
"models.dev model list and pricing snapshot synced",
|
"models.dev model list and pricing snapshot synced",
|
||||||
"Enterprise-style website refresh; publisher identity unified as codingplan.site",
|
"Enterprise-style website refresh; publisher identity unified as codingplan.site",
|
||||||
"macOS install polish: releases now ship install-macos.sh, a one-click script that clears the download quarantine",
|
"macOS install polish: releases now ship install-macos.sh, which clears the download quarantine for you",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -565,7 +587,7 @@ const en: Dict = {
|
|||||||
version: "v0.6.9",
|
version: "v0.6.9",
|
||||||
date: "2026-08-01",
|
date: "2026-08-01",
|
||||||
items: [
|
items: [
|
||||||
"Recent requests gain a cache-hit-rate column, per request at a glance",
|
"Recent requests gain a cache-hit-rate column, shown per request",
|
||||||
"Chinese UI now shows costs in CNY (latest exchange rate); English keeps USD",
|
"Chinese UI now shows costs in CNY (latest exchange rate); English keeps USD",
|
||||||
"Dashboard speedup: memoized price resolution drops the scan from seconds to milliseconds; load time / payload tracking in the top-right corner",
|
"Dashboard speedup: memoized price resolution drops the scan from seconds to milliseconds; load time / payload tracking in the top-right corner",
|
||||||
],
|
],
|
||||||
@@ -592,7 +614,7 @@ const en: Dict = {
|
|||||||
version: "v0.6.6",
|
version: "v0.6.6",
|
||||||
date: "2026-08-01",
|
date: "2026-08-01",
|
||||||
items: [
|
items: [
|
||||||
"Model pricing aligned with models.dev, covering 5910 models",
|
"Model pricing data aligned with models.dev, snapshot refreshed per release",
|
||||||
"New TokenRhythm provider with referral link",
|
"New TokenRhythm provider with referral link",
|
||||||
"Settings copy and source attribution polish",
|
"Settings copy and source attribution polish",
|
||||||
],
|
],
|
||||||
@@ -652,56 +674,56 @@ const en: Dict = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
privacy: {
|
privacy: {
|
||||||
title: "Your Data Stays on Your Machine",
|
title: "Your data stays on your machine",
|
||||||
subtitle: "Our privacy and open-source commitments in three sentences.",
|
subtitle: "Our privacy and open-source commitments in three sentences.",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: "local",
|
id: "local",
|
||||||
title: "Local Storage",
|
title: "Local storage",
|
||||||
desc: "Configs and usage data live only in ~/.kimi-switch and config.toml. Nothing is uploaded.",
|
desc: "Configs and usage data live only in ~/.kimi-switch and config.toml. Nothing is uploaded.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "direct",
|
id: "direct",
|
||||||
title: "Direct Connections",
|
title: "Direct connections",
|
||||||
desc: "Billing queries go straight to each vendor's official API. No middlemen, no tracking.",
|
desc: "Billing queries go straight to each vendor's official API. No middlemen, no tracking.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "open",
|
id: "open",
|
||||||
title: "Open & Auditable",
|
title: "Open & auditable",
|
||||||
desc: "Fully open source under MIT on GitHub. Reviews and contributions welcome.",
|
desc: "Fully open source under MIT on GitHub. Reviews and contributions welcome.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
download: {
|
download: {
|
||||||
title: "Download Kimi Switch",
|
title: "Download Kimi Switch",
|
||||||
subtitle: "Current version v0.7.4 · Windows, macOS and Linux now released",
|
subtitle: "Current version v0.7.12 · Windows, macOS and Linux now released",
|
||||||
autoUpdate: "Built-in update detection: upgrade in one click from Settings when a new version ships.",
|
autoUpdate: "Update checks run at startup and every 8 hours; Settings also has a manual check.",
|
||||||
ready: "Available",
|
ready: "Available",
|
||||||
wip: "In development",
|
wip: "In development",
|
||||||
githubBtn: "Download from GitHub",
|
githubBtn: "Download from GitHub",
|
||||||
mirrorBtn: "China mirror",
|
mirrorBtn: "China mirror",
|
||||||
items: [
|
items: [
|
||||||
{ id: "windows", name: "Windows", ready: true, note: ".msi installer, lives in the system tray" },
|
{ id: "windows", name: "Windows", ready: true, note: ".msi installer, lives in the system tray" },
|
||||||
{ id: "macos", name: "macOS", ready: true, note: ".dmg installer (Apple Silicon), unsigned: download install-macos.sh and run bash install-macos.sh for one-click install" },
|
{ id: "macos", name: "macOS", ready: true, note: ".dmg installer (Apple Silicon); unsigned — grab install-macos.sh from the release and run bash install-macos.sh to clear the quarantine flag" },
|
||||||
{ id: "linux", name: "Linux", ready: true, note: ".deb / .AppImage / .rpm" },
|
{ id: "linux", name: "Linux", ready: true, note: ".deb / .AppImage / .rpm" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
cta: {
|
cta: {
|
||||||
title: "Bring every provider into one app",
|
title: "Put provider config, usage and billing in one window",
|
||||||
subtitle: "Free · Open source MIT · One-minute install",
|
subtitle: "Free · MIT licensed · Windows / macOS / Linux",
|
||||||
download: "Free Download",
|
download: "Free Download",
|
||||||
source: "GitHub Source",
|
source: "GitHub source",
|
||||||
},
|
},
|
||||||
seo: {
|
seo: {
|
||||||
home: {
|
home: {
|
||||||
title: "Kimi Switch — Unified Management for AI Providers · Usage & Billing",
|
title: "Kimi Switch — LLM provider config, usage and billing in one app",
|
||||||
description:
|
description:
|
||||||
"Kimi Switch / KimiCodeSwitch — a Windows desktop manager for multiple LLM providers. Switch between Kimi, Zhipu GLM, MiniMax, DeepSeek, OpenRouter and TokenRhythm in one click, with usage and billing at a glance. Open source MIT.",
|
"Kimi Switch / KimiCodeSwitch — a desktop manager for LLM provider configuration. 22 presets write straight into ~/.kimi-code/config.toml; usage and billing read from each vendor's own API. Open source MIT.",
|
||||||
},
|
},
|
||||||
features: {
|
features: {
|
||||||
title: "Core Features - Kimi Switch",
|
title: "Core features - Kimi Switch",
|
||||||
description:
|
description:
|
||||||
"Kimi Switch core features: multi-provider management, usage & billing, one-click Kimi login, smart model discovery and auto updates. 22 presets out of the box.",
|
"Kimi Switch features: provider presets and custom config, usage & billing, Kimi device-code login, model discovery and periodic update checks.",
|
||||||
},
|
},
|
||||||
changelog: {
|
changelog: {
|
||||||
title: "Changelog - Kimi Switch",
|
title: "Changelog - Kimi Switch",
|
||||||
@@ -715,7 +737,7 @@ const en: Dict = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
recommend: "Recommended Providers",
|
recommend: "Recommended providers",
|
||||||
mirror: "China mirror",
|
mirror: "China mirror",
|
||||||
downloads: "Total GitHub downloads: {n}",
|
downloads: "Total GitHub downloads: {n}",
|
||||||
creditBefore: "Dashboard & session management adapted from ",
|
creditBefore: "Dashboard & session management adapted from ",
|
||||||
|
|||||||
+10
-33
@@ -23,9 +23,9 @@
|
|||||||
--accent: 240 6% 94%;
|
--accent: 240 6% 94%;
|
||||||
--accent-foreground: 240 9% 11%;
|
--accent-foreground: 240 9% 11%;
|
||||||
--border: 240 6% 90%;
|
--border: 240 6% 90%;
|
||||||
--primary: 221 83% 53%;
|
--primary: 221 74% 50%;
|
||||||
--primary-foreground: 0 0% 100%;
|
--primary-foreground: 0 0% 100%;
|
||||||
--ring: 221 83% 53%;
|
--ring: 221 74% 50%;
|
||||||
/* 克制分层阴影(色相一致的 tinted shadow,非荧光发光) */
|
/* 克制分层阴影(色相一致的 tinted shadow,非荧光发光) */
|
||||||
--shadow-soft: 0 1px 2px hsl(240 9% 11% / 0.05),
|
--shadow-soft: 0 1px 2px hsl(240 9% 11% / 0.05),
|
||||||
0 8px 24px hsl(240 9% 11% / 0.06);
|
0 8px 24px hsl(240 9% 11% / 0.06);
|
||||||
@@ -44,9 +44,9 @@
|
|||||||
--accent: 222 25% 14%;
|
--accent: 222 25% 14%;
|
||||||
--accent-foreground: 220 20% 92%;
|
--accent-foreground: 220 20% 92%;
|
||||||
--border: 222 22% 17%;
|
--border: 222 22% 17%;
|
||||||
--primary: 217 91% 60%;
|
--primary: 216 68% 62%;
|
||||||
--primary-foreground: 0 0% 100%;
|
--primary-foreground: 0 0% 100%;
|
||||||
--ring: 217 91% 60%;
|
--ring: 216 68% 62%;
|
||||||
--shadow-soft: 0 1px 2px hsl(222 47% 2% / 0.5),
|
--shadow-soft: 0 1px 2px hsl(222 47% 2% / 0.5),
|
||||||
0 8px 24px hsl(222 47% 2% / 0.45);
|
0 8px 24px hsl(222 47% 2% / 0.45);
|
||||||
--shadow-lift: 0 1px 2px hsl(222 47% 2% / 0.5),
|
--shadow-lift: 0 1px 2px hsl(222 47% 2% / 0.5),
|
||||||
@@ -60,24 +60,6 @@
|
|||||||
body {
|
body {
|
||||||
@apply bg-background text-foreground antialiased;
|
@apply bg-background text-foreground antialiased;
|
||||||
}
|
}
|
||||||
/* 科技风底纹:固定网格线,极低透明度,不干扰阅读 */
|
|
||||||
body::before {
|
|
||||||
content: "";
|
|
||||||
position: fixed;
|
|
||||||
inset: 0;
|
|
||||||
z-index: 0;
|
|
||||||
pointer-events: none;
|
|
||||||
background-image:
|
|
||||||
linear-gradient(to right, hsl(var(--primary) / 0.04) 1px, transparent 1px),
|
|
||||||
linear-gradient(to bottom, hsl(var(--primary) / 0.04) 1px, transparent 1px);
|
|
||||||
background-size: 44px 44px;
|
|
||||||
mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, black 30%, transparent 75%);
|
|
||||||
}
|
|
||||||
#root {
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 选中色与键盘焦点(无障碍) */
|
/* 选中色与键盘焦点(无障碍) */
|
||||||
::selection {
|
::selection {
|
||||||
background: hsl(var(--primary) / 0.16);
|
background: hsl(var(--primary) / 0.16);
|
||||||
@@ -96,19 +78,14 @@
|
|||||||
|
|
||||||
@layer components {
|
@layer components {
|
||||||
.container-page {
|
.container-page {
|
||||||
@apply mx-auto w-full max-w-6xl px-6;
|
@apply mx-auto w-full max-w-7xl px-5 md:px-8;
|
||||||
}
|
}
|
||||||
.btn {
|
.btn {
|
||||||
@apply inline-flex items-center justify-center gap-2 rounded-xl px-5 py-2.5 text-sm font-medium transition-all duration-200;
|
@apply inline-flex items-center justify-center gap-2 rounded-lg px-5 py-2.5 text-sm font-medium transition-all duration-200;
|
||||||
}
|
}
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
@apply btn bg-primary text-primary-foreground hover:bg-primary/90 hover:-translate-y-px active:translate-y-0 active:scale-[0.98];
|
@apply btn bg-primary text-primary-foreground hover:bg-primary/90 hover:-translate-y-px active:translate-y-0 active:scale-[0.98];
|
||||||
box-shadow: 0 1px 2px hsl(var(--primary) / 0.3),
|
box-shadow: 0 1px 2px hsl(221 45% 25% / 0.25);
|
||||||
0 6px 16px hsl(var(--primary) / 0.22);
|
|
||||||
}
|
|
||||||
.btn-primary:hover {
|
|
||||||
box-shadow: 0 1px 2px hsl(var(--primary) / 0.3),
|
|
||||||
0 10px 24px hsl(var(--primary) / 0.3);
|
|
||||||
}
|
}
|
||||||
.btn-ghost {
|
.btn-ghost {
|
||||||
@apply btn border border-border bg-card/60 text-foreground hover:border-foreground/25 hover:bg-accent active:scale-[0.98];
|
@apply btn border border-border bg-card/60 text-foreground hover:border-foreground/25 hover:bg-accent active:scale-[0.98];
|
||||||
@@ -126,14 +103,14 @@
|
|||||||
}
|
}
|
||||||
/* 截图容器:限定最大宽高,避免撑满页面 */
|
/* 截图容器:限定最大宽高,避免撑满页面 */
|
||||||
.screenshot {
|
.screenshot {
|
||||||
@apply overflow-hidden rounded-2xl border border-border bg-muted;
|
@apply overflow-hidden rounded-xl border border-border bg-muted;
|
||||||
box-shadow: var(--shadow-lift);
|
box-shadow: var(--shadow-lift);
|
||||||
}
|
}
|
||||||
.screenshot > img {
|
.screenshot > img {
|
||||||
@apply block h-auto w-full;
|
@apply block h-auto w-full;
|
||||||
}
|
}
|
||||||
/* 图标容器:统一的蓝色徽标容器 */
|
/* 图标容器:中性底、统一描边宽度(Phosphor duotone) */
|
||||||
.icon-chip {
|
.icon-chip {
|
||||||
@apply flex h-10 w-10 items-center justify-center rounded-xl border border-primary/20 bg-primary/10 text-primary;
|
@apply flex h-10 w-10 items-center justify-center rounded-lg border border-border bg-muted text-foreground;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,42 +7,36 @@ export default function CTA() {
|
|||||||
<section
|
<section
|
||||||
id="cta"
|
id="cta"
|
||||||
aria-labelledby="cta-title"
|
aria-labelledby="cta-title"
|
||||||
className="py-24"
|
className="pt-20 pb-28"
|
||||||
>
|
>
|
||||||
<div className="container-page">
|
<div className="container-page">
|
||||||
<div className="card relative overflow-hidden p-12 text-center md:p-16">
|
{/* 左对齐 + 内容错位:不再整块居中 */}
|
||||||
{/* 克制同色系光晕 + 顶部强调线(去紫,保持页面调性) */}
|
<div className="card relative max-w-3xl p-10 md:p-14">
|
||||||
<div
|
<div
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
className="pointer-events-none absolute -top-24 left-1/2 h-64 w-[480px] -translate-x-1/2 rounded-full bg-primary/10 blur-3xl"
|
className="absolute inset-x-0 top-0 h-px bg-primary/25"
|
||||||
/>
|
/>
|
||||||
<div
|
<h2
|
||||||
aria-hidden="true"
|
id="cta-title"
|
||||||
className="pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-primary/40 to-transparent"
|
className="text-3xl font-bold tracking-[-0.03em] md:text-4xl"
|
||||||
/>
|
>
|
||||||
<div className="relative">
|
{t.cta.title}
|
||||||
<h2
|
</h2>
|
||||||
id="cta-title"
|
<p className="mt-4 max-w-[52ch] text-base text-muted-foreground md:text-lg">
|
||||||
className="text-3xl font-bold tracking-[-0.03em] md:text-5xl"
|
{t.cta.subtitle}
|
||||||
|
</p>
|
||||||
|
<div className="mt-8 flex flex-wrap gap-3">
|
||||||
|
<Link to="/download" className="btn-primary">
|
||||||
|
{t.cta.download}
|
||||||
|
</Link>
|
||||||
|
<a
|
||||||
|
href="https://github.com/billowliu2/KimiSwitch"
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
className="btn-ghost"
|
||||||
>
|
>
|
||||||
{t.cta.title}
|
{t.cta.source}
|
||||||
</h2>
|
</a>
|
||||||
<p className="mx-auto mt-4 max-w-2xl text-base text-muted-foreground md:text-lg">
|
|
||||||
{t.cta.subtitle}
|
|
||||||
</p>
|
|
||||||
<div className="mt-8 flex flex-wrap justify-center gap-3">
|
|
||||||
<Link to="/download" className="btn-primary">
|
|
||||||
{t.cta.download}
|
|
||||||
</Link>
|
|
||||||
<a
|
|
||||||
href="https://github.com/billowliu2/KimiSwitch"
|
|
||||||
target="_blank"
|
|
||||||
rel="noreferrer"
|
|
||||||
className="btn-ghost"
|
|
||||||
>
|
|
||||||
{t.cta.source}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,27 +8,30 @@ const icons: Record<string, Icon> = {
|
|||||||
linux: LinuxLogo,
|
linux: LinuxLogo,
|
||||||
};
|
};
|
||||||
|
|
||||||
const VERSION = "0.7.4";
|
const VERSION = "0.7.12";
|
||||||
const GITHUB = "https://github.com/billowliu2/KimiSwitch";
|
const GITHUB = "https://github.com/billowliu2/KimiSwitch";
|
||||||
const MIRROR_RELEASES = "https://git.codingplan.site/admin/KimiCodeSwitch/releases";
|
const MIRROR_RELEASES = "https://git.codingplan.site/admin/KimiCodeSwitch/releases";
|
||||||
const dl = (file: string) => `${GITHUB}/releases/download/v${VERSION}/${file}`;
|
const dl = (file: string) => `${GITHUB}/releases/download/v${VERSION}/${file}`;
|
||||||
|
|
||||||
/** Per-platform download assets for the current release (names match the CI
|
/** Per-platform download assets for the current release (names match the CI
|
||||||
* release workflow exactly — verified against the published v0.7.4 assets:
|
* release workflow exactly — verified against the published v0.7.12 assets:
|
||||||
* tauri-bundler on CI produces `Kimi.Switch_…` (dots) on every platform). */
|
* tauri-bundler on CI produces `Kimi.Switch_…` (dots) on every platform,
|
||||||
|
* except the rpm which uses `Kimi.Switch-<version>-1` (hyphens).
|
||||||
|
* Filenames interpolate VERSION, so a release bump only changes the
|
||||||
|
* constant above. */
|
||||||
const assets: Record<string, { label: string; href: string }[]> = {
|
const assets: Record<string, { label: string; href: string }[]> = {
|
||||||
windows: [
|
windows: [
|
||||||
{ label: "MSI", href: dl("Kimi.Switch_0.7.4_x64_en-US.msi") },
|
{ label: "MSI", href: dl(`Kimi.Switch_${VERSION}_x64_en-US.msi`) },
|
||||||
{ label: "镜像", href: MIRROR_RELEASES },
|
{ label: "镜像", href: MIRROR_RELEASES },
|
||||||
],
|
],
|
||||||
macos: [
|
macos: [
|
||||||
{ label: "Apple Silicon (.dmg)", href: dl("Kimi.Switch_0.7.4_aarch64.dmg") },
|
{ label: "Apple Silicon (.dmg)", href: dl(`Kimi.Switch_${VERSION}_aarch64.dmg`) },
|
||||||
{ label: "安装脚本", href: dl("install-macos.sh") },
|
{ label: "安装脚本", href: dl("install-macos.sh") },
|
||||||
],
|
],
|
||||||
linux: [
|
linux: [
|
||||||
{ label: ".deb", href: dl("Kimi.Switch_0.7.4_amd64.deb") },
|
{ label: ".deb", href: dl(`Kimi.Switch_${VERSION}_amd64.deb`) },
|
||||||
{ label: ".AppImage", href: dl("Kimi.Switch_0.7.4_amd64.AppImage") },
|
{ label: ".AppImage", href: dl(`Kimi.Switch_${VERSION}_amd64.AppImage`) },
|
||||||
{ label: ".rpm", href: dl("Kimi.Switch-0.7.4-1.x86_64.rpm") },
|
{ label: ".rpm", href: dl(`Kimi.Switch-${VERSION}-1.x86_64.rpm`) },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -40,23 +43,36 @@ export default function Download() {
|
|||||||
title={t.download.title}
|
title={t.download.title}
|
||||||
subtitle={t.download.subtitle}
|
subtitle={t.download.subtitle}
|
||||||
>
|
>
|
||||||
<div className="grid grid-cols-1 gap-4 md:grid-cols-3">
|
{/* 不对称:Windows 为主推平台,横跨整行;macOS / Linux 两列在下方 */}
|
||||||
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||||
{t.download.items.map((p) => {
|
{t.download.items.map((p) => {
|
||||||
const Icon = icons[p.id] ?? WindowsLogo;
|
const Icon = icons[p.id] ?? WindowsLogo;
|
||||||
const links = assets[p.id] ?? [];
|
const links = assets[p.id] ?? [];
|
||||||
|
const featured = p.id === "windows";
|
||||||
return (
|
return (
|
||||||
<div key={p.id} className="card flex flex-col">
|
<div
|
||||||
<div className="mb-3 flex items-center justify-between">
|
key={p.id}
|
||||||
<div className="icon-chip">
|
className={`card flex flex-col ${
|
||||||
<Icon className="h-5 w-5" weight="duotone" />
|
featured
|
||||||
|
? "md:col-span-2 md:flex-row md:items-center md:justify-between md:gap-10"
|
||||||
|
: ""
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
<div className="min-w-0">
|
||||||
|
<div className="mb-3 flex items-center gap-3">
|
||||||
|
<div className="icon-chip shrink-0">
|
||||||
|
<Icon className="h-5 w-5" weight="duotone" />
|
||||||
|
</div>
|
||||||
|
<h3 className="text-lg font-semibold tracking-tight">{p.name}</h3>
|
||||||
|
<span className="ml-auto rounded-md border border-primary/20 bg-primary/10 px-2 py-0.5 text-[11px] font-medium tracking-wide text-primary">
|
||||||
|
{t.download.ready}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span className="rounded-md border border-primary/20 bg-primary/10 px-2 py-0.5 text-[11px] font-medium tracking-wide text-primary">
|
<p className={`text-sm text-muted-foreground ${featured ? "max-w-[65ch]" : ""}`}>
|
||||||
{t.download.ready}
|
{p.note}
|
||||||
</span>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<h3 className="mb-2 text-lg font-semibold tracking-tight">{p.name}</h3>
|
<div className="mt-4 flex shrink-0 flex-wrap items-start gap-2 md:mt-0">
|
||||||
<p className="text-sm text-muted-foreground">{p.note}</p>
|
|
||||||
<div className="mt-4 flex flex-wrap gap-2">
|
|
||||||
{links.map((l) => (
|
{links.map((l) => (
|
||||||
<a
|
<a
|
||||||
key={l.label}
|
key={l.label}
|
||||||
@@ -74,7 +90,7 @@ export default function Download() {
|
|||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="mt-6 flex items-center gap-2 text-sm text-muted-foreground">
|
<p className="mt-6 flex max-w-[65ch] items-center gap-2 text-sm text-muted-foreground">
|
||||||
<DownloadSimple className="h-4 w-4 text-primary" weight="duotone" />
|
<DownloadSimple className="h-4 w-4 text-primary" weight="duotone" />
|
||||||
{t.download.autoUpdate}
|
{t.download.autoUpdate}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ export default function Features() {
|
|||||||
key={f.id}
|
key={f.id}
|
||||||
style={{ transitionDelay: `${i * 60}ms` }}
|
style={{ transitionDelay: `${i * 60}ms` }}
|
||||||
className={`card overflow-hidden p-0 transition-all duration-500 ease-out hover:border-primary/50 ${
|
className={`card overflow-hidden p-0 transition-all duration-500 ease-out hover:border-primary/50 ${
|
||||||
|
i % 2 === 1 ? "sm:mt-12" : ""
|
||||||
|
} ${
|
||||||
gridInView
|
gridInView
|
||||||
? "motion-safe:opacity-100 motion-safe:translate-y-0"
|
? "motion-safe:opacity-100 motion-safe:translate-y-0"
|
||||||
: "motion-safe:opacity-0 motion-safe:translate-y-4"
|
: "motion-safe:opacity-0 motion-safe:translate-y-4"
|
||||||
|
|||||||
@@ -23,15 +23,6 @@ export default function Hero() {
|
|||||||
aria-labelledby="hero-title"
|
aria-labelledby="hero-title"
|
||||||
className="relative overflow-hidden pt-16 pb-20 md:pt-24"
|
className="relative overflow-hidden pt-16 pb-20 md:pt-24"
|
||||||
>
|
>
|
||||||
{/* 克制的同色系光晕(去紫,统一蓝色 + 中性) */}
|
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
className="pointer-events-none absolute -top-32 right-[-10%] h-[420px] w-[420px] rounded-full bg-primary/10 blur-3xl"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
className="pointer-events-none absolute -left-40 top-1/2 h-[320px] w-[320px] rounded-full bg-primary/5 blur-3xl"
|
|
||||||
/>
|
|
||||||
<div className="container-page relative grid grid-cols-1 gap-10 md:grid-cols-2 md:items-center">
|
<div className="container-page relative grid grid-cols-1 gap-10 md:grid-cols-2 md:items-center">
|
||||||
<div>
|
<div>
|
||||||
<div {...reveal(0)}>
|
<div {...reveal(0)}>
|
||||||
@@ -87,7 +78,7 @@ export default function Hero() {
|
|||||||
<div className="screenshot max-h-[420px]">
|
<div className="screenshot max-h-[420px]">
|
||||||
<img
|
<img
|
||||||
src={asset("screenshots/hero.png")}
|
src={asset("screenshots/hero.png")}
|
||||||
alt="Kimi Switch: multi-LLM provider list with one-click switching"
|
alt="Kimi Switch provider list, active provider pinned to the top"
|
||||||
loading="eager"
|
loading="eager"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,18 +16,23 @@ export default function Privacy() {
|
|||||||
title={t.privacy.title}
|
title={t.privacy.title}
|
||||||
subtitle={t.privacy.subtitle}
|
subtitle={t.privacy.subtitle}
|
||||||
>
|
>
|
||||||
<div className="grid grid-cols-1 gap-4 md:grid-cols-3">
|
{/* 三条承诺改为一个面板内的三行,图标左置,避免三张等宽卡片 */}
|
||||||
|
<div className="card divide-y divide-border p-0">
|
||||||
{t.privacy.items.map((it) => {
|
{t.privacy.items.map((it) => {
|
||||||
const Icon = icons[it.id] ?? Database;
|
const Icon = icons[it.id] ?? Database;
|
||||||
return (
|
return (
|
||||||
<div key={it.id} className="card">
|
<div key={it.id} className="flex items-start gap-5 p-6 md:p-7">
|
||||||
<div className="icon-chip mb-3">
|
<div className="icon-chip shrink-0">
|
||||||
<Icon className="h-5 w-5" weight="duotone" />
|
<Icon className="h-5 w-5" weight="duotone" />
|
||||||
</div>
|
</div>
|
||||||
<h3 className="mb-2 text-lg font-semibold tracking-tight">{it.title}</h3>
|
<div className="min-w-0">
|
||||||
<p className="text-sm leading-relaxed text-muted-foreground">
|
<h3 className="text-base font-semibold tracking-tight">
|
||||||
{it.desc}
|
{it.title}
|
||||||
</p>
|
</h3>
|
||||||
|
<p className="mt-1 max-w-[65ch] text-sm leading-relaxed text-muted-foreground">
|
||||||
|
{it.desc}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -21,12 +21,18 @@ export default function Showcase() {
|
|||||||
key={s.src}
|
key={s.src}
|
||||||
style={{ transitionDelay: `${i * 60}ms` }}
|
style={{ transitionDelay: `${i * 60}ms` }}
|
||||||
className={`transition-all duration-500 ease-out ${
|
className={`transition-all duration-500 ease-out ${
|
||||||
|
i === 0 ? "sm:col-span-2" : ""
|
||||||
|
} ${
|
||||||
gridInView
|
gridInView
|
||||||
? "motion-safe:opacity-100 motion-safe:translate-y-0"
|
? "motion-safe:opacity-100 motion-safe:translate-y-0"
|
||||||
: "motion-safe:opacity-0 motion-safe:translate-y-4"
|
: "motion-safe:opacity-0 motion-safe:translate-y-4"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<div className="screenshot group aspect-[4/3] overflow-hidden">
|
<div
|
||||||
|
className={`screenshot group overflow-hidden ${
|
||||||
|
i === 0 ? "aspect-[16/9]" : "aspect-[4/3]"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
<img
|
<img
|
||||||
src={asset(s.src)}
|
src={asset(s.src)}
|
||||||
alt={`Kimi Switch - ${s.title}`}
|
alt={`Kimi Switch - ${s.title}`}
|
||||||
|
|||||||
Reference in new issue
Block a user