@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.
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +235 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/baseline.d.ts +39 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +298 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/check.d.ts +16 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +168 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/ci.d.ts +2 -2
- package/dist/commands/ci.d.ts.map +1 -1
- package/dist/commands/ci.js +124 -142
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +170 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/drift.d.ts +1 -1
- package/dist/commands/drift.d.ts.map +1 -1
- package/dist/commands/drift.js +79 -121
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/explain.d.ts +3 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +212 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/graph.d.ts +3 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +430 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/index.d.ts +14 -8
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +14 -8
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +404 -237
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +32 -41
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/scan.d.ts +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +107 -219
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +114 -122
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +261 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/config/auto-detect.d.ts +21 -0
- package/dist/config/auto-detect.d.ts.map +1 -0
- package/dist/config/auto-detect.js +278 -0
- package/dist/config/auto-detect.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +17 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +63 -63
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +20 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/constants.d.ts +36 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +37 -0
- package/dist/constants.js.map +1 -0
- package/dist/detect/frameworks.d.ts +11 -2
- package/dist/detect/frameworks.d.ts.map +1 -1
- package/dist/detect/frameworks.js +78 -78
- package/dist/detect/frameworks.js.map +1 -1
- package/dist/detect/index.d.ts +1 -0
- package/dist/detect/index.d.ts.map +1 -1
- package/dist/detect/index.js +3 -0
- package/dist/detect/index.js.map +1 -1
- package/dist/detect/monorepo-patterns.d.ts +54 -0
- package/dist/detect/monorepo-patterns.d.ts.map +1 -0
- package/dist/detect/monorepo-patterns.js +209 -0
- package/dist/detect/monorepo-patterns.js.map +1 -0
- package/dist/detect/project-detector.d.ts +1 -1
- package/dist/detect/project-detector.d.ts.map +1 -1
- package/dist/detect/project-detector.js +132 -0
- package/dist/detect/project-detector.js.map +1 -1
- package/dist/explain/agents.d.ts +31 -0
- package/dist/explain/agents.d.ts.map +1 -0
- package/dist/explain/agents.js +507 -0
- package/dist/explain/agents.js.map +1 -0
- package/dist/hooks/index.d.ts +26 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +283 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -1
- package/dist/integrations/github-formatter.d.ts +55 -0
- package/dist/integrations/github-formatter.d.ts.map +1 -0
- package/dist/integrations/github-formatter.js +391 -0
- package/dist/integrations/github-formatter.js.map +1 -0
- package/dist/integrations/github.d.ts +95 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +281 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/output/formatters.d.ts.map +1 -1
- package/dist/output/formatters.js +5 -10
- package/dist/output/formatters.js.map +1 -1
- package/dist/scan/orchestrator.d.ts +76 -0
- package/dist/scan/orchestrator.d.ts.map +1 -0
- package/dist/scan/orchestrator.js +247 -0
- package/dist/scan/orchestrator.js.map +1 -0
- package/dist/services/ai-analysis.d.ts +54 -0
- package/dist/services/ai-analysis.d.ts.map +1 -0
- package/dist/services/ai-analysis.js +239 -0
- package/dist/services/ai-analysis.js.map +1 -0
- package/dist/services/drift-analysis.d.ts +77 -0
- package/dist/services/drift-analysis.d.ts.map +1 -0
- package/dist/services/drift-analysis.js +145 -0
- package/dist/services/drift-analysis.js.map +1 -0
- package/package.json +17 -5
- package/dist/commands/__tests__/ci.test.d.ts +0 -2
- package/dist/commands/__tests__/ci.test.d.ts.map +0 -1
- package/dist/commands/__tests__/ci.test.js +0 -33
- package/dist/commands/__tests__/ci.test.js.map +0 -1
- package/dist/commands/bootstrap.d.ts +0 -3
- package/dist/commands/bootstrap.d.ts.map +0 -1
- package/dist/commands/bootstrap.js +0 -458
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -3
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -3
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/loader.d.ts +0 -11
- package/dist/plugins/loader.d.ts.map +0 -1
- package/dist/plugins/loader.js +0 -77
- package/dist/plugins/loader.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -15
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -32
- 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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"}
|
package/dist/commands/drift.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/commands/drift.js
CHANGED
|
@@ -1,95 +1,69 @@
|
|
|
1
|
-
import { Command } from
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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(
|
|
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(
|
|
11
|
-
.description(
|
|
12
|
-
.option(
|
|
13
|
-
.option(
|
|
14
|
-
.option(
|
|
15
|
-
.option(
|
|
16
|
-
.option(
|
|
17
|
-
.option(
|
|
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(
|
|
26
|
+
const spin = spinner("Loading configuration...");
|
|
24
27
|
try {
|
|
25
28
|
const { config } = await loadConfig();
|
|
26
|
-
spin.text =
|
|
27
|
-
//
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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({
|
|
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(
|
|
57
|
+
header("Drift Analysis");
|
|
87
58
|
newline();
|
|
88
59
|
const summary = getSummary(drifts);
|
|
89
|
-
keyValue(
|
|
90
|
-
keyValue(
|
|
91
|
-
keyValue(
|
|
92
|
-
keyValue(
|
|
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
|
-
|
|
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
|
-
//
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
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 ===
|
|
174
|
-
warning: drifts.filter(d => d.severity ===
|
|
175
|
-
info: drifts.filter(d => d.severity ===
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,OAAO,EACP,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAO,EACP,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,cAAc,GACf,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|