@uxcontinuum/ccaudit 1.0.0 → 1.0.1
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.
- package/index.js +28 -7
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -145,6 +145,10 @@ function inspectClaudeDir(claudeDir) {
|
|
|
145
145
|
preToolUseHooks: 0,
|
|
146
146
|
postToolUseHooks: 0,
|
|
147
147
|
userPromptSubmitHooks: 0,
|
|
148
|
+
stopHooks: 0,
|
|
149
|
+
subagentStopHooks: 0,
|
|
150
|
+
notificationHooks: 0,
|
|
151
|
+
autoMemoryEnabled: false,
|
|
148
152
|
hookFiles: [],
|
|
149
153
|
hasClaudeMd: false,
|
|
150
154
|
claudeMdBytes: 0,
|
|
@@ -163,6 +167,10 @@ function inspectClaudeDir(claudeDir) {
|
|
|
163
167
|
out.preToolUseHooks = count(hooks.PreToolUse);
|
|
164
168
|
out.postToolUseHooks = count(hooks.PostToolUse);
|
|
165
169
|
out.userPromptSubmitHooks = count(hooks.UserPromptSubmit);
|
|
170
|
+
out.stopHooks = count(hooks.Stop);
|
|
171
|
+
out.subagentStopHooks = count(hooks.SubagentStop);
|
|
172
|
+
out.notificationHooks = count(hooks.Notification);
|
|
173
|
+
out.autoMemoryEnabled = s.autoMemoryEnabled === true;
|
|
166
174
|
} catch (_) {}
|
|
167
175
|
}
|
|
168
176
|
} catch (_) {}
|
|
@@ -275,20 +283,33 @@ function grade(stats, setup) {
|
|
|
275
283
|
const agent = stats.agent || {};
|
|
276
284
|
|
|
277
285
|
// 1. Hook coverage. Lives at the setup layer, applies to everyone.
|
|
278
|
-
const hookSignals =
|
|
286
|
+
const hookSignals =
|
|
287
|
+
setup.preToolUseHooks + setup.postToolUseHooks + setup.userPromptSubmitHooks +
|
|
288
|
+
setup.stopHooks + setup.subagentStopHooks + setup.notificationHooks;
|
|
279
289
|
let hookScore;
|
|
280
290
|
if (hookSignals === 0) hookScore = 35;
|
|
281
|
-
else if (hookSignals === 1) hookScore =
|
|
291
|
+
else if (hookSignals === 1) hookScore = 68;
|
|
282
292
|
else if (hookSignals === 2) hookScore = 82;
|
|
283
|
-
else
|
|
293
|
+
else if (hookSignals === 3) hookScore = 90;
|
|
294
|
+
else hookScore = Math.min(100, 92 + hookSignals);
|
|
295
|
+
if (setup.autoMemoryEnabled) hookScore = Math.min(100, hookScore + 3);
|
|
296
|
+
const hookBreakdown = [
|
|
297
|
+
setup.preToolUseHooks ? `${setup.preToolUseHooks} PreToolUse` : null,
|
|
298
|
+
setup.postToolUseHooks ? `${setup.postToolUseHooks} PostToolUse` : null,
|
|
299
|
+
setup.userPromptSubmitHooks ? `${setup.userPromptSubmitHooks} UserPromptSubmit` : null,
|
|
300
|
+
setup.stopHooks ? `${setup.stopHooks} Stop` : null,
|
|
301
|
+
setup.subagentStopHooks ? `${setup.subagentStopHooks} SubagentStop` : null,
|
|
302
|
+
setup.notificationHooks ? `${setup.notificationHooks} Notification` : null,
|
|
303
|
+
setup.autoMemoryEnabled ? 'autoMemory plugin' : null,
|
|
304
|
+
].filter(Boolean).join(', ');
|
|
284
305
|
dims.push({
|
|
285
306
|
name: 'Hook coverage',
|
|
286
307
|
score: hookScore,
|
|
287
308
|
detail: hookSignals === 0
|
|
288
|
-
? 'No
|
|
289
|
-
: `${
|
|
309
|
+
? 'No hooks installed across any event. Anything could happen overnight.'
|
|
310
|
+
: `${hookBreakdown}.`,
|
|
290
311
|
fix: hookSignals === 0
|
|
291
|
-
? 'Install claude-loop-sentinel for runaway-loop protection:
|
|
312
|
+
? 'Install claude-loop-sentinel for runaway-loop protection: https://github.com/turleydesigns/claude-loop-sentinel'
|
|
292
313
|
: null,
|
|
293
314
|
});
|
|
294
315
|
|
|
@@ -403,7 +424,7 @@ function renderCard(stats, setup, graded) {
|
|
|
403
424
|
if (stats.agent) {
|
|
404
425
|
pr(` ${C.dim}Agent sessions:${C.reset} ${stats.agent.sessions} sessions, ${(stats.agent.outputTokens / 1e6).toFixed(2)}M output tokens`);
|
|
405
426
|
}
|
|
406
|
-
pr(` ${C.dim}Hooks installed:${C.reset} ${setup.preToolUseHooks + setup.postToolUseHooks + setup.userPromptSubmitHooks} (${setup.hookFiles.length} hook file(s) in ~/.claude/hooks/)`);
|
|
427
|
+
pr(` ${C.dim}Hooks installed:${C.reset} ${setup.preToolUseHooks + setup.postToolUseHooks + setup.userPromptSubmitHooks + setup.stopHooks + setup.subagentStopHooks + setup.notificationHooks} across all event types (${setup.hookFiles.length} hook file(s) in ~/.claude/hooks/)`);
|
|
407
428
|
pr(` ${C.dim}CLAUDE.md:${C.reset} ${setup.hasClaudeMd ? `${setup.claudeMdBytes} bytes` : 'not found'}`);
|
|
408
429
|
pr(` ${C.dim}Skills installed:${C.reset} ${setup.skillCount}`);
|
|
409
430
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxcontinuum/ccaudit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "A diagnostic for your Claude Code setup. Reads ~/.claude/ locally, grades you across hook coverage, project hygiene, tool balance, prompt tells, and pipeline ops. Zero install: npx @uxcontinuum/ccaudit",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|