@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,168 @@
1
+ // apps/cli/src/commands/check.ts
2
+ import { Command } from "commander";
3
+ import { loadConfig, getConfigPath } from "../config/loader.js";
4
+ import { execSync } from "node:child_process";
5
+ import { DriftAnalysisService, hasDriftsAboveThreshold, calculateDriftSummary, } from "../services/drift-analysis.js";
6
+ /**
7
+ * Get list of staged files from git
8
+ */
9
+ export function getStagedFiles() {
10
+ try {
11
+ const output = execSync("git diff --cached --name-only --diff-filter=ACMR", {
12
+ encoding: "utf-8",
13
+ stdio: ["pipe", "pipe", "pipe"],
14
+ });
15
+ return output
16
+ .split("\n")
17
+ .map((f) => f.trim())
18
+ .filter(Boolean);
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ /**
25
+ * Filter files to only include scannable extensions
26
+ */
27
+ export function filterScannableFiles(files) {
28
+ const scannableExtensions = [
29
+ // React/JS
30
+ ".tsx",
31
+ ".jsx",
32
+ ".ts",
33
+ ".js",
34
+ // Vue
35
+ ".vue",
36
+ // Svelte
37
+ ".svelte",
38
+ // Angular
39
+ ".component.ts",
40
+ // Templates
41
+ ".blade.php",
42
+ ".erb",
43
+ ".twig",
44
+ ".njk",
45
+ ".html",
46
+ // Tokens
47
+ ".css",
48
+ ".scss",
49
+ ".json",
50
+ ];
51
+ return files.filter((file) => scannableExtensions.some((ext) => file.endsWith(ext)));
52
+ }
53
+ /**
54
+ * Check if a drift signal is from a staged file
55
+ */
56
+ export function isFromStagedFile(drift, stagedFiles) {
57
+ const location = drift.source.location;
58
+ if (!location)
59
+ return true; // Include drifts without location
60
+ // Extract file path from location (format: "path/to/file.tsx:line")
61
+ const filePath = location.split(":")[0];
62
+ // Check if the file path matches any staged file
63
+ if (!filePath)
64
+ return true;
65
+ return stagedFiles.some((stagedFile) => filePath === stagedFile ||
66
+ filePath.endsWith(`/${stagedFile}`) ||
67
+ stagedFile.endsWith(`/${filePath}`));
68
+ }
69
+ export function createCheckCommand() {
70
+ const cmd = new Command("check")
71
+ .description("Fast drift check for pre-commit hooks")
72
+ .option("--fail-on <severity>", "Exit 1 if drift at this severity or higher: critical, warning, info, none", "critical")
73
+ .option("--staged", "Only check staged files (for pre-commit hooks)")
74
+ .option("--quiet", "Suppress all output except errors")
75
+ .option("-v, --verbose", "Show detailed output")
76
+ .action(async (options) => {
77
+ const log = options.quiet
78
+ ? () => { }
79
+ : options.verbose
80
+ ? console.error.bind(console)
81
+ : () => { };
82
+ try {
83
+ // Check for config
84
+ if (!getConfigPath()) {
85
+ log("No buoy.config.mjs found, skipping check");
86
+ process.exit(0);
87
+ }
88
+ // Get staged files if --staged flag is used
89
+ let stagedFiles = [];
90
+ if (options.staged) {
91
+ stagedFiles = getStagedFiles();
92
+ const scannableStaged = filterScannableFiles(stagedFiles);
93
+ if (scannableStaged.length === 0) {
94
+ log("No scannable files staged, skipping check");
95
+ process.exit(0);
96
+ }
97
+ log(`Checking ${scannableStaged.length} staged file(s)...`);
98
+ }
99
+ log("Loading configuration...");
100
+ const { config } = await loadConfig();
101
+ log("Scanning for drift...");
102
+ // Use consolidated drift analysis service
103
+ const service = new DriftAnalysisService(config);
104
+ const result = await service.analyze({
105
+ onProgress: log,
106
+ includeBaseline: false,
107
+ });
108
+ let drifts = result.drifts;
109
+ // Filter to staged files only if --staged is used
110
+ if (options.staged && stagedFiles.length > 0) {
111
+ drifts = drifts.filter((d) => isFromStagedFile(d, stagedFiles));
112
+ }
113
+ // Determine exit code using shared utility
114
+ const failOn = options.failOn;
115
+ const exitCode = hasDriftsAboveThreshold(drifts, failOn) ? 1 : 0;
116
+ // Summary counts using shared utility
117
+ const summary = calculateDriftSummary(drifts);
118
+ // Output
119
+ if (!options.quiet) {
120
+ if (exitCode === 0) {
121
+ if (summary.total === 0) {
122
+ console.log("+ No drift detected");
123
+ }
124
+ else {
125
+ console.log(`+ Check passed (${summary.total} drift${summary.total !== 1 ? "s" : ""} below threshold)`);
126
+ }
127
+ }
128
+ else {
129
+ console.log("x Drift detected");
130
+ console.log("");
131
+ console.log(` Critical: ${summary.critical}`);
132
+ console.log(` Warning: ${summary.warning}`);
133
+ console.log(` Info: ${summary.info}`);
134
+ if (options.verbose) {
135
+ console.log("");
136
+ console.log("Issues:");
137
+ for (const drift of drifts.slice(0, 10)) {
138
+ const sev = drift.severity === "critical"
139
+ ? "!"
140
+ : drift.severity === "warning"
141
+ ? "~"
142
+ : "i";
143
+ const loc = drift.source.location
144
+ ? ` (${drift.source.location})`
145
+ : "";
146
+ console.log(` [${sev}] ${drift.source.entityName}: ${drift.message}${loc}`);
147
+ }
148
+ if (drifts.length > 10) {
149
+ console.log(` ... and ${drifts.length - 10} more`);
150
+ }
151
+ }
152
+ console.log("");
153
+ console.log("Run `buoy drift check` for details");
154
+ }
155
+ }
156
+ process.exit(exitCode);
157
+ }
158
+ catch (err) {
159
+ const message = err instanceof Error ? err.message : String(err);
160
+ if (!options.quiet) {
161
+ console.error(`Error: ${message}`);
162
+ }
163
+ process.exit(1);
164
+ }
165
+ });
166
+ return cmd;
167
+ }
168
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Command } from 'commander';
2
- import type { Severity } from '@buoy-design/core';
1
+ import { Command } from "commander";
2
+ import type { Severity } from "@buoy-design/core";
3
3
  export interface CIOutput {
4
4
  version: string;
5
5
  timestamp: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AA+DD,wBAAgB,eAAe,IAAI,OAAO,CAiLzC"}
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAc/D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8DD,wBAAgB,eAAe,IAAI,OAAO,CAoLzC"}
@@ -1,20 +1,17 @@
1
1
  // apps/cli/src/commands/ci.ts
2
- import { Command } from 'commander';
3
- import { loadConfig, getConfigPath } from '../config/loader.js';
4
- import { loadDiscoveredPlugins, registry } from '../plugins/index.js';
5
- import { setJsonMode } from '../output/reporters.js';
6
- const SEVERITY_ORDER = {
7
- info: 0,
8
- warning: 1,
9
- critical: 2,
10
- };
2
+ import { Command } from "commander";
3
+ import { loadConfig, getConfigPath } from "../config/loader.js";
4
+ import { setJsonMode } from "../output/reporters.js";
5
+ import { GitHubClient, parseRepoString, formatPRComment, formatAIPRComment, } from "../integrations/index.js";
6
+ import { DriftAnalysisService, hasDriftsAboveThreshold, sortDriftsBySeverity, } from "../services/drift-analysis.js";
7
+ import { AIAnalysisService } from "../services/ai-analysis.js";
11
8
  function validateGitHubOptions(options) {
12
9
  const token = options.githubToken || process.env.GITHUB_TOKEN;
13
10
  const repo = options.githubRepo || process.env.GITHUB_REPOSITORY;
14
11
  const prInput = options.githubPr || process.env.GITHUB_PR_NUMBER;
15
12
  // Validate token: must be non-empty if provided
16
- if (token !== undefined && token.trim() === '') {
17
- throw new Error('Invalid GitHub token: must be non-empty if provided.');
13
+ if (token !== undefined && token.trim() === "") {
14
+ throw new Error("Invalid GitHub token: must be non-empty if provided.");
18
15
  }
19
16
  // Validate repo format: must be "owner/repo" with non-empty parts
20
17
  if (repo !== undefined) {
@@ -22,8 +19,8 @@ function validateGitHubOptions(options) {
22
19
  if (!repoPattern.test(repo)) {
23
20
  throw new Error(`Invalid GitHub repo format: '${repo}'. Must be in 'owner/repo' format (e.g., 'facebook/react').`);
24
21
  }
25
- const [owner, repoName] = repo.split('/');
26
- if (!owner || owner.trim() === '' || !repoName || repoName.trim() === '') {
22
+ const [owner, repoName] = repo.split("/");
23
+ if (!owner || owner.trim() === "" || !repoName || repoName.trim() === "") {
27
24
  throw new Error(`Invalid GitHub repo format: '${repo}'. Both owner and repo parts must be non-empty.`);
28
25
  }
29
26
  }
@@ -31,7 +28,10 @@ function validateGitHubOptions(options) {
31
28
  let pr;
32
29
  if (prInput !== undefined) {
33
30
  const parsed = parseInt(prInput, 10);
34
- if (isNaN(parsed) || parsed <= 0 || !Number.isInteger(parsed) || String(parsed) !== prInput.trim()) {
31
+ if (isNaN(parsed) ||
32
+ parsed <= 0 ||
33
+ !Number.isInteger(parsed) ||
34
+ String(parsed) !== prInput.trim()) {
35
35
  throw new Error(`Invalid PR number: '${prInput}'. Must be a positive integer.`);
36
36
  }
37
37
  pr = parsed;
@@ -43,18 +43,23 @@ function validateGitHubOptions(options) {
43
43
  };
44
44
  }
45
45
  export function createCICommand() {
46
- const cmd = new Command('ci')
47
- .description('Run drift detection for CI environments')
48
- .option('--fail-on <severity>', 'Exit 1 if drift at this severity or higher: critical, warning, info, none', 'critical')
49
- .option('--format <format>', 'Output format: json, summary', 'json')
50
- .option('--quiet', 'Suppress non-essential output')
51
- .option('--top <n>', 'Number of top issues to include', '10')
52
- .option('--github-token <token>', 'GitHub token for PR comments (or use GITHUB_TOKEN env)')
53
- .option('--github-repo <repo>', 'GitHub repo in owner/repo format (or use GITHUB_REPOSITORY env)')
54
- .option('--github-pr <number>', 'PR number to comment on (or use GITHUB_PR_NUMBER env)')
46
+ const cmd = new Command("ci")
47
+ .description("Run drift detection for CI environments")
48
+ .option("--fail-on <severity>", "Exit 1 if drift at this severity or higher: critical, warning, info, none", "critical")
49
+ .option("--json", "Output as JSON (default)")
50
+ .option("--format <format>", "Output format: json, summary", "json")
51
+ .option("--quiet", "Suppress non-essential output")
52
+ .option("--top <n>", "Number of top issues to include", "10")
53
+ .option("--include-baseline", "Include baselined drifts (by default only new issues shown)")
54
+ .option("--github-token <token>", "GitHub token for PR comments (or use GITHUB_TOKEN env)")
55
+ .option("--github-repo <repo>", "GitHub repo in owner/repo format (or use GITHUB_REPOSITORY env)")
56
+ .option("--github-pr <number>", "PR number to comment on (or use GITHUB_PR_NUMBER env)")
57
+ .option("--ai", "Enable AI-powered analysis (requires ANTHROPIC_API_KEY env)")
58
+ .option("--no-ai", "Disable AI analysis even if ANTHROPIC_API_KEY is set")
55
59
  .action(async (options) => {
56
60
  // Set JSON mode to ensure any reporter output goes to stderr
57
- if (options.format === 'json') {
61
+ // --json flag takes precedence, but --format also works
62
+ if (options.json || options.format === "json") {
58
63
  setJsonMode(true);
59
64
  }
60
65
  const log = options.quiet ? () => { } : console.error.bind(console);
@@ -64,7 +69,7 @@ export function createCICommand() {
64
69
  // Check for config
65
70
  if (!getConfigPath()) {
66
71
  const output = {
67
- version: '0.0.1',
72
+ version: "0.0.1",
68
73
  timestamp: new Date().toISOString(),
69
74
  summary: { total: 0, critical: 0, warning: 0, info: 0 },
70
75
  topIssues: [],
@@ -73,127 +78,104 @@ export function createCICommand() {
73
78
  console.log(JSON.stringify(output, null, 2));
74
79
  return;
75
80
  }
76
- log('Loading configuration...');
81
+ log("Loading configuration...");
77
82
  const { config } = await loadConfig();
78
- log('Loading plugins...');
79
- await loadDiscoveredPlugins({ projectRoot: process.cwd() });
80
- log('Scanning for drift...');
81
- // Import analysis modules
82
- const { ReactComponentScanner } = await import('@buoy-design/scanners/git');
83
- const { SemanticDiffEngine } = await import('@buoy-design/core/analysis');
84
- // Scan components
85
- const components = [];
86
- // Determine which sources to scan from config
87
- const sourcesToScan = [];
88
- if (config.sources.react?.enabled)
89
- sourcesToScan.push('react');
90
- if (config.sources.vue?.enabled)
91
- sourcesToScan.push('vue');
92
- if (config.sources.svelte?.enabled)
93
- sourcesToScan.push('svelte');
94
- if (config.sources.angular?.enabled)
95
- sourcesToScan.push('angular');
96
- // Scan each source
97
- for (const source of sourcesToScan) {
98
- const plugin = registry.getByDetection(source);
99
- if (plugin && plugin.scan) {
100
- // Use plugin
101
- const sourceConfig = config.sources[source];
102
- const result = await plugin.scan({
103
- projectRoot: process.cwd(),
104
- config: sourceConfig || {},
105
- include: sourceConfig?.include,
106
- exclude: sourceConfig?.exclude,
107
- });
108
- components.push(...result.components);
109
- if (result.errors && result.errors.length > 0) {
110
- for (const err of result.errors) {
111
- log(`[${source}] ${err.file || ''}: ${err.message}`);
112
- }
113
- }
114
- }
115
- else {
116
- // Fall back to bundled scanner
117
- if (source === 'react' && config.sources.react) {
118
- const scanner = new ReactComponentScanner({
119
- projectRoot: process.cwd(),
120
- include: config.sources.react.include,
121
- exclude: config.sources.react.exclude,
122
- designSystemPackage: config.sources.react.designSystemPackage,
123
- });
124
- const result = await scanner.scan();
125
- components.push(...result.items);
126
- }
127
- // Add other framework fallbacks as needed
128
- }
129
- }
130
- // Run semantic diff
131
- const engine = new SemanticDiffEngine();
132
- const diffResult = engine.analyzeComponents(components, {
133
- checkDeprecated: true,
134
- checkNaming: true,
135
- checkDocumentation: true,
83
+ log("Scanning for drift...");
84
+ // Use consolidated drift analysis service
85
+ const service = new DriftAnalysisService(config);
86
+ const result = await service.analyze({
87
+ onProgress: log,
88
+ includeBaseline: options.includeBaseline,
136
89
  });
137
- let drifts = diffResult.drifts;
138
- // Apply ignore rules
139
- for (const ignoreRule of config.drift.ignore) {
140
- drifts = drifts.filter(d => {
141
- if (d.type !== ignoreRule.type)
142
- return true;
143
- if (!ignoreRule.pattern)
144
- return false;
145
- const regex = new RegExp(ignoreRule.pattern);
146
- return !regex.test(d.source.entityName);
147
- });
148
- }
90
+ const drifts = result.drifts;
149
91
  // Build output
150
92
  const output = buildCIOutput(drifts, options);
151
93
  // Post to GitHub if configured (using pre-validated values)
152
94
  if (github.token && github.repo && github.pr) {
153
95
  try {
154
- const githubPlugin = registry.get('@buoy-design/plugin-github');
155
- if (githubPlugin && githubPlugin.report) {
156
- log('Posting to GitHub PR...');
157
- const driftResult = {
158
- signals: drifts.map(d => ({
96
+ const { owner, repo: repoName } = parseRepoString(github.repo);
97
+ const client = new GitHubClient({
98
+ token: github.token,
99
+ owner,
100
+ repo: repoName,
101
+ prNumber: github.pr,
102
+ });
103
+ // Get PR info for context
104
+ let prAuthor;
105
+ let filesChanged;
106
+ try {
107
+ const prInfo = await client.getPRInfo();
108
+ prAuthor = prInfo.author;
109
+ filesChanged = prInfo.filesChanged.map((f) => f.filename);
110
+ }
111
+ catch {
112
+ // PR info is optional, continue without it
113
+ }
114
+ let comment;
115
+ // Use AI analysis if enabled
116
+ const useAI = options.ai !== false && process.env.ANTHROPIC_API_KEY;
117
+ if (useAI && drifts.length > 0) {
118
+ log("Running AI analysis...");
119
+ const aiService = new AIAnalysisService();
120
+ const analysis = await aiService.analyzePR(drifts, {
121
+ projectRoot: process.cwd(),
122
+ prNumber: github.pr,
123
+ prAuthor,
124
+ filesChanged,
125
+ });
126
+ log("Generating AI-powered PR comment...");
127
+ comment = formatAIPRComment(analysis, {
128
+ signals: drifts.map((d) => ({
159
129
  type: d.type,
160
130
  severity: d.severity,
161
131
  message: d.message,
162
132
  component: d.source.entityName,
163
- file: d.source.location?.split(':')[0],
164
- line: d.source.location?.includes(':')
165
- ? parseInt(d.source.location.split(':')[1] || '0', 10)
133
+ file: d.source.location?.split(":")[0],
134
+ line: d.source.location?.includes(":")
135
+ ? parseInt(d.source.location.split(":")[1] || "0", 10)
166
136
  : undefined,
167
137
  suggestion: d.details.suggestions?.[0],
168
138
  })),
169
139
  summary: {
170
140
  total: drifts.length,
171
- critical: drifts.filter(d => d.severity === 'critical').length,
172
- warning: drifts.filter(d => d.severity === 'warning').length,
173
- info: drifts.filter(d => d.severity === 'info').length,
174
- },
175
- };
176
- await githubPlugin.report(driftResult, {
177
- ci: true,
178
- format: 'markdown',
179
- github: {
180
- token: github.token,
181
- repo: github.repo,
182
- pr: github.pr,
141
+ critical: drifts.filter((d) => d.severity === "critical").length,
142
+ warning: drifts.filter((d) => d.severity === "warning").length,
143
+ info: drifts.filter((d) => d.severity === "info").length,
183
144
  },
184
145
  });
185
- log('Posted PR comment');
186
146
  }
187
147
  else {
188
- log('GitHub plugin not installed, skipping PR comment');
148
+ log("Posting to GitHub PR...");
149
+ const driftResult = {
150
+ signals: drifts.map((d) => ({
151
+ type: d.type,
152
+ severity: d.severity,
153
+ message: d.message,
154
+ component: d.source.entityName,
155
+ file: d.source.location?.split(":")[0],
156
+ line: d.source.location?.includes(":")
157
+ ? parseInt(d.source.location.split(":")[1] || "0", 10)
158
+ : undefined,
159
+ suggestion: d.details.suggestions?.[0],
160
+ })),
161
+ summary: {
162
+ total: drifts.length,
163
+ critical: drifts.filter((d) => d.severity === "critical").length,
164
+ warning: drifts.filter((d) => d.severity === "warning").length,
165
+ info: drifts.filter((d) => d.severity === "info").length,
166
+ },
167
+ };
168
+ comment = formatPRComment(driftResult);
189
169
  }
170
+ await client.createOrUpdateComment(comment);
171
+ log("Posted PR comment");
190
172
  }
191
173
  catch (err) {
192
174
  const msg = err instanceof Error ? err.message : String(err);
193
175
  log(`Failed to post GitHub comment: ${msg}`);
194
176
  }
195
177
  }
196
- if (options.format === 'json') {
178
+ if (options.format === "json") {
197
179
  console.log(JSON.stringify(output, null, 2));
198
180
  }
199
181
  else {
@@ -212,15 +194,15 @@ export function createCICommand() {
212
194
  function buildCIOutput(drifts, options) {
213
195
  const summary = {
214
196
  total: drifts.length,
215
- critical: drifts.filter(d => d.severity === 'critical').length,
216
- warning: drifts.filter(d => d.severity === 'warning').length,
217
- info: drifts.filter(d => d.severity === 'info').length,
197
+ critical: drifts.filter((d) => d.severity === "critical").length,
198
+ warning: drifts.filter((d) => d.severity === "warning").length,
199
+ info: drifts.filter((d) => d.severity === "info").length,
218
200
  };
219
- // Sort by severity (critical first)
220
- const sorted = [...drifts].sort((a, b) => SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity]);
201
+ // Sort by severity (critical first) using shared utility
202
+ const sorted = sortDriftsBySeverity(drifts);
221
203
  const topN = parseInt(options.top, 10) || 10;
222
- const topIssues = sorted.slice(0, topN).map(d => {
223
- const locationParts = d.source.location?.split(':');
204
+ const topIssues = sorted.slice(0, topN).map((d) => {
205
+ const locationParts = d.source.location?.split(":");
224
206
  return {
225
207
  type: d.type,
226
208
  severity: d.severity,
@@ -231,16 +213,11 @@ function buildCIOutput(drifts, options) {
231
213
  suggestion: d.details.suggestions?.[0],
232
214
  };
233
215
  });
234
- // Determine exit code
235
- let exitCode = 0;
216
+ // Determine exit code using shared utility
236
217
  const failOn = options.failOn;
237
- if (failOn !== 'none') {
238
- const threshold = SEVERITY_ORDER[failOn] ?? SEVERITY_ORDER.critical;
239
- const hasFailure = drifts.some(d => SEVERITY_ORDER[d.severity] >= threshold);
240
- exitCode = hasFailure ? 1 : 0;
241
- }
218
+ const exitCode = hasDriftsAboveThreshold(drifts, failOn) ? 1 : 0;
242
219
  return {
243
- version: '0.0.1',
220
+ version: "0.0.1",
244
221
  timestamp: new Date().toISOString(),
245
222
  summary,
246
223
  topIssues,
@@ -248,21 +225,26 @@ function buildCIOutput(drifts, options) {
248
225
  };
249
226
  }
250
227
  function printSummary(output) {
251
- const icon = output.exitCode === 0 ? '✓' : '✗';
252
- const status = output.exitCode === 0 ? 'PASS' : 'FAIL';
228
+ const icon = output.exitCode === 0 ? "+" : "x";
229
+ const status = output.exitCode === 0 ? "PASS" : "FAIL";
253
230
  console.log(`${icon} Buoy Drift Check: ${status}`);
254
- console.log('');
231
+ console.log("");
255
232
  console.log(` Total: ${output.summary.total}`);
256
233
  console.log(` Critical: ${output.summary.critical}`);
257
234
  console.log(` Warning: ${output.summary.warning}`);
258
235
  console.log(` Info: ${output.summary.info}`);
259
236
  if (output.topIssues.length > 0) {
260
- console.log('');
261
- console.log('Top issues:');
237
+ console.log("");
238
+ console.log("Top issues:");
262
239
  for (const issue of output.topIssues.slice(0, 5)) {
263
- const sev = issue.severity === 'critical' ? '!' :
264
- issue.severity === 'warning' ? '~' : 'i';
265
- const loc = issue.file ? ` (${issue.file}${issue.line ? `:${issue.line}` : ''})` : '';
240
+ const sev = issue.severity === "critical"
241
+ ? "!"
242
+ : issue.severity === "warning"
243
+ ? "~"
244
+ : "i";
245
+ const loc = issue.file
246
+ ? ` (${issue.file}${issue.line ? `:${issue.line}` : ""})`
247
+ : "";
266
248
  console.log(` [${sev}] ${issue.component}: ${issue.message}${loc}`);
267
249
  }
268
250
  if (output.topIssues.length > 5) {
@@ -1 +1 @@
1
- {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createCompareCommand(): Command;
3
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAiK9C"}