ACP整合
ACP是什么
了解什么是ACP
一、功能概述
ACP (Agent Client Protocol) 是一种标准化的 stdio 协议,允许 IDE 和编辑器通过 stdin/stdout 的 NDJSON 流驱动 AI Agent。Langcli 实现了完整的 ACP agent 端,可以被 Zed、Cursor、VScode 等支持 ACP 的客户端直接调用。
核心特性
- 会话管理:新建 / 恢复 / 加载 / 分叉 / 关闭会话
- 历史回放:恢复会话时自动加载并回放对话历史
- 权限桥接:ACP 客户端的权限决策映射到 Langcli 的工具权限系统
- 斜杠命令 & Skills:加载真实命令列表,支持
/commit、/review等 prompt 型 skill - Context Window 跟踪:精确的 usage_update,含 model prefix matching
- Prompt 排队:支持连续发送多条 prompt,自动排队处理
- 模式切换:auto / default / acceptEdits / plan / dontAsk / bypassPermissions
- 模型切换:运行时切换 AI 模型
二、架构
┌──────────────┐ NDJSON/stdio ┌─────────────────────-┐
│ Zed / IDE │ ◄────────────────► │ Langcli ACP Agent │
│ (Client) │ stdin / stdout │ (Agent) │
└──────────────┘ │ │
│ entry.ts │ ← stdio → NDJSON stream
│ agent.ts │ ← ACP protocol handler
│ bridge.ts │ ← SDKMessage → ACP SessionUpdate
│ permissions.ts │ ← 权限桥接
│ utils.ts │ ← 通用工具
│ │
│ QueryEngine │ ← 内部查询引擎
└──────────────────────┘三、ACP 协议支持矩阵
| 方法 | 状态 | 说明 |
|---|---|---|
initialize | ✅ | 返回 agent 信息和能力 |
authenticate | ✅ | 无需认证(自托管) |
newSession | ✅ | 创建新会话 |
resumeSession | ✅ | 恢复已有会话(含历史回放) |
loadSession | ✅ | 加载指定会话(含历史回放) |
listSessions | ✅ | 列出可用会话 |
forkSession | ✅ | 分叉会话 |
closeSession | ✅ | 关闭会话 |
prompt | ✅ | 发送消息,支持排队 |
cancel | ✅ | 取消当前/排队的 prompt |
setSessionMode | ✅ | 切换权限模式 |
setSessionModel | ✅ | 切换 AI 模型 |
setSessionConfigOption | ✅ | 动态修改配置 |
SessionUpdate 类型
| 类型 | 状态 | 说明 |
|---|---|---|
agent_message_chunk | ✅ | 助手文本消息 |
agent_thought_chunk | ✅ | 思考/推理内容 |
user_message_chunk | ✅ | 用户消息(历史回放) |
tool_call | ✅ | 工具调用开始 |
tool_call_update | ✅ | 工具调用结果/状态更新 |
usage_update | ✅ | token 用量 + context window |
plan | ✅ | TodoWrite → plan entries |
available_commands_update | ✅ | 斜杠命令 & skills 列表 |
current_mode_update | ✅ | 模式切换通知 |
config_option_update | ✅ | 配置更新通知 |
最后更新