tackle-harness 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tackle-harness",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Plugin-based AI Agent Harness framework for Claude Code",
5
5
  "main": "plugins/runtime/harness-build.js",
6
6
  "bin": {
@@ -0,0 +1,223 @@
1
+ # Agent Dispatcher — 团队清理参考
2
+
3
+ > 本文档由 `skill-agent-dispatcher` 在 Step 7 阶段按需读取,不作为独立 skill 触发。
4
+
5
+ ---
6
+
7
+ ## ⚠️ 权限要求
8
+
9
+ 本 skill 的 Step 7 清理流程需要 Bash 工具权限来:
10
+ - 验证目录是否存在 (`test -d`)
11
+ - 在 TeamDelete 失败时执行文件系统级删除 (`rm -rf`)
12
+
13
+ **建议权限配置**(添加到 settings.json 的 `permissions.allow` 中):
14
+ ```json
15
+ {
16
+ "allow": [
17
+ "Bash(test -d $HOME/.claude/teams/*)",
18
+ "Bash(test -d $HOME/.claude/tasks/*)",
19
+ "Bash(rm -rf $HOME/.claude/teams/*)",
20
+ "Bash(rm -rf $HOME/.claude/tasks/*)"
21
+ ]
22
+ }
23
+ ```
24
+
25
+ 如果权限被拒绝,清理流程会提示用户手动执行 `清理团队`。
26
+
27
+ ---
28
+
29
+ ## Step 7: 清理团队 (🔴 强制执行 + 验证)
30
+
31
+ <HARD-GATE>
32
+ TeamDelete 必须执行,且必须验证结果!
33
+ 注意:大部分 Teamee 已在 Step 6.5 监控循环中即时销毁。
34
+ 此步骤负责最终的 TeamDelete 调用和验证。
35
+ 不信任 TeamDelete 返回值,必须检查目录是否真的被删除!
36
+ 以下步骤必须按顺序逐一执行,不可跳过!
37
+ </HARD-GATE>
38
+
39
+ > **设计说明**: 以下使用显式步骤而非循环,确保 AI agent 能忠实执行每一步。
40
+ > 路径使用 `$HOME` 变量(Git Bash 兼容 Windows)。
41
+
42
+ ---
43
+
44
+ ### Step 7a: 安全检查(3 个前置条件)
45
+
46
+ **条件 1** — `team_name` 非空且仅含合法字符 `[a-zA-Z0-9_-]`
47
+ - 失败 → 打印 `❌ 错误:team_name 无效` → 提示手动执行 `清理团队` → **停止**
48
+
49
+ **条件 2** — 团队目录存在
50
+ - 用 Bash 检查: `test -d "$HOME/.claude/teams/$team_name" && echo "EXISTS" || echo "NOT_FOUND"`
51
+ - 返回 `NOT_FOUND` → 打印 `ℹ️ 团队目录不存在,可能已被清理,跳过` → **停止**
52
+
53
+ **条件 3** — 路径安全验证
54
+ - 用 Bash 检查: `basename "$HOME/.claude/teams/$team_name"` 应返回 `$team_name`
55
+ - 不匹配 → 打印 `❌ 安全检查失败:路径异常` → 提示手动执行 `清理团队` → **停止**
56
+
57
+ 全部通过 → 继续 Step 7b
58
+
59
+ ---
60
+
61
+ ### Step 7b: 发送 shutdown_request (清理残留 Teamee)
62
+
63
+ 检查 `teamee_map` 中是否还有未销毁的 Teamee:
64
+ ```
65
+ # 检查映射表中是否还有残留 Teamee
66
+ if teamee_map is not empty:
67
+ print(f"⚠️ 发现 {len(teamee_map)} 个未销毁的 Teamee,发送 shutdown_request")
68
+ for task_id, teamee_name in teamee_map.items():
69
+ SendMessage(to=teamee_name, message={
70
+ "type": "shutdown_request",
71
+ "reason": "最终清理阶段,准备 TeamDelete",
72
+ "request_id": f"final-shutdown-{task_id}-{timestamp()}"
73
+ })
74
+ else:
75
+ print("所有 Teamee 已在监控循环中即时销毁,无需额外 shutdown")
76
+
77
+ # 额外安全网: 读取团队配置检查是否有遗漏的成员
78
+ # (防止映射表不一致的情况)
79
+ config = Read("~/.claude/teams/$team_name/config.json")
80
+ for member in config.members:
81
+ if member.name != "team-lead" and member.name not in teamee_map.values():
82
+ SendMessage(to=member.name, message={
83
+ "type": "shutdown_request",
84
+ "reason": "最终清理阶段,发现未在映射表中的成员",
85
+ "request_id": f"orphan-shutdown-{member.name}-{timestamp()}"
86
+ })
87
+ ```
88
+
89
+ ---
90
+
91
+ ### Step 7c: 等待 shutdown 响应(最多 15 秒)
92
+
93
+ 等待所有 Teamee 的 `shutdown_response`。
94
+ 如果 15 秒内未全部响应,不再等待,继续执行清理。
95
+
96
+ ---
97
+
98
+ ### Step 7d: 执行 TeamDelete(第 1 次)
99
+
100
+ 调用 `TeamDelete()` 工具。
101
+
102
+ **验证** — 用 Bash 检查目录是否真的被删除:
103
+ ```bash
104
+ test -d "$HOME/.claude/teams/$team_name" && echo "EXISTS" || echo "GONE"
105
+ test -d "$HOME/.claude/tasks/$team_name" && echo "EXISTS" || echo "GONE"
106
+ ```
107
+
108
+ - 两个都返回 `GONE` → 打印 `✅ 清理成功(验证通过)` → **跳到 Step 7g**
109
+ - 任一返回 `EXISTS` → 继续 Step 7e
110
+
111
+ ---
112
+
113
+ ### Step 7e: 执行 TeamDelete(第 2 次,等待 2 秒后重试)
114
+
115
+ 调用 `TeamDelete()` 工具。
116
+
117
+ **验证** — 同 Step 7d 的 Bash 检查。
118
+
119
+ - 两个都返回 `GONE` → 打印 `✅ 清理成功(第 2 次尝试)` → **跳到 Step 7g**
120
+ - 任一返回 `EXISTS` → 继续 Step 7f
121
+
122
+ ---
123
+
124
+ ### Step 7f: 文件系统级强制清理(TeamDelete 回退方案)
125
+
126
+ 打印 `🔥 TeamDelete 两次失败,执行文件系统级清理...`
127
+
128
+ **安全确认** — 再次验证路径:
129
+ ```bash
130
+ basename "$HOME/.claude/teams/$team_name"
131
+ ```
132
+ - 返回值不等于 `$team_name` → 打印 `❌ 安全检查失败` → 提示手动执行 `清理团队` → **停止**
133
+
134
+ **执行删除**(逐个目录,检查存在后再删):
135
+ ```bash
136
+ # 删除团队目录(仅当存在时)
137
+ test -d "$HOME/.claude/teams/$team_name" && rm -rf "$HOME/.claude/teams/$team_name" && echo "DELETED" || echo "SKIP_OR_FAIL"
138
+
139
+ # 删除任务目录(仅当存在时)
140
+ test -d "$HOME/.claude/tasks/$team_name" && rm -rf "$HOME/.claude/tasks/$team_name" && echo "DELETED" || echo "SKIP_OR_FAIL"
141
+ ```
142
+
143
+ 如果 Bash `rm -rf` 权限被拒绝:
144
+ - 打印 `⚠️ 权限不足,无法执行文件系统删除`
145
+ - 提示用户手动执行 `清理团队` 或 `rm -rf "$HOME/.claude/teams/$team_name" "$HOME/.claude/tasks/$team_name"`
146
+
147
+ ---
148
+
149
+ ### Step 7g: 最终验证
150
+
151
+ 用 Bash 确认两个目录都已清除:
152
+ ```bash
153
+ test -d "$HOME/.claude/teams/$team_name" && echo "STILL_EXISTS" || echo "CLEAN"
154
+ test -d "$HOME/.claude/tasks/$team_name" && echo "STILL_EXISTS" || echo "CLEAN"
155
+ ```
156
+
157
+ - 两个都返回 `CLEAN` → 打印 `✅ 清理流程完成`
158
+ - 任一返回 `STILL_EXISTS` → 打印 `❌ 清理失败!请手动执行: 清理团队`
159
+
160
+ ---
161
+
162
+ ### Step 7h: 记录清理日志
163
+
164
+ 记录清理结果到执行报告(成功/失败、尝试次数、使用的方法)。
165
+
166
+ ---
167
+
168
+ ## Error Handling
169
+
170
+ ### 循环依赖
171
+ ```
172
+ ❌ 检测到循环依赖: WP-037 → WP-038 → WP-039 → WP-037
173
+ 请手动解除依赖关系后重试。
174
+ ```
175
+
176
+ ### Teamee 执行失败
177
+ ```
178
+ ⚠️ Task #2 执行失败
179
+ Owner: godot-script-expert-t2
180
+ 状态: in_progress (卡住)
181
+ 处理: Lead 发送 shutdown_request 即时销毁该 Teamee
182
+ 从 teamee_map 移除映射
183
+ 创建新 Teamee 重试 或 人工介入
184
+ ```
185
+
186
+ ### 部分任务超时
187
+ ```
188
+ ⚠️ Task #3 等待依赖超时
189
+ 依赖: Task #2 (状态: in_progress, 超过 30 分钟)
190
+ 处理: 检查 Task #2 的 Teamee 状态
191
+ 必要时发送消息确认进度
192
+ ```
193
+
194
+ ### 清理超时
195
+ ```
196
+ ⚠️ 清理等待超时(30秒)
197
+ 可能原因:
198
+ - Teamee 没有响应 shutdown_request
199
+ - Teamee 使用了 Explore 等只读 agent(没有 SendMessage 工具)
200
+ - Teamee 进程卡死
201
+
202
+ 处理:
203
+ - 强制执行 TeamDelete(不是 rm -rf!)
204
+ - 建议用户检查是否有残留进程
205
+ - 检查 Step 5 是否使用了正确的 subagent_type
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Cleanup Guarantee (清理保障)
211
+
212
+ ```
213
+ ┌─────────────────────────────────────────────────────────────┐
214
+ │ 强制清理检查点 │
215
+ │ │
216
+ │ ✅ 正常完成 → Step 6.5 即时销毁 → Step 7 最终清理 → TeamDelete │
217
+ │ ✅ 部分失败 → Step 6.5 即时销毁 → Step 7 最终清理 → TeamDelete │
218
+ │ ✅ 超时 → Step 6.5 超时销毁 → Step 7 强制清理 → TeamDelete │
219
+ │ ✅ 异常中断 → 捕获中断 → Step 7 强制销毁残留 → TeamDelete │
220
+ │ │
221
+ │ ❌ 无任何情况可以跳过 TeamDelete! │
222
+ └─────────────────────────────────────────────────────────────┘
223
+ ```
@@ -0,0 +1,245 @@
1
+ # Agent Dispatcher — 角色赋能与记忆注入参考
2
+
3
+ > 本文档由 `skill-agent-dispatcher` 在 Step 4-5 阶段按需读取,不作为独立 skill 触发。
4
+
5
+ ---
6
+
7
+ ## Step 4: 角色匹配算法
8
+
9
+ ```python
10
+ def match_role(work_package):
11
+ """匹配最合适的角色"""
12
+ scores = {}
13
+
14
+ for role in roles:
15
+ score = 0
16
+ # 关键词匹配 (权重 0.5)
17
+ for keyword in work_package.keywords:
18
+ if keyword in role.keywords:
19
+ score += 0.5
20
+
21
+ # 任务类型匹配 (权重 0.3)
22
+ if work_package.type in role.task_types:
23
+ score += 0.3
24
+
25
+ # 模块标签匹配 (权重 0.2)
26
+ for tag in work_package.tags:
27
+ if tag in role.module_tags:
28
+ score += 0.2
29
+
30
+ scores[role.id] = score
31
+
32
+ return max(scores, key=scores.get)
33
+ ```
34
+
35
+ ### 角色匹配失败回退
36
+
37
+ ```
38
+ ⚠️ 无法自动匹配角色,使用默认 general-purpose
39
+ 工作包: WP-XXX
40
+ 建议手动指定角色
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Step 5: 预计算角色 + 记忆准备
46
+
47
+ **⚠️ 重要**: 角色匹配和记忆注入在监控循环之前完成(预计算),为每个工作包准备好角色 Prompt。
48
+
49
+ ```
50
+ # 预计算所有工作包的角色匹配结果和记忆
51
+
52
+ wp_assignments = {} # {task_id: {role_id, role_prompt, memories, wp_doc_path}}
53
+
54
+ for task in tasks:
55
+ wp = extract_work_package(task)
56
+ role = match_role(wp)
57
+ memories = load_memories(role.id)
58
+ wp_assignments[task.id] = {
59
+ "role_id": role.id,
60
+ "role_prompt": role.prompt_template,
61
+ "memories": memories,
62
+ "wp_doc_path": wp.doc_path
63
+ }
64
+ ```
65
+
66
+ **为什么预计算**:
67
+ - 监控循环中按需创建 Teamee 时,直接使用预计算结果构建 Prompt
68
+ - 避免在监控循环中重复执行角色匹配逻辑
69
+ - 角色匹配算法不变(仍使用 Step 4 中的算法)
70
+
71
+ ---
72
+
73
+ ## 角色赋能系统
74
+
75
+ ### 核心角色(通用框架)
76
+
77
+ | 角色ID | 名称 | 匹配关键词 |
78
+ |--------|------|------------|
79
+ | `coordinator` | 协调者 | 调度、协调、监控、分配、统筹 |
80
+ | `architect` | 架构师 | 架构、设计、结构、模块、接口 |
81
+ | `implementer` | 实现者 | 实现、编码、开发、修复、重构 |
82
+ | `tester` | 测试者 | 测试、验证、检查、单元测试 |
83
+ | `documenter` | 文档编写者 | 文档、说明、注释、README |
84
+
85
+ ### 领域角色(由项目模板扩展)
86
+
87
+ | 角色ID | 名称 | 匹配关键词 |
88
+ |--------|------|------------|
89
+ | `frontend-dev` | 前端开发 | 前端、UI、组件、样式 |
90
+ | `backend-dev` | 后端开发 | 后端、API、服务、数据库 |
91
+ | `devops` | 运维专家 | 部署、CI/CD、Docker、容器 |
92
+ | `godot-scene-expert` | Godot 场景+UI专家 | 场景、节点、tscn、UI(Godot模板)|
93
+
94
+ ### 拆分工作包角色自动匹配
95
+
96
+ | 子工作包类型 | 自动匹配角色 |
97
+ |--------------|--------------|
98
+ | `-impl` | 根据关键词匹配领域专家 |
99
+ | `-test` | test-reviewer |
100
+ | `-verify` | test-reviewer |
101
+ | `-review` | code-reviewer |
102
+
103
+ ### 角色文件位置
104
+
105
+ | 文件类型 | 路径 |
106
+ |----------|------|
107
+ | 角色注册表 | `.claude/agents/role-registry.yaml` |
108
+ | 元角色定义 | `.claude/agents/roles/meta/{role_id}.yaml` |
109
+ | 职能角色定义 | `.claude/agents/roles/functional/{role_id}.yaml` |
110
+ | 领域角色定义 | `.claude/agents/roles/domain/{role_id}.yaml` |
111
+ | 专属经验库 | `.claude/agents/memories/{role_id}.md` |
112
+
113
+ ---
114
+
115
+ ## 记忆注入机制
116
+
117
+ ### 经验提取逻辑
118
+
119
+ 1. **读取角色专属库**:`.claude/agents/memories/{role_id}.md`
120
+ 2. **回退机制**:如专属库不足,读取 `docs/EXPERIENCE.md`
121
+ 3. **按标签过滤**:使用角色的 `experience_tags` 过滤
122
+ 4. **动态数量**:
123
+ - 简单任务(<2h):1-2 条
124
+ - 中等任务(2-4h):3 条
125
+ - 复杂任务(>4h):5 条
126
+
127
+ ---
128
+
129
+ ## 经验沉淀闭环
130
+
131
+ 执行完成后:
132
+
133
+ 1. **分析 Teamee 输出** - 提取新经验
134
+ 2. **写入角色专属库** - `.claude/agents/memories/{role_id}.md`
135
+ 3. **同步到 EXPERIENCE.md** - 去重合并
136
+ 4. **触发 experience-logger** - 记录本次执行的经验
137
+
138
+ ---
139
+
140
+ ## Teamee Prompt 模板
141
+
142
+ 以下模板用于 `build_single_task_prompt()` 函数,在 Step 6 / Step 6.5 创建 Teamee 时使用。
143
+
144
+ ```markdown
145
+ # [角色名称] - 单一任务专用执行
146
+
147
+ ## 你的身份
148
+ {角色 prompt_template}
149
+
150
+ ## 团队信息
151
+ - 团队名称: {team_name}
152
+ - 你的角色: {role_id}
153
+
154
+ ## 任务绑定 (1:1 专用)
155
+
156
+ **⚠️ 重要:你只负责处理一个任务,不可认领其他任务!**
157
+
158
+ - 分配给你的任务 ID: {task_id}
159
+ - 任务主题: {task_subject}
160
+ - 完成此任务后,你将被立即销毁释放资源
161
+ - **禁止** 认领或执行其他任务
162
+ - 可以调用 TaskList 查看全局进度,但仅限查看,不可对其他任务执行 TaskUpdate
163
+
164
+ ## 📖 首要任务:阅读工作包文档
165
+
166
+ **执行任何任务前,必须先读取工作包文档!**
167
+
168
+ 1. 确认任务后,立即读取任务 description 中指定的工作包文档
169
+ 2. 工作包文档路径格式: `docs/wp/WP-XXX.md` 或 `docs/wp/WP-XXX-N-type.md`
170
+ 3. 从文档中获取: 问题分析/上下文、实施计划 Step 1-N、关键文件列表、验收标准
171
+
172
+ ## 工作流程 (必须严格遵守)
173
+
174
+ ### 1. 确认任务分配
175
+ TaskGet(taskId="{task_id}") — 验证 owner 是你、status 是 pending 或 in_progress
176
+
177
+ ### 2. 开始执行
178
+ - 立即将 status 改为 "in_progress": TaskUpdate(taskId="{task_id}", status="in_progress")
179
+ - 读取工作包文档获取完整上下文
180
+ - 按任务描述执行
181
+ - 完成验收标准
182
+
183
+ ### 3. 完成任务
184
+ TaskUpdate(taskId="{task_id}", status="completed")
185
+
186
+ ### 4. 等待关闭 (🔴 必须响应)
187
+
188
+ **完成任务后,不要查找其他任务!直接等待 Lead 的 shutdown_request。**
189
+
190
+ 当收到 `shutdown_request` 消息时,**必须**发送响应:
191
+
192
+ ```
193
+ SendMessage(
194
+ to="team-lead",
195
+ message={
196
+ "type": "shutdown_response",
197
+ "request_id": "{从 shutdown_request 中提取的 request_id}",
198
+ "approve": true
199
+ }
200
+ )
201
+ ```
202
+
203
+ 发送响应后,你的工作结束,可以退出。
204
+
205
+ **⚠️ 禁止事项**:
206
+ - 不要认领或执行其他任务(可以查看 TaskList 了解进度,但不可对其他任务执行 TaskUpdate)
207
+ - 不要在完成后继续工作
208
+ - 必须等待 Lead 的 shutdown_request,不要主动退出
209
+
210
+ ## 相关经验(从历史中学习)
211
+
212
+ ### 经验 1: {标题}
213
+ **问题**: {problem}
214
+ **解决方案**: {solution}
215
+
216
+ ## 输出要求
217
+ 1. 修改/新增的文件清单
218
+ 2. 验收标准完成情况
219
+ 3. 遇到的问题和解决方案
220
+ 4. **如有新经验,请按以下格式总结**:
221
+ ```
222
+ ### [标签] 经验标题
223
+ **问题**: ...
224
+ **解决方案**: ...
225
+ ```
226
+
227
+ ## 任务完成后必须执行 (Critical!)
228
+
229
+ ### 状态同步 (不可跳过)
230
+ 完成工作包后,你必须更新以下文档:
231
+
232
+ 1. **更新 task.md**: 将工作包状态改为 `✅ 完成`,添加到"最近完成"列表
233
+ 2. **更新 docs/wp/WP-XXX.md** (如存在): 更新状态为 ✅ 完成,添加完成日期
234
+ 3. **验证同步**: 重新读取 task.md 确认状态已更新
235
+
236
+ ⚠️ 如果不执行状态同步,工作包将被视为未完成!
237
+
238
+ ## 重要提醒
239
+ - **你只处理一个任务** — 完成后等待 shutdown,不要查找其他任务
240
+ - 完成后必须执行测试验证
241
+ - 如遇阻塞问题,在任务描述中说明阻塞原因
242
+ - 不要跳过任何验收标准
243
+ - 任务完成后立即更新状态为 completed,方便 Lead 检测并解锁依赖任务
244
+ - 收到 shutdown_request 后立即响应,不要延迟
245
+ ```
@@ -15,26 +15,6 @@ description: Use when user says "批量执行", "并行执行", "调度子代理
15
15
  - "执行工作包 WP-XXX, WP-YYY"
16
16
  - "开始批量任务"
17
17
 
18
- ## ⚠️ 权限要求
19
-
20
- 本 skill 的 Step 7 清理流程需要 Bash 工具权限来:
21
- - 验证目录是否存在 (`test -d`)
22
- - 在 TeamDelete 失败时执行文件系统级删除 (`rm -rf`)
23
-
24
- **建议权限配置**(添加到 settings.json 的 `permissions.allow` 中):
25
- ```json
26
- {
27
- "allow": [
28
- "Bash(test -d $HOME/.claude/teams/*)",
29
- "Bash(test -d $HOME/.claude/tasks/*)",
30
- "Bash(rm -rf $HOME/.claude/teams/*)",
31
- "Bash(rm -rf $HOME/.claude/tasks/*)"
32
- ]
33
- }
34
- ```
35
-
36
- 如果权限被拒绝,清理流程会提示用户手动执行 `清理团队`。
37
-
38
18
  ## Quick Reference
39
19
 
40
20
  | 场景 | 执行方式 |
@@ -215,66 +195,19 @@ TaskUpdate:
215
195
 
216
196
  **⚠️ 重要**: description 必须包含工作包文档路径,让 Subagent 知道从哪里获取完整上下文!
217
197
 
218
- **示例**:
219
- ```
220
- WP-037 无依赖 → Task #1, 无 blockedBy
221
- WP-038 依赖 WP-037 → Task #2, blockedBy: [#1]
222
- WP-039 依赖 WP-038 → Task #3, blockedBy: [#2]
223
- ```
224
-
225
- ### Step 4: 角色匹配
226
-
227
- ```python
228
- def match_role(work_package):
229
- """匹配最合适的角色"""
230
- scores = {}
231
-
232
- for role in roles:
233
- score = 0
234
- # 关键词匹配 (权重 0.5)
235
- for keyword in work_package.keywords:
236
- if keyword in role.keywords:
237
- score += 0.5
238
-
239
- # 任务类型匹配 (权重 0.3)
240
- if work_package.type in role.task_types:
241
- score += 0.3
242
-
243
- # 模块标签匹配 (权重 0.2)
244
- for tag in work_package.tags:
245
- if tag in role.module_tags:
246
- score += 0.2
247
-
248
- scores[role.id] = score
198
+ ### Step 4-5: 角色匹配 + 记忆准备
249
199
 
250
- return max(scores, key=scores.get)
200
+ **📖 在执行此步骤前,读取角色与记忆参考文档:**
251
201
  ```
252
-
253
- ### Step 5: 预计算角色 + 记忆准备
254
-
255
- **⚠️ 重要**: 角色匹配和记忆注入在监控循环之前完成(预计算),为每个工作包准备好角色 Prompt。
256
-
257
- ```
258
- # 预计算所有工作包的角色匹配结果和记忆
259
-
260
- wp_assignments = {} # {task_id: {role_id, role_prompt, memories, wp_doc_path}}
261
-
262
- for task in tasks:
263
- wp = extract_work_package(task)
264
- role = match_role(wp)
265
- memories = load_memories(role.id)
266
- wp_assignments[task.id] = {
267
- "role_id": role.id,
268
- "role_prompt": role.prompt_template,
269
- "memories": memories,
270
- "wp_doc_path": wp.doc_path
271
- }
202
+ Read("plugins/core/skill-agent-dispatcher/roles-reference.md")
272
203
  ```
273
204
 
274
- **为什么预计算**:
275
- - 监控循环中按需创建 Teamee 时,直接使用预计算结果构建 Prompt
276
- - 避免在监控循环中重复执行角色匹配逻辑
277
- - 角色匹配算法不变(仍使用 Step 4 中的算法)
205
+ 该文档包含:
206
+ - **Step 4**: 角色匹配算法(关键词/任务类型/模块标签加权评分)
207
+ - **Step 5**: 预计算角色和记忆的完整流程
208
+ - **角色赋能系统**: 核心角色表、领域角色表、角色文件位置
209
+ - **记忆注入机制**: 经验提取逻辑、动态数量、回退机制
210
+ - **经验沉淀闭环**: 执行完成后的经验提取流程
278
211
 
279
212
  ### Step 6: 初始创建 Teamee(首次可用任务)
280
213
 
@@ -364,10 +297,6 @@ while (now() - start_time) < max_wait_time:
364
297
  "request_id": f"shutdown-{task.id}-{timestamp()}"
365
298
  })
366
299
 
367
- # B2. 等待 shutdown_response(最多 shutdown_timeout 秒)
368
- # Teamee 收到后应回复 {"type":"shutdown_response","approve":true}
369
- # 如果超时未响应,继续执行(不阻塞循环)
370
-
371
300
  # B3. 从映射表移除
372
301
  del teamee_map[task.id]
373
302
  print(f"Teamee {teamee_name} 已销毁并从映射表移除")
@@ -424,7 +353,6 @@ while (now() - start_time) < max_wait_time:
424
353
  # 超时处理
425
354
  if (now() - start_time) >= max_wait_time:
426
355
  print("监控超时,强制执行清理")
427
- # 销毁所有剩余的 Teamee
428
356
  for task_id, teamee_name in teamee_map.items():
429
357
  SendMessage(to=teamee_name, message={
430
358
  "type": "shutdown_request",
@@ -452,323 +380,30 @@ def is_unblocked(task):
452
380
  - 每次循环都检查 `teamee_map` 防止重复创建/重复销毁
453
381
  - 异常检测同时检查 `teamee_map` 是否为空,避免误判
454
382
 
455
- ### Step 7: 清理团队 (🔴 强制执行 + 验证)
456
-
457
- <HARD-GATE>
458
- TeamDelete 必须执行,且必须验证结果!
459
- 注意:大部分 Teamee 已在 Step 6.5 监控循环中即时销毁。
460
- 此步骤负责最终的 TeamDelete 调用和验证。
461
- 不信任 TeamDelete 返回值,必须检查目录是否真的被删除!
462
- 以下步骤必须按顺序逐一执行,不可跳过!
463
- </HARD-GATE>
464
-
465
- > **设计说明**: 以下使用显式步骤而非循环,确保 AI agent 能忠实执行每一步。
466
- > 路径使用 `$HOME` 变量(Git Bash 兼容 Windows)。
383
+ ### Step 7: 清理团队
467
384
 
468
- ---
469
-
470
- #### Step 7a: 安全检查(3 个前置条件)
471
-
472
- **条件 1** — `team_name` 非空且仅含合法字符 `[a-zA-Z0-9_-]`
473
- - 失败 → 打印 `❌ 错误:team_name 无效` → 提示手动执行 `清理团队` → **停止**
474
-
475
- **条件 2** — 团队目录存在
476
- - 用 Bash 检查: `test -d "$HOME/.claude/teams/$team_name" && echo "EXISTS" || echo "NOT_FOUND"`
477
- - 返回 `NOT_FOUND` → 打印 `ℹ️ 团队目录不存在,可能已被清理,跳过` → **停止**
478
-
479
- **条件 3** — 路径安全验证
480
- - 用 Bash 检查: `basename "$HOME/.claude/teams/$team_name"` 应返回 `$team_name`
481
- - 不匹配 → 打印 `❌ 安全检查失败:路径异常` → 提示手动执行 `清理团队` → **停止**
482
-
483
- 全部通过 → 继续 Step 7b
484
-
485
- ---
486
-
487
- #### Step 7b: 发送 shutdown_request (清理残留 Teamee)
488
-
489
- 检查 `teamee_map` 中是否还有未销毁的 Teamee:
385
+ **📖 在执行此步骤前,读取清理参考文档:**
490
386
  ```
491
- # 检查映射表中是否还有残留 Teamee
492
- if teamee_map is not empty:
493
- print(f"⚠️ 发现 {len(teamee_map)} 个未销毁的 Teamee,发送 shutdown_request")
494
- for task_id, teamee_name in teamee_map.items():
495
- SendMessage(to=teamee_name, message={
496
- "type": "shutdown_request",
497
- "reason": "最终清理阶段,准备 TeamDelete",
498
- "request_id": f"final-shutdown-{task_id}-{timestamp()}"
499
- })
500
- else:
501
- print("所有 Teamee 已在监控循环中即时销毁,无需额外 shutdown")
502
-
503
- # 额外安全网: 读取团队配置检查是否有遗漏的成员
504
- # (防止映射表不一致的情况)
505
- config = Read("~/.claude/teams/$team_name/config.json")
506
- for member in config.members:
507
- if member.name != "team-lead" and member.name not in teamee_map.values():
508
- SendMessage(to=member.name, message={
509
- "type": "shutdown_request",
510
- "reason": "最终清理阶段,发现未在映射表中的成员",
511
- "request_id": f"orphan-shutdown-{member.name}-{timestamp()}"
512
- })
387
+ Read("plugins/core/skill-agent-dispatcher/cleanup-reference.md")
513
388
  ```
514
389
 
515
- ---
516
-
517
- #### Step 7c: 等待 shutdown 响应(最多 15 秒)
518
-
519
- 等待所有 Teamee `shutdown_response`。
520
- 如果 15 秒内未全部响应,不再等待,继续执行清理。
521
-
522
- ---
523
-
524
- #### Step 7d: 执行 TeamDelete(第 1 次)
525
-
526
- 调用 `TeamDelete()` 工具。
527
-
528
- **验证** — 用 Bash 检查目录是否真的被删除:
529
- ```bash
530
- test -d "$HOME/.claude/teams/$team_name" && echo "EXISTS" || echo "GONE"
531
- test -d "$HOME/.claude/tasks/$team_name" && echo "EXISTS" || echo "GONE"
532
- ```
533
-
534
- - 两个都返回 `GONE` → 打印 `✅ 清理成功(验证通过)` → **跳到 Step 7g**
535
- - 任一返回 `EXISTS` → 继续 Step 7e
536
-
537
- ---
538
-
539
- #### Step 7e: 执行 TeamDelete(第 2 次,等待 2 秒后重试)
540
-
541
- 调用 `TeamDelete()` 工具。
542
-
543
- **验证** — 同 Step 7d 的 Bash 检查。
544
-
545
- - 两个都返回 `GONE` → 打印 `✅ 清理成功(第 2 次尝试)` → **跳到 Step 7g**
546
- - 任一返回 `EXISTS` → 继续 Step 7f
547
-
548
- ---
549
-
550
- #### Step 7f: 文件系统级强制清理(TeamDelete 回退方案)
551
-
552
- 打印 `🔥 TeamDelete 两次失败,执行文件系统级清理...`
553
-
554
- **安全确认** — 再次验证路径:
555
- ```bash
556
- basename "$HOME/.claude/teams/$team_name"
557
- ```
558
- - 返回值不等于 `$team_name` → 打印 `❌ 安全检查失败` → 提示手动执行 `清理团队` → **停止**
559
-
560
- **执行删除**(逐个目录,检查存在后再删):
561
- ```bash
562
- # 删除团队目录(仅当存在时)
563
- test -d "$HOME/.claude/teams/$team_name" && rm -rf "$HOME/.claude/teams/$team_name" && echo "DELETED" || echo "SKIP_OR_FAIL"
564
-
565
- # 删除任务目录(仅当存在时)
566
- test -d "$HOME/.claude/tasks/$team_name" && rm -rf "$HOME/.claude/tasks/$team_name" && echo "DELETED" || echo "SKIP_OR_FAIL"
567
- ```
568
-
569
- 如果 Bash `rm -rf` 权限被拒绝:
570
- - 打印 `⚠️ 权限不足,无法执行文件系统删除`
571
- - 提示用户手动执行 `清理团队` 或 `rm -rf "$HOME/.claude/teams/$team_name" "$HOME/.claude/tasks/$team_name"`
572
-
573
- ---
574
-
575
- #### Step 7g: 最终验证
576
-
577
- 用 Bash 确认两个目录都已清除:
578
- ```bash
579
- test -d "$HOME/.claude/teams/$team_name" && echo "STILL_EXISTS" || echo "CLEAN"
580
- test -d "$HOME/.claude/tasks/$team_name" && echo "STILL_EXISTS" || echo "CLEAN"
581
- ```
582
-
583
- - 两个都返回 `CLEAN` → 打印 `✅ 清理流程完成`
584
- - 任一返回 `STILL_EXISTS` → 打印 `❌ 清理失败!请手动执行: 清理团队`
585
-
586
- ---
587
-
588
- #### Step 7h: 记录清理日志
589
-
590
- 记录清理结果到执行报告(成功/失败、尝试次数、使用的方法)。
390
+ 该文档包含:
391
+ - **权限要求**: Bash 工具权限配置建议
392
+ - **Step 7a-7h**: 完整清理流程(安全检查 shutdown TeamDelete → 验证)
393
+ - **Error Handling**: 循环依赖、Teamee 失败、超时等错误处理
394
+ - **Cleanup Guarantee**: 清理保障矩阵
591
395
 
592
396
  ---
593
397
 
594
398
  ## Teamee Prompt 模板
595
399
 
596
- ```markdown
597
- # [角色名称] - 单一任务专用执行
598
-
599
- ## 你的身份
600
- {角色 prompt_template}
601
-
602
- ## 团队信息
603
- - 团队名称: {team_name}
604
- - 你的角色: {role_id}
605
-
606
- ## 任务绑定 (1:1 专用)
607
-
608
- **⚠️ 重要:你只负责处理一个任务,不可认领其他任务!**
609
-
610
- - 分配给你的任务 ID: {task_id}
611
- - 任务主题: {task_subject}
612
- - 完成此任务后,你将被立即销毁释放资源
613
- - **禁止** 认领或执行其他任务
614
- - 可以调用 TaskList 查看全局进度,但仅限查看,不可对其他任务执行 TaskUpdate
615
-
616
- ## 📖 首要任务:阅读工作包文档
617
-
618
- **执行任何任务前,必须先读取工作包文档!**
619
-
620
- ```
621
- 1. 确认任务后,立即读取任务 description 中指定的工作包文档
622
- 2. 工作包文档路径格式: `docs/wp/WP-XXX.md` 或 `docs/wp/WP-XXX-N-type.md`
623
- 3. 从文档中获取:
624
- - 问题分析/上下文
625
- - 实施计划 Step 1-N
626
- - 关键文件列表
627
- - 验收标准
628
- ```
629
-
630
- ## 工作流程 (必须严格遵守)
631
-
632
- ### 1. 确认任务分配
400
+ **📖 在创建 Teamee 时(Step 6 / Step 6.5),读取 Prompt 模板参考文档:**
633
401
  ```
634
- # 你的任务已由 Lead 预分配,直接确认
635
- TaskGet(taskId="{task_id}")
636
- # 验证 owner 是你、status 是 pending 或 in_progress
402
+ Read("plugins/core/skill-agent-dispatcher/roles-reference.md")
637
403
  ```
638
404
 
639
- ### 2. 开始执行
640
- - 立即将 status 改为 "in_progress"
641
- - TaskUpdate(taskId="{task_id}", status="in_progress")
642
- - 读取工作包文档获取完整上下文
643
- - 按任务描述执行
644
- - 完成验收标准
645
-
646
- ### 3. 完成任务
647
- ```
648
- TaskUpdate(taskId="{task_id}", status="completed")
649
- ```
650
-
651
- ### 4. 等待关闭 (🔴 必须响应)
652
-
653
- **完成任务后,不要查找其他任务!直接等待 Lead 的 shutdown_request。**
654
-
655
- 当收到 `shutdown_request` 消息时,**必须**发送响应:
656
-
657
- ```
658
- # 从收到的 shutdown_request 中提取 request_id
659
- # 然后发送 shutdown_response
660
-
661
- SendMessage(
662
- to="team-lead",
663
- message={
664
- "type": "shutdown_response",
665
- "request_id": "{从 shutdown_request 中提取的 request_id}",
666
- "approve": true
667
- }
668
- )
669
- ```
670
-
671
- 发送响应后,你的工作结束,可以退出。
672
-
673
- **⚠️ 禁止事项**:
674
- - 不要认领或执行其他任务(可以查看 TaskList 了解进度,但不可对其他任务执行 TaskUpdate)
675
- - 不要在完成后继续工作
676
- - 必须等待 Lead 的 shutdown_request,不要主动退出
677
-
678
- ## 相关经验(从历史中学习)
679
-
680
- ### 经验 1: {标题}
681
- **问题**: {problem}
682
- **解决方案**: {solution}
683
-
684
- ## 项目上下文
685
- - 项目: Kings Watching (Godot 4.x 卡牌塔防游戏)
686
- - Godot 版本: 4.6.1
687
-
688
- ## 输出要求
689
- 1. 修改/新增的文件清单
690
- 2. 验收标准完成情况
691
- 3. 遇到的问题和解决方案
692
- 4. **如有新经验,请按以下格式总结**:
693
- ```
694
- ### [标签] 经验标题
695
- **问题**: ...
696
- **解决方案**: ...
697
- ```
698
-
699
- ## 任务完成后必须执行 (Critical!)
700
-
701
- ### 状态同步 (不可跳过)
702
- 完成工作包后,你必须更新以下文档:
703
-
704
- 1. **更新 task.md**:
705
- - 将工作包状态从 `📋 待开始` 改为 `✅ 完成`
706
- - 添加到"最近完成"列表
707
-
708
- 2. **更新 docs/wp/WP-XXX.md** (如存在):
709
- - 更新状态为 ✅ 完成
710
- - 添加完成日期
711
-
712
- 3. **验证同步**:
713
- - 重新读取 task.md 确认状态已更新
714
-
715
- ⚠️ 如果不执行状态同步,工作包将被视为未完成!
716
-
717
- ## 重要提醒
718
- - **你只处理一个任务** — 完成后等待 shutdown,不要查找其他任务
719
- - 完成后必须执行测试验证
720
- - 如遇阻塞问题,在任务描述中说明阻塞原因
721
- - 不要跳过任何验收标准
722
- - 任务完成后立即更新状态为 completed,方便 Lead 检测并解锁依赖任务
723
- - 收到 shutdown_request 后立即响应,不要延迟
724
- ```
725
-
726
- ---
727
-
728
- ## 角色赋能系统
729
-
730
- ### 核心角色(通用框架)
731
-
732
- | 角色ID | 名称 | 匹配关键词 |
733
- |--------|------|------------|
734
- | `coordinator` | 协调者 | 调度、协调、监控、分配、统筹 |
735
- | `architect` | 架构师 | 架构、设计、结构、模块、接口 |
736
- | `implementer` | 实现者 | 实现、编码、开发、修复、重构 |
737
- | `tester` | 测试者 | 测试、验证、检查、单元测试 |
738
- | `documenter` | 文档编写者 | 文档、说明、注释、README |
739
-
740
- ### 领域角色(由项目模板扩展)
741
-
742
- | 角色ID | 名称 | 匹配关键词 |
743
- |--------|------|------------|
744
- | `frontend-dev` | 前端开发 | 前端、UI、组件、样式 |
745
- | `backend-dev` | 后端开发 | 后端、API、服务、数据库 |
746
- | `devops` | 运维专家 | 部署、CI/CD、Docker、容器 |
747
- | `godot-scene-expert` | Godot 场景+UI专家 | 场景、节点、tscn、UI(Godot模板)|
748
-
749
- ### 角色文件位置
750
-
751
- | 文件类型 | 路径 |
752
- |----------|------|
753
- | 角色注册表 | `.claude/agents/role-registry.yaml` |
754
- | 元角色定义 | `.claude/agents/roles/meta/{role_id}.yaml` |
755
- | 职能角色定义 | `.claude/agents/roles/functional/{role_id}.yaml` |
756
- | 领域角色定义 | `.claude/agents/roles/domain/{role_id}.yaml` |
757
- | 专属经验库 | `.claude/agents/memories/{role_id}.md` |
758
-
759
- ---
760
-
761
- ## 记忆注入机制
762
-
763
- ### 经验提取逻辑
764
-
765
- 1. **读取角色专属库**:`.claude/agents/memories/{role_id}.md`
766
- 2. **回退机制**:如专属库不足,读取 `docs/EXPERIENCE.md`
767
- 3. **按标签过滤**:使用角色的 `experience_tags` 过滤
768
- 4. **动态数量**:
769
- - 简单任务(<2h):1-2 条
770
- - 中等任务(2-4h):3 条
771
- - 复杂任务(>4h):5 条
405
+ `roles-reference.md` 底部包含完整的 Teamee Prompt 模板,用于 `build_single_task_prompt()` 构建。
406
+ 模板要点:1:1 任务绑定、工作包文档优先阅读、完成后等待 shutdown_request、状态同步必须执行。
772
407
 
773
408
  ---
774
409
 
@@ -783,25 +418,11 @@ SendMessage(
783
418
  | MCP Servers | 共享相同的 MCP 配置 |
784
419
  | 项目代码 | 共享同一工作目录 |
785
420
 
786
- ### 协调共享 (通过 Task List)
787
-
788
- ```
789
- ┌─────────────────────────────────────────────────┐
790
- │ Task List (共享状态) │
791
- │ │
792
- │ Task #1: 状态=completed, Owner=scene-expert-t1 │
793
- │ Task #2: 状态=in_progress, Owner=script-expert-t2 │
794
- │ Task #3: 状态=pending, blockedBy=[#2], Owner="" │
795
- │ (Task #3 等待 #2 完成后 Lead 创建专用 Teamee) │
796
- └─────────────────────────────────────────────────┘
797
- ```
798
-
799
421
  ### 主动共享 (通过 SendMessage)
800
422
 
801
423
  | 消息类型 | 用途 |
802
424
  |----------|------|
803
425
  | `message` | Lead ↔ Teamee 点对点通信 |
804
- | `broadcast` | Lead → 全体通知 |
805
426
  | `shutdown_request` | Lead 请求 Teamee 关闭 |
806
427
 
807
428
  ---
@@ -835,16 +456,6 @@ SendMessage(
835
456
  docs/reports/{YYYY-MM-DD}_{工作包列表}_execution_report.md
836
457
  ```
837
458
 
838
- **单工作包**:
839
- ```
840
- docs/reports/2026-03-14_WP-073_execution_report.md
841
- ```
842
-
843
- **批量工作包**:
844
- ```
845
- docs/reports/2026-03-14_WP-073-075_execution_report.md
846
- ```
847
-
848
459
  ### 报告内容模板
849
460
 
850
461
  ```markdown
@@ -864,24 +475,10 @@ docs/reports/2026-03-14_WP-073-075_execution_report.md
864
475
  | #3 | WP-075 | combat-ai-expert | ✅ 完成 | #2 | - |
865
476
 
866
477
  ## 详细结果
867
-
868
- ### WP-073: 凝视区域形状升级
869
- - 执行者: godot-scene-expert
870
- - 子任务: 3/3 完成
871
- - 测试: 9/9 通过
872
- - 文件变更:
873
- - 新增: 2 个
874
- - 修改: 3 个
875
-
876
- ### WP-074: ...
877
- (类似)
478
+ (每个 WP 的执行者、子任务完成情况、文件变更)
878
479
 
879
480
  ## 📁 文件变更汇总
880
- ```
881
- 新增: X 个文件
882
- 修改: Y 个文件
883
- 测试: Z 个文件
884
- ```
481
+ 新增: X 个 / 修改: Y 个 / 测试: Z 个
885
482
 
886
483
  ## 💡 新增经验
887
484
  (如有新经验,已写入角色专属库)
@@ -892,18 +489,7 @@ docs/reports/2026-03-14_WP-073-075_execution_report.md
892
489
 
893
490
  ---
894
491
 
895
- ## 经验沉淀闭环
896
-
897
- 执行完成后:
898
-
899
- 1. **分析 Teamee 输出** - 提取新经验
900
- 2. **写入角色专属库** - `.claude/agents/memories/{role_id}.md`
901
- 3. **同步到 EXPERIENCE.md** - 去重合并
902
- 4. **触发 experience-logger** - 记录本次执行的经验
903
-
904
- ---
905
-
906
- ## 🆕 拆分工作包执行支持
492
+ ## 拆分工作包执行支持
907
493
 
908
494
  当工作包有子工作包时,agent-dispatcher 会自动识别并按依赖调度。
909
495
 
@@ -912,51 +498,20 @@ docs/reports/2026-03-14_WP-073-075_execution_report.md
912
498
  ```
913
499
  1. 读取父工作包文档 (docs/wp/WP-XXX.md)
914
500
  2. 检测拆分模式 (simple/standard/fine-grained)
915
- 3. 解析子工作包列表
916
- 4. 解析依赖关系
917
- 5. 创建 Task List 任务
918
- 6. 设置 blockedBy 依赖
919
- 7. 角色匹配分配角色
920
- 8. 按依赖顺序调度执行
921
- 9. 验证关卡机制:
922
- - verify 失败 → 停止后续任务
923
- - 所有 verify 通过 → 标记完成
501
+ 3. 解析子工作包列表 + 依赖关系
502
+ 4. 创建 Task List 任务 + 设置 blockedBy
503
+ 5. 角色匹配 分配角色
504
+ 6. 按依赖顺序调度执行
505
+ 7. 验证关卡: verify 失败 停止后续; verify 通过 → 继续
924
506
  ```
925
507
 
926
508
  ### 拆分模式处理
927
509
 
928
- #### 模式 A: simple (不拆分)
929
- 直接作为单个任务调度执行。
930
-
931
- #### 模式 B: standard (标准拆分)
932
- 生成 4 个子任务:
933
- - WP-XXX-1-impl → 领域专家
934
- - WP-XXX-2-test → test-reviewer (blockedBy: #1)
935
- - WP-XXX-3-verify → test-reviewer (blockedBy: #2)
936
- - WP-XXX-4-review → code-reviewer (blockedBy: #3)
937
-
938
- #### 模式 C: fine-grained (细粒度拆分)
939
- 按模块拆分为多个实现任务,每个模块独立测试,最后统一验证和审查。
940
-
941
- ### 验证关卡机制
942
-
943
- 当 `-verify` 工作包执行失败时:
944
- 1. 停止所有依赖此工作包的后续任务
945
- 2. 通知 Lead 验证失败
946
- 3. 等待用户指示
947
-
948
- 当 `-verify` 工作包通过时:
949
- 1. 解锁 `-review` 任务
950
- 2. 继续执行流程
951
-
952
- ### 角色自动匹配
953
-
954
- | 子工作包类型 | 自动匹配角色 |
955
- |--------------|--------------|
956
- | `-impl` | 根据关键词匹配领域专家 |
957
- | `-test` | test-reviewer |
958
- | `-verify` | test-reviewer |
959
- | `-review` | code-reviewer |
510
+ | 模式 | 处理方式 |
511
+ |------|----------|
512
+ | **simple** | 不拆分,直接作为单个任务调度 |
513
+ | **standard** | 4 个子任务: impl → test → verify → review(依赖链) |
514
+ | **fine-grained** | 按模块拆分多个 impl,每个独立 test,最后统一 verify + review |
960
515
 
961
516
  ---
962
517
 
@@ -969,57 +524,8 @@ docs/reports/2026-03-14_WP-073-075_execution_report.md
969
524
  | `completion-report` | 批量执行后生成报告 |
970
525
  | `checklist` | 每个工作包完成后检查 |
971
526
  | `experience-logger` | 批量执行后记录经验 |
972
- | `task-creator` | 🆕 支持拆分工作包创建 |
973
- | `batch-task-creator` | 🆕 支持批量拆分 |
974
-
975
- ---
976
-
977
- ## Error Handling
978
-
979
- ### 循环依赖
980
- ```
981
- ❌ 检测到循环依赖: WP-037 → WP-038 → WP-039 → WP-037
982
- 请手动解除依赖关系后重试。
983
- ```
984
-
985
- ### 角色匹配失败
986
- ```
987
- ⚠️ 无法自动匹配角色,使用默认 general-purpose
988
- 工作包: WP-XXX
989
- 建议手动指定角色
990
- ```
991
-
992
- ### Teamee 执行失败
993
- ```
994
- ⚠️ Task #2 执行失败
995
- Owner: godot-script-expert-t2
996
- 状态: in_progress (卡住)
997
- 处理: Lead 发送 shutdown_request 即时销毁该 Teamee
998
- 从 teamee_map 移除映射
999
- 创建新 Teamee 重试 或 人工介入
1000
- ```
1001
-
1002
- ### 部分任务超时
1003
- ```
1004
- ⚠️ Task #3 等待依赖超时
1005
- 依赖: Task #2 (状态: in_progress, 超过 30 分钟)
1006
- 处理: 检查 Task #2 的 Teamee 状态
1007
- 必要时发送消息确认进度
1008
- ```
1009
-
1010
- ### 清理超时
1011
- ```
1012
- ⚠️ 清理等待超时(30秒)
1013
- 可能原因:
1014
- - Teamee 没有响应 shutdown_request
1015
- - Teamee 使用了 Explore 等只读 agent(没有 SendMessage 工具)
1016
- - Teamee 进程卡死
1017
-
1018
- 处理:
1019
- - 强制执行 TeamDelete(不是 rm -rf!)
1020
- - 建议用户检查是否有残留进程
1021
- - 检查 Step 5 是否使用了正确的 subagent_type
1022
- ```
527
+ | `task-creator` | 支持拆分工作包创建 |
528
+ | `batch-task-creator` | 支持批量拆分 |
1023
529
 
1024
530
  ---
1025
531
 
@@ -1034,42 +540,3 @@ Owner: godot-script-expert-t2
1034
540
  7. **经验沉淀形成闭环** - 每次执行都让角色更聪明
1035
541
  8. **🔴 TeamDelete 是强制的** - 无论成功/失败/超时,都必须执行清理!
1036
542
  9. **🔴 监控循环不可跳过** - Lead 必须进入 Step 6.5 监控循环,负责动态创建和即时销毁
1037
-
1038
- ## Cleanup Guarantee (清理保障)
1039
-
1040
- ```
1041
- ┌─────────────────────────────────────────────────────────────┐
1042
- │ 强制清理检查点 │
1043
- │ │
1044
- │ ✅ 正常完成 → Step 6.5 即时销毁 → Step 7 最终清理 → TeamDelete │
1045
- │ ✅ 部分失败 → Step 6.5 即时销毁 → Step 7 最终清理 → TeamDelete │
1046
- │ ✅ 超时 → Step 6.5 超时销毁 → Step 7 强制清理 → TeamDelete │
1047
- │ ✅ 异常中断 → 捕获中断 → Step 7 强制销毁残留 → TeamDelete │
1048
- │ │
1049
- │ ❌ 无任何情况可以跳过 TeamDelete! │
1050
- └─────────────────────────────────────────────────────────────┘
1051
- ```
1052
-
1053
- ---
1054
-
1055
- ## Migration Guide (从旧版本迁移)
1056
-
1057
- ### 旧版本 vs 新版本
1058
-
1059
- | 操作 | 旧版本 | 新版本 |
1060
- |------|--------|--------|
1061
- | 创建协调 | 无 | TeamCreate |
1062
- | 任务管理 | 主 Agent 手动 | TaskCreate + TaskList |
1063
- | 依赖处理 | 主 Agent 分析 | blockedBy 自动阻塞 |
1064
- | 任务分配 | 主 Agent 指定 | Lead 按需创建 + 预分配 (1:1 绑定) |
1065
- | 状态同步 | 无 | TaskList 实时 |
1066
- | Teamee 生命周期 | 无管理 | 按需创建 / 即时销毁 |
1067
- | 清理 | 无 | TeamDelete |
1068
-
1069
- ### 保留的功能
1070
-
1071
- - ✅ 角色匹配算法
1072
- - ✅ 记忆注入机制
1073
- - ✅ 经验沉淀闭环
1074
- - ✅ 执行报告生成
1075
- - ✅ 错误处理逻辑