基于 Kimi Code CLI 的桌面客户端。Electron + React + TypeScript 实现。
桌面壳而非 AI 运行时:所有会话/模型/工具能力由 Kimi Code CLI(
kimi web本地服务,REST + WebSocket)提供。 对话主界面直接内嵌 CLI 自带的 kimi web 官方界面(<webview>加载),界面与功能随 CLI 升级自动更新; 桌面壳负责窗口/托盘/CLI 生命周期管理,并提供官方界面没有的桌面端增强(Git 面板、代码预览、模型管理、使用统计等)。 未安装 CLI 时应用会在首次启动时自动下载安装;已安装则检测更新,有新版时询问后一键升级。
- 工作区/会话管理、流式对话、工具调用、子代理、审批、问答、思考过程、附件上传等全部由官方界面提供,随 CLI 版本同步演进
- 通过
#token=自动完成凭据注入,用户无感登录
- Git 面板:分支、工作区改动(增删统计 + 单文件 diff 着色)、提交历史;跟随 kimi web 当前会话的工作目录,主代理轮次结束自动刷新
- 代码预览面板:编辑器式 diff 视图(行号、红删绿增、@@ 蓝底、文件切换)
- 增强设置:常规 / 代码预览 / 模型设置(Kimi 账号 OAuth 设备码登录、Token/MCP 额度、模型列表设默认、自定义供应商、次主力模型 secondary_model、全局思考配置)/ 子智能体 / 插件管理 / 技能 / MCP(可视化 + JSON 编辑,写盘自动备份)/ 命令 / 使用统计(时间范围、统计卡、GitHub 式活跃热力图、按天模型堆叠趋势、模型 donut;数据源为 wire.jsonl 的 usage.record)/ 引导
系统托盘、单实例、无边框窗口自定义标题栏、CLI 自动安装与一键升级
Electron 主进程
├── cli-manager.ts → CLI 自检测:未安装→官方脚本自动安装;有更新→询问后 kimi upgrade
├── spawn `kimi web --no-open --port <固定端口>` # 后端服务(注入 KIMI_CODE_EXPERIMENTAL_SECONDARY_MODEL)
│ 端口默认 17685 起(KIMI_DESKTOP_PORT 可覆盖),固定端口保证 kimi web 界面的
│ localStorage(凭据/界面偏好/草稿)跨重启持久
├── RestClient → http://127.0.0.1:<port>/api/v1/*(Bearer 认证,统一信封 {code,msg,data})
├── WsClient → /api/v1/ws(v1 事件流,用于轮次结束时刷新 Git 面板)
├── git.ts → git status/log/diff(child_process)
└── local-store.ts→ ~/.kimi-code 直读(插件/技能/子代理/cron/mcp.json/usage 聚合/盘符)
渲染进程(React + zustand,仅壳层)
├── ShellPage → 左功能栏 + <webview src="http://127.0.0.1:<port>/#token=..."> + 右侧增强抽屉
├── preload/webview → 注入 kimi web guest:监听 /sessions/<id> 路由,上报活动会话
├── stores/active → 活动会话 id → REST 解析 cwd,驱动 Git/代码预览面板
└── stores/ui/git → 壳层界面状态
- kimi web 凭据:URL hash
#token=自动写入 localStorage(kimi-web.server-credential,7 天有效),每次启动重新注入即可 - v1 WS 事件含子代理转录(payload
agentId,主代理为main):直接消费时必须过滤,否则子代理输出会混进主视图;Git 刷新只认主代理的turn.ended - providers REST 的 models 必须是对象数组(
{model, max_context_size}必填);custom_headers不在 providers REST 内,需走POST /api/v1/configmerge(会真实写入 config.toml 并随请求发送) GET /api/v1/config返回 camelCase(maxContextSize/supportEfforts),写回用 snake_case- 会话删除只有归档(CLI 0.29.2 无删除端点)
- token 统计口径:
usage.record≈step.end(交叉验证差 1%),输入/输出/缓存分开记账
npm install # 如遇 Electron 二进制下载失败:
# ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ node node_modules/electron/install.js
npm run dev # electron-vite dev(渲染层热更新;dev 用独立 userData,可与正式版共存)
npm run typecheck # 主/渲染两端 TS 检查npm run dist # electron-vite build + electron-builder(NSIS 安装包 + 便携版)
# 国内网络建议加镜像:
# ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
# ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/产物在 dist/。
Windows 打包注意:electron-builder 解 winCodeSign 时需要创建符号链接的权限(开发者模式);开发时可用 7za 包装器跳过 mac 专用 dylib 软链解决。
- 插件的禁用/卸载、定时任务管理、记忆与索引库:CLI 暂无服务端接口(页面已隐藏,开放后恢复)
- 会话删除 = 归档(可恢复),无物理删除
shot.cjs— 独立实例截图:node scripts/shot.cjs out.png [waitMs] [actionJS](需 dev server)e2e.cjs— 全链路:新建任务 → 选目录 → 发消息 → 观察流式(PROMPT环境变量换提示词)approval-e2e.cjs— 审批流:手动审批 → 审批卡 → 批准 → 工具执行ws-probe.cjs— WS 协议探针think-probe.cjs/code-probe.cjs/provider-probe.cjs— 思考回显/代码面板/供应商面板专项
任何人(个人或组织)都可以免费使用、复制、修改和分发本软件,但必须遵守 AGPL-3.0:修改后的版本必须以相同许可证开源(包括通过网络提供服务的情形)。不允许闭源商用——不能拿着这套代码随便改改甚至原封不动就拿去卖钱。