Skip to content

[Feature] 增加 Kimi CLI 作为 Cowork Agent 引擎 #34

@stephenlzc

Description

@stephenlzc

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 跑图形化工作流,只能:

  1. claude_code / opencode 引擎 + 选 Moonshot/Kimi 作为模型供应商——但这仅借用了模型,丢失了 Kimi CLI 原生的工具流、--yolo / --plan 模式、/login 鉴权、ACP server 集成等特性,体验差很多。
  2. 完全脱离 WeSight,在终端里直接跑 kimi——放弃图形化工作流和 IM 通道(飞书/钉钉/Telegram 等)联动。

期望:把 Kimi CLI 作为一等公民引擎接入,享受和 Qwen Code / DeepSeek-TUI 一样的安装检测、模型配置、权限弹窗、会话管理、IM 通道联动。

Proposed Solution

参考 Qwen Code 的集成范式(已经跑通「WeSight 模型 ↔ 本机 CLI」双配置源),新增 kimi_cli 引擎。核心要点:

  • 常量与类型:在 src/shared/cowork/constants.tsCoworkAgentEngine 中加入 KimiCli: 'kimi_cli',并补齐 KimiCliPermissionModeautokimi --yoloconservativekimi --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 --versionpip install kimi-cli / uv tool install kimi-cli 一键安装),i18n 中英双语补全相关 key。
  • 文档README_zh.md 第 23、59、89、107-113、354 行增加 Kimi CLI。

验收标准:

  • CoworkAgentEngine.KimiCli 常量与守卫函数就位,所有 isCoworkAgentEngine 消费者编译通过。
  • 「WeSight 模型」来源下选 kimi-k2.5 + Kimi CLI 引擎,能正常发起会话、流式输出、收到 complete 事件。
  • 「本机 CLI」来源下复用 ~/.kimi/config.toml 的现有配置和登录态,不破坏用户文件、不写入 WeSight 自己的 key。
  • KimiCliPermissionMode.Autokimi --yoloConservativekimi --plan 行为一致;conservative 模式下权限弹窗正确弹出。
  • 单测:与 qwenCodeConfig.test.ts / qwenCodeCliEvent.test.ts 同等覆盖的 vitest 用例。
  • 文档、致谢区、CHANGELOG 同步。

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-cliuv 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

  • I have searched for existing feature requests(搜过 kimi / KimiCLI / kimi_cli 关键词,未命中引擎相关 issue;只有模型供应商侧的引用)
  • This feature would be useful to other users(国内 Moonshot/Kimi 用户群体庞大;与 Qwen Code 同属「中文模型原生 CLI」类别)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions