pdd-skills 3.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.
Files changed (261) hide show
  1. package/README.md +1478 -0
  2. package/bin/pdd.js +354 -0
  3. package/config/bpmn-rules.yaml +166 -0
  4. package/config/checkstyle.xml +105 -0
  5. package/config/eslint.config.js +48 -0
  6. package/config/pmd.xml +91 -0
  7. package/config/prd-rules.yaml +113 -0
  8. package/config/ruff.toml +45 -0
  9. package/config/sqlfluff.cfg +82 -0
  10. package/hooks/hook-executor.js +332 -0
  11. package/index.js +43 -0
  12. package/lib/api-routes.js +750 -0
  13. package/lib/api-server.js +408 -0
  14. package/lib/cache/cache-config.js +209 -0
  15. package/lib/cache/system-cache.js +852 -0
  16. package/lib/config-manager.js +373 -0
  17. package/lib/generate.js +528 -0
  18. package/lib/grpc/grpc-routes.js +1134 -0
  19. package/lib/grpc/grpc-server.js +912 -0
  20. package/lib/grpc/proto-definitions.js +1033 -0
  21. package/lib/init.js +172 -0
  22. package/lib/iteration/auto-fixer.js +1025 -0
  23. package/lib/iteration/auto-reviewer.js +923 -0
  24. package/lib/iteration/controller.js +577 -0
  25. package/lib/list.js +130 -0
  26. package/lib/mcp-server.js +548 -0
  27. package/lib/openclaw/api-integration.js +535 -0
  28. package/lib/openclaw/cli-integration.js +567 -0
  29. package/lib/openclaw/data-sync.js +845 -0
  30. package/lib/openclaw/openclaw-adapter.js +783 -0
  31. package/lib/plugin/example-plugins/code-stats/index.js +332 -0
  32. package/lib/plugin/example-plugins/code-stats/plugin.json +1 -0
  33. package/lib/plugin/example-plugins/custom-linter/index.js +472 -0
  34. package/lib/plugin/example-plugins/custom-linter/plugin.json +1 -0
  35. package/lib/plugin/example-plugins/hello-world/index.js +86 -0
  36. package/lib/plugin/example-plugins/hello-world/plugin.json +1 -0
  37. package/lib/plugin/plugin-manager.js +655 -0
  38. package/lib/plugin/plugin-sdk.js +565 -0
  39. package/lib/plugin/sandbox.js +627 -0
  40. package/lib/quality/rules/maintainability.js +418 -0
  41. package/lib/quality/rules/performance.js +498 -0
  42. package/lib/quality/rules/readability.js +441 -0
  43. package/lib/quality/rules/robustness.js +504 -0
  44. package/lib/quality/rules/security.js +444 -0
  45. package/lib/quality/scorer.js +576 -0
  46. package/lib/report.js +669 -0
  47. package/lib/sdk-base.js +301 -0
  48. package/lib/sdk-js.js +446 -0
  49. package/lib/sdk-python/README.md +546 -0
  50. package/lib/sdk-python/examples/basic_usage.py +450 -0
  51. package/lib/sdk-python/pdd_sdk/__init__.py +180 -0
  52. package/lib/sdk-python/pdd_sdk/client.py +1170 -0
  53. package/lib/sdk-python/pdd_sdk/events.py +423 -0
  54. package/lib/sdk-python/pdd_sdk/exceptions.py +158 -0
  55. package/lib/sdk-python/pdd_sdk/models.py +518 -0
  56. package/lib/sdk-python/pdd_sdk/utils.py +759 -0
  57. package/lib/token/budget-alert.js +367 -0
  58. package/lib/token/budget-manager.js +485 -0
  59. package/lib/update.js +54 -0
  60. package/lib/utils/logger.js +88 -0
  61. package/lib/verify.js +741 -0
  62. package/lib/version.js +52 -0
  63. package/lib/vm/README.md +102 -0
  64. package/lib/vm/dashboard/api-routes.js +669 -0
  65. package/lib/vm/dashboard/server.js +391 -0
  66. package/lib/vm/dashboard/sse.js +358 -0
  67. package/lib/vm/dashboard/static/css/dashboard.css +1378 -0
  68. package/lib/vm/dashboard/static/index.html +118 -0
  69. package/lib/vm/dashboard/static/js/app.js +949 -0
  70. package/lib/vm/dashboard/static/js/charts.js +913 -0
  71. package/lib/vm/dashboard/static/js/kanban-view.js +1053 -0
  72. package/lib/vm/dashboard/static/js/pipeline-view.js +463 -0
  73. package/lib/vm/dashboard/static/js/quality-view.js +598 -0
  74. package/lib/vm/dashboard/static/js/system-view.js +1021 -0
  75. package/lib/vm/data-provider.js +1191 -0
  76. package/lib/vm/event-bus.js +402 -0
  77. package/lib/vm/hooks/extract-hook.js +307 -0
  78. package/lib/vm/hooks/generate-hook.js +374 -0
  79. package/lib/vm/hooks/hook-interface.js +458 -0
  80. package/lib/vm/hooks/report-hook.js +331 -0
  81. package/lib/vm/hooks/verify-hook.js +454 -0
  82. package/lib/vm/models.js +1003 -0
  83. package/lib/vm/reconciler.js +855 -0
  84. package/lib/vm/scanner.js +988 -0
  85. package/lib/vm/state-schema.js +955 -0
  86. package/lib/vm/state-store.js +733 -0
  87. package/lib/vm/tui/components/card.js +339 -0
  88. package/lib/vm/tui/components/progress-bar.js +368 -0
  89. package/lib/vm/tui/components/sparkline.js +327 -0
  90. package/lib/vm/tui/components/status-light.js +294 -0
  91. package/lib/vm/tui/components/table.js +370 -0
  92. package/lib/vm/tui/input.js +335 -0
  93. package/lib/vm/tui/renderer.js +548 -0
  94. package/lib/vm/tui/screens/kanban-screen.js +397 -0
  95. package/lib/vm/tui/screens/overview-screen.js +357 -0
  96. package/lib/vm/tui/screens/quality-screen.js +336 -0
  97. package/lib/vm/tui/screens/system-screen.js +379 -0
  98. package/lib/vm/tui/tui.js +805 -0
  99. package/package.json +1 -0
  100. package/scripts/cso-analyzer.js +198 -0
  101. package/scripts/eval-runner.js +359 -0
  102. package/scripts/i18n-checker.js +109 -0
  103. package/scripts/linter/activiti-linter.js +272 -0
  104. package/scripts/linter/prd-linter.js +162 -0
  105. package/scripts/linter/report-generator.js +207 -0
  106. package/scripts/linter/run-linters.js +285 -0
  107. package/scripts/linter/sql-linter.js +166 -0
  108. package/scripts/token-analyzer.js +162 -0
  109. package/scripts/vm-test.js +180 -0
  110. package/skills/core/official-doc-writer/LICENSE +21 -0
  111. package/skills/core/official-doc-writer/README.md +232 -0
  112. package/skills/core/official-doc-writer/SKILL.md +475 -0
  113. package/skills/core/official-doc-writer/_meta.json +1 -0
  114. package/skills/core/official-doc-writer/document_generator.py +580 -0
  115. package/skills/core/official-doc-writer/evals/default-evals.json +1 -0
  116. package/skills/core/official-doc-writer/examples.md +150 -0
  117. package/skills/core/official-doc-writer/fonts/FONTS_LIST.md +45 -0
  118. package/skills/core/official-doc-writer/fonts/README.md +141 -0
  119. package/skills/core/official-doc-writer/fonts/SIMFANG.TTF +0 -0
  120. package/skills/core/official-doc-writer/fonts/SIMHEI.TTF +0 -0
  121. package/skills/core/official-doc-writer/fonts/SIMKAI.TTF +0 -0
  122. package/skills/core/official-doc-writer/fonts/SIMSUN.TTC +0 -0
  123. package/skills/core/official-doc-writer/fonts//346/226/271/346/255/243/345/260/217/346/240/207/345/256/213GBK.TTF +0 -0
  124. package/skills/core/official-doc-writer/references/GBT_9704-2012_/345/205/232/346/224/277/346/234/272/345/205/263/345/205/254/346/226/207/346/240/274/345/274/217.md +422 -0
  125. package/skills/core/official-doc-writer/scripts/__pycache__/generate_official_doc.cpython-313.pyc +0 -0
  126. package/skills/core/official-doc-writer/scripts/dialog_manager.py +564 -0
  127. package/skills/core/official-doc-writer/scripts/generate_official_doc.py +252 -0
  128. package/skills/core/official-doc-writer/scripts/install_fonts.py +390 -0
  129. package/skills/core/official-doc-writer/scripts/smart_prompts.py +363 -0
  130. package/skills/core/pdd-ba/SKILL.md +305 -0
  131. package/skills/core/pdd-ba/_meta.json +1 -0
  132. package/skills/core/pdd-ba/evals/default-evals.json +1 -0
  133. package/skills/core/pdd-code-reviewer/SKILL.md +378 -0
  134. package/skills/core/pdd-code-reviewer/_meta.json +1 -0
  135. package/skills/core/pdd-code-reviewer/evals/default-evals.json +1 -0
  136. package/skills/core/pdd-doc-change/SKILL.md +350 -0
  137. package/skills/core/pdd-doc-change/_meta.json +1 -0
  138. package/skills/core/pdd-doc-change/evals/default-evals.json +1 -0
  139. package/skills/core/pdd-doc-gardener/SKILL.md +248 -0
  140. package/skills/core/pdd-doc-gardener/_meta.json +1 -0
  141. package/skills/core/pdd-doc-gardener/evals/default-evals.json +1 -0
  142. package/skills/core/pdd-entropy-reduction/SKILL.md +360 -0
  143. package/skills/core/pdd-entropy-reduction/_meta.json +1 -0
  144. package/skills/core/pdd-entropy-reduction/evals/default-evals.json +1 -0
  145. package/skills/core/pdd-entropy-reduction/references/entropy-report-template.md +287 -0
  146. package/skills/core/pdd-entropy-reduction/references/golden-principles.md +573 -0
  147. package/skills/core/pdd-entropy-reduction/scripts/entropy_scan.py +712 -0
  148. package/skills/core/pdd-extract-features/SKILL.md +320 -0
  149. package/skills/core/pdd-extract-features/_meta.json +1 -0
  150. package/skills/core/pdd-extract-features/evals/default-evals.json +1 -0
  151. package/skills/core/pdd-generate-spec/SKILL.md +418 -0
  152. package/skills/core/pdd-generate-spec/_meta.json +1 -0
  153. package/skills/core/pdd-generate-spec/evals/default-evals.json +1 -0
  154. package/skills/core/pdd-implement-feature/SKILL.md +332 -0
  155. package/skills/core/pdd-implement-feature/_meta.json +1 -0
  156. package/skills/core/pdd-implement-feature/evals/default-evals.json +1 -0
  157. package/skills/core/pdd-main/SKILL.md +540 -0
  158. package/skills/core/pdd-main/_meta.json +1 -0
  159. package/skills/core/pdd-main/evals/default-evals.json +1 -0
  160. package/skills/core/pdd-main/evals/evals.json +215 -0
  161. package/skills/core/pdd-verify-feature/SKILL.md +474 -0
  162. package/skills/core/pdd-verify-feature/_meta.json +1 -0
  163. package/skills/core/pdd-verify-feature/evals/default-evals.json +1 -0
  164. package/skills/core/pdd-vm/evals/default-evals.json +1 -0
  165. package/skills/core/traffic-accident-assessor/LICENSE +29 -0
  166. package/skills/core/traffic-accident-assessor/SKILL.md +439 -0
  167. package/skills/core/traffic-accident-assessor/evals/evals.json +1 -0
  168. package/skills/core/traffic-accident-assessor/references/accident-types.md +369 -0
  169. package/skills/core/traffic-accident-assessor/references/liability-rules.md +287 -0
  170. package/skills/core/traffic-accident-assessor/references/traffic-laws.md +226 -0
  171. package/skills/core/traffic-accident-assessor/references//351/253/230/345/260/224/345/244/253/350/257/264/346/230/216/344/271/246.pdf +32576 -106
  172. package/skills/core/traffic-accident-assessor/scripts/generate_official_statement.py +588 -0
  173. package/skills/core/traffic-accident-assessor/scripts/generate_report.py +495 -0
  174. package/skills/core/traffic-accident-assessor/scripts/generate_statement.py +528 -0
  175. package/skills/core/traffic-accident-assessor.zip +0 -0
  176. package/skills/entropy/expert-arch-enforcer/SKILL.md +292 -0
  177. package/skills/entropy/expert-arch-enforcer/_meta.json +1 -0
  178. package/skills/entropy/expert-arch-enforcer/evals/default-evals.json +1 -0
  179. package/skills/entropy/expert-auto-refactor/SKILL.md +327 -0
  180. package/skills/entropy/expert-auto-refactor/_meta.json +1 -0
  181. package/skills/entropy/expert-auto-refactor/evals/default-evals.json +1 -0
  182. package/skills/entropy/expert-code-quality/SKILL.md +468 -0
  183. package/skills/entropy/expert-code-quality/_meta.json +1 -0
  184. package/skills/entropy/expert-code-quality/evals/default-evals.json +1 -0
  185. package/skills/entropy/expert-code-quality/evals/evals.json +109 -0
  186. package/skills/entropy/expert-code-quality/references/code-smells.md +605 -0
  187. package/skills/entropy/expert-code-quality/references/design-patterns.md +1111 -0
  188. package/skills/entropy/expert-code-quality/references/refactoring-catalog.md +1281 -0
  189. package/skills/entropy/expert-code-quality/references/solid-principles.md +524 -0
  190. package/skills/entropy/expert-entropy-auditor/SKILL.md +276 -0
  191. package/skills/entropy/expert-entropy-auditor/_meta.json +1 -0
  192. package/skills/entropy/expert-entropy-auditor/evals/default-evals.json +1 -0
  193. package/skills/expert/expert-activiti/SKILL.md +497 -0
  194. package/skills/expert/expert-activiti/_meta.json +1 -0
  195. package/skills/expert/expert-mysql/SKILL.md +832 -0
  196. package/skills/expert/expert-mysql/_meta.json +1 -0
  197. package/skills/expert/expert-performance/SKILL.md +379 -0
  198. package/skills/expert/expert-performance/_meta.json +1 -0
  199. package/skills/expert/expert-performance/evals/default-evals.json +1 -0
  200. package/skills/expert/expert-ruoyi/SKILL.md +472 -0
  201. package/skills/expert/expert-ruoyi/_meta.json +1 -0
  202. package/skills/expert/expert-security/SKILL.md +1341 -0
  203. package/skills/expert/expert-security/_meta.json +1 -0
  204. package/skills/expert/expert-security/evals/default-evals.json +1 -0
  205. package/skills/expert/software-architect/SKILL.md +350 -0
  206. package/skills/expert/software-architect/_meta.json +1 -0
  207. package/skills/expert/software-engineer/SKILL.md +437 -0
  208. package/skills/expert/software-engineer/_meta.json +1 -0
  209. package/skills/expert/software-engineer/architecture.md +130 -0
  210. package/skills/expert/software-engineer/patterns.md +151 -0
  211. package/skills/expert/software-engineer/testing.md +135 -0
  212. package/skills/expert/system-architect/SKILL.md +628 -0
  213. package/skills/expert/system-architect/_meta.json +1 -0
  214. package/skills/expert/system-architect/assets/templates/ARCHITECTURE.md +25 -0
  215. package/skills/expert/system-architect/assets/templates/README.md +44 -0
  216. package/skills/expert/system-architect/references/js-ts-standards.md +18 -0
  217. package/skills/expert/system-architect/references/python-standards.md +19 -0
  218. package/skills/expert/system-architect/references/scaffolding.md +61 -0
  219. package/skills/expert/system-architect/references/security-checklist.md +21 -0
  220. package/skills/openspec/openspec-apply-change/SKILL.md +156 -0
  221. package/skills/openspec/openspec-apply-change/_meta.json +1 -0
  222. package/skills/openspec/openspec-archive-change/SKILL.md +114 -0
  223. package/skills/openspec/openspec-archive-change/_meta.json +1 -0
  224. package/skills/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  225. package/skills/openspec/openspec-bulk-archive-change/_meta.json +1 -0
  226. package/skills/openspec/openspec-continue-change/SKILL.md +118 -0
  227. package/skills/openspec/openspec-continue-change/_meta.json +1 -0
  228. package/skills/openspec/openspec-explore/SKILL.md +288 -0
  229. package/skills/openspec/openspec-explore/_meta.json +1 -0
  230. package/skills/openspec/openspec-ff-change/SKILL.md +101 -0
  231. package/skills/openspec/openspec-ff-change/_meta.json +1 -0
  232. package/skills/openspec/openspec-new-change/SKILL.md +74 -0
  233. package/skills/openspec/openspec-new-change/_meta.json +1 -0
  234. package/skills/openspec/openspec-onboard/SKILL.md +554 -0
  235. package/skills/openspec/openspec-onboard/_meta.json +1 -0
  236. package/skills/openspec/openspec-sync-specs/SKILL.md +138 -0
  237. package/skills/openspec/openspec-sync-specs/_meta.json +1 -0
  238. package/skills/openspec/openspec-verify-change/SKILL.md +168 -0
  239. package/skills/openspec/openspec-verify-change/_meta.json +1 -0
  240. package/skills/pr/pdd-multi-review/SKILL.md +534 -0
  241. package/skills/pr/pdd-multi-review/_meta.json +1 -0
  242. package/skills/pr/pdd-pr-batch/SKILL.md +303 -0
  243. package/skills/pr/pdd-pr-batch/_meta.json +1 -0
  244. package/skills/pr/pdd-pr-create/SKILL.md +344 -0
  245. package/skills/pr/pdd-pr-create/_meta.json +1 -0
  246. package/skills/pr/pdd-pr-merge/SKILL.md +286 -0
  247. package/skills/pr/pdd-pr-merge/_meta.json +1 -0
  248. package/skills/pr/pdd-pr-review/SKILL.md +217 -0
  249. package/skills/pr/pdd-pr-review/_meta.json +1 -0
  250. package/skills/pr/pdd-task-manager/SKILL.md +636 -0
  251. package/skills/pr/pdd-task-manager/_meta.json +1 -0
  252. package/skills/pr/pdd-template-engine/SKILL.md +306 -0
  253. package/skills/pr/pdd-template-engine/_meta.json +1 -0
  254. package/templates/behavior-shaping/iron-law-template.md +87 -0
  255. package/templates/behavior-shaping/rationalization-template.md +62 -0
  256. package/templates/behavior-shaping/red-flags-template.md +70 -0
  257. package/templates/bilingual-template.md +139 -0
  258. package/templates/config/default.yaml +47 -0
  259. package/templates/project/default/README.md +31 -0
  260. package/templates/project/frontend/README.md +46 -0
  261. package/templates/project/java/README.md +48 -0
@@ -0,0 +1,292 @@
1
+ ---
2
+ name: expert-arch-enforcer
3
+ description: 架构约束强制技能,监控代码是否违反预设的不变量和架构边界。当用户需要架构检查或依赖检查时自动触发。支持中文触发:架构检查、依赖检查、模块边界检查。
4
+
5
+ 核心职责:确保架构连贯性,防止架构漂移。
6
+ license: MIT
7
+ compatibility: 需要架构约束配置
8
+ metadata:
9
+ author: "neuqik@hotmail.com"
10
+ version: "1.0"
11
+ ---
12
+
13
+ # 架构约束强制 (expert-arch-enforcer)
14
+
15
+ ## 核心理念
16
+
17
+ > "在智能体优先的世界中,架构连贯性容易随时间漂移。约束是速度的保障,不是束缚。" —— Harness Engineering
18
+
19
+ 架构约束强制技能负责监控代码是否违反了预设的不变量和架构边界,确保代码结构保持一致性。
20
+
21
+ ## 架构约束模型
22
+
23
+ ### 六层依赖模型
24
+
25
+ ```
26
+ Types → Config → Repo → Service → Runtime → UI
27
+
28
+ 规则:只能向前依赖,不能反向依赖
29
+ ```
30
+
31
+ | 层级 | 职责 | 允许依赖 |
32
+ |------|------|---------|
33
+ | Types | 类型定义、数据模型 | 无 |
34
+ | Config | 配置管理、常量定义 | Types |
35
+ | Repo | 数据访问、外部服务调用 | Types, Config |
36
+ | Service | 业务逻辑、领域服务 | Types, Config, Repo |
37
+ | Runtime | 运行时、应用入口 | Types, Config, Repo, Service |
38
+ | UI | 用户界面、展示层 | 所有层 |
39
+
40
+ ### 边界约束
41
+
42
+ **数据边界**:
43
+ - 所有外部数据必须验证
44
+ - API 入口参数必须有 Schema 验证
45
+ - 不允许猜测数据结构
46
+
47
+ **模块边界**:
48
+ - 模块间通过接口通信
49
+ - 禁止跨层直接访问
50
+ - 共享状态必须显式声明
51
+
52
+ ---
53
+
54
+ ## 检测项
55
+
56
+ ### 1. 模块依赖方向违规
57
+
58
+ **检测方法**:
59
+ - 解析 import/require 语句
60
+ - 构建依赖图
61
+ - 检查是否违反依赖方向
62
+
63
+ **示例**:
64
+ ```
65
+ 文件:src/types/User.ts
66
+ import: import { UserService } from '../service/UserService'
67
+ → 检测结果:Types 层依赖 Service 层,违反依赖方向
68
+ ```
69
+
70
+ ### 2. 边界数据验证缺失
71
+
72
+ **检测方法**:
73
+ - 扫描 API 入口函数
74
+ - 检查是否有 Schema 验证
75
+ - 标记缺失验证的入口
76
+
77
+ **示例**:
78
+ ```
79
+ API 入口:POST /api/users
80
+ 参数验证:无
81
+ → 检测结果:缺少参数验证 Schema
82
+ ```
83
+
84
+ ### 3. 文件大小超限
85
+
86
+ **检测方法**:
87
+ - 统计文件行数
88
+ - 对比配置的最大行数
89
+ - 标记超限文件
90
+
91
+ **示例**:
92
+ ```
93
+ 文件:src/service/UserService.ts
94
+ 行数:450 行
95
+ 限制:300 行
96
+ → 检测结果:文件过大,建议拆分
97
+ ```
98
+
99
+ ### 4. 命名规范违反
100
+
101
+ **检测方法**:
102
+ - 检查文件名、函数名、变量名
103
+ - 对比命名规范
104
+ - 标记违规命名
105
+
106
+ **示例**:
107
+ ```
108
+ 函数名:get_data
109
+ 规范:camelCase
110
+ → 检测结果:命名不规范,应为 getData
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 执行流程
116
+
117
+ ```
118
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
119
+ │ 解析 │ ──→ │ 构建 │ ──→ │ 检测 │ ──→ │ 报告 │
120
+ │ │ │ │ │ │ │ │
121
+ │ • 代码文件 │ │ • 依赖图 │ │ • 依赖违规 │ │ • 问题清单 │
122
+ │ • import │ │ • 调用关系 │ │ • 边界违规 │ │ • 修复建议 │
123
+ │ • 函数签名 │ │ • 模块结构 │ │ • 大小违规 │ │ • PR 创建 │
124
+ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
125
+ ```
126
+
127
+ ---
128
+
129
+ ## 工具集成
130
+
131
+ ### 自定义 Linter
132
+
133
+ ```javascript
134
+ // custom-linter.js
135
+ module.exports = {
136
+ rules: {
137
+ 'layer-dependency': {
138
+ meta: {
139
+ docs: { description: '强制六层依赖方向' }
140
+ },
141
+ create(context) {
142
+ const layers = ['types', 'config', 'repo', 'service', 'runtime', 'ui'];
143
+ return {
144
+ ImportDeclaration(node) {
145
+ const source = node.source.value;
146
+ const currentLayer = getCurrentLayer(context.getFilename());
147
+ const targetLayer = getLayerFromPath(source);
148
+
149
+ if (layers.indexOf(targetLayer) < layers.indexOf(currentLayer)) {
150
+ context.report({
151
+ node,
152
+ message: `违反依赖方向: ${currentLayer} 不能依赖 ${targetLayer}`
153
+ });
154
+ }
155
+ }
156
+ };
157
+ }
158
+ }
159
+ }
160
+ };
161
+ ```
162
+
163
+ ### ArchUnit 测试
164
+
165
+ ```java
166
+ // ArchitectureTest.java
167
+ @AnalyzeClasses(packages = "com.example")
168
+ public class ArchitectureTest {
169
+
170
+ @ArchTest
171
+ static final ArchRule layer_dependency_rule = layeredArchitecture()
172
+ .layer("Types").definedBy("..types..")
173
+ .layer("Config").definedBy("..config..")
174
+ .layer("Repo").definedBy("..repo..")
175
+ .layer("Service").definedBy("..service..")
176
+ .layer("Runtime").definedBy("..runtime..")
177
+ .layer("UI").definedBy("..ui..")
178
+ .whereLayer("Types").mayNotBeAccessedByAnyLayer()
179
+ .whereLayer("Config").mayOnlyBeAccessedByLayers("Repo", "Service", "Runtime", "UI")
180
+ .whereLayer("Repo").mayOnlyBeAccessedByLayers("Service", "Runtime", "UI");
181
+ }
182
+ ```
183
+
184
+ ---
185
+
186
+ ## 输出格式
187
+
188
+ ### 架构约束报告
189
+
190
+ ```markdown
191
+ # 架构约束报告 - YYYY-MM-DD
192
+
193
+ ## 架构健康度:XX/100
194
+
195
+ ## 依赖图
196
+
197
+ [依赖关系可视化图]
198
+
199
+ ## 发现问题
200
+
201
+ ### Critical(必须修复)
202
+ | 文件 | 问题 | 违规类型 |
203
+ |------|------|---------|
204
+ | src/types/User.ts | 依赖 Service 层 | 依赖方向违规 |
205
+
206
+ ### Warning(建议修复)
207
+ | 文件 | 问题 | 违规类型 |
208
+ |------|------|---------|
209
+ | src/api/users.ts | 缺少参数验证 | 边界验证缺失 |
210
+
211
+ ### Info(可选修复)
212
+ | 文件 | 问题 | 违规类型 |
213
+ |------|------|---------|
214
+ | src/service/UserService.ts | 文件 450 行 | 大小超限 |
215
+
216
+ ## 修复建议
217
+
218
+ ### Critical 修复
219
+ 1. 移除 User.ts 中对 UserService 的依赖
220
+ 2. 将共享逻辑提取到 Types 层
221
+ ```
222
+
223
+ ---
224
+
225
+ ## 配置选项
226
+
227
+ ```yaml
228
+ # arch-enforcer-config.yaml
229
+ arch_enforcer:
230
+ # 层级定义
231
+ layers:
232
+ - name: types
233
+ paths: ["src/types/", "src/models/"]
234
+ - name: config
235
+ paths: ["src/config/", "src/constants/"]
236
+ - name: repo
237
+ paths: ["src/repo/", "src/data/"]
238
+ - name: service
239
+ paths: ["src/service/", "src/domain/"]
240
+ - name: runtime
241
+ paths: ["src/runtime/", "src/app/"]
242
+ - name: ui
243
+ paths: ["src/ui/", "src/components/"]
244
+
245
+ # 约束规则
246
+ constraints:
247
+ max_file_lines: 300
248
+ max_function_lines: 50
249
+ require_schema_validation: true
250
+
251
+ # 执行配置
252
+ execution:
253
+ run_linter: true
254
+ run_arch_test: true
255
+ create_pr: true
256
+ ```
257
+
258
+ ---
259
+
260
+ ## 使用示例
261
+
262
+ ### 示例 1:全面架构检查
263
+
264
+ ```
265
+ 用户:检查架构约束
266
+
267
+ AI:
268
+ 1. 解析代码文件
269
+ 2. 构建依赖图
270
+ 3. 运行 Linter 和 ArchUnit
271
+ 4. 生成报告
272
+ ```
273
+
274
+ ### 示例 2:依赖方向检查
275
+
276
+ ```
277
+ 用户:检查模块依赖方向
278
+
279
+ AI:
280
+ 1. 解析 import 语句
281
+ 2. 构建依赖图
282
+ 3. 检查是否违反六层模型
283
+ 4. 生成违规报告
284
+ ```
285
+
286
+ ---
287
+
288
+ ## 与其他技能的协作
289
+
290
+ - **pdd-entropy-reduction**:作为子技能被协调调用
291
+ - **expert-auto-refactor**:接收架构违规,执行重构
292
+ - **pdd-code-reviewer**:集成架构检查到代码审查
@@ -0,0 +1 @@
1
+ {"name": "expert-arch-enforcer", "version": "1.0.0", "category": "entropy", "description": "Architecture constraint enforcer monitoring code for violations of preset invariants and boundaries. Invoke when checking architecture compliance, dependency direction, or module boundary violations.", "triggers": ["架构检查", "依赖检查", "模块边界"]}
@@ -0,0 +1 @@
1
+ [{"name": "SKILL.md-exists", "description": "技能文件存在且格式正确", "type": "structure", "expect": {"exists": true, "hasDescription": true}, "checks": {"file_exists": "SKILL.md"}}, {"name": "_meta.json-valid", "description": "元数据文件格式正确", "type": "structure", "expect": {"exists": true, "hasName": true, "hasVersion": true, "hasTriggers": true}, "checks": {"file_exists": "_meta.json"}}, {"name": "constraints-defined", "description": "定义了架构约束规则(不变量/依赖方向/模块边界)", "type": "content", "contains": ["约束", "不变量", "依赖", "模块边界", "架构漂移"]}, {"name": "violation-types-defined", "description": "定义了违规类型和严重级别", "type": "content", "contains": ["违规", "CRITICAL", "WARN", "INFO", "检测"]}, {"name": "enforcement-actions-defined", "description": "定义了强制执行动作(阻止/警告/记录)", "type": "content", "contains": ["执行", "阻止", "警告", "记录", "CI"]}]
@@ -0,0 +1,327 @@
1
+ ---
2
+ name: expert-auto-refactor
3
+ description: Automated refactoring expert transforming quality improvements into concrete code operations. Call when eliminating duplication or simplifying complexity systematically. 支持中文触发:重构代码、消除重复、简化代码。
4
+
5
+ Core responsibility: Initiate targeted refactoring PRs regularly in a "small debt repayment" manner to prevent technical debt accumulation.
6
+
7
+ Trigger scenarios:
8
+ - User requests "refactor code", "eliminate duplicates", "simplify code"
9
+ - Called by pdd-entropy-reduction coordinator
10
+ - Refactoring suggestions passed from expert-entropy-auditor
11
+
12
+ 支持中文触发:自动重构、代码重构、消除重复、简化代码、重构专家、PDD重构。
13
+ author: neuqik@hotmail.com
14
+ license: MIT
15
+ ---
16
+
17
+ # Automated Refactoring Expert (expert-auto-refactor)
18
+
19
+ ## Core Philosophy
20
+
21
+ > "Initiate targeted refactoring PRs regularly in a 'small debt repayment' manner to prevent technical debt from accumulating into unmanageable 'painful interest'." —— Harness Engineering
22
+
23
+ The automated refactoring expert is an upgraded version of `expert-code-quality`, not just recording issues but actively executing refactoring operations.
24
+
25
+ ## Refactoring Types
26
+
27
+ ### 1. Extract Common Methods
28
+
29
+ **Scenario**: Similar code logic in multiple places
30
+
31
+ **Refactoring Method**:
32
+ 1. Identify similar code
33
+ 2. Extract common methods
34
+ 3. Replace original calls
35
+
36
+ **Example**:
37
+
38
+ Before refactoring:
39
+ ```javascript
40
+ // File A
41
+ function formatDate(date) {
42
+ return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
43
+ }
44
+
45
+ // File B
46
+ function formatDateString(d) {
47
+ return `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;
48
+ }
49
+ ```
50
+
51
+ After refactoring:
52
+ ```javascript
53
+ // utils/dateUtils.ts
54
+ export function formatDate(date: Date): string {
55
+ return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
56
+ }
57
+
58
+ // File A
59
+ import { formatDate } from '../utils/dateUtils';
60
+
61
+ // File B
62
+ import { formatDate } from '../utils/dateUtils';
63
+ ```
64
+
65
+ ### 2. Eliminate Duplicate Code
66
+
67
+ **Scenario**: Identical or highly similar code blocks
68
+
69
+ **Refactoring Method**:
70
+ 1. Detect duplicate code
71
+ 2. Extract to shared module
72
+ 3. Update references
73
+
74
+ **Example**:
75
+
76
+ Before refactoring:
77
+ ```javascript
78
+ // Repeated validation logic in multiple places
79
+ if (!user.email || !user.email.includes('@')) {
80
+ throw new Error('Invalid email');
81
+ }
82
+ ```
83
+
84
+ After refactoring:
85
+ ```javascript
86
+ // utils/validators.ts
87
+ export function validateEmail(email: string): boolean {
88
+ return email && email.includes('@');
89
+ }
90
+
91
+ // Usage
92
+ if (!validateEmail(user.email)) {
93
+ throw new Error('Invalid email');
94
+ }
95
+ ```
96
+
97
+ ### 3. Simplify Complex Logic
98
+
99
+ **Scenario**: Functions that are too long, deeply nested, or have complex logic
100
+
101
+ **Refactoring Method**:
102
+ 1. Split long functions
103
+ 2. Extract sub-functions
104
+ 3. Simplify conditional logic
105
+
106
+ **Example**:
107
+
108
+ Before refactoring:
109
+ ```javascript
110
+ function processOrder(order) {
111
+ if (order.status === 'pending') {
112
+ if (order.items.length > 0) {
113
+ if (order.payment) {
114
+ // Processing logic...
115
+ if (order.shipping) {
116
+ // More processing...
117
+ }
118
+ }
119
+ }
120
+ }
121
+ }
122
+ ```
123
+
124
+ After refactoring:
125
+ ```javascript
126
+ function processOrder(order) {
127
+ if (!canProcessOrder(order)) return;
128
+
129
+ processPayment(order);
130
+ processShipping(order);
131
+ updateOrderStatus(order);
132
+ }
133
+
134
+ function canProcessOrder(order) {
135
+ return order.status === 'pending'
136
+ && order.items.length > 0
137
+ && order.payment;
138
+ }
139
+ ```
140
+
141
+ ### 4. Optimize Naming
142
+
143
+ **Scenario**: Non-standard naming, unclear meaning
144
+
145
+ **Refactoring Method**:
146
+ 1. Analyze naming context
147
+ 2. Generate better naming
148
+ 3. Batch replacement
149
+
150
+ **Example**:
151
+
152
+ Before refactoring:
153
+ ```javascript
154
+ function calc(a, b) {
155
+ return a * b * 0.1;
156
+ }
157
+ ```
158
+
159
+ After refactoring:
160
+ ```javascript
161
+ function calculateTax(basePrice: number, quantity: number): number {
162
+ const TAX_RATE = 0.1;
163
+ return basePrice * quantity * TAX_RATE;
164
+ }
165
+ ```
166
+
167
+ ---
168
+
169
+ ## Refactoring Process
170
+
171
+ ```
172
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
173
+ │ Analyze │ ──→ │ Plan │ ──→ │ Execute │ ──→ │ Verify │
174
+ │ │ │ │ │ │ │ │
175
+ │ • Code │ │ • Refactor │ │ • Code │ │ • Test │
176
+ │ structure │ │ strategy │ │ changes │ │ execution │
177
+ │ • │ │ • Impact │ │ • Reference │ │ • Function │
178
+ │ Dependencies│ │ scope │ │ updates │ │ validation│
179
+ │ • Test │ │ • Risk │ │ • Document │ │ • PR │
180
+ │ coverage │ │ assessment│ │ sync │ │ creation │
181
+ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Refactoring Strategy
187
+
188
+ ### Small Debt Repayment Principle
189
+
190
+ Each refactoring should:
191
+ 1. **Small steps**: Only change a small part each time
192
+ 2. **Maintain tests**: Ensure tests always pass
193
+ 3. **Frequent commits**: Commit after each small step
194
+ 4. **Rollback capable**: Keep each commit independently rollbackable
195
+
196
+ ### Risk Assessment
197
+
198
+ | Risk Level | Condition | Strategy |
199
+ |---------|------|------|
200
+ | Low | Complete test coverage | Auto execute |
201
+ | Medium | Partial test coverage | Create PR |
202
+ | High | No test coverage | Add tests first then refactor |
203
+
204
+ ---
205
+
206
+ ## Output Format
207
+
208
+ ### Refactoring Report
209
+
210
+ ```markdown
211
+ # Refactoring Report - YYYY-MM-DD
212
+
213
+ ## Refactoring Scope
214
+ - Target files: X
215
+ - Affected files: X
216
+ - Test coverage: X%
217
+
218
+ ## Refactoring Operations
219
+
220
+ ### Extract Common Methods
221
+ | Original File | New File | Method Name | Status |
222
+ |-------|-------|-------|------|
223
+ | utils/formatDate.js | utils/dateUtils.ts | formatDate | ✅ Completed |
224
+
225
+ ### Eliminate Duplicate Code
226
+ | File A | File B | Duplicate Lines | Status |
227
+ |-------|-------|---------|------|
228
+ | service/UserService.ts | service/OrderService.ts | 25 lines | ✅ Completed |
229
+
230
+ ### Simplify Complex Logic
231
+ | File | Function Name | Original Lines | New Lines | Status |
232
+ |------|-------|-------|-------|------|
233
+ | service/OrderService.ts | processOrder | 80 | 35 | ✅ Completed |
234
+
235
+ ## Verification Results
236
+ - Unit tests: ✅ All passed
237
+ - Integration tests: ✅ All passed
238
+ - Functional verification: ✅ No anomalies
239
+
240
+ ## PR Information
241
+ - PR number: #XXX
242
+ - Branch: refactor/entropy-reduction-YYYYMMDD
243
+ - Status: Pending review
244
+ ```
245
+
246
+ ---
247
+
248
+ ## Configuration Options
249
+
250
+ ```yaml
251
+ # auto-refactor-config.yaml
252
+ auto_refactor:
253
+ # Refactoring scope
254
+ scope:
255
+ code_paths: ["src/"]
256
+ exclude: ["node_modules/", "dist/", "build/"]
257
+
258
+ # Refactoring rules
259
+ rules:
260
+ max_file_lines: 300
261
+ max_function_lines: 50
262
+ min_similarity: 0.8
263
+
264
+ # Execution strategy
265
+ execution:
266
+ auto_fix_low_risk: true # Auto fix low risk
267
+ create_pr: true # Create PR
268
+ max_changes_per_run: 10 # Max changes per run
269
+
270
+ # Testing requirements
271
+ testing:
272
+ require_tests: true # Require tests
273
+ min_coverage: 80 # Minimum coverage
274
+ ```
275
+
276
+ ---
277
+
278
+ ## Usage Examples
279
+
280
+ ### Example 1: Extract Duplicate Code
281
+
282
+ ```
283
+ User: Eliminate duplicates in code
284
+
285
+ AI:
286
+ 1. Detect duplicate code
287
+ 2. Analyze similarity
288
+ 3. Extract to shared module
289
+ 4. Update all references
290
+ 5. Create PR
291
+ ```
292
+
293
+ ### Example 2: Simplify Complex Function
294
+
295
+ ```
296
+ User: Simplify processOrder function
297
+
298
+ AI:
299
+ 1. Analyze function structure
300
+ 2. Identify extractable sub-functions
301
+ 3. Execute split refactoring
302
+ 4. Run test verification
303
+ 5. Create PR
304
+ ```
305
+
306
+ ### Example 3: Optimize Naming
307
+
308
+ ```
309
+ User: Optimize code naming
310
+
311
+ AI:
312
+ 1. Scan non-standard naming
313
+ 2. Analyze context
314
+ 3. Generate better naming
315
+ 4. Batch replacement
316
+ 5. Create PR
317
+ ```
318
+
319
+ ---
320
+
321
+ ## Collaboration with Other Skills
322
+
323
+ - **pdd-entropy-reduction**: Called as a sub-skill by the coordinator
324
+ - **expert-entropy-auditor**: Receive refactoring suggestions
325
+ - **expert-arch-enforcer**: Receive architecture violation fixes
326
+ - **pdd-code-reviewer**: Trigger code review after refactoring
327
+ - **pdd-doc-change**: Synchronously update related documentation
@@ -0,0 +1 @@
1
+ {"name": "expert-auto-refactor", "version": "1.0.0", "category": "entropy", "description": "Automated refactoring expert transforming collected quality improvements into concrete code operations. Call when eliminating code duplication, simplifying complexity, or applying design patterns systematically.", "triggers": ["重构代码", "消除重复", "简化代码"]}
@@ -0,0 +1 @@
1
+ [{"name": "SKILL.md-exists", "description": "技能文件存在且格式正确", "type": "structure", "expect": {"exists": true, "hasDescription": true}, "checks": {"file_exists": "SKILL.md"}}, {"name": "_meta.json-valid", "description": "元数据文件格式正确", "type": "structure", "expect": {"exists": true, "hasName": true, "hasVersion": true, "hasTriggers": true}, "checks": {"file_exists": "_meta.json"}}, {"name": "refactor-types-defined", "description": "定义了自动化重构类型(提取方法/内联/重命名等)", "type": "content", "contains": ["重构", "Extract", "Inline", "重复", "simplify"]}, {"name": "debt-repayment-strategy", "description": "定义了小额还贷策略", "type": "content", "contains": ["小额还贷", "定期", "技术债务", "偿还", "repayment"]}, {"name": "safe-operations-defined", "description": "定义了安全重构操作边界", "type": "content", "contains": ["安全", "测试", "验证", "targeted"]}]