move runtime_workspace and agent_tool_route stages to completed

This commit is contained in:
2026-08-07 17:10:01 +08:00
parent 10840909ab
commit e94fbc4fb4
20 changed files with 0 additions and 0 deletions
@@ -0,0 +1,163 @@
# 04A.agent_tool_route 验收评审(中间记录,已被后续评审收敛)
**状态:** 中间记录;最终以 [05.acceptance_review.md](05.acceptance_review.md) 为准
**日期:** 2026-08-07
**评审对象:** `lineup-adapter/hermes/lineup/` 当前实现、[04A.agent_tool_route.md](04A.agent_tool_route.md)、[02.technical_implementation_spec.md](02.technical_implementation_spec.md)
**评审口径:**`04A` 主定义和实施规范为准,先记录当时已经拿到的自动化证据与已闭环子能力,再明确尚未满足的最终验收项。本文不是最终完成声明;后续 fresh runtime evidence、结构性限制记录与最终关闭结论,均已收敛到 [05.acceptance_review.md](05.acceptance_review.md)。
## 1. 当前已验证的实现
### 1.1 Runtime Agent Tool invoke 的 Adapter 侧基线已通过自动化测试
已具备并已由自动化测试覆盖的能力:
- `client.inventory` 接受独立 `tools[]` 顶层投影;
- `lineup.v1.tool.invoke` 已进入 Hermes Adapter 允许输出集合;
- `tool.invoke` 会绑定当前 conversation 的最新 `inventory_revision`
- 非法 `tool.invoke` 会被拒绝或降级,不允许伪造 Runtime 内部目标字段。
对应测试命令:
```bash
npm test -- \
src/runtime/app-management/miniapp-sdk.test.ts \
src/runtime/app-management/reference-miniapps.test.ts \
src/runtime/app-management/app-registry.test.ts \
src/runtime/inventory/client-inventory.test.ts \
src/runtime/coordination/tool-router.test.ts \
src/runtime/coordination/lineup-runtime.test.ts
```
2026-08-07 当前结果:
```text
Test Files 6 passed (6)
Tests 71 passed (71)
```
当前已通过自动化测试验证的点:
- Runtime `client.inventory` 以顶层 `tools[]` 发布 Agent Tool,不再把 Tool 塞进 `applications[].tools`
- Tool projection 从 MiniApp SDK Declaration 经 Manifest / Registry 产生,保留 `app_scope``tool_id`、description、`input_schema`、handling、delivery 与 activation requirement
- Pomodoro 的 `pomodoro.start` / `pomodoro.interrupt` 会进入顶层投影;禁用、升级、卸载会递增 revision 并撤销对应 Tool
- inventory 不泄露 `output_schema`、permissions、handler、bundle 或本地实现信息。
### 1.2 Hermes Adapter 已通过自动化测试消费同一顶层 Tool projection
对应测试命令:
```bash
python3 -m unittest \
lineup-adapter/hermes/lineup/tests/test_protocol.py \
lineup-adapter/hermes/lineup/tests/test_core.py \
lineup-adapter/hermes/lineup/tests/test_acp_client.py
```
2026-08-07 当前结果:
```text
Ran 32 tests in 0.022s
OK
```
已具备并已由自动化测试覆盖的能力:
- `client.inventory` 接受独立 `tools[]` 顶层投影;
- `lineup.v1.tool.invoke` 已进入 Hermes Adapter 允许输出集合;
- `tool.invoke` 会绑定当前 conversation 的最新 `inventory_revision`
- 非法 `tool.invoke` 会被拒绝或降级,不允许伪造 Runtime 内部目标字段。
### 1.3 Runtime 已接受 `lineup.v1.tool.invoke` 作为最小请求兼容入口
当前已拿到的 Runtime 自动化证据表明,`04A` 不再只是 Adapter 内部自洽,而是已经把新的请求入口真正接到了 `04.runtime_workspace` 既有执行链路上。
当前已通过自动化测试验证的点:
- Runtime parser 接受 `lineup.v1.tool.invoke`
- Tool Router 会把 `lineup.v1.tool.invoke` 路由到与旧请求类型相同的 MiniApp Tool 路径;
- 至少一条普通 bundled MiniApp Tool 路径已经通过 `lineup.v1.tool.invoke` 跑通;
- `pomodoro.start` 已通过 `lineup.v1.tool.invoke` 跑通 activation、foreground 确认、deadline 结算与最终结果;
- `pomodoro.interrupt` 已通过 `lineup.v1.tool.invoke` 跑通短 Tool 自身结果,以及对长 `pomodoro.start` 的中断收口;
- Runtime 对旧请求类型的兼容测试没有因此回归。
### 1.4 Hermes 交互兼容层的统一状态机已落地
本轮已在 Adapter 内实现并通过自动化测试验证以下兼容闭环:
```text
Hermes ACP session/request_permission
-> Adapter 投影为内部 permission request
-> Adapter 发出 lineup.v1.tool.call(choice)
-> 用户回传 lineup.v1.tool.result
-> Adapter resolve 回 ACP permission outcome
Adapter 内部 interactive request
-> Adapter 发出 lineup.v1.tool.call(choice | confirm | input)
-> 用户回传 lineup.v1.tool.result / tool.cancel
-> Adapter resolve 回 Hermes 内部 interaction outcome
```
当前已通过自动化测试验证的点:
- ACP permission request 会被解析为受控请求,而不是一律 `cancelled`
- Adapter 会为该请求生成标准 `tool.call(choice)`
- `tool.result` 中的受控选项会被映射回 ACP `optionId`
- 该交互会复用现有 `tool_calls` one-shot ledger,并配套持久化 `hermes_interactions` 映射;
- Adapter 重启恢复时,未完成的 Hermes 交互会被过期收口,而不是在新进程里继续假定可 resolve。
- `slash_confirm` 已能通过 `tool.call(choice)` 生成并回收 `once / always / cancel` 一类受控结果;
- `update_prompt` 已能通过 `tool.call(confirm)` 生成并回收 `y / n` 一类受控结果;
- `clarify` 已能覆盖单选 `choice`、纯文本 `input`、以及 `other -> input` 的二段式路径;
- `clarify multi_select = true` 当前会被 Adapter 稳定拒绝,不向 Host 发出不受支持的交互请求。
### 1.5 当前已新增的实现文件
- [acp_client.py](/home/gao/Development/lineup/lineup-adapter/hermes/lineup/acp_client.py)
- [core.py](/home/gao/Development/lineup/lineup-adapter/hermes/lineup/core.py)
- [state.py](/home/gao/Development/lineup/lineup-adapter/hermes/lineup/state.py)
- [test_acp_client.py](/home/gao/Development/lineup/lineup-adapter/hermes/lineup/tests/test_acp_client.py)
- [test_core.py](/home/gao/Development/lineup/lineup-adapter/hermes/lineup/tests/test_core.py)
- [client-inventory.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/inventory/client-inventory.ts)
- [miniapp-sdk.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/app-management/miniapp-sdk.ts)
- [app-registry.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/app-management/app-registry.ts)
- [tool-router.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/coordination/tool-router.ts)
- [lineup-v1.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/protocol/lineup-v1.ts)
- [tool-router.test.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/coordination/tool-router.test.ts)
- [lineup-runtime.test.ts](/home/gao/Development/lineup/lineup-app/tauri/src/runtime/coordination/lineup-runtime.test.ts)
### 1.6 Fresh Runtime / Browser Evidence2026-08-07
在重新安装当前工作树的 Hermes Adapter、重启 Adapter 并对 Host 执行强制刷新后,取得了新的真实运行期证据。该证据不是历史截图或旧消息:
- Host 新发送的 `client.inventory` 消息序号为 `1201``revision = catalog-1`
- 该 inventory 使用独立顶层 `tools[]` 投影,包含 `pomodoro.start``pomodoro.interrupt``task-dashboard.open/update``whiteboard.open/submit`
- 用户消息序号 `1202` 为真实用户输入:`开始一个 5 分钟的专注`
- 同一条启动调用 `call_id = call_5f9c2a7d1e` 收到 `accepted` 进度回执(消息序号 `1207`);
- 随后收到 `started` 进度回执(消息序号 `1209`),其中 `operation_id = pomodoro:operation_msiet305_zwa4ckb9f2`,并绑定到前台 Pomodoro instance
- 用户提供的页面截图显示“专注工作区”“5分钟专注”,倒计时从 `05:00` 进入 `04:56`,证明前台工作区已真实打开并运行;
- 用户消息序号 `1219` 为真实用户输入:`停止当前专注`
- 停止后收到两个 `lineup.v1.miniapp.tool.result` 终态:
- `call_id = call_7d3e9f2a1b`Pomodoro interrupt 短工具结果为 `status = interrupted`
- `call_id = call_5f9c2a7d1e`:原始 start 调用结果为 `state = interrupted`,同一个 `operation_id``pomodoro:operation_msiet305_zwa4ckb9f2``interruption_reason = agent_interrupt`
- 两个终态均由 Runtime 发送并被 Adapter 收到,证明 start / interrupt 的请求、进度、终态和 operation 关联在真实消息链路中闭环。
## 2. 当前尚未证明完成的验收项
以下项目仍未被当前证据证明完成,因此 `04A` 不能视为已验收通过:
- 虽然 `slash_confirm``clarify``update_prompt` 已具备 Adapter 侧自动化测试证据,但 Hermes ACP 当前是否会以可直接消费的真实请求形态发出这些 contract,尚未拿到运行期 fresh evidence
- 至少一种“本轮范围外 Hermes 请求被稳定拒绝”的运行证据尚未补入。
## 3. 当前结论
`04A` 已从“仅完成协议设计和 invoke parser”推进到“Runtime 已发布 Adapter 可消费的顶层 Tool inventoryAdapter 侧 invoke 基线完成,Runtime 已接受 `lineup.v1.tool.invoke` 请求入口,Hermes 交互兼容层已有统一状态机并具备多类自动化证据”的阶段。
但按主定义与实施规范的最终完成标准来看,本轮只能判定为:
```text
Runtime Tool inventory:已从 SDK / Manifest / Registry 端到端发布顶层 tools[],并有 71 个 Runtime 定向测试证据
MiniApp Tool invoke 基线:已具备 Adapter 侧实现与 32 个 Adapter 定向测试证据
Runtime 请求兼容:已具备 lineup.v1.tool.invoke 的 parser / router / 高价值集成测试证据
Hermes 交互兼容层:已完成 exec_approval、slash_confirm、clarify、update_prompt 的 Adapter 侧统一桥接与自动化覆盖
Hermes ACP 真源验证:当前仍需补充除 request_permission / exec_approval 外的 contract,及一种范围外请求的真实拒绝证据
真实 Pomodoro fresh evidence:已完成 start / interrupt;见 1.6
整体 04ARuntime inventory 与 Pomodoro start / interrupt 已完成真实 Host 验证;仍需补齐 Hermes 权限/交互真源和范围外请求拒绝证据,尚未完成最终验收
```