Commit a46fdf2
feat: tiered hook installation — local, global, plugin
Refactor `clens init` to support three installation tiers so hooks no
longer pollute the project's `.claude/settings.json`. Default tier writes
to `.claude/settings.local.json` (gitignored by convention), `--global`
writes to `~/.claude/settings.json`, and `clens init plugin` now installs
both analysis tools and capture hooks in one command.
- Add InitTarget type and resolveInitPaths for multi-tier path resolution
- Default init writes to settings.local.json instead of settings.json
- Add --global flag for user-level hook installation
- Add legacy detection with migration guidance
- Refactor uninit for multi-tier removal (local, global, legacy)
- Update renderStatus to show all tiers with deduplication warnings
- Create agentic/hooks/hooks.json with all 17 hook events
- Enhance installPlugin to merge capture hooks into user settings
- Enhance uninstallPlugin to remove capture hooks from user settings
- Add type guards replacing unsafe `as` casts on untrusted data
- Add try/catch to readSettingsFile for malformed JSON resilience
- 1137 tests (51 new), 0 failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent 44e3141 commit a46fdf2
9 files changed
Lines changed: 1028 additions & 113 deletions
File tree
- agentic/hooks
- src
- commands
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
5 | 29 | | |
6 | 30 | | |
7 | 31 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
195 | 195 | | |
196 | 196 | | |
197 | 197 | | |
198 | | - | |
| 198 | + | |
199 | 199 | | |
200 | 200 | | |
201 | 201 | | |
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
249 | | - | |
250 | | - | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
251 | 253 | | |
252 | 254 | | |
253 | 255 | | |
| |||
277 | 279 | | |
278 | 280 | | |
279 | 281 | | |
| 282 | + | |
| 283 | + | |
280 | 284 | | |
281 | 285 | | |
282 | 286 | | |
283 | 287 | | |
284 | | - | |
| 288 | + | |
| 289 | + | |
285 | 290 | | |
286 | 291 | | |
287 | 292 | | |
| |||
310 | 315 | | |
311 | 316 | | |
312 | 317 | | |
| 318 | + | |
| 319 | + | |
313 | 320 | | |
314 | 321 | | |
315 | 322 | | |
| |||
0 commit comments