@buoy-design/cli 0.8.2 → 0.8.4

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.
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Infer a design system from the values a codebase already uses.
3
+ *
4
+ * For repos with no tokens, this is the system they actually have: the most
5
+ * used colors and spacing, with near-duplicate shades grouped together.
6
+ * `buoy dock tokens` writes it out; `buoy scan` and the MCP server show it.
7
+ */
8
+ import { relative } from "path";
9
+ import { readFile } from "fs/promises";
10
+ import { glob } from "glob";
11
+ import { extractStyles, extractCssFileStyles, } from "@buoy-design/scanners";
12
+ import { parseCssValues, generateTokens, } from "@buoy-design/core";
13
+ export async function findStyleSources(cwd, config) {
14
+ const filesToScan = [];
15
+ const sources = config.sources || {};
16
+ const componentSources = [
17
+ { key: "react", patterns: sources.react?.include || ["src/**/*.tsx", "src/**/*.jsx"] },
18
+ { key: "vue", patterns: sources.vue?.include || ["src/**/*.vue"] },
19
+ { key: "svelte", patterns: sources.svelte?.include || ["src/**/*.svelte"] },
20
+ ];
21
+ for (const { key, patterns } of componentSources) {
22
+ if (sources[key]?.enabled !== false) {
23
+ for (const pattern of patterns) {
24
+ const files = (await glob(pattern, {
25
+ cwd,
26
+ ignore: ["**/node_modules/**", "**/dist/**", "**/*.test.*", "**/*.stories.*"],
27
+ absolute: true,
28
+ })).sort();
29
+ for (const file of files)
30
+ filesToScan.push({ path: file, type: key });
31
+ }
32
+ }
33
+ }
34
+ if (sources.templates?.enabled) {
35
+ for (const pattern of sources.templates.include || []) {
36
+ const files = (await glob(pattern, { cwd, ignore: sources.templates.exclude || [], absolute: true })).sort();
37
+ for (const file of files)
38
+ filesToScan.push({ path: file, type: sources.templates.type });
39
+ }
40
+ }
41
+ const cssIgnore = ["**/node_modules/**", "**/dist/**", "**/build/**", "**/*.min.css"];
42
+ for (const pattern of ["**/*.css", "**/*.scss"]) {
43
+ const files = (await glob(pattern, { cwd, ignore: cssIgnore, absolute: true })).sort();
44
+ for (const file of files)
45
+ filesToScan.push({ path: file, type: "css" });
46
+ }
47
+ return filesToScan;
48
+ }
49
+ export async function extractValues(cwd, files) {
50
+ const allValues = [];
51
+ for (const { path: filePath, type } of files) {
52
+ try {
53
+ const content = await readFile(filePath, "utf-8");
54
+ const styles = type === "css" ? extractCssFileStyles(content) : extractStyles(content, type);
55
+ for (const style of styles) {
56
+ const { values } = parseCssValues(style.css);
57
+ for (const v of values) {
58
+ v.file = relative(cwd, filePath);
59
+ if (style.line)
60
+ v.line = style.line;
61
+ }
62
+ allValues.push(...values);
63
+ }
64
+ }
65
+ catch {
66
+ // Skip files that can't be read
67
+ }
68
+ }
69
+ return allValues;
70
+ }
71
+ export async function inferDesignSystem(cwd, config, options = {}) {
72
+ const files = await findStyleSources(cwd, config);
73
+ if (files.length === 0)
74
+ return null;
75
+ const values = await extractValues(cwd, files);
76
+ if (values.length === 0)
77
+ return null;
78
+ const result = generateTokens(values, { prefix: options.prefix || "" });
79
+ const tokens = result.tokens
80
+ .filter((t) => !t.isOrphan)
81
+ .sort((a, b) => b.occurrences - a.occurrences);
82
+ const nearDuplicates = tokens
83
+ .map((t) => ({ token: t, variants: [...new Set(t.sources.map(normalizeLiteral))] }))
84
+ .filter(({ token, variants }) => token.category === "color" && variants.length > 1);
85
+ const distinctColors = new Set(values.filter((v) => v.category === "color").map((v) => normalizeLiteral(v.value))).size;
86
+ return { filesScanned: files.length, valuesFound: values.length, result, tokens, nearDuplicates, distinctColors };
87
+ }
88
+ /** Plain-object view for JSON output and the MCP server. */
89
+ export function summarizeInferredSystem(system, limit = 40) {
90
+ const byCategory = {};
91
+ for (const t of system.tokens)
92
+ byCategory[t.category] = (byCategory[t.category] ?? 0) + 1;
93
+ return {
94
+ inferred: true,
95
+ filesScanned: system.filesScanned,
96
+ valuesFound: system.valuesFound,
97
+ distinctColors: system.distinctColors,
98
+ byCategory,
99
+ tokens: system.tokens.slice(0, limit).map((t) => ({
100
+ name: `--${t.name}`,
101
+ category: t.category,
102
+ value: t.value,
103
+ uses: t.occurrences,
104
+ // Only colors: spacing/type clustering is too coarse to tell an agent "use X instead".
105
+ ...(t.category === "color" && new Set(t.sources.map(normalizeLiteral)).size > 1
106
+ ? { replaces: [...new Set(t.sources.map(normalizeLiteral))] }
107
+ : {}),
108
+ })),
109
+ nearDuplicates: system.nearDuplicates.map(({ token, variants }) => ({
110
+ use: token.value,
111
+ insteadOf: variants.filter((v) => v !== normalizeLiteral(token.value)),
112
+ })),
113
+ };
114
+ }
115
+ /** Terminal block for `buoy scan` when the repo has no tokens. */
116
+ export function formatInferredSystem(system, chalk) {
117
+ const lines = [];
118
+ const colors = system.tokens.filter((t) => t.category === "color");
119
+ const spacing = system.tokens.filter((t) => t.category === "spacing");
120
+ const radius = system.tokens.filter((t) => t.category === "radius");
121
+ const fontSizes = system.tokens.filter((t) => t.category === "font-size");
122
+ lines.push(chalk.bold("No design tokens yet. Here is the system your code already uses:"));
123
+ lines.push(chalk.dim(` ${system.valuesFound} hardcoded values across ${system.filesScanned} ${system.filesScanned === 1 ? "file" : "files"}`));
124
+ lines.push("");
125
+ if (colors.length > 0) {
126
+ lines.push(` ${chalk.bold("Colors")} ${chalk.dim(`${system.distinctColors} distinct values → ${colors.length} colors`)}`);
127
+ for (const t of colors.slice(0, 8)) {
128
+ lines.push(` ${chalk.hex(safeHex(t.value))("■")} ${t.value.padEnd(10)} ${chalk.dim(`${t.occurrences} uses`)}`);
129
+ }
130
+ if (colors.length > 8)
131
+ lines.push(chalk.dim(` …and ${colors.length - 8} more`));
132
+ lines.push("");
133
+ }
134
+ const scale = (label, list) => {
135
+ if (list.length === 0)
136
+ return;
137
+ const values = [...list].sort((a, b) => parseFloat(a.value) - parseFloat(b.value)).map((t) => t.value);
138
+ lines.push(` ${chalk.bold(label)} ${values.join(" ")}`);
139
+ };
140
+ scale("Spacing", spacing);
141
+ scale("Radius ", radius);
142
+ scale("Type ", fontSizes);
143
+ if (spacing.length + radius.length + fontSizes.length > 0)
144
+ lines.push("");
145
+ if (system.nearDuplicates.length > 0) {
146
+ lines.push(chalk.yellow(` ${system.nearDuplicates.length} near-duplicate colors to merge:`));
147
+ for (const { token, variants } of system.nearDuplicates.slice(0, 5)) {
148
+ const others = variants.filter((v) => v !== normalizeLiteral(token.value));
149
+ lines.push(` ${others.join(", ")} ${chalk.dim("→")} ${token.value}`);
150
+ }
151
+ if (system.nearDuplicates.length > 5)
152
+ lines.push(chalk.dim(` …and ${system.nearDuplicates.length - 5} more`));
153
+ lines.push("");
154
+ }
155
+ lines.push(` ${chalk.cyan("buoy dock tokens")} ${chalk.dim("writes these as a tokens file; your agents and reviews will use it.")}`);
156
+ return lines.join("\n");
157
+ }
158
+ function safeHex(value) {
159
+ return /^#[0-9a-f]{3,8}$/i.test(value) ? value.slice(0, 7) : "#888888";
160
+ }
161
+ /** `#FFF` and `#ffffff` are the same literal. */
162
+ export function normalizeLiteral(value) {
163
+ const v = value.trim().toLowerCase();
164
+ const short = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(v);
165
+ return short ? `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}` : v;
166
+ }
167
+ //# sourceMappingURL=inferred-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferred-system.js","sourceRoot":"","sources":["../../src/services/inferred-system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-design/cli",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
4
4
  "description": "Catch design drift before it ships",
5
5
  "mcpName": "io.github.ahoybuoy/buoy",
6
6
  "type": "module",
@@ -49,8 +49,8 @@
49
49
  "yaml": "^2.8.2",
50
50
  "zod": "^3.24.1",
51
51
  "zod-validation-error": "^5.0.0",
52
- "@buoy-design/scanners": "0.8.2",
53
- "@buoy-design/core": "0.8.2"
52
+ "@buoy-design/core": "0.8.4",
53
+ "@buoy-design/scanners": "0.8.4"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/node": "^22.10.2",