@buoy-design/cli 0.1.1 → 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 (119) 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/check.d.ts +16 -0
  6. package/dist/commands/check.d.ts.map +1 -0
  7. package/dist/commands/check.js +168 -0
  8. package/dist/commands/check.js.map +1 -0
  9. package/dist/commands/ci.d.ts.map +1 -1
  10. package/dist/commands/ci.js +85 -81
  11. package/dist/commands/ci.js.map +1 -1
  12. package/dist/commands/compare.d.ts +3 -0
  13. package/dist/commands/compare.d.ts.map +1 -0
  14. package/dist/commands/compare.js +170 -0
  15. package/dist/commands/compare.js.map +1 -0
  16. package/dist/commands/drift.d.ts.map +1 -1
  17. package/dist/commands/drift.js +40 -55
  18. package/dist/commands/drift.js.map +1 -1
  19. package/dist/commands/explain.d.ts +3 -0
  20. package/dist/commands/explain.d.ts.map +1 -0
  21. package/dist/commands/explain.js +212 -0
  22. package/dist/commands/explain.js.map +1 -0
  23. package/dist/commands/graph.d.ts +3 -0
  24. package/dist/commands/graph.d.ts.map +1 -0
  25. package/dist/commands/graph.js +430 -0
  26. package/dist/commands/graph.js.map +1 -0
  27. package/dist/commands/index.d.ts +6 -1
  28. package/dist/commands/index.d.ts.map +1 -1
  29. package/dist/commands/index.js +6 -1
  30. package/dist/commands/index.js.map +1 -1
  31. package/dist/commands/init.d.ts +1 -1
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +368 -176
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/commands/scan.d.ts.map +1 -1
  36. package/dist/commands/scan.js +56 -16
  37. package/dist/commands/scan.js.map +1 -1
  38. package/dist/commands/status.d.ts.map +1 -1
  39. package/dist/commands/status.js +40 -11
  40. package/dist/commands/status.js.map +1 -1
  41. package/dist/commands/tokens.d.ts +3 -0
  42. package/dist/commands/tokens.d.ts.map +1 -0
  43. package/dist/commands/tokens.js +261 -0
  44. package/dist/commands/tokens.js.map +1 -0
  45. package/dist/config/auto-detect.d.ts +21 -0
  46. package/dist/config/auto-detect.d.ts.map +1 -0
  47. package/dist/config/auto-detect.js +278 -0
  48. package/dist/config/auto-detect.js.map +1 -0
  49. package/dist/config/loader.d.ts.map +1 -1
  50. package/dist/config/loader.js +17 -0
  51. package/dist/config/loader.js.map +1 -1
  52. package/dist/config/schema.d.ts +63 -63
  53. package/dist/config/schema.d.ts.map +1 -1
  54. package/dist/config/schema.js +20 -2
  55. package/dist/config/schema.js.map +1 -1
  56. package/dist/constants.d.ts +36 -0
  57. package/dist/constants.d.ts.map +1 -0
  58. package/dist/constants.js +37 -0
  59. package/dist/constants.js.map +1 -0
  60. package/dist/detect/frameworks.d.ts +5 -1
  61. package/dist/detect/frameworks.d.ts.map +1 -1
  62. package/dist/detect/frameworks.js +35 -9
  63. package/dist/detect/frameworks.js.map +1 -1
  64. package/dist/detect/index.d.ts +1 -0
  65. package/dist/detect/index.d.ts.map +1 -1
  66. package/dist/detect/index.js +3 -0
  67. package/dist/detect/index.js.map +1 -1
  68. package/dist/detect/monorepo-patterns.d.ts +54 -0
  69. package/dist/detect/monorepo-patterns.d.ts.map +1 -0
  70. package/dist/detect/monorepo-patterns.js +209 -0
  71. package/dist/detect/monorepo-patterns.js.map +1 -0
  72. package/dist/detect/project-detector.d.ts +1 -1
  73. package/dist/detect/project-detector.d.ts.map +1 -1
  74. package/dist/detect/project-detector.js +132 -0
  75. package/dist/detect/project-detector.js.map +1 -1
  76. package/dist/explain/agents.d.ts +31 -0
  77. package/dist/explain/agents.d.ts.map +1 -0
  78. package/dist/explain/agents.js +507 -0
  79. package/dist/explain/agents.js.map +1 -0
  80. package/dist/hooks/index.d.ts +26 -0
  81. package/dist/hooks/index.d.ts.map +1 -0
  82. package/dist/hooks/index.js +283 -0
  83. package/dist/hooks/index.js.map +1 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +7 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/integrations/github-formatter.d.ts +54 -2
  88. package/dist/integrations/github-formatter.d.ts.map +1 -1
  89. package/dist/integrations/github-formatter.js +369 -47
  90. package/dist/integrations/github-formatter.js.map +1 -1
  91. package/dist/integrations/github.d.ts +75 -0
  92. package/dist/integrations/github.d.ts.map +1 -1
  93. package/dist/integrations/github.js +212 -0
  94. package/dist/integrations/github.js.map +1 -1
  95. package/dist/integrations/index.d.ts +3 -3
  96. package/dist/integrations/index.d.ts.map +1 -1
  97. package/dist/integrations/index.js +2 -2
  98. package/dist/integrations/index.js.map +1 -1
  99. package/dist/output/formatters.d.ts.map +1 -1
  100. package/dist/output/formatters.js +5 -10
  101. package/dist/output/formatters.js.map +1 -1
  102. package/dist/services/ai-analysis.d.ts +54 -0
  103. package/dist/services/ai-analysis.d.ts.map +1 -0
  104. package/dist/services/ai-analysis.js +239 -0
  105. package/dist/services/ai-analysis.js.map +1 -0
  106. package/dist/services/drift-analysis.d.ts +77 -0
  107. package/dist/services/drift-analysis.d.ts.map +1 -0
  108. package/dist/services/drift-analysis.js +145 -0
  109. package/dist/services/drift-analysis.js.map +1 -0
  110. package/package.json +16 -13
  111. package/LICENSE +0 -21
  112. package/dist/commands/__tests__/ci.test.d.ts +0 -2
  113. package/dist/commands/__tests__/ci.test.d.ts.map +0 -1
  114. package/dist/commands/__tests__/ci.test.js +0 -33
  115. package/dist/commands/__tests__/ci.test.js.map +0 -1
  116. package/dist/commands/bootstrap.d.ts +0 -3
  117. package/dist/commands/bootstrap.d.ts.map +0 -1
  118. package/dist/commands/bootstrap.js +0 -458
  119. package/dist/commands/bootstrap.js.map +0 -1
@@ -1,69 +1,391 @@
1
- import { COMMENT_MARKER } from './github.js';
2
- export function formatPRComment(results) {
1
+ import { COMMENT_MARKER, INLINE_MARKER_PREFIX, INLINE_MARKER_SUFFIX } from './github.js';
2
+ export function formatPRComment(results, _context) {
3
3
  const lines = [COMMENT_MARKER];
4
4
  // Header
5
- const icon = results.summary.critical > 0 ? '🔴' :
6
- results.summary.warning > 0 ? '🟡' : '🟢';
7
- lines.push(`## ${icon} Buoy Drift Report`);
8
- lines.push('');
9
- // Summary
10
- const { total, critical, warning, info } = results.summary;
11
- if (total === 0) {
12
- lines.push('No design drift detected. Your code is aligned with the design system!');
13
- lines.push('');
14
- lines.push('---');
15
- lines.push('<sub>🔱 <a href="https://github.com/dylantarre/buoy">Buoy</a></sub>');
16
- return lines.join('\n');
17
- }
18
- lines.push(`**${total} issue${total === 1 ? '' : 's'} found** (${critical} critical, ${warning} warning${warning === 1 ? '' : 's'}, ${info} info)`);
19
- lines.push('');
20
- // Group by severity
21
- const criticals = results.signals.filter(s => s.severity === 'critical');
22
- const warnings = results.signals.filter(s => s.severity === 'warning');
23
- const infos = results.signals.filter(s => s.severity === 'info');
24
- // Critical issues table
25
- if (criticals.length > 0) {
26
- lines.push('### Critical');
27
- lines.push('');
28
- lines.push('| Component | Issue | File |');
29
- lines.push('|-----------|-------|------|');
30
- for (const signal of criticals) {
31
- const file = signal.file ? `\`${signal.file}${signal.line ? `:${signal.line}` : ''}\`` : '-';
32
- lines.push(`| \`${signal.component || '-'}\` | ${signal.message} | ${file} |`);
5
+ lines.push('## 🔱 Buoy Design Drift Report');
6
+ lines.push('');
7
+ // Walkthrough section (like CodeRabbit)
8
+ lines.push('### Walkthrough');
9
+ if (results.summary.total === 0) {
10
+ lines.push('No design drift detected. Your code maintains full alignment with the design system.');
11
+ }
12
+ else {
13
+ lines.push(generateWalkthrough(results));
14
+ }
15
+ lines.push('');
16
+ // Changes table
17
+ if (results.summary.total > 0) {
18
+ lines.push('### Changes');
19
+ lines.push('');
20
+ lines.push('| File | Drift Signals | Severity |');
21
+ lines.push('|------|---------------|----------|');
22
+ const byFile = groupByFile(results.signals);
23
+ for (const [file, signals] of Object.entries(byFile).slice(0, 15)) {
24
+ const maxSeverity = getMaxSeverity(signals);
25
+ const severityIcon = maxSeverity === 'critical' ? '🔴' : maxSeverity === 'warning' ? '🟡' : '🔵';
26
+ lines.push(`| \`${file}\` | ${signals.length} | ${severityIcon} ${maxSeverity} |`);
27
+ }
28
+ if (Object.keys(byFile).length > 15) {
29
+ lines.push(`| ... | *${Object.keys(byFile).length - 15} more files* | |`);
33
30
  }
34
31
  lines.push('');
35
32
  }
36
- // Warning issues table
37
- if (warnings.length > 0) {
38
- lines.push('### Warnings');
33
+ // Pre-merge checks section
34
+ lines.push('### Pre-merge checks');
35
+ lines.push('');
36
+ const { critical, warning } = results.summary;
37
+ if (critical > 0) {
38
+ lines.push(`| Check | Status | Details |`);
39
+ lines.push(`|-------|--------|---------|`);
40
+ lines.push(`| Design System Compliance | ❌ Failed | ${critical} critical drift signal${critical === 1 ? '' : 's'} detected |`);
41
+ if (warning > 0) {
42
+ lines.push(`| Token Usage | ⚠️ Warning | ${warning} warning${warning === 1 ? '' : 's'} to review |`);
43
+ }
44
+ }
45
+ else if (warning > 0) {
46
+ lines.push(`| Check | Status | Details |`);
47
+ lines.push(`|-------|--------|---------|`);
48
+ lines.push(`| Design System Compliance | ⚠️ Warning | ${warning} warning${warning === 1 ? '' : 's'} to review |`);
49
+ lines.push(`| Critical Issues | ✅ Passed | No critical drift detected |`);
50
+ }
51
+ else {
52
+ lines.push(`| Check | Status |`);
53
+ lines.push(`|-------|--------|`);
54
+ lines.push(`| Design System Compliance | ✅ Passed |`);
55
+ lines.push(`| Token Usage | ✅ Passed |`);
56
+ }
57
+ lines.push('');
58
+ // Actionable comments summary
59
+ if (results.summary.total > 0) {
60
+ lines.push(`### 📜 Review details`);
39
61
  lines.push('');
40
- lines.push('| Component | Issue | File |');
41
- lines.push('|-----------|-------|------|');
42
- for (const signal of warnings.slice(0, 10)) {
43
- const file = signal.file ? `\`${signal.file}${signal.line ? `:${signal.line}` : ''}\`` : '-';
44
- lines.push(`| \`${signal.component || '-'}\` | ${signal.message} | ${file} |`);
62
+ lines.push(`**Actionable comments posted: ${Math.min(results.summary.critical + results.summary.warning, 10)}**`);
63
+ lines.push('');
64
+ // Critical issues with full detail
65
+ const criticals = results.signals.filter(s => s.severity === 'critical');
66
+ if (criticals.length > 0) {
67
+ lines.push('<details>');
68
+ lines.push(`<summary>🔴 Critical Issues (${criticals.length})</summary>`);
69
+ lines.push('');
70
+ for (const signal of criticals) {
71
+ lines.push(formatSignalDetail(signal));
72
+ lines.push('');
73
+ }
74
+ lines.push('</details>');
75
+ lines.push('');
76
+ }
77
+ // Warnings
78
+ const warnings = results.signals.filter(s => s.severity === 'warning');
79
+ if (warnings.length > 0) {
80
+ lines.push('<details>');
81
+ lines.push(`<summary>🟡 Warnings (${warnings.length})</summary>`);
82
+ lines.push('');
83
+ for (const signal of warnings.slice(0, 10)) {
84
+ lines.push(formatSignalDetail(signal));
85
+ lines.push('');
86
+ }
87
+ if (warnings.length > 10) {
88
+ lines.push(`*... and ${warnings.length - 10} more warnings*`);
89
+ lines.push('');
90
+ }
91
+ lines.push('</details>');
92
+ lines.push('');
45
93
  }
46
- if (warnings.length > 10) {
47
- lines.push(`| ... | *${warnings.length - 10} more warnings* | |`);
94
+ // Info collapsed
95
+ const infos = results.signals.filter(s => s.severity === 'info');
96
+ if (infos.length > 0) {
97
+ lines.push('<details>');
98
+ lines.push(`<summary>🔵 Info (${infos.length})</summary>`);
99
+ lines.push('');
100
+ for (const signal of infos.slice(0, 5)) {
101
+ lines.push(`- \`${signal.component || '-'}\`: ${signal.message}`);
102
+ }
103
+ if (infos.length > 5) {
104
+ lines.push(`- *... and ${infos.length - 5} more*`);
105
+ }
106
+ lines.push('');
107
+ lines.push('</details>');
108
+ lines.push('');
48
109
  }
110
+ }
111
+ // Finishing touches section
112
+ lines.push('### ✨ Finishing touches');
113
+ lines.push('');
114
+ lines.push('React to this comment to provide feedback:');
115
+ lines.push('- 👍 = All drift is intentional, approve');
116
+ lines.push('- 👎 = Issues need to be fixed');
117
+ lines.push('- 😕 = Need clarification on design system rules');
118
+ lines.push('');
119
+ // Footer
120
+ lines.push('---');
121
+ lines.push('<sub>🔱 <a href="https://github.com/dylantarre/buoy">Buoy</a> - Design drift detection for the AI era</sub>');
122
+ return lines.join('\n');
123
+ }
124
+ function generateWalkthrough(results) {
125
+ const { critical, warning, info } = results.summary;
126
+ const parts = [];
127
+ if (critical > 0) {
128
+ parts.push(`Found **${critical} critical** design system violation${critical === 1 ? '' : 's'} that should be addressed before merging`);
129
+ }
130
+ if (warning > 0) {
131
+ parts.push(`${warning} warning${warning === 1 ? '' : 's'} for hardcoded values or inconsistent patterns`);
132
+ }
133
+ if (info > 0) {
134
+ parts.push(`${info} informational suggestion${info === 1 ? '' : 's'}`);
135
+ }
136
+ // Group by type for summary
137
+ const byType = new Map();
138
+ for (const signal of results.signals) {
139
+ byType.set(signal.type, (byType.get(signal.type) || 0) + 1);
140
+ }
141
+ const typeDescriptions = [];
142
+ for (const [type, count] of byType) {
143
+ const label = type.replace(/-/g, ' ');
144
+ typeDescriptions.push(`${count} ${label}`);
145
+ }
146
+ if (typeDescriptions.length > 0) {
147
+ parts.push(`Issues include: ${typeDescriptions.join(', ')}.`);
148
+ }
149
+ return parts.join('. ') + '.';
150
+ }
151
+ function groupByFile(signals) {
152
+ const groups = {};
153
+ for (const signal of signals) {
154
+ const file = signal.file || 'unknown';
155
+ if (!groups[file])
156
+ groups[file] = [];
157
+ groups[file].push(signal);
158
+ }
159
+ return groups;
160
+ }
161
+ function getMaxSeverity(signals) {
162
+ if (signals.some(s => s.severity === 'critical'))
163
+ return 'critical';
164
+ if (signals.some(s => s.severity === 'warning'))
165
+ return 'warning';
166
+ return 'info';
167
+ }
168
+ function formatSignalDetail(signal) {
169
+ const lines = [];
170
+ const icon = signal.severity === 'critical' ? '🔴' : signal.severity === 'warning' ? '🟡' : '🔵';
171
+ const typeLabel = signal.type.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
172
+ // File location
173
+ const location = signal.file ? `\`${signal.file}${signal.line ? `:${signal.line}` : ''}\`` : '';
174
+ lines.push(`#### ${icon} ${typeLabel}`);
175
+ if (location) {
176
+ lines.push(`📍 ${location}`);
177
+ }
178
+ lines.push('');
179
+ lines.push(`> ${signal.message}`);
180
+ if (signal.component) {
181
+ lines.push('');
182
+ lines.push(`**Component:** \`${signal.component}\``);
183
+ }
184
+ if (signal.suggestion) {
49
185
  lines.push('');
186
+ lines.push(`**💡 Suggestion:** ${signal.suggestion}`);
187
+ }
188
+ return lines.join('\n');
189
+ }
190
+ /**
191
+ * Format an inline comment for a specific drift signal (CodeRabbit style)
192
+ */
193
+ export function formatInlineComment(signal, signalId) {
194
+ const lines = [];
195
+ // Add hidden marker with signal ID for tracking
196
+ if (signalId) {
197
+ lines.push(`${INLINE_MARKER_PREFIX}${signalId}${INLINE_MARKER_SUFFIX}`);
50
198
  }
51
- // Info issues collapsed
52
- if (infos.length > 0) {
199
+ // Severity badge (CodeRabbit style)
200
+ const severityBadge = signal.severity === 'critical'
201
+ ? '⚠️ Potential issue | 🔴 Critical'
202
+ : signal.severity === 'warning'
203
+ ? '⚠️ Potential issue | 🟠 Warning'
204
+ : '💡 Suggestion | 🔵 Info';
205
+ // Header with type
206
+ const typeLabel = signal.type.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
207
+ lines.push(`**${severityBadge}**`);
208
+ lines.push('');
209
+ lines.push(`### ${typeLabel}`);
210
+ lines.push('');
211
+ // Message
212
+ lines.push(signal.message);
213
+ // Component context
214
+ if (signal.component) {
215
+ lines.push('');
216
+ lines.push(`**Component:** \`${signal.component}\``);
217
+ }
218
+ // Committable suggestion (if we have current/expected values)
219
+ if (signal.currentValue && signal.expectedValue) {
220
+ lines.push('');
221
+ lines.push('```diff');
222
+ lines.push(`- ${signal.currentValue}`);
223
+ lines.push(`+ ${signal.expectedValue}`);
224
+ lines.push('```');
225
+ lines.push('');
53
226
  lines.push('<details>');
54
- lines.push(`<summary>${infos.length} info-level issue${infos.length === 1 ? '' : 's'}</summary>`);
227
+ lines.push('<summary>📝 Committable suggestion</summary>');
228
+ lines.push('');
229
+ lines.push('```suggestion');
230
+ lines.push(signal.expectedValue);
231
+ lines.push('```');
232
+ lines.push('</details>');
233
+ }
234
+ else if (signal.suggestion) {
55
235
  lines.push('');
56
- for (const signal of infos) {
57
- const loc = signal.file ? ` (${signal.file}${signal.line ? `:${signal.line}` : ''})` : '';
58
- lines.push(`- \`${signal.component || 'Unknown'}\`: ${signal.message}${loc}`);
236
+ lines.push(`> 💡 **Suggestion:** ${signal.suggestion}`);
237
+ }
238
+ // Reaction hint
239
+ lines.push('');
240
+ lines.push('---');
241
+ lines.push('<sub>React with 👍 to acknowledge as intentional, or 👎 if it needs fixing.</sub>');
242
+ return lines.join('\n');
243
+ }
244
+ /**
245
+ * Format a signal for inline commenting from a DriftSignal
246
+ */
247
+ export function formatDriftSignalForInline(drift, signalId) {
248
+ return formatInlineComment({
249
+ type: drift.type,
250
+ severity: drift.severity,
251
+ message: drift.message,
252
+ component: drift.source.entityName,
253
+ suggestion: drift.details.suggestions?.[0],
254
+ currentValue: drift.details.actual,
255
+ expectedValue: drift.details.expected,
256
+ }, signalId);
257
+ }
258
+ /**
259
+ * Format PR comment with AI-powered analysis (CodeRabbit style)
260
+ */
261
+ export function formatAIPRComment(analysis, results) {
262
+ const lines = [COMMENT_MARKER];
263
+ // Header with AI badge
264
+ lines.push('## 🔱 Buoy Design Drift Report');
265
+ lines.push('');
266
+ lines.push('*🤖 AI-powered analysis enabled*');
267
+ lines.push('');
268
+ // AI Overview (the "walkthrough")
269
+ lines.push('### Walkthrough');
270
+ lines.push(analysis.overview);
271
+ lines.push('');
272
+ // Risk level badge
273
+ const riskIcon = analysis.riskLevel === 'high' ? '🔴' : analysis.riskLevel === 'medium' ? '🟡' : '🟢';
274
+ lines.push(`**Risk Level:** ${riskIcon} ${analysis.riskLevel.toUpperCase()}`);
275
+ lines.push('');
276
+ // Changes table
277
+ if (results.summary.total > 0) {
278
+ lines.push('### Changes');
279
+ lines.push('');
280
+ lines.push('| File | Drift Signals | Severity |');
281
+ lines.push('|------|---------------|----------|');
282
+ const byFile = groupByFile(results.signals);
283
+ for (const [file, signals] of Object.entries(byFile).slice(0, 15)) {
284
+ const maxSeverity = getMaxSeverity(signals);
285
+ const severityIcon = maxSeverity === 'critical' ? '🔴' : maxSeverity === 'warning' ? '🟡' : '🔵';
286
+ lines.push(`| \`${file}\` | ${signals.length} | ${severityIcon} ${maxSeverity} |`);
287
+ }
288
+ if (Object.keys(byFile).length > 15) {
289
+ lines.push(`| ... | *${Object.keys(byFile).length - 15} more files* | |`);
59
290
  }
60
291
  lines.push('');
292
+ }
293
+ // Pre-merge checks
294
+ lines.push('### Pre-merge checks');
295
+ lines.push('');
296
+ lines.push('| Check | Status | Details |');
297
+ lines.push('|-------|--------|---------|');
298
+ if (analysis.riskLevel === 'high') {
299
+ lines.push(`| Design System Compliance | ❌ Failed | ${results.summary.critical} critical issues require attention |`);
300
+ }
301
+ else if (analysis.riskLevel === 'medium') {
302
+ lines.push(`| Design System Compliance | ⚠️ Warning | Review recommended before merge |`);
303
+ }
304
+ else {
305
+ lines.push(`| Design System Compliance | ✅ Passed | Low risk, minor issues only |`);
306
+ }
307
+ // Check for intentional drift
308
+ const intentionalCount = [...analysis.criticalIssues, ...analysis.warnings].filter(a => a.isLikelyIntentional).length;
309
+ if (intentionalCount > 0) {
310
+ lines.push(`| Intentional Drift | ℹ️ Info | ${intentionalCount} issue${intentionalCount === 1 ? '' : 's'} appear intentional |`);
311
+ }
312
+ lines.push('');
313
+ // AI-Analyzed Issues
314
+ if (analysis.criticalIssues.length > 0) {
315
+ lines.push('### 📜 AI Analysis - Critical Issues');
316
+ lines.push('');
317
+ for (const issue of analysis.criticalIssues) {
318
+ lines.push(formatAIAnalyzedIssue(issue));
319
+ lines.push('');
320
+ }
321
+ }
322
+ if (analysis.warnings.length > 0) {
323
+ lines.push('<details>');
324
+ lines.push(`<summary>🟡 AI Analysis - Warnings (${analysis.warnings.length})</summary>`);
325
+ lines.push('');
326
+ for (const issue of analysis.warnings) {
327
+ lines.push(formatAIAnalyzedIssue(issue));
328
+ lines.push('');
329
+ }
61
330
  lines.push('</details>');
62
331
  lines.push('');
63
332
  }
333
+ // Recommendations
334
+ if (analysis.recommendations.length > 0) {
335
+ lines.push('### 💡 Recommendations');
336
+ lines.push('');
337
+ for (const rec of analysis.recommendations) {
338
+ lines.push(`- ${rec}`);
339
+ }
340
+ lines.push('');
341
+ }
342
+ // Finishing touches
343
+ lines.push('### ✨ Finishing touches');
344
+ lines.push('');
345
+ lines.push('React to provide feedback:');
346
+ lines.push('- 👍 = Approve all flagged drift as intentional');
347
+ lines.push('- 👎 = Issues need fixing before merge');
348
+ lines.push('- 😕 = Need clarification on design system rules');
349
+ lines.push('');
64
350
  // Footer
65
351
  lines.push('---');
66
- lines.push('<sub>🔱 <a href="https://github.com/dylantarre/buoy">Buoy</a></sub>');
352
+ lines.push('<sub>🔱 <a href="https://github.com/dylantarre/buoy">Buoy</a> - AI-powered design drift detection</sub>');
353
+ return lines.join('\n');
354
+ }
355
+ function formatAIAnalyzedIssue(issue) {
356
+ const lines = [];
357
+ const icon = issue.signal.severity === 'critical' ? '🔴' : issue.signal.severity === 'warning' ? '🟡' : '🔵';
358
+ const typeLabel = issue.signal.type.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
359
+ // Action badge
360
+ const actionBadge = issue.suggestedAction === 'fix'
361
+ ? '⚠️ **Needs Fix**'
362
+ : issue.suggestedAction === 'approve'
363
+ ? '✅ **Likely Intentional**'
364
+ : '💬 **Discuss**';
365
+ lines.push(`#### ${icon} ${typeLabel}`);
366
+ const location = issue.signal.source.location;
367
+ if (location) {
368
+ lines.push(`📍 \`${location}\``);
369
+ }
370
+ lines.push('');
371
+ lines.push(`> ${issue.signal.message}`);
372
+ lines.push('');
373
+ // AI Analysis
374
+ lines.push(`**🤖 AI Analysis:** ${issue.analysis}`);
375
+ lines.push('');
376
+ lines.push(`**Suggested Action:** ${actionBadge}`);
377
+ if (issue.isLikelyIntentional) {
378
+ lines.push('');
379
+ lines.push(`*Confidence: ${Math.round(issue.confidence * 100)}% - This drift appears intentional based on context.*`);
380
+ }
381
+ // Related history
382
+ if (issue.relatedHistory.length > 0) {
383
+ lines.push('');
384
+ lines.push('**Context:**');
385
+ for (const h of issue.relatedHistory) {
386
+ lines.push(`- ${h}`);
387
+ }
388
+ }
67
389
  return lines.join('\n');
68
390
  }
69
391
  //# sourceMappingURL=github-formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-formatter.js","sourceRoot":"","sources":["../../src/integrations/github-formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-formatter.js","sourceRoot":"","sources":["../../src/integrations/github-formatter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQzF,MAAM,UAAU,eAAe,CAAC,OAAoB,EAAE,QAAoB;IACxE,MAAM,KAAK,GAAa,CAAC,cAAc,CAAC,CAAC;IAEzC,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,wCAAwC;IACxC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IACrG,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACjG,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,OAAO,CAAC,MAAM,MAAM,YAAY,IAAI,WAAW,IAAI,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,2CAA2C,QAAQ,yBAAyB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;QAC/H,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,gCAAgC,OAAO,WAAW,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,6CAA6C,OAAO,WAAW,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;QAClH,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,8BAA8B;IAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAClH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,mCAAmC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QACzE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,gCAAgC,SAAS,CAAC,MAAM,aAAa,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QACvE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,MAAM,GAAG,EAAE,iBAAiB,CAAC,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,iBAAiB;QACjB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,SAAS,IAAI,GAAG,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,6GAA6G,CAAC,CAAC;IAE1H,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAoB;IAC/C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,sCAAsC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,0CAA0C,CAAC,CAAC;IAC3I,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,WAAW,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gDAAgD,CAAC,CAAC;IAC5G,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,4BAA4B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,gBAAgB,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,mBAAmB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,OAA+B;IAClD,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,OAA+B;IACrD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACpE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAiC;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAExF,gBAAgB;IAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhG,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAQnC,EAAE,QAAiB;IAClB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,gDAAgD;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,GAAG,QAAQ,GAAG,oBAAoB,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,KAAK,UAAU;QAClD,CAAC,CAAC,kCAAkC;QACpC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;YAC/B,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,yBAAyB,CAAC;IAE9B,mBAAmB;IACnB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAExF,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3B,oBAAoB;IACpB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,8DAA8D;IAC9D,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;IAEhG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAkB,EAAE,QAAgB;IAC7E,OAAO,mBAAmB,CAAC;QACzB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;QAClC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC1C,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAA4B;QACxD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,QAA8B;KAC5D,EAAE,QAAQ,CAAC,CAAC;AACf,CAAC;AAsBD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA2B,EAAE,OAAoB;IACjF,MAAM,KAAK,GAAa,CAAC,cAAc,CAAC,CAAC;IAEzC,uBAAuB;IACvB,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,kCAAkC;IAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,mBAAmB;IACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,KAAK,CAAC,IAAI,CAAC,mBAAmB,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACjG,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,OAAO,CAAC,MAAM,MAAM,YAAY,IAAI,WAAW,IAAI,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAE3C,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,2CAA2C,OAAO,CAAC,OAAO,CAAC,QAAQ,sCAAsC,CAAC,CAAC;IACxH,CAAC;SAAM,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACtF,CAAC;IAED,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,CAAC,GAAG,QAAQ,CAAC,cAAc,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;IACtH,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,mCAAmC,gBAAgB,SAAS,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC;IACnI,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,qBAAqB;IACrB,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,uCAAuC,QAAQ,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,yGAAyG,CAAC,CAAC;IAEtH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAoB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7G,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAE9F,eAAe;IACf,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,KAAK,KAAK;QACjD,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;YACrC,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,gBAAgB,CAAC;IAErB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACxH,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,4 +1,43 @@
1
1
  export declare const COMMENT_MARKER = "<!-- buoy-drift-report -->";
2
+ export declare const INLINE_MARKER_PREFIX = "<!-- buoy-drift:";
3
+ export declare const INLINE_MARKER_SUFFIX = " -->";
4
+ export declare const REACTION_APPROVED = "+1";
5
+ export declare const REACTION_DISPUTED = "-1";
6
+ export declare const REACTION_CONFUSED = "confused";
7
+ export interface CommentReaction {
8
+ user: string;
9
+ reaction: '+1' | '-1' | 'laugh' | 'hooray' | 'confused' | 'heart' | 'rocket' | 'eyes';
10
+ createdAt: Date;
11
+ }
12
+ export interface ReviewComment {
13
+ id: number;
14
+ body: string;
15
+ path: string;
16
+ line: number | null;
17
+ user: string;
18
+ createdAt: Date;
19
+ reactions: CommentReaction[];
20
+ driftSignalId?: string;
21
+ }
22
+ export interface PRInfo {
23
+ number: number;
24
+ title: string;
25
+ author: string;
26
+ headSha: string;
27
+ baseSha: string;
28
+ headBranch: string;
29
+ baseBranch: string;
30
+ createdAt: Date;
31
+ updatedAt: Date;
32
+ filesChanged: PRFile[];
33
+ }
34
+ export interface PRFile {
35
+ filename: string;
36
+ status: 'added' | 'removed' | 'modified' | 'renamed' | 'copied' | 'changed' | 'unchanged';
37
+ additions: number;
38
+ deletions: number;
39
+ patch?: string;
40
+ }
2
41
  export interface GitHubContext {
3
42
  token: string;
4
43
  owner: string;
@@ -12,6 +51,42 @@ export declare class GitHubClient {
12
51
  findExistingComment(): Promise<number | null>;
13
52
  createOrUpdateComment(body: string): Promise<void>;
14
53
  deleteComment(): Promise<void>;
54
+ /**
55
+ * Get PR information including files changed
56
+ */
57
+ getPRInfo(): Promise<PRInfo>;
58
+ /**
59
+ * Get all review comments on the PR with their reactions
60
+ */
61
+ getReviewComments(): Promise<ReviewComment[]>;
62
+ /**
63
+ * Get reactions for a specific comment
64
+ */
65
+ getCommentReactions(commentId: number): Promise<CommentReaction[]>;
66
+ /**
67
+ * Get feedback summary from reactions on Buoy comments
68
+ */
69
+ getFeedbackSummary(): Promise<{
70
+ approved: string[];
71
+ disputed: string[];
72
+ confused: string[];
73
+ }>;
74
+ /**
75
+ * Create an inline review comment on a specific file and line
76
+ */
77
+ createInlineComment(path: string, line: number, body: string, driftSignalId?: string): Promise<number>;
78
+ /**
79
+ * Find all inline comments created by Buoy
80
+ */
81
+ findBuoyInlineComments(): Promise<ReviewComment[]>;
82
+ /**
83
+ * Get drift signals that have been acknowledged (approved via reaction)
84
+ */
85
+ getAcknowledgedDriftSignals(): Promise<string[]>;
86
+ /**
87
+ * Delete all inline Buoy comments (for cleanup/reset)
88
+ */
89
+ deleteInlineComments(): Promise<number>;
15
90
  }
16
91
  export declare function parseRepoString(repoString: string): {
17
92
  owner: string;
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/integrations/github.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAU5B,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB7C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAYrC;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMnF"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/integrations/github.ts"],"names":[],"mappings":"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"}