概述
Pi agent 已经能被识别(/api/agents 返回 available: true),但调用时抛出 UnsupportedAgentProtocolError,因为 pi-rpc 协议尚未实现。
这是与 ACP 协议(Hermes/Kimi/Devin 等)同类的问题,但 Pi 使用的是独立的 pi-rpc 协议,需要单独实现。
当前状态
/api/agents 返回片段
{
"id": "pi",
"label": "Pi",
"vendor": "Inflection",
"protocol": "pi-rpc",
"models": [
{"id": "default", "label": "Default (CLI config)"},
{"id": "anthropic/claude-sonnet-4-5", "label": "Claude Sonnet 4.5"},
{"id": "anthropic/claude-opus-4-5", "label": "Claude Opus 4.5"},
{"id": "openai/gpt-5", "label": "GPT-5"},
{"id": "google/gemini-2.5-pro", "label": "Gemini 2.5 Pro"}
],
"unsupported": true,
"available": true,
"path": "/home/bewg/.local/share/fnm/node-versions/v24.18.0/installation/bin/pi",
"resolvedBin": "pi"
}
错误信息
调用 Pi 时返回:
pi uses the pi-rpc protocol, which is not yet wired up in this build.
Pick one of: claude / codex / cursor-agent / gemini / copilot / opencode / qwen / qoder / codewhale / deepseek-tui / aider.
后台日志
POST /api/convert 200 in 21ms
21ms 返回是因为 buildArgv 阶段就抛出了 UnsupportedAgentProtocolError,没有真正调用 Pi。
Pi 版本信息
$ pi --version
0.82.0
$ which pi
/home/bewg/.local/share/fnm/node-versions/v24.18.0/installation/bin/pi
$ file $(which pi)
symbolic link to ../lib/node_modules/@earendil-works/pi-coding-agent/dist/cli.js
Pi 非交互模式测试(关键信息)
Pi 支持非交互模式,类似于 Claude 的 -p 参数:
# 测试 1:简单输入
$ echo "hello" | pi -p
你好!👋
我是 MiMo-v2.5,由小米大模型核心团队开发的 AI 助手。
有什么我可以帮你的吗?无论是代码编写、文件操作、问题调研,还是其他任何事情,随时告诉我!😊
# 测试 2:JSON 输出格式
$ echo "hello" | pi -p --mode json
[NDJSON 输出,包含 message_update、message_end、turn_end、agent_end 等事件]
Pi 支持的关键参数
--print, -p # 非交互模式:处理提示后退出
--mode <mode> # 输出模式:text (默认), json, 或 rpc
--model <pattern> # 模式或 ID(支持 "provider/id" 和可选的 ":<thinking>")
--provider <name> # 提供商名称(默认:google)
--system-prompt <text> # 系统提示(默认:编码助手提示)
--no-tools, -nt # 默认禁用所有工具
--tools, -t <tools> # 逗号分隔的工具名称白名单
Pi 的 JSON 输出格式
Pi 的 --mode json 输出是 NDJSON(换行分隔的 JSON),主要事件类型:
{"type":"message_update","assistantMessageEvent":{"type":"text_delta","contentIndex":1,"delta":"你好!很高兴见到你。有什么我可以帮忙的吗?",...}}
{"type":"message_end","message":{...},"toolResults":[]}
{"type":"turn_end","message":{...},"toolResults":[]}
{"type":"agent_end","messages":[...],"willRetry":false}
实现建议
方案 A:使用 --mode json(推荐)
pi -p --mode json --model <model> "prompt"
- 输出格式:NDJSON(换行分隔的 JSON)
- 与 Claude 的
stream-json 类似,但事件结构不同
- 需要解析
message_update 事件中的 text_delta
方案 B:使用默认文本模式
pi -p --model <model> "prompt"
需要修改的文件
src/lib/agents/detect.ts - 移除 unsupported: true 标记
src/lib/agents/argv.ts - 实现 pi-rpc 协议的 buildArgv 和解析器
src/lib/agents/invoke.ts - 处理 Pi 的 NDJSON 输出
参考
期望输出
实现后,用户可以选择 Pi 作为 agent,正常进行 HTML 转换。
概述
Pi agent 已经能被识别(
/api/agents返回available: true),但调用时抛出UnsupportedAgentProtocolError,因为pi-rpc协议尚未实现。这是与 ACP 协议(Hermes/Kimi/Devin 等)同类的问题,但 Pi 使用的是独立的
pi-rpc协议,需要单独实现。当前状态
/api/agents 返回片段
{ "id": "pi", "label": "Pi", "vendor": "Inflection", "protocol": "pi-rpc", "models": [ {"id": "default", "label": "Default (CLI config)"}, {"id": "anthropic/claude-sonnet-4-5", "label": "Claude Sonnet 4.5"}, {"id": "anthropic/claude-opus-4-5", "label": "Claude Opus 4.5"}, {"id": "openai/gpt-5", "label": "GPT-5"}, {"id": "google/gemini-2.5-pro", "label": "Gemini 2.5 Pro"} ], "unsupported": true, "available": true, "path": "/home/bewg/.local/share/fnm/node-versions/v24.18.0/installation/bin/pi", "resolvedBin": "pi" }错误信息
调用 Pi 时返回:
后台日志
21ms 返回是因为
buildArgv阶段就抛出了UnsupportedAgentProtocolError,没有真正调用 Pi。Pi 版本信息
$ pi --version 0.82.0 $ which pi /home/bewg/.local/share/fnm/node-versions/v24.18.0/installation/bin/pi $ file $(which pi) symbolic link to ../lib/node_modules/@earendil-works/pi-coding-agent/dist/cli.jsPi 非交互模式测试(关键信息)
Pi 支持非交互模式,类似于 Claude 的
-p参数:Pi 支持的关键参数
Pi 的 JSON 输出格式
Pi 的
--mode json输出是 NDJSON(换行分隔的 JSON),主要事件类型:{"type":"message_update","assistantMessageEvent":{"type":"text_delta","contentIndex":1,"delta":"你好!很高兴见到你。有什么我可以帮忙的吗?",...}} {"type":"message_end","message":{...},"toolResults":[]} {"type":"turn_end","message":{...},"toolResults":[]} {"type":"agent_end","messages":[...],"willRetry":false}实现建议
方案 A:使用
--mode json(推荐)stream-json类似,但事件结构不同message_update事件中的text_delta方案 B:使用默认文本模式
需要修改的文件
src/lib/agents/detect.ts- 移除unsupported: true标记src/lib/agents/argv.ts- 实现pi-rpc协议的buildArgv和解析器src/lib/agents/invoke.ts- 处理 Pi 的 NDJSON 输出参考
pi --help期望输出
实现后,用户可以选择 Pi 作为 agent,正常进行 HTML 转换。