Skip to main content

ACP WebSocket 协议

/ws/agent/acp — 通过 WebSocket 暴露 Viben Gateway 的 ACP 兼容智能体端点

概述

/ws/agent/acp 是 Viben Gateway 面向 ACP Client 的实时协议入口。客户端连接后,通过 JSON-RPC 2.0 调用 initializesession/newsession/prompt 等 ACP 方法;Gateway 在内部启动或复用底层 ACP Backend(例如 Claude Code、Gemini、Codex、OpenCode 等),并把后端的 session/update、权限请求和客户端工具调用转发回客户端。

该端点和 /ws/agent/run 的职责不同:

端点协议适用场景
/ws/agent/runViben 自定义消息格式Viben Web/Desktop 旧执行流,消息以 type 区分
/ws/agent/acpACP JSON-RPC 2.0ACP UI、外部编辑器、可互操作 Agent Client

连接信息

GET /ws/agent/acp

WebSocket Upgrade 后,连接上的每个文本帧承载一个或多个 JSON-RPC 消息。Gateway 写出时始终使用换行分隔 JSON 帧;读取时同时支持:

  • 单个文本帧就是一个完整 JSON 对象。
  • 一个文本帧包含多行 NDJSON,每一行是一个完整 JSON 对象。

查询参数:

参数类型必需说明
cwdstring会话工作目录;未提供时使用 Gateway 进程当前目录
agent_config_pathstring智能体 Markdown 配置文件路径
agent_dirstring会话持久化读取智能体目录时使用
session_idstringViben 外层持久化会话 ID
task_idstringViben 外层任务 ID
gateway_urlstring注入给后端 MCP/工具的 Gateway 地址

示例:

ws://127.0.0.1:18790/ws/agent/acp?cwd=/repo&agent_config_path=/repo/.viben/agents/coder/AGENTS.md&session_id=sess_1&task_id=task_1

子协议: 客户端可以声明 acp.v1 子协议。Gateway 当前不依赖子协议完成路由,协议版本以 initializeprotocolVersion 为准。


JSON-RPC 基础格式

所有消息都必须是 JSON-RPC 2.0 对象。

请求:

{
"jsonrpc": "2.0",
"id": 1,
"method": "session/prompt",
"params": {}
}

响应:

{
"jsonrpc": "2.0",
"id": 1,
"result": {}
}

通知:

{
"jsonrpc": "2.0",
"method": "session/cancel",
"params": {
"sessionId": "acp-session-id"
}
}

错误码:

code含义典型来源
-32700Parse errorWebSocket 收到不可解析 JSON
-32600Invalid requestJSON-RPC 对象结构非法
-32601Method not found调用了未实现方法
-32602Invalid params参数缺失或 schema 校验失败
-32603Internal error后端执行器启动、运行或工具调用失败
-32000Authentication requiredACP 后端要求认证时可能返回
-32002Resource not found文件或资源不存在时可能返回

方法总览

Client → Gateway 请求

方法JSON-RPC 类型说明
initializerequest协商 ACP 版本、能力和认证方式
authenticaterequest认证(当前返回空对象)
session/newrequest创建 Viben 外层 ACP 会话
session/loadrequest复用或加载指定外层 ACP 会话
session/listrequest列出当前 Gateway 进程内 ACP 会话
session/closerequest关闭外层会话并释放后端进程
session/promptrequest发送一轮用户 prompt
session/prompt/steerrequest会话忙碌时立即入队一条 steer prompt(Viben 扩展)
session/prompt/cancelrequest取消尚未消费的 steer prompt(Viben 扩展)
session/prompt/viewrequest查看 steer prompt 队列记录(Viben 扩展)
session/interruptrequest/notification中断当前执行(Viben 扩展)
session/cancelnotification取消指定会话当前运行 prompt 和排队 prompt

Gateway → Client 请求或通知

方法JSON-RPC 类型触发条件说明
session/updatenotification后端产生流式内容、工具调用、计划、用量等更新客户端必须按 sessionId 归并到对应会话
session/prompt/consumednotificationGateway 消费 queued steer promptViben 扩展通知
session/elicitationrequest后端需要结构化用户输入、问题回答或计划确认客户端返回 accept/decline/cancel 和表单内容
session/request_permissionrequest后端执行敏感工具前需要用户授权客户端必须返回 selected 或 cancelled
_viben/client_tool_callrequest后端请求客户端侧工具Viben 扩展方法

心跳

客户端可以发送 JSON-RPC 通知 $/ping 作为应用层心跳:

{"jsonrpc":"2.0","method":"$/ping"}

initialize

客户端连接后必须先调用 initialize

请求:

{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": 1,
"clientInfo": {
"name": "acp-ui",
"version": "1.0.0"
},
"clientCapabilities": {
"fs": {
"readTextFile": false,
"writeTextFile": false
},
"terminal": false,
"_meta": {
"_vibenClientTools": true
}
}
}
}

会话管理

session/new — 创建会话

创建新的 ACP 会话。可指定 cwd 工作目录和 agentConfigPath 配置文件路径。

session/load — 加载会话

复用已存在的 ACP 会话,恢复之前的上下文。

session/close — 关闭会话

关闭会话并释放后端进程资源。

session/list — 列出会话

列出当前 Gateway 进程内的所有活跃 ACP 会话。

会话交互

session/prompt — 发送提示

发送一轮用户 prompt 给 Agent。Gateway 会启动后端执行,执行完成后返回结果。

session/prompt/steer — 引导提示(Viben 扩展)

在会话忙碌时,将一条 steer prompt 入队,待当前执行完成后自动作为下一轮 prompt 执行。

session/cancel — 取消会话

取消指定会话的当前运行 prompt 和所有排队 prompt。

参考

  • 规范文件: docs/specs/modules/gateway/acp.md
  • 相关路由: Gateway 总览