sumulige-claude 1.5.0 → 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 (217) 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 +218 -0
  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 -174
  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 -432
  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/scripts/fix-hooks.mjs +0 -97
  192. package/scripts/sync-external.mjs +0 -298
  193. package/scripts/sync-to-home.sh +0 -108
  194. package/scripts/update-registry.mjs +0 -325
  195. package/sources.yaml +0 -83
  196. package/tests/README.md +0 -263
  197. package/tests/commands.test.js +0 -1086
  198. package/tests/config-manager.test.js +0 -677
  199. package/tests/config-schema.test.js +0 -425
  200. package/tests/config-validator.test.js +0 -436
  201. package/tests/config.test.js +0 -100
  202. package/tests/errors.test.js +0 -477
  203. package/tests/manual/phase1-e2e.sh +0 -389
  204. package/tests/manual/phase2-test-cases.md +0 -311
  205. package/tests/manual/phase3-test-cases.md +0 -309
  206. package/tests/manual/phase4-test-cases.md +0 -414
  207. package/tests/manual/test-cases.md +0 -417
  208. package/tests/marketplace.test.js +0 -420
  209. package/tests/migrations.test.js +0 -187
  210. package/tests/quality-gate.test.js +0 -679
  211. package/tests/quality-rules.test.js +0 -619
  212. package/tests/sync-external.test.js +0 -214
  213. package/tests/update-registry.test.js +0 -251
  214. package/tests/utils.test.js +0 -171
  215. package/tests/version-check.test.js +0 -75
  216. package/tests/web-search.test.js +0 -392
  217. package/thinkinglens-silent.md +0 -138
@@ -0,0 +1,3 @@
1
+ # Basic Example for my-skill
2
+
3
+ Replace this with your actual example.
@@ -0,0 +1,30 @@
1
+ # Skill Metadata
2
+ # 这个文件定义技能的基本信息,用于自动发现和索引
3
+
4
+ name: my-skill
5
+ version: 1.0.0
6
+ author: @username
7
+ description: 简短描述技能功能
8
+
9
+ tags:
10
+ - category1
11
+ - category2
12
+
13
+ triggers:
14
+ - keyword1
15
+ - keyword2
16
+ - "exact phrase"
17
+
18
+ dependencies: [] # 依赖的其他技能
19
+
20
+ difficulty: beginner # beginner | intermediate | advanced
21
+
22
+ # 模板文件
23
+ templates:
24
+ - name: default
25
+ file: templates/default.md
26
+
27
+ # 示例文件
28
+ examples:
29
+ - name: basic
30
+ file: examples/basic.md
@@ -0,0 +1,3 @@
1
+ # Default Template for my-skill
2
+
3
+ Replace this with your actual template.
@@ -0,0 +1,29 @@
1
+ name: pdf
2
+ version: 1.0.0
3
+ author: "@sumulige"
4
+ description: |
5
+ Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs,
6
+ merging/splitting documents, and handling forms. Use when programmatically processing,
7
+ generating, or analyzing PDF documents at scale, or filling in PDF forms.
8
+
9
+ tags:
10
+ - pdf
11
+ - document
12
+ - extraction
13
+ - forms
14
+ - manipulation
15
+
16
+ triggers:
17
+ - PDF file
18
+ - merge PDF
19
+ - split PDF
20
+ - extract PDF
21
+ - fill PDF form
22
+ - create PDF
23
+
24
+ dependencies:
25
+ - pypdf
26
+ - pdfplumber
27
+ - reportlab
28
+
29
+ difficulty: intermediate
@@ -0,0 +1,29 @@
1
+ name: pptx
2
+ version: 1.0.0
3
+ author: "@sumulige"
4
+ description: |
5
+ Presentation creation, editing, and analysis for .pptx files.
6
+ Use for creating new presentations, modifying content, working with layouts,
7
+ adding comments or speaker notes, or any other presentation tasks.
8
+
9
+ tags:
10
+ - presentation
11
+ - powerpoint
12
+ - pptx
13
+ - slides
14
+ - office
15
+
16
+ triggers:
17
+ - PowerPoint
18
+ - pptx file
19
+ - create presentation
20
+ - edit slides
21
+ - slide deck
22
+
23
+ dependencies:
24
+ - pptxgenjs
25
+ - playwright
26
+ - LibreOffice
27
+ - defusedxml
28
+
29
+ difficulty: intermediate
@@ -0,0 +1,26 @@
1
+ name: react-best-practices
2
+ version: 1.0.0
3
+ author: vercel
4
+ description: |
5
+ React and Next.js performance optimization guidelines from Vercel Engineering.
6
+ Use when writing, reviewing, or refactoring React/Next.js code for optimal performance.
7
+ Contains 45 rules across 8 categories, prioritized by impact.
8
+
9
+ tags:
10
+ - react
11
+ - nextjs
12
+ - performance
13
+ - optimization
14
+ - best-practices
15
+
16
+ triggers:
17
+ - React performance
18
+ - Next.js optimization
19
+ - bundle size
20
+ - render optimization
21
+ - data fetching
22
+ - React refactor
23
+
24
+ dependencies: []
25
+
26
+ difficulty: intermediate
@@ -0,0 +1,409 @@
1
+ # React & Node.js Best Practices
2
+
3
+ > AI Agent 编写正确代码的知识包 - 灵感来自 Supabase Agent Skills
4
+
5
+ ## 规则分类(按优先级)
6
+
7
+ | 优先级 | 类别 | 说明 |
8
+ |--------|------|------|
9
+ | 🔴 Critical | 安全 & 性能 | 必须遵守,违反将阻止提交 |
10
+ | 🟠 High | 架构 & 模式 | 应该遵守,影响可维护性 |
11
+ | 🟡 Medium | 代码质量 | 建议遵守,提升代码质量 |
12
+ | 🟢 Low | 风格偏好 | 可选遵守,团队约定 |
13
+
14
+ ---
15
+
16
+ ## 🔴 Critical: 安全规则
17
+
18
+ ### SEC-001: 环境变量处理
19
+
20
+ ```typescript
21
+ // ❌ 错误:硬编码密钥
22
+ const apiKey = "sk-proj-xxxxx"
23
+ const dbUrl = "postgres://user:pass@localhost/db"
24
+
25
+ // ✅ 正确:环境变量
26
+ const apiKey = process.env.API_KEY
27
+ if (!apiKey) throw new Error('API_KEY not configured')
28
+
29
+ // ✅ 正确:使用 zod 验证环境变量
30
+ import { z } from 'zod'
31
+ const envSchema = z.object({
32
+ API_KEY: z.string().min(1),
33
+ DATABASE_URL: z.string().url(),
34
+ })
35
+ const env = envSchema.parse(process.env)
36
+ ```
37
+
38
+ ### SEC-002: 用户输入验证
39
+
40
+ ```typescript
41
+ // ❌ 错误:信任用户输入
42
+ app.post('/user', (req, res) => {
43
+ db.query(`SELECT * FROM users WHERE id = ${req.body.id}`)
44
+ })
45
+
46
+ // ✅ 正确:参数化查询 + 验证
47
+ import { z } from 'zod'
48
+ const userIdSchema = z.string().uuid()
49
+
50
+ app.post('/user', (req, res) => {
51
+ const id = userIdSchema.parse(req.body.id)
52
+ db.query('SELECT * FROM users WHERE id = $1', [id])
53
+ })
54
+ ```
55
+
56
+ ### SEC-003: 敏感数据不入日志
57
+
58
+ ```typescript
59
+ // ❌ 错误:记录敏感信息
60
+ console.log('User login:', { email, password, token })
61
+ logger.info('Payment:', { cardNumber, cvv })
62
+
63
+ // ✅ 正确:脱敏处理
64
+ console.log('User login:', { email, password: '[REDACTED]' })
65
+ logger.info('Payment:', { cardLast4: card.slice(-4) })
66
+ ```
67
+
68
+ ### SEC-004: XSS 防护
69
+
70
+ ```tsx
71
+ // ❌ 错误:直接渲染用户内容
72
+ <div dangerouslySetInnerHTML={{ __html: userContent }} />
73
+
74
+ // ✅ 正确:使用 DOMPurify 或避免 dangerouslySetInnerHTML
75
+ import DOMPurify from 'dompurify'
76
+ <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userContent) }} />
77
+
78
+ // ✅ 更好:直接渲染文本
79
+ <div>{userContent}</div>
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 🔴 Critical: 性能规则
85
+
86
+ ### PERF-001: 避免 useEffect 瀑布
87
+
88
+ ```tsx
89
+ // ❌ 错误:串行请求
90
+ useEffect(() => {
91
+ fetchUser().then(user => {
92
+ fetchPosts(user.id).then(posts => {
93
+ fetchComments(posts[0].id)
94
+ })
95
+ })
96
+ }, [])
97
+
98
+ // ✅ 正确:并行请求
99
+ useEffect(() => {
100
+ Promise.all([
101
+ fetchUser(),
102
+ fetchPosts(),
103
+ fetchComments()
104
+ ]).then(([user, posts, comments]) => {
105
+ // 处理数据
106
+ })
107
+ }, [])
108
+
109
+ // ✅ 更好:使用 React Query / SWR
110
+ const { data: user } = useQuery('user', fetchUser)
111
+ const { data: posts } = useQuery(['posts', user?.id], () => fetchPosts(user.id), {
112
+ enabled: !!user
113
+ })
114
+ ```
115
+
116
+ ### PERF-002: 大列表虚拟化
117
+
118
+ ```tsx
119
+ // ❌ 错误:渲染 10000 条数据
120
+ {items.map(item => <ListItem key={item.id} {...item} />)}
121
+
122
+ // ✅ 正确:虚拟化
123
+ import { FixedSizeList } from 'react-window'
124
+
125
+ <FixedSizeList
126
+ height={600}
127
+ itemCount={items.length}
128
+ itemSize={50}
129
+ >
130
+ {({ index, style }) => (
131
+ <ListItem style={style} {...items[index]} />
132
+ )}
133
+ </FixedSizeList>
134
+ ```
135
+
136
+ ### PERF-003: 避免 N+1 查询
137
+
138
+ ```typescript
139
+ // ❌ 错误:N+1 查询
140
+ const users = await db.query('SELECT * FROM users')
141
+ for (const user of users) {
142
+ user.posts = await db.query('SELECT * FROM posts WHERE user_id = $1', [user.id])
143
+ }
144
+
145
+ // ✅ 正确:JOIN 或批量查询
146
+ const users = await db.query(`
147
+ SELECT u.*, json_agg(p.*) as posts
148
+ FROM users u
149
+ LEFT JOIN posts p ON p.user_id = u.id
150
+ GROUP BY u.id
151
+ `)
152
+ ```
153
+
154
+ ---
155
+
156
+ ## 🟠 High: 架构规则
157
+
158
+ ### ARCH-001: 组件职责单一
159
+
160
+ ```tsx
161
+ // ❌ 错误:组件做太多事
162
+ function UserDashboard() {
163
+ const [user, setUser] = useState(null)
164
+ const [posts, setPosts] = useState([])
165
+ const [loading, setLoading] = useState(true)
166
+
167
+ useEffect(() => {
168
+ // 请求数据...
169
+ }, [])
170
+
171
+ const handleSubmit = async (data) => {
172
+ // 提交表单...
173
+ }
174
+
175
+ return (
176
+ <div>
177
+ {/* 200 行 JSX */}
178
+ </div>
179
+ )
180
+ }
181
+
182
+ // ✅ 正确:拆分职责
183
+ // hooks/useUser.ts
184
+ function useUser(id: string) {
185
+ return useQuery(['user', id], () => fetchUser(id))
186
+ }
187
+
188
+ // components/UserDashboard.tsx
189
+ function UserDashboard({ userId }) {
190
+ const { data: user, isLoading } = useUser(userId)
191
+
192
+ if (isLoading) return <Skeleton />
193
+
194
+ return (
195
+ <div>
196
+ <UserHeader user={user} />
197
+ <UserPosts userId={userId} />
198
+ <UserStats userId={userId} />
199
+ </div>
200
+ )
201
+ }
202
+ ```
203
+
204
+ ### ARCH-002: 错误边界
205
+
206
+ ```tsx
207
+ // ❌ 错误:无错误处理
208
+ function App() {
209
+ return <UserDashboard />
210
+ }
211
+
212
+ // ✅ 正确:添加错误边界
213
+ import { ErrorBoundary } from 'react-error-boundary'
214
+
215
+ function App() {
216
+ return (
217
+ <ErrorBoundary
218
+ fallback={<ErrorPage />}
219
+ onError={(error) => reportError(error)}
220
+ >
221
+ <UserDashboard />
222
+ </ErrorBoundary>
223
+ )
224
+ }
225
+ ```
226
+
227
+ ### ARCH-003: API 路由分层
228
+
229
+ ```typescript
230
+ // ❌ 错误:路由中混合业务逻辑
231
+ app.post('/users', async (req, res) => {
232
+ const { email, password } = req.body
233
+ const hashedPassword = await bcrypt.hash(password, 10)
234
+ const user = await db.query('INSERT INTO users...')
235
+ await sendEmail(email, 'Welcome!')
236
+ res.json(user)
237
+ })
238
+
239
+ // ✅ 正确:分层架构
240
+ // routes/users.ts
241
+ router.post('/', validateBody(createUserSchema), userController.create)
242
+
243
+ // controllers/userController.ts
244
+ async create(req, res) {
245
+ const user = await userService.create(req.body)
246
+ res.status(201).json(user)
247
+ }
248
+
249
+ // services/userService.ts
250
+ async create(data: CreateUserDTO) {
251
+ const user = await userRepository.create(data)
252
+ await emailService.sendWelcome(user.email)
253
+ return user
254
+ }
255
+ ```
256
+
257
+ ---
258
+
259
+ ## 🟡 Medium: 代码质量
260
+
261
+ ### QUAL-001: 类型安全优先
262
+
263
+ ```typescript
264
+ // ❌ 错误:any 类型
265
+ function processData(data: any) {
266
+ return data.items.map((item: any) => item.name)
267
+ }
268
+
269
+ // ✅ 正确:明确类型
270
+ interface DataResponse {
271
+ items: Array<{ id: string; name: string }>
272
+ }
273
+
274
+ function processData(data: DataResponse) {
275
+ return data.items.map(item => item.name)
276
+ }
277
+ ```
278
+
279
+ ### QUAL-002: 避免魔法值
280
+
281
+ ```typescript
282
+ // ❌ 错误:魔法数字
283
+ if (status === 200) { ... }
284
+ if (user.role === 1) { ... }
285
+ setTimeout(fn, 86400000)
286
+
287
+ // ✅ 正确:常量
288
+ const HTTP_OK = 200
289
+ const ROLE_ADMIN = 1
290
+ const ONE_DAY_MS = 24 * 60 * 60 * 1000
291
+
292
+ if (status === HTTP_OK) { ... }
293
+ if (user.role === ROLE_ADMIN) { ... }
294
+ setTimeout(fn, ONE_DAY_MS)
295
+ ```
296
+
297
+ ### QUAL-003: 不可变更新
298
+
299
+ ```typescript
300
+ // ❌ 错误:变异状态
301
+ function updateUser(user, name) {
302
+ user.name = name
303
+ return user
304
+ }
305
+
306
+ // ✅ 正确:不可变
307
+ function updateUser(user, name) {
308
+ return { ...user, name }
309
+ }
310
+
311
+ // ❌ 错误:变异数组
312
+ items.push(newItem)
313
+ items.sort()
314
+
315
+ // ✅ 正确:创建新数组
316
+ const newItems = [...items, newItem]
317
+ const sortedItems = [...items].sort()
318
+ ```
319
+
320
+ ---
321
+
322
+ ## 🟢 Low: 风格偏好
323
+
324
+ ### STYLE-001: 导入顺序
325
+
326
+ ```typescript
327
+ // ✅ 推荐顺序
328
+ // 1. 外部依赖
329
+ import React from 'react'
330
+ import { useQuery } from '@tanstack/react-query'
331
+
332
+ // 2. 内部模块(绝对路径)
333
+ import { Button } from '@/components/ui'
334
+ import { useAuth } from '@/hooks/useAuth'
335
+
336
+ // 3. 相对路径
337
+ import { UserAvatar } from './UserAvatar'
338
+ import styles from './User.module.css'
339
+
340
+ // 4. 类型(单独)
341
+ import type { User } from '@/types'
342
+ ```
343
+
344
+ ### STYLE-002: 命名约定
345
+
346
+ | 类型 | 约定 | 示例 |
347
+ |------|------|------|
348
+ | 组件 | PascalCase | `UserProfile.tsx` |
349
+ | Hook | camelCase + use 前缀 | `useAuth.ts` |
350
+ | 工具函数 | camelCase | `formatDate.ts` |
351
+ | 常量 | SCREAMING_SNAKE | `MAX_RETRY_COUNT` |
352
+ | 类型/接口 | PascalCase | `UserResponse` |
353
+
354
+ ---
355
+
356
+ ## 检查清单
357
+
358
+ ### 提交前必查(🔴 Critical)
359
+
360
+ - [ ] 无硬编码密钥/凭证
361
+ - [ ] 所有用户输入已验证
362
+ - [ ] 无 SQL 注入风险
363
+ - [ ] 无 XSS 漏洞
364
+ - [ ] 无 N+1 查询
365
+ - [ ] 大列表已虚拟化
366
+
367
+ ### 代码审查(🟠 High)
368
+
369
+ - [ ] 组件职责单一
370
+ - [ ] 有错误边界
371
+ - [ ] API 分层清晰
372
+ - [ ] 异步错误处理完善
373
+
374
+ ### 质量提升(🟡 Medium)
375
+
376
+ - [ ] 无 any 类型
377
+ - [ ] 无魔法值
378
+ - [ ] 使用不可变更新
379
+
380
+ ---
381
+
382
+ ## 相关工具
383
+
384
+ ```bash
385
+ # 类型检查
386
+ npx tsc --noEmit
387
+
388
+ # 安全审计
389
+ npm audit
390
+ npx snyk test
391
+
392
+ # 代码质量
393
+ npx eslint . --ext .ts,.tsx
394
+ npx knip # 未使用代码检测
395
+ ```
396
+
397
+ ---
398
+
399
+ ## 使用方式
400
+
401
+ AI Agent 在编写 React/Node.js 代码时应:
402
+
403
+ 1. **优先检查 Critical 规则** - 违反则必须修复
404
+ 2. **参考正确/错误示例** - 理解为什么这样做
405
+ 3. **使用检查清单** - 提交前自查
406
+
407
+ ---
408
+
409
+ **原则**:安全 > 性能 > 可维护性 > 风格
@@ -0,0 +1,56 @@
1
+ name: react-node-practices
2
+ version: 1.0.0
3
+ author: "@sumulige"
4
+ description: React & Node.js 最佳实践 - AI Agent 编写正确代码的知识包
5
+
6
+ tags:
7
+ - react
8
+ - nodejs
9
+ - typescript
10
+ - best-practices
11
+ - security
12
+ - performance
13
+
14
+ triggers:
15
+ - react
16
+ - node
17
+ - typescript
18
+ - frontend
19
+ - backend
20
+ - fullstack
21
+
22
+ dependencies: []
23
+
24
+ difficulty: intermediate
25
+
26
+ # 规则优先级分布
27
+ rule_categories:
28
+ critical:
29
+ - SEC-001 # 环境变量处理
30
+ - SEC-002 # 用户输入验证
31
+ - SEC-003 # 敏感数据不入日志
32
+ - SEC-004 # XSS 防护
33
+ - PERF-001 # 避免 useEffect 瀑布
34
+ - PERF-002 # 大列表虚拟化
35
+ - PERF-003 # 避免 N+1 查询
36
+ high:
37
+ - ARCH-001 # 组件职责单一
38
+ - ARCH-002 # 错误边界
39
+ - ARCH-003 # API 路由分层
40
+ medium:
41
+ - QUAL-001 # 类型安全优先
42
+ - QUAL-002 # 避免魔法值
43
+ - QUAL-003 # 不可变更新
44
+ low:
45
+ - STYLE-001 # 导入顺序
46
+ - STYLE-002 # 命名约定
47
+
48
+ # 兼容工具
49
+ compatible_with:
50
+ - claude-code
51
+ - cursor
52
+ - github-copilot
53
+ - windsurf
54
+
55
+ # 灵感来源
56
+ inspired_by: "https://supabase.com/blog/postgres-best-practices-for-ai-agents"
@@ -0,0 +1,25 @@
1
+ name: skill-creator
2
+ version: 1.0.0
3
+ author: "@sumulige"
4
+ description: |
5
+ Guide for creating effective skills that extend Claude's capabilities.
6
+ Use when users want to create a new skill or update an existing skill
7
+ with specialized knowledge, workflows, or tool integrations.
8
+
9
+ tags:
10
+ - skills
11
+ - development
12
+ - workflow
13
+ - meta
14
+ - tooling
15
+
16
+ triggers:
17
+ - create skill
18
+ - new skill
19
+ - update skill
20
+ - skill development
21
+ - extend capabilities
22
+
23
+ dependencies: []
24
+
25
+ difficulty: intermediate
@@ -0,0 +1,28 @@
1
+ name: slack-gif-creator
2
+ version: 1.0.0
3
+ author: "@sumulige"
4
+ description: |
5
+ Knowledge and utilities for creating animated GIFs optimized for Slack.
6
+ Provides constraints, validation tools, and animation concepts.
7
+ Use when users request animated GIFs for Slack like "make me a GIF of X doing Y".
8
+
9
+ tags:
10
+ - gif
11
+ - animation
12
+ - slack
13
+ - image
14
+ - creative
15
+
16
+ triggers:
17
+ - Slack GIF
18
+ - animated GIF
19
+ - emoji GIF
20
+ - create GIF
21
+ - GIF animation
22
+
23
+ dependencies:
24
+ - pillow
25
+ - imageio
26
+ - numpy
27
+
28
+ difficulty: intermediate
@@ -0,0 +1,61 @@
1
+ # Test Skill Name
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 test-skill-name
2
+
3
+ Replace this with your actual example.