@buoy-design/agents 0.1.0
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/dist/acceptance.d.ts +30 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +205 -0
- package/dist/acceptance.js.map +1 -0
- package/dist/fixability.d.ts +30 -0
- package/dist/fixability.d.ts.map +1 -0
- package/dist/fixability.js +182 -0
- package/dist/fixability.js.map +1 -0
- package/dist/generator.d.ts +26 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +194 -0
- package/dist/generator.js.map +1 -0
- package/dist/history.d.ts +30 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +182 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/review.d.ts +34 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +234 -0
- package/dist/review.js.map +1 -0
- package/dist/types.d.ts +245 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/package.json +77 -0
package/dist/review.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
// packages/agents/src/review.ts
|
|
2
|
+
// Reviews codebase to find what Buoy missed
|
|
3
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
4
|
+
const MODEL = 'claude-sonnet-4-20250514';
|
|
5
|
+
export class ReviewAgent {
|
|
6
|
+
client;
|
|
7
|
+
constructor(apiKey) {
|
|
8
|
+
this.client = new Anthropic({
|
|
9
|
+
apiKey: apiKey ?? process.env.ANTHROPIC_API_KEY,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Review what Buoy found vs what's in the repo
|
|
14
|
+
*/
|
|
15
|
+
async analyze(input) {
|
|
16
|
+
try {
|
|
17
|
+
const prompt = this.buildPrompt(input);
|
|
18
|
+
const response = await this.client.messages.create({
|
|
19
|
+
model: MODEL,
|
|
20
|
+
max_tokens: 4000,
|
|
21
|
+
messages: [{ role: 'user', content: prompt }],
|
|
22
|
+
});
|
|
23
|
+
const textContent = response.content.find((c) => c.type === 'text');
|
|
24
|
+
const responseText = textContent?.type === 'text' ? textContent.text : '';
|
|
25
|
+
const parsed = this.parseResponse(responseText);
|
|
26
|
+
return {
|
|
27
|
+
success: true,
|
|
28
|
+
data: parsed,
|
|
29
|
+
confidence: parsed.missedPatterns.length > 0 ? 0.8 : 0.9,
|
|
30
|
+
tokensUsed: response.usage.input_tokens + response.usage.output_tokens,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: error instanceof Error ? error.message : String(error),
|
|
37
|
+
confidence: 0,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build the analysis prompt
|
|
43
|
+
*/
|
|
44
|
+
buildPrompt(input) {
|
|
45
|
+
const lines = [];
|
|
46
|
+
lines.push(`# Buoy Coverage Analysis: ${input.repo.owner}/${input.repo.name}`);
|
|
47
|
+
lines.push('');
|
|
48
|
+
lines.push('## Your Task');
|
|
49
|
+
lines.push('');
|
|
50
|
+
lines.push('Buoy is a design drift detection tool. It scans codebases to find:');
|
|
51
|
+
lines.push('- **Components**: React/Vue/etc components that are part of the design system');
|
|
52
|
+
lines.push('- **Design Tokens**: Colors, spacing, typography defined as tokens');
|
|
53
|
+
lines.push('- **Drift**: Places where code diverges from the design system');
|
|
54
|
+
lines.push('');
|
|
55
|
+
lines.push('Review what Buoy found and identify what it MISSED.');
|
|
56
|
+
lines.push('');
|
|
57
|
+
// Buoy results
|
|
58
|
+
lines.push('## What Buoy Found');
|
|
59
|
+
lines.push('');
|
|
60
|
+
lines.push(`- Components detected: **${input.buoyOutput.components}**`);
|
|
61
|
+
lines.push(`- Tokens detected: **${input.buoyOutput.tokens}**`);
|
|
62
|
+
lines.push(`- Drift signals: **${input.buoyOutput.driftSignals}**`);
|
|
63
|
+
lines.push('');
|
|
64
|
+
// Config if available
|
|
65
|
+
if (input.buoyConfig) {
|
|
66
|
+
lines.push('## Buoy Configuration');
|
|
67
|
+
lines.push('```javascript');
|
|
68
|
+
lines.push(input.buoyConfig);
|
|
69
|
+
lines.push('```');
|
|
70
|
+
lines.push('');
|
|
71
|
+
}
|
|
72
|
+
// Repo structure
|
|
73
|
+
lines.push('## Repository Structure');
|
|
74
|
+
lines.push('```');
|
|
75
|
+
lines.push(input.repoStructure.slice(0, 50).join('\n'));
|
|
76
|
+
if (input.repoStructure.length > 50) {
|
|
77
|
+
lines.push(`... and ${input.repoStructure.length - 50} more`);
|
|
78
|
+
}
|
|
79
|
+
lines.push('```');
|
|
80
|
+
lines.push('');
|
|
81
|
+
// Sampled files
|
|
82
|
+
lines.push('## Sampled Files');
|
|
83
|
+
lines.push('');
|
|
84
|
+
for (const file of input.sampledFiles.slice(0, 8)) {
|
|
85
|
+
lines.push(`### ${file.path}`);
|
|
86
|
+
lines.push(`*${file.reason}*`);
|
|
87
|
+
lines.push('');
|
|
88
|
+
lines.push('```' + this.getFileExtension(file.path));
|
|
89
|
+
lines.push(this.truncateContent(file.content, 100));
|
|
90
|
+
lines.push('```');
|
|
91
|
+
lines.push('');
|
|
92
|
+
}
|
|
93
|
+
// Output format
|
|
94
|
+
lines.push('## Required Output');
|
|
95
|
+
lines.push('');
|
|
96
|
+
lines.push('Provide analysis, then end with JSON:');
|
|
97
|
+
lines.push('');
|
|
98
|
+
lines.push('```json');
|
|
99
|
+
lines.push(JSON.stringify({
|
|
100
|
+
missedPatterns: [{
|
|
101
|
+
category: 'component | token | drift | source',
|
|
102
|
+
description: 'What was missed',
|
|
103
|
+
evidence: { file: 'path', lineRange: [1, 10], codeSnippet: '...' },
|
|
104
|
+
suggestedDetection: 'How Buoy could catch this',
|
|
105
|
+
severity: 'high | medium | low',
|
|
106
|
+
}],
|
|
107
|
+
improvements: [{
|
|
108
|
+
area: 'scanner | config | drift-rules | token-parser',
|
|
109
|
+
title: 'Short title',
|
|
110
|
+
description: 'Detailed description',
|
|
111
|
+
examples: ['Example from repo'],
|
|
112
|
+
estimatedImpact: 'Would catch X items',
|
|
113
|
+
}],
|
|
114
|
+
summary: {
|
|
115
|
+
totalMissed: 0,
|
|
116
|
+
missedByCategory: {},
|
|
117
|
+
improvementAreas: [],
|
|
118
|
+
},
|
|
119
|
+
}, null, 2));
|
|
120
|
+
lines.push('```');
|
|
121
|
+
return lines.join('\n');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Parse Claude's response
|
|
125
|
+
*/
|
|
126
|
+
parseResponse(response) {
|
|
127
|
+
try {
|
|
128
|
+
const jsonMatch = response.match(/```json\s*([\s\S]*?)\s*```\s*$/);
|
|
129
|
+
if (jsonMatch) {
|
|
130
|
+
const parsed = JSON.parse(jsonMatch[1] ?? '{}');
|
|
131
|
+
return {
|
|
132
|
+
missedPatterns: this.validateMissedPatterns(parsed.missedPatterns ?? []),
|
|
133
|
+
improvements: this.validateImprovements(parsed.improvements ?? []),
|
|
134
|
+
summary: parsed.summary ?? {
|
|
135
|
+
totalMissed: 0,
|
|
136
|
+
missedByCategory: {},
|
|
137
|
+
improvementAreas: [],
|
|
138
|
+
},
|
|
139
|
+
confidence: 0.8,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Fall through
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
missedPatterns: [],
|
|
148
|
+
improvements: [],
|
|
149
|
+
summary: { totalMissed: 0, missedByCategory: {}, improvementAreas: [] },
|
|
150
|
+
confidence: 0,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validate missed patterns array
|
|
155
|
+
*/
|
|
156
|
+
validateMissedPatterns(patterns) {
|
|
157
|
+
const valid = [];
|
|
158
|
+
const categories = ['component', 'token', 'drift', 'source'];
|
|
159
|
+
for (const p of patterns) {
|
|
160
|
+
if (!p || typeof p !== 'object')
|
|
161
|
+
continue;
|
|
162
|
+
const pattern = p;
|
|
163
|
+
const category = pattern['category'];
|
|
164
|
+
if (!categories.includes(category))
|
|
165
|
+
continue;
|
|
166
|
+
valid.push({
|
|
167
|
+
category: category,
|
|
168
|
+
description: String(pattern['description'] ?? ''),
|
|
169
|
+
evidence: {
|
|
170
|
+
file: String(pattern['evidence']?.['file'] ?? ''),
|
|
171
|
+
lineRange: pattern['evidence']?.['lineRange'],
|
|
172
|
+
codeSnippet: pattern['evidence']?.['codeSnippet'],
|
|
173
|
+
},
|
|
174
|
+
suggestedDetection: String(pattern['suggestedDetection'] ?? ''),
|
|
175
|
+
severity: (['high', 'medium', 'low'].includes(pattern['severity'])
|
|
176
|
+
? pattern['severity']
|
|
177
|
+
: 'medium'),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return valid;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Validate improvements array
|
|
184
|
+
*/
|
|
185
|
+
validateImprovements(improvements) {
|
|
186
|
+
const valid = [];
|
|
187
|
+
const areas = ['scanner', 'config', 'drift-rules', 'token-parser'];
|
|
188
|
+
for (const i of improvements) {
|
|
189
|
+
if (!i || typeof i !== 'object')
|
|
190
|
+
continue;
|
|
191
|
+
const imp = i;
|
|
192
|
+
const area = imp['area'];
|
|
193
|
+
if (!areas.includes(area))
|
|
194
|
+
continue;
|
|
195
|
+
valid.push({
|
|
196
|
+
area: area,
|
|
197
|
+
title: String(imp['title'] ?? ''),
|
|
198
|
+
description: String(imp['description'] ?? ''),
|
|
199
|
+
examples: Array.isArray(imp['examples']) ? imp['examples'].map(String) : [],
|
|
200
|
+
estimatedImpact: String(imp['estimatedImpact'] ?? ''),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return valid;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get file extension for syntax highlighting
|
|
207
|
+
*/
|
|
208
|
+
getFileExtension(path) {
|
|
209
|
+
const ext = path.split('.').pop()?.toLowerCase() ?? '';
|
|
210
|
+
const mapping = {
|
|
211
|
+
ts: 'typescript',
|
|
212
|
+
tsx: 'tsx',
|
|
213
|
+
js: 'javascript',
|
|
214
|
+
jsx: 'jsx',
|
|
215
|
+
json: 'json',
|
|
216
|
+
css: 'css',
|
|
217
|
+
md: 'markdown',
|
|
218
|
+
};
|
|
219
|
+
return mapping[ext] ?? ext;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Truncate content to max lines
|
|
223
|
+
*/
|
|
224
|
+
truncateContent(content, maxLines) {
|
|
225
|
+
const lines = content.split('\n');
|
|
226
|
+
if (lines.length <= maxLines)
|
|
227
|
+
return content;
|
|
228
|
+
const half = Math.floor(maxLines / 2);
|
|
229
|
+
const start = lines.slice(0, half).join('\n');
|
|
230
|
+
const end = lines.slice(-half).join('\n');
|
|
231
|
+
return `${start}\n\n// ... ${lines.length - maxLines} lines omitted ...\n\n${end}`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Context passed to agents about a repository
|
|
4
|
+
*/
|
|
5
|
+
export interface RepoContext {
|
|
6
|
+
owner: string;
|
|
7
|
+
name: string;
|
|
8
|
+
path: string;
|
|
9
|
+
defaultBranch: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
language?: string;
|
|
12
|
+
designSystemSignals?: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A sampled file with content
|
|
16
|
+
*/
|
|
17
|
+
export interface SampledFile {
|
|
18
|
+
path: string;
|
|
19
|
+
content: string;
|
|
20
|
+
reason: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Standard agent result structure
|
|
24
|
+
*/
|
|
25
|
+
export interface AgentResult<T> {
|
|
26
|
+
success: boolean;
|
|
27
|
+
data?: T;
|
|
28
|
+
error?: string;
|
|
29
|
+
confidence: number;
|
|
30
|
+
tokensUsed?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface HistoryInput {
|
|
33
|
+
repoPath: string;
|
|
34
|
+
filePath: string;
|
|
35
|
+
lineRange?: [number, number];
|
|
36
|
+
}
|
|
37
|
+
export interface CommitInfo {
|
|
38
|
+
hash: string;
|
|
39
|
+
date: string;
|
|
40
|
+
author: string;
|
|
41
|
+
email: string;
|
|
42
|
+
message: string;
|
|
43
|
+
prNumber?: number;
|
|
44
|
+
}
|
|
45
|
+
export declare const HistoryVerdictSchema: z.ZodEnum<["accidental", "intentional", "ai-generated", "unknown"]>;
|
|
46
|
+
export type HistoryVerdict = z.infer<typeof HistoryVerdictSchema>;
|
|
47
|
+
export interface HistoryResult {
|
|
48
|
+
verdict: HistoryVerdict;
|
|
49
|
+
timeline: CommitInfo[];
|
|
50
|
+
context: string;
|
|
51
|
+
confidence: number;
|
|
52
|
+
lastModified: string;
|
|
53
|
+
authors: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface ReviewInput {
|
|
56
|
+
repo: RepoContext;
|
|
57
|
+
buoyOutput: {
|
|
58
|
+
components: number;
|
|
59
|
+
tokens: number;
|
|
60
|
+
driftSignals: number;
|
|
61
|
+
signals?: unknown[];
|
|
62
|
+
};
|
|
63
|
+
sampledFiles: SampledFile[];
|
|
64
|
+
buoyConfig?: string;
|
|
65
|
+
repoStructure: string[];
|
|
66
|
+
}
|
|
67
|
+
export declare const MissedPatternCategorySchema: z.ZodEnum<["component", "token", "drift", "source"]>;
|
|
68
|
+
export type MissedPatternCategory = z.infer<typeof MissedPatternCategorySchema>;
|
|
69
|
+
export interface MissedPattern {
|
|
70
|
+
category: MissedPatternCategory;
|
|
71
|
+
description: string;
|
|
72
|
+
evidence: {
|
|
73
|
+
file: string;
|
|
74
|
+
lineRange?: [number, number];
|
|
75
|
+
codeSnippet?: string;
|
|
76
|
+
};
|
|
77
|
+
suggestedDetection: string;
|
|
78
|
+
severity: 'high' | 'medium' | 'low';
|
|
79
|
+
}
|
|
80
|
+
export interface BuoyImprovement {
|
|
81
|
+
area: 'scanner' | 'config' | 'drift-rules' | 'token-parser';
|
|
82
|
+
title: string;
|
|
83
|
+
description: string;
|
|
84
|
+
examples: string[];
|
|
85
|
+
estimatedImpact: string;
|
|
86
|
+
}
|
|
87
|
+
export interface ReviewResult {
|
|
88
|
+
missedPatterns: MissedPattern[];
|
|
89
|
+
improvements: BuoyImprovement[];
|
|
90
|
+
summary: {
|
|
91
|
+
totalMissed: number;
|
|
92
|
+
missedByCategory: Record<string, number>;
|
|
93
|
+
improvementAreas: string[];
|
|
94
|
+
};
|
|
95
|
+
confidence: number;
|
|
96
|
+
}
|
|
97
|
+
export interface AcceptanceInput {
|
|
98
|
+
repo: RepoContext;
|
|
99
|
+
contributingMd?: string;
|
|
100
|
+
recentPRs: Array<{
|
|
101
|
+
number: number;
|
|
102
|
+
merged: boolean;
|
|
103
|
+
author: string;
|
|
104
|
+
daysOpen: number;
|
|
105
|
+
reviewComments: number;
|
|
106
|
+
}>;
|
|
107
|
+
maintainerActivity: {
|
|
108
|
+
commitsLastMonth: number;
|
|
109
|
+
prsReviewedLastMonth: number;
|
|
110
|
+
avgReviewTimeHours: number;
|
|
111
|
+
};
|
|
112
|
+
issueLabels?: string[];
|
|
113
|
+
}
|
|
114
|
+
export declare const AcceptanceLikelihoodSchema: z.ZodEnum<["high", "medium", "low"]>;
|
|
115
|
+
export type AcceptanceLikelihood = z.infer<typeof AcceptanceLikelihoodSchema>;
|
|
116
|
+
/**
|
|
117
|
+
* Extracted contribution process preferences from CONTRIBUTING.md
|
|
118
|
+
*/
|
|
119
|
+
export interface ContributionProcess {
|
|
120
|
+
/**
|
|
121
|
+
* Whether an issue is required before submitting a PR
|
|
122
|
+
* - true: Always require issue first
|
|
123
|
+
* - false: Direct PRs allowed
|
|
124
|
+
* - 'features-only': Issues required for features, not bug fixes
|
|
125
|
+
* - 'major-only': Issues required for major changes only
|
|
126
|
+
*/
|
|
127
|
+
issueRequired: boolean | 'features-only' | 'major-only';
|
|
128
|
+
/**
|
|
129
|
+
* What types of direct PRs are allowed
|
|
130
|
+
* - 'all': Any PR welcome without issue
|
|
131
|
+
* - 'small-fixes': Only typos, docs, small bug fixes
|
|
132
|
+
* - 'none': Must always open issue first
|
|
133
|
+
*/
|
|
134
|
+
directPRsAllowed: 'all' | 'small-fixes' | 'none';
|
|
135
|
+
/**
|
|
136
|
+
* Whether discussion/RFC is expected before implementation
|
|
137
|
+
*/
|
|
138
|
+
discussionFirst: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Preferred way to propose changes
|
|
141
|
+
*/
|
|
142
|
+
preferredFlow: 'issue-then-pr' | 'pr-directly' | 'discussion-first' | 'depends-on-scope';
|
|
143
|
+
/**
|
|
144
|
+
* Direct quote from CONTRIBUTING.md supporting this interpretation
|
|
145
|
+
*/
|
|
146
|
+
evidence: string;
|
|
147
|
+
/**
|
|
148
|
+
* Confidence in the extraction (0-100)
|
|
149
|
+
*/
|
|
150
|
+
confidence: number;
|
|
151
|
+
}
|
|
152
|
+
export interface AcceptanceResult {
|
|
153
|
+
likelihood: AcceptanceLikelihood;
|
|
154
|
+
score: number;
|
|
155
|
+
reasoning: string;
|
|
156
|
+
suggestedApproach: string;
|
|
157
|
+
redFlags: string[];
|
|
158
|
+
greenFlags: string[];
|
|
159
|
+
/**
|
|
160
|
+
* Extracted contribution process from CONTRIBUTING.md
|
|
161
|
+
* Only present if contributingMd was provided
|
|
162
|
+
*/
|
|
163
|
+
contributionProcess?: ContributionProcess;
|
|
164
|
+
}
|
|
165
|
+
export interface FixabilityInput {
|
|
166
|
+
signal: {
|
|
167
|
+
id: string;
|
|
168
|
+
type: string;
|
|
169
|
+
message: string;
|
|
170
|
+
file: string;
|
|
171
|
+
line?: number;
|
|
172
|
+
severity: string;
|
|
173
|
+
};
|
|
174
|
+
fileContent: string;
|
|
175
|
+
historyContext?: HistoryResult;
|
|
176
|
+
surroundingCode?: string;
|
|
177
|
+
designTokens?: Record<string, string>;
|
|
178
|
+
}
|
|
179
|
+
export declare const FixTierSchema: z.ZodEnum<["slam-dunk", "review", "skip"]>;
|
|
180
|
+
export type FixTier = z.infer<typeof FixTierSchema>;
|
|
181
|
+
export declare const FixDifficultySchema: z.ZodEnum<["one-liner", "moderate", "complex"]>;
|
|
182
|
+
export type FixDifficulty = z.infer<typeof FixDifficultySchema>;
|
|
183
|
+
export interface FixabilityResult {
|
|
184
|
+
tier: FixTier;
|
|
185
|
+
difficulty: FixDifficulty;
|
|
186
|
+
reasoning: string;
|
|
187
|
+
intentional: boolean;
|
|
188
|
+
safeToFix: boolean;
|
|
189
|
+
suggestedFix?: {
|
|
190
|
+
before: string;
|
|
191
|
+
after: string;
|
|
192
|
+
explanation: string;
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
export interface GeneratorInput {
|
|
196
|
+
repo: RepoContext;
|
|
197
|
+
signals: Array<{
|
|
198
|
+
signal: FixabilityInput['signal'];
|
|
199
|
+
fixability: FixabilityResult;
|
|
200
|
+
history?: HistoryResult;
|
|
201
|
+
}>;
|
|
202
|
+
acceptanceContext: AcceptanceResult;
|
|
203
|
+
designTokens?: Record<string, string>;
|
|
204
|
+
}
|
|
205
|
+
export interface GeneratedFix {
|
|
206
|
+
file: string;
|
|
207
|
+
line: number;
|
|
208
|
+
before: string;
|
|
209
|
+
after: string;
|
|
210
|
+
explanation: string;
|
|
211
|
+
}
|
|
212
|
+
export interface GeneratorResult {
|
|
213
|
+
fixes: GeneratedFix[];
|
|
214
|
+
prTitle: string;
|
|
215
|
+
prBody: string;
|
|
216
|
+
confidence: number;
|
|
217
|
+
cherryPickNote?: string;
|
|
218
|
+
filesChanged: number;
|
|
219
|
+
}
|
|
220
|
+
export interface ContributionState {
|
|
221
|
+
version: number;
|
|
222
|
+
queue: Array<{
|
|
223
|
+
owner: string;
|
|
224
|
+
name: string;
|
|
225
|
+
url: string;
|
|
226
|
+
addedAt: string;
|
|
227
|
+
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
228
|
+
}>;
|
|
229
|
+
processed: Array<{
|
|
230
|
+
owner: string;
|
|
231
|
+
name: string;
|
|
232
|
+
processedAt: string;
|
|
233
|
+
result: 'pr-staged' | 'no-fixes' | 'skipped' | 'error';
|
|
234
|
+
prUrl?: string;
|
|
235
|
+
error?: string;
|
|
236
|
+
}>;
|
|
237
|
+
pendingPRs: Array<{
|
|
238
|
+
owner: string;
|
|
239
|
+
name: string;
|
|
240
|
+
generatedAt: string;
|
|
241
|
+
fixCount: number;
|
|
242
|
+
confidence: number;
|
|
243
|
+
}>;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// packages/agents/src/types.ts
|
|
2
|
+
// Shared types for all Buoy agents
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export const HistoryVerdictSchema = z.enum([
|
|
5
|
+
'accidental', // Dev didn't know about the token/pattern
|
|
6
|
+
'intentional', // Deliberate override (comment, clear reason)
|
|
7
|
+
'ai-generated', // Looks like Copilot/Claude output
|
|
8
|
+
'unknown', // Can't determine
|
|
9
|
+
]);
|
|
10
|
+
export const MissedPatternCategorySchema = z.enum([
|
|
11
|
+
'component',
|
|
12
|
+
'token',
|
|
13
|
+
'drift',
|
|
14
|
+
'source',
|
|
15
|
+
]);
|
|
16
|
+
export const AcceptanceLikelihoodSchema = z.enum(['high', 'medium', 'low']);
|
|
17
|
+
export const FixTierSchema = z.enum(['slam-dunk', 'review', 'skip']);
|
|
18
|
+
export const FixDifficultySchema = z.enum(['one-liner', 'moderate', 'complex']);
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,mCAAmC;AAEnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0DxB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,YAAY,EAAK,0CAA0C;IAC3D,aAAa,EAAI,8CAA8C;IAC/D,cAAc,EAAG,mCAAmC;IACpD,SAAS,EAAQ,kBAAkB;CACpC,CAAC,CAAC;AA8BH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC;IAChD,WAAW;IACX,OAAO;IACP,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAyDH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AA+E5E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAIrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@buoy-design/agents",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI agents for design system analysis, history review, and contribution generation",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Buoy <hello@buoy.design>",
|
|
8
|
+
"homepage": "https://buoy.design",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/buoy-design/buoy.git",
|
|
12
|
+
"directory": "packages/agents"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/buoy-design/buoy/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"buoy",
|
|
19
|
+
"design-system",
|
|
20
|
+
"agents",
|
|
21
|
+
"ai",
|
|
22
|
+
"drift-detection"
|
|
23
|
+
],
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./history": {
|
|
36
|
+
"types": "./dist/history.d.ts",
|
|
37
|
+
"import": "./dist/history.js"
|
|
38
|
+
},
|
|
39
|
+
"./review": {
|
|
40
|
+
"types": "./dist/review.d.ts",
|
|
41
|
+
"import": "./dist/review.js"
|
|
42
|
+
},
|
|
43
|
+
"./acceptance": {
|
|
44
|
+
"types": "./dist/acceptance.d.ts",
|
|
45
|
+
"import": "./dist/acceptance.js"
|
|
46
|
+
},
|
|
47
|
+
"./fixability": {
|
|
48
|
+
"types": "./dist/fixability.d.ts",
|
|
49
|
+
"import": "./dist/fixability.js"
|
|
50
|
+
},
|
|
51
|
+
"./generator": {
|
|
52
|
+
"types": "./dist/generator.d.ts",
|
|
53
|
+
"import": "./dist/generator.js"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@anthropic-ai/sdk": "^0.32.1",
|
|
58
|
+
"simple-git": "^3.27.0",
|
|
59
|
+
"zod": "^3.24.1"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"@buoy-design/core": "0.3.6"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"typescript": "^5.7.2",
|
|
66
|
+
"vitest": "^2.1.0",
|
|
67
|
+
"@buoy-design/core": "0.3.6"
|
|
68
|
+
},
|
|
69
|
+
"scripts": {
|
|
70
|
+
"build": "tsc",
|
|
71
|
+
"dev": "tsc --watch",
|
|
72
|
+
"typecheck": "tsc --noEmit",
|
|
73
|
+
"clean": "rm -rf dist",
|
|
74
|
+
"test": "vitest run",
|
|
75
|
+
"test:watch": "vitest"
|
|
76
|
+
}
|
|
77
|
+
}
|