背景
随着把外部 agent 通过 ACP 接入(opencode / claude-code / codex,以及 #963 新增的 omp),BitFun 已经是一个 ACP host/client 。但目前实现的是 ACP V1 的一个可用子集 ,并非完整标准协议。本 issue 跟踪"补全到完整 ACP host"的差距与优先级。
相关:#963 (omp via ACP)、#931 (自定义多运行时方案,建议关闭、改走 ACP)。
现状基线(client 侧,ProtocolVersion::V1)
已实现:
initialize + client_info
session/new load resume prompt cancel close
session/set_model
agent→client 回调:session/request_permission(唯一实现的回调)
流式 session/update:AgentMessageChunk / AgentThoughtChunk / ToolCall / ToolCallUpdate / UsageUpdate
关键限制:InitializeRequest 传的是 ClientCapabilities::new() —— fs、terminal 能力均未声明 (默认 false)。因此外部 agent 不会 把文件读写 / shell 回调给 BitFun,而是在自己进程里直接执行(BitFun 仅把 cwd 设为 workspace)。stream.rs 也只处理上述 5 种 SessionUpdate,其余变体收到即丢弃。
差距清单(按优先级)
P0 — 宿主能力核心:fs + terminal(价值最高,远程场景刚需)
声明并实现后,agent 的文件/shell 才会经 BitFun 中介(沙箱 / 审批 / 远程 SSH workspace),而非自管黑盒。
P1 — 交互体验(低成本,体感明显)
P2 — 会话控制面(按需)
P3 — 边缘/条件性
建议路线
先做 P1 的 AvailableCommandsUpdate + / 命令菜单(成本最低,和刚接入的 omp 直接相关,可作为 feat(acp): add Oh My Pi (omp) as a built-in ACP agent #963 后续小 PR)。
再评估 P0(完整宿主的实质门槛,成本最高;需先决定产品上是否要中介 agent 的所有工具 I/O —— 对远程是刚需,对本地是增强)。建议单独立项。
P2/P3 按实际需求排期。
备注
"完整标准 ACP" 的权威类型面来自依赖 agent-client-protocol = 0.11.1(schema 0.12.0)。本清单按其 SessionUpdate 变体与 client/agent 方法集对照得出。
背景
随着把外部 agent 通过 ACP 接入(opencode / claude-code / codex,以及 #963 新增的 omp),BitFun 已经是一个 ACP host/client。但目前实现的是 ACP V1 的一个可用子集,并非完整标准协议。本 issue 跟踪"补全到完整 ACP host"的差距与优先级。
相关:#963(omp via ACP)、#931(自定义多运行时方案,建议关闭、改走 ACP)。
现状基线(client 侧,
ProtocolVersion::V1)已实现:
initialize+ client_infosession/newloadresumepromptcancelclosesession/set_modelsession/request_permission(唯一实现的回调)session/update:AgentMessageChunk/AgentThoughtChunk/ToolCall/ToolCallUpdate/UsageUpdate关键限制:
InitializeRequest传的是ClientCapabilities::new()—— fs、terminal 能力均未声明(默认 false)。因此外部 agent 不会把文件读写 / shell 回调给 BitFun,而是在自己进程里直接执行(BitFun 仅把 cwd 设为 workspace)。stream.rs也只处理上述 5 种 SessionUpdate,其余变体收到即丢弃。差距清单(按优先级)
P0 — 宿主能力核心:fs + terminal(价值最高,远程场景刚需)
声明并实现后,agent 的文件/shell 才会经 BitFun 中介(沙箱 / 审批 / 远程 SSH workspace),而非自管黑盒。
ClientCapabilities.fs(readTextFile / writeTextFile)+ 实现fs/read_text_file、fs/write_text_file回调,路由到 BitFun workspace fs(含远程 SSH)ClientCapabilities.terminal+ 实现terminal/create·output·wait_for_exit·kill·release,接 BitFun 终端/进程基础设施src/crates/acp/src/client/manager.rs(initialize)+ 新增回调 handlerrequest_permission已实现,P0 完成后形成"agent 动手前问 BitFun + 动手经 BitFun"闭环。远程 workspace 必须靠 fs 回调才能让 agent 读写远端文件。P1 — 交互体验(低成本,体感明显)
AvailableCommandsUpdate:stream.rs加分支,把 agent 广播的命令列表喂前端 →/slash 补全菜单Plan(SessionUpdate):渲染 agent 的执行计划(ACP agent-plan)src/crates/acp/src/client/stream.rs+ 前端P2 — 会话控制面(按需)
session/set_mode+CurrentModeUpdate(模式切换)session/set_config_option+ConfigOptionUpdate(会话级配置)SessionInfoUpdate(agent 回写标题/元数据)P3 — 边缘/条件性
authenticate+ auth capabilities(仅当某 agent 在 initialize 要求鉴权时)session/listsession/fork(使用 agent 端会话管理/分叉时)UserMessageChunk(宿主一般不需要)建议路线
AvailableCommandsUpdate+/命令菜单(成本最低,和刚接入的 omp 直接相关,可作为 feat(acp): add Oh My Pi (omp) as a built-in ACP agent #963 后续小 PR)。备注
"完整标准 ACP" 的权威类型面来自依赖
agent-client-protocol = 0.11.1(schema 0.12.0)。本清单按其SessionUpdate变体与 client/agent 方法集对照得出。