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
32 changes: 21 additions & 11 deletions client/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,16 +217,16 @@ CLI 层不自行定义“平行配置模型”,只对 `Config` 做覆盖合并

### 8.3 宿主编排协议基线(planned)

> 本节是 Slice A 的目标设计输入,**尚未实现**
> 当前仓库事实仍以 `8.1`/`8.2` 描述的 landed 行为为准
> 本节记录 Issue #135 宿主编排协议的当前设计基线
> 其中 `8.3.3` 已在 Slice B 落地,`8.3.4`/`8.3.5` 的最小 control baseline 已在 Slice C 落地;capability discovery 仍保留给后续 Slice D

#### 8.3.1 模式分层

| 模式 | 状态 | 入口 | 主要语义 |
|---|---|---|---|
| interactive | landed | `dare chat` | 允许 `dare>` prompt、内联审批提示、人类可读输出。 |
| automation-json | landed / legacy | `run/script --output json` | 允许脚本消费 `log/event/result` 行输出,但不承诺宿主级稳定 envelope。 |
| headless | landed / partial | `run/script --headless` | 禁止 prompt、禁止内联审批提示,输出 versioned event envelope;外部 control plane 仍待后续 Slice。 |
| headless | landed | `run/script --headless` | 禁止 prompt、禁止内联审批提示,输出 versioned event envelope,并可选开启 `--control-stdin` 宿主控制面。 |

#### 8.3.2 核心流程

Expand Down Expand Up @@ -279,9 +279,9 @@ headless 目标流程要求:

1. 当前 `--output json` 行结构视为 legacy automation schema。
2. headless envelope 使用独立 schema version,不直接复用现有 `type=log|event|result` 结构。
3. 当前 landed 行为仅覆盖结构化事件流;`control-stdin`capability handshake、动态 MCP 事件仍属于后续 Slice。
3. 当前 landed 行为覆盖结构化事件流与 `control-stdin` 最小控制面;`actions:list` / capability handshake 与动态 MCP 事件仍属于后续 Slice。

#### 8.3.4 control-stdin v1(planned
#### 8.3.4 control-stdin v1(Slice C landed baseline

v1 设计选择:优先支持 `--control-stdin`,即 stdin 一行一个 JSON 命令帧。

Expand All @@ -300,15 +300,25 @@ v1 设计选择:优先支持 `--control-stdin`,即 stdin 一行一个 JSON
4. `result`
5. `error`

首批 action 基线:
协议约束:

1. `schema_version` 固定为 `client-control-stdin.v1`
2. control result/error 与 headless event 一样走 `stdout` 多路复用,由 `schema_version` 区分
3. `status:get` 的最小返回字段包含 `mode`、`status`、`running`、`active_task`、`pending_approvals`

当前 landed action 基线:

1. `approvals:list/poll/grant/deny/revoke`
2. `mcp:list/reload/show-tool`
3. `skills:list`
4. `status:get`

当前仍未纳入 Slice C 基线:

1. `actions:list`
2. `approvals:list/poll/grant/deny/revoke`
3. `mcp:list/reload/show-tool`
4. `skills:list`
5. `status:get`
2. capability discovery / startup handshake

#### 8.3.5 错误处理与安全边界(planned
#### 8.3.5 错误处理与安全边界(Slice C landed baseline

1. `run/script --headless` 已禁止回落到 `input("dare> ")` 或内联 `approve>` 提示;审批等待超时会返回结构化 `task.failed` 事件。
2. control plane 的失败必须返回结构化错误对象,而不是只写 stdout 文案。
Expand Down
9 changes: 6 additions & 3 deletions client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -339,18 +339,21 @@ Issue #135 对应的宿主编排能力目前分成“已落地”和“未落地
- 已接通的运行时事件:`approval.pending`、`approval.resolved`、`tool.invoke`、`tool.result`、`tool.error`、`model.response`
- `chat` 不支持 `--headless`
- `--headless` 不能与 legacy `--output json` 混用
- `run` / `script --headless` 支持可选 `--control-stdin`
- 控制响应使用独立 schema:`client-control-stdin.v1`
- 当前已接通:`status:get`、`approvals:list/poll/grant/deny/revoke`、`mcp:list/reload/show-tool`、`skills:list`
- `mcp:unload` 仍然不是宿主协议 action;宿主发送时会得到结构化 `UNSUPPORTED_ACTION`
- 未支持或未完成的 action 会返回结构化 error,而不是回落到 prompt 文案

仍未落地:

- `--control-stdin` 结构化控制面
- `actions:list` / 启动握手式能力发现
- MCP 动态控制对应的宿主协议面

当前推荐边界是:

1. 自动化脚本仍使用 `run/script --output json`。
2. 宿主事件流接入使用 `run/script --headless`。
3. 审批、MCP、skills 等运行时控制当前仍以显式 CLI 命令或当前 transport/action 能力为主
3. 运行中控制当前优先使用 `--control-stdin` 做 `status:get`、approvals、MCP 与 `skills:list`;`actions:list` / 启动握手仍在后续 Slice 中
4. 不要把当前 `log/event/result` 三类 JSON 行当作长期稳定的宿主协议。

补充说明:
Expand Down
Loading
Loading