Initial commit

This commit is contained in:
2026-07-10 08:31:27 +08:00
commit 2b74c30d36
134 changed files with 21801 additions and 0 deletions
+125
View File
@@ -0,0 +1,125 @@
# Tool 合约
## 1. 定位
LLM 通过 **tool call** 表达意图;Runtime 校验后执行 tool 或转为 **RuntimeEvent** 改变 phase。
**真 tool loop**:循环 tool 的返回值 append 到 agent `messages[]`;边界 tool 结束 burst。
不依赖「副作用列表」隐式推进(迁移方向,见 `architecture.md`)。
黑板与上下文:`tag-blackboard.md`、`context-assembly.md`。
---
## 2. 调用者
| 调用者 | 可用 tool | 禁止 |
|--------|-----------|------|
| 总管 Agent | 见 §3 | 改 phase 直接写黑板;传 inputTags;accept 产物 |
| Worker LLM | `ask_user`、`submit`(目标态) | 调度其他 skill;写未声明 tag |
| 用户 / CLI | submit_input、approve、reject、accept | — |
| Runtime | 发射 event、拼接上下文、执行 worker | — |
---
## 3. 总管 Tool
### 3.1 循环 tool(burst 内,不改 phase)
| name | 作用 |
|------|------|
| `read_blackboard` | `tags: string[]` 读正文 |
| `list_workers` | 当前包可调度 skill 列表 |
| `list_artifacts` | 产物状态 |
### 3.2 边界 tool(结束 burst)
| name | 行为 |
|------|------|
| `run_worker` | 执行 skill;`requiresApproval` → `approve_step` |
| `ask_user` | `waiting_user(input)` |
| `review_blackboard` | 向用户展示概况 → `input` |
| `finish` | `done` |
```ts
type RunWorkerParams = {
workerId: string;
reason: string;
requiresApproval: boolean;
roleId?: string;
};
```
Runtime 从 Worker Skill 读 `inputTags` / `outputTags`,总管 **不得传入**。
### 3.3 Tool loop burst
```text
计数器 toolLoopBurstCount 在每次用户硬事件时归零:
user_submitted_input、user_confirmed_intake、user_approved_next_step、
user_rejected_next_step、user_accepted_artifact、user_rejected_artifact、…
running 内每轮 LLM+tool 使 burst+1;超过 maxBurst(默认 12,可配置)→ 强制 waiting_user
```
**maxBurst = 两次用户操作之间的上限**,非 Session 累计。
代码:`src/main-agent/tool-loop.ts`、`src/runtime/tool-registry.ts`。
---
## 4. Worker Tool(目标态)
| name | 行为 |
|------|------|
| `ask_user` | `worker_questions` + resumeContext |
| `submit` | 校验 tag ⊆ outputTags → 写黑板 → `worker_completed` |
Phase A 仍用 JSON `outputs` + `askUser`,语义等价。
---
## 5. 用户硬事件
| waitingReason | 用户动作 |
|---------------|----------|
| `skill_selection` | 选包 |
| `intake` / `input` | 输入 |
| `approve_step` | approve / reject |
| `review_artifact` | accept / reject |
| `worker_questions` | 输入 |
| `revision` | 输入修改说明 |
---
## 6. 校验
```text
1. phase + waitingReason 允许该 actor
2. tool 参数 schema
3. workerId ∈ manifest 注册表
4. submit tag ⊆ outputTags
5. 总管不得带 inputTags
6. burst ≤ maxBurst
```
---
## 7. 代码对应
| 章节 | 文件 |
|------|------|
| 总管 tool loop | `src/main-agent/tool-loop.ts` |
| tool 定义 | `src/main-agent/tools.ts` |
| 解析/校验 | `src/runtime/tool-registry.ts` |
| worker | `src/worker/executor.ts` |
| 阶段机 | `src/runtime/phase-machine.ts` |
---
## 8. 已废弃
- 总管 JSON 一次性决策(保留 fallback 解析)
- `inputKeys` / `outputKeys`
- orchestrator 思维链逐步调度
- 以 `PhaseEffect.invoke_main_agent` 链为主的路径(迁向 burst 入口)