feat: v0.5.2 - daily trend refactor + provider/model two-level drill-down
- Dashboard: 用量趋势卡片改为外层 tab 容器(下划线 tab),移除卡片标题与内部 pill 切换器 - 用量趋势: 新增 供应商模型用量趋势 tab,与 模型用量趋势 并列 - 供应商 tab 弹窗: 每日用量详情改为两级(供应商 → 模型)分组 - 后端: DailyRow 新增 by_provider_model 嵌套聚合 - 前端: DailyBars 通用化(dimension/colorMap),DailyDetailModal 按 tab 维度渲染 - i18n: 新增 providerDistribution(中/英) - 版本: 0.5.1 → 0.5.2(tauri.conf / Cargo.toml / package.json / README)
This commit is contained in:
1 parent
3dd1fd93fe
commit
a1fdc6c93d
16 files changed
+1190
-506
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Kimi Switch
|
||||
|
||||
> Windows 桌面端 LLM 供应商配置管理器,让你在 **Kimi Code CLI** 和 **Pi** 两个 Agent 之间无缝切换多家 LLM 供应商与模型。
|
||||
> Windows 桌面端的 **Kimi Code CLI** 配置管理器——统一管理多家 LLM 供应商、模型、图标、连通性、用量统计与版本更新。
|
||||
|
||||
[English](./README_EN.md) | **中文**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
[](https://react.dev)
|
||||
[](https://www.typescriptlang.org)
|
||||
[](https://www.rust-lang.org)
|
||||
[](https://git.codingplan.site/admin/KimiCodeSwitch)
|
||||
[](https://git.codingplan.site/admin/KimiCodeSwitch/releases)
|
||||
[](./LICENSE)
|
||||
|
||||
---
|
||||
@@ -19,6 +19,7 @@
|
||||
- [核心特性](#核心特性)
|
||||
- [界面预览](#界面预览)
|
||||
- [架构总览](#架构总览)
|
||||
- [功能详情](#功能详情)
|
||||
- [支持的供应商类型](#支持的供应商类型)
|
||||
- [数据存储位置](#数据存储位置)
|
||||
- [快速上手](#快速上手)
|
||||
@@ -27,43 +28,52 @@
|
||||
- [国际化](#国际化)
|
||||
- [测试](#测试)
|
||||
- [打包发布](#打包发布)
|
||||
- [发布历史](#发布历史)
|
||||
- [常见问题](#常见问题)
|
||||
- [安全提示](#安全提示)
|
||||
- [致谢](#致谢)
|
||||
|
||||
---
|
||||
|
||||
## 这是什么
|
||||
|
||||
**Kimi Switch** 是一个为 LLM CLI 用户打造的 Windows 桌面配置管理工具。它解决两个痛点:
|
||||
**Kimi Switch** 是一个为 [Kimi Code CLI](https://github.com/MoonshotAI/kimi-code) 用户打造的 Windows 桌面配置管理工具。它把 `~/.kimi-code/config.toml` 的手改工作搬到图形界面里,并补上一系列 CLI 自身没提供的便利:
|
||||
|
||||
1. **多供应商管理繁琐**:在 Kimi / Anthropic / OpenAI / Google GenAI / 自建代理 等多家供应商之间切换时,需要反复手改 TOML/JSON,容易出错。
|
||||
2. **多 Agent 配置割裂**:同时使用 **Kimi Code CLI** 和 **Pi** 两个 Agent 的开发者,每个 Agent 都有一套独立的配置格式,改一处要改两份。
|
||||
|
||||
Kimi Switch 提供统一的图形界面:
|
||||
|
||||
- 统一图形界面,分别管理 Kimi Code 和 Pi 两套 Agent 配置,顶部 Tab 切换
|
||||
- 一键切换供应商,更新对应 Agent 原生配置的 `default_model`,保留全部供应商
|
||||
- 一键拉取模型列表(OpenAI / Anthropic / Google GenAI)
|
||||
- 切换后给出 `/reload` 提示,确保 Kimi Code 会话立即生效
|
||||
- **多供应商统一管理**:Kimi / Anthropic / OpenAI / OpenAI Responses / Google GenAI / Vertex AI,一个界面搞定;新增的供应商会**自动提升到列表最前**,再切换不会覆盖丢失
|
||||
- **模型一键发现**:根据供应商 API 自动拉取可用模型列表,模型显示名、上下文大小、能力等**优先取自 models.dev** 缓存(缺字段时再由后端/UI 兜底)
|
||||
- **连通性测试**:参考 cc-switch 语义对 `base_url` 发 GET 请求,显示延迟气泡(绿/橙/红),6 秒自动消失
|
||||
- **重复供应商**:一键深拷贝现有供应商及其模型,改 key 到 `xxx-copy` 即可二次定制
|
||||
- **图标系统**:内置 100+ 主流供应商品牌图标,参考 cc-switch 实现;无匹配的供应商自动按命名规则生成首字母默认图标
|
||||
- **用量仪表盘**:移植自 kimicode-dashboard,KPI / 热力图 / 按模型分色每日趋势 / 最近请求翻页
|
||||
- **会话管理**:按工作区浏览、预览、归档、批量删除 Kimi Code 会话
|
||||
- **版本更新**:进入应用时自动检测(可关闭),并支持一键下载安装
|
||||
- **主题/语言切换**:设置面板中切换深色/浅色/跟随系统,简体中文/English
|
||||
- **Windows 友好**:单实例;最小化保留任务栏按钮;关闭按钮隐藏到托盘
|
||||
|
||||
## 核心特性
|
||||
|
||||
| 分类 | 功能 |
|
||||
| --- | --- |
|
||||
| **多 Agent** | 同时管理 Kimi Code 和 Pi 两套配置,互不干扰,顶部 Tab 切换 |
|
||||
| **多供应商** | Kimi / Anthropic / OpenAI / OpenAI Responses / Google GenAI / Vertex AI |
|
||||
| **模型映射** | 别名 ↔ 实际模型 ID,支持显示名、上下文长度、角色(Sonnet/Opus/Fable/Haiku)、1M 上下文声明 |
|
||||
| **一键发现** | 根据供应商 API 自动拉取可用模型列表 |
|
||||
| **托管供应商** | 标记 OAuth/managed 供应商,跳过凭证校验,保留 `oauth` 段写入 Kimi Code 配置 |
|
||||
| **Env 凭证** | 既支持 `api_key` 字段,也支持 `env` 表里的环境变量名(如 `OPENAI_API_KEY`) |
|
||||
| **全局设置** | 思考开关/等级、循环重试、后台任务、权限规则、生命周期钩子(仅 Kimi Code) |
|
||||
| **JSON 直编** | 高级用户可手动编辑完整配置 JSON(保留未知字段,不会丢字段) |
|
||||
| **i18n** | 简体中文 / English,运行时切换 |
|
||||
| **自动备份** | 写入 Kimi Code / Pi 原生配置前自动备份,按时间戳命名,保留最近 7 天(见 `src-tauri/src/config_io.rs`) |
|
||||
| **多 Agent** | 主目标 Kimi Code,Pi 代码保留但 UI 隐藏 |
|
||||
| **图标系统** | 100+ 品牌图标 + 首字母默认图标;图标选择器按 brands / inference 分类 |
|
||||
| **快捷切换** | 新增或激活的供应商自动提升到列表最前;切换只改 `default_model`,不丢其他供应商 |
|
||||
| **连通性测试** | 实测 `base_url` 延迟,绿/橙/红彩色气泡,6 秒自动消失 |
|
||||
| **重复供应商** | 一键深拷贝供应商 + 全部模型,key 改 `xxx-copy` |
|
||||
| **图标按钮操作** | 启用 / 编辑 / 复制 / 测试连通 / 删除 全图标化(lucide-react) |
|
||||
| **模型映射** | 别名("provider/model" 形式)↔ 实际请求模型 ID,自定义显示名、上下文长度、1M 上下文声明、能力 |
|
||||
| **自动上下文** | 拉取模型时 **API 返回 > models.dev ref > 正则兜底** 三级优先级自动适配 |
|
||||
| **能力自动推导** | `image_in / video_in / tool_use` 全部由 models.dev 推得;UI 仅暴露 `thinking` 一个手动开关 |
|
||||
| **全局设置** | `[thinking]` 表完整支持(enabled / effort / keep),仅 Kimi Code 生效 |
|
||||
| **JSON 直编** | 高级用户可手动编辑完整配置 JSON,未知字段通过 `raw_other` 透传不丢 |
|
||||
| **i18n / 主题** | 简体中文 / English;深色 / 浅色 / 跟随系统;设置持久化 |
|
||||
| **自动备份** | 写入 `config.toml` 前自动备份,按时间戳命名,保留最近 7 天 |
|
||||
| **快捷键** | Ctrl+S 保存、Ctrl+R 重载、Ctrl+O 打开配置目录 |
|
||||
| **用量仪表盘** | Token 用量统计、每日趋势(按模型分色)、全年热力图、最近请求翻页、双击查看模型分布 |
|
||||
| **会话管理** | 按工作区浏览、预览、归档、批量删除会话,逐行流式读取防崩溃(20MB 上限 + 500 字符折叠) |
|
||||
| **未保存提示** | 关闭窗口前检测未保存修改,标题栏加 `*` 前缀 |
|
||||
| **用量仪表盘** | 8 项 KPI、每日趋势(按模型分色堆叠)、全年热力图、最近请求翻页、双击柱状图查看模型分布 |
|
||||
| **会话管理** | 按工作区浏览、归档/复活、批量删除;流式逐行预览(20MB 字节上限 + 500 字符折叠) |
|
||||
| **版本更新** | 启动自动 + 每 8 小时周期 + 手动检查;下载进度条;下载完成后引导安装 |
|
||||
| **未保存提示** | 关闭窗口前原生 `beforeunload` 提示 + 标题栏 `*` 前缀 |
|
||||
| **窗口/托盘** | 最小化保留任务栏;关闭 X 隐藏到托盘;托盘左键始终显示并聚焦 |
|
||||
|
||||
## 界面预览
|
||||
|
||||
@@ -71,71 +81,163 @@ Kimi Switch 提供统一的图形界面:
|
||||
|
||||

|
||||
|
||||
清晰展示当前激活的供应商、默认模型、延迟和可用模型数量,支持快速切换、复制、跳转官网、编辑和删除操作。
|
||||
展示当前激活的供应商、默认模型、延迟气泡、可用模型数量与品牌图标;支持快速切换、复制、测试连通、跳转官网、编辑、删除。
|
||||
|
||||
**编辑供应商 - 基本信息**
|
||||
**编辑供应商 — 基本信息**
|
||||
|
||||

|
||||
|
||||
包含供应商名称、备注、官网链接、托管供应商开关、API 格式、API Key 与请求地址等基础字段。
|
||||
包括供应商名称、备注、官网链接、托管供应商开关、API 格式、API Key、请求地址。
|
||||
|
||||
**编辑供应商 - 模型映射**
|
||||
**编辑供应商 — 模型映射**
|
||||
|
||||

|
||||
|
||||
一张表管理全部模型映射:显示名称、实际请求模型、上下文长度、1M 上下文声明、能力标签(思考/图像/视频/工具调用/其他),支持「一键设置」「获取模型列表」批量填充。
|
||||
一张表管理全部模型映射:显示名、实际请求模型、上下文长度、1M 上下文声明、能力(仅"思考")、设为默认、删除。
|
||||
|
||||
**用量仪表盘**
|
||||
|
||||

|
||||
|
||||
8 项核心 KPI(请求数、非缓存输入、输出、缓存读/写/命中、总 Token、预估费用)+ 全年热力图 + 每日用量趋势(按模型分色堆叠柱状图)+ 模型用量明细(请求、Token、缓存命中、费用)。
|
||||
8 项 KPI(请求数、非缓存输入、输出、缓存读/写/命中、总 Token、预估费用)+ 全年热力图 + 每日用量趋势(按模型分色堆叠柱状图,贴底布局)+ 模型用量明细 + 最近请求(分页)。
|
||||
|
||||
**会话管理**
|
||||
|
||||

|
||||
|
||||
按工作区隔离浏览 Kimi Code 会话,支持活跃/已归档/全部筛选,流式逐行预览会话内容(20MB 字节上限,500 字符折叠),可归档或批量删除。
|
||||
按工作区隔离浏览 Kimi Code 会话,支持活跃/已归档/全部筛选;流式逐行预览(20MB 字节上限,500 字符折叠);归档/取消归档/批量删除。
|
||||
|
||||
## 架构总览
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ Kimi Switch (Tauri v2) │
|
||||
│ │
|
||||
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
|
||||
│ │ React Frontend (TS) │ │ Rust Backend (lib.rs) │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ src/App.tsx │◄──►│ src-tauri/src/ │ │
|
||||
│ │ src/components/ │ Tauri ├── commands.rs │ │
|
||||
│ │ ProviderList │ invoke ├── db.rs │ │
|
||||
│ │ ProviderEdit │ ├── kimi_code_io │ │
|
||||
│ │ AgentSettingsPanel │ ├── pi_io.rs │ │
|
||||
│ │ src/hooks/useConfig │ ├── config_io.rs │ │
|
||||
│ │ src/i18n/{zh,en}.ts │ ├── validators.rs │ │
|
||||
│ │ src/types/index.ts │ └── profile_manager│ │
|
||||
│ └──────────────────────────┘ └──────────────────────────┘ │
|
||||
│ │ │ │
|
||||
└──────────────────┼──────────────────────────────┼──────────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────────────┐ ┌──────────────────────────┐
|
||||
│ SQLite │ │ Agent 原生配置文件 │
|
||||
│ ~/.kimi-switch/ │ │ ├─ ~/.kimi-code/ │
|
||||
│ kimi-switch.db │ │ │ └─ config.toml │
|
||||
│ │ │ └─ ~/.pi/agent/ │
|
||||
│ (Kimi Switch 内部状态) │ │ ├─ models.json │
|
||||
└──────────────────────┘ │ └─ settings.json │
|
||||
└──────────────────────────┘
|
||||
┌────────────────────────────────────────────────────────────────────────┐
|
||||
│ Kimi Switch (Tauri v2) │
|
||||
│ │
|
||||
│ ┌──────────────────────────┐ ┌──────────────────────────────┐ │
|
||||
│ │ React Frontend (TS) │ │ Rust Backend (lib.rs) │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ src/App.tsx │ │ src-tauri/src/ │ │
|
||||
│ │ src/components/ │◄──►│ ├── lib.rs │ │
|
||||
│ │ ProviderList │ │ ├── main.rs │ │
|
||||
│ │ ProviderEdit │ │ ├── commands.rs │ │
|
||||
│ │ AgentSettingsPanel │ │ ├── db.rs │ │
|
||||
│ │ SettingsModal │ │ ├── kimi_code_io.rs │ │
|
||||
│ │ ProviderIcon / │ │ ├── pi_io.rs (legacy) │ │
|
||||
│ │ IconPicker │ │ ├── config_io.rs │ │
|
||||
│ │ dashboard/ │ │ ├── models.rs │ │
|
||||
│ │ sessions/ │ │ ├── validators.rs │ │
|
||||
│ │ src/hooks/ │ │ ├── dashboard.rs │ │
|
||||
│ │ useConfig / Dashboard│ │ └── profile_manager.rs │ │
|
||||
│ │ / Sessions / Theme │ │ │ │
|
||||
│ │ / UpdateCheck │ │ │ │
|
||||
│ │ src/lib/ │ │ │ │
|
||||
│ │ models-dev.ts │ │ │ │
|
||||
│ │ model-defaults.ts │ │ │ │
|
||||
│ │ agent-settings.ts │ │ │ │
|
||||
│ │ src/icons/ │ │ │ │
|
||||
│ │ brands / inference / │ │ │ │
|
||||
│ │ extracted (cc-switch)│ │ │ │
|
||||
│ │ src/i18n/{zh,en}.ts │ │ │ │
|
||||
│ │ src/types/{...} │ │ │ │
|
||||
│ └──────────────────────────┘ └──────────────────────────────┘ │
|
||||
│ │ │ │
|
||||
└──────────────────┼──────────────────────────────────┼──────────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────────────┐ ┌──────────────────────────┐
|
||||
│ SQLite │ │ Agent 原生配置 │
|
||||
│ ~/.kimi-switch/ │ │ ├─ ~/.kimi-code/ │
|
||||
│ kimi-switch.db │ │ │ └─ config.toml │
|
||||
│ (元数据 + 兜底) │ │ └─ ~/.pi/agent/ │
|
||||
│ + localStorage │ │ ├─ models.json │
|
||||
│ (主题/语言/检查) │ │ └─ settings.json │
|
||||
└──────────────────────┘ └──────────────────────────┘
|
||||
▲
|
||||
│
|
||||
┌──────────────────────────────┐
|
||||
│ models.dev 快照(前端) │
|
||||
│ src/lib/models-dev.json │
|
||||
│ + 脚本 scripts/fetch-models- │
|
||||
│ dev.mjs(可选定时刷新) │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
|
||||
**关键设计**:
|
||||
|
||||
- 对 Kimi Code,`config.toml` 是供应商/模型数据的**权威来源**:所有供应商和模型始终全量保留,`default_model` 决定哪个生效(与 CLI 原生 `/provider` 行为一致)
|
||||
- SQLite 只存 Kimi Switch 专有元数据(备注、官网、每个供应商记住的默认模型),并在 `config.toml` 不完整时兜底
|
||||
- 加载时以 `config.toml` 为准,因此通过 `/provider` 在 CLI 端增/改/删的供应商都会被正确反映,切换不再覆盖丢失
|
||||
- `raw_other` 字段透传未知键(含 `[oauth]` 段),保证前后往返不丢字段
|
||||
- Pi 的行为不变:切换时仍只写活跃供应商到 `models.json`
|
||||
- **`config.toml` 是 Kimi Code 的权威来源**:所有供应商和模型始终全量保留,`default_model` 决定哪个生效(与 CLI 原生 `/provider` 行为一致)。切换时只改 `default_model`,新增的供应商会被自动提升到列表最前,不会被覆盖
|
||||
- **SQLite 只存 Kimi Switch 专有元数据**:备注、官网、每个 Agent 记住的默认模型(`settings` 表)。主题 / 语言 / 上次更新检查时间存在前端 `localStorage`(WebView2),不在 `~/.kimi-switch` 下。`config.toml` 不完整时 SQLite 兜底
|
||||
- **`raw_other` 透传未知字段**:含 `[oauth]` 段,前后往返不丢字段
|
||||
- **models.dev 快照**:来源于 `https://models.dev/api.json`,本地 JSON 缓存 → `capabilitiesFromRef` 推导 `thinking/image_in/video_in/tool_use`,`getModelRef` 推导 `max_context_size/display_name`
|
||||
- **启动版本与配置目录**:`KIMI_CODE_HOME` / `PI_CODING_AGENT_DIR` 覆盖 Kimi Code / Pi 的目录;Kimi Switch 自己的数据目录固定为 `~/.kimi-switch`,暂无环境变量覆盖(详见 [数据存储位置](#数据存储位置))
|
||||
|
||||
## 功能详情
|
||||
|
||||
### 供应商优先级与切换
|
||||
|
||||
- **新增/激活自动提升到列表最前**:添加或切换供应商时会把它移到 `db.providers` 排序的第一位,UI 直接渲染最新顺序
|
||||
- **切换只改 `default_model`**:所有供应商写入 `config.toml`,但只有被切换的成为 `default_model`,与 Kimi Code CLI `/provider` 命令一致
|
||||
- **不会覆盖丢失**:通过 `/provider` 在 CLI 端增/改/删的供应商,加载时以 `config.toml` 为准,下一次保存时全部回写
|
||||
|
||||
### 图标系统
|
||||
|
||||
- 来自 cc-switch 的 `src/icons/extracted/` 库(100+ 主流供应商品牌图标)
|
||||
- 找不到精确匹配的供应商时,按命名规则生成**首字母默认图标**(例如 `kimi-code` → `K`,`deepseek-v4` → `D`)
|
||||
- `IconPicker` 内置 brands / inference 分类筛选;选中的图标保存到 `provider.icon` 字段
|
||||
|
||||
### 连通性测试
|
||||
|
||||
- 调 Rust 端 `test_connectivity` 命令:GET `provider.base_url`,任何 HTTP 响应 = 可达
|
||||
- 返回 `{ ok, latency_ms, status_code, error }`
|
||||
- 前端以**彩色气泡**形式内联展示(绿/橙/红 + 毫秒),6 秒后自动消失
|
||||
- 测速气泡位置在"使用中/切换"按钮之前,不挡眼
|
||||
|
||||
### 重复供应商
|
||||
|
||||
- 点击"复制"图标按钮 → 深拷贝供应商 + 全部模型
|
||||
- `provider.name` 加 `-copy` 后缀,模型自动改 key 为 `xxx-copy`
|
||||
- 立即持久化到 SQLite + `config.toml`,toast 提示
|
||||
|
||||
### 自动上下文与能力
|
||||
|
||||
- 拉取模型时 `max_context_size` 三级优先级:**API 响应 > models.dev ref > 正则兜底**
|
||||
- models.dev ref → `capabilities = ["thinking","image_in","video_in","tool_use"]`(按字段真值选)
|
||||
- UI 上**只暴露"思考"复选框**(其它能力自动写入但不便手动编辑——保持与 Kimi Code 语义一致:能力只追加不能移除)
|
||||
- `always_thinking` 只能手动加(models.dev 推导不出来),但当前 UI 屏蔽;需要时改 `config.toml` 即可
|
||||
|
||||
### 能力 vs 思考开关
|
||||
|
||||
- **模型能力**(`capabilities`)= "能不能":决定模型是否支持思考,没声明 `thinking` 即使全局开关开着也不生效
|
||||
- **全局 `[thinking]`**(设置面板)= "要不要":新会话默认开/关、强度(low/medium/high/max)、保留思考内容
|
||||
- `always_thinking` 锁死为开,忽略全局开关
|
||||
- 全局配置仅 Kimi Code 生效
|
||||
|
||||
### 用量仪表盘
|
||||
|
||||
- 8 项 KPI、每日趋势(按模型分色堆叠,**贴底布局**)、全年热力图(按 Token 量 5 级着色)、最近请求(30 条/页)
|
||||
- 双击每日趋势柱状图 → 弹出 `DailyDetailModal` 显示每个模型的用量分布
|
||||
- 数据源:`src-tauri/src/dashboard.rs` + `src/hooks/useDashboard.ts`
|
||||
|
||||
### 会话管理
|
||||
|
||||
- 按工作区隔离浏览 Kimi Code 会话,支持活跃/已归档/全部筛选
|
||||
- 流式逐行预览(20MB 字节上限,500 字符折叠可展开)
|
||||
- 归档 / 取消归档 / 批量删除
|
||||
- 早期版本的"闪崩"已通过流式读取 + 限制解决
|
||||
|
||||
### 设置面板
|
||||
|
||||
- **主题**:深色 / 浅色 / 跟随系统(`useTheme`,持久化到前端 `localStorage`)
|
||||
- **语言**:简体中文 / English
|
||||
- **版本**:当前版本 + 上次检查时间
|
||||
- **更新检查**:启动自动 + 每 8 小时周期 + 手动检查;下载带进度条;下载完成后引导安装
|
||||
|
||||
### 窗口与托盘
|
||||
|
||||
- **最小化**:保留任务栏按钮,不再被劫持到托盘
|
||||
- **关闭按钮(X)**:`prevent_close` + `hide` → 隐藏到托盘而非退出
|
||||
- **托盘菜单**:显示 / 退出
|
||||
- **托盘左键**:始终 `show + unminimize + focus`(不再 toggle hide)
|
||||
- **第二次启动**:`single_instance` 插件接住,回前台 + 聚焦
|
||||
|
||||
## 支持的供应商类型
|
||||
|
||||
@@ -154,16 +256,18 @@ Kimi Switch 提供统一的图形界面:
|
||||
|
||||
| 文件 | 用途 | 备份 |
|
||||
| --- | --- | --- |
|
||||
| `%USERPROFILE%\.kimi-switch\kimi-switch.db` | Kimi Switch 自己的 SQLite 数据库,存元数据(备注/官网/记住的模型)+ 迁移兜底 | — |
|
||||
| `%USERPROFILE%\.kimi-code\config.toml` | Kimi Code CLI 的 TOML 配置(**权威数据源,切换/保存时写入**) | 同目录下 `backups/config.toml.bak.{YYYYMMDD_HHMMSS}`,保留 7 天 |
|
||||
| `%USERPROFILE%\.pi\agent\models.json` | Pi 的供应商+模型配置(**切换时写入**) | 同目录下 `backups/models.json.bak.{YYYYMMDD_HHMMSS}`,保留 7 天 |
|
||||
| `%USERPROFILE%\.pi\agent\settings.json` | Pi 的默认供应商/模型(**切换时写入**) | 同目录下 `backups/settings.json.bak.{YYYYMMDD_HHMMSS}`,保留 7 天 |
|
||||
| `localStorage[kimi-switch-agent]` | 前端记住上次选中的 Agent(kimi_code / pi) | — |
|
||||
| `%USERPROFILE%\.kimi-switch\kimi-switch.db` | Kimi Switch 自己的 SQLite,存元数据(备注/官网/记住的默认模型 + 排序)+ 兜底 | — |
|
||||
| `%USERPROFILE%\.kimi-code\config.toml` | Kimi Code CLI 的 TOML 配置(**权威数据源,切换/保存时写入**) | 同目录 `backups/config.toml.bak.{YYYYMMDD_HHMMSS}`,保留 7 天 |
|
||||
| `%USERPROFILE%\.pi\agent\models.json` | Pi 的供应商+模型配置(**切换时写入**) | 同目录 `backups/models.json.bak.{YYYYMMDD_HHMMSS}`,保留 7 天 |
|
||||
| `%USERPROFILE%\.pi\agent\settings.json` | Pi 的默认供应商/模型(**切换时写入**) | 同目录 `backups/settings.json.bak.{YYYYMMDD_HHMMSS}`,保留 7 天 |
|
||||
| WebView2 `localStorage` | 前端状态:`kimi-switch-theme` / `kimi-switch-lang` / `kimi-switch-last-update-check` / `kimi-switch-agent` / `kimi-switch-dashboard-range`(主题 / 语言 / 上次更新检查 / 上次选中 Agent / 仪表盘时间范围) | — |
|
||||
| `src/lib/models-dev.json` | models.dev `api.json` 快照(前端内置) | — |
|
||||
|
||||
环境变量覆盖:
|
||||
|
||||
- `KIMI_CODE_HOME` 覆盖 Kimi Code 配置目录(默认 `~/.kimi-code`)
|
||||
- `PI_CODING_AGENT_DIR` 覆盖 Pi Agent 配置目录(默认 `~/.pi/agent`)
|
||||
- Kimi Switch 自己的数据目录固定为 `~/.kimi-switch`,**暂无环境变量覆盖**
|
||||
|
||||
## 快速上手
|
||||
|
||||
@@ -175,7 +279,7 @@ Kimi Switch 提供统一的图形界面:
|
||||
| Rust | stable 最新版(edition 2021) | Tauri 后端编译 |
|
||||
| WebView2 Runtime | Windows 10/11 默认已装 | Tauri v2 运行时 |
|
||||
| Microsoft C++ Build Tools | 最新版 | Rust 编译依赖 |
|
||||
| WiX Toolset 3.14 | `src-tauri/wix314-binaries/` 目录 | MSI 打包(首次构建自动下载) |
|
||||
| WiX Toolset 3.14 | `src-tauri/wix314-binaries/` | MSI 打包(首次构建自动下载) |
|
||||
|
||||
### 安装
|
||||
|
||||
@@ -189,7 +293,7 @@ npm install
|
||||
npm run tauri-dev
|
||||
```
|
||||
|
||||
会同时启动 Vite 开发服务器(端口 1420)和 Tauri 窗口,修改前端代码会自动刷新,修改 Rust 代码会重新编译。
|
||||
同时启动 Vite 开发服务器(端口 1420)和 Tauri 窗口;前端热重载,Rust 自动重编译。
|
||||
|
||||
### 仅前端开发(无 Tauri 窗口)
|
||||
|
||||
@@ -205,89 +309,134 @@ npm run dev
|
||||
|
||||
```
|
||||
.
|
||||
├── src/ # React 前端
|
||||
│ ├── App.tsx # 主组件,路由 ProviderList/ProviderEdit
|
||||
│ ├── main.tsx # React 入口 + ErrorBoundary + I18nProvider
|
||||
├── src/ # React 前端
|
||||
│ ├── App.tsx # 主组件,路由 ProviderList/ProviderEdit + 仪表盘/会话
|
||||
│ ├── main.tsx # React 入口 + ErrorBoundary + I18nProvider
|
||||
│ ├── components/
|
||||
│ │ ├── ProviderList.tsx # 供应商列表 + 切换按钮
|
||||
│ │ ├── ProviderEdit.tsx # 编辑供应商 + 模型映射 + JSON 直编
|
||||
│ │ └── AgentSettingsPanel.tsx# 全局设置(思考/循环/权限/钩子)
|
||||
│ │ ├── ProviderList.tsx # 供应商列表 + 切换 / 复制 / 测试连通 / 编辑 / 删除
|
||||
│ │ ├── ProviderEdit.tsx # 供应商编辑 + 模型映射 + JSON 直编 + 能力
|
||||
│ │ ├── AgentSettingsPanel.tsx # Kimi Code 全局设置(思考/循环/权限/钩子)
|
||||
│ │ ├── SettingsModal.tsx # 设置弹窗(主题 / 语言 / 版本 / 检查更新)
|
||||
│ │ ├── ProviderIcon.tsx # 供商品牌图标(带首字母兜底)
|
||||
│ │ ├── IconPicker.tsx # 图标选择器(brands / inference 分类)
|
||||
│ │ ├── dashboard/ # 用量仪表盘
|
||||
│ │ │ ├── DashboardPage.tsx
|
||||
│ │ │ ├── DailyBars.tsx
|
||||
│ │ │ ├── DailyDetailModal.tsx
|
||||
│ │ │ └── Heatmap.tsx
|
||||
│ │ └── sessions/ # 会话管理
|
||||
│ │ └── SessionsPage.tsx
|
||||
│ ├── hooks/
|
||||
│ │ └── useConfig.ts # 加载/保存配置 hook
|
||||
│ │ ├── useConfig.ts # 加载/保存配置
|
||||
│ │ ├── useDashboard.ts # 仪表盘数据
|
||||
│ │ ├── useSessions.ts # 会话数据
|
||||
│ │ ├── useTheme.ts # 主题切换
|
||||
│ │ └── useUpdateCheck.ts # 版本检查 + 下载
|
||||
│ ├── lib/
|
||||
│ │ ├── agent-settings.ts # AgentSettings 解析/序列化
|
||||
│ │ └── model-defaults.ts # 模型默认上下文大小
|
||||
│ ├── types/index.ts # Provider/Model/Config 类型定义
|
||||
│ │ ├── agent-settings.ts # AgentSettings 解析/序列化
|
||||
│ │ ├── model-defaults.ts # 模型默认上下文大小
|
||||
│ │ ├── models-dev.ts # models.dev 快照查找 + 能力映射
|
||||
│ │ ├── models-dev.json # 内置快照
|
||||
│ │ └── dashboard-format.ts # 仪表盘格式化
|
||||
│ ├── icons/
|
||||
│ │ ├── brands.ts # 品牌图标入口
|
||||
│ │ ├── inference.ts # 推理服务图标
|
||||
│ │ └── extracted/ # 来自 cc-switch 的图标库
|
||||
│ │ ├── index.ts
|
||||
│ │ └── metadata.ts
|
||||
│ ├── types/
|
||||
│ │ ├── index.ts # Provider/Model/Config
|
||||
│ │ ├── dashboard.ts
|
||||
│ │ ├── sessions.ts
|
||||
│ │ └── icon.ts
|
||||
│ ├── i18n/
|
||||
│ │ ├── zh.ts # 中文翻译(143 条目)
|
||||
│ │ ├── en.ts # 英文翻译
|
||||
│ │ └── index.tsx # useTranslation hook + Provider
|
||||
│ └── index.css # Tailwind 入口
|
||||
│ │ ├── zh.ts # 中文翻译(源)
|
||||
│ │ ├── en.ts # 英文翻译
|
||||
│ │ └── index.tsx # useTranslation hook + Provider
|
||||
│ └── index.css # Tailwind 入口
|
||||
│
|
||||
├── src-tauri/ # Rust 后端
|
||||
├── src-tauri/ # Rust 后端
|
||||
│ ├── src/
|
||||
│ │ ├── lib.rs # Tauri Builder + invoke_handler 注册
|
||||
│ │ ├── main.rs # 二进制入口
|
||||
│ │ ├── commands.rs # 7 个 Tauri Command
|
||||
│ │ ├── db.rs # SQLite 持久化
|
||||
│ │ ├── kimi_code_io.rs # ~/.kimi-code/config.toml 读写
|
||||
│ │ ├── pi_io.rs # ~/.pi/agent/*.json 读写
|
||||
│ │ ├── config_io.rs # 文件备份工具
|
||||
│ │ ├── models.rs # Config/Provider/Model 数据结构
|
||||
│ │ ├── profile_manager.rs # 多 Profile 管理(占位)
|
||||
│ │ └── validators.rs # 配置校验
|
||||
│ ├── capabilities/ # Tauri 权限声明
|
||||
│ ├── icons/ # 应用图标(脚本生成)
|
||||
│ └── tauri.conf.json # Tauri 配置(窗口/打包/CSP)
|
||||
│ │ ├── lib.rs # Tauri Builder + 托盘 + 窗口事件 + invoke_handler
|
||||
│ │ ├── main.rs # 二进制入口
|
||||
│ │ ├── commands.rs # ~14 个 Tauri Command
|
||||
│ │ ├── db.rs # SQLite 持久化
|
||||
│ │ ├── kimi_code_io.rs # ~/.kimi-code/config.toml 读写
|
||||
│ │ ├── pi_io.rs # ~/.pi/agent/*.json 读写(保留)
|
||||
│ │ ├── config_io.rs # 文件备份工具
|
||||
│ │ ├── models.rs # Config/Provider/Model 数据结构
|
||||
│ │ ├── profile_manager.rs # 多 Profile 管理(占位)
|
||||
│ │ ├── validators.rs # 配置校验
|
||||
│ │ └── dashboard.rs # 会话/用量数据聚合
|
||||
│ ├── capabilities/ # Tauri 权限声明
|
||||
│ ├── icons/ # 应用图标(脚本生成)
|
||||
│ └── tauri.conf.json # Tauri 配置(窗口/打包/CSP)
|
||||
│
|
||||
├── scripts/generate-icons.py # 从 SVG 生成各尺寸图标
|
||||
├── public/kimi.svg # 应用图标源(蓝紫渐变 π)
|
||||
├── docs/
|
||||
│ ├── screenshots/ # README 引用的界面截图
|
||||
│ └── superpowers/ # 设计规范与实施计划
|
||||
├── scripts/
|
||||
│ ├── fetch-models-dev.mjs # 刷新 models-dev.json 快照
|
||||
│ └── generate-icons.py # 从 SVG 生成各尺寸图标
|
||||
├── public/kimi.svg # 应用图标源(蓝紫渐变 π)
|
||||
└── docs/
|
||||
├── screenshots/ # README 引用的界面截图
|
||||
└── superpowers/ # 设计规范与实施计划
|
||||
```
|
||||
|
||||
### Tauri Commands(前端 ↔ 后端)
|
||||
|
||||
| 命令 | 说明 |
|
||||
| --- | --- |
|
||||
| `load_agent_config_command(agent)` | 加载配置:Kimi Code 以 `config.toml` 为权威数据源,SQLite 补充元数据;Pi 优先 SQLite |
|
||||
| `load_agent_config_command(agent)` | 加载配置:Kimi Code 以 `config.toml` 为权威 + SQLite 补充;Pi 优先 SQLite |
|
||||
| `save_agent_config_command(agent, config)` | 保存到 SQLite;Kimi Code 同时写入 `config.toml` |
|
||||
| `activate_agent_config_command(agent)` | 全量写入 Agent 原生配置(Kimi Code 写全部供应商,`default_model` 决定生效项;Pi 仅写活跃供应商) |
|
||||
| `open_agent_config_dir(agent)` | 用系统资源管理器打开 Agent 配置目录 |
|
||||
| `open_agent_config_dir(agent)` | 打开 Agent 配置目录 |
|
||||
| `get_app_version()` | 返回 `Cargo.toml` 版本号 |
|
||||
| `list_provider_models(provider)` | 调供应商 API 拉取模型列表(异步) |
|
||||
| `debug_log(message)` | 把前端日志打到 stderr(开发用) |
|
||||
| `list_provider_models(provider)` | 调供应商 API 拉取模型列表(异步,分页) |
|
||||
| `test_connectivity(provider)` | GET `base_url` 测连通性,返回 `{ ok, latency_ms, status_code, error }` |
|
||||
| `get_app_setting(key)` | 读取 App 设置(主题 / 语言 / 上次更新检查时间) |
|
||||
| `set_app_setting(key, value)` | 写入 App 设置 |
|
||||
| `check_for_update()` | 检查 GitHub releases,返回版本号 + 资产 URL |
|
||||
| `download_update(url, path)` | 流式下载更新包,发 `download-progress` / `download-complete` 事件 |
|
||||
| `open_installer(path)` | 用系统 shell 打开下载好的安装包 |
|
||||
| `dashboard::get_paths()` / `get_prices()` / `get_summary()` / `list_sessions()` / `archive_session()` / `unarchive_session()` / `delete_session()` / `delete_workspace()` / `get_session_preview()` | 用量与会话相关 |
|
||||
| `debug_log(message)` | 前端日志 → stderr(开发用) |
|
||||
|
||||
### 添加新供应商类型
|
||||
|
||||
1. 在 `src-tauri/src/models.rs` 的 `ProviderType` 枚举里加新变体
|
||||
2. 在 `default_base_url()` 里加默认值
|
||||
3. 在 `commands.rs::list_provider_models` 的 `match` 里加分发
|
||||
4. 在 `kimi_code_io.rs::provider_type_for_kimi_type` 和 `pi_io.rs::provider_type_for_pi_api` 里加映射
|
||||
5. 在 `src/components/ProviderEdit.tsx` 的 API 格式下拉里加选项
|
||||
6. 在 `src/i18n/{zh,en}.ts` 里加新的 i18n 键
|
||||
1. `src-tauri/src/models.rs` 的 `ProviderType` 枚举加新变体
|
||||
2. `default_base_url()` 加默认值
|
||||
3. `commands.rs::list_provider_models` 的 `match` 加分发
|
||||
4. `kimi_code_io.rs::provider_type_for_kimi_type` 加映射
|
||||
5. `src/components/ProviderEdit.tsx` 的 API 格式下拉加选项
|
||||
6. `src/i18n/{zh,en}.ts` 加 i18n 键
|
||||
|
||||
### 添加新的 Tauri Command
|
||||
### 添加新 Tauri Command
|
||||
|
||||
1. 在 `src-tauri/src/commands.rs` 里加 `#[tauri::command]`
|
||||
2. 在 `src-tauri/src/lib.rs` 的 `tauri::generate_handler![...]` 列表里注册
|
||||
3. 前端用 `import { invoke } from "@tauri-apps/api/core"` 调用
|
||||
4. 在 `src-tauri/capabilities/default.json` 里加权限(如需访问文件系统)
|
||||
1. `src-tauri/src/commands.rs` 加 `#[tauri::command]`
|
||||
2. `src-tauri/src/lib.rs` 的 `tauri::generate_handler![...]` 注册
|
||||
3. 前端 `import { invoke } from "@tauri-apps/api/core"` 调用
|
||||
4. `src-tauri/capabilities/default.json` 加权限(如需文件/网络)
|
||||
|
||||
### 添加新模型能力
|
||||
|
||||
1. `src/components/ProviderEdit.tsx` 的 `KNOWN_CAPABILITIES` 加新键
|
||||
2. `CAPABILITY_LABELS` 加 i18n 映射
|
||||
3. `src/i18n/{zh,en}.ts` 加翻译
|
||||
4. `src/lib/models-dev.ts` 的 `capabilitiesFromRef` 加推导(若可从 models.dev 推)
|
||||
|
||||
## 键盘快捷键
|
||||
|
||||
| 快捷键 | 作用 |
|
||||
| --- | --- |
|
||||
| `Ctrl + S` | 保存当前修改到 SQLite + config.toml(Kimi Code) |
|
||||
| `Ctrl + R` | 重新读取配置(未保存时会提示) |
|
||||
| `Ctrl + S` | 保存当前修改到 SQLite + `config.toml`(Kimi Code) |
|
||||
| `Ctrl + R` | 重新读取配置(未保存时提示) |
|
||||
| `Ctrl + O` | 打开当前 Agent 的配置目录 |
|
||||
|
||||
## 国际化
|
||||
|
||||
- 翻译源文件:`src/i18n/zh.ts`(源)和 `src/i18n/en.ts`(目标)
|
||||
- 新增 key 时**先在 `zh.ts` 里加**,`en.ts` 的 `Record<TranslationKey, string>` 类型会自动校验缺失条目(编译时报错)
|
||||
- 运行时通过右上角下拉切换语言,记忆在组件内 state(未持久化到 SQLite)
|
||||
- 翻译源:`src/i18n/zh.ts`(源) + `src/i18n/en.ts`(目标)
|
||||
- 新增 key **先在 `zh.ts` 里加**,`en.ts` 的 `Record<TranslationKey, string>` 类型会自动校验缺失条目(编译时报错)
|
||||
- `useTranslation` hook 暴露 `{ t, lang, setLang }`
|
||||
- 运行时切换由 `SettingsModal` 提供,持久化到前端 `localStorage`(`kimi-switch-lang`)
|
||||
|
||||
## 测试
|
||||
|
||||
@@ -301,17 +450,24 @@ cargo test
|
||||
当前覆盖:
|
||||
|
||||
- `kimi_code_io::tests` — TOML 导入/导出往返
|
||||
- `pi_io::tests` — JSON 往返,包括 advanced fields(headers/compat/cost/extra)
|
||||
- `pi_io::tests` — JSON 往返,含 advanced fields(headers/compat/cost/extra)
|
||||
- `validators::tests` — 配置校验
|
||||
- `dashboard::tests` — 用量聚合与时区处理
|
||||
|
||||
### 前端
|
||||
|
||||
暂无自动化测试。建议手动验证清单:
|
||||
暂未自动化测试,建议手动验证清单:
|
||||
|
||||
- [ ] 切换 Agent 时配置互不污染
|
||||
- [ ] 删除供应商时关联模型也清掉
|
||||
- [ ] 切换供应商后默认模型正确回填
|
||||
- [ ] 重命名供应商后引用它的模型也跟着改
|
||||
- [ ] JSON 直编后 `raw_other` 不丢字段
|
||||
- [ ] 添加新供应商自动提升到列表最前
|
||||
- [ ] 重复供应商生成的 key 不冲突
|
||||
- [ ] 测试连通性气泡在 6 秒后自动消失
|
||||
- [ ] 关闭 X 隐藏到托盘;最小化保留任务栏
|
||||
- [ ] 主题切换(深色 / 浅色 / 跟随系统)即时生效
|
||||
- [ ] 切换语言后 UI 文案立即更新
|
||||
- [ ] 启动检查更新 → 下载 → 引导安装
|
||||
- [ ] 拉取模型时 `max_context_size` 自动填充
|
||||
- [ ] 切换供应商后 Kimi Code 会话 `/reload` 立即生效
|
||||
|
||||
## 打包发布
|
||||
|
||||
@@ -321,20 +477,12 @@ npm run tauri-build
|
||||
|
||||
产物位置:
|
||||
|
||||
- `src-tauri/target/release/bundle/msi/Kimi Switch_0.3.0_x64_en-US.msi`
|
||||
```
|
||||
src-tauri/target/release/bundle/msi/Kimi Switch_<version>_x64_en-US.msi
|
||||
```
|
||||
|
||||
Windows 安装包(MSI),含 WebView2 bootstrapper 自动下载。`nsis` 已禁用,目前只产 MSI。
|
||||
|
||||
### 发布版本
|
||||
|
||||
**v0.3.0** — 新增用量仪表盘与会话管理功能(基于 [kimicode-dashboard](https://github.com/JochenYang/kimicode-dashboard) 移植,感谢原作者 [JochenYang](https://github.com/JochenYang) 的开源贡献):
|
||||
|
||||
- 用量仪表盘:8 项 KPI、每日趋势图(按模型分色堆叠柱状图,双击查看模型分布弹窗)、全年热力图(按 Token 量 5 级着色,鼠标悬浮 tooltip)、最近请求翻页(30 条/页)
|
||||
- 会话管理:按工作区隔离浏览、预览会话内容(流式逐行读取防崩溃,20MB 字节上限,500 字符折叠可展开)、归档/取消归档/批量删除
|
||||
- 时间线修复:`today` 范围、每日热力图和 `day_key` 分桶改用本地时区日历日,UTC+8 用户跨零点后不再数据错位
|
||||
- 隐藏 Pi 选项:左侧导航栏 Pi 入口已移除(代码保留,仅 UI 隐藏)
|
||||
- 支持供应商:Kimi / Anthropic / OpenAI / OpenAI Responses / Google GenAI / Vertex AI
|
||||
|
||||
### 首次打包
|
||||
|
||||
首次运行会下载:
|
||||
@@ -342,43 +490,95 @@ Windows 安装包(MSI),含 WebView2 bootstrapper 自动下载。`nsis` 已
|
||||
- WiX Toolset 3.14 binaries → `src-tauri/wix314-binaries/`
|
||||
- WebView2 bootstrapper → 打包进 MSI
|
||||
|
||||
### 常见构建问题
|
||||
|
||||
- **`os error 5`**(WiX light 步骤):先 `taskkill //F //IM kimiswitch.exe` 杀掉占用进程后重试
|
||||
- **prebuild 拉 models.dev 超时**:属正常,本地快照兜底不影响构建
|
||||
|
||||
## 发布历史
|
||||
|
||||
### v0.5.1(最新)
|
||||
|
||||
- 窗口/托盘:最小化保留任务栏;关闭 X 隐藏到托盘;托盘左键始终显示并聚焦
|
||||
- 模型用量表:模型列宽度自适应,长模型名完整显示不再截断
|
||||
- 模型能力编辑:只保留"思考",其余能力仍由 models.dev 自动推导
|
||||
- 模型映射表格:行分隔线改为主题感知,修复浅色模式突兀问题
|
||||
|
||||
### v0.5.0
|
||||
|
||||
- 供应商操作图标化(lucide-react):启用 / 编辑 / 复制 / 测试连通 / 删除
|
||||
- 重复供应商(深拷贝供应商 + 全部模型)
|
||||
- 连通性测试(绿/橙/红气泡 + 6 秒自动消失)
|
||||
- 每日趋势柱状图锚定到面板底部
|
||||
|
||||
### v0.4.1
|
||||
|
||||
- 模型发现分页(OpenAI / Anthropic / Google),减少大列表命中限制
|
||||
|
||||
### v0.4.0
|
||||
|
||||
- 完善的图标系统(移植自 cc-switch 图标库)
|
||||
- 设置面板(主题、语言)
|
||||
- 启动版本检查
|
||||
|
||||
### v0.3.0
|
||||
|
||||
[移植自 kimicode-dashboard](https://github.com/JochenYang/kimicode-dashboard):
|
||||
|
||||
- 用量仪表盘:8 KPI、每日趋势、全年热力图、最近请求翻页
|
||||
- 会话管理:按工作区浏览、预览、归档、批量删除
|
||||
- 时区修复:`today` / 热力图 / `day_key` 改用本地日历日
|
||||
- Pi 选项隐藏
|
||||
|
||||
## 常见问题
|
||||
|
||||
**Q: 切换供应商后 Kimi Code 没生效?**
|
||||
A: 在 Kimi Code 会话里执行 `/reload`(Kimi Code CLI 才会重新读取 `~/.kimi-code/config.toml`)。应用会在 UI 上提示。
|
||||
|
||||
**Q: 切换会覆盖其他供应商吗?**
|
||||
A: 不会。Kimi Code 的 `config.toml` 始终写入全部供应商,仅 `default_model` 决定生效项。这与 CLI 原生 `/provider` 行为一致。
|
||||
|
||||
**Q: 新增/激活的供应商位置怎么变?**
|
||||
A: 自动提升到列表最前,UI 立即反映。
|
||||
|
||||
**Q: 为什么能力只显示"思考"?**
|
||||
A: Kimi Code 语义上 `capabilities` 只追加不能移除,models.dev 已有自动推导,再手动暴露只会增加误操作风险。需要声明 `always_thinking` 等特殊值时直接编辑 `config.toml` 即可。
|
||||
|
||||
**Q: 改了配置但忘了保存就关了窗口?**
|
||||
A: 关闭窗口前会弹原生 `beforeunload` 提示,标题栏也会显示 `*` 前缀。
|
||||
A: 关闭窗口前有原生 `beforeunload` 提示,标题栏也会显示 `*` 前缀。
|
||||
|
||||
**Q: 怎么备份/迁移我的配置?**
|
||||
A: 对 Kimi Code,`config.toml` 本身就是全量配置的权威来源,直接备份它即可;SQLite 存额外的备注/官网等元数据,需要时一并备份 `kimi-switch.db`。对 Pi,备份 `kimi-switch.db`。
|
||||
A: 对 Kimi Code,`config.toml` 本身就是全量权威,直接备份即可;`kimi-switch.db` 存备注 / 官网 / 排序,迁移时一并备份。主题 / 语言 / 上次更新检查时间存在前端 `localStorage`(WebView2),不是独立文件,迁移时通常无需单独处理。
|
||||
|
||||
**Q: Vertex AI 为什么不能拉取模型列表?**
|
||||
A: Vertex 需要 GCP project/location 凭证,当前实现留了 TODO,等 GCP SDK 集成后再补。
|
||||
A: Vertex 需要 GCP project / location 凭证,当前实现留 TODO,等 GCP SDK 集成后补。
|
||||
|
||||
**Q: 支持 macOS / Linux 吗?**
|
||||
A: 代码不依赖 Windows 专属 API,但 `tauri.conf.json` 的 bundle 目标目前只配了 `msi`。理论上把 `bundle.targets` 改成 `["app", "dmg"]` 等即可跨平台,但未验证。
|
||||
|
||||
**Q: 怎么改主题 / 语言?**
|
||||
A: 顶部齿轮 → 设置弹窗 → 主题 / 语言。保存到前端 `localStorage`(WebView2),重启后保持。
|
||||
|
||||
**Q: 把窗口关了怎么再打开?**
|
||||
A: 关闭按钮(X)已改为隐藏到托盘。点击托盘图标(菜单栏 / 系统托盘)即可拉回;点击任务栏图标正常切换最小化/还原。
|
||||
|
||||
**Q: 检查更新是怎么触发的?**
|
||||
A: 启动时静默检查一次,之后每 8 小时自动检查一次(无网络时静默失败,不弹错)。也可手动:设置弹窗 → 版本 → 检查更新。下载有进度条,下载完成后会有"打开安装包"按钮。
|
||||
|
||||
## 安全提示
|
||||
|
||||
- API Key 以明文存储在本地 SQLite 和 Agent 原生配置里——**不要在共享电脑上保存**
|
||||
- API Key 明文存储在本地 SQLite 和 Agent 原生配置里——**不要在共享电脑上保存**
|
||||
- 不要把 `kimi-switch.db`、`config.toml`、`models.json` 提交到 Git
|
||||
- 应用 CSP 已收紧(`default-src 'self'`),但 WebView2 仍可能缓存表单内容,注意在公共电脑用完退出
|
||||
|
||||
---
|
||||
|
||||
## 附录:相关项目
|
||||
|
||||
- [Kimi Code CLI](https://github.com/MoonshotAI/kimi-cli) — 兼容的 Agent 之一
|
||||
- [Tauri](https://tauri.app) — 桌面应用框架
|
||||
- 设计文档见 `docs/superpowers/specs/`,实施计划见 `docs/superpowers/plans/`
|
||||
|
||||
## 致谢
|
||||
|
||||
用量仪表盘与会话管理功能基于 [kimicode-dashboard](https://github.com/JochenYang/kimicode-dashboard)(MIT 许可证,© JochenYang)移植。原始项目实现了 Kimi Code CLI 的本地 Token 用量统计与会话管理,本项目的 Rust 后端(`src-tauri/src/dashboard.rs`)、前端仪表盘(`src/components/dashboard/`)以及会话管理页(`src/components/sessions/`)均源自该项目,感谢原作者的开源贡献。
|
||||
用量仪表盘与会话管理功能基于 [kimicode-dashboard](https://github.com/JochenYang/kimicode-dashboard)(MIT 许可证,© JochenYang)移植。Rust 后端(`src-tauri/src/dashboard.rs`)、前端仪表盘(`src/components/dashboard/`)、会话管理页(`src/components/sessions/`)均源自该项目,感谢原作者的开源贡献。
|
||||
|
||||
供应商品牌图标资源与图标选择器实现参考自 [cc-switch](https://github.com/farion1231/cc-switch)(MIT 许可证,© Jason Young),本项目复制了其 `src/icons/extracted/` 图标库与 `IconPicker` 交互设计,感谢原作者的开源贡献。
|
||||
供应商品牌图标资源(`src/icons/extracted/`)与图标选择器(`src/components/IconPicker.tsx`)参考自 [cc-switch](https://github.com/farion1231/cc-switch)(MIT 许可证,© Jason Young),感谢原作者的开源贡献。
|
||||
|
||||
---
|
||||
|
||||
许可证:MIT,详见 [LICENSE](./LICENSE)。Copyright (c) 2026 CodingPlan.site
|
||||
许可证:MIT,详见 [LICENSE](./LICENSE)。Copyright (c) 2026 CodingPlan.site
|
||||
Reference in new issue
Block a user