sumulige-claude 1.5.1 → 1.5.2

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 (219) hide show
  1. package/.claude/hooks/hook-registry.json +0 -15
  2. package/.claude/rules/coding-style.md +18 -7
  3. package/.claude/rules/hooks.md +15 -4
  4. package/.claude/rules/performance.md +15 -5
  5. package/.claude/rules/security.md +140 -4
  6. package/.claude/rules/testing.md +138 -9
  7. package/.claude/rules/web-design-standard.md +16 -5
  8. package/.claude/skills/algorithmic-art/metadata.yaml +28 -0
  9. package/.claude/skills/api-tester/SKILL.md +61 -0
  10. package/.claude/skills/api-tester/examples/basic.md +3 -0
  11. package/.claude/skills/api-tester/metadata.yaml +30 -0
  12. package/.claude/skills/api-tester/templates/default.md +3 -0
  13. package/.claude/skills/brand-guidelines/metadata.yaml +26 -0
  14. package/.claude/skills/canvas-design/metadata.yaml +27 -0
  15. package/.claude/skills/code-reviewer-123/SKILL.md +61 -0
  16. package/.claude/skills/code-reviewer-123/examples/basic.md +3 -0
  17. package/.claude/skills/code-reviewer-123/metadata.yaml +30 -0
  18. package/.claude/skills/code-reviewer-123/templates/default.md +3 -0
  19. package/.claude/skills/doc-coauthoring/metadata.yaml +27 -0
  20. package/.claude/skills/docx/metadata.yaml +30 -0
  21. package/.claude/skills/frontend-design/metadata.yaml +28 -0
  22. package/.claude/skills/internal-comms/metadata.yaml +28 -0
  23. package/.claude/skills/mcp-builder/metadata.yaml +26 -0
  24. package/.claude/skills/my-skill/SKILL.md +61 -0
  25. package/.claude/skills/my-skill/examples/basic.md +3 -0
  26. package/.claude/skills/my-skill/metadata.yaml +30 -0
  27. package/.claude/skills/my-skill/templates/default.md +3 -0
  28. package/.claude/skills/pdf/metadata.yaml +29 -0
  29. package/.claude/skills/pptx/metadata.yaml +29 -0
  30. package/.claude/skills/react-best-practices/metadata.yaml +26 -0
  31. package/.claude/skills/react-node-practices/SKILL.md +409 -0
  32. package/.claude/skills/react-node-practices/metadata.yaml +56 -0
  33. package/.claude/skills/skill-creator/metadata.yaml +25 -0
  34. package/.claude/skills/slack-gif-creator/metadata.yaml +28 -0
  35. package/.claude/skills/test-skill-name/SKILL.md +61 -0
  36. package/.claude/skills/test-skill-name/examples/basic.md +3 -0
  37. package/.claude/skills/test-skill-name/metadata.yaml +30 -0
  38. package/.claude/skills/test-skill-name/templates/default.md +3 -0
  39. package/.claude/skills/test-workflow/metadata.yaml +32 -0
  40. package/.claude/skills/theme-factory/metadata.yaml +26 -0
  41. package/.claude/skills/threejs-fundamentals/metadata.yaml +27 -0
  42. package/.claude/skills/web-artifacts-builder/metadata.yaml +30 -0
  43. package/.claude/skills/web-design-guidelines/metadata.yaml +26 -0
  44. package/.claude/skills/webapp-testing/metadata.yaml +26 -0
  45. package/.claude/skills/xlsx/metadata.yaml +29 -0
  46. package/LICENSE +21 -0
  47. package/cli.js +1 -1
  48. package/package.json +25 -3
  49. package/.claude/.kickoff-hint.txt +0 -52
  50. package/.claude/.sumulige-claude-version +0 -1
  51. package/.claude/.version +0 -1
  52. package/.claude/AGENTS.md +0 -42
  53. package/.claude/ANCHORS.md +0 -40
  54. package/.claude/CLAUDE.md +0 -138
  55. package/.claude/MEMORY.md +0 -69
  56. package/.claude/PROJECT_LOG.md +0 -101
  57. package/.claude/THINKING_CHAIN_GUIDE.md +0 -287
  58. package/.claude/USAGE.md +0 -175
  59. package/.claude/boris-optimizations.md +0 -167
  60. package/.claude/handoffs/INDEX.md +0 -21
  61. package/.claude/handoffs/LATEST.md +0 -76
  62. package/.claude/handoffs/handoff_2026-01-22T13-07-04-757Z.md +0 -76
  63. package/.claude/quality-gate.json +0 -82
  64. package/.claude/rag/skill-index.json +0 -135
  65. package/.claude/settings.json +0 -99
  66. package/.claude/settings.local.json +0 -175
  67. package/.claude/templates/PROJECT_KICKOFF.md +0 -89
  68. package/.claude/templates/PROJECT_PROPOSAL.md +0 -227
  69. package/.claude/templates/TASK_PLAN.md +0 -121
  70. package/.claude/templates/hooks/README.md +0 -302
  71. package/.claude/templates/hooks/hook.sh.template +0 -94
  72. package/.claude/templates/hooks/user-prompt-submit.cjs.template +0 -116
  73. package/.claude/templates/hooks/user-response-submit.cjs.template +0 -94
  74. package/.claude/templates/hooks/validate.js +0 -173
  75. package/.claude/templates/tasks/develop.md +0 -69
  76. package/.claude/templates/tasks/research.md +0 -64
  77. package/.claude/templates/tasks/test.md +0 -96
  78. package/.claude/thinking-routes/.last-sync +0 -1
  79. package/.claude/thinking-routes/QUICKREF.md +0 -98
  80. package/.claude/workflow/document-scanner.js +0 -426
  81. package/.claude/workflow/knowledge-engine.js +0 -941
  82. package/.claude/workflow/notebooklm/browser.js +0 -1028
  83. package/.claude/workflow/phases/phase1-research.js +0 -578
  84. package/.claude/workflow/phases/phase1-research.ts +0 -465
  85. package/.claude/workflow/phases/phase2-approve.js +0 -722
  86. package/.claude/workflow/phases/phase3-plan.js +0 -1200
  87. package/.claude/workflow/phases/phase4-develop.js +0 -894
  88. package/.claude/workflow/search-cache.js +0 -230
  89. package/.claude/workflow/templates/approval.md +0 -315
  90. package/.claude/workflow/templates/development.md +0 -377
  91. package/.claude/workflow/templates/planning.md +0 -328
  92. package/.claude/workflow/templates/research.md +0 -250
  93. package/.claude/workflow/types.js +0 -37
  94. package/.claude/workflow/web-search.js +0 -278
  95. package/.claude-plugin/marketplace.json +0 -71
  96. package/.github/workflows/sync-skills.yml +0 -74
  97. package/.versionrc +0 -25
  98. package/AGENTS.md +0 -580
  99. package/CHANGELOG.md +0 -481
  100. package/CLAUDE-template.md +0 -114
  101. package/DEV_TOOLS_GUIDE.md +0 -190
  102. package/PROJECT_STRUCTURE.md +0 -266
  103. package/Q&A.md +0 -325
  104. package/config/defaults.json +0 -34
  105. package/config/official-skills.json +0 -183
  106. package/config/quality-gate.json +0 -67
  107. package/config/skill-categories.json +0 -40
  108. package/config/version-manifest.json +0 -85
  109. package/demos/power-3d-scatter.html +0 -683
  110. package/development/cache/web-search/search_1193d605f8eb364651fc2f2041b58a31.json +0 -36
  111. package/development/cache/web-search/search_3798bf06960edc125f744a1abb5b72c5.json +0 -36
  112. package/development/cache/web-search/search_37c7d4843a53f0d83f1122a6f908a2a3.json +0 -36
  113. package/development/cache/web-search/search_44166fa0153709ee168485a22aa0ab40.json +0 -36
  114. package/development/cache/web-search/search_4deaebb1f77e86a8ca066dc5a49c59fd.json +0 -36
  115. package/development/cache/web-search/search_94da91789466070a7f545612e73c7372.json +0 -36
  116. package/development/cache/web-search/search_dd5de8491b8b803a3cb01339cd210fb0.json +0 -36
  117. package/development/knowledge-base/.index.clean.json +0 -1
  118. package/development/knowledge-base/.index.json +0 -486
  119. package/development/knowledge-base/test-best-practices.md +0 -29
  120. package/development/projects/proj_mkh1pazz_ixmt1/phase1/feasibility-report.md +0 -160
  121. package/development/projects/proj_mkh4jvnb_z7rwf/phase1/feasibility-report.md +0 -160
  122. package/development/projects/proj_mkh4jxkd_ewz5a/phase1/feasibility-report.md +0 -160
  123. package/development/projects/proj_mkh4k84n_ni73k/phase1/feasibility-report.md +0 -160
  124. package/development/projects/proj_mkh4wfyd_u9w88/phase1/feasibility-report.md +0 -160
  125. package/development/projects/proj_mkh4wsbo_iahvf/development/projects/proj_mkh4xbpg_4na5w/phase1/feasibility-report.md +0 -160
  126. package/development/projects/proj_mkh4wsbo_iahvf/phase1/feasibility-report.md +0 -160
  127. package/development/projects/proj_mkh4xulg_1ka8x/phase1/feasibility-report.md +0 -160
  128. package/development/projects/proj_mkh4xwhj_gch8j/phase1/feasibility-report.md +0 -160
  129. package/development/projects/proj_mkh4y2qk_9lm8z/phase1/feasibility-report.md +0 -160
  130. package/development/projects/proj_mkh4y2qk_9lm8z/phase2/requirements.md +0 -226
  131. package/development/projects/proj_mkh4y2qk_9lm8z/phase3/PRD.md +0 -345
  132. package/development/projects/proj_mkh4y2qk_9lm8z/phase3/TASK_PLAN.md +0 -284
  133. package/development/projects/proj_mkh4y2qk_9lm8z/phase3/prototype/README.md +0 -14
  134. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/DEVELOPMENT_LOG.md +0 -35
  135. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/TASKS.md +0 -34
  136. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/.env.example +0 -5
  137. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/README.md +0 -60
  138. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/package.json +0 -25
  139. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/src/index.js +0 -70
  140. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/src/routes/index.js +0 -48
  141. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/tests/health.test.js +0 -20
  142. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/tests/jest.config.js +0 -21
  143. package/development/projects/proj_mkh7veqg_3lypc/phase1/feasibility-report.md +0 -160
  144. package/development/projects/proj_mkh7veqg_3lypc/phase2/requirements.md +0 -226
  145. package/development/projects/proj_mkh7veqg_3lypc/phase3/PRD.md +0 -345
  146. package/development/projects/proj_mkh7veqg_3lypc/phase3/TASK_PLAN.md +0 -284
  147. package/development/projects/proj_mkh7veqg_3lypc/phase3/prototype/README.md +0 -14
  148. package/development/projects/proj_mkh8k8fo_rmqn5/phase1/feasibility-report.md +0 -160
  149. package/development/projects/proj_mkh8xyhy_1vshq/phase1/feasibility-report.md +0 -178
  150. package/development/projects/proj_mkh8zddd_dhamf/phase1/feasibility-report.md +0 -377
  151. package/development/projects/proj_mkh8zddd_dhamf/phase2/requirements.md +0 -442
  152. package/development/projects/proj_mkh8zddd_dhamf/phase3/api-design.md +0 -800
  153. package/development/projects/proj_mkh8zddd_dhamf/phase3/architecture.md +0 -625
  154. package/development/projects/proj_mkh8zddd_dhamf/phase3/data-model.md +0 -830
  155. package/development/projects/proj_mkh8zddd_dhamf/phase3/risks.md +0 -957
  156. package/development/projects/proj_mkh8zddd_dhamf/phase3/wbs.md +0 -381
  157. package/development/todos/.state.json +0 -19
  158. package/development/todos/INDEX.md +0 -63
  159. package/development/todos/active/_README.md +0 -49
  160. package/development/todos/archived/_README.md +0 -11
  161. package/development/todos/backlog/_README.md +0 -11
  162. package/development/todos/backlog/mcp-integration.md +0 -35
  163. package/development/todos/completed/_README.md +0 -11
  164. package/development/todos/completed/boris-optimizations.md +0 -39
  165. package/development/todos/completed/develop/local-knowledge-index.md +0 -85
  166. package/development/todos/completed/develop/todo-system.md +0 -47
  167. package/development/todos/completed/develop/web-search-integration.md +0 -83
  168. package/development/todos/completed/test/phase1-e2e-test.md +0 -103
  169. package/docs/DEVELOPMENT.md +0 -461
  170. package/docs/MARKETPLACE.md +0 -352
  171. package/docs/RELEASE.md +0 -93
  172. package/jest.config.js +0 -63
  173. package/lib/commands.js +0 -3588
  174. package/lib/config-manager.js +0 -441
  175. package/lib/config-schema.js +0 -408
  176. package/lib/config-validator.js +0 -330
  177. package/lib/config.js +0 -122
  178. package/lib/errors.js +0 -305
  179. package/lib/incremental-sync.js +0 -274
  180. package/lib/marketplace.js +0 -487
  181. package/lib/migrations.js +0 -154
  182. package/lib/permission-audit.js +0 -255
  183. package/lib/quality-gate.js +0 -431
  184. package/lib/quality-rules.js +0 -373
  185. package/lib/utils.js +0 -150
  186. package/lib/version-check.js +0 -169
  187. package/lib/version-manifest.js +0 -171
  188. package/project-paradigm.md +0 -313
  189. package/prompts/how-to-find.md +0 -163
  190. package/prompts/linus-architect.md +0 -71
  191. package/prompts/software-architect.md +0 -173
  192. package/prompts/web-designer.md +0 -249
  193. package/scripts/fix-hooks.mjs +0 -97
  194. package/scripts/sync-external.mjs +0 -298
  195. package/scripts/sync-to-home.sh +0 -108
  196. package/scripts/update-registry.mjs +0 -325
  197. package/sources.yaml +0 -83
  198. package/tests/README.md +0 -263
  199. package/tests/commands.test.js +0 -1086
  200. package/tests/config-manager.test.js +0 -677
  201. package/tests/config-schema.test.js +0 -425
  202. package/tests/config-validator.test.js +0 -436
  203. package/tests/config.test.js +0 -100
  204. package/tests/errors.test.js +0 -477
  205. package/tests/manual/phase1-e2e.sh +0 -389
  206. package/tests/manual/phase2-test-cases.md +0 -311
  207. package/tests/manual/phase3-test-cases.md +0 -309
  208. package/tests/manual/phase4-test-cases.md +0 -414
  209. package/tests/manual/test-cases.md +0 -417
  210. package/tests/marketplace.test.js +0 -420
  211. package/tests/migrations.test.js +0 -187
  212. package/tests/quality-gate.test.js +0 -679
  213. package/tests/quality-rules.test.js +0 -619
  214. package/tests/sync-external.test.js +0 -214
  215. package/tests/update-registry.test.js +0 -251
  216. package/tests/utils.test.js +0 -171
  217. package/tests/version-check.test.js +0 -75
  218. package/tests/web-search.test.js +0 -392
  219. package/thinkinglens-silent.md +0 -138
@@ -2,21 +2,6 @@
2
2
  "$schema": "hook-registry-schema.json",
3
3
  "$comment": "Hook Dispatcher Registry - Controls which hooks run and when",
4
4
 
5
- "plan-gate": {
6
- "events": ["PreToolUse"],
7
- "toolMatch": ["Write", "Edit"],
8
- "enabled": true,
9
- "description": "强制规划检查 - 无批准计划阻止 Write/Edit"
10
- },
11
-
12
- "live-quality": {
13
- "events": ["PostToolUse"],
14
- "toolMatch": ["Write", "Edit"],
15
- "debounce": 1000,
16
- "enabled": true,
17
- "description": "实时质量检查 - 写入后立即检查代码质量"
18
- },
19
-
20
5
  "thinking-silent": {
21
6
  "events": ["AgentStop"],
22
7
  "debounce": 5000,
@@ -2,7 +2,18 @@
2
2
 
3
3
  > 代码风格规则 - 所有代码必须遵守
4
4
 
5
- ## 不可变性 (CRITICAL)
5
+ ## 优先级说明
6
+
7
+ | 标签 | 含义 | 处理方式 |
8
+ |------|------|----------|
9
+ | 🔴 CRITICAL | 必须遵守 | 违反将阻止提交 |
10
+ | 🟠 HIGH | 应该遵守 | 代码审查必查 |
11
+ | 🟡 MEDIUM | 建议遵守 | 提升代码质量 |
12
+ | 🟢 LOW | 可选遵守 | 团队约定 |
13
+
14
+ ---
15
+
16
+ ## 🔴 CRITICAL: 不可变性 [CS-001]
6
17
 
7
18
  **始终创建新对象,永不变异:**
8
19
 
@@ -22,7 +33,7 @@ function updateUser(user, name) {
22
33
  }
23
34
  ```
24
35
 
25
- ## 文件组织
36
+ ## 🟠 HIGH: 文件组织 [CS-002]
26
37
 
27
38
  **多个小文件 > 少数大文件:**
28
39
 
@@ -34,7 +45,7 @@ function updateUser(user, name) {
34
45
 
35
46
  原则:高内聚,低耦合
36
47
 
37
- ## 错误处理
48
+ ## 🔴 CRITICAL: 错误处理 [CS-003]
38
49
 
39
50
  **始终全面处理错误:**
40
51
 
@@ -48,7 +59,7 @@ try {
48
59
  }
49
60
  ```
50
61
 
51
- ## 输入验证
62
+ ## 🔴 CRITICAL: 输入验证 [CS-004]
52
63
 
53
64
  **始终验证用户输入:**
54
65
 
@@ -63,7 +74,7 @@ const schema = z.object({
63
74
  const validated = schema.parse(input)
64
75
  ```
65
76
 
66
- ## 代码质量检查清单
77
+ ## 🟡 MEDIUM: 代码质量检查清单 [CS-005]
67
78
 
68
79
  完成工作前确认:
69
80
 
@@ -76,7 +87,7 @@ const validated = schema.parse(input)
76
87
  - [ ] 无硬编码值
77
88
  - [ ] 无变异(使用不可变模式)
78
89
 
79
- ## 命名规范
90
+ ## 🟢 LOW: 命名规范 [CS-006]
80
91
 
81
92
  | 类型 | 规范 | 示例 |
82
93
  |------|------|------|
@@ -86,7 +97,7 @@ const validated = schema.parse(input)
86
97
  | 类/组件 | PascalCase | `UserProfile`, `DataService` |
87
98
  | 文件 | kebab-case 或 PascalCase | `user-service.ts`, `UserProfile.tsx` |
88
99
 
89
- ## 禁止的模式
100
+ ## 🟠 HIGH: 禁止的模式 [CS-007]
90
101
 
91
102
  ```typescript
92
103
  // ❌ 魔法数字
@@ -2,7 +2,18 @@
2
2
 
3
3
  > 自动化钩子使用指南 - 融合自 everything-claude-code
4
4
 
5
- ## Hook 类型
5
+ ## 优先级说明
6
+
7
+ | 标签 | 含义 | 处理方式 |
8
+ |------|------|----------|
9
+ | 🔴 CRITICAL | 安全相关 | 必须配置 |
10
+ | 🟠 HIGH | 质量保障 | 强烈推荐 |
11
+ | 🟡 MEDIUM | 效率提升 | 建议配置 |
12
+ | 🟢 LOW | 便利功能 | 可选配置 |
13
+
14
+ ---
15
+
16
+ ## 🟠 HIGH: Hook 类型 [HOOK-001]
6
17
 
7
18
  | 类型 | 触发时机 | 用途 |
8
19
  |------|---------|------|
@@ -10,11 +21,11 @@
10
21
  | PostToolUse | 工具执行后 | 格式化、检查、通知 |
11
22
  | Stop | 会话结束时 | 总结、清理、保存 |
12
23
 
13
- ## 推荐的 Hook 配置
24
+ ## 🔴 CRITICAL: 推荐的 Hook 配置 [HOOK-002]
14
25
 
15
26
  ### PreToolUse Hooks
16
27
 
17
- **1. Git Push 审查**
28
+ **1. Git Push 审查** (🔴 安全)
18
29
 
19
30
  在 `git push` 前确认分支和状态:
20
31
 
@@ -43,7 +54,7 @@ module.exports = {
43
54
  }
44
55
  ```
45
56
 
46
- **2. 敏感文件保护**
57
+ **2. 敏感文件保护** (🔴 安全)
47
58
 
48
59
  防止修改关键配置文件:
49
60
 
@@ -2,7 +2,17 @@
2
2
 
3
3
  > 性能和资源管理规则
4
4
 
5
- ## 模型选择策略
5
+ ## 优先级说明
6
+
7
+ | 标签 | 含义 | 处理方式 |
8
+ |------|------|----------|
9
+ | 🔴 CRITICAL | 必须遵守 | 影响系统稳定性 |
10
+ | 🟠 HIGH | 应该遵守 | 影响效率和成本 |
11
+ | 🟡 MEDIUM | 建议遵守 | 优化体验 |
12
+
13
+ ---
14
+
15
+ ## 🟠 HIGH: 模型选择策略 [PERF-001]
6
16
 
7
17
  根据任务复杂度选择合适的模型:
8
18
 
@@ -22,7 +32,7 @@ Reviewer → Opus (需要严谨分析)
22
32
  Librarian → Haiku (文档整理)
23
33
  ```
24
34
 
25
- ## Context Window 管理
35
+ ## 🔴 CRITICAL: Context Window 管理 [PERF-002]
26
36
 
27
37
  **关键原则**:避免在 context 的最后 20% 进行复杂操作
28
38
 
@@ -37,7 +47,7 @@ Librarian → Haiku (文档整理)
37
47
  - 文档更新
38
48
  - 简单 bug 修复
39
49
 
40
- ## MCP 管理
50
+ ## 🟠 HIGH: MCP 管理 [PERF-003]
41
51
 
42
52
  **关键**:不要同时启用所有 MCP
43
53
 
@@ -59,7 +69,7 @@ Librarian → Haiku (文档整理)
59
69
  }
60
70
  ```
61
71
 
62
- ## 构建故障排除
72
+ ## 🟡 MEDIUM: 构建故障排除 [PERF-004]
63
73
 
64
74
  构建失败时:
65
75
 
@@ -68,7 +78,7 @@ Librarian → Haiku (文档整理)
68
78
  3. 增量修复
69
79
  4. 每次修复后验证
70
80
 
71
- ## 复杂任务策略
81
+ ## 🟡 MEDIUM: 复杂任务策略 [PERF-005]
72
82
 
73
83
  对于需要深度推理的任务:
74
84
 
@@ -2,7 +2,18 @@
2
2
 
3
3
  > 安全规则 - 所有提交必须遵守
4
4
 
5
- ## 提交前强制检查
5
+ ## 优先级说明
6
+
7
+ | 标签 | 含义 | 处理方式 |
8
+ |------|------|----------|
9
+ | 🔴 CRITICAL | 必须遵守 | 违反将阻止提交 |
10
+ | 🟠 HIGH | 应该遵守 | 代码审查必查 |
11
+
12
+ **注意**:安全规则全部为 🔴 CRITICAL 或 🟠 HIGH,无低优先级项。
13
+
14
+ ---
15
+
16
+ ## 🔴 CRITICAL: 提交前强制检查 [SEC-001]
6
17
 
7
18
  每次提交代码前必须确认:
8
19
 
@@ -15,7 +26,7 @@
15
26
  - [ ] **速率限制** - API 端点有请求限制
16
27
  - [ ] **错误信息** - 不泄露敏感数据
17
28
 
18
- ## 密钥管理
29
+ ## 🔴 CRITICAL: 密钥管理 [SEC-002]
19
30
 
20
31
  ```typescript
21
32
  // ❌ 永远不要这样做
@@ -29,7 +40,7 @@ if (!apiKey) {
29
40
  }
30
41
  ```
31
42
 
32
- ## 安全响应协议
43
+ ## 🔴 CRITICAL: 安全响应协议 [SEC-003]
33
44
 
34
45
  发现安全问题时:
35
46
 
@@ -39,7 +50,7 @@ if (!apiKey) {
39
50
  4. **轮换** 任何已暴露的密钥
40
51
  5. **审查** 整个代码库是否有类似问题
41
52
 
42
- ## 敏感文件
53
+ ## 🟠 HIGH: 敏感文件管理 [SEC-004]
43
54
 
44
55
  以下文件永远不应提交:
45
56
 
@@ -54,3 +65,128 @@ secrets.yaml
54
65
  ```
55
66
 
56
67
  确保 `.gitignore` 包含这些模式。
68
+
69
+ ---
70
+
71
+ ## 正确/错误对比示例
72
+
73
+ ### SQL 注入防护
74
+
75
+ ```typescript
76
+ // ❌ 错误:字符串拼接(SQL 注入风险)
77
+ const query = `SELECT * FROM users WHERE id = ${userId}`
78
+ db.query(query)
79
+
80
+ // ❌ 错误:模板字符串(同样危险)
81
+ db.query(`SELECT * FROM users WHERE email = '${email}'`)
82
+
83
+ // ✅ 正确:参数化查询
84
+ db.query('SELECT * FROM users WHERE id = $1', [userId])
85
+
86
+ // ✅ 正确:使用 ORM
87
+ await prisma.user.findUnique({ where: { id: userId } })
88
+ ```
89
+
90
+ ### XSS 防护
91
+
92
+ ```tsx
93
+ // ❌ 错误:直接渲染用户内容
94
+ <div dangerouslySetInnerHTML={{ __html: userComment }} />
95
+
96
+ // ❌ 错误:URL 中注入
97
+ <a href={`javascript:${userInput}`}>Click</a>
98
+
99
+ // ✅ 正确:使用 DOMPurify 清理
100
+ import DOMPurify from 'dompurify'
101
+ <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userComment) }} />
102
+
103
+ // ✅ 更好:直接渲染文本(自动转义)
104
+ <div>{userComment}</div>
105
+
106
+ // ✅ 正确:URL 验证
107
+ const safeUrl = url.startsWith('https://') ? url : '#'
108
+ <a href={safeUrl}>Link</a>
109
+ ```
110
+
111
+ ### 认证授权
112
+
113
+ ```typescript
114
+ // ❌ 错误:仅前端检查权限
115
+ if (user.role === 'admin') {
116
+ showAdminPanel()
117
+ }
118
+
119
+ // ❌ 错误:信任客户端传来的 userId
120
+ app.delete('/users/:id', (req, res) => {
121
+ userService.delete(req.params.id) // 谁都能删任何人!
122
+ })
123
+
124
+ // ✅ 正确:后端验证权限
125
+ app.delete('/users/:id', authenticate, authorize('admin'), (req, res) => {
126
+ // 只有 admin 角色才能到达这里
127
+ userService.delete(req.params.id)
128
+ })
129
+
130
+ // ✅ 正确:用户只能操作自己的资源
131
+ app.delete('/users/:id', authenticate, (req, res) => {
132
+ if (req.user.id !== req.params.id && req.user.role !== 'admin') {
133
+ return res.status(403).json({ error: 'Forbidden' })
134
+ }
135
+ userService.delete(req.params.id)
136
+ })
137
+ ```
138
+
139
+ ### 错误信息处理
140
+
141
+ ```typescript
142
+ // ❌ 错误:暴露内部细节
143
+ app.use((err, req, res, next) => {
144
+ res.status(500).json({
145
+ error: err.message,
146
+ stack: err.stack, // 泄露代码路径!
147
+ query: req.query, // 泄露请求参数!
148
+ })
149
+ })
150
+
151
+ // ❌ 错误:暴露数据库错误
152
+ catch (err) {
153
+ res.json({ error: `Database error: ${err.message}` })
154
+ }
155
+
156
+ // ✅ 正确:通用错误 + 内部日志
157
+ app.use((err, req, res, next) => {
158
+ // 内部记录详细错误
159
+ logger.error('Request failed', {
160
+ error: err,
161
+ requestId: req.id,
162
+ path: req.path
163
+ })
164
+
165
+ // 返回通用错误给客户端
166
+ res.status(500).json({
167
+ error: 'Internal server error',
168
+ requestId: req.id // 用于追踪
169
+ })
170
+ })
171
+ ```
172
+
173
+ ### 速率限制
174
+
175
+ ```typescript
176
+ // ❌ 错误:无速率限制(DDoS/暴力破解风险)
177
+ app.post('/login', (req, res) => {
178
+ // 攻击者可以无限尝试密码
179
+ })
180
+
181
+ // ✅ 正确:添加速率限制
182
+ import rateLimit from 'express-rate-limit'
183
+
184
+ const loginLimiter = rateLimit({
185
+ windowMs: 15 * 60 * 1000, // 15 分钟
186
+ max: 5, // 最多 5 次
187
+ message: 'Too many login attempts, please try again later'
188
+ })
189
+
190
+ app.post('/login', loginLimiter, (req, res) => {
191
+ // 现在受保护了
192
+ })
@@ -2,11 +2,21 @@
2
2
 
3
3
  > 测试规则 - 所有代码必须遵守
4
4
 
5
- ## 核心原则
5
+ ## 优先级说明
6
+
7
+ | 标签 | 含义 | 处理方式 |
8
+ |------|------|----------|
9
+ | 🔴 CRITICAL | 必须遵守 | 违反将阻止提交 |
10
+ | 🟠 HIGH | 应该遵守 | 代码审查必查 |
11
+ | 🟡 MEDIUM | 建议遵守 | 提升代码质量 |
12
+
13
+ ---
14
+
15
+ ## 🟠 HIGH: 核心原则 [TEST-001]
6
16
 
7
17
  **测试先于代码**:使用 TDD 工作流,先写测试再实现。
8
18
 
9
- ## 覆盖率要求
19
+ ## 🔴 CRITICAL: 覆盖率要求 [TEST-002]
10
20
 
11
21
  | 代码类型 | 最低覆盖率 |
12
22
  |---------|-----------|
@@ -15,7 +25,7 @@
15
25
  | 认证逻辑 | 100% |
16
26
  | 安全相关代码 | 100% |
17
27
 
18
- ## 提交前检查
28
+ ## 🔴 CRITICAL: 提交前检查 [TEST-003]
19
29
 
20
30
  每次提交前必须:
21
31
 
@@ -30,27 +40,27 @@
30
40
  npm test && npm run lint
31
41
  ```
32
42
 
33
- ## 测试类型要求
43
+ ## 🟠 HIGH: 测试类型要求 [TEST-004]
34
44
 
35
- ### 单元测试 (必须)
45
+ ### 单元测试 (🔴 必须)
36
46
 
37
47
  - 每个公共函数都有测试
38
48
  - 测试边界情况(null, empty, max)
39
49
  - 测试错误路径
40
50
 
41
- ### 集成测试 (必须)
51
+ ### 集成测试 (🟠 必须)
42
52
 
43
53
  - 每个 API 端点都有测试
44
54
  - 测试正常响应和错误响应
45
55
  - Mock 外部依赖
46
56
 
47
- ### E2E 测试 (关键流程)
57
+ ### E2E 测试 (🟡 关键流程)
48
58
 
49
59
  - 登录/认证流程
50
60
  - 核心业务流程
51
61
  - 支付/金融流程
52
62
 
53
- ## 测试反模式 (禁止)
63
+ ## 🟠 HIGH: 测试反模式 [TEST-005]
54
64
 
55
65
  ❌ **测试实现细节**
56
66
  ```typescript
@@ -71,7 +81,126 @@ test('updates same user', () => { ... }) // 依赖前一个
71
81
  await page.waitForTimeout(5000)
72
82
  ```
73
83
 
74
- ## CI 集成
84
+ ---
85
+
86
+ ## 正确/错误对比示例
87
+
88
+ ### 异步测试
89
+
90
+ ```typescript
91
+ // ❌ 错误:忘记 await
92
+ test('fetches user', () => {
93
+ const user = fetchUser(1) // Promise 未等待!
94
+ expect(user.name).toBe('John') // 总是失败
95
+ })
96
+
97
+ // ❌ 错误:回调地狱
98
+ test('creates user', (done) => {
99
+ createUser({ name: 'John' }).then(user => {
100
+ expect(user.name).toBe('John')
101
+ done()
102
+ })
103
+ })
104
+
105
+ // ✅ 正确:async/await
106
+ test('fetches user', async () => {
107
+ const user = await fetchUser(1)
108
+ expect(user.name).toBe('John')
109
+ })
110
+ ```
111
+
112
+ ### Mock 使用
113
+
114
+ ```typescript
115
+ // ❌ 错误:Mock 真实数据库(测试太慢)
116
+ test('creates user', async () => {
117
+ const user = await db.user.create({ data: { name: 'John' } })
118
+ expect(user.name).toBe('John')
119
+ })
120
+
121
+ // ❌ 错误:过度 Mock(测不到真问题)
122
+ jest.mock('../services/userService')
123
+ jest.mock('../repositories/userRepo')
124
+ jest.mock('../utils/validator')
125
+ // 一切都是假的,测试毫无意义
126
+
127
+ // ✅ 正确:只 Mock 外部依赖
128
+ jest.mock('../lib/emailClient') // 外部服务
129
+
130
+ test('creates user and sends welcome email', async () => {
131
+ const user = await userService.create({ name: 'John', email: 'j@example.com' })
132
+
133
+ expect(user.name).toBe('John')
134
+ expect(emailClient.send).toHaveBeenCalledWith({
135
+ to: 'j@example.com',
136
+ subject: 'Welcome!'
137
+ })
138
+ })
139
+ ```
140
+
141
+ ### 测试数据
142
+
143
+ ```typescript
144
+ // ❌ 错误:硬编码 ID(脆弱)
145
+ test('fetches user', async () => {
146
+ const user = await fetchUser('123e4567-e89b-12d3-a456-426614174000')
147
+ })
148
+
149
+ // ❌ 错误:依赖全局状态
150
+ let createdUserId: string
151
+
152
+ test('creates user', async () => {
153
+ const user = await createUser({ name: 'John' })
154
+ createdUserId = user.id // 污染其他测试
155
+ })
156
+
157
+ test('fetches user', async () => {
158
+ const user = await fetchUser(createdUserId) // 依赖上一个测试
159
+ })
160
+
161
+ // ✅ 正确:每个测试独立
162
+ describe('UserService', () => {
163
+ let testUser: User
164
+
165
+ beforeEach(async () => {
166
+ testUser = await createTestUser() // 工厂函数
167
+ })
168
+
169
+ afterEach(async () => {
170
+ await cleanupTestData()
171
+ })
172
+
173
+ test('fetches user', async () => {
174
+ const user = await fetchUser(testUser.id)
175
+ expect(user.name).toBe(testUser.name)
176
+ })
177
+ })
178
+ ```
179
+
180
+ ### 断言方式
181
+
182
+ ```typescript
183
+ // ❌ 错误:只测 truthy(不精确)
184
+ expect(result).toBeTruthy()
185
+ expect(users).toBeTruthy()
186
+ expect(count).toBeTruthy()
187
+
188
+ // ❌ 错误:测试实现细节
189
+ expect(component.state.isLoading).toBe(false)
190
+ expect(component.instance().handleClick).toBeDefined()
191
+
192
+ // ✅ 正确:测试行为和输出
193
+ expect(result).toEqual({ id: 1, name: 'John' })
194
+ expect(users).toHaveLength(3)
195
+ expect(count).toBe(42)
196
+
197
+ // ✅ 正确:测试用户可见的结果
198
+ expect(screen.getByText('Loading...')).toBeInTheDocument()
199
+ expect(screen.queryByText('Loading...')).not.toBeInTheDocument()
200
+ expect(screen.getByRole('button', { name: 'Submit' })).toBeEnabled()
201
+ ```
202
+
203
+ ## 🟡 MEDIUM: CI 集成 [TEST-006]
75
204
 
76
205
  CI 流水线必须:
77
206
 
@@ -2,7 +2,18 @@
2
2
 
3
3
  > 定义什么是好的设计,而非仅提供资源
4
4
 
5
- ## 核心哲学
5
+ ## 优先级说明
6
+
7
+ | 标签 | 含义 | 处理方式 |
8
+ |------|------|----------|
9
+ | 🔴 CRITICAL | 必须遵守 | 违反将显著影响用户体验 |
10
+ | 🟠 HIGH | 应该遵守 | 设计审查必查 |
11
+ | 🟡 MEDIUM | 建议遵守 | 提升设计质量 |
12
+ | 🟢 LOW | 可选遵守 | 风格偏好 |
13
+
14
+ ---
15
+
16
+ ## 🟠 HIGH: 核心哲学 [DESIGN-001]
6
17
 
7
18
  ```
8
19
  "Visual design is not about expressing yourself.
@@ -12,7 +23,7 @@
12
23
 
13
24
  **奥卡姆剃刀**:能删则删。文字、线条、边框——如果移除不影响含义,就移除它。
14
25
 
15
- ## 三大铁律
26
+ ## 🔴 CRITICAL: 三大铁律 [DESIGN-002]
16
27
 
17
28
  | 铁律 | 含义 | 检查方式 |
18
29
  |------|------|----------|
@@ -20,13 +31,13 @@
20
31
  | **接近 = 相关性** | 靠近的被感知为一组 | 相关内容放一起 |
21
32
  | **视觉层级** | 对比 + 接近 = 导航路标 | 眯眼测试:第一眼看哪? |
22
33
 
23
- ## 设计决策流程
34
+ ## 🟠 HIGH: 设计决策流程 [DESIGN-003]
24
35
 
25
36
  ```
26
37
  需求 → 信息层级 → 排版 → 颜色 → 间距 → 交互 → 验证
27
38
  ```
28
39
 
29
- ### Step 1: 信息层级
40
+ ### Step 1: 信息层级 (🔴)
30
41
 
31
42
  ```
32
43
  问自己:
@@ -36,7 +47,7 @@
36
47
  4. 什么可以删除?(装饰、冗余)
37
48
  ```
38
49
 
39
- ### Step 2: 排版系统
50
+ ### Step 2: 排版系统 (🟠)
40
51
 
41
52
  | 元素 | 规则 |
42
53
  |------|------|
@@ -0,0 +1,28 @@
1
+ name: algorithmic-art
2
+ version: 1.0.0
3
+ author: "@sumulige"
4
+ description: |
5
+ Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration.
6
+ Use this when users request creating art using code, generative art, algorithmic art, flow fields,
7
+ or particle systems. Create original algorithmic art rather than copying existing artists' work.
8
+
9
+ tags:
10
+ - generative-art
11
+ - p5js
12
+ - creative-coding
13
+ - visualization
14
+ - interactive
15
+
16
+ triggers:
17
+ - algorithmic art
18
+ - generative art
19
+ - p5.js
20
+ - flow fields
21
+ - particle systems
22
+ - creative coding
23
+ - procedural art
24
+
25
+ dependencies:
26
+ - p5.js
27
+
28
+ difficulty: advanced
@@ -0,0 +1,61 @@
1
+ # Api Tester
2
+
3
+ > 简短描述这个技能的作用(一句话)
4
+
5
+ **版本**: 1.0.0
6
+ **作者**: @username
7
+ **标签**: [category1, category2]
8
+ **难度**: 初级/中级/高级
9
+
10
+ ---
11
+
12
+ ## 概述
13
+
14
+ 详细描述这个技能的功能和用途。
15
+
16
+ ## 适用场景
17
+
18
+ - 场景 1
19
+ - 场景 2
20
+ - 场景 3
21
+
22
+ ## 触发关键词
23
+
24
+ ```
25
+ keyword1, keyword2, "exact phrase"
26
+ ```
27
+
28
+ ## 使用方法
29
+
30
+ ### 基础用法
31
+
32
+ ```bash
33
+ # 示例命令
34
+ your-command-here
35
+ ```
36
+
37
+ ### 高级用法
38
+
39
+ ```yaml
40
+ # 配置示例
41
+ key: value
42
+ ```
43
+
44
+ ## 输出格式
45
+
46
+ 描述这个技能的输出结果格式。
47
+
48
+ ## 注意事项
49
+
50
+ - 注意事项 1
51
+ - 注意事项 2
52
+
53
+ ## 相关技能
54
+
55
+ - [related-skill](../related-skill/)
56
+ - [another-skill](../another-skill/)
57
+
58
+ ## 更新日志
59
+
60
+ ### 1.0.0 (YYYY-MM-DD)
61
+ - 初始版本
@@ -0,0 +1,3 @@
1
+ # Basic Example for api-tester
2
+
3
+ Replace this with your actual example.