【RPI 更新】把 rpi Agent 装进你的zed 编辑器
内容提要
rpi-acp 是让 Zed 通过 ACP 协议调用 rpi 的桥接扩展:它接管 stdio,为每个会话启动 rpi --mode rpc 子进程,模型与工具均在子进程运行;事件映射为 ACP 更新,会话以 JSONL 持久化并支持恢复重放;权限弹窗转为标准请求,多选问题经 _meta 协商;可安装注册到 Zed,也可编译为独立二进制。
延伸解读
桥接层不跑模型,行为与终端一致
rpi-acp 作为 cdylib 扩展,只负责抢占 stdio、实现 ACP v1 协议,并为每个会话启动一个 rpi --mode rpc 子进程。模型、工具、认证和技能全部在子进程中运行,因此通过 Zed 使用 rpi 与直接在终端运行 rpi 的行为完全一致,不会因编辑器集成而改变核心逻辑。
会话持久化与恢复机制
会话使用稳定 UUID,历史以原生 JSONL 格式保存在 ~/.rpi/agent/acp/sessions 目录,可通过 RPI_ACP_SESSION_DIR 覆盖。进程退出后历史仍在,session/load 会恢复并重放,session/resume 只恢复不重放。未知会话会返回错误,不会静默开启空对话,避免误操作导致上下文丢失。
权限与多选问题的处理方式
插件弹窗(如 bash 确认)被映射为标准 session/request_permission 请求,用户选择会回传给插件,默认启用 --permission-gate。由于 ACP v1 没有通用多选方法,双方在 initialize 阶段通过 _meta 协商,只有声明支持 v1 的客户端才会收到 _rpi/request_question,超时默认 300 秒,并用 _rpi/dialog_closed 通知回收 UI。
安装与独立二进制选项
可通过 rpi install rpi-acp 或 task install 安装,并在 Zed 的 settings.json 中配置 agent_servers 指向 rpi --acp,args 可透传普通 flag。--acp 会自动注册到 Zed,幂等且保留 JSONC 注释,设置 RPI_ACP_NO_AUTO_REGISTER_ZED=1 可关闭。同一 server 也可编译为独立二进制 rpi-acp-bridge,直接拥有 stdin/stdout,无需 ownsStdio,并能对着 stock
Q&A
rpi-acp 是什么?它有什么作用?
rpi-acp 是一个桥接扩展,让 Zed 编辑器通过 ACP 协议调用 rpi。它接管 stdio,为每个会话启动一个 rpi --mode rpc 子进程,模型和工具都在子进程中运行,行为与终端中运行 rpi 一致。
rpi-acp 如何解决 stdio 被宿主抢占的问题?
当带 --acp 参数时,扩展在注册阶段声明 {"ownsStdio": true},宿主随即停止 drain stdin,改走 StdioLifecycle,将 stdin/stdout 交给扩展。从终端直接运行 --acp 会快速失败(一条消息 + exit 2)。
rpi-acp 的事件映射规则是什么?
rpi RPC 事件映射为 ACP 更新:text_delta/thinking_delta 映射为 agent_message_chunk/agent_thought_chunk;tool_execution_start 映射为 tool_call(edit/write 带 diff);tool_execution_update/_end 映射为 tool_call_update;plan_mode_complete 映射为 plan;outcome aborted/completed 映射为 stopReason: cancelled/end_turn。流式文本用累积快照 + finalText 去重。
rpi-acp 的会话持久化是如何工作的?
会话使用稳定 UUID,原生 JSONL 历史保存在 ~/.rpi/agent/acp/sessions(可用 RPI_ACP_SESSION_DIR 覆盖),进程退出后仍存在。session/load 恢复并重放,session/resume 恢复但不重放。未知会话返回错误,不会静默开空对话。
rpi-acp 如何处理权限请求和多选问题?
权限:插件弹窗(如 bash 确认)映射成标准 session/request_permission,用户选择回传插件,默认带 --permission-gate。问题:ACP v1 没有通用多选方法,双方在 initialize 里用 _meta: {"pi-rust/questions": 1} 协商,只有广告了 v1 的客户端才收到 _rpi/request_question,超时默认 300s,配套 _rpi/dialog_closed 通知回收 UI。
如何安装和配置 rpi-acp 到 Zed 编辑器?
运行 rpi install rpi-acp 或 task install 安装。在 Zed 的 settings.json 中添加:{ "agent_servers": { "rpi": { "type": "custom", "command": "rpi", "args": ["--acp"] } } }。args 可透传普通 flag,如 ["--acp", "--model", "gateway/model"]。--acp 会自动注册到 Zed(幂等、原子写、保留 JSONC 注释),设 RPI_ACP_NO_AUTO_REGISTER_ZED=1 可关闭自动注册。
rpi-acp-bridge 独立二进制是什么?如何构建?
rpi-acp-bridge 是同样的 server 编译成的独立二进制,原生拥有 stdin/stdout,不需要 ownsStdio,可直接对着 stock rpi 运行。查找 agent 的顺序:RPI_BIN → 自身 → 兄弟文件 → PATH。构建命令:cargo build --release -p rpi-acp --bin rpi-acp-bridge,打包用 task pack-acp。