@dcyfr/ai 1.0.2 → 1.0.4
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/CHANGELOG.md +21 -0
- package/LICENSE +27 -1
- package/README.md +359 -23
- package/bin/cli.js +12 -0
- package/bin/tui/config-wizard.js +107 -0
- package/bin/tui/validation-dashboard.js +123 -0
- package/bin/tui.js +259 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -1
- package/dist/ai/agents/agent-loader.js +4 -2
- package/dist/ai/agents/agent-loader.js.map +1 -1
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/index.d.ts +14 -2
- package/dist/ai/mcp/index.d.ts.map +1 -1
- package/dist/ai/mcp/index.js +11 -1
- package/dist/ai/mcp/index.js.map +1 -1
- package/dist/ai/mcp/servers/analytics/index.d.ts +19 -0
- package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/analytics/index.js +556 -0
- package/dist/ai/mcp/servers/analytics/index.js.map +1 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.d.ts +61 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.d.ts.map +1 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.js +8 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.js.map +1 -0
- package/dist/ai/mcp/servers/content-manager/index.d.ts +19 -0
- package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/content-manager/index.js +236 -0
- package/dist/ai/mcp/servers/content-manager/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts +19 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.js +422 -0
- package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts +59 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.js +8 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.js.map +1 -0
- package/dist/ai/mcp/servers/promptintel/index.d.ts +19 -0
- package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/promptintel/index.js +323 -0
- package/dist/ai/mcp/servers/promptintel/index.js.map +1 -0
- package/dist/ai/mcp/servers/shared/cache.d.ts +62 -0
- package/dist/ai/mcp/servers/shared/cache.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/cache.js +117 -0
- package/dist/ai/mcp/servers/shared/cache.js.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.d.ts +53 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.js +185 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.js.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.d.ts +85 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.js +7 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.js.map +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts +54 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js +122 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -0
- package/dist/ai/mcp/servers/shared/redis-client.d.ts +54 -0
- package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/redis-client.js +225 -0
- package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -0
- package/dist/ai/mcp/servers/shared/types.d.ts +292 -0
- package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/types.js +6 -0
- package/dist/ai/mcp/servers/shared/types.js.map +1 -0
- package/dist/ai/mcp/servers/shared/utils.d.ts +41 -0
- package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/utils.js +183 -0
- package/dist/ai/mcp/servers/shared/utils.js.map +1 -0
- package/dist/ai/memory/config.d.ts +87 -0
- package/dist/ai/memory/config.d.ts.map +1 -0
- package/dist/ai/memory/config.js +154 -0
- package/dist/ai/memory/config.js.map +1 -0
- package/dist/ai/memory/dcyfr-memory.d.ts +63 -0
- package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -0
- package/dist/ai/memory/dcyfr-memory.js +270 -0
- package/dist/ai/memory/dcyfr-memory.js.map +1 -0
- package/dist/ai/memory/index.d.ts +15 -0
- package/dist/ai/memory/index.d.ts.map +1 -0
- package/dist/ai/memory/index.js +15 -0
- package/dist/ai/memory/index.js.map +1 -0
- package/dist/ai/memory/mem0-client.d.ts +108 -0
- package/dist/ai/memory/mem0-client.d.ts.map +1 -0
- package/dist/ai/memory/mem0-client.js +166 -0
- package/dist/ai/memory/mem0-client.js.map +1 -0
- package/dist/ai/memory/types.d.ts +175 -0
- package/dist/ai/memory/types.d.ts.map +1 -0
- package/dist/ai/memory/types.js +10 -0
- package/dist/ai/memory/types.js.map +1 -0
- package/package.json +46 -8
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Design Token Validator MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Provides real-time design token validation and compliance checking.
|
|
6
|
+
* AI assistants can validate code against design tokens and get suggestions.
|
|
7
|
+
*
|
|
8
|
+
* Uses TokenProvider abstraction to decouple from specific design token sources.
|
|
9
|
+
* @see token-provider.ts for the provider interface
|
|
10
|
+
*/
|
|
11
|
+
import { FastMCP } from 'fastmcp';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import fs from 'fs/promises';
|
|
14
|
+
import path from 'path';
|
|
15
|
+
import { SimpleCache } from '../shared/cache.js';
|
|
16
|
+
/**
|
|
17
|
+
* Create Design Token MCP Server with a token provider
|
|
18
|
+
* @param provider - TokenProvider implementation for design token access
|
|
19
|
+
*/
|
|
20
|
+
export function createDesignTokenServer(provider) {
|
|
21
|
+
const server = new FastMCP({
|
|
22
|
+
name: 'dcyfr-design-tokens',
|
|
23
|
+
version: '1.0.0',
|
|
24
|
+
instructions: 'Real-time design token validation and compliance checking. Use these tools to validate code against design tokens and get suggestions.',
|
|
25
|
+
});
|
|
26
|
+
// Cache for validation results (2 minutes)
|
|
27
|
+
const validationCache = new SimpleCache(120000);
|
|
28
|
+
const complianceCache = new SimpleCache(120000);
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Validation Logic
|
|
31
|
+
// ============================================================================
|
|
32
|
+
/**
|
|
33
|
+
* Validate code against design tokens
|
|
34
|
+
*/
|
|
35
|
+
function validateCode(code) {
|
|
36
|
+
const violations = [];
|
|
37
|
+
const suggestions = [];
|
|
38
|
+
const categories = provider.getTokenCategories();
|
|
39
|
+
// Extract all className strings
|
|
40
|
+
const classNameMatches = code.matchAll(/className=["{']([^"'}]+)["{']|className=\{[`"]([^`"]+)[`"]\}/g);
|
|
41
|
+
let totalClasses = 0;
|
|
42
|
+
let violationCount = 0;
|
|
43
|
+
for (const match of classNameMatches) {
|
|
44
|
+
const classNames = (match[1] || match[2] || '').split(/\s+/).filter(Boolean);
|
|
45
|
+
for (const className of classNames) {
|
|
46
|
+
totalClasses++;
|
|
47
|
+
// Check spacing violations
|
|
48
|
+
if (/^(gap|space-[xy]|p[trblxy]?|m[trblxy]?|w|h)-\d+$/.test(className)) {
|
|
49
|
+
const matched = /^(gap|space-[xy]|p[trblxy]?|m[trblxy]?|w|h)-(\d+)$/.exec(className);
|
|
50
|
+
if (matched) {
|
|
51
|
+
violations.push({
|
|
52
|
+
type: 'hardcoded-value',
|
|
53
|
+
className,
|
|
54
|
+
suggestion: `Use SPACING constant instead: gap-\${SPACING.content}`,
|
|
55
|
+
category: 'spacing',
|
|
56
|
+
});
|
|
57
|
+
violationCount++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Check typography violations
|
|
61
|
+
if (/^text-\d+xl$/.test(className) ||
|
|
62
|
+
/^font-(normal|medium|semibold|bold)$/.test(className)) {
|
|
63
|
+
violations.push({
|
|
64
|
+
type: 'hardcoded-value',
|
|
65
|
+
className,
|
|
66
|
+
suggestion: 'Use TYPOGRAPHY constant instead: TYPOGRAPHY.h1.standard',
|
|
67
|
+
category: 'typography',
|
|
68
|
+
});
|
|
69
|
+
violationCount++;
|
|
70
|
+
}
|
|
71
|
+
// Check color violations
|
|
72
|
+
if (/^(text|bg|border)-(gray|zinc|slate|red|green|blue|yellow)-\d+$/.test(className)) {
|
|
73
|
+
violations.push({
|
|
74
|
+
type: 'hardcoded-value',
|
|
75
|
+
className,
|
|
76
|
+
suggestion: 'Use COLORS constant instead',
|
|
77
|
+
category: 'colors',
|
|
78
|
+
});
|
|
79
|
+
violationCount++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const compliance = totalClasses > 0 ? Math.round(((totalClasses - violationCount) / totalClasses) * 100) : 100;
|
|
84
|
+
if (violations.length > 0) {
|
|
85
|
+
suggestions.push(provider.getTokenImportStatement());
|
|
86
|
+
suggestions.push('Use token constants in className template literals');
|
|
87
|
+
suggestions.push(`See ${provider.getDocumentationUrl()} for complete token reference`);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
isValid: violations.length === 0,
|
|
91
|
+
violations,
|
|
92
|
+
compliance,
|
|
93
|
+
suggestions,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Suggest design token for hardcoded value
|
|
98
|
+
*/
|
|
99
|
+
function suggestToken(hardcodedValue, category) {
|
|
100
|
+
const suggestions = [];
|
|
101
|
+
const spacingTokens = provider.getSpacingTokens();
|
|
102
|
+
// Parse numeric values
|
|
103
|
+
const numMatch = hardcodedValue.match(/\d+/);
|
|
104
|
+
const num = numMatch ? parseInt(numMatch[0], 10) : null;
|
|
105
|
+
if (category === 'spacing' || !category) {
|
|
106
|
+
// Spacing suggestions
|
|
107
|
+
if (num !== null) {
|
|
108
|
+
const spacingKeys = Object.keys(spacingTokens);
|
|
109
|
+
const closest = spacingKeys.find((key) => {
|
|
110
|
+
const value = spacingTokens[key];
|
|
111
|
+
return typeof value === 'number' && Math.abs(value - num) <= 2;
|
|
112
|
+
});
|
|
113
|
+
if (closest) {
|
|
114
|
+
suggestions.push(`SPACING.${closest} (${spacingTokens[closest]})`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (category === 'typography' || !category) {
|
|
119
|
+
// Typography suggestions
|
|
120
|
+
if (hardcodedValue.includes('text-') || hardcodedValue.includes('font-')) {
|
|
121
|
+
suggestions.push('TYPOGRAPHY.h1.standard');
|
|
122
|
+
suggestions.push('TYPOGRAPHY.body.default');
|
|
123
|
+
suggestions.push('TYPOGRAPHY.small.muted');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (category === 'containers' || !category) {
|
|
127
|
+
// Container suggestions
|
|
128
|
+
if (hardcodedValue.includes('max-w') || hardcodedValue.includes('container')) {
|
|
129
|
+
suggestions.push('CONTAINER_WIDTHS.standard');
|
|
130
|
+
suggestions.push('CONTAINER_WIDTHS.wide');
|
|
131
|
+
suggestions.push('CONTAINER_WIDTHS.narrow');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (suggestions.length === 0) {
|
|
135
|
+
suggestions.push(`No exact match found for "${hardcodedValue}". Check design-tokens.ts`);
|
|
136
|
+
}
|
|
137
|
+
return suggestions;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Calculate compliance for entire codebase or specific file
|
|
141
|
+
*/
|
|
142
|
+
async function calculateCompliance(filePath) {
|
|
143
|
+
// Check cache first
|
|
144
|
+
const cacheKey = filePath || 'global';
|
|
145
|
+
const cached = complianceCache.get(cacheKey);
|
|
146
|
+
if (cached)
|
|
147
|
+
return cached;
|
|
148
|
+
// For specific file
|
|
149
|
+
if (filePath) {
|
|
150
|
+
try {
|
|
151
|
+
const fullPath = path.isAbsolute(filePath) ? filePath : path.join(process.cwd(), filePath);
|
|
152
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
153
|
+
const result = validateCode(content);
|
|
154
|
+
const data = {
|
|
155
|
+
percentage: result.compliance,
|
|
156
|
+
totalFiles: 1,
|
|
157
|
+
totalViolations: result.violations.length,
|
|
158
|
+
fileBreakdown: { [filePath]: result.violations.length },
|
|
159
|
+
};
|
|
160
|
+
complianceCache.set(cacheKey, data);
|
|
161
|
+
return data;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
throw new Error(`Failed to read file: ${filePath}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Global compliance (simplified - would need full file scan in production)
|
|
168
|
+
const data = {
|
|
169
|
+
percentage: 85, // Placeholder - would calculate from actual scan
|
|
170
|
+
totalFiles: 120,
|
|
171
|
+
totalViolations: 1657,
|
|
172
|
+
fileBreakdown: {},
|
|
173
|
+
};
|
|
174
|
+
complianceCache.set(cacheKey, data);
|
|
175
|
+
return data;
|
|
176
|
+
}
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// MCP Tools
|
|
179
|
+
// ============================================================================
|
|
180
|
+
// Tool 1: Validate code against design tokens
|
|
181
|
+
server.addTool({
|
|
182
|
+
name: 'tokens:validate',
|
|
183
|
+
description: 'Validate code snippet against design token requirements. Returns violations and suggestions.',
|
|
184
|
+
parameters: z.object({
|
|
185
|
+
code: z.string().describe('Code snippet to validate (JSX/TSX)'),
|
|
186
|
+
filePath: z.string().optional().describe('Optional file path for context'),
|
|
187
|
+
}),
|
|
188
|
+
execute: async ({ code, filePath }) => {
|
|
189
|
+
const cacheKey = `validate:${code}`;
|
|
190
|
+
const cached = validationCache.get(cacheKey);
|
|
191
|
+
if (cached) {
|
|
192
|
+
return {
|
|
193
|
+
type: 'text',
|
|
194
|
+
text: cached,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const result = validateCode(code);
|
|
198
|
+
const output = {
|
|
199
|
+
isValid: result.isValid,
|
|
200
|
+
compliance: result.compliance,
|
|
201
|
+
violations: result.violations,
|
|
202
|
+
suggestions: result.suggestions,
|
|
203
|
+
filePath,
|
|
204
|
+
};
|
|
205
|
+
const jsonOutput = JSON.stringify(output, null, 2);
|
|
206
|
+
validationCache.set(cacheKey, jsonOutput);
|
|
207
|
+
return {
|
|
208
|
+
type: 'text',
|
|
209
|
+
text: jsonOutput,
|
|
210
|
+
};
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
// Tool 2: Suggest design token for hardcoded value
|
|
214
|
+
server.addTool({
|
|
215
|
+
name: 'tokens:suggest',
|
|
216
|
+
description: "Get design token suggestions for a hardcoded value (e.g., 'gap-4', 'text-2xl')",
|
|
217
|
+
parameters: z.object({
|
|
218
|
+
hardcodedValue: z.string().describe('Hardcoded Tailwind class or value'),
|
|
219
|
+
category: z
|
|
220
|
+
.enum(['spacing', 'typography', 'containers', 'breakpoints'])
|
|
221
|
+
.optional()
|
|
222
|
+
.describe('Token category to search in'),
|
|
223
|
+
}),
|
|
224
|
+
execute: async ({ hardcodedValue, category, }) => {
|
|
225
|
+
const suggestions = suggestToken(hardcodedValue, category);
|
|
226
|
+
const output = {
|
|
227
|
+
hardcodedValue,
|
|
228
|
+
category: category || 'all',
|
|
229
|
+
suggestions,
|
|
230
|
+
recommended: suggestions[0] || null,
|
|
231
|
+
};
|
|
232
|
+
return {
|
|
233
|
+
type: 'text',
|
|
234
|
+
text: JSON.stringify(output, null, 2),
|
|
235
|
+
};
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
// Tool 3: Get compliance percentage
|
|
239
|
+
server.addTool({
|
|
240
|
+
name: 'tokens:getCompliance',
|
|
241
|
+
description: 'Calculate design token compliance percentage for file or entire codebase',
|
|
242
|
+
parameters: z.object({
|
|
243
|
+
filePath: z
|
|
244
|
+
.string()
|
|
245
|
+
.optional()
|
|
246
|
+
.describe('Optional file path (omit for global compliance)'),
|
|
247
|
+
}),
|
|
248
|
+
execute: async ({ filePath }) => {
|
|
249
|
+
const result = await calculateCompliance(filePath);
|
|
250
|
+
const output = {
|
|
251
|
+
compliance: `${result.percentage}%`,
|
|
252
|
+
totalFiles: result.totalFiles,
|
|
253
|
+
totalViolations: result.totalViolations,
|
|
254
|
+
status: result.percentage >= 90 ? 'passing' : 'needs-improvement',
|
|
255
|
+
target: '90%',
|
|
256
|
+
fileBreakdown: result.fileBreakdown,
|
|
257
|
+
};
|
|
258
|
+
return {
|
|
259
|
+
type: 'text',
|
|
260
|
+
text: JSON.stringify(output, null, 2),
|
|
261
|
+
};
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
// Tool 4: Find token usages
|
|
265
|
+
server.addTool({
|
|
266
|
+
name: 'tokens:findUsages',
|
|
267
|
+
description: 'Find all files using a specific design token',
|
|
268
|
+
parameters: z.object({
|
|
269
|
+
tokenName: z
|
|
270
|
+
.string()
|
|
271
|
+
.describe("Token name to search for (e.g., 'SPACING.content', 'TYPOGRAPHY.h1')"),
|
|
272
|
+
}),
|
|
273
|
+
execute: async ({ tokenName }) => {
|
|
274
|
+
// Simplified implementation - would use grep or AST search in production
|
|
275
|
+
const output = {
|
|
276
|
+
tokenName,
|
|
277
|
+
usages: [],
|
|
278
|
+
count: 0,
|
|
279
|
+
message: 'Token usage search requires AST analysis - see grep-search for quick lookup',
|
|
280
|
+
};
|
|
281
|
+
return {
|
|
282
|
+
type: 'text',
|
|
283
|
+
text: JSON.stringify(output, null, 2),
|
|
284
|
+
};
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
// Tool 5: Analyze file for token usage
|
|
288
|
+
server.addTool({
|
|
289
|
+
name: 'tokens:analyzeFile',
|
|
290
|
+
description: 'Comprehensive design token analysis for a specific file',
|
|
291
|
+
parameters: z.object({
|
|
292
|
+
filePath: z.string().describe('File path to analyze'),
|
|
293
|
+
}),
|
|
294
|
+
execute: async ({ filePath }) => {
|
|
295
|
+
try {
|
|
296
|
+
const fullPath = path.isAbsolute(filePath) ? filePath : path.join(process.cwd(), filePath);
|
|
297
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
298
|
+
const validation = validateCode(content);
|
|
299
|
+
const compliance = await calculateCompliance(filePath);
|
|
300
|
+
const output = {
|
|
301
|
+
filePath,
|
|
302
|
+
compliance: compliance.percentage,
|
|
303
|
+
violations: validation.violations,
|
|
304
|
+
totalClasses: validation.violations.length +
|
|
305
|
+
Math.round((validation.violations.length / (100 - validation.compliance)) *
|
|
306
|
+
validation.compliance),
|
|
307
|
+
categories: {
|
|
308
|
+
spacing: validation.violations.filter((v) => v.category === 'spacing').length,
|
|
309
|
+
typography: validation.violations.filter((v) => v.category === 'typography').length,
|
|
310
|
+
colors: validation.violations.filter((v) => v.category === 'colors').length,
|
|
311
|
+
},
|
|
312
|
+
recommendations: validation.suggestions,
|
|
313
|
+
};
|
|
314
|
+
return {
|
|
315
|
+
type: 'text',
|
|
316
|
+
text: JSON.stringify(output, null, 2),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
throw new Error(`Failed to analyze file: ${error instanceof Error ? error.message : String(error)}`);
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
});
|
|
324
|
+
// ============================================================================
|
|
325
|
+
// MCP Resources
|
|
326
|
+
// ============================================================================
|
|
327
|
+
// Resource 1: Token categories
|
|
328
|
+
server.addResource({
|
|
329
|
+
uri: 'tokens://categories',
|
|
330
|
+
name: 'Design Token Categories',
|
|
331
|
+
description: 'All design token categories with examples and patterns',
|
|
332
|
+
mimeType: 'application/json',
|
|
333
|
+
async load() {
|
|
334
|
+
const categories = provider.getTokenCategories().map((cat) => ({
|
|
335
|
+
name: cat.name,
|
|
336
|
+
description: cat.description,
|
|
337
|
+
examples: Object.keys(cat.tokens).slice(0, 5),
|
|
338
|
+
patterns: cat.patterns.map((p) => p.source),
|
|
339
|
+
}));
|
|
340
|
+
return {
|
|
341
|
+
text: JSON.stringify(categories, null, 2),
|
|
342
|
+
};
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
// Resource 2: Current compliance
|
|
346
|
+
server.addResource({
|
|
347
|
+
uri: 'tokens://compliance/current',
|
|
348
|
+
name: 'Current Design Token Compliance',
|
|
349
|
+
description: 'Real-time compliance statistics',
|
|
350
|
+
mimeType: 'application/json',
|
|
351
|
+
async load() {
|
|
352
|
+
const compliance = await calculateCompliance();
|
|
353
|
+
return {
|
|
354
|
+
text: JSON.stringify({
|
|
355
|
+
percentage: compliance.percentage,
|
|
356
|
+
status: compliance.percentage >= 90 ? 'passing' : 'needs-improvement',
|
|
357
|
+
target: 90,
|
|
358
|
+
totalViolations: compliance.totalViolations,
|
|
359
|
+
lastUpdated: new Date().toISOString(),
|
|
360
|
+
}, null, 2),
|
|
361
|
+
};
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
// Resource 3: Recent violations (placeholder)
|
|
365
|
+
server.addResource({
|
|
366
|
+
uri: 'tokens://violations/recent',
|
|
367
|
+
name: 'Recent Design Token Violations',
|
|
368
|
+
description: 'Recent ESLint violations found',
|
|
369
|
+
mimeType: 'application/json',
|
|
370
|
+
async load() {
|
|
371
|
+
return {
|
|
372
|
+
text: JSON.stringify({
|
|
373
|
+
message: 'Run npm run find:token-violations for full violation report',
|
|
374
|
+
recentViolations: [],
|
|
375
|
+
}, null, 2),
|
|
376
|
+
};
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
// Resource 4: Anti-patterns
|
|
380
|
+
server.addResource({
|
|
381
|
+
uri: 'tokens://anti-patterns',
|
|
382
|
+
name: 'Design Token Anti-Patterns',
|
|
383
|
+
description: 'Common anti-patterns to avoid',
|
|
384
|
+
mimeType: 'application/json',
|
|
385
|
+
async load() {
|
|
386
|
+
const antiPatterns = [
|
|
387
|
+
{
|
|
388
|
+
pattern: 'Hardcoded spacing values',
|
|
389
|
+
wrong: "className='gap-4 p-4'",
|
|
390
|
+
correct: 'className={`gap-4 p-4`}',
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
pattern: 'Hardcoded typography',
|
|
394
|
+
wrong: "className='text-xl font-bold'",
|
|
395
|
+
correct: 'className={TYPOGRAPHY.h2.standard}',
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
pattern: 'Direct color values',
|
|
399
|
+
wrong: "className='text-gray-900 bg-blue-500'",
|
|
400
|
+
correct: 'className={`text-${COLORS.text.primary} bg-${COLORS.brand.primary}`}',
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
pattern: 'Magic numbers',
|
|
404
|
+
wrong: "className='max-w-[800px]'",
|
|
405
|
+
correct: 'className={CONTAINER_WIDTHS.standard}',
|
|
406
|
+
},
|
|
407
|
+
];
|
|
408
|
+
return {
|
|
409
|
+
text: JSON.stringify(antiPatterns, null, 2),
|
|
410
|
+
};
|
|
411
|
+
},
|
|
412
|
+
});
|
|
413
|
+
return server;
|
|
414
|
+
}
|
|
415
|
+
// ============================================================================
|
|
416
|
+
// Standalone server (requires provider to be passed in)
|
|
417
|
+
// ============================================================================
|
|
418
|
+
// For standalone execution, this file should not auto-start the server.
|
|
419
|
+
// Instead, create a startup script that instantiates the provider and server.
|
|
420
|
+
// See dcyfr-labs/src/mcp/start-token-server.ts for example.
|
|
421
|
+
export default createDesignTokenServer;
|
|
422
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/design-tokens/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TokenProvider Interface
|
|
3
|
+
*
|
|
4
|
+
* Abstraction for design token sources to decouple Design Token MCP from dcyfr-labs.
|
|
5
|
+
* Implementations provide token categories and definitions from design systems.
|
|
6
|
+
*/
|
|
7
|
+
export interface TokenCategory {
|
|
8
|
+
name: string;
|
|
9
|
+
tokens: Record<string, string | number>;
|
|
10
|
+
patterns: RegExp[];
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
export interface TokenViolation {
|
|
14
|
+
type: 'hardcoded-value' | 'missing-token' | 'incorrect-pattern';
|
|
15
|
+
className: string;
|
|
16
|
+
suggestion?: string;
|
|
17
|
+
category?: string;
|
|
18
|
+
line?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ValidationResult {
|
|
21
|
+
isValid: boolean;
|
|
22
|
+
violations: TokenViolation[];
|
|
23
|
+
compliance: number;
|
|
24
|
+
suggestions: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface TokenSuggestion {
|
|
27
|
+
hardcodedValue: string;
|
|
28
|
+
category: string;
|
|
29
|
+
suggestions: string[];
|
|
30
|
+
recommended: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface ComplianceReport {
|
|
33
|
+
percentage: number;
|
|
34
|
+
totalFiles: number;
|
|
35
|
+
totalViolations: number;
|
|
36
|
+
fileBreakdown?: Record<string, number>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* TokenProvider interface for abstracting design token sources
|
|
40
|
+
*/
|
|
41
|
+
export interface TokenProvider {
|
|
42
|
+
/**
|
|
43
|
+
* Get all token categories with patterns and descriptions
|
|
44
|
+
*/
|
|
45
|
+
getTokenCategories(): TokenCategory[];
|
|
46
|
+
/**
|
|
47
|
+
* Get spacing tokens (for numeric value suggestions)
|
|
48
|
+
*/
|
|
49
|
+
getSpacingTokens(): Record<string, number>;
|
|
50
|
+
/**
|
|
51
|
+
* Get import statement for tokens (used in suggestions)
|
|
52
|
+
*/
|
|
53
|
+
getTokenImportStatement(): string;
|
|
54
|
+
/**
|
|
55
|
+
* Get documentation URL for design tokens
|
|
56
|
+
*/
|
|
57
|
+
getDocumentationUrl(): string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=token-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-provider.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/design-tokens/token-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,iBAAiB,GAAG,eAAe,GAAG,mBAAmB,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE,CAAC;IAEtC;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3C;;OAEG;IACH,uBAAuB,IAAI,MAAM,CAAC;IAElC;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TokenProvider Interface
|
|
3
|
+
*
|
|
4
|
+
* Abstraction for design token sources to decouple Design Token MCP from dcyfr-labs.
|
|
5
|
+
* Implementations provide token categories and definitions from design systems.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=token-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-provider.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/design-tokens/token-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* PromptIntel MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Provides AI assistants with direct access to PromptIntel threat intelligence database.
|
|
6
|
+
* Enables real-time security scanning, threat detection, and vulnerability reporting.
|
|
7
|
+
*
|
|
8
|
+
* Tools:
|
|
9
|
+
* - promptintel:searchThreats - Search IoPC database for adversarial prompt patterns
|
|
10
|
+
* - promptintel:getTaxonomy - Fetch threat attack technique taxonomy
|
|
11
|
+
* - promptintel:submitReport - Submit security finding or vulnerability
|
|
12
|
+
*
|
|
13
|
+
* Resources:
|
|
14
|
+
* - promptintel://threats/critical - Critical severity threats
|
|
15
|
+
* - promptintel://taxonomy - Full threat taxonomy
|
|
16
|
+
* - promptintel://health - API health status
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/promptintel/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
|