@buoy-design/cli 0.1.0 → 0.1.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 (146) hide show
  1. package/dist/commands/audit.d.ts +3 -0
  2. package/dist/commands/audit.d.ts.map +1 -0
  3. package/dist/commands/audit.js +235 -0
  4. package/dist/commands/audit.js.map +1 -0
  5. package/dist/commands/baseline.d.ts +39 -0
  6. package/dist/commands/baseline.d.ts.map +1 -0
  7. package/dist/commands/baseline.js +298 -0
  8. package/dist/commands/baseline.js.map +1 -0
  9. package/dist/commands/check.d.ts +16 -0
  10. package/dist/commands/check.d.ts.map +1 -0
  11. package/dist/commands/check.js +168 -0
  12. package/dist/commands/check.js.map +1 -0
  13. package/dist/commands/ci.d.ts +2 -2
  14. package/dist/commands/ci.d.ts.map +1 -1
  15. package/dist/commands/ci.js +124 -142
  16. package/dist/commands/ci.js.map +1 -1
  17. package/dist/commands/compare.d.ts +3 -0
  18. package/dist/commands/compare.d.ts.map +1 -0
  19. package/dist/commands/compare.js +170 -0
  20. package/dist/commands/compare.js.map +1 -0
  21. package/dist/commands/drift.d.ts +1 -1
  22. package/dist/commands/drift.d.ts.map +1 -1
  23. package/dist/commands/drift.js +79 -121
  24. package/dist/commands/drift.js.map +1 -1
  25. package/dist/commands/explain.d.ts +3 -0
  26. package/dist/commands/explain.d.ts.map +1 -0
  27. package/dist/commands/explain.js +212 -0
  28. package/dist/commands/explain.js.map +1 -0
  29. package/dist/commands/graph.d.ts +3 -0
  30. package/dist/commands/graph.d.ts.map +1 -0
  31. package/dist/commands/graph.js +430 -0
  32. package/dist/commands/graph.js.map +1 -0
  33. package/dist/commands/index.d.ts +14 -8
  34. package/dist/commands/index.d.ts.map +1 -1
  35. package/dist/commands/index.js +14 -8
  36. package/dist/commands/index.js.map +1 -1
  37. package/dist/commands/init.d.ts +1 -1
  38. package/dist/commands/init.d.ts.map +1 -1
  39. package/dist/commands/init.js +404 -237
  40. package/dist/commands/init.js.map +1 -1
  41. package/dist/commands/plugins.d.ts.map +1 -1
  42. package/dist/commands/plugins.js +32 -41
  43. package/dist/commands/plugins.js.map +1 -1
  44. package/dist/commands/scan.d.ts +1 -1
  45. package/dist/commands/scan.d.ts.map +1 -1
  46. package/dist/commands/scan.js +107 -219
  47. package/dist/commands/scan.js.map +1 -1
  48. package/dist/commands/status.d.ts +1 -1
  49. package/dist/commands/status.d.ts.map +1 -1
  50. package/dist/commands/status.js +114 -122
  51. package/dist/commands/status.js.map +1 -1
  52. package/dist/commands/tokens.d.ts +3 -0
  53. package/dist/commands/tokens.d.ts.map +1 -0
  54. package/dist/commands/tokens.js +261 -0
  55. package/dist/commands/tokens.js.map +1 -0
  56. package/dist/config/auto-detect.d.ts +21 -0
  57. package/dist/config/auto-detect.d.ts.map +1 -0
  58. package/dist/config/auto-detect.js +278 -0
  59. package/dist/config/auto-detect.js.map +1 -0
  60. package/dist/config/loader.d.ts.map +1 -1
  61. package/dist/config/loader.js +17 -0
  62. package/dist/config/loader.js.map +1 -1
  63. package/dist/config/schema.d.ts +63 -63
  64. package/dist/config/schema.d.ts.map +1 -1
  65. package/dist/config/schema.js +20 -2
  66. package/dist/config/schema.js.map +1 -1
  67. package/dist/constants.d.ts +36 -0
  68. package/dist/constants.d.ts.map +1 -0
  69. package/dist/constants.js +37 -0
  70. package/dist/constants.js.map +1 -0
  71. package/dist/detect/frameworks.d.ts +11 -2
  72. package/dist/detect/frameworks.d.ts.map +1 -1
  73. package/dist/detect/frameworks.js +78 -78
  74. package/dist/detect/frameworks.js.map +1 -1
  75. package/dist/detect/index.d.ts +1 -0
  76. package/dist/detect/index.d.ts.map +1 -1
  77. package/dist/detect/index.js +3 -0
  78. package/dist/detect/index.js.map +1 -1
  79. package/dist/detect/monorepo-patterns.d.ts +54 -0
  80. package/dist/detect/monorepo-patterns.d.ts.map +1 -0
  81. package/dist/detect/monorepo-patterns.js +209 -0
  82. package/dist/detect/monorepo-patterns.js.map +1 -0
  83. package/dist/detect/project-detector.d.ts +1 -1
  84. package/dist/detect/project-detector.d.ts.map +1 -1
  85. package/dist/detect/project-detector.js +132 -0
  86. package/dist/detect/project-detector.js.map +1 -1
  87. package/dist/explain/agents.d.ts +31 -0
  88. package/dist/explain/agents.d.ts.map +1 -0
  89. package/dist/explain/agents.js +507 -0
  90. package/dist/explain/agents.js.map +1 -0
  91. package/dist/hooks/index.d.ts +26 -0
  92. package/dist/hooks/index.d.ts.map +1 -0
  93. package/dist/hooks/index.js +283 -0
  94. package/dist/hooks/index.js.map +1 -0
  95. package/dist/index.d.ts +3 -3
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +13 -7
  98. package/dist/index.js.map +1 -1
  99. package/dist/integrations/github-formatter.d.ts +55 -0
  100. package/dist/integrations/github-formatter.d.ts.map +1 -0
  101. package/dist/integrations/github-formatter.js +391 -0
  102. package/dist/integrations/github-formatter.js.map +1 -0
  103. package/dist/integrations/github.d.ts +95 -0
  104. package/dist/integrations/github.d.ts.map +1 -0
  105. package/dist/integrations/github.js +281 -0
  106. package/dist/integrations/github.js.map +1 -0
  107. package/dist/integrations/index.d.ts +4 -0
  108. package/dist/integrations/index.d.ts.map +1 -0
  109. package/dist/integrations/index.js +4 -0
  110. package/dist/integrations/index.js.map +1 -0
  111. package/dist/output/formatters.d.ts.map +1 -1
  112. package/dist/output/formatters.js +5 -10
  113. package/dist/output/formatters.js.map +1 -1
  114. package/dist/scan/orchestrator.d.ts +76 -0
  115. package/dist/scan/orchestrator.d.ts.map +1 -0
  116. package/dist/scan/orchestrator.js +247 -0
  117. package/dist/scan/orchestrator.js.map +1 -0
  118. package/dist/services/ai-analysis.d.ts +54 -0
  119. package/dist/services/ai-analysis.d.ts.map +1 -0
  120. package/dist/services/ai-analysis.js +239 -0
  121. package/dist/services/ai-analysis.js.map +1 -0
  122. package/dist/services/drift-analysis.d.ts +77 -0
  123. package/dist/services/drift-analysis.d.ts.map +1 -0
  124. package/dist/services/drift-analysis.js +145 -0
  125. package/dist/services/drift-analysis.js.map +1 -0
  126. package/package.json +17 -5
  127. package/dist/commands/__tests__/ci.test.d.ts +0 -2
  128. package/dist/commands/__tests__/ci.test.d.ts.map +0 -1
  129. package/dist/commands/__tests__/ci.test.js +0 -33
  130. package/dist/commands/__tests__/ci.test.js.map +0 -1
  131. package/dist/commands/bootstrap.d.ts +0 -3
  132. package/dist/commands/bootstrap.d.ts.map +0 -1
  133. package/dist/commands/bootstrap.js +0 -458
  134. package/dist/commands/bootstrap.js.map +0 -1
  135. package/dist/plugins/index.d.ts +0 -3
  136. package/dist/plugins/index.d.ts.map +0 -1
  137. package/dist/plugins/index.js +0 -3
  138. package/dist/plugins/index.js.map +0 -1
  139. package/dist/plugins/loader.d.ts +0 -11
  140. package/dist/plugins/loader.d.ts.map +0 -1
  141. package/dist/plugins/loader.js +0 -77
  142. package/dist/plugins/loader.js.map +0 -1
  143. package/dist/plugins/registry.d.ts +0 -15
  144. package/dist/plugins/registry.d.ts.map +0 -1
  145. package/dist/plugins/registry.js +0 -32
  146. package/dist/plugins/registry.js.map +0 -1
@@ -0,0 +1,170 @@
1
+ import { Command } from 'commander';
2
+ import { readFileSync, existsSync } from 'fs';
3
+ import { resolve, basename } from 'path';
4
+ import chalk from 'chalk';
5
+ import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode, } from '../output/reporters.js';
6
+ import { parseTokenFile, detectFormat, compareTokens, } from '@buoy-design/core';
7
+ import { TokenScanner } from '@buoy-design/scanners';
8
+ export function createCompareCommand() {
9
+ const cmd = new Command('compare')
10
+ .description('Compare design tokens from a file against your codebase')
11
+ .argument('<design-tokens-file>', 'Path to design tokens JSON file (DTCG, Tokens Studio, or Style Dictionary format)')
12
+ .option('--json', 'Output as JSON')
13
+ .option('--strict', 'Exit with error code if any drift detected')
14
+ .option('-v, --verbose', 'Show detailed match information')
15
+ .action(async (designTokensPath, options) => {
16
+ if (options.json) {
17
+ setJsonMode(true);
18
+ }
19
+ const spin = spinner('Loading design tokens...');
20
+ try {
21
+ const cwd = process.cwd();
22
+ const fullPath = resolve(cwd, designTokensPath);
23
+ // Verify file exists
24
+ if (!existsSync(fullPath)) {
25
+ spin.stop();
26
+ error(`File not found: ${designTokensPath}`);
27
+ process.exit(1);
28
+ }
29
+ // Parse design tokens file
30
+ const content = readFileSync(fullPath, 'utf-8');
31
+ let designTokens;
32
+ try {
33
+ const json = JSON.parse(content);
34
+ const format = detectFormat(json);
35
+ if (!options.json) {
36
+ spin.stop();
37
+ info(`Detected format: ${formatName(format)}`);
38
+ spin.start('Parsing tokens...');
39
+ }
40
+ designTokens = parseTokenFile(content);
41
+ }
42
+ catch (parseErr) {
43
+ spin.stop();
44
+ error(`Failed to parse token file: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
45
+ process.exit(1);
46
+ }
47
+ if (designTokens.length === 0) {
48
+ spin.stop();
49
+ warning('No tokens found in the design file');
50
+ info('Make sure the file contains valid DTCG, Tokens Studio, or Style Dictionary format tokens');
51
+ process.exit(0);
52
+ }
53
+ // Scan codebase for tokens
54
+ spin.text = 'Scanning codebase for tokens...';
55
+ const scanner = new TokenScanner({
56
+ projectRoot: cwd,
57
+ include: ['**/*.css', '**/*.scss', '**/*.json'],
58
+ exclude: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/*.min.css'],
59
+ });
60
+ const scanResult = await scanner.scan();
61
+ const codeTokens = scanResult.items;
62
+ spin.stop();
63
+ // Compare tokens
64
+ const result = compareTokens(designTokens, codeTokens);
65
+ // Output results
66
+ if (options.json) {
67
+ console.log(JSON.stringify({
68
+ designFile: basename(fullPath),
69
+ ...result,
70
+ }, null, 2));
71
+ return;
72
+ }
73
+ newline();
74
+ header('Token Comparison');
75
+ newline();
76
+ // Summary
77
+ keyValue('Design tokens', String(result.summary.totalDesignTokens));
78
+ keyValue('Code tokens', String(result.summary.totalCodeTokens));
79
+ keyValue('Matched', String(result.summary.matched));
80
+ if (result.summary.matchedWithDrift > 0) {
81
+ keyValue('Value drift', chalk.yellow(String(result.summary.matchedWithDrift)));
82
+ }
83
+ if (result.summary.missing > 0) {
84
+ keyValue('Missing in code', chalk.red(String(result.summary.missing)));
85
+ }
86
+ if (result.summary.orphan > 0) {
87
+ keyValue('Orphan (code only)', chalk.dim(String(result.summary.orphan)));
88
+ }
89
+ newline();
90
+ // Match details
91
+ if (options.verbose && result.matches.length > 0) {
92
+ console.log(chalk.bold('Matches:'));
93
+ for (const match of result.matches) {
94
+ const icon = match.valueDrift ? chalk.yellow('⚠') : chalk.green('✓');
95
+ const matchType = match.matchType === 'exact' ? '' : chalk.dim(` [${match.matchType}]`);
96
+ console.log(` ${icon} ${match.designToken.name}${matchType}`);
97
+ if (match.valueDrift) {
98
+ console.log(` Design: ${formatValue(match.designToken.value)}`);
99
+ console.log(` Code: ${formatValue(match.codeToken.value)}`);
100
+ }
101
+ }
102
+ newline();
103
+ }
104
+ // Missing tokens
105
+ if (result.missingTokens.length > 0) {
106
+ console.log(chalk.bold.red('Missing in codebase:'));
107
+ for (const token of result.missingTokens.slice(0, 10)) {
108
+ console.log(` ${chalk.red('✗')} ${token.name}`);
109
+ }
110
+ if (result.missingTokens.length > 10) {
111
+ console.log(chalk.dim(` ... and ${result.missingTokens.length - 10} more`));
112
+ }
113
+ newline();
114
+ }
115
+ // Orphan tokens (optional, dimmed)
116
+ if (options.verbose && result.orphanTokens.length > 0) {
117
+ console.log(chalk.bold.dim('Code tokens not in design:'));
118
+ for (const token of result.orphanTokens.slice(0, 5)) {
119
+ console.log(chalk.dim(` ? ${token.name}`));
120
+ }
121
+ if (result.orphanTokens.length > 5) {
122
+ console.log(chalk.dim(` ... and ${result.orphanTokens.length - 5} more`));
123
+ }
124
+ newline();
125
+ }
126
+ // Summary message
127
+ if (result.summary.missing === 0 && result.summary.matchedWithDrift === 0) {
128
+ success('Design tokens are fully aligned with your codebase!');
129
+ }
130
+ else if (result.summary.matchedWithDrift > 0) {
131
+ warning(`${result.summary.matchedWithDrift} tokens have value drift`);
132
+ }
133
+ if (result.summary.missing > 0) {
134
+ info(`${result.summary.missing} design tokens are not used in code`);
135
+ }
136
+ // Exit with error if strict mode and issues found
137
+ if (options.strict && (result.summary.missing > 0 || result.summary.matchedWithDrift > 0)) {
138
+ process.exit(1);
139
+ }
140
+ }
141
+ catch (err) {
142
+ spin.stop();
143
+ const message = err instanceof Error ? err.message : String(err);
144
+ error(`Comparison failed: ${message}`);
145
+ process.exit(1);
146
+ }
147
+ });
148
+ return cmd;
149
+ }
150
+ function formatName(format) {
151
+ switch (format) {
152
+ case 'dtcg': return 'W3C DTCG';
153
+ case 'tokens-studio': return 'Tokens Studio';
154
+ case 'style-dictionary': return 'Style Dictionary';
155
+ default: return format;
156
+ }
157
+ }
158
+ function formatValue(value) {
159
+ if (value.type === 'color') {
160
+ return value.hex;
161
+ }
162
+ if (value.type === 'spacing') {
163
+ return `${value.value}${value.unit}`;
164
+ }
165
+ if (value.type === 'raw') {
166
+ return String(value.value);
167
+ }
168
+ return JSON.stringify(value);
169
+ }
170
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
1
+ import { Command } from "commander";
2
2
  export declare function createDriftCommand(): Command;
3
3
  //# sourceMappingURL=drift.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,kBAAkB,IAAI,OAAO,CAuL5C"}
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,kBAAkB,IAAI,OAAO,CA4I5C"}
@@ -1,95 +1,69 @@
1
- import { Command } from 'commander';
2
- import { loadConfig } from '../config/loader.js';
3
- import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode, } from '../output/reporters.js';
4
- import { formatDriftTable, formatDriftList, formatJson, formatMarkdown, } from '../output/formatters.js';
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { existsSync } from "fs";
4
+ import { loadConfig } from "../config/loader.js";
5
+ import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode, } from "../output/reporters.js";
6
+ import { formatDriftTable, formatDriftList, formatJson, formatMarkdown, } from "../output/formatters.js";
7
+ import { DriftAnalysisService } from "../services/drift-analysis.js";
5
8
  export function createDriftCommand() {
6
- const cmd = new Command('drift')
7
- .description('Detect and manage design system drift');
9
+ const cmd = new Command("drift").description("Detect and manage design system drift");
8
10
  // drift check
9
11
  cmd
10
- .command('check')
11
- .description('Check for drift in the current project')
12
- .option('-s, --severity <level>', 'Filter by minimum severity (info, warning, critical)')
13
- .option('-t, --type <type>', 'Filter by drift type')
14
- .option('--json', 'Output as JSON')
15
- .option('--markdown', 'Output as Markdown')
16
- .option('--compact', 'Compact table output (less detail)')
17
- .option('-v, --verbose', 'Verbose output')
12
+ .command("check")
13
+ .description("Check for drift in the current project")
14
+ .option("-S, --severity <level>", "Filter by minimum severity (info, warning, critical)")
15
+ .option("-t, --type <type>", "Filter by drift type")
16
+ .option("--json", "Output as JSON")
17
+ .option("--markdown", "Output as Markdown")
18
+ .option("--compact", "Compact table output (less detail)")
19
+ .option("-v, --verbose", "Verbose output")
20
+ .option("--include-baseline", "Include baselined drifts (show all)")
18
21
  .action(async (options) => {
19
22
  // Set JSON mode before creating spinner to redirect spinner to stderr
20
23
  if (options.json) {
21
24
  setJsonMode(true);
22
25
  }
23
- const spin = spinner('Loading configuration...');
26
+ const spin = spinner("Loading configuration...");
24
27
  try {
25
28
  const { config } = await loadConfig();
26
- spin.text = 'Scanning for drift...';
27
- // Import required modules
28
- const { ReactComponentScanner } = await import('@buoy-design/scanners/git');
29
- const { SemanticDiffEngine } = await import('@buoy-design/core/analysis');
30
- // First, scan components
31
- const sourceComponents = [];
32
- if (config.sources.react?.enabled) {
33
- spin.text = 'Scanning React components...';
34
- const scanner = new ReactComponentScanner({
35
- projectRoot: process.cwd(),
36
- include: config.sources.react.include,
37
- exclude: config.sources.react.exclude,
38
- designSystemPackage: config.sources.react.designSystemPackage,
39
- });
40
- const result = await scanner.scan();
41
- sourceComponents.push(...result.items);
42
- }
43
- spin.text = 'Analyzing drift...';
44
- // Run semantic diff engine
45
- const engine = new SemanticDiffEngine();
46
- const diffResult = engine.analyzeComponents(sourceComponents, {
47
- checkDeprecated: true,
48
- checkNaming: true,
49
- checkDocumentation: true,
29
+ spin.text = "Scanning for drift...";
30
+ // Use consolidated drift analysis service
31
+ const service = new DriftAnalysisService(config);
32
+ const result = await service.analyze({
33
+ onProgress: (msg) => {
34
+ spin.text = msg;
35
+ },
36
+ includeBaseline: options.includeBaseline,
37
+ minSeverity: options.severity,
38
+ filterType: options.type,
50
39
  });
51
- let drifts = diffResult.drifts;
52
- // Apply filters
53
- if (options.severity) {
54
- const severityOrder = {
55
- info: 0,
56
- warning: 1,
57
- critical: 2,
58
- };
59
- const minSeverity = severityOrder[options.severity] || 0;
60
- drifts = drifts.filter(d => severityOrder[d.severity] >= minSeverity);
61
- }
62
- if (options.type) {
63
- drifts = drifts.filter(d => d.type === options.type);
64
- }
65
- // Apply ignore rules from config
66
- for (const ignoreRule of config.drift.ignore) {
67
- drifts = drifts.filter(d => {
68
- if (d.type !== ignoreRule.type)
69
- return true;
70
- if (!ignoreRule.pattern)
71
- return false;
72
- const regex = new RegExp(ignoreRule.pattern);
73
- return !regex.test(d.source.entityName);
74
- });
75
- }
40
+ const drifts = result.drifts;
41
+ const sourceComponents = result.components;
42
+ const baselinedCount = result.baselinedCount;
76
43
  spin.stop();
77
44
  // Output results
78
45
  if (options.json) {
79
- console.log(formatJson({ drifts, summary: getSummary(drifts) }));
46
+ console.log(formatJson({
47
+ drifts,
48
+ summary: getSummary(drifts),
49
+ baselinedCount,
50
+ }));
80
51
  return;
81
52
  }
82
53
  if (options.markdown) {
83
54
  console.log(formatMarkdown(drifts));
84
55
  return;
85
56
  }
86
- header('Drift Analysis');
57
+ header("Drift Analysis");
87
58
  newline();
88
59
  const summary = getSummary(drifts);
89
- keyValue('Components scanned', String(sourceComponents.length));
90
- keyValue('Critical', String(summary.critical));
91
- keyValue('Warning', String(summary.warning));
92
- keyValue('Info', String(summary.info));
60
+ keyValue("Components scanned", String(sourceComponents.length));
61
+ keyValue("Critical", String(summary.critical));
62
+ keyValue("Warning", String(summary.warning));
63
+ keyValue("Info", String(summary.info));
64
+ if (baselinedCount > 0) {
65
+ keyValue("Baselined (hidden)", String(baselinedCount));
66
+ }
93
67
  newline();
94
68
  // Use compact table or detailed list
95
69
  if (options.compact) {
@@ -103,7 +77,33 @@ export function createDriftCommand() {
103
77
  warning(`${summary.critical} critical issues require attention.`);
104
78
  }
105
79
  else if (drifts.length === 0) {
106
- success('No drift detected. Your design system is aligned!');
80
+ // Check if we have any reference sources to compare against
81
+ const hasTokens = config.sources.tokens?.enabled &&
82
+ (config.sources.tokens.files?.length ?? 0) > 0;
83
+ const hasFigma = config.sources.figma?.enabled;
84
+ const hasStorybook = config.sources.storybook?.enabled;
85
+ const hasDesignTokensFile = existsSync('design-tokens.css') ||
86
+ existsSync('design-tokens.json');
87
+ if (!hasTokens && !hasFigma && !hasStorybook && !hasDesignTokensFile) {
88
+ info("No drift detected, but no reference source is configured.");
89
+ newline();
90
+ info("To detect hardcoded values vs design tokens:");
91
+ info(" 1. Run " + chalk.cyan("buoy extract") + " to find hardcoded values");
92
+ info(" 2. Run " + chalk.cyan("buoy tokenize") + " to generate design-tokens.css");
93
+ info(" 3. Configure tokens in buoy.config.mjs:");
94
+ console.log(chalk.gray(`
95
+ sources: {
96
+ tokens: {
97
+ enabled: true,
98
+ files: ['design-tokens.css'],
99
+ },
100
+ },
101
+ `));
102
+ info("Or connect a design source: Figma, Storybook, or token files");
103
+ }
104
+ else {
105
+ success("No drift detected. Your design system is aligned!");
106
+ }
107
107
  }
108
108
  else {
109
109
  info(`Found ${drifts.length} drift signals. Run with --compact for summary view.`);
@@ -119,60 +119,18 @@ export function createDriftCommand() {
119
119
  process.exit(1);
120
120
  }
121
121
  });
122
- // drift explain
123
- // TODO: Implement AI-powered drift explanation with git forensics
124
- //
125
- // Implementation steps:
126
- // 1. Load the drift signal by ID from scan results or cache
127
- // 2. Fetch git context for the affected file/line:
128
- // - git blame -L <line>,<line> <file> → who changed it, when, commit hash
129
- // - git log -1 --format="%s%n%n%b" <hash> → commit message
130
- // - git show <hash>^:<file> → previous version of the code
131
- // - git log -p -L <line>,<line>:<file> → full history of this line
132
- // 3. Try to find associated PR (GitHub API or parse commit message for #123)
133
- // 4. Build context object matching GitContext schema in @buoy-design/core
134
- // 5. Send to Claude API with structured prompt:
135
- // - Drift type and severity
136
- // - Current vs expected code
137
- // - Git blame info (who, when, why)
138
- // - Previous code before drift
139
- // - Ask for: root cause, impact, fix, prevention
140
- // 6. Display formatted explanation with actionable next steps
141
- //
142
- // See: packages/core/src/models/drift.ts → GitContextSchema
143
- cmd
144
- .command('explain <driftId>')
145
- .description('Get detailed explanation for a drift signal (uses AI + git history)')
146
- .action(async (driftId) => {
147
- info('Claude integration not yet implemented.');
148
- info(`To explain drift: ${driftId}`);
149
- info('Enable Claude in buoy.config.ts and ensure ANTHROPIC_API_KEY is set.');
150
- info('');
151
- info('When implemented, this will:');
152
- info(' • Analyze git blame to find who introduced the drift');
153
- info(' • Check commit history for context on why');
154
- info(' • Use Claude to explain impact and suggest fixes');
155
- });
156
- // drift resolve
157
- cmd
158
- .command('resolve <driftId>')
159
- .description('Mark a drift signal as resolved')
160
- .option('-r, --resolution <type>', 'Resolution type (ignored, fixed, documented)', 'fixed')
161
- .option('-m, --message <message>', 'Resolution message')
162
- .action(async (driftId, options) => {
163
- info(`Marking drift ${driftId} as ${options.resolution}`);
164
- if (options.message) {
165
- info(`Reason: ${options.message}`);
166
- }
167
- success('Drift resolved (note: persistence not yet implemented)');
168
- });
122
+ // NOTE: `drift explain` and `drift resolve` commands are planned but not yet implemented.
123
+ // They will be added once the following are complete:
124
+ // - drift explain: Requires Claude API integration and git forensics
125
+ // - drift resolve: Requires persistence layer for tracking resolutions
126
+ // See: docs/ROADMAP.md for implementation timeline
169
127
  return cmd;
170
128
  }
171
129
  function getSummary(drifts) {
172
130
  return {
173
- critical: drifts.filter(d => d.severity === 'critical').length,
174
- warning: drifts.filter(d => d.severity === 'warning').length,
175
- info: drifts.filter(d => d.severity === 'info').length,
131
+ critical: drifts.filter((d) => d.severity === "critical").length,
132
+ warning: drifts.filter((d) => d.severity === "warning").length,
133
+ info: drifts.filter((d) => d.severity === "info").length,
176
134
  };
177
135
  }
178
136
  //# sourceMappingURL=drift.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createExplainCommand(): Command;
3
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,oBAAoB,IAAI,OAAO,CA4H9C"}