Skip to content

Commit 9705b6b

Browse files
committed
feat(acp-bridge): 事件驱动真流式 + 新版协议方法对齐
与 ZCode 3.1.4 (CLI 0.14.8) 新版事件推送机制对齐, 解决 ACP bridge 的「伪流式」痛点, 并暴露新版协议方法。 核心改造: - ZCodeBackend: 从同步 readline 改为后台 reader 线程分发消息 (响应 → Queue; session/event → listener; notification → 通用队列) - 新增 EventStreamListener: 订阅 session/subscribe 事件流, 维护 seq 游标 - 新增 EventTranslator: model.streaming → TextDelta (真流式逐段推送), tool.updated → ToolCallNew/Update (实时工具状态) - _on_session_prompt 双模式: 优先事件驱动 (真流式), subscribe 失败 自动降级轮询 session/read (伪流式兼容旧版) - 5 个扩展方法 (非标准 ACP): session/fork, rewind, goal, compact, steer 测试: - test_event_translator.py: 15 项 EventTranslator 翻译逻辑单测 - test_projection_differ.py: 14 项 (现有, 不受影响) - 端到端验证: 真流式文本分 2-5 段到达, 工具调用实时状态推送 文档: - README: 双模式说明 + 扩展方法表 + 限制更新 - agent-help: acp_methods/events 同步标注 - CI: 增加 event translator 测试 job
1 parent 8c7a360 commit 9705b6b

5 files changed

Lines changed: 872 additions & 83 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,12 @@ jobs:
6565
python-version: ${{ matrix.python-version }}
6666

6767
# 测试用 stdlib unittest, 无需安装任何依赖
68-
- name: Run tests
68+
- name: Run tests (projection differ)
6969
run: python3 tests/test_projection_differ.py -v
7070

71+
- name: Run tests (event translator)
72+
run: python3 tests/test_event_translator.py -v
73+
7174
perms:
7275
name: Executable bit check
7376
runs-on: ubuntu-latest

README.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,32 @@ zcode --prompt "继续" --resume sess_xxxx
116116
|----------|:----:|
117117
| initialize / session/new / session/prompt / session/cancel ||
118118
| session/list / session/resume ||
119-
| tool_call / tool_call_update(工具调用展示)||
119+
| tool_call / tool_call_update(工具调用展示)|实时 |
120120
| usage_update(token 用量)||
121-
| agent_message_chunk(文本输出)||
122-
| agent_thought_chunk(思考过程)| ⚠️ 代码就位,GLM-5.2 不产数据 |
121+
| agent_message_chunk(文本输出)|**真流式**(0.14.8+)|
122+
| agent_thought_chunk(思考过程)| ✅ 流式(GLM-5-Turbo)|
123123
| plan(任务清单)| ⚠️ 代码就位,数据驱动 |
124124
| diff(文件变更)| ⚠️ 仅文件名,无 diff 内容 |
125125

126+
#### 双模式自动降级
127+
128+
ACP bridge 支持**事件驱动**(真流式)和**轮询**(伪流式)两种模式,自动选择:
129+
130+
- **事件驱动模式**(ZCode CLI ≥ 0.14.8):通过 `session/subscribe` 订阅事件流,`model.streaming` 事件携带 `text_delta` 逐段推送,实现**真正的流式文本输出**。工具调用状态也实时推送(scheduled → started → progress → result)。
131+
- **轮询模式**(旧版 CLI 或订阅失败):自动降级为轮询 `session/read`,turn 完成后整段发文本(伪流式)。
132+
133+
#### 扩展方法(非标准 ACP)
134+
135+
ACP bridge 额外暴露了 ZCode 新版(0.14.8+)的协议方法,供编辑器/脚本调用:
136+
137+
| 扩展方法 | 作用 | params |
138+
|----------|------|--------|
139+
| `session/fork` | 从 checkpoint 分叉新会话 | `{sessionId, target?}` |
140+
| `session/rewind` | 回退工作区文件到 checkpoint | `{sessionId, target?, expectedRevision?}` |
141+
| `session/goal` | 读取/设置 session 目标 | `{sessionId, action: show\|set\|replace\|clear, objective?}` |
142+
| `session/compact` | 压缩对话上下文 | `{sessionId}` |
143+
| `session/steer` | turn 进行中追加指令 | `{sessionId, content}` |
144+
126145
## 会话存储
127146

128147
`--prompt` 和 ACP bridge **共享同一套会话存储**`~/.zcode/cli/db/db.sqlite`),互通互恢复:
@@ -135,7 +154,7 @@ zcode --prompt "继续" --resume sess_xxxx
135154

136155
1. **依赖闭源软件**:必须先安装 ZCode。ZCode 升级可能随时破坏本项目(协议字段靠逆向确认,无官方保证)。
137156
2. **工具调用 turn 不稳定**:ZCode app-server 的工具调用 turn 时长在 38s~100s+ 波动,有时不完成。
138-
3. **流式是伪流式**:ZCode 是快照式架构(turn 期间不推送中间事件),ACP bridge 的流式文本是 turn 完成后整段发。
157+
3. **流式输出**:ZCode CLI ≥ 0.14.8 支持事件推送(`session/subscribe`),ACP bridge 在此版本下实现**真流式**(逐段推送);旧版自动降级为伪流式(turn 完成后整段发
139158
4. **diff 无内容**:ZCode 协议层不暴露 oldText/newText,只能列文件名。
140159
5. **GLM-5.2 无推理输出**:思考过程(agent_thought_chunk)在 GLM-5.2 下不触发,需 GLM-5-Turbo。
141160
6. **TUI 不可用**`zcode` 无参数直接运行(TUI 模式)在独立终端报错(缺 `@zcode/tui` 模块),仅 headless 模式可用。

0 commit comments

Comments
 (0)