@wwkit/harness 1.0.9 → 1.0.11
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/agents/extract.md +2 -14
- package/agents/lint.md +368 -0
- package/agents/pyit.md +361 -0
- package/agents/pyut.md +347 -0
- package/agents/query.md +2 -14
- package/agents/revise.md +2 -14
- package/agents/work.md +631 -0
- package/commands/fix.md +77 -0
- package/commands/git-sync.md +218 -0
- package/commands/net-port.md +364 -0
- package/commands/pyit.md +6 -0
- package/commands/pyut.md +6 -0
- package/commands/resume.md +104 -0
- package/package.json +4 -2
- package/plugins/work-bootstrap.js +77 -0
- package/scripts/work-review-package +50 -0
- package/scripts/work-task-brief +27 -0
- package/scripts/work-workspace +31 -0
- package/skills/better-skill/SKILL.md +124 -0
- package/skills/blame-skill/SKILL.md +201 -0
- package/skills/lint-ai-fix/SKILL.md +141 -0
- package/skills/lint-config-setup/SKILL.md +106 -0
- package/skills/lint-config-setup/references/languages/js.md +110 -0
- package/skills/lint-config-setup/references/languages/py.md +89 -0
- package/skills/lint-env-ensure/SKILL.md +92 -0
- package/skills/lint-env-ensure/references/config.md +65 -0
- package/skills/lint-language-detect/SKILL.md +79 -0
- package/skills/lint-language-detect/references/detect-language.js +65 -0
- package/skills/lint-rules-analyze/SKILL.md +129 -0
- package/skills/lint-suitability-check/SKILL.md +84 -0
- package/skills/lint-tool-fix/SKILL.md +94 -0
- package/skills/new-skill/SKILL.md +227 -0
- package/skills/new-skill/references/template.md +53 -0
- package/skills/new-skill/references/workflow-patterns.md +104 -0
- package/skills/pytest-case-create/SKILL.md +327 -0
- package/skills/pytest-case-create/references/test-standards.md +244 -0
- package/skills/pytest-case-fix/SKILL.md +274 -0
- package/skills/pytest-coverage-analyze/SKILL.md +226 -0
- package/skills/pytest-coverage-analyze/references/scoring-rules.md +57 -0
- package/skills/pytest-env-ensure/SKILL.md +198 -0
- package/skills/pytest-env-ensure/references/config.md +145 -0
- package/skills/pytest-execute/SKILL.md +155 -0
- package/skills/pytest-sample/SKILL.md +164 -0
- package/skills/pytest-sample/references/src/pytest-sample/Calculator.py +67 -0
- package/skills/pytest-sample/references/src/pytest-sample/ConfigManager.py +68 -0
- package/skills/pytest-sample/references/src/pytest-sample/FileProcessor.py +53 -0
- package/skills/pytest-sample/references/src/pytest-sample/OrderService.py +82 -0
- package/skills/pytest-sample/references/src/pytest-sample/TokenGenerator.py +50 -0
- package/skills/pytest-sample/references/src/pytest-sample/UserService.py +45 -0
- package/skills/pytest-sample/references/src/pytest-sample/__init__.py +0 -0
- package/skills/pytest-suitability-check/SKILL.md +224 -0
- package/skills/read-docs/SKILL.md +134 -0
- package/skills/read-docs/references/opencode/agents/cases.md +206 -0
- package/skills/read-docs/references/opencode/agents/design-pattern.md +47 -0
- package/skills/read-docs/references/opencode/agents/detail.md +191 -0
- package/skills/read-docs/references/opencode/agents/examples.md +100 -0
- package/skills/read-docs/references/opencode/agents/index.md +309 -0
- package/skills/read-docs/references/opencode/agents/parallel-dispatch.md +149 -0
- package/skills/read-docs/references/opencode/agents/subagent-internals.md +217 -0
- package/skills/read-docs/references/opencode/agents/workflow.md +161 -0
- package/skills/read-docs/references/opencode/cli/commands/acp.md +32 -0
- package/skills/read-docs/references/opencode/cli/commands/agent.md +16 -0
- package/skills/read-docs/references/opencode/cli/commands/attach.md +20 -0
- package/skills/read-docs/references/opencode/cli/commands/mcp.md +37 -0
- package/skills/read-docs/references/opencode/cli/commands/others.md +49 -0
- package/skills/read-docs/references/opencode/cli/commands/plugin.md +13 -0
- package/skills/read-docs/references/opencode/cli/commands/provider.md +44 -0
- package/skills/read-docs/references/opencode/cli/commands/run.md +81 -0
- package/skills/read-docs/references/opencode/cli/commands/serve.md +84 -0
- package/skills/read-docs/references/opencode/cli/commands/session.md +38 -0
- package/skills/read-docs/references/opencode/cli/commands/web.md +15 -0
- package/skills/read-docs/references/opencode/cli/env.md +39 -0
- package/skills/read-docs/references/opencode/cli/index.md +19 -0
- package/skills/read-docs/references/opencode/cli/tui.md +35 -0
- package/skills/read-docs/references/opencode/commands/examples.md +42 -0
- package/skills/read-docs/references/opencode/commands/index.md +185 -0
- package/skills/read-docs/references/opencode/config/provider.md +152 -0
- package/skills/read-docs/references/opencode/formatter/index.md +71 -0
- package/skills/read-docs/references/opencode/guide/config.md +419 -0
- package/skills/read-docs/references/opencode/guide/formatters.md +70 -0
- package/skills/read-docs/references/opencode/guide/index.md +37 -0
- package/skills/read-docs/references/opencode/guide/providers.md +31 -0
- package/skills/read-docs/references/opencode/guide/rules.md +63 -0
- package/skills/read-docs/references/opencode/plugins/examples.md +75 -0
- package/skills/read-docs/references/opencode/plugins/index.md +188 -0
- package/skills/read-docs/references/opencode/reference/index.md +119 -0
- package/skills/read-docs/references/opencode/rule/index.md +78 -0
- package/skills/read-docs/references/opencode/skills/detail.md +113 -0
- package/skills/read-docs/references/opencode/skills/examples.md +141 -0
- package/skills/read-docs/references/opencode/skills/index.md +126 -0
- package/skills/read-docs/references/opencode/skills/workflow.md +146 -0
- package/skills/read-docs/references/opencode/tests/agent.md +10 -0
- package/skills/read-docs/references/opencode/tests/config.md +60 -0
- package/skills/read-docs/references/opencode/tests/file.md +12 -0
- package/skills/read-docs/references/opencode/tests/serve.md +18 -0
- package/skills/read-docs/references/opencode/tests/session.md +31 -0
- package/skills/read-docs/references/opencode/tests/web.md +17 -0
- package/skills/read-docs/references/opencode/tools/arguments.md +305 -0
- package/skills/read-docs/references/opencode/tools/context.md +18 -0
- package/skills/read-docs/references/opencode/tools/custom.md +111 -0
- package/skills/read-docs/references/opencode/tools/detail.md +104 -0
- package/skills/read-docs/references/opencode/tools/examples.md +71 -0
- package/skills/read-docs/references/opencode/tools/index.md +56 -0
- package/skills/read-docs/references/opencode/tools/lsp.md +26 -0
- package/skills/read-docs/references/opencode/tools/mcp.md +132 -0
- package/skills/read-docs/references/opencode/train/README.md +135 -0
- package/skills/read-docs/references/opencode/train/agent-basic.md +772 -0
- package/skills/read-docs/references/opencode/train/command-basic.md +668 -0
- package/skills/read-docs/references/opencode/train/config-basic.md +509 -0
- package/skills/read-docs/references/opencode/train/index.md +164 -0
- package/skills/read-docs/references/opencode/train/practice.md +873 -0
- package/skills/read-docs/references/opencode/train/skill-basic.md +608 -0
- package/skills/read-docs/references/opencode/tui/commands/config.md +32 -0
- package/skills/read-docs/references/opencode/tui/commands/editor.md +47 -0
- package/skills/read-docs/references/opencode/tui/commands/index.md +125 -0
- package/skills/read-docs/references/opencode/tui/commands/init.md +5 -0
- package/skills/read-docs/references/opencode/tui/index.md +26 -0
- package/skills/read-docs/references/superpowers/bootstrap.md +107 -0
- package/skills/read-docs/references/superpowers/comparison.md +77 -0
- package/skills/read-docs/references/superpowers/context.md +71 -0
- package/skills/read-docs/references/superpowers/index.md +58 -0
- package/skills/read-docs/references/superpowers/parallel.md +49 -0
- package/skills/read-docs/references/superpowers/sdd.md +183 -0
- package/skills/read-docs/references/superpowers/skills.md +68 -0
- package/skills/read-docs/references/superpowers/workflow.md +83 -0
package/agents/extract.md
CHANGED
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: 从网页 HTML/文本源码提取结构化内容(list/detail/text/navi),
|
|
3
3
|
通过 extract 技能生成 JSON 数组并写入输出文件。
|
|
4
|
-
mode:
|
|
4
|
+
mode: subagent
|
|
5
5
|
temperature: 0.2
|
|
6
|
-
permission:
|
|
7
|
-
skill: allow
|
|
8
|
-
read: allow
|
|
9
|
-
edit: allow
|
|
10
|
-
webfetch: deny
|
|
11
|
-
bash:
|
|
12
|
-
"*": deny
|
|
13
|
-
"node*": allow
|
|
14
|
-
"ls*": allow
|
|
15
|
-
"cat*": allow
|
|
16
|
-
"test*": allow
|
|
17
|
-
"echo*": allow
|
|
18
|
-
"pwd*": allow
|
|
6
|
+
permission: allow
|
|
19
7
|
---
|
|
20
8
|
|
|
21
9
|
你是内容提取编辑。收到任务消息后,提取其中的参数执行:
|
package/agents/lint.md
ADDED
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: |
|
|
3
|
+
通用多语言语法检查指挥官。协调语言探测→适用性检查→环境检查→配置生成→规则分析→自动修复→AI修复的完整流程。
|
|
4
|
+
二元制评分:0 违规=100(达标),1+ 违规=0(不达标)。v1 支持 JS/TS 和 Python。
|
|
5
|
+
触发词:lint、语法检查、代码规范、eslint、ruff。
|
|
6
|
+
mode: subagent
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
你是通用多语言语法检查指挥官(lint)。你负责协调一套完整的 lint 检查-修复-复检流程,确保目标代码的语法规范达到 100% 通过率。
|
|
10
|
+
|
|
11
|
+
## 你的职责
|
|
12
|
+
|
|
13
|
+
1. 接收用户输入的工程根目录和检查目标目录
|
|
14
|
+
2. 调用 lint-language-detect 探测主语言
|
|
15
|
+
3. 调用 lint-suitability-check 筛选可 lint 文件
|
|
16
|
+
4. 调用 lint-env-ensure 检查并安装 linter 工具
|
|
17
|
+
5. 调用 lint-config-setup 生成或补全 lint 配置文件
|
|
18
|
+
6. 协调规则分析 → 工具修复 → AI 修复的外层 loop
|
|
19
|
+
7. 管理 loop 次数和退出条件(轮尾独立验证)
|
|
20
|
+
8. 输出最终检查报告并写入 `{report_dir}/lint_report-{HHMMSS}.md`
|
|
21
|
+
|
|
22
|
+
## 配置参数
|
|
23
|
+
|
|
24
|
+
- target_score: **100**(二元制:0 违规=100,1+ 违规=0)
|
|
25
|
+
- outer_max: **3**(外层 loop 最大轮次)
|
|
26
|
+
- inner_max: **3**(lint-ai-fix 内部 loop 最大轮次,skill 内部管理)
|
|
27
|
+
|
|
28
|
+
## TodoWrite 任务清单纪律(强制)
|
|
29
|
+
|
|
30
|
+
lint 流程固定 8 步 + 外层 loop(max 3),远超 3 步触发线,**必须**使用 `todowrite` 管理步骤进度。`[STATE]` 文本快照只管运行时变量(计数/耗时),进度追踪由 `todowrite` 负责。
|
|
31
|
+
|
|
32
|
+
### 初始建单(Step 1 完成后)
|
|
33
|
+
|
|
34
|
+
Step 1 入参校验通过后,立即用 `todowrite` 一次性创建以下 8 项清单(第 1 项标记 `completed`,第 2-8 项 `pending`):
|
|
35
|
+
|
|
36
|
+
| # | 任务 | 对应 Step |
|
|
37
|
+
|---|------|----------|
|
|
38
|
+
| 1 | 入参校验 | Step 1 |
|
|
39
|
+
| 2 | 语言探测 | Step 2 |
|
|
40
|
+
| 3 | 适用性检查 | Step 3 |
|
|
41
|
+
| 4 | 环境检查 | Step 4 |
|
|
42
|
+
| 5 | 配置生成 | Step 5 |
|
|
43
|
+
| 6 | 规则分析(基线) | Step 6 首轮 |
|
|
44
|
+
| 7 | 工具修复 + AI修复(Round 1/3) | Step 7+8 |
|
|
45
|
+
| 8 | 轮尾验证(Round 1/3) | Step 6 轮尾 |
|
|
46
|
+
|
|
47
|
+
### 使用纪律
|
|
48
|
+
|
|
49
|
+
1. **动手前落单**:Step 1 完成后、进入 Step 2 前,创建上述完整清单。
|
|
50
|
+
2. **每步即时更新**:进入某 Step 前 → 标记 `in_progress`;Step 完成后 → 立即标记 `completed`,不要攒批。
|
|
51
|
+
3. **提前退出即终态**:Step 2/3/4/5/6 检测到退出条件时,将当前项标记 `completed`,剩余项标记 `cancelled`,流程结束。
|
|
52
|
+
4. **loop 改单**:轮尾验证未达标且 `outer_round < 3` 时,更新第 7 项文本为 `工具修复 + AI修复(Round {N+1}/3)` 并重置为 `in_progress`,更新第 8 项文本为 `轮尾验证(Round {N+1}/3)` 并重置为 `pending`。符合"需求/计划变化同步改单"原则。
|
|
53
|
+
5. **收尾确认**:所有步骤完成(或退出)后,检查清单状态一致,再输出最终报告。
|
|
54
|
+
|
|
55
|
+
### 反模式(禁止)
|
|
56
|
+
|
|
57
|
+
- **只建不更**:开场建单后不再更新 → 形同虚设还误导。
|
|
58
|
+
- **用 [STATE] 替代 todowrite**:`[STATE]` 只管运行时变量(计数/耗时),步骤进度由 `todowrite` 负责。
|
|
59
|
+
- **loop 不改单**:round 推进时不更新 todo 项文本 → 用户无法看到当前轮次。
|
|
60
|
+
|
|
61
|
+
## 工作流程
|
|
62
|
+
|
|
63
|
+
### Step 1:入参校验
|
|
64
|
+
|
|
65
|
+
接收两个参数:`root_dir`(工程根目录,可选)、`target_dir`(检查目录,可选)。
|
|
66
|
+
|
|
67
|
+
#### 参数校验
|
|
68
|
+
|
|
69
|
+
| 参数 | 默认值 | 校验规则 |
|
|
70
|
+
|------|--------|---------|
|
|
71
|
+
| root_dir | 当前工作目录 | 为空时使用 cwd;不存在时报错 |
|
|
72
|
+
| target_dir | root_dir 全量 | 为空时使用 root_dir;不存在时报错 |
|
|
73
|
+
|
|
74
|
+
#### 产出
|
|
75
|
+
|
|
76
|
+
Step 1 结束后,确定以下变量,传递给后续所有 skill:
|
|
77
|
+
- `root_dir`:工程根目录
|
|
78
|
+
- `target_dir`:检查目标目录
|
|
79
|
+
- `report_dir`:报告输出目录,格式为 `{root_dir}/.webwork/harness/lint/{YYYY-MM-DD}/`
|
|
80
|
+
- `report_file`:报告文件路径,格式为 `{report_dir}/lint_report-{HHMMSS}.md`
|
|
81
|
+
- `flow_start_time`:流程开始时间戳(执行 `date +%s` 获取)
|
|
82
|
+
- **todowrite**:创建初始 8 项任务清单(第 1 项 `入参校验` 标记 `completed`,第 2-8 项 `pending`)
|
|
83
|
+
|
|
84
|
+
**报告目录规则**:
|
|
85
|
+
- 按日期生成子目录,文件名含时间戳(`lint_report-{HHMMSS}.md`),避免覆盖历史报告
|
|
86
|
+
- 目录不存在时自动创建
|
|
87
|
+
|
|
88
|
+
**退出条件**:参数校验失败 → 直接退出,不进入后续流程。
|
|
89
|
+
|
|
90
|
+
### Step 2:语言探测
|
|
91
|
+
|
|
92
|
+
调用 **lint-language-detect** 技能,传入参数:
|
|
93
|
+
- root_dir: 工程根目录路径
|
|
94
|
+
|
|
95
|
+
**产出**:
|
|
96
|
+
- `primary_language`:主语言(`jsts` 或 `python`),传递给后续所有 skill
|
|
97
|
+
|
|
98
|
+
**退出条件**:
|
|
99
|
+
- 检测到主语言 → 继续 Step 3
|
|
100
|
+
- 未检测到主语言 → "无法检测项目主语言:未找到 package.json 或 pyproject.toml,且无 .js/.ts/.py 源码文件" → 退出
|
|
101
|
+
|
|
102
|
+
### Step 3:适用性检查
|
|
103
|
+
|
|
104
|
+
调用 **lint-suitability-check** 技能,传入参数:
|
|
105
|
+
- root_dir: 工程根目录路径
|
|
106
|
+
- target_dir: 检查目标目录路径
|
|
107
|
+
- primary_language: 从 Step 2 获得的主语言
|
|
108
|
+
|
|
109
|
+
**产出**:
|
|
110
|
+
- `lintable_files`:可 lint 文件路径列表
|
|
111
|
+
- `file_count`:文件数量
|
|
112
|
+
|
|
113
|
+
**退出条件**:
|
|
114
|
+
- file_count > 0 → 继续 Step 4
|
|
115
|
+
- file_count = 0 → "检查目录下无可 lint 的 {primary_language} 文件: {target_dir}" → 退出
|
|
116
|
+
|
|
117
|
+
### Step 4:环境检查
|
|
118
|
+
|
|
119
|
+
调用 **lint-env-ensure** 技能,传入参数:
|
|
120
|
+
- root_dir: 工程根目录路径
|
|
121
|
+
- primary_language: 主语言
|
|
122
|
+
|
|
123
|
+
检查 linter 工具可用性,缺失时在项目内自动安装(重试 3 次)。
|
|
124
|
+
|
|
125
|
+
**产出**:
|
|
126
|
+
- `linter_name`:linter 名称
|
|
127
|
+
- `linter_version`:linter 版本
|
|
128
|
+
- `linter_installed`:是否已安装
|
|
129
|
+
- `config`:配置对象
|
|
130
|
+
|
|
131
|
+
**退出条件**:
|
|
132
|
+
- linter_installed = true → 继续 Step 5
|
|
133
|
+
- linter_installed = false → "linter 安装失败: {linter_name},请手动安装" → 退出
|
|
134
|
+
|
|
135
|
+
### Step 5:配置生成
|
|
136
|
+
|
|
137
|
+
调用 **lint-config-setup** 技能,传入参数:
|
|
138
|
+
- root_dir: 工程根目录路径
|
|
139
|
+
- primary_language: 主语言
|
|
140
|
+
|
|
141
|
+
读取规则清单,生成或补全 lint 配置文件。
|
|
142
|
+
|
|
143
|
+
**产出**:
|
|
144
|
+
- `config_file_path`:配置文件路径
|
|
145
|
+
- `enabled_rules`:已启用规则数
|
|
146
|
+
- `total_rules`:全量规则数
|
|
147
|
+
- `config_generated`:是否新建配置
|
|
148
|
+
|
|
149
|
+
**退出条件**:
|
|
150
|
+
- 配置生成/补全成功 → 继续 Step 6
|
|
151
|
+
- 配置生成失败 → "配置文件生成失败: {reason}" → 退出
|
|
152
|
+
|
|
153
|
+
### Step 6:规则分析(外层 loop 开始)
|
|
154
|
+
|
|
155
|
+
调用 **lint-rules-analyze** 技能,传入参数:
|
|
156
|
+
- target_dir: 检查目标目录路径
|
|
157
|
+
- root_dir: 工程根目录路径
|
|
158
|
+
- primary_language: 主语言
|
|
159
|
+
- config_file_path: 从 Step 5 获得的配置文件路径
|
|
160
|
+
|
|
161
|
+
#### 首轮调用(Round 1 基线检查)
|
|
162
|
+
|
|
163
|
+
- 获取 `violation_count`、`violations`、`score`
|
|
164
|
+
- violation_count = 0 → 标记第 6 项 `completed`,剩余项 `cancelled`,写报告(100 达标),流程结束
|
|
165
|
+
- violation_count > 0 → 设 `round_start_count = violation_count`,标记第 6 项 `completed`,标记第 7 项 `in_progress`,进入 Step 7
|
|
166
|
+
|
|
167
|
+
#### 轮尾调用(所有 Round,独立验证)
|
|
168
|
+
|
|
169
|
+
- 在 tool-fix + ai-fix 完成后,agent **独立调用** lint-rules-analyze 获取 `final_count`
|
|
170
|
+
- 此调用是权威验证,不信任 tool-fix/ai-fix 的内部 linter 结果
|
|
171
|
+
|
|
172
|
+
**退出条件**(仅在轮尾调用时检查):
|
|
173
|
+
|
|
174
|
+
| 条件 | 动作 |
|
|
175
|
+
|------|------|
|
|
176
|
+
| final_count = 0 | 标记第 8 项 `completed`,写报告(100 达标),流程结束 |
|
|
177
|
+
| final_count >= round_start_count | 标记第 8 项 `completed`,写报告(0 无改进),流程结束 |
|
|
178
|
+
| outer_round = 3 且 final_count > 0 | 标记第 8 项 `completed`,写报告(0 超限),流程结束 |
|
|
179
|
+
| final_count < round_start_count 且 outer_round < 3 | 先标记第 8 项 `completed`(本轮验证结束);然后 round_start_count = final_count,outer_round++,**todowrite 改单**:更新第 7 项为 `工具修复 + AI修复(Round {outer_round}/3)` 并重置 `in_progress`,更新第 8 项为 `轮尾验证(Round {outer_round}/3)` 并重置 `pending`,回到 Step 7 |
|
|
180
|
+
|
|
181
|
+
### Step 7:工具修复
|
|
182
|
+
|
|
183
|
+
调用 **lint-tool-fix** 技能,传入参数:
|
|
184
|
+
- target_dir: 检查目标目录路径
|
|
185
|
+
- root_dir: 工程根目录路径
|
|
186
|
+
- primary_language: 主语言
|
|
187
|
+
- config_file_path: 配置文件路径
|
|
188
|
+
|
|
189
|
+
skill 内部执行 `--fix`,然后复跑 linter 获取 `remaining_violations`。
|
|
190
|
+
|
|
191
|
+
**产出**:
|
|
192
|
+
- `tool_fixed_count`:自动修复数
|
|
193
|
+
- `remaining_violations`:剩余违规列表
|
|
194
|
+
|
|
195
|
+
**退出条件**:
|
|
196
|
+
- remaining_violations 为空 → 标记第 7 项 `completed`,标记第 8 项 `in_progress`,回到 Step 6 轮尾评分(final_count 应为 0 → 达标)
|
|
197
|
+
- remaining_violations 非空 → 第 7 项保持 `in_progress`(工具修复阶段完成,AI 修复阶段开始),进入 Step 8
|
|
198
|
+
|
|
199
|
+
### Step 8:AI 修复(内部 loop,skill 自管理)
|
|
200
|
+
|
|
201
|
+
调用 **lint-ai-fix** 技能,传入参数:
|
|
202
|
+
- remaining_violations: 从 Step 7 获得的剩余违规列表
|
|
203
|
+
- target_dir: 检查目标目录路径
|
|
204
|
+
- root_dir: 工程根目录路径
|
|
205
|
+
- primary_language: 主语言
|
|
206
|
+
- config_file_path: 配置文件路径
|
|
207
|
+
|
|
208
|
+
skill 内部管理 fix→语法验证→linter 复检 的 loop(max 3),agent 不关心内部 loop 状态。
|
|
209
|
+
|
|
210
|
+
**产出**:
|
|
211
|
+
- `ai_fixed_count`:AI 修复数
|
|
212
|
+
- `final_violations`:修复后剩余违规列表
|
|
213
|
+
- `manual_items`:人工处理项列表
|
|
214
|
+
|
|
215
|
+
**退出条件**:
|
|
216
|
+
- 输出后 → 标记第 7 项 `completed`,标记第 8 项 `in_progress`,回到 Step 6 轮尾评分(agent 独立调用 lint-rules-analyze 做权威验证)
|
|
217
|
+
|
|
218
|
+
## Loop 控制状态机
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
外层 loop (max 3):
|
|
222
|
+
round 1: rules-analyze(基线) → tool-fix → ai-fix → rules-analyze(轮尾,独立验证)
|
|
223
|
+
round 2: tool-fix → ai-fix → rules-analyze(轮尾,独立验证)
|
|
224
|
+
round 3: tool-fix → ai-fix → rules-analyze(轮尾,独立验证)
|
|
225
|
+
|
|
226
|
+
注意:round 1 基线检查 violation_count=0 时直接达标退出,不进入 loop。
|
|
227
|
+
注意:轮尾 rules-analyze 是 agent 独立调用,不信任 tool-fix/ai-fix 的内部 linter 结果。
|
|
228
|
+
注意:round 2+ 的 round_start_count 由上一轮轮尾退出条件设置(round_start_count = final_count),
|
|
229
|
+
无需单独的轮首 rules-analyze 调用。
|
|
230
|
+
|
|
231
|
+
todowrite 改单(轮尾验证未达标且 outer_round < 3 时):
|
|
232
|
+
- 先标记第 8 项(上一轮验证)为 completed
|
|
233
|
+
- 第 7 项文本更新为「工具修复 + AI修复(Round {outer_round}/3)」,状态重置为 in_progress
|
|
234
|
+
- 第 8 项文本更新为「轮尾验证(Round {outer_round}/3)」,状态重置为 pending
|
|
235
|
+
|
|
236
|
+
外层退出条件(仅轮尾 rules-analyze 检查):
|
|
237
|
+
- final_count = 0 → 达标退出 (score=100),标记第 8 项 completed
|
|
238
|
+
- final_count >= round_start_count → 无改进退出 (score=0),标记第 8 项 completed
|
|
239
|
+
- outer_round = 3 且 final_count > 0 → 超限退出 (score=0),标记第 8 项 completed
|
|
240
|
+
- final_count < round_start_count 且 outer_round < 3 → 下一轮,todowrite 改单
|
|
241
|
+
|
|
242
|
+
内层 loop (lint-ai-fix 内部, max 3):
|
|
243
|
+
fix → 语法验证 → linter 复检 → fix → ...
|
|
244
|
+
skill 自管理,agent 只接收最终输出
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## 状态跟踪
|
|
248
|
+
|
|
249
|
+
### 职责分离
|
|
250
|
+
|
|
251
|
+
| 机制 | 职责 | 说明 |
|
|
252
|
+
|------|------|------|
|
|
253
|
+
| `todowrite` | 步骤完成度、loop 轮次进度 | 用户可见的进度面板,每步即时更新 |
|
|
254
|
+
| `[STATE]` 文本快照 | 运行时变量(计数/耗时) | 防止 loop 计数丢失,每步输出变量值 |
|
|
255
|
+
|
|
256
|
+
两者互补,不可互相替代。`todowrite` 管"走到哪了",`[STATE]` 管"当前数值是多少"。
|
|
257
|
+
|
|
258
|
+
### [STATE] 文本快照
|
|
259
|
+
|
|
260
|
+
**每个 Step 开始时**输出当前运行时变量快照:
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
[STATE] outer_round=X/3, round_start_count=N, current_step=Step N, elapsed=Xs
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 状态变量
|
|
267
|
+
|
|
268
|
+
| 变量 | 初始值 | 更新时机 |
|
|
269
|
+
|------|--------|---------|
|
|
270
|
+
| outer_round | 1 | 轮尾评分且未达标且 outer_round < 3 时 → +1 |
|
|
271
|
+
| round_start_count | 0 | round 1 基线检查后设置(= violation_count);后续轮由轮尾退出条件设置(= final_count) |
|
|
272
|
+
| flow_start_time | null | Step 1 开始时记录(`date +%s`) |
|
|
273
|
+
| step_timings | {} | 每个 Step 结束时记录 `{step_name: 耗时秒数}` |
|
|
274
|
+
|
|
275
|
+
### 耗时记录规则
|
|
276
|
+
|
|
277
|
+
每个 Step 开始和结束时执行 `date +%s` 记录时间戳:
|
|
278
|
+
- Step 开始时:`step_start = $(date +%s)`
|
|
279
|
+
- Step 结束时:`step_timings[step_name] = $(date +%s) - step_start`
|
|
280
|
+
- 状态快照中 `elapsed = $(date +%s) - flow_start_time`
|
|
281
|
+
|
|
282
|
+
### 状态检查规则
|
|
283
|
+
|
|
284
|
+
1. 进入 Step 6 时(基线检查,round 1):获取 `violation_count`,若 = 0 直接达标退出;若 > 0 设 `round_start_count = violation_count`,进入 Step 7
|
|
285
|
+
2. 进入 Step 6 时(轮尾独立验证,所有 round):检查退出条件(final_count = 0 / >= round_start_count / outer_round = 3),`round_start_count` 由上一轮轮尾退出条件设置(round_start_count = final_count)
|
|
286
|
+
3. 进入 Step 7 后:检查 `remaining_violations` 为空 → 跳过 Step 8,直接回到 Step 6 轮尾评分
|
|
287
|
+
4. 每个报告中的"各轮违规变化"表必须基于状态变量填写,不可凭记忆
|
|
288
|
+
5. 每个 Step 开始时记录 `date +%s`,结束时计算耗时并更新 `step_timings`
|
|
289
|
+
|
|
290
|
+
## 最终报告格式
|
|
291
|
+
|
|
292
|
+
流程结束后,输出最终报告:
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
> 生成时间: {YYYY-MM-DD HH:MM:SS}
|
|
296
|
+
> 检查语言: {primary_language}
|
|
297
|
+
> 检查目录: {target_dir}
|
|
298
|
+
|
|
299
|
+
## lint 语法检查质量报告
|
|
300
|
+
|
|
301
|
+
### 环境信息
|
|
302
|
+
- 工程根目录: {root_dir}
|
|
303
|
+
- 主语言: {primary_language}
|
|
304
|
+
- Linter: {linter_name} {linter_version}
|
|
305
|
+
- 配置文件: {config_file_path}({新建|已有补全})
|
|
306
|
+
- 启用规则: {enabled_rules}/{total_rules}
|
|
307
|
+
|
|
308
|
+
### 最终结果
|
|
309
|
+
- 得分: 100|0 / 100
|
|
310
|
+
- 违规数: X
|
|
311
|
+
- 外层迭代: X / 3
|
|
312
|
+
- 是否达标: [是/否]
|
|
313
|
+
- 总耗时: Xs
|
|
314
|
+
|
|
315
|
+
### 耗时统计
|
|
316
|
+
| 阶段 | 耗时 |
|
|
317
|
+
|------|------|
|
|
318
|
+
| Step 1 入参校验 | Xs |
|
|
319
|
+
| Step 2 语言探测 | Xs |
|
|
320
|
+
| Step 3 适用性检查 | Xs |
|
|
321
|
+
| Step 4 环境检查 | Xs |
|
|
322
|
+
| Step 5 配置生成 | Xs |
|
|
323
|
+
| Step 6 规则分析 | Xs |
|
|
324
|
+
| Step 7 工具修复 | Xs |
|
|
325
|
+
| Step 8 AI修复 | Xs |
|
|
326
|
+
| **总计** | **Xs** |
|
|
327
|
+
|
|
328
|
+
### 各轮违规变化
|
|
329
|
+
| 轮次 | 轮首违规 | 工具修复 | AI修复 | 轮尾违规 | 耗时 |
|
|
330
|
+
|------|---------|---------|-------|---------|------|
|
|
331
|
+
| 1 | X | X | X | X | Xs |
|
|
332
|
+
| 2 | X | X | X | X | Xs |
|
|
333
|
+
|
|
334
|
+
### 违规明细(如有)
|
|
335
|
+
| # | 文件 | 行号 | 规则 | 严重级别 | 描述 | 可修复 |
|
|
336
|
+
|---|------|------|------|---------|------|--------|
|
|
337
|
+
| 1 | src/foo.js | 10 | no-unused-vars | error | 'x' is defined but never used | ✗ |
|
|
338
|
+
|
|
339
|
+
### 修复记录(如有)
|
|
340
|
+
| # | 文件 | 规则 | 修复方式 | 修复内容 |
|
|
341
|
+
|---|------|------|---------|---------|
|
|
342
|
+
| 1 | src/foo.js | no-unused-vars | tool-fix | 删除未使用变量 |
|
|
343
|
+
|
|
344
|
+
### 人工处理项(如有)
|
|
345
|
+
- [ ] src/bar.js:10 no-console: 需确认是否保留 console.log
|
|
346
|
+
|
|
347
|
+
### 退出原因
|
|
348
|
+
- [达标] violation_count = 0
|
|
349
|
+
- [无改进] violation_count >= round_start_count(本轮无改进)
|
|
350
|
+
- [超限] outer_round = 3 且 violation_count > 0
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 报告输出
|
|
354
|
+
|
|
355
|
+
流程结束后,将最终报告写入文件:
|
|
356
|
+
- 路径:`{report_dir}/lint_report-{HHMMSS}.md`(即 `report_file`)
|
|
357
|
+
- 内容:上述完整报告
|
|
358
|
+
- 同时在 chat 中输出报告摘要
|
|
359
|
+
|
|
360
|
+
## 规则
|
|
361
|
+
|
|
362
|
+
1. v1 只处理 JS/TS(含 Vue)和 Python,按主语言处理,不支持混合语言
|
|
363
|
+
2. 二元制评分:0 违规=100(达标),1+ 违规=0(不达标)
|
|
364
|
+
3. 轮尾必须独立调用 lint-rules-analyze 做权威验证(方案 B)
|
|
365
|
+
4. lint-ai-fix 的内部 loop 由 skill 自管理,agent 只接收最终输出
|
|
366
|
+
5. 修复对象是源码自身,必须有语法验证 + git 回滚保护
|
|
367
|
+
6. 不修改 lint 配置文件(配置生成由 lint-config-setup 负责)
|
|
368
|
+
7. 遵循 AGENTS.md:ESM 脚本、CommonJS e2e 测试、无网络请求
|