# AI CLI Plugin 规格说明(vite-plugins/aiCliPlugin.ts) 本插件在 Vite Dev Server 上提供 `/api/ai/*` HTTP 接口,用于从浏览器侧触发本机已安装的 AI CLI(Claude / Gemini / OpenCode / Cursor Agent / Codex)。 ## 1. 端点 ### 1.1 `GET /api/ai/status` 返回当前机器上相关 CLI 是否可用(通过 `which/where` 检测)。 返回示例: ```json { "claude": true, "gemini": true, "opencode": false, "cursor": true, "codex": true, "runningTasks": 0, "timestamp": "2026-02-06T00:00:00.000Z" } ``` ### 1.2 `GET /api/ai/execute` 触发执行指定 CLI。 #### Query 参数 - `cli`(必填):`claude` | `gemini` | `opencode` | `cursor` | `codex` - `prompt`(必填):字符串 - `silent`(可选):默认 `true` - `true`:服务端捕获 stdout/stderr 并以 JSON 返回(非交互模式推荐) - `false`:输出直接继承到 dev server 所在终端(用于观察实时输出) - `interactive`(可选):默认 `false` - `false`:非交互模式,接口会等待命令结束并返回输出(内置 60s 超时) - `true`:交互式 TUI,会在 dev server 所在终端启动会话,并立即返回 `202`(不等待退出,不设置超时) #### 返回 非交互模式(`interactive=false`)成功示例: ```json { "success": true, "cli": "codex", "output": "...", "cached": false, "timestamp": "2026-02-06T00:00:00.000Z" } ``` 交互模式(`interactive=true`)成功示例: ```json { "success": true, "cli": "claude", "interactive": true, "pid": 12345, "message": "Interactive session started in the dev server terminal.", "timestamp": "2026-02-06T00:00:00.000Z" } ``` 当已有交互会话正在运行时会返回 `409`(避免同时抢占同一个终端 TTY)。 ## 2. CLI 行为约定(适配器) - `claude` - 非交互:`claude -p ` - 交互:`claude `(首条消息为 prompt) - `gemini` - 非交互:通过 stdin 写入 prompt - 交互:`gemini -i ` - `opencode` - 非交互:`opencode run ` - 交互:`opencode --prompt `(不同版本可能不支持;不支持时会在启动时报错) - `cursor` - 非交互:`agent -p --output-format text` - 交互:`agent ` - `codex` - 非交互:`codex exec --full-auto` - 交互:`codex ` ## 3. 设计备注 - `interactive=true` 的核心目的是“提交 prompt 后进入 CLI 对话”,因此不会等待进程退出,也不会走输出缓存/防抖逻辑。 - 所有平台均使用 `shell=false`;Windows 通过统一命令执行层自动包装到 `cmd.exe /d /s /c`,避免直接开启 shell 带来的注入与转义不一致问题。 - 输出解码由统一命令执行层处理:UTF-8 优先,Windows 下自动按活动代码页回退,避免 CLI 输出乱码影响日志和错误判定。