@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/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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"}
@@ -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
+ }