@buoy-design/cli 0.3.35 → 0.3.37

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 (26) hide show
  1. package/dist/commands/check.js.sync-conflict-20260313-114446-6PCZ3ZU.map +1 -0
  2. package/dist/commands/dock.js.sync-conflict-20260313-172700-6PCZ3ZU.map +1 -0
  3. package/dist/commands/show.d.ts.map +1 -1
  4. package/dist/commands/show.js +131 -12
  5. package/dist/commands/show.js.map +1 -1
  6. package/dist/config/loader.d.ts.sync-conflict-20260313-145931-6PCZ3ZU.map +1 -0
  7. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts +1812 -0
  8. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts.map +1 -0
  9. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js +214 -0
  10. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js.map +1 -0
  11. package/dist/detect/frameworks.sync-conflict-20260313-150557-6PCZ3ZU.js +252 -0
  12. package/dist/detect/monorepo-patterns.sync-conflict-20260311-182757-6PCZ3ZU.js +209 -0
  13. package/dist/hooks/index.sync-conflict-20260311-082258-6PCZ3ZU.js +616 -0
  14. package/dist/output/reporters.js.sync-conflict-20260313-164629-6PCZ3ZU.map +1 -0
  15. package/dist/services/drift-analysis.d.ts +2 -0
  16. package/dist/services/drift-analysis.d.ts.map +1 -1
  17. package/dist/services/drift-analysis.js +68 -1
  18. package/dist/services/drift-analysis.js.map +1 -1
  19. package/dist/services/drift-analysis.js.sync-conflict-20260313-152307-6PCZ3ZU.map +1 -0
  20. package/dist/services/remote-check.d.ts +4 -0
  21. package/dist/services/remote-check.d.ts.map +1 -1
  22. package/dist/services/remote-check.js +15 -1
  23. package/dist/services/remote-check.js.map +1 -1
  24. package/dist/services/skill-export.js.sync-conflict-20260313-155735-6PCZ3ZU.map +1 -0
  25. package/dist/services/skill-export.sync-conflict-20260313-161246-6PCZ3ZU.js +737 -0
  26. package/package.json +3 -3
@@ -0,0 +1,616 @@
1
+ // apps/cli/src/hooks/index.ts
2
+ import { existsSync, mkdirSync, writeFileSync, chmodSync, readFileSync, } from "fs";
3
+ import { resolve } from "path";
4
+ /**
5
+ * Pre-commit hook script content
6
+ */
7
+ const PRE_COMMIT_HOOK = `#!/bin/sh
8
+ # Buoy pre-commit hook
9
+ # Auto-generated by 'buoy dock --hooks'
10
+ # See: https://buoy.dev/docs/pre-commit
11
+
12
+ # Run buoy drift check on staged files
13
+ buoy drift check --staged --fail-on critical
14
+
15
+ # If buoy drift check fails, prevent the commit
16
+ if [ $? -ne 0 ]; then
17
+ echo ""
18
+ echo "Commit blocked by buoy. Fix drift issues or use --no-verify to bypass."
19
+ exit 1
20
+ fi
21
+ `;
22
+ /**
23
+ * Husky pre-commit hook content (for .husky/pre-commit)
24
+ */
25
+ const HUSKY_PRE_COMMIT_HOOK = `#!/usr/bin/env sh
26
+ . "$(dirname -- "$0")/_/husky.sh"
27
+
28
+ # Run buoy drift check on staged files
29
+ npx buoy drift check --staged --fail-on critical
30
+ `;
31
+ /**
32
+ * lint-staged configuration for package.json
33
+ */
34
+ export const LINT_STAGED_CONFIG = {
35
+ "*.{tsx,jsx,ts,js,vue,svelte}": ["buoy drift check --staged --fail-on critical"],
36
+ };
37
+ /**
38
+ * Pre-commit config YAML content
39
+ */
40
+ const PRE_COMMIT_CONFIG_YAML = `# .pre-commit-config.yaml
41
+ # See: https://pre-commit.com/
42
+
43
+ repos:
44
+ - repo: local
45
+ hooks:
46
+ - id: buoy
47
+ name: buoy show drift
48
+ entry: buoy drift check --staged --fail-on critical
49
+ language: system
50
+ types: [file]
51
+ files: \\.(tsx|jsx|ts|js|vue|svelte)$
52
+ `;
53
+ /**
54
+ * Detect which hook system is in use
55
+ */
56
+ export function detectHookSystem(projectRoot) {
57
+ // Check for Husky
58
+ if (existsSync(resolve(projectRoot, ".husky"))) {
59
+ return "husky";
60
+ }
61
+ // Check for pre-commit
62
+ if (existsSync(resolve(projectRoot, ".pre-commit-config.yaml"))) {
63
+ return "pre-commit";
64
+ }
65
+ // Check for lint-staged in package.json
66
+ const pkgPath = resolve(projectRoot, "package.json");
67
+ if (existsSync(pkgPath)) {
68
+ try {
69
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
70
+ if (pkg["lint-staged"]) {
71
+ return "lint-staged";
72
+ }
73
+ }
74
+ catch {
75
+ // Ignore parse errors
76
+ }
77
+ }
78
+ // Check for .git directory (can use raw git hooks)
79
+ if (existsSync(resolve(projectRoot, ".git"))) {
80
+ return "git";
81
+ }
82
+ return null;
83
+ }
84
+ /**
85
+ * Setup pre-commit hooks for the project
86
+ */
87
+ export function setupHooks(projectRoot) {
88
+ const hookSystem = detectHookSystem(projectRoot);
89
+ if (!hookSystem) {
90
+ return {
91
+ success: false,
92
+ hookSystem: null,
93
+ message: "No git repository found. Run 'git init' first.",
94
+ };
95
+ }
96
+ switch (hookSystem) {
97
+ case "husky":
98
+ return setupHuskyHook(projectRoot);
99
+ case "pre-commit":
100
+ return setupPreCommitConfig(projectRoot);
101
+ case "lint-staged":
102
+ return setupLintStaged(projectRoot);
103
+ case "git":
104
+ return setupGitHook(projectRoot);
105
+ default:
106
+ return {
107
+ success: false,
108
+ hookSystem,
109
+ message: `Unsupported hook system: ${hookSystem}`,
110
+ };
111
+ }
112
+ }
113
+ /**
114
+ * Setup raw git pre-commit hook
115
+ */
116
+ function setupGitHook(projectRoot) {
117
+ const hooksDir = resolve(projectRoot, ".git", "hooks");
118
+ const hookPath = resolve(hooksDir, "pre-commit");
119
+ // Ensure hooks directory exists
120
+ if (!existsSync(hooksDir)) {
121
+ mkdirSync(hooksDir, { recursive: true });
122
+ }
123
+ // Check if hook already exists
124
+ if (existsSync(hookPath)) {
125
+ const existing = readFileSync(hookPath, "utf-8");
126
+ if (existing.includes("buoy drift check") || existing.includes("buoy check")) {
127
+ return {
128
+ success: true,
129
+ hookSystem: "git",
130
+ message: "Buoy hook already configured in .git/hooks/pre-commit",
131
+ filePath: hookPath,
132
+ };
133
+ }
134
+ // Append to existing hook
135
+ const updated = existing +
136
+ "\n\n# Added by buoy dock --hooks\n" +
137
+ PRE_COMMIT_HOOK.split("\n").slice(4).join("\n");
138
+ writeFileSync(hookPath, updated);
139
+ return {
140
+ success: true,
141
+ hookSystem: "git",
142
+ message: "Added buoy drift check to existing .git/hooks/pre-commit",
143
+ filePath: hookPath,
144
+ };
145
+ }
146
+ // Write new hook
147
+ writeFileSync(hookPath, PRE_COMMIT_HOOK);
148
+ chmodSync(hookPath, 0o755);
149
+ return {
150
+ success: true,
151
+ hookSystem: "git",
152
+ message: "Created .git/hooks/pre-commit",
153
+ filePath: hookPath,
154
+ };
155
+ }
156
+ /**
157
+ * Setup Husky pre-commit hook
158
+ */
159
+ function setupHuskyHook(projectRoot) {
160
+ const huskyDir = resolve(projectRoot, ".husky");
161
+ const hookPath = resolve(huskyDir, "pre-commit");
162
+ // Check if hook already exists
163
+ if (existsSync(hookPath)) {
164
+ const existing = readFileSync(hookPath, "utf-8");
165
+ if (existing.includes("buoy drift check") || existing.includes("buoy check")) {
166
+ return {
167
+ success: true,
168
+ hookSystem: "husky",
169
+ message: "Buoy hook already configured in .husky/pre-commit",
170
+ filePath: hookPath,
171
+ };
172
+ }
173
+ // Append buoy drift check to existing hook
174
+ const updated = existing.trimEnd() +
175
+ "\n\n# Added by buoy dock --hooks\nnpx buoy drift check --staged --fail-on critical\n";
176
+ writeFileSync(hookPath, updated);
177
+ return {
178
+ success: true,
179
+ hookSystem: "husky",
180
+ message: "Added buoy drift check to existing .husky/pre-commit",
181
+ filePath: hookPath,
182
+ };
183
+ }
184
+ // Create new Husky hook
185
+ writeFileSync(hookPath, HUSKY_PRE_COMMIT_HOOK);
186
+ chmodSync(hookPath, 0o755);
187
+ return {
188
+ success: true,
189
+ hookSystem: "husky",
190
+ message: "Created .husky/pre-commit",
191
+ filePath: hookPath,
192
+ };
193
+ }
194
+ /**
195
+ * Setup pre-commit framework config
196
+ */
197
+ function setupPreCommitConfig(projectRoot) {
198
+ const configPath = resolve(projectRoot, ".pre-commit-config.yaml");
199
+ if (existsSync(configPath)) {
200
+ const existing = readFileSync(configPath, "utf-8");
201
+ if (existing.includes("buoy")) {
202
+ return {
203
+ success: true,
204
+ hookSystem: "pre-commit",
205
+ message: "Buoy hook already configured in .pre-commit-config.yaml",
206
+ filePath: configPath,
207
+ };
208
+ }
209
+ // Need to append to existing config - provide instructions
210
+ return {
211
+ success: false,
212
+ hookSystem: "pre-commit",
213
+ message: `Add buoy hook to your .pre-commit-config.yaml:\n\n - repo: local\n hooks:\n - id: buoy\n name: buoy show drift\n entry: buoy drift check --staged --fail-on critical\n language: system\n types: [file]\n files: \\.(tsx|jsx|ts|js|vue|svelte)$`,
214
+ filePath: configPath,
215
+ };
216
+ }
217
+ // Create new pre-commit config
218
+ writeFileSync(configPath, PRE_COMMIT_CONFIG_YAML);
219
+ return {
220
+ success: true,
221
+ hookSystem: "pre-commit",
222
+ message: "Created .pre-commit-config.yaml",
223
+ filePath: configPath,
224
+ };
225
+ }
226
+ /**
227
+ * Setup lint-staged configuration
228
+ */
229
+ function setupLintStaged(projectRoot) {
230
+ const pkgPath = resolve(projectRoot, "package.json");
231
+ try {
232
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
233
+ const lintStaged = pkg["lint-staged"] || {};
234
+ // Check if buoy is already configured
235
+ const hasbuoy = Object.values(lintStaged).some((commands) => Array.isArray(commands) &&
236
+ commands.some((cmd) => cmd.includes("buoy")));
237
+ if (hasbuoy) {
238
+ return {
239
+ success: true,
240
+ hookSystem: "lint-staged",
241
+ message: "Buoy already configured in lint-staged",
242
+ filePath: pkgPath,
243
+ };
244
+ }
245
+ // Provide instructions for lint-staged
246
+ return {
247
+ success: false,
248
+ hookSystem: "lint-staged",
249
+ message: `Add buoy to your lint-staged config in package.json:\n\n"lint-staged": {\n "*.{tsx,jsx,ts,js,vue,svelte}": ["buoy drift check --staged --fail-on critical"]\n}`,
250
+ filePath: pkgPath,
251
+ };
252
+ }
253
+ catch {
254
+ return {
255
+ success: false,
256
+ hookSystem: "lint-staged",
257
+ message: "Failed to read package.json",
258
+ filePath: pkgPath,
259
+ };
260
+ }
261
+ }
262
+ /**
263
+ * Generate a standalone pre-commit hook script for .buoy/hooks/
264
+ */
265
+ export function generateStandaloneHook(projectRoot) {
266
+ const buoyDir = resolve(projectRoot, ".buoy");
267
+ const hooksDir = resolve(buoyDir, "hooks");
268
+ const hookPath = resolve(hooksDir, "pre-commit");
269
+ // Create directories
270
+ if (!existsSync(hooksDir)) {
271
+ mkdirSync(hooksDir, { recursive: true });
272
+ }
273
+ // Write hook script
274
+ writeFileSync(hookPath, PRE_COMMIT_HOOK);
275
+ chmodSync(hookPath, 0o755);
276
+ return {
277
+ success: true,
278
+ hookSystem: "git",
279
+ message: "Created .buoy/hooks/pre-commit",
280
+ filePath: hookPath,
281
+ };
282
+ }
283
+ /**
284
+ * Generate Claude Code hooks configuration for design system awareness
285
+ * - SessionStart: Injects condensed design system context
286
+ * - PostToolUse: Self-validating drift check on file modifications
287
+ *
288
+ * Uses cross-platform Node.js command instead of `cat` for Windows compatibility
289
+ *
290
+ * @see https://code.claude.com/docs/en/hooks
291
+ */
292
+ export function generateClaudeHooksConfig() {
293
+ // Cross-platform command that works on Windows, macOS, and Linux
294
+ const crossPlatformRead = `node -e "const fs=require('fs');const p='.claude/buoy-context.md';fs.existsSync(p)?console.log(fs.readFileSync(p,'utf8')):console.log('🛟 Design system active. Run buoy dock agents to set up context.')"`;
295
+ // Self-validating hook: runs buoy drift check and returns structured feedback
296
+ // Uses the validation script which:
297
+ // 1. Parses stdin JSON to get the modified file path
298
+ // 2. Runs buoy drift check and filters to issues in that file
299
+ // 3. Returns JSON with additionalContext for Claude to self-correct
300
+ const selfValidateCommand = `node "$CLAUDE_PROJECT_DIR/.claude/hooks/buoy-validate.js"`;
301
+ return {
302
+ hooks: {
303
+ SessionStart: [
304
+ {
305
+ hooks: [
306
+ {
307
+ type: "command",
308
+ command: crossPlatformRead,
309
+ },
310
+ ],
311
+ },
312
+ ],
313
+ PostToolUse: [
314
+ {
315
+ matcher: "Edit",
316
+ hooks: [
317
+ {
318
+ type: "command",
319
+ command: selfValidateCommand,
320
+ },
321
+ ],
322
+ },
323
+ {
324
+ matcher: "Write",
325
+ hooks: [
326
+ {
327
+ type: "command",
328
+ command: selfValidateCommand,
329
+ },
330
+ ],
331
+ },
332
+ ],
333
+ },
334
+ };
335
+ }
336
+ /**
337
+ * Get the self-validating hook script content
338
+ * This script:
339
+ * 1. Parses stdin JSON to get the modified file path
340
+ * 2. Runs buoy drift check and filters to issues in that file
341
+ * 3. Returns JSON with additionalContext for Claude to self-correct
342
+ */
343
+ function getValidationScript() {
344
+ return `#!/usr/bin/env node
345
+ /**
346
+ * Buoy PostToolUse Hook - Self-Validating Agent
347
+ *
348
+ * Runs after Edit/Write tool completes to check for design drift.
349
+ * Returns structured feedback that Claude can use to self-correct.
350
+ *
351
+ * @see https://code.claude.com/docs/en/hooks
352
+ */
353
+
354
+ import { spawnSync } from 'child_process';
355
+ import { readFileSync, unlinkSync } from 'fs';
356
+ import path from 'path';
357
+ import { tmpdir } from 'os';
358
+
359
+ // Read hook input from stdin
360
+ let inputData = '';
361
+ process.stdin.setEncoding('utf8');
362
+
363
+ process.stdin.on('data', (chunk) => {
364
+ inputData += chunk;
365
+ });
366
+
367
+ process.stdin.on('end', () => {
368
+ try {
369
+ const input = JSON.parse(inputData);
370
+ const result = validateFile(input);
371
+
372
+ if (result) {
373
+ console.log(JSON.stringify(result));
374
+ }
375
+
376
+ // Always exit 0 - we want to provide feedback, not block
377
+ process.exit(0);
378
+ } catch (err) {
379
+ // Silent failure - don't interrupt Claude's work
380
+ process.exit(0);
381
+ }
382
+ });
383
+
384
+ /**
385
+ * Check if a file is a UI component file we should validate
386
+ */
387
+ function isUIFile(filePath) {
388
+ if (!filePath) return false;
389
+
390
+ const uiExtensions = [
391
+ '.tsx', '.jsx', '.vue', '.svelte',
392
+ '.component.ts', '.component.html'
393
+ ];
394
+
395
+ const excludePatterns = [
396
+ /\\.test\\./,
397
+ /\\.spec\\./,
398
+ /\\.stories\\./,
399
+ /node_modules/,
400
+ /\\.d\\.ts$/,
401
+ /\\.config\\./
402
+ ];
403
+
404
+ const isUIExt = uiExtensions.some(e => filePath.endsWith(e));
405
+ const isExcluded = excludePatterns.some(p => p.test(filePath));
406
+
407
+ return isUIExt && !isExcluded;
408
+ }
409
+
410
+ /**
411
+ * Validate a file for design drift
412
+ */
413
+ function validateFile(input) {
414
+ const toolInput = input.tool_input || {};
415
+ const filePath = toolInput.file_path;
416
+
417
+ // Only validate UI files
418
+ if (!isUIFile(filePath)) {
419
+ return null;
420
+ }
421
+
422
+ try {
423
+ // Run buoy drift check with JSON format via temp file to avoid Node.js pipe buffer limits
424
+ const tempFile = path.join(tmpdir(), \\\`buoy-check-\\\${process.pid}.json\\\`);
425
+ const result = spawnSync('sh', ['-c', \\\`npx buoy drift check --format json > "\\\${tempFile}" 2>/dev/null\\\`], {
426
+ cwd: input.cwd || process.cwd(),
427
+ timeout: 30000,
428
+ shell: false
429
+ });
430
+
431
+ if (result.error) {
432
+ return null;
433
+ }
434
+
435
+ let output;
436
+ try {
437
+ output = readFileSync(tempFile, 'utf8');
438
+ unlinkSync(tempFile);
439
+ } catch (e) {
440
+ return null;
441
+ }
442
+
443
+ const checkResult = JSON.parse(output);
444
+
445
+ // Filter to only issues in the modified file
446
+ const fileIssues = (checkResult.issues || checkResult.drifts || []).filter(
447
+ issue => {
448
+ // Extract path from source.location (format: "path/to/file.tsx:123")
449
+ const location = issue.source?.location || '';
450
+ const issuePath = location.split(':')[0] || issue.file || issue.source?.path;
451
+ return issuePath === filePath || filePath.endsWith(issuePath) || issuePath?.endsWith(path.basename(filePath));
452
+ }
453
+ );
454
+
455
+ if (fileIssues.length === 0) {
456
+ return null; // No issues, no feedback needed
457
+ }
458
+
459
+ // Format feedback for Claude
460
+ const feedback = formatFeedback(filePath, fileIssues);
461
+
462
+ return {
463
+ hookSpecificOutput: {
464
+ hookEventName: "PostToolUse",
465
+ additionalContext: feedback
466
+ }
467
+ };
468
+
469
+ } catch (err) {
470
+ // buoy drift check failed or not installed - silent failure
471
+ return null;
472
+ }
473
+ }
474
+
475
+ /**
476
+ * Format drift issues as actionable feedback for Claude
477
+ */
478
+ function formatFeedback(filePath, issues) {
479
+ const lines = [
480
+ '⚠️ Design drift detected in ' + path.basename(filePath) + ':',
481
+ ''
482
+ ];
483
+
484
+ for (const issue of issues.slice(0, 5)) { // Limit to 5 issues
485
+ const type = issue.type || issue.driftType || 'drift';
486
+ const msg = issue.message || issue.description || 'Design system violation';
487
+ lines.push('• ' + type + ': ' + msg);
488
+
489
+ if (issue.suggestion || issue.fix) {
490
+ lines.push(' Fix: ' + (issue.suggestion || issue.fix));
491
+ }
492
+ lines.push('');
493
+ }
494
+
495
+ if (issues.length > 5) {
496
+ lines.push('... and ' + (issues.length - 5) + ' more issues');
497
+ lines.push('');
498
+ }
499
+
500
+ lines.push('Run \\\`buoy show drift\\\` for full details.');
501
+
502
+ return lines.join('\\n');
503
+ }
504
+ `;
505
+ }
506
+ /**
507
+ * Validate that a parsed JSON object has valid Claude settings structure
508
+ */
509
+ function isValidClaudeSettings(obj) {
510
+ if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
511
+ return false;
512
+ }
513
+ const settings = obj;
514
+ // If hooks exists, it must be an object
515
+ if ('hooks' in settings && (typeof settings.hooks !== 'object' || settings.hooks === null || Array.isArray(settings.hooks))) {
516
+ return false;
517
+ }
518
+ return true;
519
+ }
520
+ /**
521
+ * Setup Claude Code hooks for the project
522
+ */
523
+ export function setupClaudeHooks(projectRoot) {
524
+ const claudeDir = resolve(projectRoot, ".claude");
525
+ const hooksDir = resolve(claudeDir, "hooks");
526
+ const settingsPath = resolve(claudeDir, "settings.local.json");
527
+ // Ensure .claude/hooks directory exists
528
+ if (!existsSync(hooksDir)) {
529
+ mkdirSync(hooksDir, { recursive: true });
530
+ }
531
+ // Install the validation script
532
+ const validateScriptPath = resolve(hooksDir, "buoy-validate.js");
533
+ if (!existsSync(validateScriptPath)) {
534
+ const scriptContent = getValidationScript();
535
+ writeFileSync(validateScriptPath, scriptContent);
536
+ chmodSync(validateScriptPath, 0o755);
537
+ }
538
+ // Check if .claude directory exists
539
+ if (!existsSync(claudeDir)) {
540
+ mkdirSync(claudeDir, { recursive: true });
541
+ }
542
+ // Check if settings.local.json already exists
543
+ if (existsSync(settingsPath)) {
544
+ try {
545
+ const parsed = JSON.parse(readFileSync(settingsPath, "utf-8"));
546
+ // Validate structure before merging
547
+ if (!isValidClaudeSettings(parsed)) {
548
+ return {
549
+ success: false,
550
+ message: "Invalid structure in .claude/settings.local.json - expected object with optional hooks property",
551
+ filePath: settingsPath,
552
+ created: false,
553
+ };
554
+ }
555
+ const existing = parsed;
556
+ // Check if hooks are already configured
557
+ const hooks = existing.hooks;
558
+ const hasbuoyHook = hooks?.SessionStart?.some((h) => {
559
+ const hook = h;
560
+ return hook.hooks?.some((hk) => hk.command?.includes("buoy") || hk.command?.includes("Design system"));
561
+ }) ||
562
+ hooks?.PostToolUse?.some((h) => {
563
+ const hook = h;
564
+ return hook.hooks?.some((hk) => hk.command?.includes("buoy"));
565
+ });
566
+ if (hasbuoyHook) {
567
+ return {
568
+ success: true,
569
+ message: "Buoy hooks already configured in .claude/settings.local.json",
570
+ filePath: settingsPath,
571
+ created: false,
572
+ };
573
+ }
574
+ // Merge with existing config
575
+ const buoyConfig = generateClaudeHooksConfig();
576
+ existing.hooks = existing.hooks || {};
577
+ const existingHooks = existing.hooks;
578
+ existingHooks.SessionStart = [
579
+ ...(existingHooks.SessionStart || []),
580
+ ...buoyConfig.hooks.SessionStart,
581
+ ];
582
+ existingHooks.PostToolUse = [
583
+ ...(existingHooks.PostToolUse || []),
584
+ ...buoyConfig.hooks.PostToolUse,
585
+ ];
586
+ writeFileSync(settingsPath, JSON.stringify(existing, null, 2) + "\n");
587
+ return {
588
+ success: true,
589
+ message: "Added Buoy hooks to existing .claude/settings.local.json",
590
+ filePath: settingsPath,
591
+ created: false,
592
+ };
593
+ }
594
+ catch (err) {
595
+ const message = err instanceof SyntaxError
596
+ ? "Invalid JSON in .claude/settings.local.json"
597
+ : "Failed to read .claude/settings.local.json";
598
+ return {
599
+ success: false,
600
+ message,
601
+ filePath: settingsPath,
602
+ created: false,
603
+ };
604
+ }
605
+ }
606
+ // Create new settings file
607
+ const config = generateClaudeHooksConfig();
608
+ writeFileSync(settingsPath, JSON.stringify(config, null, 2) + "\n");
609
+ return {
610
+ success: true,
611
+ message: "Created .claude/settings.local.json with Buoy hooks",
612
+ filePath: settingsPath,
613
+ created: true,
614
+ };
615
+ }
616
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporters.js","sourceRoot":"","sources":["../../src/output/reporters.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,8 @@ export interface DriftAnalysisResult {
33
33
  drifts: DriftSignal[];
34
34
  /** Components that were scanned */
35
35
  components: Component[];
36
+ /** Number of tokens found during scan */
37
+ tokenCount: number;
36
38
  /** Number of drifts filtered out by ignore list */
37
39
  ignoredCount: number;
38
40
  /** Summary counts by severity */
@@ -1 +1 @@
1
- {"version":3,"file":"drift-analysis.d.ts","sourceRoot":"","sources":["../../src/services/drift-analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drift-analysis.d.ts","sourceRoot":"","sources":["../../src/services/drift-analysis.ts"],"names":[],"mappings":"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"}