Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 35 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,15 +132,39 @@ ACP bridge 支持**事件驱动**(真流式)和**轮询**(伪流式)两

#### 扩展方法(非标准 ACP)

ACP bridge 额外暴露了 ZCode 新版(0.14.8+)的协议方法,供编辑器/脚本调用:
ACP bridge 额外暴露了 ZCode 新版协议方法,供编辑器/脚本调用。按 ZCode 引入版本分组:

**session 级**(`{sessionId}` 定位会话):

| 扩展方法 | 作用 | 引入版本 | params |
|----------|------|:--------:|--------|
| `session/fork` | 从 checkpoint 分叉新会话 | 0.14.8 | `{sessionId, target?}` |
| `session/rewind` | 回退工作区文件到 checkpoint | 0.14.8 | `{sessionId, target?, expectedRevision?}` |
| `session/goal` | 读取/设置 session 目标 | 0.14.8 | `{sessionId, action: show\|set\|replace\|clear, objective?}` |
| `session/compact` | 压缩对话上下文 | 0.14.8 | `{sessionId}` |
| `session/steer` | turn 进行中追加指令 | 0.14.8 | `{sessionId, content}` |
| `session/setThoughtLevel` | ⭐ 设置思考强度(实测 GLM-5.2: max/high/nothink,按模型不同) | 0.15.0 | `{sessionId, thoughtLevel}` |
| `session/updateRuntimeModelConfig` | 运行时覆盖会话模型配置 | 0.15.0 | `{sessionId, runtimeModel, applyModelSelection?}` |
| `session/cancelBackgroundTask` | 取消后台 Bash 任务 | 0.14.8 | `{sessionId, taskId}` |
| `session/rewindCascade` | 级联回退(与 rewind 同 schema) | 0.15.0 | `{sessionId, target?, scope?, expectedRevision?}` |
| `session/setModel` | 切换会话模型 | 0.14.8 | `{sessionId, modelId}` |
| `session/setMode` | 切换会话权限模式 | 0.14.8 | `{sessionId, mode}` |

**workspace 级**(按工作区 `{workspacePath, workspaceKey}` 定位,不依赖 sessionId):

| 扩展方法 | 作用 | params |
|----------|------|--------|
| `session/fork` | 从 checkpoint 分叉新会话 | `{sessionId, target?}` |
| `session/rewind` | 回退工作区文件到 checkpoint | `{sessionId, target?, expectedRevision?}` |
| `session/goal` | 读取/设置 session 目标 | `{sessionId, action: show\|set\|replace\|clear, objective?}` |
| `session/compact` | 压缩对话上下文 | `{sessionId}` |
| `session/steer` | turn 进行中追加指令 | `{sessionId, content}` |
| `workspace/readState` | 读工作区状态(settings/modelCatalog/slashCommands) | `{workspace, runtimeModel?}` |
| `workspace/generateText` | 一次性文本生成(不建会话) | `{workspace, modelRef, prompt, querySource, maxOutputTokens?, temperature?}` |
| `workspace/setDefaultModel` | 设工作区默认模型(持久化) | `{workspace, model, runtimeModel?, expectedWorkspaceRevision?}` |
| `workspace/setDefaultMode` | 设工作区默认权限模式(持久化) | `{workspace, mode, expectedWorkspaceRevision?}` |
| `workspace/setDefaultThoughtLevel` | 设工作区默认思考强度(持久化) | `{workspace, thoughtLevel, expectedWorkspaceRevision?}` |
| `workspace/upsertModelProvider` | 新增/更新模型供应商 | `{workspace, provider, expectedWorkspaceRevision?}` |
| `workspace/removeModelProvider` | 移除模型供应商 | `{workspace, providerId, expectedWorkspaceRevision?}` |
| `workspace/updateProviderRegistry` | 批量更新供应商注册表 | `{workspace, registry, includeWorkspaceState?}` |

> workspace 参数可三种方式传入:`workspace`(完整 dict)、`workspacePath`/`cwd`(路径字符串),或缺省时用 bridge 进程的 `cwd`。
> Provider 管理类方法(upsert/remove/updateRegistry)的 `provider`/`registry` 可能含 `apiKey`,bridge 仅透传、不读取/打印其明文。

## 会话存储

Expand All @@ -154,21 +178,22 @@ ACP bridge 额外暴露了 ZCode 新版(0.14.8+)的协议方法,供编辑

| ZCode CLI 版本 | 支持情况 | ACP bridge 流式 | 扩展方法 |
|:--------------:|:--------:|:---------------:|:--------:|
| **0.14.8+**(App 3.1.4) | ✅ 完整 | **真流式**(事件驱动) | ✅ fork/rewind/goal/compact/steer |
| **0.15.0+**(App 3.2.0) | ✅ 完整 | **真流式**(事件驱动) | ✅ 全部(含 workspace/*、setThoughtLevel 等) |
| **0.14.8**(App 3.1.4) | ✅ 完整 | **真流式**(事件驱动) | ✅ fork/rewind/goal/compact/steer |
| **0.14.5 ~ 0.14.7** | ✅ 兼容 | 伪流式(自动降级轮询) | ❌(旧版协议未实现) |
| **< 0.14.5** | ⚠️ 未测 | — | — |

**降级行为**(自动,无需手动配置):
- ACP bridge 检测到 `session/subscribe` 不可用时,自动切换到轮询 `session/read`(伪流式)
- 扩展方法(fork/rewind/goal/compact/steer)在旧版 ZCode 上会透传后端错误(`-32603 zcode <method> failed: ...`),不影响标准 ACP 方法(new/prompt/cancel/list/resume)
- 扩展方法在旧版 ZCode 上会透传后端错误(`-32603 zcode <method> failed: ...`),不影响标准 ACP 方法(new/prompt/cancel/list/resume)。例如在 0.14.8 上调用 `workspace/*` 或 `session/setThoughtLevel`(0.15.0 新增)会得到 `-32603`,调用方应据此做版本判断。

## Skill(驱动说明书)

项目附带一个通用 skill [zcode-bridge-guide](skills/zcode-bridge-guide/SKILL.md),覆盖:
- 三种接入模式(CLI / ACP / MCP)的完整使用方法
- 凭证配置、非交互 shell 坑
- 真流式 vs 伪流式双模式说明
- 扩展协议方法(fork/rewind/goal/compact/steer
- 扩展协议方法(session 级 + workspace 级,含 setThoughtLevel 思考强度控制
- 任务书模板、独立复核、版本兼容性

复制到 ZCode 的 skill 目录即可使用:
Expand All @@ -187,6 +212,7 @@ cp -r skills/zcode-bridge-guide ~/.zcode/skills/
5. **GLM-5.2 无推理输出**:思考过程(agent_thought_chunk)在 GLM-5.2 下不触发,需 GLM-5-Turbo。
6. **TUI 不可用**:`zcode` 无参数直接运行(TUI 模式)在独立终端报错(缺 `@zcode/tui` 模块),仅 headless 模式可用。
7. **⚠️ ACP bridge 默认 `mode=yolo`(权限风险)**:为避免工具调用 turn 卡在权限确认,ACP bridge 的 `session/new` 强制以 `mode=yolo` 创建会话(见 `zcode-acp-bridge` 的 `_on_session_new`)。这意味着任意 prompt 都可能触发**无确认的文件修改和命令执行**。作为编辑器集成时请知悉此风险;如需更安全的 `build` 模式(带权限确认),需自行修改并实现 ACP↔ZCode 的 permission 转发(本项目 P4b 未实现)。
8. **⚠️ Provider 管理方法涉及 apiKey**:`workspace/upsertModelProvider`、`workspace/updateProviderRegistry` 的 `provider`/`registry` 参数会携带 `apiKey`(可能为 `{source:"inline", value:"sk-..."}` 明文)。ACP bridge 仅整体透传给 ZCode 后端、不读取也不在日志打印其明文;但调用方应自行确保传输通道(stdio)可信,并避免在日志中回显原始参数。

## 项目结构

Expand Down
Loading
Loading