tackle-harness 0.0.2 → 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
|
@@ -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
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skill-agent-dispatcher",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "skill",
|
|
5
5
|
"description": "子代理批量调度 Skill - 基于 Agent Teams 机制的子代理批量任务调度,支持角色赋能、记忆注入、依赖分析和并行执行",
|
|
6
6
|
"triggers": ["批量执行", "并行执行", "调度子代理", "agent-dispatcher", "batch execute", "parallel execute", "dispatch agents"],
|
|
@@ -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
|
+
```
|