@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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createAuditCommand(): Command;
3
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,kBAAkB,IAAI,OAAO,CAqI5C"}
@@ -0,0 +1,235 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { glob } from 'glob';
4
+ import { readFile } from 'fs/promises';
5
+ import { spinner, error, header, keyValue, newline, setJsonMode, } from '../output/reporters.js';
6
+ import { generateAuditReport, findCloseMatches, } from '@buoy-design/core';
7
+ import { extractStyles, extractCssFileStyles } from '@buoy-design/scanners';
8
+ import { parseCssValues } from '@buoy-design/core';
9
+ export function createAuditCommand() {
10
+ const cmd = new Command('audit')
11
+ .description('Audit your codebase for design system health')
12
+ .option('--json', 'Output as JSON')
13
+ .option('--tokens <path>', 'Path to design tokens file for close-match detection')
14
+ .action(async (options) => {
15
+ if (options.json) {
16
+ setJsonMode(true);
17
+ }
18
+ const spin = spinner('Scanning codebase...');
19
+ try {
20
+ const cwd = process.cwd();
21
+ // Find all source files
22
+ spin.text = 'Finding source files...';
23
+ const patterns = [
24
+ '**/*.tsx',
25
+ '**/*.jsx',
26
+ '**/*.vue',
27
+ '**/*.svelte',
28
+ '**/*.css',
29
+ '**/*.scss',
30
+ ];
31
+ const ignore = [
32
+ '**/node_modules/**',
33
+ '**/dist/**',
34
+ '**/build/**',
35
+ '**/*.min.css',
36
+ '**/*.test.*',
37
+ '**/*.spec.*',
38
+ '**/*.stories.*',
39
+ ];
40
+ const files = [];
41
+ for (const pattern of patterns) {
42
+ const matches = await glob(pattern, { cwd, ignore, absolute: true });
43
+ files.push(...matches);
44
+ }
45
+ if (files.length === 0) {
46
+ spin.stop();
47
+ error('No source files found');
48
+ return;
49
+ }
50
+ // Extract values from all files
51
+ spin.text = `Scanning ${files.length} files...`;
52
+ const extractedValues = [];
53
+ for (const filePath of files) {
54
+ try {
55
+ const content = await readFile(filePath, 'utf-8');
56
+ const relativePath = filePath.replace(cwd + '/', '');
57
+ // Determine file type
58
+ const ext = filePath.split('.').pop()?.toLowerCase();
59
+ const isCss = ext === 'css' || ext === 'scss';
60
+ const styles = isCss
61
+ ? extractCssFileStyles(content)
62
+ : extractStyles(content, ext === 'vue' ? 'vue' : ext === 'svelte' ? 'svelte' : 'react');
63
+ for (const style of styles) {
64
+ const { values } = parseCssValues(style.css);
65
+ for (const v of values) {
66
+ extractedValues.push({
67
+ category: mapCategory(v.property),
68
+ value: v.value,
69
+ file: relativePath,
70
+ line: 1, // Line info not available from style extraction
71
+ });
72
+ }
73
+ }
74
+ }
75
+ catch {
76
+ // Skip files that can't be processed
77
+ }
78
+ }
79
+ spin.stop();
80
+ if (extractedValues.length === 0) {
81
+ console.log(chalk.green('✓ No hardcoded design values found!'));
82
+ console.log(chalk.dim('Your codebase appears to be using design tokens correctly.'));
83
+ return;
84
+ }
85
+ // Generate report
86
+ const report = generateAuditReport(extractedValues);
87
+ // Load design tokens for close-match detection if provided
88
+ if (options.tokens) {
89
+ try {
90
+ const tokenContent = await readFile(options.tokens, 'utf-8');
91
+ const tokenData = JSON.parse(tokenContent);
92
+ // Extract token values and find close matches
93
+ const colorTokens = extractTokenValues(tokenData, 'color');
94
+ const spacingTokens = extractTokenValues(tokenData, 'spacing');
95
+ const colorValues = extractedValues
96
+ .filter((v) => v.category === 'color')
97
+ .map((v) => v.value);
98
+ const spacingValues = extractedValues
99
+ .filter((v) => v.category === 'spacing')
100
+ .map((v) => v.value);
101
+ report.closeMatches = [
102
+ ...findCloseMatches(colorValues, colorTokens, 'color'),
103
+ ...findCloseMatches(spacingValues, spacingTokens, 'spacing'),
104
+ ];
105
+ }
106
+ catch {
107
+ // Ignore token loading errors
108
+ }
109
+ }
110
+ // Output
111
+ if (options.json) {
112
+ console.log(JSON.stringify(report, null, 2));
113
+ return;
114
+ }
115
+ printReport(report);
116
+ }
117
+ catch (err) {
118
+ spin.stop();
119
+ const message = err instanceof Error ? err.message : String(err);
120
+ error(`Audit failed: ${message}`);
121
+ process.exit(1);
122
+ }
123
+ });
124
+ return cmd;
125
+ }
126
+ function mapCategory(property) {
127
+ const colorProps = ['color', 'background', 'background-color', 'border-color', 'fill', 'stroke'];
128
+ const spacingProps = ['padding', 'margin', 'gap', 'top', 'right', 'bottom', 'left', 'width', 'height'];
129
+ const radiusProps = ['border-radius'];
130
+ const typographyProps = ['font-size', 'line-height', 'font-weight', 'font-family'];
131
+ const propLower = property.toLowerCase();
132
+ if (colorProps.some((p) => propLower.includes(p)))
133
+ return 'color';
134
+ if (radiusProps.some((p) => propLower.includes(p)))
135
+ return 'radius';
136
+ if (typographyProps.some((p) => propLower.includes(p)))
137
+ return 'typography';
138
+ if (spacingProps.some((p) => propLower.includes(p)))
139
+ return 'spacing';
140
+ return 'spacing'; // Default
141
+ }
142
+ function extractTokenValues(tokenData, _category) {
143
+ const values = [];
144
+ function traverse(obj) {
145
+ if (typeof obj !== 'object' || obj === null)
146
+ return;
147
+ for (const [key, value] of Object.entries(obj)) {
148
+ if (key === '$value' || key === 'value') {
149
+ if (typeof value === 'string') {
150
+ values.push(value);
151
+ }
152
+ }
153
+ else if (typeof value === 'object') {
154
+ traverse(value);
155
+ }
156
+ }
157
+ }
158
+ traverse(tokenData);
159
+ return values;
160
+ }
161
+ function printReport(report) {
162
+ newline();
163
+ header('Design System Health Report');
164
+ newline();
165
+ // Score with color coding
166
+ const scoreColor = report.score >= 80 ? chalk.green :
167
+ report.score >= 50 ? chalk.yellow :
168
+ chalk.red;
169
+ const scoreLabel = report.score >= 80 ? 'Good' :
170
+ report.score >= 50 ? 'Fair' :
171
+ report.score < 30 ? 'Poor' : 'Needs Work';
172
+ console.log(`Overall Score: ${scoreColor.bold(`${report.score}/100`)} (${scoreLabel})`);
173
+ newline();
174
+ // Category breakdown
175
+ for (const [category, stats] of Object.entries(report.categories)) {
176
+ const expected = getExpectedCount(category);
177
+ const drift = stats.uniqueCount - expected;
178
+ const driftColor = drift > 5 ? chalk.red : drift > 0 ? chalk.yellow : chalk.green;
179
+ console.log(chalk.bold(capitalize(category)));
180
+ keyValue(' Found', `${stats.uniqueCount} unique values`);
181
+ keyValue(' Expected', `~${expected}`);
182
+ if (drift > 0) {
183
+ keyValue(' Drift', driftColor(`+${drift} extra values`));
184
+ }
185
+ // Most common unlisted
186
+ if (stats.mostCommon.length > 0) {
187
+ console.log(chalk.dim(' Most common:'));
188
+ for (const { value, count } of stats.mostCommon.slice(0, 3)) {
189
+ console.log(chalk.dim(` ${value} (${count} usages)`));
190
+ }
191
+ }
192
+ newline();
193
+ }
194
+ // Close matches (typos)
195
+ if (report.closeMatches.length > 0) {
196
+ console.log(chalk.bold.yellow('Possible Typos'));
197
+ for (const match of report.closeMatches.slice(0, 5)) {
198
+ console.log(` ${chalk.yellow('⚠')} ${match.value} → close to ${chalk.cyan(match.closeTo)}`);
199
+ }
200
+ if (report.closeMatches.length > 5) {
201
+ console.log(chalk.dim(` ... and ${report.closeMatches.length - 5} more`));
202
+ }
203
+ newline();
204
+ }
205
+ // Worst files
206
+ if (report.worstFiles.length > 0) {
207
+ console.log(chalk.bold('Worst Offenders'));
208
+ for (const { file, issueCount } of report.worstFiles.slice(0, 5)) {
209
+ console.log(` ${chalk.red(issueCount.toString().padStart(3))} issues ${file}`);
210
+ }
211
+ newline();
212
+ }
213
+ // Summary
214
+ console.log(chalk.dim('─'.repeat(50)));
215
+ keyValue('Total unique values', String(report.totals.uniqueValues));
216
+ keyValue('Total usages', String(report.totals.totalUsages));
217
+ keyValue('Files affected', String(report.totals.filesAffected));
218
+ newline();
219
+ if (report.score < 50) {
220
+ console.log(chalk.yellow('Run `buoy drift check` for detailed fixes.'));
221
+ }
222
+ }
223
+ function getExpectedCount(category) {
224
+ const expected = {
225
+ color: 12,
226
+ spacing: 8,
227
+ typography: 6,
228
+ radius: 4,
229
+ };
230
+ return expected[category] || 10;
231
+ }
232
+ function capitalize(str) {
233
+ return str.charAt(0).toUpperCase() + str.slice(1);
234
+ }
235
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { Command } from "commander";
2
+ import type { DriftSignal } from "@buoy-design/core";
3
+ export interface Baseline {
4
+ version: 1;
5
+ createdAt: string;
6
+ updatedAt: string;
7
+ driftIds: string[];
8
+ summary: {
9
+ critical: number;
10
+ warning: number;
11
+ info: number;
12
+ total: number;
13
+ };
14
+ }
15
+ /**
16
+ * Get the path to the baseline file
17
+ */
18
+ export declare function getBaselinePath(projectRoot?: string): string;
19
+ /**
20
+ * Load existing baseline or return null if none exists
21
+ */
22
+ export declare function loadBaseline(projectRoot?: string): Promise<Baseline | null>;
23
+ /**
24
+ * Save baseline to disk
25
+ */
26
+ export declare function saveBaseline(baseline: Baseline, projectRoot?: string): Promise<void>;
27
+ /**
28
+ * Create baseline from current drift signals
29
+ */
30
+ export declare function createBaseline(drifts: DriftSignal[]): Baseline;
31
+ /**
32
+ * Filter out baselined drifts from results
33
+ */
34
+ export declare function filterBaseline(drifts: DriftSignal[], baseline: Baseline | null): {
35
+ newDrifts: DriftSignal[];
36
+ baselinedCount: number;
37
+ };
38
+ export declare function createBaselineCommand(): Command;
39
+ //# sourceMappingURL=baseline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAc1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAe9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,QAAQ,GAAG,IAAI,GACxB;IACD,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAUA;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CA4R/C"}
@@ -0,0 +1,298 @@
1
+ import { Command } from "commander";
2
+ import { readFile, writeFile, mkdir } from "fs/promises";
3
+ import { existsSync } from "fs";
4
+ import { join, dirname } from "path";
5
+ import { loadConfig } from "../config/loader.js";
6
+ import { spinner, success, error, info, warning, header, keyValue, newline, setJsonMode, } from "../output/reporters.js";
7
+ import { formatJson } from "../output/formatters.js";
8
+ const BASELINE_DIR = ".buoy";
9
+ const BASELINE_FILE = "baseline.json";
10
+ /**
11
+ * Get the path to the baseline file
12
+ */
13
+ export function getBaselinePath(projectRoot = process.cwd()) {
14
+ return join(projectRoot, BASELINE_DIR, BASELINE_FILE);
15
+ }
16
+ /**
17
+ * Load existing baseline or return null if none exists
18
+ */
19
+ export async function loadBaseline(projectRoot = process.cwd()) {
20
+ const baselinePath = getBaselinePath(projectRoot);
21
+ if (!existsSync(baselinePath)) {
22
+ return null;
23
+ }
24
+ try {
25
+ const content = await readFile(baselinePath, "utf-8");
26
+ const baseline = JSON.parse(content);
27
+ return baseline;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ /**
34
+ * Save baseline to disk
35
+ */
36
+ export async function saveBaseline(baseline, projectRoot = process.cwd()) {
37
+ const baselinePath = getBaselinePath(projectRoot);
38
+ const baselineDir = dirname(baselinePath);
39
+ // Ensure directory exists
40
+ if (!existsSync(baselineDir)) {
41
+ await mkdir(baselineDir, { recursive: true });
42
+ }
43
+ await writeFile(baselinePath, JSON.stringify(baseline, null, 2), "utf-8");
44
+ }
45
+ /**
46
+ * Create baseline from current drift signals
47
+ */
48
+ export function createBaseline(drifts) {
49
+ const now = new Date().toISOString();
50
+ return {
51
+ version: 1,
52
+ createdAt: now,
53
+ updatedAt: now,
54
+ driftIds: drifts.map((d) => d.id),
55
+ summary: {
56
+ critical: drifts.filter((d) => d.severity === "critical").length,
57
+ warning: drifts.filter((d) => d.severity === "warning").length,
58
+ info: drifts.filter((d) => d.severity === "info").length,
59
+ total: drifts.length,
60
+ },
61
+ };
62
+ }
63
+ /**
64
+ * Filter out baselined drifts from results
65
+ */
66
+ export function filterBaseline(drifts, baseline) {
67
+ if (!baseline) {
68
+ return { newDrifts: drifts, baselinedCount: 0 };
69
+ }
70
+ const baselineSet = new Set(baseline.driftIds);
71
+ const newDrifts = drifts.filter((d) => !baselineSet.has(d.id));
72
+ const baselinedCount = drifts.length - newDrifts.length;
73
+ return { newDrifts, baselinedCount };
74
+ }
75
+ export function createBaselineCommand() {
76
+ const cmd = new Command("baseline").description("Manage drift baseline for existing projects");
77
+ // baseline create
78
+ cmd
79
+ .command("create")
80
+ .description("Create baseline from current drift signals (hides existing issues)")
81
+ .option("--json", "Output as JSON")
82
+ .option("-f, --force", "Overwrite existing baseline without prompting")
83
+ .action(async (options) => {
84
+ if (options.json) {
85
+ setJsonMode(true);
86
+ }
87
+ const spin = spinner("Loading configuration...");
88
+ try {
89
+ const { config } = await loadConfig();
90
+ // Check for existing baseline
91
+ const existingBaseline = await loadBaseline();
92
+ if (existingBaseline && !options.force) {
93
+ spin.stop();
94
+ warning(`Baseline already exists with ${existingBaseline.summary.total} drifts.`);
95
+ info('Use --force to overwrite, or "buoy baseline update" to add new drifts.');
96
+ return;
97
+ }
98
+ spin.text = "Scanning for current drift...";
99
+ // Import required modules
100
+ const { ReactComponentScanner } = await import("@buoy-design/scanners/git");
101
+ const { SemanticDiffEngine } = await import("@buoy-design/core/analysis");
102
+ // Scan components
103
+ const components = [];
104
+ if (config.sources.react?.enabled) {
105
+ spin.text = "Scanning React components...";
106
+ const scanner = new ReactComponentScanner({
107
+ projectRoot: process.cwd(),
108
+ include: config.sources.react.include,
109
+ exclude: config.sources.react.exclude,
110
+ designSystemPackage: config.sources.react.designSystemPackage,
111
+ });
112
+ const result = await scanner.scan();
113
+ components.push(...result.items);
114
+ }
115
+ spin.text = "Analyzing drift...";
116
+ // Run analysis
117
+ const engine = new SemanticDiffEngine();
118
+ const diffResult = engine.analyzeComponents(components, {
119
+ checkDeprecated: true,
120
+ checkNaming: true,
121
+ checkDocumentation: true,
122
+ });
123
+ const drifts = diffResult.drifts;
124
+ // Create and save baseline
125
+ const baseline = createBaseline(drifts);
126
+ await saveBaseline(baseline);
127
+ spin.stop();
128
+ if (options.json) {
129
+ console.log(formatJson({
130
+ action: "created",
131
+ baseline,
132
+ }));
133
+ return;
134
+ }
135
+ header("Baseline Created");
136
+ newline();
137
+ keyValue("Total drifts baselined", String(baseline.summary.total));
138
+ keyValue("Critical", String(baseline.summary.critical));
139
+ keyValue("Warning", String(baseline.summary.warning));
140
+ keyValue("Info", String(baseline.summary.info));
141
+ newline();
142
+ success(`Baseline saved to ${BASELINE_DIR}/${BASELINE_FILE}`);
143
+ info("Future drift checks will only show NEW issues not in this baseline.");
144
+ info("Tip: Add .buoy/ to .gitignore or commit it to share with your team.");
145
+ }
146
+ catch (err) {
147
+ spin.stop();
148
+ const message = err instanceof Error ? err.message : String(err);
149
+ error(`Failed to create baseline: ${message}`);
150
+ process.exit(1);
151
+ }
152
+ });
153
+ // baseline show
154
+ cmd
155
+ .command("show")
156
+ .description("Show current baseline status")
157
+ .option("--json", "Output as JSON")
158
+ .action(async (options) => {
159
+ if (options.json) {
160
+ setJsonMode(true);
161
+ }
162
+ try {
163
+ const baseline = await loadBaseline();
164
+ if (options.json) {
165
+ console.log(formatJson({ baseline }));
166
+ return;
167
+ }
168
+ if (!baseline) {
169
+ info("No baseline exists for this project.");
170
+ info('Run "buoy baseline create" to establish a baseline.');
171
+ return;
172
+ }
173
+ header("Current Baseline");
174
+ newline();
175
+ keyValue("Created", baseline.createdAt);
176
+ keyValue("Updated", baseline.updatedAt);
177
+ keyValue("Total drifts", String(baseline.summary.total));
178
+ keyValue("Critical", String(baseline.summary.critical));
179
+ keyValue("Warning", String(baseline.summary.warning));
180
+ keyValue("Info", String(baseline.summary.info));
181
+ newline();
182
+ info(`Baseline file: ${getBaselinePath()}`);
183
+ }
184
+ catch (err) {
185
+ const message = err instanceof Error ? err.message : String(err);
186
+ error(`Failed to read baseline: ${message}`);
187
+ process.exit(1);
188
+ }
189
+ });
190
+ // baseline update
191
+ cmd
192
+ .command("update")
193
+ .description("Update baseline to include current drift signals")
194
+ .option("--json", "Output as JSON")
195
+ .action(async (options) => {
196
+ if (options.json) {
197
+ setJsonMode(true);
198
+ }
199
+ const spin = spinner("Loading configuration...");
200
+ try {
201
+ const { config } = await loadConfig();
202
+ const existingBaseline = await loadBaseline();
203
+ spin.text = "Scanning for current drift...";
204
+ // Import required modules
205
+ const { ReactComponentScanner } = await import("@buoy-design/scanners/git");
206
+ const { SemanticDiffEngine } = await import("@buoy-design/core/analysis");
207
+ // Scan components
208
+ const components = [];
209
+ if (config.sources.react?.enabled) {
210
+ spin.text = "Scanning React components...";
211
+ const scanner = new ReactComponentScanner({
212
+ projectRoot: process.cwd(),
213
+ include: config.sources.react.include,
214
+ exclude: config.sources.react.exclude,
215
+ designSystemPackage: config.sources.react.designSystemPackage,
216
+ });
217
+ const result = await scanner.scan();
218
+ components.push(...result.items);
219
+ }
220
+ spin.text = "Analyzing drift...";
221
+ // Run analysis
222
+ const engine = new SemanticDiffEngine();
223
+ const diffResult = engine.analyzeComponents(components, {
224
+ checkDeprecated: true,
225
+ checkNaming: true,
226
+ checkDocumentation: true,
227
+ });
228
+ const drifts = diffResult.drifts;
229
+ // Create updated baseline
230
+ const baseline = createBaseline(drifts);
231
+ if (existingBaseline) {
232
+ baseline.createdAt = existingBaseline.createdAt;
233
+ }
234
+ await saveBaseline(baseline);
235
+ spin.stop();
236
+ const added = existingBaseline
237
+ ? baseline.summary.total - existingBaseline.summary.total
238
+ : baseline.summary.total;
239
+ if (options.json) {
240
+ console.log(formatJson({
241
+ action: "updated",
242
+ baseline,
243
+ added,
244
+ }));
245
+ return;
246
+ }
247
+ header("Baseline Updated");
248
+ newline();
249
+ keyValue("Total drifts", String(baseline.summary.total));
250
+ if (existingBaseline) {
251
+ keyValue("Added to baseline", String(Math.max(0, added)));
252
+ }
253
+ newline();
254
+ success("Baseline updated successfully.");
255
+ }
256
+ catch (err) {
257
+ spin.stop();
258
+ const message = err instanceof Error ? err.message : String(err);
259
+ error(`Failed to update baseline: ${message}`);
260
+ process.exit(1);
261
+ }
262
+ });
263
+ // baseline clear
264
+ cmd
265
+ .command("clear")
266
+ .description("Remove baseline (show all drift signals again)")
267
+ .option("--json", "Output as JSON")
268
+ .action(async (options) => {
269
+ if (options.json) {
270
+ setJsonMode(true);
271
+ }
272
+ try {
273
+ const { unlink } = await import("fs/promises");
274
+ const baselinePath = getBaselinePath();
275
+ if (!existsSync(baselinePath)) {
276
+ if (options.json) {
277
+ console.log(formatJson({ action: "cleared", existed: false }));
278
+ return;
279
+ }
280
+ info("No baseline exists.");
281
+ return;
282
+ }
283
+ await unlink(baselinePath);
284
+ if (options.json) {
285
+ console.log(formatJson({ action: "cleared", existed: true }));
286
+ return;
287
+ }
288
+ success("Baseline cleared. All drift signals will now be shown.");
289
+ }
290
+ catch (err) {
291
+ const message = err instanceof Error ? err.message : String(err);
292
+ error(`Failed to clear baseline: ${message}`);
293
+ process.exit(1);
294
+ }
295
+ });
296
+ return cmd;
297
+ }
298
+ //# sourceMappingURL=baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,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,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,YAAY,GAAG,OAAO,CAAC;AAC7B,MAAM,aAAa,GAAG,eAAe,CAAC;AAetC;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACjE,OAAO,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;QACjD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE1C,0BAA0B;IAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;YAChE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;YAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACxD,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAqB,EACrB,QAAyB;IAKzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAExD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAC7C,6CAA6C,CAC9C,CAAC;IAEF,kBAAkB;IAClB,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,aAAa,EAAE,+CAA+C,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAEtC,8BAA8B;YAC9B,MAAM,gBAAgB,GAAG,MAAM,YAAY,EAAE,CAAC;YAC9C,IAAI,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,CACL,gCAAgC,gBAAgB,CAAC,OAAO,CAAC,KAAK,UAAU,CACzE,CAAC;gBACF,IAAI,CACF,wEAAwE,CACzE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;YAE5C,0BAA0B;YAC1B,MAAM,EAAE,qBAAqB,EAAE,GAC7B,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC5C,MAAM,EAAE,kBAAkB,EAAE,GAC1B,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAE7C,kBAAkB;YAClB,MAAM,UAAU,GAEH,EAAE,CAAC;YAEhB,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC;oBACxC,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;oBAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;oBACrC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;oBACrC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB;iBAC9D,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACpC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;YAEjC,eAAe;YACf,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE;gBACtD,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAEjC,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,UAAU,CAAC;oBACT,MAAM,EAAE,SAAS;oBACjB,QAAQ;iBACT,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,qBAAqB,YAAY,IAAI,aAAa,EAAE,CAAC,CAAC;YAC9D,IAAI,CACF,qEAAqE,CACtE,CAAC;YACF,IAAI,CACF,qEAAqE,CACtE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,gBAAgB;IAChB,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;YAEtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBAC7C,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACxC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,kBAAkB,eAAe,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YACtC,MAAM,gBAAgB,GAAG,MAAM,YAAY,EAAE,CAAC;YAE9C,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;YAE5C,0BAA0B;YAC1B,MAAM,EAAE,qBAAqB,EAAE,GAC7B,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC5C,MAAM,EAAE,kBAAkB,EAAE,GAC1B,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAE7C,kBAAkB;YAClB,MAAM,UAAU,GAEH,EAAE,CAAC;YAEhB,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC;oBACxC,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;oBAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;oBACrC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;oBACrC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB;iBAC9D,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACpC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;YAEjC,eAAe;YACf,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE;gBACtD,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAEjC,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;YAClD,CAAC;YACD,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,MAAM,KAAK,GAAG,gBAAgB;gBAC5B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK;gBACzD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,UAAU,CAAC;oBACT,MAAM,EAAE,SAAS;oBACjB,QAAQ;oBACR,KAAK;iBACN,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;YAEvC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC/D,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,OAAO,CAAC,wDAAwD,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Command } from "commander";
2
+ import type { DriftSignal } from "@buoy-design/core";
3
+ /**
4
+ * Get list of staged files from git
5
+ */
6
+ export declare function getStagedFiles(): string[];
7
+ /**
8
+ * Filter files to only include scannable extensions
9
+ */
10
+ export declare function filterScannableFiles(files: string[]): string[];
11
+ /**
12
+ * Check if a drift signal is from a staged file
13
+ */
14
+ export declare function isFromStagedFile(drift: DriftSignal, stagedFiles: string[]): boolean;
15
+ export declare function createCheckCommand(): Command;
16
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAC;AAQ/D;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAgBzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA4B9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAgBnF;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAwH5C"}