# dsh-peer-relay

一个仅运行在 DSH Host 内的对等会话 relay 插件。它让普通顶层 Agent 通过四个工具向另一个普通顶层会话提交任务，并异步接收结果。

投递采用双工语义：目标会话空闲时按 next-turn 排队唤醒新一轮；目标会话运行中时通过 next-step 注入当前轮，双方无需等待 turn 边界即可实时收到对方消息（与 Host subagent 结算通知同机制）。

## 范围

- Host-only，不包含 Client 或 Web UI。
- 固定使用 `~/.dsh/peer-relay.sqlite`。
- 固定使用 Host 已配置的 Typert `agent` lookup 解析会话，包括官方冷恢复路径。
- 只向普通顶层会话安装工具，不向 subagent 安装。
- 不包含 ACL、存储适配器、降级路径或交互协议状态。

## 工具

- `peer_list`：列出与当前会话**同工作区（cwd）**的 live 普通顶层会话。
- `peer_call`：向同工作区的指定 Session 提交异步任务。
- `peer_create`：在当前工作区**创建新 peer 会话**（可指定 `agent_preset`，默认继承当前会话的 preset），创建后立即可被 `peer_list` 发现并接收任务。
- `peer_status`：查询当前 Agent 发起的任务。
- `peer_cancel`：取消当前 Agent 发起的任务。

## 工作区约束

peer 协作面向同项目工作：`peer_list` 只返回与主会话 cwd 相同的会话，`peer_call` 拒绝跨工作区目标，`peer_create` 创建的新会话固定落在主会话的 cwd。需要 peer 时一般先 `peer_create` 新建一个同项目会话。

## 安装

```sh
dsh plugin --profile web add dsh-peer-relay
```

Host 插件在 DSH Host 下次启动时加载。

## 开发

```sh
pnpm install
pnpm check
```

本地开发安装可以使用：

```sh
dsh plugin --profile web add link:/absolute/path/to/dsh-peer-relay
```
