@buoy-design/cli 0.1.13 → 0.1.14
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/commands/begin.d.ts.map +1 -1
- package/dist/commands/begin.js +18 -0
- package/dist/commands/begin.js.map +1 -1
- package/dist/commands/check.d.ts +10 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +75 -1
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/ci.d.ts.map +1 -1
- package/dist/commands/ci.js +29 -3
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/ci.logic.d.ts +8 -2
- package/dist/commands/ci.logic.d.ts.map +1 -1
- package/dist/commands/ci.logic.js +17 -3
- package/dist/commands/ci.logic.js.map +1 -1
- package/dist/commands/context.d.ts +9 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +217 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/fix.d.ts +8 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +224 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/skill.d.ts +9 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +190 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/tokens.d.ts.map +1 -1
- package/dist/commands/tokens.js +169 -2
- package/dist/commands/tokens.js.map +1 -1
- package/dist/fix/applier.d.ts +25 -0
- package/dist/fix/applier.d.ts.map +1 -0
- package/dist/fix/applier.js +211 -0
- package/dist/fix/applier.js.map +1 -0
- package/dist/fix/index.d.ts +10 -0
- package/dist/fix/index.d.ts.map +1 -0
- package/dist/fix/index.js +8 -0
- package/dist/fix/index.js.map +1 -0
- package/dist/fix/safety.d.ts +30 -0
- package/dist/fix/safety.d.ts.map +1 -0
- package/dist/fix/safety.js +168 -0
- package/dist/fix/safety.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -13
- package/dist/index.js.map +1 -1
- package/dist/output/fix-formatters.d.ts +36 -0
- package/dist/output/fix-formatters.d.ts.map +1 -0
- package/dist/output/fix-formatters.js +247 -0
- package/dist/output/fix-formatters.js.map +1 -0
- package/dist/output/index.d.ts +1 -0
- package/dist/output/index.d.ts.map +1 -1
- package/dist/output/index.js +1 -0
- package/dist/output/index.js.map +1 -1
- package/dist/output/reports.d.ts +154 -0
- package/dist/output/reports.d.ts.map +1 -0
- package/dist/output/reports.js +392 -0
- package/dist/output/reports.js.map +1 -0
- package/dist/services/context-generator.d.ts +43 -0
- package/dist/services/context-generator.d.ts.map +1 -0
- package/dist/services/context-generator.js +252 -0
- package/dist/services/context-generator.js.map +1 -0
- package/dist/services/skill-export.d.ts +96 -0
- package/dist/services/skill-export.d.ts.map +1 -0
- package/dist/services/skill-export.js +566 -0
- package/dist/services/skill-export.js.map +1 -0
- package/dist/wizard/ai-guardrails-generator.d.ts +20 -0
- package/dist/wizard/ai-guardrails-generator.d.ts.map +1 -0
- package/dist/wizard/ai-guardrails-generator.js +259 -0
- package/dist/wizard/ai-guardrails-generator.js.map +1 -0
- package/dist/wizard/index.d.ts +1 -0
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +1 -0
- package/dist/wizard/index.js.map +1 -1
- package/package.json +15 -15
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Generator Service
|
|
3
|
+
*
|
|
4
|
+
* Generates design system context for CLAUDE.md files.
|
|
5
|
+
* Helps AI agents understand and follow design system rules.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Generate design system context for CLAUDE.md
|
|
9
|
+
*/
|
|
10
|
+
export function generateContext(data, options = {}) {
|
|
11
|
+
const { detailLevel = 'standard', includeTokens = true, includeComponents = true, includeAntiPatterns = true, includeValidation = true, } = options;
|
|
12
|
+
const sections = [];
|
|
13
|
+
let antiPatternCount = 0;
|
|
14
|
+
// Header
|
|
15
|
+
sections.push(generateHeader(data.projectName));
|
|
16
|
+
// Component Usage
|
|
17
|
+
if (includeComponents && data.components.length > 0) {
|
|
18
|
+
sections.push(generateComponentSection(data.components, detailLevel));
|
|
19
|
+
}
|
|
20
|
+
// Token Requirements
|
|
21
|
+
if (includeTokens && data.tokens.length > 0) {
|
|
22
|
+
sections.push(generateTokenSection(data.tokens, detailLevel));
|
|
23
|
+
}
|
|
24
|
+
// Anti-Patterns
|
|
25
|
+
if (includeAntiPatterns) {
|
|
26
|
+
const antiPatterns = generateAntiPatternSection(data.drifts || [], detailLevel);
|
|
27
|
+
if (antiPatterns) {
|
|
28
|
+
sections.push(antiPatterns);
|
|
29
|
+
antiPatternCount = (data.drifts || []).length;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Validation
|
|
33
|
+
if (includeValidation) {
|
|
34
|
+
sections.push(generateValidationSection());
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
content: sections.join('\n\n'),
|
|
38
|
+
stats: {
|
|
39
|
+
tokenCount: data.tokens.length,
|
|
40
|
+
componentCount: data.components.length,
|
|
41
|
+
antiPatternCount,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generate context header
|
|
47
|
+
*/
|
|
48
|
+
function generateHeader(projectName) {
|
|
49
|
+
return `## Design System Rules
|
|
50
|
+
|
|
51
|
+
This project uses the ${projectName} Design System. Follow these rules when generating code:`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Generate component usage section
|
|
55
|
+
*/
|
|
56
|
+
function generateComponentSection(components, detailLevel) {
|
|
57
|
+
const lines = ['### Component Usage'];
|
|
58
|
+
lines.push('');
|
|
59
|
+
// Group by framework
|
|
60
|
+
const byFramework = groupByFramework(components);
|
|
61
|
+
const frameworks = Object.keys(byFramework);
|
|
62
|
+
if (frameworks.length === 1) {
|
|
63
|
+
const framework = frameworks[0];
|
|
64
|
+
const comps = byFramework[framework];
|
|
65
|
+
lines.push(`Use components from your ${framework} component library. Check before creating new ones:`);
|
|
66
|
+
lines.push('');
|
|
67
|
+
lines.push(formatComponentList(comps, detailLevel));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
lines.push('Use existing components from your component libraries:');
|
|
71
|
+
lines.push('');
|
|
72
|
+
for (const framework of frameworks) {
|
|
73
|
+
const comps = byFramework[framework];
|
|
74
|
+
lines.push(`**${capitalize(framework)}:** ${formatComponentList(comps, detailLevel)}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (detailLevel !== 'minimal') {
|
|
78
|
+
lines.push('');
|
|
79
|
+
lines.push('See full inventory: `buoy status --components`');
|
|
80
|
+
}
|
|
81
|
+
return lines.join('\n');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Generate token requirements section
|
|
85
|
+
*/
|
|
86
|
+
function generateTokenSection(tokens, detailLevel) {
|
|
87
|
+
const lines = ['### Token Requirements'];
|
|
88
|
+
lines.push('');
|
|
89
|
+
lines.push('**NEVER hardcode these values:**');
|
|
90
|
+
// Group tokens by category
|
|
91
|
+
const byCategory = groupByCategory(tokens);
|
|
92
|
+
if (byCategory.color && byCategory.color.length > 0) {
|
|
93
|
+
lines.push(`- Colors: Use design tokens or utility classes`);
|
|
94
|
+
}
|
|
95
|
+
if (byCategory.spacing && byCategory.spacing.length > 0) {
|
|
96
|
+
lines.push(`- Spacing: Use spacing scale tokens`);
|
|
97
|
+
}
|
|
98
|
+
if (byCategory.typography && byCategory.typography.length > 0) {
|
|
99
|
+
lines.push(`- Typography: Use font tokens`);
|
|
100
|
+
}
|
|
101
|
+
// Quick reference for standard/comprehensive
|
|
102
|
+
if (detailLevel !== 'minimal') {
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push('**Quick Reference:**');
|
|
105
|
+
// Show sample tokens
|
|
106
|
+
if (byCategory.color) {
|
|
107
|
+
const samples = byCategory.color.slice(0, 3);
|
|
108
|
+
for (const token of samples) {
|
|
109
|
+
const value = formatTokenValue(token);
|
|
110
|
+
lines.push(`- ${token.name}: ${value}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (byCategory.spacing) {
|
|
114
|
+
const spacingValues = byCategory.spacing
|
|
115
|
+
.map((t) => formatTokenValue(t))
|
|
116
|
+
.slice(0, 8)
|
|
117
|
+
.join(', ');
|
|
118
|
+
lines.push(`- Spacing scale: ${spacingValues}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Comprehensive: show all tokens
|
|
122
|
+
if (detailLevel === 'comprehensive') {
|
|
123
|
+
lines.push('');
|
|
124
|
+
lines.push('**All Tokens:**');
|
|
125
|
+
lines.push('');
|
|
126
|
+
lines.push('| Token | Value | Category |');
|
|
127
|
+
lines.push('|-------|-------|----------|');
|
|
128
|
+
for (const token of tokens.slice(0, 50)) {
|
|
129
|
+
const value = formatTokenValue(token);
|
|
130
|
+
lines.push(`| \`${token.name}\` | ${value} | ${token.category} |`);
|
|
131
|
+
}
|
|
132
|
+
if (tokens.length > 50) {
|
|
133
|
+
lines.push(`| ... | ${tokens.length - 50} more tokens | ... |`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return lines.join('\n');
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Generate anti-patterns section
|
|
140
|
+
*/
|
|
141
|
+
function generateAntiPatternSection(drifts, detailLevel) {
|
|
142
|
+
const lines = ['### Anti-Patterns'];
|
|
143
|
+
lines.push('');
|
|
144
|
+
lines.push('AVOID:');
|
|
145
|
+
// Common anti-patterns always included
|
|
146
|
+
const commonAntiPatterns = [
|
|
147
|
+
'- `<div onClick>` - Use `<Button>` or semantic elements',
|
|
148
|
+
'- Inline styles for colors/spacing - Use tokens or classes',
|
|
149
|
+
'- Creating component variants that already exist',
|
|
150
|
+
'- Arbitrary values (e.g., `p-[13px]`) - Use scale values',
|
|
151
|
+
];
|
|
152
|
+
lines.push(...commonAntiPatterns);
|
|
153
|
+
// Add project-specific anti-patterns from drift signals
|
|
154
|
+
if (detailLevel !== 'minimal' && drifts.length > 0) {
|
|
155
|
+
const hardcodedTypes = new Set();
|
|
156
|
+
for (const drift of drifts) {
|
|
157
|
+
if (drift.type === 'hardcoded-value') {
|
|
158
|
+
// Extract the type of hardcoded value
|
|
159
|
+
const typeMatch = drift.message.match(/hardcoded (color|spacing|font|radius)/i);
|
|
160
|
+
if (typeMatch) {
|
|
161
|
+
hardcodedTypes.add(typeMatch[1].toLowerCase());
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (hardcodedTypes.size > 0) {
|
|
166
|
+
lines.push('');
|
|
167
|
+
lines.push('**Detected issues in this codebase:**');
|
|
168
|
+
for (const type of hardcodedTypes) {
|
|
169
|
+
lines.push(`- Hardcoded ${type} values found - use tokens instead`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return lines.join('\n');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Generate validation section
|
|
177
|
+
*/
|
|
178
|
+
function generateValidationSection() {
|
|
179
|
+
return `### Validation
|
|
180
|
+
|
|
181
|
+
Run before committing:
|
|
182
|
+
\`\`\`bash
|
|
183
|
+
buoy check # Quick validation
|
|
184
|
+
buoy drift check # Detailed drift analysis
|
|
185
|
+
buoy fix --dry-run # See suggested fixes
|
|
186
|
+
\`\`\``;
|
|
187
|
+
}
|
|
188
|
+
// Helper functions
|
|
189
|
+
function groupByFramework(components) {
|
|
190
|
+
const groups = {};
|
|
191
|
+
for (const comp of components) {
|
|
192
|
+
const framework = comp.source.type;
|
|
193
|
+
if (!groups[framework]) {
|
|
194
|
+
groups[framework] = [];
|
|
195
|
+
}
|
|
196
|
+
groups[framework].push(comp);
|
|
197
|
+
}
|
|
198
|
+
return groups;
|
|
199
|
+
}
|
|
200
|
+
function groupByCategory(tokens) {
|
|
201
|
+
const groups = {};
|
|
202
|
+
for (const token of tokens) {
|
|
203
|
+
if (!groups[token.category]) {
|
|
204
|
+
groups[token.category] = [];
|
|
205
|
+
}
|
|
206
|
+
groups[token.category].push(token);
|
|
207
|
+
}
|
|
208
|
+
return groups;
|
|
209
|
+
}
|
|
210
|
+
function formatComponentList(components, detailLevel) {
|
|
211
|
+
const names = [...new Set(components.map((c) => c.name))].sort();
|
|
212
|
+
if (detailLevel === 'minimal') {
|
|
213
|
+
return names.slice(0, 10).join(', ') + (names.length > 10 ? '...' : '');
|
|
214
|
+
}
|
|
215
|
+
if (detailLevel === 'standard') {
|
|
216
|
+
return names.slice(0, 20).join(', ') + (names.length > 20 ? ` (+${names.length - 20} more)` : '');
|
|
217
|
+
}
|
|
218
|
+
// Comprehensive
|
|
219
|
+
return names.join(', ');
|
|
220
|
+
}
|
|
221
|
+
function formatTokenValue(token) {
|
|
222
|
+
const value = token.value;
|
|
223
|
+
if (value.type === 'color') {
|
|
224
|
+
return value.hex;
|
|
225
|
+
}
|
|
226
|
+
if (value.type === 'spacing') {
|
|
227
|
+
return `${value.value}${value.unit}`;
|
|
228
|
+
}
|
|
229
|
+
if (value.type === 'typography') {
|
|
230
|
+
return `${value.fontFamily} ${value.fontSize}`;
|
|
231
|
+
}
|
|
232
|
+
if (value.type === 'raw') {
|
|
233
|
+
return String(value.value);
|
|
234
|
+
}
|
|
235
|
+
return '(complex)';
|
|
236
|
+
}
|
|
237
|
+
function capitalize(str) {
|
|
238
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Generate minimal context (for quick reference)
|
|
242
|
+
*/
|
|
243
|
+
export function generateMinimalContext(data) {
|
|
244
|
+
return generateContext(data, { detailLevel: 'minimal' }).content;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Generate comprehensive context (for full documentation)
|
|
248
|
+
*/
|
|
249
|
+
export function generateComprehensiveContext(data) {
|
|
250
|
+
return generateContext(data, { detailLevel: 'comprehensive' }).content;
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=context-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-generator.js","sourceRoot":"","sources":["../../src/services/context-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+BH;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAiB,EACjB,UAAmC,EAAE;IAErC,MAAM,EACJ,WAAW,GAAG,UAAU,EACxB,aAAa,GAAG,IAAI,EACpB,iBAAiB,GAAG,IAAI,EACxB,mBAAmB,GAAG,IAAI,EAC1B,iBAAiB,GAAG,IAAI,GACzB,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,SAAS;IACT,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEhD,kBAAkB;IAClB,IAAI,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,qBAAqB;IACrB,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;QAChF,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5B,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAChD,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,iBAAiB,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE;YACL,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC9B,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YACtC,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,WAAmB;IACzC,OAAO;;wBAEe,WAAW,0DAA0D,CAAC;AAC9F,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,UAAuB,EACvB,WAAwB;IAExB,MAAM,KAAK,GAAa,CAAC,qBAAqB,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,qBAAqB;IACrB,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QACjC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,4BAA4B,SAAS,qDAAqD,CAAC,CAAC;QACvG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,OAAO,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,MAAqB,EACrB,WAAwB;IAExB,MAAM,KAAK,GAAa,CAAC,wBAAwB,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAE/C,2BAA2B;IAC3B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEnC,qBAAqB;QACrB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC/B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAW,KAAK,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,QAAQ,KAAK,MAAM,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CACjC,MAAqB,EACrB,WAAwB;IAExB,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,uCAAuC;IACvC,MAAM,kBAAkB,GAAG;QACzB,yDAAyD;QACzD,4DAA4D;QAC5D,kDAAkD;QAClD,0DAA0D;KAC3D,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAElC,wDAAwD;IACxD,IAAI,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QAEzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACrC,sCAAsC;gBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAChF,IAAI,SAAS,EAAE,CAAC;oBACd,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,oCAAoC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB;IAChC,OAAO;;;;;;;OAOF,CAAC;AACR,CAAC;AAED,mBAAmB;AAEnB,SAAS,gBAAgB,CAAC,UAAuB;IAC/C,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,MAAqB;IAC5C,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAuB,EAAE,WAAwB;IAC5E,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,gBAAgB;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkB;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAiB;IACtD,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAiB;IAC5D,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillExportService - Generate design system skills for AI agents
|
|
3
|
+
*
|
|
4
|
+
* Exports tokens, components, patterns, and anti-patterns as markdown files
|
|
5
|
+
* optimized for progressive disclosure in AI agent workflows.
|
|
6
|
+
*/
|
|
7
|
+
import type { Component, DesignToken, DriftSignal } from '@buoy-design/core';
|
|
8
|
+
export interface SkillExportOptions {
|
|
9
|
+
/** Sections to include in export */
|
|
10
|
+
sections: string[];
|
|
11
|
+
/** Output directory path */
|
|
12
|
+
outputPath: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ScanData {
|
|
15
|
+
tokens: DesignToken[];
|
|
16
|
+
components: Component[];
|
|
17
|
+
drifts: DriftSignal[];
|
|
18
|
+
projectName: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SkillExportResult {
|
|
21
|
+
/** Files to write */
|
|
22
|
+
files: Array<{
|
|
23
|
+
path: string;
|
|
24
|
+
content: string;
|
|
25
|
+
}>;
|
|
26
|
+
/** Statistics about exported content */
|
|
27
|
+
stats: {
|
|
28
|
+
tokens: {
|
|
29
|
+
colors: number;
|
|
30
|
+
spacing: number;
|
|
31
|
+
typography: number;
|
|
32
|
+
total: number;
|
|
33
|
+
};
|
|
34
|
+
components: number;
|
|
35
|
+
patterns: string[];
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Service for exporting design system data as AI agent skills
|
|
40
|
+
*/
|
|
41
|
+
export declare class SkillExportService {
|
|
42
|
+
constructor(_projectName: string);
|
|
43
|
+
/**
|
|
44
|
+
* Export design system data as skill files
|
|
45
|
+
*/
|
|
46
|
+
export(data: ScanData, options: SkillExportOptions): Promise<SkillExportResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Generate the main SKILL.md entry point
|
|
49
|
+
*/
|
|
50
|
+
generateSkillMd(data: ScanData): string;
|
|
51
|
+
/**
|
|
52
|
+
* Generate tokens index with category counts
|
|
53
|
+
*/
|
|
54
|
+
generateTokensIndex(tokens: DesignToken[]): string;
|
|
55
|
+
/**
|
|
56
|
+
* Generate color tokens markdown
|
|
57
|
+
*/
|
|
58
|
+
generateColorTokens(tokens: DesignToken[]): string;
|
|
59
|
+
/**
|
|
60
|
+
* Generate spacing tokens markdown
|
|
61
|
+
*/
|
|
62
|
+
generateSpacingTokens(tokens: DesignToken[]): string;
|
|
63
|
+
/**
|
|
64
|
+
* Generate typography tokens markdown
|
|
65
|
+
*/
|
|
66
|
+
generateTypographyTokens(tokens: DesignToken[]): string;
|
|
67
|
+
/**
|
|
68
|
+
* Generate component inventory markdown
|
|
69
|
+
*/
|
|
70
|
+
generateComponentInventory(components: Component[]): string;
|
|
71
|
+
/**
|
|
72
|
+
* Generate patterns index based on component names
|
|
73
|
+
*/
|
|
74
|
+
generatePatternsIndex(components: Component[]): string;
|
|
75
|
+
/**
|
|
76
|
+
* Generate anti-patterns from drift signals
|
|
77
|
+
*/
|
|
78
|
+
generateAntiPatterns(drifts: DriftSignal[]): string;
|
|
79
|
+
/**
|
|
80
|
+
* Detect patterns from component names
|
|
81
|
+
*/
|
|
82
|
+
private detectPatterns;
|
|
83
|
+
/**
|
|
84
|
+
* Get components that match a pattern
|
|
85
|
+
*/
|
|
86
|
+
private getComponentsForPattern;
|
|
87
|
+
/**
|
|
88
|
+
* Capitalize pattern name for display
|
|
89
|
+
*/
|
|
90
|
+
private capitalizePattern;
|
|
91
|
+
/**
|
|
92
|
+
* Format drift type for display
|
|
93
|
+
*/
|
|
94
|
+
private formatDriftType;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=skill-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-export.d.ts","sourceRoot":"","sources":["../../src/services/skill-export.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7E,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,wCAAwC;IACxC,KAAK,EAAE;QACL,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,kBAAkB;gBACjB,YAAY,EAAE,MAAM;IAKhC;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IA8E7B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAkFvC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM;IA6DlD;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM;IA+ClD;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM;IAiDpD;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM;IAgDvD;;OAEG;IACH,0BAA0B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM;IAiD3D;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM;IA6CtD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM;IA2DnD;;OAEG;IACH,OAAO,CAAC,cAAc;IA0DtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAMxB"}
|