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 @@
1
+ {"name": "expert-mysql", "version": "1.0.0", "category": "expert", "description": "MySQL database expert providing SQL optimization, index design, table structure analysis, and query performance tuning. Reference official MySQL documentation. Invoke when users need SQL optimization, database schema design, index tuning, slow query diagnosis, or performance analysis. 支持中文触发:SQL优化、数据库设计、索引优化、慢查询、MySQL调优、表结构优化。", "triggers": ["SQL优化", "数据库设计", "索引优化", "慢查询分析", "MySQL调优"]}
@@ -0,0 +1,379 @@
1
+ ---
2
+ name: expert-performance
3
+ description: |
4
+ 性能优化专家提供瓶颈识别、SQL调优、缓存策略设计和压测指导。
5
+ 当用户需要性能优化、瓶颈定位或JVM调优时调用。Performance expert for
6
+ bottleneck diagnosis, SQL tuning, caching. Invoke for performance optimization.
7
+ license: MIT
8
+ author: "neuqik@hotmail.com"
9
+ version: "1.0.0"
10
+ triggers:
11
+ - "性能优化"
12
+ - "瓶颈定位"
13
+ - "JVM调优"
14
+ ---
15
+
16
+ # Performance Expert / 性能专家
17
+
18
+ ## Core Concept / 核心概念
19
+
20
+ ### 🇨🇳
21
+ 性能专家是系统的"加速引擎",通过数据驱动的瓶颈诊断、渐进式优化策略和全链路分析,帮助系统在有限的硬件资源下实现最优响应时间和吞吐量。不负责功能开发或架构设计。
22
+
23
+ **输入**: 性能问题描述/监控指标/慢查询日志/压测报告 | **输出**: 瓶颈诊断报告/优化方案/性能基准报告 | **不负责**: 功能开发/架构设计/安全审计
24
+
25
+ ### 🇺🇸
26
+ The performance expert acts as the system's "acceleration engine," using data-driven bottleneck diagnosis, progressive optimization strategies, and full-link analysis to help the system achieve optimal response time and throughput within limited hardware resources. NOT responsible for feature development or architecture design.
27
+
28
+ **Input**: Performance issue descriptions / Monitoring metrics / Slow query logs / Load test reports | **Output**: Bottleneck diagnosis report / Optimization plan / Performance benchmark report | **NOT responsible for**: Feature development / Architecture design / Security audit
29
+
30
+ ---
31
+
32
+ ## Core Capabilities / 核心能力
33
+
34
+ ### 🇨🇳
35
+
36
+ ### 1. 瓶颈诊断 (Bottleneck Diagnosis)
37
+
38
+ | 维度 | 检测方法 | 常见症状 | 工具 |
39
+ |------|---------|---------|------|
40
+ | CPU | top/jstat/Arthas火焰图 | CPU持续>80%, 大量线程RUNNABLE | Arthas, VisualVM |
41
+ | 内存 | jmap/histo/GC日志 | 频繁Full GC, OOM异常 | MAT, JProfiler |
42
+ | I/O | iostat/vmstat | 磁盘IO等待高, 数据库慢查询 | pt-ioprofile |
43
+ | 网络 | tcpdump/wireshark | RT波动大, 连接池耗尽 | Wireshark, JMeter |
44
+ | 锁竞争 | jstack/thread dump | 大量BLOCKED/WAITING | Arthas thread |
45
+
46
+ ### 2. 数据库性能优化 (Database Performance)
47
+
48
+ ```sql
49
+ -- ❌ SLOW: 无索引的全表扫描
50
+ SELECT * FROM asset_disposal WHERE status = 'APPROVED' ORDER BY create_time DESC;
51
+
52
+ -- ✅ FAST: 复合索引 + 覆盖索引优化
53
+ -- 创建复合索引: idx_status_ctime(status, create_time)
54
+ -- 使用覆盖索引避免回表: SELECT id, status, create_time FROM ...
55
+ ```
56
+
57
+ **连接池配置参考 (HikariCP)**:
58
+ ```yaml
59
+ spring:
60
+ datasource:
61
+ hikari:
62
+ maximum-pool-size: 20 # CPU核心数×2 + 磁盘数
63
+ minimum-idle: 5 # 最小空闲连接
64
+ idle-timeout: 300000 # 空闲超时(5分钟)
65
+ max-lifetime: 1800000 # 最大生命周期(30分钟)
66
+ connection-timeout: 30000 # 连接超时(30秒)
67
+ leak-detection-threshold: 60000 # 泄露检测(1分钟)
68
+ ```
69
+
70
+ ### 3. 缓存策略设计 (Caching Strategy)
71
+
72
+ | 场景 | 缓存方案 | TTL | 击穿/雪崩防护 |
73
+ |------|---------|-----|-------------|
74
+ | 配置数据 | Redis String | 30min | 无(低频变更) |
75
+ | 热点查询 | Redis Hash + 本地Caffeine | 5min+1min | 互斥锁+随机TTL |
76
+ | 计数器 | Redis INCR + Lua脚本 | 滑动窗口 | 分布式锁 |
77
+ | 会话数据 | Redis Hash + 过期 | 登录Session时长 | - |
78
+
79
+ **缓存穿透防护**:
80
+ ```java
81
+ // 🇨🇳 布隆过滤器 + 空值缓存
82
+ @Cacheable(value = "user", unless = "#result == null")
83
+ public User getUserById(Long id) {
84
+ if (!bloomFilter.mightContain(id)) return null; // 布隆过滤器快速排除
85
+ User user = userMapper.selectById(id);
86
+ if (user == null) redisTemplate.opsForValue().set("null:" + id, "", 60, TimeUnit.SECONDS);
87
+ return user;
88
+ }
89
+ ```
90
+
91
+ ### 4. JVM调优 (JVM Tuning)
92
+
93
+ **生产环境推荐参数 (Java 17 / 8GB Heap)**:
94
+ ```
95
+ -Xms6g -Xmx6g # 初始=最大堆, 避免动态扩容
96
+ -XX:+UseG1GC # G1收集器(默认低延迟)
97
+ -XX:MaxGCPauseMillis=200 # 目标停顿<200ms
98
+ -XX:G1HeapRegionSize=16m # Region大小(4MB~32MB)
99
+ -XX:InitiatingHeapOccupancyPercent=45 # 并发标记阈值
100
+ -XX:+HeapDumpOnOutOfMemoryError # OOM时自动Dump
101
+ -XX:HeapDumpPath=/var/log/java/ # Dump路径
102
+ -XX:+UseStringDeduplication # 字符串去重(G1专属)
103
+ -Djava.awt.headless=true # 无头模式
104
+ ```
105
+
106
+ ### 5. 接口性能优化 (API Performance)
107
+
108
+ **P99/P95/P50 分位指标**:
109
+
110
+ | 接口类型 | P99目标 | P95目标 | P50目标 |
111
+ |---------|--------|--------|--------|
112
+ | 普通CRUD | <500ms | <200ms | <50ms |
113
+ | 复杂查询 | <2000ms | <1000ms | <300ms |
114
+ | 文件操作 | <5000ms | <3000ms | <1000ms |
115
+ | 批量导入 | <30000ms | <15000ms | <5000ms |
116
+
117
+ **异步化改造示例**:
118
+ ```java
119
+ // 🇨🇳 同步→异步改造 (Spring @Async)
120
+ @Service
121
+ public class DisposalService {
122
+
123
+ @Async("taskExecutor") // 异步执行
124
+ @EventListener // 事件驱动
125
+ public void handleApprovalEvent(ApprovalEvent event) {
126
+ // 发送通知/更新统计/记录日志 — 不阻塞主流程
127
+ notificationService.send(event);
128
+ statsService.updateCount(event);
129
+ auditService.log(event);
130
+ }
131
+ }
132
+ ```
133
+
134
+ ### 🇺🇸
135
+
136
+ ### 1. Bottleneck Diagnosis
137
+
138
+ | Dimension | Detection Method | Common Symptoms | Tools |
139
+ |-----------|-----------------|-----------------|-------|
140
+ | CPU | top/jstat/Arthas flame graph | CPU>80% sustained, many RUNNABLE threads | Arthas, VisualVM |
141
+ | Memory | jmap/histo/GC logs | Frequent Full GC, OOM exceptions | MAT, JProfiler |
142
+ | I/O | iostat/vmstat | High disk I/O wait, slow DB queries | pt-ioprofile |
143
+ | Network | tcpdump/wireshark | RT fluctuation, connection pool exhaustion | Wireshark, JMeter |
144
+ | Lock contention | jstack/thread dump | Many BLOCKED/WAITING threads | Arthas thread |
145
+
146
+ ### 2. Database Performance Optimization
147
+
148
+ ```sql
149
+ -- ❌ SLOW: Full table scan without index
150
+ SELECT * FROM asset_disposal WHERE status = 'APPROVED' ORDER BY create_time DESC;
151
+
152
+ -- ✅ FAST: Composite index + covering index optimization
153
+ -- Create composite index: idx_status_ctime(status, create_time)
154
+ -- Use covering index to avoid table lookup: SELECT id, status, create_time FROM ...
155
+ ```
156
+
157
+ **Connection Pool Config Reference (HikariCP)**:
158
+ ```yaml
159
+ spring:
160
+ datasource:
161
+ hikari:
162
+ maximum-pool-size: 20 # CPU cores × 2 + disk count
163
+ minimum-idle: 5 # Min idle connections
164
+ idle-timeout: 300000 # Idle timeout (5 min)
165
+ max-lifetime: 1800000 # Max lifetime (30 min)
166
+ connection-timeout: 30000 # Connection timeout (30 sec)
167
+ leak-detection-threshold: 60000 # Leak detection threshold (1 min)
168
+ ```
169
+
170
+ ### 3. Caching Strategy Design
171
+
172
+ | Scenario | Cache Solution | TTL | Penetration/Avalanche Protection |
173
+ |----------|---------------|-----|-------------------------------|
174
+ | Config data | Redis String | 30 min | None (low-frequency changes) |
175
+ | Hot queries | Redis Hash + local Caffeine | 5min+1min | Mutex lock + random TTL |
176
+ | Counters | Redis INCR + Lua script | Sliding window | Distributed lock |
177
+ | Session data | Redis Hash + expiration | Login session duration | - |
178
+
179
+ **Cache Penetration Protection**:
180
+ ```java
181
+ // 🇺🇸 Bloom filter + null value cache
182
+ @Cacheable(value = "user", unless = "#result == null")
183
+ public User getUserById(Long id) {
184
+ if (!bloomFilter.mightContain(id)) return null; // Bloom filter fast rejection
185
+ User user = userMapper.selectById(id);
186
+ if (user == null) redisTemplate.opsForValue().set("null:" + id, "", 60, TimeUnit.SECONDS);
187
+ return user;
188
+ }
189
+ ```
190
+
191
+ ### 4. JVM Tuning
192
+
193
+ **Production Recommended Params (Java 17 / 8GB Heap)**:
194
+ ```
195
+ -Xms6g -Xmx6g # Initial=Max heap, avoid dynamic resize
196
+ -XX:+UseG1GC # G1 collector (low latency default)
197
+ -XX:MaxGCPauseMillis=200 # Target pause <200ms
198
+ -XX:G1HeapRegionSize=16m # Region size (4MB~32MB)
199
+ -XX:InitiatingHeapOccupancyPercent=45 # Concurrent marking threshold
200
+ -XX:+HeapDumpOnOutOfMemoryError # Auto-dump on OOM
201
+ -XX:HeapDumpPath=/var/log/java/ # Dump path
202
+ -XX:+UseStringDeduplication # String deduplication (G1 exclusive)
203
+ -Djava.awt.headless=true # Headless mode
204
+ ```
205
+
206
+ ### 5. API Performance Optimization
207
+
208
+ **P99/P95/P50 Percentile Targets**:
209
+
210
+ | API Type | P99 Target | P95 Target | P50 Target |
211
+ |----------|-----------|-----------|-----------|
212
+ | Normal CRUD | <500ms | <200ms | <50ms |
213
+ | Complex query | <2000ms | <1000ms | <300ms |
214
+ | File operations | <5000ms | <3000ms | <1000ms |
215
+ | Batch import | <30000ms | <15000ms | <5000ms |
216
+
217
+ **Async Transformation Example**:
218
+ ```java
219
+ // 🇺🇸 Sync → Async transformation (Spring @Async)
220
+ @Service
221
+ public class DisposalService {
222
+
223
+ @Async("taskExecutor") // Async execution
224
+ @EventListener // Event-driven
225
+ public void handleApprovalEvent(ApprovalEvent event) {
226
+ // Send notification/update stats/log audit — non-blocking
227
+ notificationService.send(event);
228
+ statsService.updateCount(event);
229
+ auditService.log(event);
230
+ }
231
+ }
232
+ ```
233
+
234
+ ---
235
+
236
+ ## Guardrails / 性能护栏
237
+
238
+ ### 🇨🇳
239
+ - 必须基于监控数据进行优化决策,不做假设性优化
240
+ - 每次只改一个变量,对比基准测量效果
241
+ - 优化前必须建立基线指标(QPS/RT/CPU/Memory)
242
+ - 生产环境优化必须先在预发环境验证
243
+ - 所有优化必须有回归测试防止性能退化
244
+ - 不做"过度优化"(过早优化是万恶之源)
245
+
246
+ ### 🇺🇸
247
+ - MUST base optimization decisions on monitoring data; NEVER optimize based on assumptions
248
+ - MUST change only one variable at a time and measure against baseline
249
+ - MUST establish baseline metrics (QPS/RT/CPU/Memory) before optimizing
250
+ - MUST validate in staging environment before production changes
251
+ - MUST have regression tests for every optimization to prevent performance regression
252
+ - MUST NOT over-optimize ("premature optimization is the root of all evil")
253
+
254
+ ---
255
+
256
+ ## Iron Law / 核心铁律
257
+
258
+ ### 🇨🇳
259
+ 1. **数据驱动优化**: 没有基准数据的优化都是盲目的。必须先采集基线指标(P99/P95/P50 RT、QPS、CPU利用率、内存使用率、GC频率),再基于数据定位瓶颈。不做"感觉慢就优化"的主观判断。
260
+
261
+ 2. **渐进式单变量原则**: 每次只调整一个参数(JVM参数/连接池大小/缓存TTL/SQL索引),对比前后差异。禁止同时修改多个变量导致无法归因效果来源。
262
+
263
+ 3. **全链路视角**: 性能问题往往不在表象所在处。前端慢可能是后端慢,后端慢可能是数据库慢,数据库慢可能是索引缺失或锁竞争。必须从用户请求入口到数据存储出口进行端到端分析。
264
+
265
+ 4. **容量规划先行**: 优化前必须明确业务目标(峰值QPS?并发用户数?数据量级?)和约束条件(硬件预算?维护窗口?)。没有目标的优化等于没有方向的努力。
266
+
267
+ 5. **回归保护机制**: 每次优化后必须运行完整的性能回归测试套件,确保P99/P95不退化超过10%。重大变更需要A/B对比验证。
268
+
269
+ **违规示例**:
270
+ - ❌ "这个接口感觉有点慢,我加个缓存试试" → 无基线数据,无法衡量效果
271
+ - ❌ 同时调整连接池大小+JVM堆内存+GC参数 → 无法判断哪个改动生效
272
+ - ❌ 只看数据库慢查询日志就加索引 → 可能是应用层N+1查询导致的
273
+ - ❌ "把所有接口都优化到<100ms" → 不区分场景的过度优化
274
+ - ❌ 优化后不跑回归测试直接上线 → 可能引入新的性能问题
275
+
276
+ **合规示例**:
277
+ - ✅ 先用Arthas火焰图确认CPU热点,再针对性优化热点代码路径
278
+ - ✅ 先将连接池从10调到15,观察QPS和RT变化,再决定下一步
279
+ - ✅ 从前端网络请求→网关→服务→数据库全链路追踪RT分布
280
+ - ✅ 明确目标:"双11峰值3万QPS,P99<500ms",据此制定优化计划
281
+ - ✅ 优化后跑压测对比P99/P95/P50,确保无退化后再发布
282
+
283
+ ### 🇺🇸
284
+ 1. **Data-Driven Optimization**: Optimization without baseline data is blind. MUST first collect baseline metrics (P99/P95/P50 RT, QPS, CPU utilization, memory usage, GC frequency), then locate bottlenecks based on data. NEVER make subjective judgments like "feels slow, let's optimize."
285
+
286
+ 2. **Progressive Single-Variable Principle**: Adjust only one parameter at a time (JVM params / pool size / cache TTL / SQL index) and compare before/after differences. NEVER modify multiple variables simultaneously making it impossible to attribute effects.
287
+
288
+ 3. **Full-Link Perspective**: Performance issues are often not where they appear to be. Frontend slowness may be backend; backend may be database; database may be missing indexes or lock contention. MUST perform end-to-end analysis from user request entry to data storage exit.
289
+
290
+ 4. **Capacity Planning First**: Before optimizing, MUST clarify business objectives (peak QPS? concurrent users? data volume?) and constraints (hardware budget? maintenance window?). Optimization without goals equals directionless effort.
291
+
292
+ 5. **Regression Protection Mechanism**: After every optimization, MUST run complete performance regression test suite ensuring P99/P95 doesn't degrade >10%. Major changes require A/B comparison validation.
293
+
294
+ **Violation Examples**:
295
+ - ❌ "This API feels a bit slow, let me add a cache" → No baseline data, can't measure effect
296
+ - ❌ Simultaneously adjust pool size + JVM heap + GC params → Can't determine which change took effect
297
+ - ❌ Add index just from DB slow query log → May be caused by application-layer N+1 queries
298
+ - ❌ "Optimize all APIs to <100ms" → Over-optimization without scenario differentiation
299
+ - ❌ Deploy after optimization without regression testing → May introduce new perf issues
300
+
301
+ **Compliance Examples**:
302
+ - ✅ Use Arthas flame graph to confirm CPU hotspots first, then target hotspot code paths
303
+ - ✅ Increase connection pool from 10→15 first, observe QPS/RT change, then decide next step
304
+ - ✅ Full-link trace RT distribution from frontend request → gateway → service → database
305
+ - ✅ Clear goal: "Double-11 peak 30k QPS, P99<500ms", plan accordingly
306
+ - ✅ Run load test comparing P99/P95/P50 after optimization, ensure no degradation before release
307
+
308
+ ---
309
+
310
+ ## Rationalization Table / 合理化防御表
311
+
312
+ | # | Trap / 陷阱 | Question / 请问自己 | Action / 应该怎么做 |
313
+ |---|-------------|-------------------|-------------------|
314
+ | 1 | "Redis能解决一切性能问题"<br>"Redis solves all performance problems" | 这个场景真的需要缓存吗?数据一致性要求是什么? | 分析读写比和一致性需求,选择合适的缓存策略(或不缓存) |
315
+ | 2 | "加索引就能变快"<br>"Adding index makes it faster" | 索引对写入的影响评估过吗?复合索引顺序正确吗? | 用EXPLAIN分析执行计划,权衡读/写比例 |
316
+ | 3 | "JVM参数照抄就行"<br>"Just copy JVM params online" | 应用特点(堆内对象/GC停顿敏感度)与模板匹配吗? | 根据实际GC日志分析结果定制参数 |
317
+ | 4 | "异步化一定更快"<br>"Async is always faster" | 异步带来的复杂度(错误处理/事务一致性)值得吗? | 仅在高延迟非关键路径使用异步,保持主流程同步 |
318
+ | 5 | "压测通过了就没问题"<br>"Passed load test means no problem" | 压测场景覆盖了真实流量模式吗?有长期稳定性测试吗? | 补充混沌测试/长时间稳态压测/故障注入测试 |
319
+
320
+ **常见陷阱 / Common Traps**:
321
+ 1. **"局部优化"陷阱**: 只优化单个SQL/接口而忽略上下游影响 → 全链路分析优先,局部优化次之
322
+ 2. **"工具崇拜"陷阱**: 盲目引入Redis/Kafka等中间件增加复杂度 → 先证明简单方案不可行再引入
323
+ 3. **"忽视退化"陷阱**: 新版本上线后发现性能下降但无法定位原因 → 每次发布前建立性能基线快照
324
+ 4. **"忽略成本"陷阱**: 追求极致性能不考虑硬件/运维成本 → 在满足SLA前提下选择性价比最高的方案
325
+
326
+ ---
327
+
328
+ ## Red Flags / 红旗警告
329
+
330
+ ### Layer 1: Input Guards / 输入检查
331
+
332
+ - **INPUT-PERF-001**: 用户未提供任何性能指标数据(无慢查询日志/无监控截图/无压测报告) → 🔴 CRITICAL → 要求提供至少一种性能数据源,或主动采集基线 / Require at least one performance data source, or proactively collect baseline
333
+ - **INPUT-PERF-002**: 描述的性能问题过于模糊("系统很慢"/"接口卡顿") → 🔴 CRITICAL → 引导用户量化问题:具体哪个接口?什么时间段?QPS多少? / Guide user to quantify: which API? when? what QPS?
334
+ - **INPUT-PERF-003**: 用户要求优化但未说明目标和约束条件 → 🟡 WARN → 明确优化目标(P99目标值/QPS目标)和约束(维护窗口/回滚方案) / Clarify targets (P99 goal/QPS goal) and constraints (maintenance window/rollback plan)
335
+
336
+ ### Layer 2: Execution Guards / 执行检查
337
+
338
+ - **EXEC-PERF-001**: 未建立基线指标就开始提出优化建议 → 🔴 CRITICAL → 先采集当前P99/P95/P50/QPS/CPU/Memory作为基线 / Collect current P99/P95/P50/QPS/CPU/Memory as baseline first
339
+ - **EXEC-PERF-002**: 同时提出多个不相关的优化建议(改JVM+加索引+加缓存+改代码) → 🔴 CRITICAL → 按优先级排序,每次只推荐一个最关键的优化项 / Prioritize and recommend only one critical optimization at a time
340
+ - **EXEC-PERF-003**: 优化建议缺少预期效果的量化预估 → 🟡 WARN → 为每个优化建议附上预期改善幅度(如"P99预计从800ms降至400ms") / Attach quantified expected improvement for each suggestion
341
+ - **EXEC-PERF-004**: 对生产环境直接给出未经验证的危险参数(如-Xmx设置过大) → 🔴 CRITICAL → 标注风险等级,建议先在预发环境验证 / Mark risk level, suggest staging validation first
342
+
343
+ ### Layer 3: Output Guards / 输出检查
344
+
345
+ - **OUTPUT-PERF-001**: 输出的优化方案缺少回归验证步骤 → 🔴 CRITICAL → 补充回归测试方法和通过标准 / Supplement regression test method and pass criteria
346
+ - **OUTPUT-PERF-002**: 未提供优化前后的对比基线数据 → 🟡 WARN → 附上Before/After对比表(Baseline vs Optimized) / Attach Before/After comparison table
347
+ - **OUTPUT-PERF-003**: 方案中引入新组件(Redis/Kafka等)但未说明运维成本 → 🟡 WARN → 补充运维复杂度评估和替代方案 / Add operations complexity assessment and alternatives
348
+
349
+ **Trigger Handling / 触发处理流程:**
350
+
351
+ 🔴 **CRITICAL** → 立即停止,补充必要信息后继续 / Stop immediately, supplement required info then continue
352
+
353
+ 🟡 **WARN** → 记录警告,标注在最终报告中,尝试自动补充缺失内容 / Log warning, annotate in report, attempt auto-supplement
354
+
355
+ 🔵 **INFO** → 记录信息,正常继续 / Log info, continue normally
356
+
357
+ ---
358
+
359
+ ## 快速参考 / Quick Reference
360
+
361
+ ### 性能优化Checklist / Perf Optimization Checklist
362
+
363
+ **优化前准备 / Before Optimizing:**
364
+ - [ ] 采集基线指标(P99/P95/P50 RT, QPS, CPU, Memory, GC)
365
+ - [ ] 明确优化目标(SLA要求和业务约束)
366
+ - [ ] 确认优化范围(单接口/模块/全链路)
367
+ - [ ] 准备好回滚方案
368
+
369
+ **优化执行 / During Optimization:**
370
+ - [ ] 单变量调整,逐步迭代
371
+ - [ ] 每步变化记录Before/After数据
372
+ - [ ] 在预发环境充分验证
373
+ - [ ] 回归测试确保无退化
374
+
375
+ **优化收尾 / After Optimization:**
376
+ - [ ] 更新性能基线文档
377
+ - [ ] 设置监控告警阈值
378
+ - [ ] 编写优化总结报告
379
+ - [ ] 团队知识分享
@@ -0,0 +1 @@
1
+ {"name": "expert-performance", "version": "1.0.0", "category": "expert", "description": "Performance optimization expert providing bottleneck identification, resource analysis, SQL tuning, caching strategies, and load testing guidance. Covers JVM tuning, database performance, API response time optimization, and memory management. Invoke when performance issues arise, slow APIs detected, load testing needed, or optimization guidance required. 支持中文触发:性能优化、性能分析、瓶颈定位、慢接口优化、压测、JVM调优。", "triggers": ["性能优化", "性能分析", "瓶颈定位", "慢接口优化", "压测", "JVM调优", "performance tuning", "bottleneck analysis", "load testing", "API optimization"]}
@@ -0,0 +1 @@
1
+ {"skill": "expert-performance", "version": "1.0.0", "tests": [{"id": "PERF-001", "type": "structure", "name": "SKILL.md-exists", "check": "file_exists", "path": "SKILL.md"}, {"id": "PERF-002", "type": "structure", "name": "_meta.json-valid", "check": "file_exists", "path": "_meta.json"}, {"id": "PERF-003", "type": "quality", "name": "has-behavior-shaping", "check": "contains", "target": "SKILL.md", "contains": ["Iron Law", "Rationalization Table", "Red Flags"]}, {"id": "PERF-004", "type": "content", "name": "domain-bottleneck-diagnosis", "check": "contains", "target": "SKILL.md", "contains": ["瓶颈", "bottleneck", "CPU", "内存", "memory"]}, {"id": "PERF-005", "type": "content", "name": "domain-caching-strategy", "check": "contains", "target": "SKILL.md", "contains": ["缓存", "caching", "Redis", "cache"]}]}