本文为社区中文翻译(依据 MIT 协议),阅读英文原文 →。译文可能滞后于上游更新。

RPC 模式

Node.js/TypeScript 用户请注意:如果你在写 Node.js 应用,优先考虑直接使用 @earendil-works/pi-coding-agentAgentSession,而不是派生子进程。基于子进程的 TypeScript 客户端可参考 src/modes/rpc/rpc-client.ts

本文为结构化中文编译版;完整命令/事件负载与类型见英文原文

启动 RPC 模式

pi --mode rpc

常用选项:

协议概览

所有命令都支持可选 id 字段用于请求/响应关联;对应响应会带相同 idbash_execution_update 事件也带其来源 bash 命令的 id

RPC 模式使用严格的 JSONL 语义,只以 LF(\n)作为记录分隔符:

特别地,Node 的 readline 不符合 RPC 协议——它还会按 U+2028U+2029 切分,而这两个字符在 JSON 字符串里是合法的。

命令

提示类

prompt

向智能体发送用户提示词。响应在提示词被接受、排队或处理后发出;事件在接受之后继续异步流式输出。可带 imagesImageContent 格式:{"type": "image", "data": "base64...", "mimeType": "image/png"})。

流式期间:智能体正在流式输出时必须指定 streamingBehavior

流式期间未指定该选项时命令返回错误。

扩展命令(如 /mycommand)即使在流式期间也立即执行,其 LLM 交互由扩展经 pi.sendMessage() 自行管理。技能命令(/skill:名称)与提示词模板在发送/排队前展开。

success: true 表示提示词被接受、排队或立即处理;success: false 表示接受前被拒绝。接受之后的失败走正常事件与消息流,不会对同一请求 id 再发第二条 response

steer / followUp

智能体运行中排队引导消息(steer)或结束后投递的追问消息(followUp)。技能命令与模板会展开;steer 不允许扩展命令(请用 prompt)。

状态类

模型与思考

压缩与重试

Bash

会话

命令枚举

事件

事件类型

事件 说明
agent_start / agent_end 智能体运行开始/结束
agent_settled 智能体完全空闲(队列清空)
turn_start / turn_end 回合开始/结束
message_start / message_end 消息开始/结束
message_update 流式增量更新(文本/思考/工具调用增量)
bash_execution_update 用户 bash 命令的流式输出
tool_execution_start / tool_execution_update / tool_execution_end 工具执行生命周期
queue_update 引导/追问队列变化
compaction_start / compaction_end 压缩开始/结束
auto_retry_start / auto_retry_end 智能体级自动重试开始/结束
summarization_retry_scheduled / summarization_retry_attempt_start / summarization_retry_finished 摘要重试生命周期
extension_error 扩展错误上报

扩展 UI 协议

扩展的自定义 UI 在 RPC 模式下经协议转发:stdout 发出扩展 UI 请求(选择、确认、输入等),客户端以对应响应(stdin)回答。请求/响应负载与交互序列见英文原文的 Extension UI Protocol 一节。

错误处理

命令失败时响应带 success: false 与错误信息;接受后的运行失败经事件流报告。

类型

RPC 载荷复用会话消息类型(ModelUserMessageAssistantMessageToolResultMessageBashExecutionMessage),与会话格式一致;完整 TypeScript 定义见英文原文。