Problem Statement
Kimi CLI(Moonshot AI / 月之暗面官方的终端编码 Agent,目前处于 Technical Preview,未来会演进为 Kimi Code)在国内开发者中使用率很高,主打长上下文(kimi-k2.5 等模型)和 MCP 工具集成。
WeSight 已经在 README 中列出 9 个 Cowork 引擎(yd_cowork / openclaw / hermes / claude_code / codex / codex_app / opencode / grok_build / qwen_code / deepseek_tui),但没有把 Kimi CLI 作为独立的引擎接入。当前想用 Kimi 跑图形化工作流,只能:
- 用
claude_code / opencode 引擎 + 选 Moonshot/Kimi 作为模型供应商——但这仅借用了模型,丢失了 Kimi CLI 原生的工具流、--yolo / --plan 模式、/login 鉴权、ACP server 集成等特性,体验差很多。
- 完全脱离 WeSight,在终端里直接跑
kimi——放弃图形化工作流和 IM 通道(飞书/钉钉/Telegram 等)联动。
期望:把 Kimi CLI 作为一等公民引擎接入,享受和 Qwen Code / DeepSeek-TUI 一样的安装检测、模型配置、权限弹窗、会话管理、IM 通道联动。
Proposed Solution
参考 Qwen Code 的集成范式(已经跑通「WeSight 模型 ↔ 本机 CLI」双配置源),新增 kimi_cli 引擎。核心要点:
- 常量与类型:在
src/shared/cowork/constants.ts 的 CoworkAgentEngine 中加入 KimiCli: 'kimi_cli',并补齐 KimiCliPermissionMode(auto ↔ kimi --yolo,conservative ↔ kimi --plan)和对应的 is*PermissionMode 守卫函数。
- 子进程层:仿照
externalCliRuntimeAdapter.ts 的 Qwen Code / OpenCode 分支,spawn 命令使用:
kimi --print --output-format stream-json --work-dir <cwd> --yolo
--model <model> --prompt <effectivePrompt>
复用现有的 stdout buffer、local history、permission 转发链路。
- 事件归一化:新建
kimiCliCliEvent.ts,把 stream-json 输出(与 Claude Code stream-json 同源:type: system | assistant | tool_use | tool_result | result 等)归一化到现有 QwenCodeCliNormalizedEvent 兼容形态。
- 配置源:在
externalAgentConfigSync.ts / externalAgentEnvironment.ts 中实现「WeSight 模型」与「本机 CLI(~/.kimi/config.toml)」两种来源切换。
- 渲染层:
AgentEngineSelect / CoworkEngineSelector / CoworkModelSelector / AgentEnvironmentSetup 增加 Kimi CLI 选项和安装检测(kimi --version,pip install kimi-cli / uv tool install kimi-cli 一键安装),i18n 中英双语补全相关 key。
- 文档:
README_zh.md 第 23、59、89、107-113、354 行增加 Kimi CLI。
验收标准:
Alternatives Considered
- 复用
claude_code 引擎 + Moonshot 模型供应商:当前临时方案,claude_code 不会发出 Kimi CLI 原生 tool_use / tool_result 事件流,也用不上 --plan / --yolo / /login。
- 作为 OpenClaw extension 接入:OpenClaw 是 sandbox 化运行时范式,而 Kimi CLI 是纯本地 Agent 工具,强行走 OpenClaw 会破坏「复用本机 CLI 配置」这个体验点(README 第 92 行)。
- 塞进
qwen_code 引擎:会污染 Qwen Code 的配置解析、env key(WESIGHT_QWEN_*)和权限模式,违背单一职责。
Additional Context
Kimi CLI 关键事实(已查阅官方文档):
- 安装:
pip install kimi-cli 或 uv tool install kimi-cli,二进制名 kimi。
- 非交互运行:
kimi --print --output-format stream-json --prompt "<task>"。
- 鉴权 env:官方 Env Vars 文档 确认读取
KIMI_API_KEY / KIMI_BASE_URL / KIMI_MODEL_NAME,覆盖配置文件里的 api_key / base_url / model,不会写回 ~/.kimi/config.toml(这与 issue #33 的「凭据隔离」原则天然吻合,可作为 Kimi CLI 集成的基线)。
- 工作目录:
--work-dir <path>(注意是 --work-dir 不是 --workdir)。
- 权限模式:
--yolo(自动批准所有 tool call)/ --plan(先输出计划再执行)。
- 登录态:首次使用需要
kimi 进入交互模式后 /login 完成 Moonshot 平台登录;后续 ~/.kimi/ 下会有持久化 token,WeSight 复用即可,不要主动改写。
- 已知演进:Kimi CLI → Kimi Code,老用户配置会自动迁移,所以新引擎命名建议保留
kimi_cli,未来需要再改。
- 平台:kimi CLI 命令参考。
Kimi / Moonshot 在 WeSight 中已存在(src/shared/providers/constants.ts L192-203),但那是作为模型供应商(api.kimi.com/coding),与「引擎」是两条正交轴;本 issue 只动引擎这一侧。
与现有 issue 的关系:
实现参考(for contributor):
Checklist
Problem Statement
Kimi CLI(Moonshot AI / 月之暗面官方的终端编码 Agent,目前处于 Technical Preview,未来会演进为 Kimi Code)在国内开发者中使用率很高,主打长上下文(kimi-k2.5 等模型)和 MCP 工具集成。
WeSight 已经在 README 中列出 9 个 Cowork 引擎(
yd_cowork / openclaw / hermes / claude_code / codex / codex_app / opencode / grok_build / qwen_code / deepseek_tui),但没有把 Kimi CLI 作为独立的引擎接入。当前想用 Kimi 跑图形化工作流,只能:claude_code/opencode引擎 + 选 Moonshot/Kimi 作为模型供应商——但这仅借用了模型,丢失了 Kimi CLI 原生的工具流、--yolo/--plan模式、/login鉴权、ACP server 集成等特性,体验差很多。kimi——放弃图形化工作流和 IM 通道(飞书/钉钉/Telegram 等)联动。期望:把 Kimi CLI 作为一等公民引擎接入,享受和 Qwen Code / DeepSeek-TUI 一样的安装检测、模型配置、权限弹窗、会话管理、IM 通道联动。
Proposed Solution
参考 Qwen Code 的集成范式(已经跑通「WeSight 模型 ↔ 本机 CLI」双配置源),新增
kimi_cli引擎。核心要点:src/shared/cowork/constants.ts的CoworkAgentEngine中加入KimiCli: 'kimi_cli',并补齐KimiCliPermissionMode(auto↔kimi --yolo,conservative↔kimi --plan)和对应的is*PermissionMode守卫函数。externalCliRuntimeAdapter.ts的 Qwen Code / OpenCode 分支,spawn 命令使用:kimiCliCliEvent.ts,把stream-json输出(与 Claude Codestream-json同源:type: system | assistant | tool_use | tool_result | result等)归一化到现有QwenCodeCliNormalizedEvent兼容形态。externalAgentConfigSync.ts/externalAgentEnvironment.ts中实现「WeSight 模型」与「本机 CLI(~/.kimi/config.toml)」两种来源切换。AgentEngineSelect/CoworkEngineSelector/CoworkModelSelector/AgentEnvironmentSetup增加 Kimi CLI 选项和安装检测(kimi --version,pip install kimi-cli/uv tool install kimi-cli一键安装),i18n 中英双语补全相关 key。README_zh.md第 23、59、89、107-113、354 行增加 Kimi CLI。验收标准:
CoworkAgentEngine.KimiCli常量与守卫函数就位,所有isCoworkAgentEngine消费者编译通过。kimi-k2.5+ Kimi CLI 引擎,能正常发起会话、流式输出、收到complete事件。~/.kimi/config.toml的现有配置和登录态,不破坏用户文件、不写入 WeSight 自己的 key。KimiCliPermissionMode.Auto↔kimi --yolo、Conservative↔kimi --plan行为一致;conservative 模式下权限弹窗正确弹出。qwenCodeConfig.test.ts/qwenCodeCliEvent.test.ts同等覆盖的 vitest 用例。Alternatives Considered
claude_code引擎 + Moonshot 模型供应商:当前临时方案,claude_code不会发出 Kimi CLI 原生tool_use/tool_result事件流,也用不上--plan/--yolo//login。qwen_code引擎:会污染 Qwen Code 的配置解析、env key(WESIGHT_QWEN_*)和权限模式,违背单一职责。Additional Context
Kimi CLI 关键事实(已查阅官方文档):
pip install kimi-cli或uv tool install kimi-cli,二进制名kimi。kimi --print --output-format stream-json --prompt "<task>"。KIMI_API_KEY/KIMI_BASE_URL/KIMI_MODEL_NAME,覆盖配置文件里的api_key/base_url/model,不会写回~/.kimi/config.toml(这与 issue #33 的「凭据隔离」原则天然吻合,可作为 Kimi CLI 集成的基线)。--work-dir <path>(注意是--work-dir不是--workdir)。--yolo(自动批准所有 tool call)/--plan(先输出计划再执行)。kimi进入交互模式后/login完成 Moonshot 平台登录;后续~/.kimi/下会有持久化 token,WeSight 复用即可,不要主动改写。kimi_cli,未来需要再改。Kimi / Moonshot 在 WeSight 中已存在(
src/shared/providers/constants.tsL192-203),但那是作为模型供应商(api.kimi.com/coding),与「引擎」是两条正交轴;本 issue 只动引擎这一侧。与现有 issue 的关系:
kimi /login状态。~/.kimi/config.toml是用户文件,WeSight 不要写入自己的 API key 进去;通过KIMI_API_KEY等 env 注入到子进程即可。实现参考(for contributor):
src/main/libs/qwenCodeConfig.ts— 模型 provider 解析、env 构建、mergeQwenCodeConfigForWesightModel写法。src/main/libs/qwenCodeCliEvent.ts— 把外部 CLI 输出归一化到assistant_text/tool_use/tool_result/error四种 kind。src/main/libs/agentEngine/coworkEngineRouter.ts— 在RouterDeps和runtimeByEngine增加 Kimi CLI 条目。src/main/libs/agentEngine/externalCliRuntimeAdapter.ts— 仿照applyQwenCodeRuntimeConfig/handleQwenCodeEvent增加applyKimiCliRuntimeConfig/handleKimiCliEvent。src/renderer/services/i18n.ts中的coworkAgentEngineQwenCode*/coworkAgentQwenCodePermission*/coworkAgentQwenCodeSyncGlobal*三个 key 组。Checklist
kimi/KimiCLI/kimi_cli关键词,未命中引擎相关 issue;只有模型供应商侧的引用)