fe-harness 1.0.0
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/README.md +55 -0
- package/agents/fe-codebase-mapper.md +945 -0
- package/agents/fe-design-scanner.md +47 -0
- package/agents/fe-executor.md +221 -0
- package/agents/fe-fix-loop.md +310 -0
- package/agents/fe-fixer.md +153 -0
- package/agents/fe-project-scanner.md +95 -0
- package/agents/fe-reviewer.md +141 -0
- package/agents/fe-verifier.md +231 -0
- package/agents/fe-wave-runner.md +477 -0
- package/bin/install.js +292 -0
- package/commands/fe/complete.md +35 -0
- package/commands/fe/execute.md +46 -0
- package/commands/fe/help.md +17 -0
- package/commands/fe/map-codebase.md +60 -0
- package/commands/fe/plan.md +36 -0
- package/commands/fe/status.md +39 -0
- package/fe-harness/bin/browser.cjs +271 -0
- package/fe-harness/bin/fe-tools.cjs +317 -0
- package/fe-harness/bin/lib/__tests__/browser.test.cjs +422 -0
- package/fe-harness/bin/lib/__tests__/config.test.cjs +93 -0
- package/fe-harness/bin/lib/__tests__/core.test.cjs +127 -0
- package/fe-harness/bin/lib/__tests__/scoring.test.cjs +130 -0
- package/fe-harness/bin/lib/__tests__/tasks.test.cjs +698 -0
- package/fe-harness/bin/lib/browser-core.cjs +365 -0
- package/fe-harness/bin/lib/config.cjs +34 -0
- package/fe-harness/bin/lib/core.cjs +135 -0
- package/fe-harness/bin/lib/logger.cjs +93 -0
- package/fe-harness/bin/lib/scoring.cjs +219 -0
- package/fe-harness/bin/lib/tasks.cjs +632 -0
- package/fe-harness/references/model-profiles.md +44 -0
- package/fe-harness/templates/config.jsonc +31 -0
- package/fe-harness/vendor/.gitkeep +0 -0
- package/fe-harness/vendor/puppeteer-core.cjs +445 -0
- package/fe-harness/workflows/complete.md +143 -0
- package/fe-harness/workflows/execute.md +227 -0
- package/fe-harness/workflows/help.md +89 -0
- package/fe-harness/workflows/map-codebase.md +331 -0
- package/fe-harness/workflows/plan.md +244 -0
- package/package.json +35 -0
- package/scripts/bundle-puppeteer.js +38 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# 完成工作流
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
在所有任务执行完毕后,生成完成报告、归档运行时产物、清理临时文件。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 流程
|
|
10
|
+
|
|
11
|
+
### 第一步:获取完成摘要
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks summary
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
解析返回的 JSON,检查 `isAllFinished` 字段:
|
|
18
|
+
|
|
19
|
+
- **`isAllFinished: true`** → 所有任务已完成(done/failed/skipped),继续下一步
|
|
20
|
+
- **`isAllFinished: false`** → 还有未完成的任务,输出提示并终止:
|
|
21
|
+
```
|
|
22
|
+
⚠️ 还有 N 个任务未完成(pending: X, in_progress: Y)。
|
|
23
|
+
请先运行 /fe:execute 完成剩余任务,或手动处理后再运行 /fe:complete。
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 第二步:输出完成报告
|
|
27
|
+
|
|
28
|
+
将摘要数据格式化为可读报告:
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
## ✅ fe-harness 执行完成
|
|
32
|
+
|
|
33
|
+
### 任务统计
|
|
34
|
+
|
|
35
|
+
| 指标 | 值 |
|
|
36
|
+
|------|-----|
|
|
37
|
+
| 总任务数 | {total} |
|
|
38
|
+
| ✅ 完成 | {done} |
|
|
39
|
+
| ❌ 失败 | {failed} |
|
|
40
|
+
| ⏭️ 跳过 | {skipped} |
|
|
41
|
+
| 🔄 总重试次数 | {totalRetries} |
|
|
42
|
+
| ⏱️ 总耗时 | {duration.totalFormatted} |
|
|
43
|
+
| 🕐 开始时间 | {duration.startedAt} |
|
|
44
|
+
| 🕐 结束时间 | {duration.completedAt} |
|
|
45
|
+
|
|
46
|
+
### 任务类型
|
|
47
|
+
|
|
48
|
+
| 类型 | 完成 / 总计 |
|
|
49
|
+
|------|-------------|
|
|
50
|
+
| 🎨 设计任务 | {designTasks.done} / {designTasks.total} |
|
|
51
|
+
| ⚙️ 逻辑任务 | {logicTasks.done} / {logicTasks.total} |
|
|
52
|
+
|
|
53
|
+
### 任务详情
|
|
54
|
+
|
|
55
|
+
| ID | 名称 | 类型 | 状态 | 重试 | 实现耗时 | 总耗时 |
|
|
56
|
+
|----|------|------|------|------|----------|--------|
|
|
57
|
+
| {id} | {name} | {type} | {status} | {retryCount} | {executorDuration} | {duration} |
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
> **实现耗时** = executor 独立实现阶段的耗时(startedAt → executorFinishedAt)
|
|
61
|
+
> **总耗时** = 含合并、验证、修复的端到端耗时(startedAt → completedAt)
|
|
62
|
+
> 同 wave 内多个任务的实现耗时重叠说明并行执行生效。
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 第三步:输出警告(如有)
|
|
66
|
+
|
|
67
|
+
如果 `hasWarnings: true`,在报告后追加:
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
### ⚠️ 未解决的问题
|
|
71
|
+
|
|
72
|
+
| ID | 名称 | 状态 | 错误信息 |
|
|
73
|
+
|----|------|------|----------|
|
|
74
|
+
| {id} | {name} | {status} | {error} |
|
|
75
|
+
...
|
|
76
|
+
|
|
77
|
+
> 这些任务未成功完成。可以使用 `node ~/.claude/fe-harness/bin/fe-tools.cjs tasks reset-all-failed` 重置后重新执行。
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 第四步:输出 Token 消耗
|
|
81
|
+
|
|
82
|
+
在报告末尾追加当前会话的 token 消耗信息。通过以下 bash 命令获取:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
claude --print-session-usage 2>/dev/null || echo '{"error":"unavailable"}'
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
如果命令不可用或报错,直接输出提示:
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
### 💰 Token 消耗
|
|
92
|
+
|
|
93
|
+
> 当前会话的 token 消耗请通过 `/cost` 命令查看。
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
如果命令返回了有效数据,格式化输出:
|
|
97
|
+
|
|
98
|
+
```markdown
|
|
99
|
+
### 💰 Token 消耗
|
|
100
|
+
|
|
101
|
+
| 指标 | 值 |
|
|
102
|
+
|------|-----|
|
|
103
|
+
| 输入 tokens | {input_tokens} |
|
|
104
|
+
| 输出 tokens | {output_tokens} |
|
|
105
|
+
| 总 tokens | {total_tokens} |
|
|
106
|
+
| 估算费用 | ${cost} |
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 第五步:归档运行时产物
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks archive
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
这会:
|
|
116
|
+
1. 将 `tasks.json`、`progress.md` 和 `context/` 下的所有文件复制到 `.fe-runtime/history/{timestamp}/`
|
|
117
|
+
2. 删除原始 `tasks.json` 和 `progress.md`
|
|
118
|
+
3. 清空 `context/` 目录
|
|
119
|
+
|
|
120
|
+
输出归档结果:
|
|
121
|
+
```
|
|
122
|
+
📦 已归档到 {archiveDir}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 第六步:提示后续操作
|
|
126
|
+
|
|
127
|
+
```markdown
|
|
128
|
+
### 后续操作
|
|
129
|
+
|
|
130
|
+
- 查看归档数据:`ls .fe-runtime/history/`
|
|
131
|
+
- 开始新一轮任务:准备功能列表后运行 `/fe:plan`
|
|
132
|
+
- 如需重新执行失败任务:从归档恢复 tasks.json 后运行 `/fe:execute`
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 参数支持
|
|
138
|
+
|
|
139
|
+
- `--no-archive`:只生成报告,不归档和清理(通过 `$ARGUMENTS` 传入)
|
|
140
|
+
- `--force`:即使有未完成任务也强制完成(跳过第一步检查)
|
|
141
|
+
|
|
142
|
+
如果 `$ARGUMENTS` 包含 `--no-archive`,跳过第四步。
|
|
143
|
+
如果 `$ARGUMENTS` 包含 `--force`,跳过第一步的未完成检查。
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# 执行编排工作流
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
两级编排架构:顶层编排器串行调度 wave,每个 wave 委托 `fe-wave-runner` 子代理在独立上下文中完成。
|
|
5
|
+
|
|
6
|
+
**架构:**
|
|
7
|
+
```
|
|
8
|
+
顶层编排器 (本文件)
|
|
9
|
+
└─ per wave → Agent(fe-wave-runner) ← 独立上下文
|
|
10
|
+
├─ Agent(fe-executor) ×N (worktree 隔离, 并行)
|
|
11
|
+
├─ 合并 worktree + backpressure 检查
|
|
12
|
+
├─ Agent(fe-verifier/reviewer) ×N (并行)
|
|
13
|
+
├─ 修复循环
|
|
14
|
+
└─ git commit + 写 wave-result
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**核心原则:**
|
|
18
|
+
- 编排器只调度,不执行实现/验证/修复
|
|
19
|
+
- 每个 wave 在独立上下文中闭环完成
|
|
20
|
+
- 状态持久化到 tasks.json,支持断点续跑
|
|
21
|
+
|
|
22
|
+
## 前置检查
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
INIT=$(node ~/.claude/fe-harness/bin/fe-tools.cjs init execute)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `error` → 输出错误,终止
|
|
29
|
+
- 成功 → 提取 config 和任务统计
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
CONFIG=$(node ~/.claude/fe-harness/bin/fe-tools.cjs config get)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
提取关键配置:`devServerCommand`, `maxRetries`, `verifyThreshold`, `reviewThreshold`, `dimensionThreshold`, `scoreDropTolerance`, `backpressureCommand`, `maxParallelBrowsers`
|
|
36
|
+
|
|
37
|
+
## 获取 Wave 执行计划
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
WAVES=$(node ~/.claude/fe-harness/bin/fe-tools.cjs tasks waves)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
提取:`waves`(按 wave 分组)、`waveOrder`(执行顺序)、`taskCount`
|
|
44
|
+
|
|
45
|
+
> `circularWarning` 不为 null 时**必须**输出警告。
|
|
46
|
+
|
|
47
|
+
输出计划概览:
|
|
48
|
+
```
|
|
49
|
+
Wave 执行计划: {waveOrder.length} 个 wave, {taskCount} 个任务
|
|
50
|
+
Wave 1: {n} 个任务 | Wave 2: {n} 个任务 | ...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 自动解决文件冲突
|
|
54
|
+
|
|
55
|
+
检查同 wave 内是否有任务修改相同文件,自动添加依赖关系将冲突任务分到不同 wave:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
RESOLVE=$(node ~/.claude/fe-harness/bin/fe-tools.cjs tasks resolve-conflicts)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- `resolved > 0` → 输出提示:`⚠️ 检测到 {resolved} 个文件冲突,已自动添加依赖关系。重新计算 wave 分组。`,然后重新获取 wave 计划:
|
|
62
|
+
```bash
|
|
63
|
+
WAVES=$(node ~/.claude/fe-harness/bin/fe-tools.cjs tasks waves)
|
|
64
|
+
```
|
|
65
|
+
重新输出计划概览。
|
|
66
|
+
- `resolved = 0` 或 `ok: true` 且无冲突 → 静默继续
|
|
67
|
+
|
|
68
|
+
## 启动开发服务器
|
|
69
|
+
|
|
70
|
+
> 仅设计任务需要开发服务器。全部为逻辑任务时跳过本节。
|
|
71
|
+
|
|
72
|
+
**前置校验:** 有设计任务但 `devServerCommand` 未配置时:
|
|
73
|
+
- 输出:`ERROR: 存在设计任务但 devServerCommand 未配置,请编辑 .fe/config.jsonc 填写。`
|
|
74
|
+
- 终止执行
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 分配随机端口(存在微小竞态窗口,若端口冲突可重试)
|
|
78
|
+
DEV_PORT=$(node -e "const s=require('net').createServer();s.listen(0,()=>{console.log(s.address().port);s.close()})")
|
|
79
|
+
DEV_SERVER_URL="http://localhost:$DEV_PORT"
|
|
80
|
+
|
|
81
|
+
# 启动开发服务器(后台运行)
|
|
82
|
+
PORT=$DEV_PORT ${devServerCommand} &
|
|
83
|
+
DEV_SERVER_PID=$!
|
|
84
|
+
|
|
85
|
+
# 等待服务器启动(最多 30 秒)
|
|
86
|
+
SERVER_READY=false
|
|
87
|
+
for i in $(seq 1 30); do
|
|
88
|
+
if curl -s $DEV_SERVER_URL > /dev/null 2>&1; then
|
|
89
|
+
SERVER_READY=true
|
|
90
|
+
break
|
|
91
|
+
fi
|
|
92
|
+
sleep 1
|
|
93
|
+
done
|
|
94
|
+
|
|
95
|
+
if [ "$SERVER_READY" = "false" ]; then
|
|
96
|
+
echo "ERROR: Dev server failed to start within 30 seconds on port $DEV_PORT"
|
|
97
|
+
# 终止编排循环
|
|
98
|
+
fi
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**后续 `${devServerUrl}` 均使用 `$DEV_SERVER_URL`。**
|
|
102
|
+
|
|
103
|
+
## 主执行循环
|
|
104
|
+
|
|
105
|
+
逐 wave 串行执行:
|
|
106
|
+
|
|
107
|
+
### 1. 刷新状态
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
WAVES=$(node ~/.claude/fe-harness/bin/fe-tools.cjs tasks waves)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> `circularWarning` 不为 null 时**必须**输出。
|
|
114
|
+
|
|
115
|
+
### 2. 跳过检查
|
|
116
|
+
|
|
117
|
+
当前 wave 所有任务 status 为 `done` → 输出 `Wave {N}: 已完成,跳过` 并继续下一个。
|
|
118
|
+
|
|
119
|
+
### 3. 读取 wave 任务
|
|
120
|
+
|
|
121
|
+
从 `tasks.json` 读取当前 wave 的完整任务对象:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
WAVE_TASKS=$(node -e "
|
|
125
|
+
const tasks = JSON.parse(require('fs').readFileSync('.fe-runtime/tasks.json','utf8'));
|
|
126
|
+
const waveTaskIds = [${wave_task_ids}];
|
|
127
|
+
const waveTasks = tasks.filter(t => waveTaskIds.includes(t.id));
|
|
128
|
+
console.log(JSON.stringify(waveTasks));
|
|
129
|
+
")
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 4. 委托给 fe-wave-runner
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Agent(
|
|
136
|
+
subagent_type="fe-wave-runner",
|
|
137
|
+
model="opus",
|
|
138
|
+
description="执行 Wave ${N}: ${taskNames}",
|
|
139
|
+
prompt="""
|
|
140
|
+
<wave_context>
|
|
141
|
+
waveNumber: ${N}
|
|
142
|
+
totalWaves: ${totalWaves}
|
|
143
|
+
devServerUrl: ${DEV_SERVER_URL}
|
|
144
|
+
devServerCommand: ${devServerCommand}
|
|
145
|
+
backpressureCommand: ${backpressureCommand}
|
|
146
|
+
maxRetries: ${maxRetries}
|
|
147
|
+
verifyThreshold: ${verifyThreshold}
|
|
148
|
+
reviewThreshold: ${reviewThreshold}
|
|
149
|
+
dimensionThreshold: ${dimensionThreshold}
|
|
150
|
+
scoreDropTolerance: ${scoreDropTolerance}
|
|
151
|
+
maxParallelBrowsers: ${maxParallelBrowsers}
|
|
152
|
+
feToolsPath: ~/.claude/fe-harness/bin/fe-tools.cjs
|
|
153
|
+
browserPath: ~/.claude/fe-harness/bin/browser.cjs
|
|
154
|
+
</wave_context>
|
|
155
|
+
|
|
156
|
+
<wave_tasks>
|
|
157
|
+
${WAVE_TASKS}
|
|
158
|
+
</wave_tasks>
|
|
159
|
+
""")
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**注意:**
|
|
163
|
+
- **禁用** `isolation="worktree"` — wave-runner 需要主仓库 git 访问
|
|
164
|
+
- **禁用** `run_in_background` — wave 间必须串行
|
|
165
|
+
- wave-runner 内部自行调度 fe-executor(带 worktree)、fe-verifier、fe-reviewer、fe-fixer
|
|
166
|
+
|
|
167
|
+
### 5. 读取 wave 结果
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
cat .fe-runtime/context/wave-result-${N}.json
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
输出摘要:`--- Wave {N} 完成: {passed} 通过, {failed} 失败 ---`
|
|
174
|
+
|
|
175
|
+
### 6. 下一个 Wave
|
|
176
|
+
|
|
177
|
+
回到步骤 1。
|
|
178
|
+
|
|
179
|
+
## 断点续跑
|
|
180
|
+
|
|
181
|
+
重新执行时自动恢复:
|
|
182
|
+
- 已完成的任务(status 为 `done`)和 wave 自动跳过
|
|
183
|
+
- 从首个含 pending 任务的 wave 继续
|
|
184
|
+
- 失败任务(status 为 `failed`)不会重试,保留失败状态
|
|
185
|
+
|
|
186
|
+
**残留状态清理:**
|
|
187
|
+
- `fe-checkpoint-*` 标签:来自中断的修复循环,重新执行前会被新的检查点覆盖(`git tag -f`),无需手动清理
|
|
188
|
+
- `fe-wave-*-baseline` 标签:来自中断的 wave,新 wave 执行时会覆盖同名标签
|
|
189
|
+
- `.fe-runtime/context/` 下的中间文件:每个 wave 验证前会通过 `init context` 清理
|
|
190
|
+
|
|
191
|
+
**如需完全重置:**
|
|
192
|
+
```bash
|
|
193
|
+
# 重置所有任务状态为 pending(慎用)
|
|
194
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks reset
|
|
195
|
+
# 清理所有检查点标签
|
|
196
|
+
git tag -l 'fe-checkpoint-*' | xargs git tag -d 2>/dev/null || true
|
|
197
|
+
git tag -l 'fe-wave-*-baseline' | xargs git tag -d 2>/dev/null || true
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## 完成
|
|
201
|
+
|
|
202
|
+
所有 wave 处理完毕后:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks status
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
输出摘要:
|
|
209
|
+
```
|
|
210
|
+
--- 执行完成 ---
|
|
211
|
+
完成: {done}/{total} | 失败: {failed} | 跳过: {skipped}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# 停止开发服务器
|
|
216
|
+
kill $DEV_SERVER_PID 2>/dev/null || true
|
|
217
|
+
|
|
218
|
+
# 清理残留浏览器实例
|
|
219
|
+
node ~/.claude/fe-harness/bin/browser.cjs cleanup
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 上下文管理
|
|
223
|
+
|
|
224
|
+
1. **不复述 Agent 结果** — 返回摘要已在上下文中
|
|
225
|
+
2. **每 wave 一行摘要** — 不逐任务展开
|
|
226
|
+
3. **状态从磁盘读** — 每轮循环通过 `tasks waves` 刷新
|
|
227
|
+
4. **实现/验证/修复均在 wave-runner 内** — 编排器不介入细节
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# 帮助文档
|
|
2
|
+
|
|
3
|
+
## fe-harness 命令参考
|
|
4
|
+
|
|
5
|
+
### 可用命令
|
|
6
|
+
|
|
7
|
+
| 命令 | 说明 |
|
|
8
|
+
|------|------|
|
|
9
|
+
| `/fe:plan` | 解析功能列表和 Figma URL,创建优化的任务列表 |
|
|
10
|
+
| `/fe:execute` | 执行所有待处理任务(实现 → 验证 → 修复循环) |
|
|
11
|
+
| `/fe:complete` | 生成完成报告、归档运行时产物并清理环境 |
|
|
12
|
+
| `/fe:status` | 查看任务状态概览 |
|
|
13
|
+
| `/fe:help` | 显示此帮助信息 |
|
|
14
|
+
|
|
15
|
+
### 快速开始
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
1. npx fe-harness ← 安装并生成 .fe/config.jsonc
|
|
19
|
+
2. 编辑 .fe/config.jsonc ← 配置开发服务器等参数
|
|
20
|
+
3. 输入功能列表后执行 /fe:plan ← 创建任务
|
|
21
|
+
4. /fe:execute ← 自动执行所有任务
|
|
22
|
+
5. /fe:complete ← 生成报告并归档
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 输入格式
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
功能1: 用户头像组件, figma设计稿: https://figma.com/design/xxx?node-id=1-2
|
|
29
|
+
功能2: 登录页面, figma设计稿: https://figma.com/design/xxx?node-id=3-4
|
|
30
|
+
功能3: 用户登录 API 对接
|
|
31
|
+
功能4: 全局状态管理
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- 有 `figma设计稿:` URL 的 → 设计任务(视觉验证)
|
|
35
|
+
- 无 URL 的 → 逻辑任务(代码审查)
|
|
36
|
+
|
|
37
|
+
### 执行流程
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
|
|
41
|
+
│ fe-executor │────→│ fe-verifier │────→│ fe-fixer │
|
|
42
|
+
│ 实现代码 │ │ 或 fe-reviewer│ │ 修复问题 │
|
|
43
|
+
└─────────────┘ └──────┬───────┘ └──────┬──────┘
|
|
44
|
+
│ │
|
|
45
|
+
│ 未通过 │
|
|
46
|
+
│←────────────────────┘
|
|
47
|
+
│
|
|
48
|
+
│ 通过 ✓
|
|
49
|
+
▼
|
|
50
|
+
┌──────────────┐
|
|
51
|
+
│ git commit │
|
|
52
|
+
└──────────────┘
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
每个任务最多重试 maxRetries 次(默认 5 次)。
|
|
56
|
+
|
|
57
|
+
### 配置说明
|
|
58
|
+
|
|
59
|
+
| 配置项 | 默认值 | 说明 |
|
|
60
|
+
|--------|--------|------|
|
|
61
|
+
| maxRetries | 5 | 每个任务的最大重试次数 |
|
|
62
|
+
| devServerCommand | "" | 开发服务器启动命令(自动分配随机端口) |
|
|
63
|
+
| verifyThreshold | 80 | 视觉验证通过阈值 (%) |
|
|
64
|
+
| reviewThreshold | 80 | 代码审查通过阈值 (%) |
|
|
65
|
+
| dimensionThreshold | 6 | 单维度最低分 (0-10) |
|
|
66
|
+
| scoreDropTolerance | 3 | 修复后允许的最大分数下降 |
|
|
67
|
+
| backpressureCommand | "" | 硬性校验命令 |
|
|
68
|
+
| maxParallelBrowsers | 3 | 同时运行的最大浏览器实例数(防止系统资源耗尽) |
|
|
69
|
+
|
|
70
|
+
### fe-tools CLI
|
|
71
|
+
|
|
72
|
+
状态管理工具,在 Bash 中直接调用:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks status # 状态概览
|
|
76
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks next # 下一个任务
|
|
77
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks reset 1 # 重置任务
|
|
78
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks reset-all-failed # 重置所有失败任务
|
|
79
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks summary # 完成摘要
|
|
80
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs tasks archive # 归档并清理
|
|
81
|
+
node ~/.claude/fe-harness/bin/fe-tools.cjs config get # 查看配置
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 安装方式
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx fe-harness # 全局安装到 ~/.claude/
|
|
88
|
+
npx fe-harness --local # 本地安装到 ./.claude/
|
|
89
|
+
```
|