Skip to content
FunCoding

Search

Search docs, Skills and MCP

Companion 插件接口与发现文件

为编辑器实现本地 MCP 服务、上下文通知和异步 diff 审阅。

This page has not been translated into English yet. The original Chinese version is shown below.

本页面向插件作者,依据官方标注更新于 2025-09-15 的 Companion 规范。它是本地 MCP/HTTP 接口,与 ACP stdio 接口不同;实现前应核对目标 CLI 版本。

本地服务与发现

插件启动 MCP HTTP 服务,监听动态端口(端口 0)。在 os.tmpdir()/gemini/ide/ 创建 gemini-ide-server-${PID}-${PORT}.json,PID 对应父 IDE 进程。

发现文件包含 port、workspacePath、authToken、ideInfo。workspacePath 是绝对工作区根列表,Linux/macOS 用冒号、Windows 用分号分隔;CLI 验证当前目录属于其中一个工作区。

每次请求认证

插件生成唯一秘密 authToken,CLI 在请求中发送 Authorization Bearer。服务必须逐次验证并拒绝未授权请求。示例 token 只是占位,不能在实际插件复用固定值。

推荐同时给集成终端设置 GEMINI_CLI_IDE_SERVER_PORT,作为同工作区多窗口选择依据;发现文件仍是主要机制。

上下文通知

ide/contextUpdate 可在文件打开、关闭、聚焦、光标或选区变化时发送,规范建议 50ms debounce。workspaceState 可含 openFiles 和 isTrusted。

文件含绝对 path、最近聚焦 Unix timestamp、可选 isActive、cursor 与 selectedText。cursor 行列均一基;只发送磁盘存在文件,排除无路径草稿和设置页等虚拟文档。

CLI 按 timestamp 排序,只保留最近文件的活动光标/选区,再截断为 10 文件和 16KB 选区。插件也应限制输入量。

Diff 工具

openDiff 接收 filePath 与 newContent,成功立即返回 content: [],失败返回 isError 和文字。立即返回只确认视图打开,不表示用户接受。

closeDiff 接收 filePath,成功返回关闭前最终内容的单个 TextContent;失败同样给错误。

异步接受与拒绝

用户接受后发送 ide/diffAccepted,载荷含 filePath 与最终 content,必须包含用户在 diff 中的手工修改。拒绝发送 ide/diffRejected 和 filePath。不能把最初 newContent 当成所有接受结果。

生命周期

激活时先启动服务再建立发现文件;停用时停止服务并删除文件。残留文件会影响后续发现,清理逻辑应随插件生命周期处理。