@buoy-design/cli 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +27 -15
- package/dist/bin.js +0 -0
- package/dist/commands/begin.js +40 -43
- package/dist/commands/begin.js.map +1 -1
- package/dist/commands/billing.js +4 -4
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +16 -7
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/components-query.js +1 -1
- package/dist/commands/components-query.js.map +1 -1
- package/dist/commands/context.js +1 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/dock.d.ts.map +1 -1
- package/dist/commands/dock.js +163 -59
- package/dist/commands/dock.js.map +1 -1
- package/dist/commands/fix.d.ts +1 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +76 -72
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/github.js +2 -2
- package/dist/commands/github.js.map +1 -1
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +5 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/link.js +4 -4
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +3 -4
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/ship.js +3 -3
- package/dist/commands/ship.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +61 -13
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/sync.js +1 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tokens-lookup.js +1 -1
- package/dist/commands/tokens-lookup.js.map +1 -1
- package/dist/commands/tokens.d.ts.map +1 -1
- package/dist/commands/tokens.js +46 -3
- package/dist/commands/tokens.js.map +1 -1
- package/dist/commands/whoami.js +1 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/insights/project-insights.js +1 -1
- package/dist/insights/project-insights.js.map +1 -1
- package/dist/output/reporters.d.ts +1 -1
- package/dist/output/reporters.d.ts.map +1 -1
- package/dist/output/reporters.js +42 -35
- package/dist/output/reporters.js.map +1 -1
- package/dist/services/ai-tools-detector.js +6 -6
- package/dist/services/ai-tools-detector.js.map +1 -1
- package/dist/services/drift-analysis.d.ts +4 -0
- package/dist/services/drift-analysis.d.ts.map +1 -1
- package/dist/services/drift-analysis.js +19 -3
- package/dist/services/drift-analysis.js.map +1 -1
- package/dist/wizard/ci-generator.d.ts +2 -4
- package/dist/wizard/ci-generator.d.ts.map +1 -1
- package/dist/wizard/ci-generator.js +14 -104
- package/dist/wizard/ci-generator.js.map +1 -1
- package/package.json +15 -15
- package/dist/commands/anchor.d.ts +0 -3
- package/dist/commands/anchor.d.ts.map +0 -1
- package/dist/commands/anchor.js +0 -487
- package/dist/commands/anchor.js.map +0 -1
- package/dist/commands/bot.d.ts +0 -9
- package/dist/commands/bot.d.ts.map +0 -1
- package/dist/commands/bot.js +0 -258
- package/dist/commands/bot.js.map +0 -1
- package/dist/commands/ci.d.ts +0 -24
- package/dist/commands/ci.d.ts.map +0 -1
- package/dist/commands/ci.js +0 -474
- package/dist/commands/ci.js.map +0 -1
- package/dist/commands/cloud.d.ts +0 -15
- package/dist/commands/cloud.d.ts.map +0 -1
- package/dist/commands/cloud.js +0 -36
- package/dist/commands/cloud.js.map +0 -1
- package/dist/commands/explain.d.ts.map +0 -1
- package/dist/commands/onboard.d.ts +0 -9
- package/dist/commands/onboard.d.ts.map +0 -1
- package/dist/commands/onboard.js +0 -314
- package/dist/commands/onboard.js.map +0 -1
package/dist/commands/ci.js
DELETED
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
// apps/cli/src/commands/ci.ts
|
|
2
|
-
import { Command } from "commander";
|
|
3
|
-
import chalk from "chalk";
|
|
4
|
-
import { loadConfig, getConfigPath } from "../config/loader.js";
|
|
5
|
-
import { setJsonMode } from "../output/reporters.js";
|
|
6
|
-
import { GitHubClient, parseRepoString, formatPRComment, formatAIPRComment, } from "../integrations/index.js";
|
|
7
|
-
import { DriftAnalysisService, hasDriftsAboveThreshold, sortDriftsBySeverity, } from "../services/drift-analysis.js";
|
|
8
|
-
import { AIAnalysisService } from "../services/ai-analysis.js";
|
|
9
|
-
import { ScanCache } from "@buoy-design/scanners";
|
|
10
|
-
import { detectAIReviewTools, generateCodeRabbitConfig, generateGreptileConfig, } from "../services/ai-tools-detector.js";
|
|
11
|
-
/** Extract a string representation of a token value */
|
|
12
|
-
function tokenValueToString(token) {
|
|
13
|
-
const v = token.value;
|
|
14
|
-
switch (v.type) {
|
|
15
|
-
case 'color':
|
|
16
|
-
return v.hex;
|
|
17
|
-
case 'spacing':
|
|
18
|
-
return `${v.value}${v.unit}`;
|
|
19
|
-
case 'typography':
|
|
20
|
-
return `${v.fontSize}px ${v.fontFamily}`;
|
|
21
|
-
case 'shadow':
|
|
22
|
-
return `shadow`;
|
|
23
|
-
case 'border':
|
|
24
|
-
return `${v.width}px ${v.style} ${v.color}`;
|
|
25
|
-
case 'raw':
|
|
26
|
-
return String(v.value);
|
|
27
|
-
default:
|
|
28
|
-
return JSON.stringify(v);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function validateGitHubOptions(options) {
|
|
32
|
-
const token = options.githubToken || process.env.GITHUB_TOKEN;
|
|
33
|
-
const repo = options.githubRepo || process.env.GITHUB_REPOSITORY;
|
|
34
|
-
const prInput = options.githubPr || process.env.GITHUB_PR_NUMBER;
|
|
35
|
-
// Validate token: must be non-empty if provided
|
|
36
|
-
if (token !== undefined && token.trim() === "") {
|
|
37
|
-
throw new Error("Invalid GitHub token: must be non-empty if provided.");
|
|
38
|
-
}
|
|
39
|
-
// Validate repo format: must be "owner/repo" with non-empty parts
|
|
40
|
-
if (repo !== undefined) {
|
|
41
|
-
const repoPattern = /^[^/]+\/[^/]+$/;
|
|
42
|
-
if (!repoPattern.test(repo)) {
|
|
43
|
-
throw new Error(`Invalid GitHub repo format: '${repo}'. Must be in 'owner/repo' format (e.g., 'facebook/react').`);
|
|
44
|
-
}
|
|
45
|
-
const [owner, repoName] = repo.split("/");
|
|
46
|
-
if (!owner || owner.trim() === "" || !repoName || repoName.trim() === "") {
|
|
47
|
-
throw new Error(`Invalid GitHub repo format: '${repo}'. Both owner and repo parts must be non-empty.`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
// Validate PR number: must be a positive integer
|
|
51
|
-
let pr;
|
|
52
|
-
if (prInput !== undefined) {
|
|
53
|
-
const parsed = parseInt(prInput, 10);
|
|
54
|
-
if (isNaN(parsed) ||
|
|
55
|
-
parsed <= 0 ||
|
|
56
|
-
!Number.isInteger(parsed) ||
|
|
57
|
-
String(parsed) !== prInput.trim()) {
|
|
58
|
-
throw new Error(`Invalid PR number: '${prInput}'. Must be a positive integer.`);
|
|
59
|
-
}
|
|
60
|
-
pr = parsed;
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
token: token?.trim(),
|
|
64
|
-
repo: repo?.trim(),
|
|
65
|
-
pr,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
export function createCICommand() {
|
|
69
|
-
const cmd = new Command("lighthouse")
|
|
70
|
-
.alias("ci")
|
|
71
|
-
.description("Run drift detection in CI/CD pipelines")
|
|
72
|
-
.option("--fail-on <severity>", "Exit 1 if drift at this severity or higher: critical, warning, info, none", "critical")
|
|
73
|
-
.option("--json", "Output as JSON (default)")
|
|
74
|
-
.option("--format <format>", "Output format: json, summary", "json")
|
|
75
|
-
.option("--quiet", "Suppress non-essential output")
|
|
76
|
-
.option("--top <n>", "Number of top issues to include", "10")
|
|
77
|
-
.option("--include-baseline", "Include baselined drifts (by default only new issues shown)")
|
|
78
|
-
.option("--github-token <token>", "GitHub token for PR comments (or use GITHUB_TOKEN env)")
|
|
79
|
-
.option("--github-repo <repo>", "GitHub repo in owner/repo format (or use GITHUB_REPOSITORY env)")
|
|
80
|
-
.option("--github-pr <number>", "PR number to comment on (or use GITHUB_PR_NUMBER env)")
|
|
81
|
-
.option("--ai", "Enable AI-powered analysis (requires ANTHROPIC_API_KEY env)")
|
|
82
|
-
.option("--no-ai", "Disable AI analysis even if ANTHROPIC_API_KEY is set")
|
|
83
|
-
.option("--no-cache", "Disable incremental scanning cache")
|
|
84
|
-
.option("--clear-cache", "Clear cache before scanning")
|
|
85
|
-
.option("--max-drift <n>", "Fail if total drift count exceeds this threshold")
|
|
86
|
-
.option("--max-critical <n>", "Fail if critical drift count exceeds this threshold")
|
|
87
|
-
.option("--max-warning <n>", "Fail if warning drift count exceeds this threshold")
|
|
88
|
-
.option("--detect-tools", "Detect existing AI review tools and show integration options")
|
|
89
|
-
.option("--export-coderabbit", "Export design system rules as CodeRabbit config")
|
|
90
|
-
.option("--export-greptile", "Export design system context as Greptile config")
|
|
91
|
-
.option("--cooperative", "Run in cooperative mode - provide data to existing tools, skip AI review")
|
|
92
|
-
.action(async (options) => {
|
|
93
|
-
// Set JSON mode to ensure any reporter output goes to stderr
|
|
94
|
-
// --json flag takes precedence, but --format also works
|
|
95
|
-
if (options.json || options.format === "json") {
|
|
96
|
-
setJsonMode(true);
|
|
97
|
-
}
|
|
98
|
-
const log = options.quiet ? () => { } : console.error.bind(console);
|
|
99
|
-
const cwd = process.cwd();
|
|
100
|
-
try {
|
|
101
|
-
// Handle --detect-tools: show what AI review tools are present
|
|
102
|
-
if (options.detectTools) {
|
|
103
|
-
const detection = detectAIReviewTools(cwd);
|
|
104
|
-
if (options.json) {
|
|
105
|
-
console.log(JSON.stringify(detection, null, 2));
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
console.log('');
|
|
109
|
-
console.log(chalk.cyan.bold('🔍 AI Review Tool Detection'));
|
|
110
|
-
console.log('');
|
|
111
|
-
if (!detection.hasAnyTool) {
|
|
112
|
-
console.log(chalk.dim(' No AI review tools detected.'));
|
|
113
|
-
console.log('');
|
|
114
|
-
console.log(' Buoy can provide AI-powered design system review.');
|
|
115
|
-
console.log(chalk.dim(' Run: buoy lighthouse --ai'));
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
console.log(chalk.green(` Found ${detection.tools.length} AI review tool(s):`));
|
|
119
|
-
console.log('');
|
|
120
|
-
for (const tool of detection.tools) {
|
|
121
|
-
console.log(` ${chalk.green('✓')} ${chalk.bold(tool.displayName)}`);
|
|
122
|
-
if (tool.configFile) {
|
|
123
|
-
console.log(chalk.dim(` Config: ${tool.configFile}`));
|
|
124
|
-
}
|
|
125
|
-
if (tool.supportsCustomRules) {
|
|
126
|
-
console.log(chalk.dim(` Supports custom rules - Buoy can provide design system context`));
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
console.log('');
|
|
130
|
-
console.log(chalk.dim(' Recommendations:'));
|
|
131
|
-
for (const rec of detection.recommendations) {
|
|
132
|
-
console.log(` • ${rec}`);
|
|
133
|
-
}
|
|
134
|
-
console.log('');
|
|
135
|
-
console.log(chalk.dim(' Export design system rules:'));
|
|
136
|
-
const toolsWithRules = detection.tools.filter(t => t.supportsCustomRules);
|
|
137
|
-
for (const tool of toolsWithRules) {
|
|
138
|
-
console.log(` buoy lighthouse --export-${tool.name}`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
console.log('');
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
// Handle exports - need to scan first
|
|
145
|
-
if (options.exportCoderabbit || options.exportGreptile) {
|
|
146
|
-
// Load config and scan for design data
|
|
147
|
-
const configPath = getConfigPath();
|
|
148
|
-
if (!configPath) {
|
|
149
|
-
console.error(chalk.red('No buoy config found. Run: buoy begin'));
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
const { config } = await loadConfig();
|
|
153
|
-
const { ScanOrchestrator } = await import("../scan/orchestrator.js");
|
|
154
|
-
const orchestrator = new ScanOrchestrator(config, cwd);
|
|
155
|
-
log('Scanning design system...');
|
|
156
|
-
const scanResult = await orchestrator.scan({ onProgress: log });
|
|
157
|
-
// Build export data
|
|
158
|
-
const tokens = scanResult.tokens.map(t => ({
|
|
159
|
-
name: t.name,
|
|
160
|
-
value: tokenValueToString(t),
|
|
161
|
-
category: t.value.type,
|
|
162
|
-
}));
|
|
163
|
-
const { SemanticDiffEngine } = await import("@buoy-design/core/analysis");
|
|
164
|
-
const engine = new SemanticDiffEngine();
|
|
165
|
-
const diffResult = engine.analyzeComponents(scanResult.components, {
|
|
166
|
-
checkDeprecated: true,
|
|
167
|
-
checkNaming: true,
|
|
168
|
-
});
|
|
169
|
-
const antiPatterns = diffResult.drifts
|
|
170
|
-
.filter(d => d.severity === 'critical' || d.severity === 'warning')
|
|
171
|
-
.map(d => ({
|
|
172
|
-
pattern: d.type,
|
|
173
|
-
message: d.message,
|
|
174
|
-
}));
|
|
175
|
-
const patterns = scanResult.components
|
|
176
|
-
.filter(c => c.metadata.documentation)
|
|
177
|
-
.slice(0, 10)
|
|
178
|
-
.map(c => ({
|
|
179
|
-
name: c.name,
|
|
180
|
-
description: c.metadata.documentation || `${c.name} component`,
|
|
181
|
-
}));
|
|
182
|
-
if (options.exportCoderabbit) {
|
|
183
|
-
const configContent = generateCodeRabbitConfig({ tokens, patterns, antiPatterns });
|
|
184
|
-
if (options.json) {
|
|
185
|
-
console.log(JSON.stringify({ config: configContent }, null, 2));
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
console.log('');
|
|
189
|
-
console.log(chalk.cyan.bold('📋 CodeRabbit Configuration'));
|
|
190
|
-
console.log(chalk.dim('Add this to your .coderabbit.yaml:'));
|
|
191
|
-
console.log('');
|
|
192
|
-
console.log(configContent);
|
|
193
|
-
console.log('');
|
|
194
|
-
console.log(chalk.dim('Or save directly:'));
|
|
195
|
-
console.log(chalk.cyan(' buoy lighthouse --export-coderabbit > .coderabbit-buoy.yaml'));
|
|
196
|
-
}
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
if (options.exportGreptile) {
|
|
200
|
-
const configContent = generateGreptileConfig({
|
|
201
|
-
tokens,
|
|
202
|
-
patterns,
|
|
203
|
-
antiPatterns,
|
|
204
|
-
projectName: config.project?.name,
|
|
205
|
-
});
|
|
206
|
-
if (options.json) {
|
|
207
|
-
console.log(JSON.stringify({ config: configContent }, null, 2));
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
console.log('');
|
|
211
|
-
console.log(chalk.cyan.bold('📋 Greptile Configuration'));
|
|
212
|
-
console.log(chalk.dim('Add this to your greptile.json customContext:'));
|
|
213
|
-
console.log('');
|
|
214
|
-
console.log(configContent);
|
|
215
|
-
console.log('');
|
|
216
|
-
console.log(chalk.dim('Or save directly:'));
|
|
217
|
-
console.log(chalk.cyan(' buoy lighthouse --export-greptile > greptile-buoy.json'));
|
|
218
|
-
}
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
// Validate GitHub options early, before any scanning
|
|
223
|
-
const github = validateGitHubOptions(options);
|
|
224
|
-
// Detect existing AI tools for cooperative mode
|
|
225
|
-
const detection = detectAIReviewTools(cwd);
|
|
226
|
-
const cooperativeMode = options.cooperative ||
|
|
227
|
-
(detection.hasAnyTool && options.ai === undefined);
|
|
228
|
-
if (cooperativeMode && detection.hasAnyTool && !options.quiet) {
|
|
229
|
-
const toolNames = detection.tools.map(t => t.displayName).join(', ');
|
|
230
|
-
log(`Cooperative mode: ${toolNames} detected. Buoy will provide data, not AI review.`);
|
|
231
|
-
}
|
|
232
|
-
// Check for config
|
|
233
|
-
if (!getConfigPath()) {
|
|
234
|
-
const output = {
|
|
235
|
-
version: "0.0.1",
|
|
236
|
-
timestamp: new Date().toISOString(),
|
|
237
|
-
summary: { total: 0, critical: 0, warning: 0, info: 0 },
|
|
238
|
-
topIssues: [],
|
|
239
|
-
exitCode: 0,
|
|
240
|
-
};
|
|
241
|
-
console.log(JSON.stringify(output, null, 2));
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
log("Loading configuration...");
|
|
245
|
-
const { config } = await loadConfig();
|
|
246
|
-
log("Scanning for drift...");
|
|
247
|
-
// Initialize cache if enabled
|
|
248
|
-
let cache;
|
|
249
|
-
if (options.cache !== false) {
|
|
250
|
-
cache = new ScanCache(process.cwd());
|
|
251
|
-
await cache.load();
|
|
252
|
-
if (options.clearCache) {
|
|
253
|
-
cache.clear();
|
|
254
|
-
log("Cache cleared");
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
// Use consolidated drift analysis service
|
|
258
|
-
const service = new DriftAnalysisService(config);
|
|
259
|
-
const result = await service.analyze({
|
|
260
|
-
onProgress: log,
|
|
261
|
-
includeBaseline: options.includeBaseline,
|
|
262
|
-
cache,
|
|
263
|
-
});
|
|
264
|
-
// Save cache after scan
|
|
265
|
-
if (cache) {
|
|
266
|
-
await cache.save();
|
|
267
|
-
}
|
|
268
|
-
const drifts = result.drifts;
|
|
269
|
-
// Check for design system reference
|
|
270
|
-
const hasTokenConfig = config.sources.tokens?.enabled &&
|
|
271
|
-
(config.sources.tokens.files?.length ?? 0) > 0;
|
|
272
|
-
const hasFigmaConfig = config.sources.figma?.enabled;
|
|
273
|
-
const hasDesignReference = hasTokenConfig || hasFigmaConfig;
|
|
274
|
-
// Count tokens if configured
|
|
275
|
-
let tokenCount = 0;
|
|
276
|
-
if (hasTokenConfig) {
|
|
277
|
-
const { ScanOrchestrator } = await import("../scan/orchestrator.js");
|
|
278
|
-
const orchestrator = new ScanOrchestrator(config);
|
|
279
|
-
const tokenResult = await orchestrator.scanTokens();
|
|
280
|
-
tokenCount = tokenResult.tokens.length;
|
|
281
|
-
}
|
|
282
|
-
// Build output
|
|
283
|
-
const output = buildCIOutput(drifts, options);
|
|
284
|
-
// Post to GitHub if configured (using pre-validated values)
|
|
285
|
-
if (github.token && github.repo && github.pr) {
|
|
286
|
-
try {
|
|
287
|
-
const { owner, repo: repoName } = parseRepoString(github.repo);
|
|
288
|
-
const client = new GitHubClient({
|
|
289
|
-
token: github.token,
|
|
290
|
-
owner,
|
|
291
|
-
repo: repoName,
|
|
292
|
-
prNumber: github.pr,
|
|
293
|
-
});
|
|
294
|
-
// Get PR info for context
|
|
295
|
-
let prAuthor;
|
|
296
|
-
let filesChanged;
|
|
297
|
-
try {
|
|
298
|
-
const prInfo = await client.getPRInfo();
|
|
299
|
-
prAuthor = prInfo.author;
|
|
300
|
-
filesChanged = prInfo.filesChanged.map((f) => f.filename);
|
|
301
|
-
}
|
|
302
|
-
catch {
|
|
303
|
-
// PR info is optional, continue without it
|
|
304
|
-
}
|
|
305
|
-
let comment;
|
|
306
|
-
// Use AI analysis if explicitly enabled AND not in cooperative mode
|
|
307
|
-
// In cooperative mode, we let existing AI tools handle the review
|
|
308
|
-
const useAI = options.ai === true && process.env.ANTHROPIC_API_KEY && !cooperativeMode;
|
|
309
|
-
if (useAI && drifts.length > 0) {
|
|
310
|
-
log("Running AI analysis...");
|
|
311
|
-
const aiService = new AIAnalysisService();
|
|
312
|
-
const analysis = await aiService.analyzePR(drifts, {
|
|
313
|
-
projectRoot: process.cwd(),
|
|
314
|
-
prNumber: github.pr,
|
|
315
|
-
prAuthor,
|
|
316
|
-
filesChanged,
|
|
317
|
-
});
|
|
318
|
-
log("Generating AI-powered PR comment...");
|
|
319
|
-
comment = formatAIPRComment(analysis, {
|
|
320
|
-
signals: drifts.map((d) => ({
|
|
321
|
-
type: d.type,
|
|
322
|
-
severity: d.severity,
|
|
323
|
-
message: d.message,
|
|
324
|
-
component: d.source.entityName,
|
|
325
|
-
file: d.source.location?.split(":")[0],
|
|
326
|
-
line: d.source.location?.includes(":")
|
|
327
|
-
? parseInt(d.source.location.split(":")[1] || "0", 10)
|
|
328
|
-
: undefined,
|
|
329
|
-
suggestion: d.details.suggestions?.[0],
|
|
330
|
-
})),
|
|
331
|
-
summary: {
|
|
332
|
-
total: drifts.length,
|
|
333
|
-
critical: drifts.filter((d) => d.severity === "critical").length,
|
|
334
|
-
warning: drifts.filter((d) => d.severity === "warning").length,
|
|
335
|
-
info: drifts.filter((d) => d.severity === "info").length,
|
|
336
|
-
},
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
log("Posting to GitHub PR...");
|
|
341
|
-
const driftResult = {
|
|
342
|
-
signals: drifts.map((d) => ({
|
|
343
|
-
type: d.type,
|
|
344
|
-
severity: d.severity,
|
|
345
|
-
message: d.message,
|
|
346
|
-
component: d.source.entityName,
|
|
347
|
-
file: d.source.location?.split(":")[0],
|
|
348
|
-
line: d.source.location?.includes(":")
|
|
349
|
-
? parseInt(d.source.location.split(":")[1] || "0", 10)
|
|
350
|
-
: undefined,
|
|
351
|
-
suggestion: d.details.suggestions?.[0],
|
|
352
|
-
})),
|
|
353
|
-
summary: {
|
|
354
|
-
total: drifts.length,
|
|
355
|
-
critical: drifts.filter((d) => d.severity === "critical").length,
|
|
356
|
-
warning: drifts.filter((d) => d.severity === "warning").length,
|
|
357
|
-
info: drifts.filter((d) => d.severity === "info").length,
|
|
358
|
-
},
|
|
359
|
-
};
|
|
360
|
-
comment = formatPRComment(driftResult, {
|
|
361
|
-
hasDesignReference,
|
|
362
|
-
tokenCount,
|
|
363
|
-
filesChanged,
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
await client.createOrUpdateComment(comment);
|
|
367
|
-
log("Posted PR comment");
|
|
368
|
-
}
|
|
369
|
-
catch (err) {
|
|
370
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
371
|
-
log(`Failed to post GitHub comment: ${msg}`);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
if (options.format === "json") {
|
|
375
|
-
console.log(JSON.stringify(output, null, 2));
|
|
376
|
-
}
|
|
377
|
-
else {
|
|
378
|
-
printSummary(output);
|
|
379
|
-
}
|
|
380
|
-
process.exit(output.exitCode);
|
|
381
|
-
}
|
|
382
|
-
catch (err) {
|
|
383
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
384
|
-
console.error(JSON.stringify({ error: message }, null, 2));
|
|
385
|
-
process.exit(1);
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
return cmd;
|
|
389
|
-
}
|
|
390
|
-
function buildCIOutput(drifts, options) {
|
|
391
|
-
const summary = {
|
|
392
|
-
total: drifts.length,
|
|
393
|
-
critical: drifts.filter((d) => d.severity === "critical").length,
|
|
394
|
-
warning: drifts.filter((d) => d.severity === "warning").length,
|
|
395
|
-
info: drifts.filter((d) => d.severity === "info").length,
|
|
396
|
-
};
|
|
397
|
-
// Sort by severity (critical first) using shared utility
|
|
398
|
-
const sorted = sortDriftsBySeverity(drifts);
|
|
399
|
-
const topN = parseInt(options.top, 10) || 10;
|
|
400
|
-
const topIssues = sorted.slice(0, topN).map((d) => {
|
|
401
|
-
const locationParts = d.source.location?.split(":");
|
|
402
|
-
return {
|
|
403
|
-
type: d.type,
|
|
404
|
-
severity: d.severity,
|
|
405
|
-
component: d.source.entityName,
|
|
406
|
-
message: d.message,
|
|
407
|
-
file: locationParts?.[0],
|
|
408
|
-
line: locationParts?.[1] ? parseInt(locationParts[1], 10) : undefined,
|
|
409
|
-
suggestion: d.details.suggestions?.[0],
|
|
410
|
-
};
|
|
411
|
-
});
|
|
412
|
-
// Determine exit code - check thresholds first, then severity
|
|
413
|
-
let exitCode = 0;
|
|
414
|
-
// Check threshold-based failures
|
|
415
|
-
if (options.maxDrift !== undefined) {
|
|
416
|
-
const maxDrift = parseInt(options.maxDrift, 10);
|
|
417
|
-
if (!isNaN(maxDrift) && summary.total > maxDrift) {
|
|
418
|
-
exitCode = 1;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
if (options.maxCritical !== undefined) {
|
|
422
|
-
const maxCritical = parseInt(options.maxCritical, 10);
|
|
423
|
-
if (!isNaN(maxCritical) && summary.critical > maxCritical) {
|
|
424
|
-
exitCode = 1;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
if (options.maxWarning !== undefined) {
|
|
428
|
-
const maxWarning = parseInt(options.maxWarning, 10);
|
|
429
|
-
if (!isNaN(maxWarning) && summary.warning > maxWarning) {
|
|
430
|
-
exitCode = 1;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
// If no threshold failures, check severity-based failure
|
|
434
|
-
if (exitCode === 0) {
|
|
435
|
-
const failOn = options.failOn;
|
|
436
|
-
exitCode = hasDriftsAboveThreshold(drifts, failOn) ? 1 : 0;
|
|
437
|
-
}
|
|
438
|
-
return {
|
|
439
|
-
version: "0.0.1",
|
|
440
|
-
timestamp: new Date().toISOString(),
|
|
441
|
-
summary,
|
|
442
|
-
topIssues,
|
|
443
|
-
exitCode,
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
function printSummary(output) {
|
|
447
|
-
const icon = output.exitCode === 0 ? "+" : "x";
|
|
448
|
-
const status = output.exitCode === 0 ? "PASS" : "FAIL";
|
|
449
|
-
console.log(`${icon} Buoy Drift Check: ${status}`);
|
|
450
|
-
console.log("");
|
|
451
|
-
console.log(` Total: ${output.summary.total}`);
|
|
452
|
-
console.log(` Critical: ${output.summary.critical}`);
|
|
453
|
-
console.log(` Warning: ${output.summary.warning}`);
|
|
454
|
-
console.log(` Info: ${output.summary.info}`);
|
|
455
|
-
if (output.topIssues.length > 0) {
|
|
456
|
-
console.log("");
|
|
457
|
-
console.log("Top issues:");
|
|
458
|
-
for (const issue of output.topIssues.slice(0, 5)) {
|
|
459
|
-
const sev = issue.severity === "critical"
|
|
460
|
-
? "!"
|
|
461
|
-
: issue.severity === "warning"
|
|
462
|
-
? "~"
|
|
463
|
-
: "i";
|
|
464
|
-
const loc = issue.file
|
|
465
|
-
? ` (${issue.file}${issue.line ? `:${issue.line}` : ""})`
|
|
466
|
-
: "";
|
|
467
|
-
console.log(` [${sev}] ${issue.component}: ${issue.message}${loc}`);
|
|
468
|
-
}
|
|
469
|
-
if (output.topIssues.length > 5) {
|
|
470
|
-
console.log(` ... and ${output.topIssues.length - 5} more`);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
//# sourceMappingURL=ci.js.map
|
package/dist/commands/ci.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/cloud.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* buoy cloud - Manage Buoy Cloud connection
|
|
3
|
-
*
|
|
4
|
-
* buoy cloud login - Authenticate with Buoy Cloud
|
|
5
|
-
* buoy cloud logout - Sign out
|
|
6
|
-
* buoy cloud whoami - Show current user
|
|
7
|
-
* buoy cloud link - Connect project to cloud
|
|
8
|
-
* buoy cloud unlink - Disconnect project
|
|
9
|
-
* buoy cloud sync - Sync queued scans
|
|
10
|
-
* buoy cloud billing - Manage subscription
|
|
11
|
-
* buoy cloud plans - Compare pricing
|
|
12
|
-
*/
|
|
13
|
-
import { Command } from 'commander';
|
|
14
|
-
export declare function createCloudCommand(): Command;
|
|
15
|
-
//# sourceMappingURL=cloud.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,kBAAkB,IAAI,OAAO,CAe5C"}
|
package/dist/commands/cloud.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* buoy cloud - Manage Buoy Cloud connection
|
|
3
|
-
*
|
|
4
|
-
* buoy cloud login - Authenticate with Buoy Cloud
|
|
5
|
-
* buoy cloud logout - Sign out
|
|
6
|
-
* buoy cloud whoami - Show current user
|
|
7
|
-
* buoy cloud link - Connect project to cloud
|
|
8
|
-
* buoy cloud unlink - Disconnect project
|
|
9
|
-
* buoy cloud sync - Sync queued scans
|
|
10
|
-
* buoy cloud billing - Manage subscription
|
|
11
|
-
* buoy cloud plans - Compare pricing
|
|
12
|
-
*/
|
|
13
|
-
import { Command } from 'commander';
|
|
14
|
-
import { createLoginCommand } from './login.js';
|
|
15
|
-
import { createLogoutCommand } from './logout.js';
|
|
16
|
-
import { createWhoamiCommand } from './whoami.js';
|
|
17
|
-
import { createLinkCommand } from './link.js';
|
|
18
|
-
import { createUnlinkCommand } from './unlink.js';
|
|
19
|
-
import { createSyncCommand } from './sync.js';
|
|
20
|
-
import { createBillingCommand } from './billing.js';
|
|
21
|
-
import { createPlansCommand } from './plans.js';
|
|
22
|
-
export function createCloudCommand() {
|
|
23
|
-
const cmd = new Command('cloud');
|
|
24
|
-
cmd
|
|
25
|
-
.description('Manage Buoy Cloud connection')
|
|
26
|
-
.addCommand(createLoginCommand())
|
|
27
|
-
.addCommand(createLogoutCommand())
|
|
28
|
-
.addCommand(createWhoamiCommand())
|
|
29
|
-
.addCommand(createLinkCommand())
|
|
30
|
-
.addCommand(createUnlinkCommand())
|
|
31
|
-
.addCommand(createSyncCommand())
|
|
32
|
-
.addCommand(createBillingCommand())
|
|
33
|
-
.addCommand(createPlansCommand());
|
|
34
|
-
return cmd;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=cloud.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC,GAAG;SACA,WAAW,CAAC,8BAA8B,CAAC;SAC3C,UAAU,CAAC,kBAAkB,EAAE,CAAC;SAChC,UAAU,CAAC,mBAAmB,EAAE,CAAC;SACjC,UAAU,CAAC,mBAAmB,EAAE,CAAC;SACjC,UAAU,CAAC,iBAAiB,EAAE,CAAC;SAC/B,UAAU,CAAC,mBAAmB,EAAE,CAAC;SACjC,UAAU,CAAC,iBAAiB,EAAE,CAAC;SAC/B,UAAU,CAAC,oBAAoB,EAAE,CAAC;SAClC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEpC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAwI9C"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* buoy onboard - Onboard AI to your design system
|
|
3
|
-
*
|
|
4
|
-
* Creates skill files and updates CLAUDE.md so AI tools
|
|
5
|
-
* understand and follow your design system.
|
|
6
|
-
*/
|
|
7
|
-
import { Command } from 'commander';
|
|
8
|
-
export declare function createOnboardCommand(): Command;
|
|
9
|
-
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0DpC,wBAAgB,oBAAoB,IAAI,OAAO,CA8R9C"}
|