@buoy-design/cli 0.8.0 → 0.8.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 (39) hide show
  1. package/dist/commands/fix.d.ts.map +1 -1
  2. package/dist/commands/fix.js +17 -0
  3. package/dist/commands/fix.js.map +1 -1
  4. package/dist/commands/mcp.d.ts.map +1 -1
  5. package/dist/commands/mcp.js +9 -2
  6. package/dist/commands/mcp.js.map +1 -1
  7. package/dist/config/auto-detect.js +6 -6
  8. package/dist/config/auto-detect.js.map +1 -1
  9. package/dist/detect/frameworks.js +6 -6
  10. package/dist/detect/frameworks.js.map +1 -1
  11. package/dist/detect/project-detector.js +13 -13
  12. package/dist/detect/project-detector.js.map +1 -1
  13. package/dist/mcp/file-check.d.ts.map +1 -1
  14. package/dist/mcp/file-check.js +5 -2
  15. package/dist/mcp/file-check.js.map +1 -1
  16. package/dist/mcp/hook.d.ts +0 -5
  17. package/dist/mcp/hook.d.ts.map +1 -1
  18. package/dist/mcp/hook.js +13 -2
  19. package/dist/mcp/hook.js.map +1 -1
  20. package/dist/mcp/project.d.ts +5 -0
  21. package/dist/mcp/project.d.ts.map +1 -1
  22. package/dist/mcp/project.js +42 -7
  23. package/dist/mcp/project.js.map +1 -1
  24. package/dist/services/drift-analysis.d.ts +0 -6
  25. package/dist/services/drift-analysis.d.ts.map +1 -1
  26. package/dist/services/drift-analysis.js +51 -47
  27. package/dist/services/drift-analysis.js.map +1 -1
  28. package/dist/services/repeated-patterns.d.ts +25 -0
  29. package/dist/services/repeated-patterns.d.ts.map +1 -0
  30. package/dist/services/repeated-patterns.js +74 -0
  31. package/dist/services/repeated-patterns.js.map +1 -0
  32. package/dist/services/stylesheet-drift.d.ts +8 -0
  33. package/dist/services/stylesheet-drift.d.ts.map +1 -0
  34. package/dist/services/stylesheet-drift.js +108 -0
  35. package/dist/services/stylesheet-drift.js.map +1 -0
  36. package/dist/store/index.d.ts.map +1 -1
  37. package/dist/store/index.js +2 -3
  38. package/dist/store/index.js.map +1 -1
  39. package/package.json +3 -3
@@ -0,0 +1,74 @@
1
+ export const REPEATED_PATTERN_MIN = { occurrences: 4, files: 3, classes: 4, stylingClasses: 3 };
2
+ const SIMILARITY = 0.75;
3
+ // Utilities that carry design decisions (colour, type, spacing, shape), as opposed
4
+ // to positioning, display, animation and interaction mechanics.
5
+ const STYLING = /^-?(bg|text|border|rounded|shadow|ring|outline|divide|font|leading|tracking|p[xytrblse]?|m[xytrblse]?|gap|space|decoration|placeholder|fill|stroke)(-|$)/;
6
+ function utilityOf(cls) {
7
+ return cls.replace(/^(?:(?:[^[\]:]|\[[^\]]*\])*:)*/, "");
8
+ }
9
+ export function stylingClassCount(classes) {
10
+ return classes.filter((c) => STYLING.test(utilityOf(c))).length;
11
+ }
12
+ function jaccard(a, b) {
13
+ let inter = 0;
14
+ for (const x of a)
15
+ if (b.has(x))
16
+ inter++;
17
+ return inter / (a.size + b.size - inter);
18
+ }
19
+ /** Merge near-identical patterns, drop non-styling ones, apply thresholds, and write useful messages. */
20
+ export function consolidateRepeatedPatterns(drifts, min = REPEATED_PATTERN_MIN) {
21
+ const candidates = drifts
22
+ .map((d) => ({
23
+ pattern: d.source.entityName ?? "",
24
+ locations: (d.details?.locations ?? []).slice(),
25
+ }))
26
+ .filter((c) => {
27
+ const classes = c.pattern.split(/\s+/).filter(Boolean);
28
+ return classes.length >= min.classes && stylingClassCount(classes) >= min.stylingClasses;
29
+ })
30
+ .sort((a, b) => b.locations.length - a.locations.length);
31
+ const clusters = [];
32
+ for (const c of candidates) {
33
+ const classes = new Set(c.pattern.split(/\s+/).filter(Boolean));
34
+ const home = clusters.find((k) => jaccard(k.classes, classes) >= SIMILARITY);
35
+ if (home) {
36
+ home.locations.push(...c.locations);
37
+ home.variants++;
38
+ }
39
+ else {
40
+ clusters.push({ pattern: c.pattern, classes, locations: c.locations, variants: 1 });
41
+ }
42
+ }
43
+ const out = [];
44
+ for (const k of clusters) {
45
+ const locations = [...new Set(k.locations)];
46
+ const files = [...new Set(locations.map((l) => l.split(":")[0]))];
47
+ if (locations.length < min.occurrences || files.length < min.files)
48
+ continue;
49
+ const classes = k.pattern.split(/\s+/).filter(Boolean);
50
+ // Lead with the styling classes; the detector sorts alphabetically.
51
+ const ordered = [...classes.filter((c) => STYLING.test(utilityOf(c))), ...classes.filter((c) => !STYLING.test(utilityOf(c)))];
52
+ const shown = ordered.slice(0, 6).join(" ") + (ordered.length > 6 ? ` … (+${ordered.length - 6})` : "");
53
+ const variantNote = k.variants > 1 ? ` in ${k.variants} slight variations` : "";
54
+ const first = locations[0];
55
+ out.push({
56
+ id: `drift:repeated-pattern:${classes.slice(0, 8).join("-")}`,
57
+ type: "repeated-pattern",
58
+ severity: "info",
59
+ source: { entityType: "component", entityId: `pattern:${classes.slice(0, 8).join("-")}`, entityName: k.pattern, location: first },
60
+ message: `The same styling is copied ${locations.length} times across ${files.length} files${variantNote}: "${shown}". Extract a shared component or a variant so one change updates every copy.`,
61
+ details: {
62
+ occurrences: locations.length,
63
+ locations,
64
+ affectedFiles: files,
65
+ suggestions: [
66
+ `Create one component (or a cva/tailwind-variants variant) for this styling and use it in ${files.slice(0, 3).join(", ")}${files.length > 3 ? ` and ${files.length - 3} more` : ""}`,
67
+ ],
68
+ },
69
+ detectedAt: new Date(),
70
+ });
71
+ }
72
+ return out;
73
+ }
74
+ //# sourceMappingURL=repeated-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repeated-patterns.js","sourceRoot":"","sources":["../../src/services/repeated-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { DesignToken, DriftSignal } from "@buoy-design/core";
2
+ import { type FileIssue } from "../mcp/file-check.js";
3
+ /** `<style>` blocks of a Vue or Svelte file, as CSS padded with blank lines so line numbers stay true. */
4
+ export declare function styleBlocksAsCss(content: string): string;
5
+ export declare function checkStylesheets(projectRoot: string, tokens: DesignToken[]): Promise<FileIssue[]>;
6
+ /** One drift per file, like the Tailwind findings: names the values and any exact token. */
7
+ export declare function stylesheetIssuesToDrifts(issues: FileIssue[], projectRoot: string): DriftSignal[];
8
+ //# sourceMappingURL=stylesheet-drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stylesheet-drift.d.ts","sourceRoot":"","sources":["../../src/services/stylesheet-drift.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAyC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAe7F,0GAA0G;AAC1G,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBvG;AAUD,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,CAyBhG"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Hardcoded design values in stylesheets and Vue/Svelte <style> blocks.
3
+ *
4
+ * `drift check` analysed components and Tailwind classes but never looked
5
+ * inside .css/.scss files, so `.btn { color: #3b82f6 }` next to
6
+ * `--brand: #3b82f6` went unreported while PR reviews and the agent hook
7
+ * flagged it. This runs the same per-line rules (mcp/file-check.ts) over
8
+ * stylesheets and groups the results per file.
9
+ */
10
+ import { readFile } from "node:fs/promises";
11
+ import { relative, resolve } from "node:path";
12
+ import { glob } from "glob";
13
+ import { classifyFileContext } from "@buoy-design/core";
14
+ import { extractFileSignals, issuesFromSignals } from "../mcp/file-check.js";
15
+ const STYLESHEETS = ["**/*.css", "**/*.scss", "**/*.vue", "**/*.svelte"];
16
+ const IGNORE = ["**/node_modules/**", "**/dist/**", "**/build/**", "**/.next/**", "**/out/**", "**/coverage/**",
17
+ "**/vendor/**", "**/*.min.css", "**/public/**", "**/storybook-static/**"];
18
+ const MAX_BYTES = 400_000;
19
+ // Same categories the Tailwind rules count as design values. Motion (durations,
20
+ // easing), z-index, opacity and font-family keywords are mechanics or stacks,
21
+ // not token drift, in stylesheets as in utility classes.
22
+ const DESIGN_TYPES = new Set([
23
+ "hardcoded-color", "hardcoded-spacing", "hardcoded-font-size", "hardcoded-radius", "hardcoded-shadow",
24
+ "hardcoded-font-weight", "hardcoded-line-height", "hardcoded-letter-spacing", "hardcoded-border-width",
25
+ ]);
26
+ /** `<style>` blocks of a Vue or Svelte file, as CSS padded with blank lines so line numbers stay true. */
27
+ export function styleBlocksAsCss(content) {
28
+ const lines = content.split("\n");
29
+ const out = lines.map(() => "");
30
+ let inStyle = false;
31
+ lines.forEach((line, i) => {
32
+ if (/<style[\s>]/i.test(line)) {
33
+ inStyle = true;
34
+ const after = line.replace(/.*<style[^>]*>/i, "");
35
+ if (after.trim())
36
+ out[i] = after;
37
+ return;
38
+ }
39
+ if (/<\/style>/i.test(line)) {
40
+ inStyle = false;
41
+ out[i] = line.replace(/<\/style>.*/i, "");
42
+ return;
43
+ }
44
+ if (inStyle)
45
+ out[i] = line;
46
+ });
47
+ return out.join("\n");
48
+ }
49
+ export async function checkStylesheets(projectRoot, tokens) {
50
+ const files = (await glob(STYLESHEETS, { cwd: projectRoot, ignore: IGNORE, nodir: true })).sort();
51
+ const issues = [];
52
+ for (const file of files) {
53
+ let content;
54
+ try {
55
+ content = await readFile(resolve(projectRoot, file), "utf-8");
56
+ }
57
+ catch {
58
+ continue;
59
+ }
60
+ if (content.length > MAX_BYTES || classifyFileContext(file, content))
61
+ continue;
62
+ const isComponent = /\.(vue|svelte)$/.test(file);
63
+ const css = isComponent ? styleBlocksAsCss(content) : content;
64
+ // Scan as CSS so the CSS property table applies; report the real path.
65
+ const signals = extractFileSignals(css, isComponent ? `${file}.css` : file).map((s) => ({
66
+ ...s,
67
+ location: { ...s.location, path: file },
68
+ }));
69
+ issues.push(...issuesFromSignals(signals, tokens).filter((i) => DESIGN_TYPES.has(i.type)));
70
+ }
71
+ return issues;
72
+ }
73
+ const KIND = {
74
+ "hardcoded-color": "colour", "hardcoded-spacing": "spacing", "hardcoded-font-size": "font size",
75
+ "hardcoded-radius": "radius", "hardcoded-shadow": "shadow", "hardcoded-font-weight": "font weight",
76
+ "hardcoded-line-height": "line height", "hardcoded-letter-spacing": "letter spacing", "hardcoded-font-family": "font family",
77
+ "hardcoded-z-index": "z-index", "hardcoded-border-width": "border width", "hardcoded-opacity": "opacity",
78
+ "hardcoded-motion-duration": "duration", "hardcoded-motion-easing": "easing",
79
+ };
80
+ /** One drift per file, like the Tailwind findings: names the values and any exact token. */
81
+ export function stylesheetIssuesToDrifts(issues, projectRoot) {
82
+ const byFile = new Map();
83
+ for (const issue of issues)
84
+ byFile.set(issue.file, [...(byFile.get(issue.file) ?? []), issue]);
85
+ const drifts = [];
86
+ for (const [file, list] of byFile) {
87
+ const path = relative(projectRoot, resolve(projectRoot, file)) || file;
88
+ const kinds = [...new Set(list.map((i) => KIND[i.type] ?? i.type.replace(/^hardcoded-/, "")))];
89
+ const values = [...new Set(list.map((i) => (i.suggested ? `${i.current} (use ${i.suggested})` : i.current)))];
90
+ const shown = values.slice(0, 4).join(", ") + (values.length > 4 ? ` and ${values.length - 4} more` : "");
91
+ const withToken = list.filter((i) => i.suggested);
92
+ drifts.push({
93
+ id: `drift:hardcoded-value:stylesheet:${path}`,
94
+ type: "hardcoded-value",
95
+ severity: withToken.length > 0 || kinds.includes("colour") ? "warning" : "info",
96
+ source: { entityType: "component", entityId: `stylesheet:${path}`, entityName: path, location: `${path}:${list[0].line}` },
97
+ message: `Hardcoded ${kinds.join(" / ")} in ${path}: ${shown}.`,
98
+ details: {
99
+ affectedFiles: list.map((i) => `${KIND[i.type] ?? i.type}: ${i.current} (line ${i.line})`),
100
+ tokenSuggestions: withToken.length ? [...new Set(withToken.map((i) => `${i.current} → ${i.suggested}`))] : undefined,
101
+ suggestions: [withToken.length ? "Replace each value with the token that already has it" : "Use a design token instead of the literal value"],
102
+ },
103
+ detectedAt: new Date(),
104
+ });
105
+ }
106
+ return drifts;
107
+ }
108
+ //# sourceMappingURL=stylesheet-drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stylesheet-drift.js","sourceRoot":"","sources":["../../src/services/stylesheet-drift.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAE,WAAgB,GAAG,SAAS,CAyB/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAE1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,WAAgB,GAAG,OAAO,CAI/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAoBlE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAE,WAAgB,GAAG,SAAS,CAyB/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAE1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,WAAgB,GAAG,OAAO,CAI/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAgBlE"}
@@ -10,6 +10,8 @@ export { CloudScanStore } from './cloud-store.js';
10
10
  import { LocalScanStore } from './local-store.js';
11
11
  import { CloudScanStore } from './cloud-store.js';
12
12
  import { isLoggedIn, getApiToken } from '../cloud/index.js';
13
+ import { readFileSync } from 'fs';
14
+ import { basename, join } from 'path';
13
15
  /**
14
16
  * Default Buoy Cloud API URL.
15
17
  */
@@ -73,8 +75,6 @@ export function wouldUseCloud(config = {}) {
73
75
  */
74
76
  export function getProjectName(cwd = process.cwd()) {
75
77
  try {
76
- const { readFileSync } = require('fs');
77
- const { join, basename } = require('path');
78
78
  const pkgPath = join(cwd, 'package.json');
79
79
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
80
80
  // Use package name, but strip scope if present
@@ -86,7 +86,6 @@ export function getProjectName(cwd = process.cwd()) {
86
86
  }
87
87
  catch {
88
88
  // No package.json or invalid JSON - use directory name
89
- const { basename } = require('path');
90
89
  return basename(cwd);
91
90
  }
92
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoB5D;;GAEG;AACH,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,SAAsB,EAAE;IAClD,2BAA2B;IAC3B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,qCAAqC;IACrC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC;YAC3D,OAAO,IAAI,cAAc,CAAC;gBACxB,MAAM;gBACN,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB;IACxD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAsB,EAAE;IACpD,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAEvD,+CAA+C;QAC/C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,6BAA6B;QAC7B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoBtC;;GAEG;AACH,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,SAAsB,EAAE;IAClD,2BAA2B;IAC3B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,qCAAqC;IACrC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC;YAC3D,OAAO,IAAI,cAAc,CAAC;gBACxB,MAAM;gBACN,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB;IACxD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAsB,EAAE;IACpD,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAEvD,+CAA+C;QAC/C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,6BAA6B;QAC7B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-design/cli",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
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/core": "0.8.0",
53
- "@buoy-design/scanners": "0.8.0"
52
+ "@buoy-design/scanners": "0.8.2",
53
+ "@buoy-design/core": "0.8.2"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/node": "^22.10.2",