sumulige-claude 1.5.1 → 1.6.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 (223) 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/README.md +280 -529
  48. package/cli.js +19 -3
  49. package/package.json +29 -3
  50. package/template/.codex/README.md +69 -0
  51. package/template/.codex/config.toml +56 -0
  52. package/template/AGENTS.md +94 -0
  53. package/.claude/.kickoff-hint.txt +0 -52
  54. package/.claude/.sumulige-claude-version +0 -1
  55. package/.claude/.version +0 -1
  56. package/.claude/AGENTS.md +0 -42
  57. package/.claude/ANCHORS.md +0 -40
  58. package/.claude/CLAUDE.md +0 -138
  59. package/.claude/MEMORY.md +0 -69
  60. package/.claude/PROJECT_LOG.md +0 -101
  61. package/.claude/THINKING_CHAIN_GUIDE.md +0 -287
  62. package/.claude/USAGE.md +0 -175
  63. package/.claude/boris-optimizations.md +0 -167
  64. package/.claude/handoffs/INDEX.md +0 -21
  65. package/.claude/handoffs/LATEST.md +0 -76
  66. package/.claude/handoffs/handoff_2026-01-22T13-07-04-757Z.md +0 -76
  67. package/.claude/quality-gate.json +0 -82
  68. package/.claude/rag/skill-index.json +0 -135
  69. package/.claude/settings.json +0 -99
  70. package/.claude/settings.local.json +0 -175
  71. package/.claude/templates/PROJECT_KICKOFF.md +0 -89
  72. package/.claude/templates/PROJECT_PROPOSAL.md +0 -227
  73. package/.claude/templates/TASK_PLAN.md +0 -121
  74. package/.claude/templates/hooks/README.md +0 -302
  75. package/.claude/templates/hooks/hook.sh.template +0 -94
  76. package/.claude/templates/hooks/user-prompt-submit.cjs.template +0 -116
  77. package/.claude/templates/hooks/user-response-submit.cjs.template +0 -94
  78. package/.claude/templates/hooks/validate.js +0 -173
  79. package/.claude/templates/tasks/develop.md +0 -69
  80. package/.claude/templates/tasks/research.md +0 -64
  81. package/.claude/templates/tasks/test.md +0 -96
  82. package/.claude/thinking-routes/.last-sync +0 -1
  83. package/.claude/thinking-routes/QUICKREF.md +0 -98
  84. package/.claude/workflow/document-scanner.js +0 -426
  85. package/.claude/workflow/knowledge-engine.js +0 -941
  86. package/.claude/workflow/notebooklm/browser.js +0 -1028
  87. package/.claude/workflow/phases/phase1-research.js +0 -578
  88. package/.claude/workflow/phases/phase1-research.ts +0 -465
  89. package/.claude/workflow/phases/phase2-approve.js +0 -722
  90. package/.claude/workflow/phases/phase3-plan.js +0 -1200
  91. package/.claude/workflow/phases/phase4-develop.js +0 -894
  92. package/.claude/workflow/search-cache.js +0 -230
  93. package/.claude/workflow/templates/approval.md +0 -315
  94. package/.claude/workflow/templates/development.md +0 -377
  95. package/.claude/workflow/templates/planning.md +0 -328
  96. package/.claude/workflow/templates/research.md +0 -250
  97. package/.claude/workflow/types.js +0 -37
  98. package/.claude/workflow/web-search.js +0 -278
  99. package/.claude-plugin/marketplace.json +0 -71
  100. package/.github/workflows/sync-skills.yml +0 -74
  101. package/.versionrc +0 -25
  102. package/AGENTS.md +0 -580
  103. package/CHANGELOG.md +0 -481
  104. package/CLAUDE-template.md +0 -114
  105. package/DEV_TOOLS_GUIDE.md +0 -190
  106. package/PROJECT_STRUCTURE.md +0 -266
  107. package/Q&A.md +0 -325
  108. package/config/defaults.json +0 -34
  109. package/config/official-skills.json +0 -183
  110. package/config/quality-gate.json +0 -67
  111. package/config/skill-categories.json +0 -40
  112. package/config/version-manifest.json +0 -85
  113. package/demos/power-3d-scatter.html +0 -683
  114. package/development/cache/web-search/search_1193d605f8eb364651fc2f2041b58a31.json +0 -36
  115. package/development/cache/web-search/search_3798bf06960edc125f744a1abb5b72c5.json +0 -36
  116. package/development/cache/web-search/search_37c7d4843a53f0d83f1122a6f908a2a3.json +0 -36
  117. package/development/cache/web-search/search_44166fa0153709ee168485a22aa0ab40.json +0 -36
  118. package/development/cache/web-search/search_4deaebb1f77e86a8ca066dc5a49c59fd.json +0 -36
  119. package/development/cache/web-search/search_94da91789466070a7f545612e73c7372.json +0 -36
  120. package/development/cache/web-search/search_dd5de8491b8b803a3cb01339cd210fb0.json +0 -36
  121. package/development/knowledge-base/.index.clean.json +0 -1
  122. package/development/knowledge-base/.index.json +0 -486
  123. package/development/knowledge-base/test-best-practices.md +0 -29
  124. package/development/projects/proj_mkh1pazz_ixmt1/phase1/feasibility-report.md +0 -160
  125. package/development/projects/proj_mkh4jvnb_z7rwf/phase1/feasibility-report.md +0 -160
  126. package/development/projects/proj_mkh4jxkd_ewz5a/phase1/feasibility-report.md +0 -160
  127. package/development/projects/proj_mkh4k84n_ni73k/phase1/feasibility-report.md +0 -160
  128. package/development/projects/proj_mkh4wfyd_u9w88/phase1/feasibility-report.md +0 -160
  129. package/development/projects/proj_mkh4wsbo_iahvf/development/projects/proj_mkh4xbpg_4na5w/phase1/feasibility-report.md +0 -160
  130. package/development/projects/proj_mkh4wsbo_iahvf/phase1/feasibility-report.md +0 -160
  131. package/development/projects/proj_mkh4xulg_1ka8x/phase1/feasibility-report.md +0 -160
  132. package/development/projects/proj_mkh4xwhj_gch8j/phase1/feasibility-report.md +0 -160
  133. package/development/projects/proj_mkh4y2qk_9lm8z/phase1/feasibility-report.md +0 -160
  134. package/development/projects/proj_mkh4y2qk_9lm8z/phase2/requirements.md +0 -226
  135. package/development/projects/proj_mkh4y2qk_9lm8z/phase3/PRD.md +0 -345
  136. package/development/projects/proj_mkh4y2qk_9lm8z/phase3/TASK_PLAN.md +0 -284
  137. package/development/projects/proj_mkh4y2qk_9lm8z/phase3/prototype/README.md +0 -14
  138. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/DEVELOPMENT_LOG.md +0 -35
  139. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/TASKS.md +0 -34
  140. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/.env.example +0 -5
  141. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/README.md +0 -60
  142. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/package.json +0 -25
  143. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/src/index.js +0 -70
  144. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/src/routes/index.js +0 -48
  145. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/tests/health.test.js +0 -20
  146. package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/tests/jest.config.js +0 -21
  147. package/development/projects/proj_mkh7veqg_3lypc/phase1/feasibility-report.md +0 -160
  148. package/development/projects/proj_mkh7veqg_3lypc/phase2/requirements.md +0 -226
  149. package/development/projects/proj_mkh7veqg_3lypc/phase3/PRD.md +0 -345
  150. package/development/projects/proj_mkh7veqg_3lypc/phase3/TASK_PLAN.md +0 -284
  151. package/development/projects/proj_mkh7veqg_3lypc/phase3/prototype/README.md +0 -14
  152. package/development/projects/proj_mkh8k8fo_rmqn5/phase1/feasibility-report.md +0 -160
  153. package/development/projects/proj_mkh8xyhy_1vshq/phase1/feasibility-report.md +0 -178
  154. package/development/projects/proj_mkh8zddd_dhamf/phase1/feasibility-report.md +0 -377
  155. package/development/projects/proj_mkh8zddd_dhamf/phase2/requirements.md +0 -442
  156. package/development/projects/proj_mkh8zddd_dhamf/phase3/api-design.md +0 -800
  157. package/development/projects/proj_mkh8zddd_dhamf/phase3/architecture.md +0 -625
  158. package/development/projects/proj_mkh8zddd_dhamf/phase3/data-model.md +0 -830
  159. package/development/projects/proj_mkh8zddd_dhamf/phase3/risks.md +0 -957
  160. package/development/projects/proj_mkh8zddd_dhamf/phase3/wbs.md +0 -381
  161. package/development/todos/.state.json +0 -19
  162. package/development/todos/INDEX.md +0 -63
  163. package/development/todos/active/_README.md +0 -49
  164. package/development/todos/archived/_README.md +0 -11
  165. package/development/todos/backlog/_README.md +0 -11
  166. package/development/todos/backlog/mcp-integration.md +0 -35
  167. package/development/todos/completed/_README.md +0 -11
  168. package/development/todos/completed/boris-optimizations.md +0 -39
  169. package/development/todos/completed/develop/local-knowledge-index.md +0 -85
  170. package/development/todos/completed/develop/todo-system.md +0 -47
  171. package/development/todos/completed/develop/web-search-integration.md +0 -83
  172. package/development/todos/completed/test/phase1-e2e-test.md +0 -103
  173. package/docs/DEVELOPMENT.md +0 -461
  174. package/docs/MARKETPLACE.md +0 -352
  175. package/docs/RELEASE.md +0 -93
  176. package/jest.config.js +0 -63
  177. package/lib/commands.js +0 -3588
  178. package/lib/config-manager.js +0 -441
  179. package/lib/config-schema.js +0 -408
  180. package/lib/config-validator.js +0 -330
  181. package/lib/config.js +0 -122
  182. package/lib/errors.js +0 -305
  183. package/lib/incremental-sync.js +0 -274
  184. package/lib/marketplace.js +0 -487
  185. package/lib/migrations.js +0 -154
  186. package/lib/permission-audit.js +0 -255
  187. package/lib/quality-gate.js +0 -431
  188. package/lib/quality-rules.js +0 -373
  189. package/lib/utils.js +0 -150
  190. package/lib/version-check.js +0 -169
  191. package/lib/version-manifest.js +0 -171
  192. package/project-paradigm.md +0 -313
  193. package/prompts/how-to-find.md +0 -163
  194. package/prompts/linus-architect.md +0 -71
  195. package/prompts/software-architect.md +0 -173
  196. package/prompts/web-designer.md +0 -249
  197. package/scripts/fix-hooks.mjs +0 -97
  198. package/scripts/sync-external.mjs +0 -298
  199. package/scripts/sync-to-home.sh +0 -108
  200. package/scripts/update-registry.mjs +0 -325
  201. package/sources.yaml +0 -83
  202. package/tests/README.md +0 -263
  203. package/tests/commands.test.js +0 -1086
  204. package/tests/config-manager.test.js +0 -677
  205. package/tests/config-schema.test.js +0 -425
  206. package/tests/config-validator.test.js +0 -436
  207. package/tests/config.test.js +0 -100
  208. package/tests/errors.test.js +0 -477
  209. package/tests/manual/phase1-e2e.sh +0 -389
  210. package/tests/manual/phase2-test-cases.md +0 -311
  211. package/tests/manual/phase3-test-cases.md +0 -309
  212. package/tests/manual/phase4-test-cases.md +0 -414
  213. package/tests/manual/test-cases.md +0 -417
  214. package/tests/marketplace.test.js +0 -420
  215. package/tests/migrations.test.js +0 -187
  216. package/tests/quality-gate.test.js +0 -679
  217. package/tests/quality-rules.test.js +0 -619
  218. package/tests/sync-external.test.js +0 -214
  219. package/tests/update-registry.test.js +0 -251
  220. package/tests/utils.test.js +0 -171
  221. package/tests/version-check.test.js +0 -75
  222. package/tests/web-search.test.js +0 -392
  223. package/thinkinglens-silent.md +0 -138
@@ -1,302 +0,0 @@
1
- # Claude Code Hooks 模板库
2
-
3
- > 标准化 hook 开发,防止常见错误
4
-
5
- ---
6
-
7
- ## 📋 目录
8
-
9
- - [快速开始](#快速开始)
10
- - [Hook 类型](#hook-类型)
11
- - [最佳实践](#最佳实践)
12
- - [常见错误](#常见错误)
13
- - [检查清单](#检查清单)
14
-
15
- ---
16
-
17
- ## 🚀 快速开始
18
-
19
- ### 1. 选择模板
20
-
21
- ```bash
22
- # UserPromptSubmit hook (用户提交提示时触发)
23
- cp user-prompt-submit.cjs.template my-hook.cjs
24
-
25
- # UserResponseSubmit hook (AI 返回响应后触发)
26
- cp user-response-submit.cjs.template my-hook.cjs
27
-
28
- # Shell hook
29
- cp hook.sh.template my-hook.sh
30
- ```
31
-
32
- ### 2. 修改配置
33
-
34
- ```javascript
35
- // 修改配置区域
36
- const CONFIG = {
37
- enabled: true,
38
- verbose: false, // 开发时设为 true
39
- };
40
- ```
41
-
42
- ### 3. 实现逻辑
43
-
44
- 在标记区域添加你的代码:
45
-
46
- ```javascript
47
- // ===== 在这里实现你的 hook 逻辑 =====
48
-
49
- // 你的代码
50
-
51
- // ===== Hook 逻辑结束 =====
52
- ```
53
-
54
- ### 4. 测试
55
-
56
- ```bash
57
- # 添加执行权限
58
- chmod +x my-hook.cjs
59
-
60
- # 测试(模拟环境变量)
61
- CLAUDE_PROJECT_DIR=/path/to/project node my-hook.cjs
62
-
63
- # 开启调试模式
64
- VERBOSE=true CLAUDE_PROJECT_DIR=/path/to/project node my-hook.cjs
65
- ```
66
-
67
- ---
68
-
69
- ## 📦 Hook 类型
70
-
71
- ### UserPromptSubmit
72
-
73
- 用户每次提交提示时触发。
74
-
75
- **可用环境变量:**
76
- - `CLAUDE_PROJECT_DIR` - 项目根目录
77
- - `CLAUDE_TOOL_NAME` - 当前调用的工具名
78
- - `CLAUDE_TOOL_INPUT` - 工具输入内容
79
-
80
- **使用场景:**
81
- - 追踪用户操作
82
- - 记录工具调用
83
- - 触发自动化流程
84
-
85
- ### UserResponseSubmit
86
-
87
- AI 返回响应后触发。
88
-
89
- **可用环境变量:**
90
- - `CLAUDE_PROJECT_DIR` - 项目根目录
91
- - `CLAUDE_RESPONSE_CONTENT` - 响应内容
92
-
93
- **使用场景:**
94
- - 分析响应内容
95
- - 统计 token 使用
96
- - 自动保存代码
97
-
98
- ---
99
-
100
- ## ✅ 最佳实践
101
-
102
- ### 1. 环境变量处理
103
-
104
- ```javascript
105
- // ✅ 正确 - 提供 fallback
106
- const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.cwd();
107
-
108
- // ❌ 错误 - 直接使用可能 undefined
109
- const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR;
110
- ```
111
-
112
- ### 2. 静默退出
113
-
114
- ```javascript
115
- // ✅ 正确 - 非项目环境时静默退出
116
- if (!process.env.CLAUDE_PROJECT_DIR) {
117
- process.exit(0);
118
- }
119
-
120
- // ❌ 错误 - 会抛出异常
121
- if (!process.env.CLAUDE_PROJECT_DIR) {
122
- throw new Error('No project dir');
123
- }
124
- ```
125
-
126
- ### 3. 错误处理
127
-
128
- ```javascript
129
- // ✅ 正确 - 捕获所有错误
130
- try {
131
- // 你的逻辑
132
- } catch (error) {
133
- log('Error:', error.message);
134
- }
135
-
136
- // ❌ 错误 - 未捕获错误会显示给用户
137
- // 直接执行可能失败的操作
138
- ```
139
-
140
- ### 4. 文件操作
141
-
142
- ```javascript
143
- // ✅ 正确 - 安全的文件操作
144
- function safeWriteFile(filePath, content) {
145
- try {
146
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
147
- fs.writeFileSync(filePath, content, 'utf-8');
148
- return true;
149
- } catch (e) {
150
- return false; // 静默失败
151
- }
152
- }
153
-
154
- // ❌ 错误 - 可能因为目录不存在而失败
155
- fs.writeFileSync(filePath, content);
156
- ```
157
-
158
- ### 5. 输出控制
159
-
160
- ```javascript
161
- // ✅ 正确 - 使用 stderr 记录日志
162
- function log(...args) {
163
- console.error('[Hook]', ...args);
164
- }
165
-
166
- // ❌ 错误 - stdout 会干扰响应
167
- console.log(...args);
168
- ```
169
-
170
- ---
171
-
172
- ## 🐛 常见错误
173
-
174
- ### 错误 1: 未检查环境变量
175
-
176
- ```javascript
177
- // ❌ 问题代码
178
- const dir = path.join(process.env.CLAUDE_PROJECT_DIR, 'subdir');
179
-
180
- // ✅ 修复
181
- const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.cwd();
182
- if (!process.env.CLAUDE_PROJECT_DIR) {
183
- process.exit(0);
184
- }
185
- const dir = path.join(PROJECT_DIR, 'subdir');
186
- ```
187
-
188
- ### 错误 2: 未捕获异常
189
-
190
- ```javascript
191
- // ❌ 问题代码
192
- function main() {
193
- const data = JSON.parse(fs.readFileSync('data.json')); // 文件不存在会崩溃
194
- }
195
-
196
- // ✅ 修复
197
- function main() {
198
- try {
199
- const data = JSON.parse(fs.readFileSync('data.json') || '{}');
200
- } catch (e) {
201
- // 静默处理
202
- }
203
- }
204
- ```
205
-
206
- ### 错误 3: 输出到 stdout
207
-
208
- ```javascript
209
- // ❌ 问题代码
210
- console.log('Processing...'); // 会出现在用户对话中
211
-
212
- // ✅ 修复
213
- function log(...args) {
214
- if (CONFIG.verbose) {
215
- console.error('[Hook]', ...args); // stderr 不影响对话
216
- }
217
- }
218
- ```
219
-
220
- ### 错误 4: 忘记退出码
221
-
222
- ```javascript
223
- // ❌ 问题代码
224
- main(); // 可能返回非零退出码
225
-
226
- // ✅ 修复
227
- try {
228
- main();
229
- } catch (e) {
230
- // ...
231
- }
232
- process.exit(0); // 始终返回成功
233
- ```
234
-
235
- ---
236
-
237
- ## 📝 Hook 开发检查清单
238
-
239
- 在提交新 hook 前,确保:
240
-
241
- - [ ] **环境变量**: 使用 `|| process.cwd()` 提供 fallback
242
- - [ ] **静默退出**: 非项目环境时 `process.exit(0)`
243
- - [ ] **错误处理**: 所有可能失败的操作都在 try-catch 中
244
- - [ ] **文件操作**: 使用安全函数,目录不存在时自动创建
245
- - [ ] **输出控制**: 调试信息使用 stderr,生产环境静默
246
- - [ ] **退出码**: 始终返回 0,不影响 Claude Code
247
- - [ ] **执行权限**: Shell hooks 有 `chmod +x`
248
- - [ ] **测试**: 在有/无 CLAUDE_PROJECT_DIR 环境下都测试过
249
-
250
- ---
251
-
252
- ## 🔧 调试技巧
253
-
254
- ### 开启调试模式
255
-
256
- ```bash
257
- # 临时开启
258
- VERBOSE=true CLAUDE_PROJECT_DIR=/path/to/project node my-hook.cjs
259
-
260
- # 或修改配置
261
- const CONFIG = {
262
- verbose: true, // 开启调试
263
- };
264
- ```
265
-
266
- ### 查看日志
267
-
268
- ```bash
269
- # 追踪执行
270
- node my-hook.cjs 2>&1 | tee hook-debug.log
271
-
272
- # 检查退出码
273
- node my-hook.cjs; echo "Exit code: $?"
274
- ```
275
-
276
- ### 常用测试命令
277
-
278
- ```bash
279
- # 模拟完整环境
280
- CLAUDE_PROJECT_DIR=$(pwd) \
281
- CLAUDE_TOOL_NAME=Edit \
282
- CLAUDE_TOOL_INPUT="test input" \
283
- node my-hook.cjs
284
-
285
- # 测试错误处理
286
- CLAUDE_PROJECT_DIR="" node my-hook.cjs
287
- ```
288
-
289
- ---
290
-
291
- ## 📚 现有 Hooks 参考
292
-
293
- | Hook | 功能 | 关键技术 |
294
- |------|------|----------|
295
- | `todo-manager.cjs` | 任务管理 | 目录扫描、状态流转 |
296
- | `thinking-silent.cjs` | 对话追踪 | 静默执行、定期同步 |
297
- | `code-formatter.cjs` | 代码格式化 | 文件监听、外部调用 |
298
- | `multi-session.cjs` | 多会话管理 | 会话追踪、状态恢复 |
299
-
300
- ---
301
-
302
- > **维护**: 添加新 hook 时,请基于模板创建并更新本文档
@@ -1,94 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # [Hook Name] - Shell Hook Template
4
- #
5
- # 触发时机: [说明触发时机]
6
- # 环境变量:
7
- # - CLAUDE_PROJECT_DIR: 项目根目录
8
- #
9
- # @version 1.0.0
10
- #
11
-
12
- set -euo pipefail # 严格模式
13
-
14
- # ============================================================
15
- # 标准头部 - 所有 hooks 必须包含
16
- # ============================================================
17
-
18
- # 获取项目目录,提供 fallback
19
- CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
20
-
21
- # 如果不在项目环境中,静默退出
22
- [[ -z "${CLAUDE_PROJECT_DIR:-}" ]] && exit 0
23
-
24
- # ============================================================
25
- # 配置区域
26
- # ============================================================
27
-
28
- VERBOSE="${VERBOSE:-false}"
29
- HOOKS_DIR="$CLAUDE_PROJECT_DIR/.claude/hooks"
30
- DATA_DIR="$HOOKS_DIR/.data"
31
-
32
- # ============================================================
33
- # 工具函数
34
- // ============================================================
35
-
36
- # 安全日志
37
- log() {
38
- if [[ "$VERBOSE" == "true" ]]; then
39
- echo "[Hook] $*" >&2
40
- fi
41
- }
42
-
43
- # 确保目录存在
44
- ensure_dir() {
45
- local dir="$1"
46
- mkdir -p "$dir" 2>/dev/null || true
47
- }
48
-
49
- # 安全读取文件
50
- safe_read() {
51
- local file="$1"
52
- local default="${2:-}"
53
- if [[ -f "$file" ]]; then
54
- cat "$file" 2>/dev/null || echo "$default"
55
- else
56
- echo "$default"
57
- fi
58
- }
59
-
60
- # 安全写入文件
61
- safe_write() {
62
- local file="$1"
63
- local content="$2"
64
- ensure_dir "$(dirname "$file")"
65
- echo "$content" > "$file" 2>/dev/null || true
66
- }
67
-
68
- # ============================================================
69
- # Hook 核心逻辑
70
- # ============================================================
71
-
72
- main() {
73
- # 错误处理:任何错误都静默处理,不影响 Claude Code
74
- {
75
-
76
- log "Project: $CLAUDE_PROJECT_DIR"
77
-
78
- # ===== 在这里实现你的 hook 逻辑 =====
79
-
80
- # 示例: 记录执行时间
81
- local timestamp_file="$DATA_DIR/last-run.txt"
82
- safe_write "$timestamp_file" "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
83
-
84
- # ===== Hook 逻辑结束 =====
85
-
86
- } || true
87
- }
88
-
89
- # ============================================================
90
- # 执行
91
- # ============================================================
92
-
93
- main
94
- exit 0
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * [Hook Name] - UserPromptSubmit Hook Template
4
- *
5
- * 触发时机: 用户每次提交提示时
6
- * 环境变量:
7
- * - CLAUDE_PROJECT_DIR: 项目根目录
8
- * - CLAUDE_TOOL_NAME: 当前调用的工具名
9
- * - CLAUDE_TOOL_INPUT: 工具输入内容
10
- *
11
- * @version 1.0.0
12
- */
13
-
14
- const fs = require('fs');
15
- const path = require('path');
16
-
17
- // ============================================================
18
- // 标准头部 - 所有 hooks 必须包含
19
- // ============================================================
20
-
21
- const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.cwd();
22
-
23
- // 如果不在 Claude Code 环境中运行,静默退出
24
- if (!process.env.CLAUDE_PROJECT_DIR) {
25
- process.exit(0);
26
- }
27
-
28
- // ============================================================
29
- // 配置区域
30
- // ============================================================
31
-
32
- const CONFIG = {
33
- // 你的 hook 配置
34
- enabled: true,
35
- verbose: false, // 设为 true 开启调试输出
36
- };
37
-
38
- // ============================================================
39
- // 工具函数
40
- // ============================================================
41
-
42
- /**
43
- * 安全日志 - 只有 verbose=true 时才输出
44
- */
45
- function log(...args) {
46
- if (CONFIG.verbose) {
47
- console.error('[Hook]', ...args);
48
- }
49
- }
50
-
51
- /**
52
- * 安全读取文件
53
- */
54
- function safeReadFile(filePath, defaultValue = '') {
55
- try {
56
- return fs.readFileSync(filePath, 'utf-8');
57
- } catch (e) {
58
- return defaultValue;
59
- }
60
- }
61
-
62
- /**
63
- * 安全写入文件
64
- */
65
- function safeWriteFile(filePath, content) {
66
- try {
67
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
68
- fs.writeFileSync(filePath, content, 'utf-8');
69
- return true;
70
- } catch (e) {
71
- log('Write error:', e.message);
72
- return false;
73
- }
74
- }
75
-
76
- // ============================================================
77
- // Hook 核心逻辑
78
- // ============================================================
79
-
80
- /**
81
- * 主处理函数
82
- */
83
- function main() {
84
- try {
85
- // 获取环境变量
86
- const toolName = process.env.CLAUDE_TOOL_NAME || '';
87
- const toolInput = process.env.CLAUDE_TOOL_INPUT || '';
88
-
89
- log('Tool:', toolName);
90
- log('Project:', PROJECT_DIR);
91
-
92
- // ===== 在这里实现你的 hook 逻辑 =====
93
-
94
- // 示例: 追踪操作
95
- const trackerFile = path.join(PROJECT_DIR, '.claude/hooks/.tracker.json');
96
- const data = JSON.parse(safeReadFile(trackerFile, '{}'));
97
- data.lastRun = new Date().toISOString();
98
- data.runs = (data.runs || 0) + 1;
99
- safeWriteFile(trackerFile, JSON.stringify(data, null, 2));
100
-
101
- // ===== Hook 逻辑结束 =====
102
-
103
- } catch (error) {
104
- // 静默处理错误,不干扰用户对话
105
- log('Error:', error.message);
106
- }
107
-
108
- // 永远输出成功,不影响 Claude Code 正常运行
109
- process.exit(0);
110
- }
111
-
112
- // ============================================================
113
- // 执行
114
- // ============================================================
115
-
116
- main();
@@ -1,94 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * [Hook Name] - UserResponseSubmit Hook Template
4
- *
5
- * 触发时机: AI 返回响应后
6
- * 环境变量:
7
- * - CLAUDE_PROJECT_DIR: 项目根目录
8
- * - CLAUDE_RESPONSE_CONTENT: 响应内容
9
- *
10
- * @version 1.0.0
11
- */
12
-
13
- const fs = require('fs');
14
- const path = require('path');
15
-
16
- // ============================================================
17
- // 标准头部 - 所有 hooks 必须包含
18
- // ============================================================
19
-
20
- const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.cwd();
21
-
22
- // 如果不在 Claude Code 环境中运行,静默退出
23
- if (!process.env.CLAUDE_PROJECT_DIR) {
24
- process.exit(0);
25
- }
26
-
27
- // ============================================================
28
- // 配置区域
29
- // ============================================================
30
-
31
- const CONFIG = {
32
- enabled: true,
33
- verbose: false,
34
- };
35
-
36
- // ============================================================
37
- // 工具函数
38
- // ============================================================
39
-
40
- function log(...args) {
41
- if (CONFIG.verbose) {
42
- console.error('[Hook]', ...args);
43
- }
44
- }
45
-
46
- function safeReadFile(filePath, defaultValue = '') {
47
- try {
48
- return fs.readFileSync(filePath, 'utf-8');
49
- } catch (e) {
50
- return defaultValue;
51
- }
52
- }
53
-
54
- function safeWriteFile(filePath, content) {
55
- try {
56
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
57
- fs.writeFileSync(filePath, content, 'utf-8');
58
- return true;
59
- } catch (e) {
60
- log('Write error:', e.message);
61
- return false;
62
- }
63
- }
64
-
65
- // ============================================================
66
- // Hook 核心逻辑
67
- // ============================================================
68
-
69
- function main() {
70
- try {
71
- const responseContent = process.env.CLAUDE_RESPONSE_CONTENT || '';
72
-
73
- log('Response length:', responseContent.length);
74
-
75
- // ===== 在这里实现你的 hook 逻辑 =====
76
-
77
- // 示例: 记录响应统计
78
- const statsFile = path.join(PROJECT_DIR, '.claude/hooks/.response-stats.json');
79
- const stats = JSON.parse(safeReadFile(statsFile, '{}'));
80
- stats.totalResponses = (stats.totalResponses || 0) + 1;
81
- stats.totalChars = (stats.totalChars || 0) + responseContent.length;
82
- stats.lastUpdate = new Date().toISOString();
83
- safeWriteFile(statsFile, JSON.stringify(stats, null, 2));
84
-
85
- // ===== Hook 逻辑结束 =====
86
-
87
- } catch (error) {
88
- log('Error:', error.message);
89
- }
90
-
91
- process.exit(0);
92
- }
93
-
94
- main();