@ranger1/dx 0.1.91 → 0.1.92

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.
Files changed (52) hide show
  1. package/README.md +2 -2
  2. package/lib/cli/help.js +1 -1
  3. package/lib/codex-initial.js +19 -215
  4. package/package.json +2 -2
  5. package/skills/backend-layering-audit-fixer/SKILL.md +180 -0
  6. package/{codex/skills → skills}/doctor/SKILL.md +2 -9
  7. package/{codex/skills → skills}/doctor/scripts/doctor.sh +2 -253
  8. package/skills/git-pr-ship/SKILL.md +481 -0
  9. package/skills/naming-audit-fixer/SKILL.md +149 -0
  10. package/skills/naming-audit-fixer/references/fix-guide.md +93 -0
  11. package/skills/naming-audit-fixer/scripts/audit_naming.py +534 -0
  12. package/codex/agents/fixer.toml +0 -37
  13. package/codex/agents/orchestrator.toml +0 -11
  14. package/codex/agents/reviewer.toml +0 -52
  15. package/codex/agents/spark.toml +0 -18
  16. package/codex/skills/pr-review-loop/SKILL.md +0 -209
  17. package/codex/skills/pr-review-loop/agents/openai.yaml +0 -4
  18. package/codex/skills/pr-review-loop/references/agents/pr-context.md +0 -73
  19. package/codex/skills/pr-review-loop/references/agents/pr-precheck.md +0 -161
  20. package/codex/skills/pr-review-loop/references/agents/pr-review-aggregate.md +0 -188
  21. package/codex/skills/pr-review-loop/references/skill-layout.md +0 -25
  22. package/codex/skills/pr-review-loop/scripts/gh_review_harvest.py +0 -292
  23. package/codex/skills/pr-review-loop/scripts/pr_context.py +0 -351
  24. package/codex/skills/pr-review-loop/scripts/pr_review_aggregate.py +0 -951
  25. package/codex/skills/pr-review-loop/scripts/test_pr_review_aggregate.py +0 -876
  26. package/codex/skills/pr-review-loop/scripts/test_validate_reviewer_prompts.py +0 -92
  27. package/codex/skills/pr-review-loop/scripts/validate_reviewer_prompts.py +0 -87
  28. /package/{codex/skills → skills}/doctor/agents/openai.yaml +0 -0
  29. /package/{codex/skills → skills}/e2e-audit-fixer/SKILL.md +0 -0
  30. /package/{codex/skills → skills}/e2e-audit-fixer/agents/openai.yaml +0 -0
  31. /package/{codex/skills → skills}/e2e-audit-fixer/scripts/e2e_e2e_audit.py +0 -0
  32. /package/{codex/skills → skills}/env-accessor-audit-fixer/SKILL.md +0 -0
  33. /package/{codex/skills → skills}/env-accessor-audit-fixer/agents/openai.yaml +0 -0
  34. /package/{codex/skills → skills}/env-accessor-audit-fixer/references/bootstrap-env-foundation.md +0 -0
  35. /package/{codex/skills → skills}/env-accessor-audit-fixer/scripts/env_accessor_audit.py +0 -0
  36. /package/{codex/skills → skills}/error-handling-audit-fixer/SKILL.md +0 -0
  37. /package/{codex/skills → skills}/error-handling-audit-fixer/agents/openai.yaml +0 -0
  38. /package/{codex/skills → skills}/error-handling-audit-fixer/references/error-handling-standard.md +0 -0
  39. /package/{codex/skills → skills}/error-handling-audit-fixer/references/foundation-bootstrap.md +0 -0
  40. /package/{codex/skills → skills}/error-handling-audit-fixer/scripts/error_handling_audit.py +0 -0
  41. /package/{codex/skills → skills}/gh-dependabot-cleanup/SKILL.md +0 -0
  42. /package/{codex/skills → skills}/gh-dependabot-cleanup/agents/openai.yaml +0 -0
  43. /package/{codex/skills → skills}/git-commit-and-pr/SKILL.md +0 -0
  44. /package/{codex/skills → skills}/git-commit-and-pr/agents/openai.yaml +0 -0
  45. /package/{codex/skills → skills}/git-release/SKILL.md +0 -0
  46. /package/{codex/skills → skills}/git-release/agents/openai.yaml +0 -0
  47. /package/{codex/skills → skills}/online-debug-guard/SKILL.md +0 -0
  48. /package/{codex/skills → skills}/online-debug-guard/agents/openai.yaml +0 -0
  49. /package/{codex/skills → skills}/pagination-dto-audit-fixer/SKILL.md +0 -0
  50. /package/{codex/skills → skills}/pagination-dto-audit-fixer/agents/openai.yaml +0 -0
  51. /package/{codex/skills → skills}/pagination-dto-audit-fixer/references/pagination-standard.md +0 -0
  52. /package/{codex/skills → skills}/pagination-dto-audit-fixer/scripts/pagination_dto_audit.py +0 -0
@@ -0,0 +1,481 @@
1
+ ---
2
+ name: git-pr-ship
3
+ description: PR 交付流程(仅限显式调用)
4
+ ---
5
+
6
+ # PR Ship — 提交 · 审查 · 修复 · 交付
7
+
8
+ ## 概览
9
+
10
+ 一条命令完成:`Commit -> PR -> (Lint->Build->Test // 代码审查) -> 逐项修复 -> 推送 -> 下一轮`,最多三轮审查。
11
+
12
+ ## 执行原则
13
+
14
+ - 全程中文输出。
15
+ - 禁止在 `main/master` 直接提交。
16
+ - 每修复一个问题立即 commit 一次,禁止攒到最后一次性提交。
17
+ - AI 自主判断是否拒绝修复某个问题,拒绝必须写明理由。
18
+ - 上次跑完测试/Lint 后如果改过代码,必须重跑验证。
19
+ - 使用 heredoc 写 commit message 和 gh 命令的 body(禁止 `\n`)。
20
+ - 零参数设计:所有信息从仓库状态、当前分支、gh CLI 自动获取,不接受手动参数。
21
+
22
+ ## 输入
23
+
24
+ ```
25
+ /pr-ship # 唯一入口,全自动
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 阶段一:状态检测
31
+
32
+ 并行执行:
33
+
34
+ ```bash
35
+ git status --short
36
+ git branch --show-current
37
+ git log --oneline -n 5
38
+ git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null || echo "no-upstream"
39
+ git rev-parse --abbrev-ref origin/HEAD 2>/dev/null || echo "origin/main"
40
+ git log origin/main..HEAD --oneline
41
+ git diff --stat origin/main...HEAD
42
+ gh pr list --head "$(git branch --show-current)" --json number,url --limit 1
43
+ ```
44
+
45
+ **自动获取上下文**:
46
+ - Issue ID:从当前分支名提取(如 `feat/3606-xxx` -> `#3606`),或从最近 commit message 的 `Refs: #xxx` 提取
47
+ - PR 编号:通过 `gh pr list --head <当前分支>` 获取已有 PR
48
+
49
+ **决策规则:**
50
+
51
+ | 条件 | 行动 |
52
+ |------|------|
53
+ | 已有 PR 存在 | 跳转阶段四(审查循环) |
54
+ | 工作树有改动 | 执行完整流程(阶段二 -> 三 -> 四) |
55
+ | 工作树干净且有未推送提交 | 跳转阶段三(PR 创建) |
56
+ | 工作树干净且无差异 | 输出"无需提交",结束 |
57
+
58
+ ---
59
+
60
+ ## 阶段二:Issue · 分支 · Commit
61
+
62
+ ### 2.1 Issue 创建
63
+
64
+ 若从分支名或 commit 中已提取到 Issue ID,跳过创建。
65
+
66
+ 收集上下文:
67
+
68
+ ```bash
69
+ git diff --stat
70
+ git diff # 读取完整 diff 以理解改动内容
71
+ ```
72
+
73
+ 分析改动后创建 Issue:
74
+
75
+ ```bash
76
+ gh issue create \
77
+ --title "[模块] 变更摘要" \
78
+ --label label1 --label label2 \
79
+ --body-file - <<'MSG'
80
+ ## 背景
81
+ [为什么要做这个改动]
82
+
83
+ ## 变更内容
84
+ - [具体改动点1]
85
+ - [具体改动点2]
86
+
87
+ ## 影响范围
88
+ [哪些模块/接口/页面受影响]
89
+
90
+ ## 验证方式
91
+ - [ ] 验证项1
92
+ - [ ] 验证项2
93
+ MSG
94
+ ```
95
+
96
+ ### 2.2 分支处理
97
+
98
+ 若当前在 `main/master`,必须切新分支:
99
+
100
+ ```bash
101
+ git switch -c <type>/<issue-id>-<slug>
102
+ ```
103
+
104
+ 分支前缀遵循仓库约定:`feat/` `fix/` `refactor/` `docs/` `chore/` `test/`;Codex 会话使用 `codex/` 前缀。
105
+
106
+ ### 2.3 Commit
107
+
108
+ ```bash
109
+ git add -A
110
+ git diff --cached --stat
111
+ ```
112
+
113
+ 生成 commit(分析 diff 后写出精确描述):
114
+
115
+ ```bash
116
+ git commit -F - <<'MSG'
117
+ <type>: <概要>
118
+
119
+ 变更说明:
120
+ - <改动点1:具体描述做了什么、为什么>
121
+ - <改动点2>
122
+
123
+ Refs: #<issue-id>
124
+ MSG
125
+ ```
126
+
127
+ 提交后确认:
128
+
129
+ ```bash
130
+ git status
131
+ git log -1 --oneline
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 阶段三:PR 创建
137
+
138
+ ### 3.1 推送
139
+
140
+ ```bash
141
+ git push -u origin HEAD
142
+ ```
143
+
144
+ ### 3.2 变更分析
145
+
146
+ 收集完整差异信息以生成详细 PR 描述:
147
+
148
+ ```bash
149
+ git log origin/main..HEAD --oneline
150
+ git diff origin/main...HEAD --stat
151
+ git diff origin/main...HEAD # 完整 diff,用于分析改动细节
152
+ ```
153
+
154
+ ### 3.3 创建 PR
155
+
156
+ PR 描述必须让审查者无需看代码就能理解改动的目的和方式:
157
+
158
+ ```bash
159
+ gh pr create --base main \
160
+ --title "<type>: <概要>" \
161
+ --body-file - <<'MSG'
162
+ ## 变更目的
163
+
164
+ [一段话说清楚:为什么做这个改动,解决了什么问题]
165
+
166
+ ## 主要改动
167
+
168
+ ### [模块/文件组1]
169
+ - [改动描述:做了什么 + 为什么这样做]
170
+ - [改动描述]
171
+
172
+ ### [模块/文件组2]
173
+ - [改动描述]
174
+
175
+ ## 影响范围
176
+
177
+ - **API 变更**:[有/无,如有列出端点]
178
+ - **数据库变更**:[有/无,如有说明迁移]
179
+ - **向后兼容**:[是/否,如否说明破坏点]
180
+
181
+ ## 验证情况
182
+
183
+ - [x] 本地验证通过的项目
184
+ - [ ] 待 CI 验证的项目
185
+
186
+ ## 关联
187
+
188
+ Closes: #<issue-id>
189
+ MSG
190
+ ```
191
+
192
+ 记录 PR 编号(`PR_NUMBER`),后续阶段使用。
193
+
194
+ ---
195
+
196
+ ## 阶段 3.5:合并冲突检测
197
+
198
+ 在进入审查循环之前,检查 PR 是否与目标分支存在合并冲突:
199
+
200
+ ```bash
201
+ git fetch origin main
202
+ git merge --no-commit --no-ff origin/main
203
+ ```
204
+
205
+ - 如果无冲突:`git merge --abort`(撤回试探性合并),继续阶段四
206
+ - 如果有冲突:
207
+ 1. `git merge --abort` 撤回
208
+ 2. 执行 `git merge origin/main`,解决所有冲突
209
+ 3. 解决后 commit:
210
+ ```bash
211
+ git add -A
212
+ git commit -F - <<'MSG'
213
+ merge: 解决与 main 的合并冲突
214
+
215
+ - <冲突文件及解决方式>
216
+
217
+ Refs: #<issue-id>
218
+ MSG
219
+ ```
220
+ 4. 推送:`git push`
221
+ 5. 标记 `CODE_CHANGED_SINCE_LAST_CHECK=true`
222
+
223
+ ---
224
+
225
+ ## 阶段四:审查修复循环(最多 3 轮)
226
+
227
+ 循环变量:`ROUND=1`,`MAX_ROUNDS=3`,`CODE_CHANGED_SINCE_LAST_CHECK=true`
228
+
229
+ ### 4.1 验证流水线与代码审查(并行启动)
230
+
231
+ 仅在 `CODE_CHANGED_SINCE_LAST_CHECK=true` 时执行验证流水线。
232
+
233
+ > **关键约束:所有子任务(验证流水线 subagent、审查者 A、审查者 B)只向主 agent 返回结果文本,禁止自行调用 `gh pr comment` 或任何方式直接发布 PR 评论。** 只有主 agent 在 4.3 才发布唯一的一条汇总报告。违反此约束会导致 PR 上出现多条重复审核报告。
234
+
235
+ **两条并行主线同时启动:**
236
+
237
+ ---
238
+
239
+ **主线 A:验证流水线(派 subagent 执行,串行有错即停)**
240
+
241
+ 必须派一个独立 subagent(后台运行)来执行整条流水线。不要在主 agent 里直接跑 bash 命令——主 agent 容易只跑第一步就被其他任务打断。subagent 有独立上下文,会严格按顺序跑完全部步骤。
242
+
243
+ Subagent prompt 模板:
244
+
245
+ ```
246
+ 你是验证流水线执行者。严格按顺序执行以下步骤,任一步骤失败立即停止,不执行后续步骤。
247
+
248
+ 【重要】你只负责执行验证并返回结果文本。禁止调用 gh pr comment 或以任何方式直接往 PR 发评论——评论由主 agent 统一发布。
249
+
250
+ Step 1: 运行 dx lint
251
+ - 如果失败:记录所有 lint 错误,停止,返回结果
252
+ - 如果通过:继续
253
+
254
+ Step 2: 运行 dx build affected --dev
255
+ - 如果失败:记录构建错误,停止,返回结果
256
+ - 如果通过:继续
257
+
258
+ Step 3: 运行关联测试(根据以下改动范围判断需要跑哪些)
259
+ - 后端改动(apps/backend/):识别受影响的 E2E 测试文件/目录 -> dx test e2e backend <file-or-dir>;识别受影响的 *.spec.ts -> 按文件运行
260
+ - 前端改动(apps/front/):dx test unit front
261
+ - 管理端改动(apps/admin-front/):dx test unit admin
262
+ - 如果没有相关改动的测试:跳过本步骤
263
+
264
+ 最终返回格式:
265
+ - 执行到第几步
266
+ - 每步的通过/失败状态
267
+ - 失败步骤的完整错误输出
268
+ ```
269
+
270
+ 任何失败都记为 **严重问题**。流水线完成后设置 `CODE_CHANGED_SINCE_LAST_CHECK=false`。
271
+
272
+ ---
273
+
274
+ **主线 B:代码审查**
275
+
276
+ 审查策略根据轮次和改动规模动态调整:
277
+
278
+ **第一轮:双源审查(必须)**
279
+
280
+ 同时派出两个独立审查者,从不同角度审查:
281
+
282
+ 审查者 A — 代码质量与架构(派独立 subagent):
283
+ - 关注:架构合理性、SOLID 原则、错误处理、性能、安全
284
+ - 输入:PR diff
285
+
286
+ 审查者 B — 逻辑缺陷与规范(派独立 subagent):
287
+ - 关注:逻辑缺陷、边界条件、命名规范、类型安全、测试覆盖
288
+ - 输入:PR diff
289
+
290
+ > **禁止使用 `code-review` 技能或 `oh-my-claudecode:code-reviewer` agent 来执行审查。** 这些工具内置了自动发 PR 评论的行为,会导致 PR 上出现多条重复审核报告。必须派独立 subagent,并在 prompt 中明确要求"只返回审查结果文本,禁止调用 gh pr comment 或以任何方式发布 PR 评论"。
291
+
292
+ Subagent A prompt:
293
+ ```
294
+ 作为资深架构师审查此 PR diff,关注架构、性能、安全问题。
295
+ 【重要】只返回审查结果文本给调用者。禁止调用 gh pr comment 或以任何方式直接往 PR 发评论——评论由主 agent 统一发布。
296
+ ```
297
+
298
+ Subagent B prompt:
299
+ ```
300
+ 作为质量工程师审查此 PR diff,关注逻辑缺陷、边界条件、规范遵从。
301
+ 【重要】只返回审查结果文本给调用者。禁止调用 gh pr comment 或以任何方式直接往 PR 发评论——评论由主 agent 统一发布。
302
+ ```
303
+
304
+ **第二轮及以后:按需降级**
305
+
306
+ 根据上一轮修复情况自主决策审查力度:
307
+
308
+ - 单源审查(默认):改动较小、仅修复 Minor 问题、或改动集中在少数文件 -> 派一个 subagent 即可
309
+ - 双源审查:改动较大、涉及核心逻辑修改、或上一轮有 Critical 修复引入新代码 -> 仍派两个 subagent
310
+
311
+ 同样,后续轮次的审查 subagent 也必须遵守"只返回结果文本、禁止发 PR 评论"的约束。
312
+
313
+ 是否进行第二轮/第三轮审查也需自主判断:
314
+ - 上一轮全部修复且改动简单(仅格式/命名调整)-> 可以跳过后续审查,直接进入最终验证
315
+ - 上一轮有 Critical/Major 修复 -> 应进入下一轮审查
316
+
317
+ ---
318
+
319
+ 主线 A 和主线 B 同时启动,等待全部完成后进入 4.2。
320
+
321
+ ### 4.2 问题汇总与去重
322
+
323
+ 收集所有来源的问题:
324
+ - Lint 错误(来自主线 A Step 1)
325
+ - 构建失败(来自主线 A Step 2)
326
+ - 测试失败(来自主线 A Step 3,列出失败的用例名和错误信息)
327
+ - 审查者 A 的发现
328
+ - 审查者 B 的发现(如有)
329
+
330
+ **去重规则**:
331
+ - 同一文件同一行的相同类型问题 -> 合并,保留描述更详细的那条
332
+ - 同一根因导致的多个测试失败 -> 合并为一条,附带所有失败用例名
333
+ - 两个审查者指出的同一问题 -> 合并,综合两者描述
334
+
335
+ 为每个问题分配严重级别:
336
+ - **Critical**:构建失败、测试失败、安全漏洞、数据丢失风险
337
+ - **Major**:逻辑缺陷、错误处理缺失、性能问题
338
+ - **Minor**:命名不规范、代码风格、文档缺失
339
+
340
+ ### 4.3 发布审核报告到 PR
341
+
342
+ 如果没有任何问题,跳转到"审查通过"流程(4.6)。
343
+
344
+ 将汇总结果作为 PR 评论发布:
345
+
346
+ ```bash
347
+ gh pr comment <PR_NUMBER> --body-file - <<'MSG'
348
+ ## 审核报告(第 N 轮)
349
+
350
+ ### 概要
351
+ - Critical:X 个
352
+ - Major:Y 个
353
+ - Minor:Z 个
354
+
355
+ ### Critical 问题
356
+ | # | 来源 | 文件:行号 | 描述 |
357
+ |---|------|-----------|------|
358
+ | 1 | Lint/构建/测试 | path/to/file:42 | 描述 |
359
+
360
+ ### Major 问题
361
+ | # | 来源 | 文件:行号 | 描述 |
362
+ |---|------|-----------|------|
363
+ | 1 | 审查者A | path/to/file:10 | 描述 |
364
+
365
+ ### Minor 问题
366
+ | # | 来源 | 文件:行号 | 描述 |
367
+ |---|------|-----------|------|
368
+ | 1 | 审查者B | path/to/file:5 | 描述 |
369
+
370
+ ---
371
+ *审查工具:dx lint -> dx build -> dx test + 代码审查*
372
+ MSG
373
+ ```
374
+
375
+ ### 4.4 逐项修复
376
+
377
+ 按严重级别从高到低处理每个问题。
378
+
379
+ 对每个问题:
380
+
381
+ 1. **判断是否修复**:
382
+ - 修复:执行修改
383
+ - 拒绝:记录理由(如:误报、设计意图、超出本 PR 范围)
384
+
385
+ 2. **修复后立即 commit**(一个问题一个 commit):
386
+
387
+ ```bash
388
+ git add <修改的文件>
389
+ git commit -F - <<'MSG'
390
+ fix: 修复审查问题 #<问题编号> — <简要描述>
391
+
392
+ - <具体改动说明>
393
+
394
+ Refs: #<issue-id>
395
+ MSG
396
+ ```
397
+
398
+ 3. 标记 `CODE_CHANGED_SINCE_LAST_CHECK=true`
399
+
400
+ ### 4.5 发布修复报告 + 推送
401
+
402
+ 推送所有修复 commit:
403
+
404
+ ```bash
405
+ git push
406
+ ```
407
+
408
+ 发布修复报告到 PR:
409
+
410
+ ```bash
411
+ gh pr comment <PR_NUMBER> --body-file - <<'MSG'
412
+ ## 修复报告(第 N 轮)
413
+
414
+ ### 已修复
415
+ | # | 问题 | 修复方式 | Commit |
416
+ |---|------|----------|--------|
417
+ | 1 | [问题描述] | [修复说明] | abc1234 |
418
+
419
+ ### 拒绝修复
420
+ | # | 问题 | 理由 |
421
+ |---|------|------|
422
+ | 1 | [问题描述] | [拒绝理由:如误报/设计意图/超出范围] |
423
+
424
+ ### 统计
425
+ - 总问题数:X
426
+ - 已修复:Y
427
+ - 拒绝修复:Z
428
+ MSG
429
+ ```
430
+
431
+ ### 4.6 决定是否下一轮
432
+
433
+ **审查通过条件**(满足任一即结束):
434
+ - 本轮零问题
435
+ - 已达到 `MAX_ROUNDS`(3 轮)
436
+ - 所有问题均已修复且改动简单(仅格式/命名),无需再审
437
+
438
+ **继续下一轮条件**(同时满足):
439
+ - `ROUND < MAX_ROUNDS`
440
+ - 本轮有修复过代码(`CODE_CHANGED_SINCE_LAST_CHECK=true`)
441
+ - 存在 Critical 或 Major 级别的修复(可能引入新问题)
442
+
443
+ 若继续:`ROUND += 1`,回到 4.1。
444
+
445
+ 若结束且 `CODE_CHANGED_SINCE_LAST_CHECK=true`:执行最终验证——按串行顺序跑 `dx lint` -> `dx build affected --dev` -> 关联测试,有错即停。有失败则修复并 commit/push,无失败则完成。
446
+
447
+ ---
448
+
449
+ ## 阶段五:完成输出
450
+
451
+ ```
452
+ PR Ship 完成!
453
+
454
+ - Issue: #<ID> <标题>
455
+ - PR: #<PR_NUMBER> <链接>
456
+ - 审查轮数:N
457
+ - 总提交数:X(初始 + 修复)
458
+ - 问题统计:发现 A 个 / 修复 B 个 / 拒绝 C 个
459
+
460
+ 状态:✓ Lint 通过 ✓ 构建通过 ✓ 测试通过 ✓ 审查完成
461
+ ```
462
+
463
+ ---
464
+
465
+ ## 失败与中断
466
+
467
+ 如果任何阶段不可恢复地失败,输出:
468
+
469
+ - 停止阶段
470
+ - 已完成列表
471
+ - 阻塞原因
472
+ - 建议的人工介入方式
473
+
474
+ ## 质量检查清单
475
+
476
+ - PR 描述让审查者无需看代码就能理解改动
477
+ - 每个 commit message 精确描述改动内容和原因
478
+ - 审核报告中相同问题已合并
479
+ - 每个修复都是独立 commit
480
+ - 拒绝修复的问题都有理由
481
+ - 最终状态:Lint/构建/测试全部通过
@@ -0,0 +1,149 @@
1
+ ---
2
+ name: naming-audit-fixer
3
+ description: 审计并修复任意 JS/TS 项目的文件和文件夹命名规范。由模型判断框架、源码目录和自定义约定,再调用脚本执行扫描。当用户提到"命名规范"、"文件命名检查"、"naming convention"、"rename files"、"文件名不规范"、"命名审计",或讨论文件/文件夹命名最佳实践时触发。即使用户只是问"检查一下命名"也应触发。
4
+ ---
5
+
6
+ # 文件/文件夹命名规范审计与修复
7
+
8
+ 模型负责决策(判断框架、确定扫描范围、识别项目自定义约定),脚本负责执行(按规则遍历文件树、匹配违规、输出报告)。
9
+
10
+ ## 执行流程
11
+
12
+ ```
13
+ 模型分析项目 → 生成扫描配置 → 调用脚本 → 解读报告 → 展示给用户 → [用户确认] → 分批修复
14
+ ```
15
+
16
+ ### Step 1: 分析项目(模型完成)
17
+
18
+ 阅读以下文件来判断项目技术栈和目录结构:
19
+
20
+ 1. **`package.json`**(根目录和各 app 目录)— 识别依赖的框架
21
+ 2. **`pnpm-workspace.yaml`** 或 `package.json` 的 `workspaces` 字段 — 确定 monorepo 结构
22
+ 3. **`tsconfig.json`** — 确认源码目录(`rootDir`、`include`)
23
+ 4. **`CLAUDE.md` / `AGENTS.md`** — 识别项目自定义命名约定(优先级最高)
24
+ 5. **项目目录结构**(`ls` 快速浏览)— 确认实际源码位置
25
+
26
+ 根据分析结果,确定:
27
+ - 每个 app 使用什么框架
28
+ - 每个 app 的源码根目录
29
+ - 是否有 Next.js app 目录(路由文件豁免需要)
30
+ - 需要额外跳过的目录(如 `generated/`、`__generated__/`)
31
+ - 需要额外豁免的文件(如项目特有的入口文件)
32
+
33
+ ### Step 2: 生成扫描配置并调用脚本
34
+
35
+ 构造 JSON 配置,通过 stdin 传给脚本:
36
+
37
+ ```bash
38
+ echo '{
39
+ "scans": [
40
+ {
41
+ "root": "apps/backend/src",
42
+ "framework": "nestjs",
43
+ "extra_skip_dirs": [],
44
+ "extra_ok_files": []
45
+ },
46
+ {
47
+ "root": "apps/backend/e2e",
48
+ "framework": "nestjs",
49
+ "extra_skip_dirs": [],
50
+ "extra_ok_files": []
51
+ },
52
+ {
53
+ "root": "apps/front/src",
54
+ "framework": "nextjs-react",
55
+ "app_dir": "app",
56
+ "extra_skip_dirs": [],
57
+ "extra_ok_files": []
58
+ },
59
+ {
60
+ "root": "apps/admin/src",
61
+ "framework": "react",
62
+ "extra_skip_dirs": [],
63
+ "extra_ok_files": []
64
+ }
65
+ ]
66
+ }' | python ~/.claude/skills/naming-audit-fixer/scripts/audit_naming.py
67
+ ```
68
+
69
+ **配置字段说明:**
70
+
71
+ | 字段 | 必填 | 说明 |
72
+ |------|------|------|
73
+ | `root` | 是 | 要扫描的目录(相对于项目根目录) |
74
+ | `framework` | 是 | 命名规则集,见下方 |
75
+ | `app_dir` | 否 | Next.js app 目录名(默认 `app`),仅 `nextjs-react` 需要 |
76
+ | `extra_skip_dirs` | 否 | 额外要跳过的目录名 |
77
+ | `extra_ok_files` | 否 | 额外要豁免的文件名 |
78
+
79
+ **支持的 framework 值:**
80
+
81
+ | 值 | 适用场景 | 核心规则 |
82
+ |----|---------|---------|
83
+ | `nestjs` | NestJS 后端 | `kebab-name.type.ts`,目录 kebab-case |
84
+ | `nextjs-react` | Next.js + React | .tsx PascalCase,.ts kebab-case,路由文件豁免 |
85
+ | `react` | React SPA / Vite | .tsx PascalCase,.ts kebab-case |
86
+ | `vue` | Vue | .vue PascalCase 或 kebab-case,.ts kebab-case |
87
+ | `angular` | Angular | `kebab-name.type.ts`,类似 NestJS |
88
+ | `generic-ts` | 通用 TypeScript | 全 kebab-case |
89
+
90
+ ### Step 3: 解读并展示报告
91
+
92
+ 脚本输出 JSON,包含:
93
+ - `total_violations` — 违规总数
94
+ - `summary_by_rule` — 按规则分类的计数
95
+ - `violations[]` — 每条违规(path / rule / current / suggested)
96
+ - `fix_plan[]` — 可执行的 `git mv` 命令
97
+
98
+ 向用户展示:
99
+ 1. 按规则分类的汇总表
100
+ 2. 按目录分组的详细列表(当前名 → 建议名)
101
+ 3. 询问是否进入修复
102
+
103
+ **不要在审计阶段自动改代码。**
104
+
105
+ ### Step 4: 修复(用户确认后)
106
+
107
+ 阅读 [references/fix-guide.md](./references/fix-guide.md) 获取详细步骤。要点:
108
+
109
+ 1. **目录优先** — 先 `git mv` 重命名目录
110
+ 2. **按模块分批** — 每次处理一个模块下的文件
111
+ 3. **同步引用** — 每次重命名后用 Grep 找所有 import/require 引用,用 Edit 更新
112
+ 4. **检查 barrel** — 更新 `index.ts` 的 re-export
113
+ 5. **增量验证** — 每个模块改完跑 lint + build
114
+ 6. **最终测试** — 全部完成后跑受影响的测试
115
+
116
+ ## 命名规则速查
117
+
118
+ ### NestJS
119
+
120
+ | 正确 | 错误 | 原因 |
121
+ |------|------|------|
122
+ | `send-message.request.dto.ts` | `send.message.request.dto.ts` | name 部分用连字符 |
123
+ | `ai-model/` | `ai.model/` | 目录用 kebab-case |
124
+ | `message-not-found.exception.ts` | `message.not.found.exception.ts` | name 部分用连字符 |
125
+
126
+ ### Next.js + React
127
+
128
+ | 文件类型 | 规范 | 示例 |
129
+ |---------|------|------|
130
+ | 组件 .tsx | PascalCase | `ChatPanel.tsx` |
131
+ | 工具 .ts | kebab-case | `sort-mappings.ts` |
132
+ | Hook .ts | camelCase | `useChat.ts` |
133
+ | 路由文件 | 小写(豁免) | `page.tsx`, `layout.tsx` |
134
+ | 目录 | kebab-case | `character/` |
135
+
136
+ ### Vue
137
+
138
+ | 文件类型 | 规范 | 示例 |
139
+ |---------|------|------|
140
+ | 组件 .vue | PascalCase 或 kebab-case | `UserCard.vue` 或 `user-card.vue` |
141
+ | 工具 .ts | kebab-case | `format-date.ts` |
142
+
143
+ ## 注意事项
144
+
145
+ - **项目约定优先**:如果 CLAUDE.md / AGENTS.md 定义了自己的命名规范,以项目为准
146
+ - 脚本结果可能有误报,展示前应抽查
147
+ - 目录重命名影响大,建议单独 commit
148
+ - 入口文件、声明文件、动态路由自动豁免
149
+ - `node_modules/`、`dist/`、`migrations/` 等自动跳过