design-brain-memory 0.8.2 → 0.9.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.
Files changed (126) hide show
  1. package/dist/agentBrowser.d.ts +1 -0
  2. package/dist/agentBrowser.js +1 -0
  3. package/dist/agentBrowser.js.map +1 -1
  4. package/dist/classify.d.ts +21 -0
  5. package/dist/classify.js +205 -0
  6. package/dist/classify.js.map +1 -0
  7. package/dist/cli.js +216 -219
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands.d.ts +1 -60
  10. package/dist/commands.js +10 -322
  11. package/dist/commands.js.map +1 -1
  12. package/dist/extractFromUrl.d.ts +0 -7
  13. package/dist/extractFromUrl.js +353 -82
  14. package/dist/extractFromUrl.js.map +1 -1
  15. package/dist/index.d.ts +12 -24
  16. package/dist/index.js +11 -16
  17. package/dist/index.js.map +1 -1
  18. package/dist/llm.d.ts +6 -0
  19. package/dist/llm.js +12 -1
  20. package/dist/llm.js.map +1 -1
  21. package/dist/persona.d.ts +2 -0
  22. package/dist/persona.js +234 -0
  23. package/dist/persona.js.map +1 -0
  24. package/dist/query.js +6 -1
  25. package/dist/query.js.map +1 -1
  26. package/dist/render.d.ts +10 -2
  27. package/dist/render.js +175 -80
  28. package/dist/render.js.map +1 -1
  29. package/dist/scan.d.ts +10 -0
  30. package/dist/scan.js +393 -0
  31. package/dist/scan.js.map +1 -0
  32. package/dist/scanRenderer.d.ts +2 -0
  33. package/dist/scanRenderer.js +155 -0
  34. package/dist/scanRenderer.js.map +1 -0
  35. package/dist/skillPrompt.d.ts +3 -1
  36. package/dist/skillPrompt.js +148 -22
  37. package/dist/skillPrompt.js.map +1 -1
  38. package/dist/store.d.ts +5 -1
  39. package/dist/store.js +19 -0
  40. package/dist/store.js.map +1 -1
  41. package/dist/taste.d.ts +9 -0
  42. package/dist/taste.js +598 -0
  43. package/dist/taste.js.map +1 -0
  44. package/dist/tasteDiff.d.ts +19 -0
  45. package/dist/tasteDiff.js +340 -0
  46. package/dist/tasteDiff.js.map +1 -0
  47. package/dist/tasteGenerate.d.ts +12 -0
  48. package/dist/tasteGenerate.js +140 -0
  49. package/dist/tasteGenerate.js.map +1 -0
  50. package/dist/tasteRefine.d.ts +13 -0
  51. package/dist/tasteRefine.js +351 -0
  52. package/dist/tasteRefine.js.map +1 -0
  53. package/dist/tasteRenderer.d.ts +4 -0
  54. package/dist/tasteRenderer.js +133 -0
  55. package/dist/tasteRenderer.js.map +1 -0
  56. package/dist/theatrical.d.ts +5 -0
  57. package/dist/theatrical.js +258 -0
  58. package/dist/theatrical.js.map +1 -0
  59. package/dist/types.d.ts +196 -27
  60. package/package.json +4 -3
  61. package/skills/SKILL.md +36 -0
  62. package/skills/design-brain/SKILL.md +77 -0
  63. package/README.md +0 -242
  64. package/dist/aggregate.d.ts +0 -9
  65. package/dist/aggregate.js +0 -53
  66. package/dist/aggregate.js.map +0 -1
  67. package/dist/batch.d.ts +0 -16
  68. package/dist/batch.js +0 -44
  69. package/dist/batch.js.map +0 -1
  70. package/dist/compare.d.ts +0 -33
  71. package/dist/compare.js +0 -83
  72. package/dist/compare.js.map +0 -1
  73. package/dist/componentGraph.d.ts +0 -22
  74. package/dist/componentGraph.js +0 -106
  75. package/dist/componentGraph.js.map +0 -1
  76. package/dist/contextLayer.d.ts +0 -12
  77. package/dist/contextLayer.js +0 -263
  78. package/dist/contextLayer.js.map +0 -1
  79. package/dist/cssInJs.d.ts +0 -9
  80. package/dist/cssInJs.js +0 -124
  81. package/dist/cssInJs.js.map +0 -1
  82. package/dist/graphView.d.ts +0 -21
  83. package/dist/graphView.js +0 -492
  84. package/dist/graphView.js.map +0 -1
  85. package/dist/knowledge.d.ts +0 -20
  86. package/dist/knowledge.js +0 -208
  87. package/dist/knowledge.js.map +0 -1
  88. package/dist/liveView.d.ts +0 -15
  89. package/dist/liveView.js +0 -476
  90. package/dist/liveView.js.map +0 -1
  91. package/dist/moodboard.d.ts +0 -3
  92. package/dist/moodboard.js +0 -139
  93. package/dist/moodboard.js.map +0 -1
  94. package/dist/reviewChecklist.d.ts +0 -17
  95. package/dist/reviewChecklist.js +0 -126
  96. package/dist/reviewChecklist.js.map +0 -1
  97. package/dist/scorecard.d.ts +0 -48
  98. package/dist/scorecard.js +0 -201
  99. package/dist/scorecard.js.map +0 -1
  100. package/dist/styleDictionary.d.ts +0 -16
  101. package/dist/styleDictionary.js +0 -89
  102. package/dist/styleDictionary.js.map +0 -1
  103. package/dist/svg.d.ts +0 -5
  104. package/dist/svg.js +0 -162
  105. package/dist/svg.js.map +0 -1
  106. package/dist/systemDiff.d.ts +0 -28
  107. package/dist/systemDiff.js +0 -107
  108. package/dist/systemDiff.js.map +0 -1
  109. package/dist/tailwind.d.ts +0 -2
  110. package/dist/tailwind.js +0 -122
  111. package/dist/tailwind.js.map +0 -1
  112. package/dist/tokenNaming.d.ts +0 -5
  113. package/dist/tokenNaming.js +0 -229
  114. package/dist/tokenNaming.js.map +0 -1
  115. package/dist/tokens.d.ts +0 -17
  116. package/dist/tokens.js +0 -44
  117. package/dist/tokens.js.map +0 -1
  118. package/dist/trends.d.ts +0 -12
  119. package/dist/trends.js +0 -178
  120. package/dist/trends.js.map +0 -1
  121. package/dist/wiki.d.ts +0 -10
  122. package/dist/wiki.js +0 -346
  123. package/dist/wiki.js.map +0 -1
  124. package/dist/writingStyle.d.ts +0 -38
  125. package/dist/writingStyle.js +0 -224
  126. package/dist/writingStyle.js.map +0 -1
package/dist/scan.js ADDED
@@ -0,0 +1,393 @@
1
+ import { readdirSync, readFileSync, statSync, existsSync } from 'node:fs';
2
+ import { join, extname } from 'node:path';
3
+ import { assignPersona } from './persona.js';
4
+ import { theatricalScan } from './theatrical.js';
5
+ /* ─── File collection ─── */
6
+ const SKIP_DIRS = new Set([
7
+ 'node_modules', '.git', 'dist', 'build', '.next', '.nuxt',
8
+ '.output', 'coverage', 'vendor', '.svelte-kit', '__pycache__',
9
+ ]);
10
+ const SCAN_EXTENSIONS = new Set([
11
+ '.css', '.scss', '.sass', '.less', '.styl',
12
+ '.tsx', '.jsx', '.vue', '.svelte',
13
+ '.html', '.htm',
14
+ ]);
15
+ export function collectFiles(dir) {
16
+ const results = [];
17
+ function walk(current) {
18
+ let entries;
19
+ try {
20
+ entries = readdirSync(current);
21
+ }
22
+ catch {
23
+ return;
24
+ }
25
+ for (const entry of entries) {
26
+ if (entry.startsWith('.') && entry !== '.')
27
+ continue;
28
+ const full = join(current, entry);
29
+ let stat;
30
+ try {
31
+ stat = statSync(full);
32
+ }
33
+ catch {
34
+ continue;
35
+ }
36
+ if (stat.isDirectory()) {
37
+ if (!SKIP_DIRS.has(entry))
38
+ walk(full);
39
+ }
40
+ else if (SCAN_EXTENSIONS.has(extname(entry).toLowerCase())) {
41
+ results.push(full);
42
+ }
43
+ }
44
+ }
45
+ walk(dir);
46
+ return results;
47
+ }
48
+ /* ─── CSS content scanning ─── */
49
+ const HEX_COLOR_RE = /#(?:[0-9a-fA-F]{3}){1,2}\b/g;
50
+ const RGB_COLOR_RE = /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})/g;
51
+ const FONT_FAMILY_RE = /font-family\s*:\s*([^;}]+)/g;
52
+ const FONT_SIZE_RE = /font-size\s*:\s*([^;}"']+)/g;
53
+ const TRANSITION_RE = /transition\s*:\s*([^;}"']+)/g;
54
+ const ANIMATION_RE = /animation\s*:\s*([^;}"']+)/g;
55
+ const SPACING_RE = /(?:margin|padding|gap|row-gap|column-gap)\s*:\s*([^;}"']+)/g;
56
+ const CSS_VAR_RE = /--[\w-]+\s*:/g;
57
+ function rgbToHex(r, g, b) {
58
+ const toHex = (n) => Math.max(0, Math.min(255, n)).toString(16).padStart(2, '0');
59
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
60
+ }
61
+ function normalizeHex(hex) {
62
+ const clean = hex.replace('#', '').toLowerCase();
63
+ if (clean.length === 3) {
64
+ return `#${clean[0]}${clean[0]}${clean[1]}${clean[1]}${clean[2]}${clean[2]}`;
65
+ }
66
+ return `#${clean}`;
67
+ }
68
+ export function scanCssContent(css) {
69
+ const colors = new Set();
70
+ const fontFamilies = new Set();
71
+ const fontSizes = new Set();
72
+ const transitions = [];
73
+ const spacingValues = [];
74
+ // Hex colors
75
+ for (const m of css.matchAll(HEX_COLOR_RE)) {
76
+ colors.add(normalizeHex(m[0]));
77
+ }
78
+ // RGB/RGBA colors
79
+ for (const m of css.matchAll(RGB_COLOR_RE)) {
80
+ colors.add(rgbToHex(parseInt(m[1]), parseInt(m[2]), parseInt(m[3])));
81
+ }
82
+ // Font families
83
+ for (const m of css.matchAll(FONT_FAMILY_RE)) {
84
+ const families = m[1].split(',').map(f => f.trim().replace(/['"]/g, '').toLowerCase());
85
+ for (const f of families) {
86
+ if (f && !f.startsWith('var(') && f !== 'inherit' && f !== 'initial') {
87
+ fontFamilies.add(f);
88
+ }
89
+ }
90
+ }
91
+ // Font sizes
92
+ for (const m of css.matchAll(FONT_SIZE_RE)) {
93
+ fontSizes.add(m[1].trim().toLowerCase());
94
+ }
95
+ // Transitions
96
+ for (const m of css.matchAll(TRANSITION_RE)) {
97
+ transitions.push(m[1].trim());
98
+ }
99
+ for (const m of css.matchAll(ANIMATION_RE)) {
100
+ transitions.push(m[1].trim());
101
+ }
102
+ // Spacing
103
+ for (const m of css.matchAll(SPACING_RE)) {
104
+ spacingValues.push(m[1].trim());
105
+ }
106
+ // CSS variables
107
+ const cssVariableCount = [...css.matchAll(CSS_VAR_RE)].length;
108
+ return {
109
+ colors: [...colors],
110
+ fontFamilies: [...fontFamilies],
111
+ fontSizes: [...fontSizes],
112
+ transitions,
113
+ spacingValues,
114
+ cssVariableCount,
115
+ };
116
+ }
117
+ /* ─── Tailwind class scanning (for .tsx/.jsx/.vue/.svelte) ─── */
118
+ const TW_COLOR_CLASSES = /(?:bg|text|border|ring|fill|stroke|accent|outline|decoration|shadow)-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(\d{2,3})\b/g;
119
+ const TW_SPACING_CLASSES = /(?:p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|gap|space-x|space-y)-(\d+(?:\.5)?)\b/g;
120
+ const TW_FONT_CLASSES = /font-(?:sans|serif|mono|thin|extralight|light|normal|medium|semibold|bold|extrabold|black)\b/g;
121
+ const TW_TEXT_SIZE_CLASSES = /text-(?:xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)\b/g;
122
+ const TW_TRANSITION_CLASSES = /transition(?:-(?:all|colors|opacity|shadow|transform|none))?\b/g;
123
+ function scanTailwindClasses(content) {
124
+ const colors = new Set();
125
+ const fontFamilies = new Set();
126
+ const fontSizes = new Set();
127
+ const transitions = [];
128
+ const spacingValues = [];
129
+ // Tailwind color classes → track as palette indicators
130
+ for (const m of content.matchAll(TW_COLOR_CLASSES)) {
131
+ colors.add(`tw:${m[0]}`);
132
+ }
133
+ // Spacing
134
+ for (const m of content.matchAll(TW_SPACING_CLASSES)) {
135
+ const val = parseFloat(m[1]);
136
+ spacingValues.push(`${val * 4}px`);
137
+ }
138
+ // Font families
139
+ for (const m of content.matchAll(TW_FONT_CLASSES)) {
140
+ fontFamilies.add(m[0].replace('font-', ''));
141
+ }
142
+ // Text sizes
143
+ for (const m of content.matchAll(TW_TEXT_SIZE_CLASSES)) {
144
+ fontSizes.add(m[0]);
145
+ }
146
+ // Transitions
147
+ for (const m of content.matchAll(TW_TRANSITION_CLASSES)) {
148
+ transitions.push(m[0]);
149
+ }
150
+ return {
151
+ colors: [...colors],
152
+ fontFamilies: [...fontFamilies],
153
+ fontSizes: [...fontSizes],
154
+ transitions,
155
+ spacingValues,
156
+ };
157
+ }
158
+ /* ─── Framework detection ─── */
159
+ export async function detectFramework(scanPath) {
160
+ // Check package.json
161
+ const pkgPath = join(scanPath, 'package.json');
162
+ if (existsSync(pkgPath)) {
163
+ try {
164
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
165
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
166
+ if (allDeps['tailwindcss'])
167
+ return 'tailwind';
168
+ if (allDeps['@chakra-ui/react'])
169
+ return 'chakra';
170
+ if (allDeps['@mui/material'])
171
+ return 'mui';
172
+ }
173
+ catch {
174
+ // ignore parse errors
175
+ }
176
+ }
177
+ // Check for tailwind config files
178
+ const twConfigs = ['tailwind.config.js', 'tailwind.config.ts', 'tailwind.config.mjs', 'tailwind.config.cjs'];
179
+ for (const config of twConfigs) {
180
+ if (existsSync(join(scanPath, config)))
181
+ return 'tailwind';
182
+ }
183
+ return null;
184
+ }
185
+ /* ─── Token merging ─── */
186
+ function mergeTokens(a, b) {
187
+ return {
188
+ colors: [...new Set([...a.colors, ...(b.colors ?? [])])],
189
+ fontFamilies: [...new Set([...a.fontFamilies, ...(b.fontFamilies ?? [])])],
190
+ fontSizes: [...new Set([...a.fontSizes, ...(b.fontSizes ?? [])])],
191
+ transitions: [...a.transitions, ...(b.transitions ?? [])],
192
+ spacingValues: [...a.spacingValues, ...(b.spacingValues ?? [])],
193
+ cssVariableCount: a.cssVariableCount + (b.cssVariableCount ?? 0),
194
+ };
195
+ }
196
+ /* ─── Score computation ─── */
197
+ export function computeScore(tokens) {
198
+ // Color Discipline (0–25): fewer unique colors = higher score
199
+ const colorCount = tokens.colors.length;
200
+ let colorDiscipline;
201
+ if (colorCount === 0)
202
+ colorDiscipline = 5; // no colors found → low score
203
+ else if (colorCount <= 5)
204
+ colorDiscipline = 25; // extremely disciplined
205
+ else if (colorCount <= 10)
206
+ colorDiscipline = 22;
207
+ else if (colorCount <= 15)
208
+ colorDiscipline = 18;
209
+ else if (colorCount <= 25)
210
+ colorDiscipline = 14;
211
+ else if (colorCount <= 40)
212
+ colorDiscipline = 10;
213
+ else
214
+ colorDiscipline = 6;
215
+ // Bonus for CSS variables or framework
216
+ if (tokens.cssVariableCount >= 5)
217
+ colorDiscipline = Math.min(25, colorDiscipline + 2);
218
+ if (tokens.framework)
219
+ colorDiscipline = Math.min(25, colorDiscipline + 1);
220
+ // Typography System (0–25): fewer families + consistent scale = better
221
+ const fontCount = tokens.fontFamilies.length;
222
+ let typographySystem;
223
+ if (fontCount === 0)
224
+ typographySystem = 5;
225
+ else if (fontCount <= 2)
226
+ typographySystem = 25;
227
+ else if (fontCount <= 3)
228
+ typographySystem = 20;
229
+ else if (fontCount <= 5)
230
+ typographySystem = 15;
231
+ else
232
+ typographySystem = 8;
233
+ // Bonus for consistent size scale
234
+ if (tokens.fontSizes.length >= 3 && tokens.fontSizes.length <= 8) {
235
+ typographySystem = Math.min(25, typographySystem + 2);
236
+ }
237
+ // Spacing & Layout (0–25): grid alignment = better
238
+ let gridAligned = 0;
239
+ let totalSpacing = 0;
240
+ for (const val of tokens.spacingValues) {
241
+ const nums = val.match(/(\d+(?:\.\d+)?)/g);
242
+ if (!nums)
243
+ continue;
244
+ for (const n of nums) {
245
+ const px = parseFloat(n);
246
+ if (px > 0) {
247
+ totalSpacing++;
248
+ if (px % 4 === 0)
249
+ gridAligned++;
250
+ }
251
+ }
252
+ }
253
+ const gridRatio = totalSpacing > 0 ? gridAligned / totalSpacing : 0;
254
+ let spacingLayout = Math.round(gridRatio * 20);
255
+ if (totalSpacing === 0)
256
+ spacingLayout = 5;
257
+ // Bonus for CSS variables in spacing
258
+ if (tokens.cssVariableCount >= 3)
259
+ spacingLayout = Math.min(25, spacingLayout + 3);
260
+ if (tokens.framework)
261
+ spacingLayout = Math.min(25, spacingLayout + 2);
262
+ // Motion & Polish (0–25): having transitions = good, consistency = bonus
263
+ const motionCount = tokens.transitions.length;
264
+ let motionPolish;
265
+ if (motionCount === 0)
266
+ motionPolish = 5;
267
+ else if (motionCount <= 3)
268
+ motionPolish = 15;
269
+ else if (motionCount <= 10)
270
+ motionPolish = 22;
271
+ else if (motionCount <= 20)
272
+ motionPolish = 25;
273
+ else
274
+ motionPolish = 20; // too many different durations = slight penalty
275
+ // Check timing consistency
276
+ const durations = new Set();
277
+ for (const t of tokens.transitions) {
278
+ const durationMatch = t.match(/(\d+(?:\.\d+)?m?s)/g);
279
+ if (durationMatch) {
280
+ for (const d of durationMatch)
281
+ durations.add(d);
282
+ }
283
+ }
284
+ if (durations.size > 0 && durations.size <= 3) {
285
+ motionPolish = Math.min(25, motionPolish + 2); // consistent timing
286
+ }
287
+ const total = colorDiscipline + typographySystem + spacingLayout + motionPolish;
288
+ return { colorDiscipline, typographySystem, spacingLayout, motionPolish, total };
289
+ }
290
+ /* ─── URL detection ─── */
291
+ export function looksLikeUrl(input) {
292
+ if (input.startsWith('http://') || input.startsWith('https://'))
293
+ return true;
294
+ // Bare domain: has dot, no path separator at start, valid TLD pattern
295
+ if (/^[a-zA-Z0-9-]+\.[a-zA-Z]{2,}/.test(input) && !input.startsWith('.') && !input.startsWith('/'))
296
+ return true;
297
+ return false;
298
+ }
299
+ export function normalizeToUrl(input) {
300
+ if (input.startsWith('http://') || input.startsWith('https://'))
301
+ return input;
302
+ return `https://${input}`;
303
+ }
304
+ /* ─── DesignAnalysis → ScanTokens bridge ─── */
305
+ function isAnimationToken(token) {
306
+ return 'library' in token && 'motionIntent' in token;
307
+ }
308
+ export function designAnalysisToScanTokens(analysis) {
309
+ const transitionValues = [];
310
+ for (const m of analysis.motion) {
311
+ if (isAnimationToken(m)) {
312
+ if (m.timing) {
313
+ transitionValues.push(`${m.motionIntent} ${m.timing.duration}ms ${m.timing.easing}`);
314
+ }
315
+ }
316
+ else {
317
+ if (m.transition && m.transition !== 'all 0s ease 0s') {
318
+ transitionValues.push(m.transition);
319
+ }
320
+ }
321
+ }
322
+ return {
323
+ colors: analysis.colors.map(c => c.hex),
324
+ fontFamilies: [...new Set(analysis.typography.map(t => t.fontFamily.toLowerCase()))],
325
+ fontSizes: [...new Set(analysis.typography.map(t => t.fontSize))],
326
+ transitions: transitionValues,
327
+ spacingValues: analysis.components
328
+ .flatMap(c => [c.styles.padding, c.styles.margin].filter(Boolean)),
329
+ cssVariableCount: Object.keys(analysis.cssVariables).length,
330
+ framework: null,
331
+ };
332
+ }
333
+ /* ─── Main scan function ─── */
334
+ export async function scanDesignSystem(scanPath) {
335
+ const framework = await detectFramework(scanPath);
336
+ const files = collectFiles(scanPath);
337
+ let merged = {
338
+ colors: [],
339
+ fontFamilies: [],
340
+ fontSizes: [],
341
+ transitions: [],
342
+ spacingValues: [],
343
+ cssVariableCount: 0,
344
+ };
345
+ for (const file of files) {
346
+ let content;
347
+ try {
348
+ content = readFileSync(file, 'utf-8');
349
+ }
350
+ catch {
351
+ continue;
352
+ }
353
+ const ext = extname(file).toLowerCase();
354
+ // CSS-like files get full CSS scanning
355
+ if (['.css', '.scss', '.sass', '.less', '.styl'].includes(ext)) {
356
+ merged = mergeTokens(merged, scanCssContent(content));
357
+ }
358
+ // Template/component files get both CSS and Tailwind scanning
359
+ else if (['.tsx', '.jsx', '.vue', '.svelte', '.html', '.htm'].includes(ext)) {
360
+ merged = mergeTokens(merged, scanCssContent(content));
361
+ if (framework === 'tailwind') {
362
+ merged = mergeTokens(merged, scanTailwindClasses(content));
363
+ }
364
+ }
365
+ }
366
+ const tokens = { ...merged, framework };
367
+ const score = computeScore(tokens);
368
+ const persona = assignPersona(tokens);
369
+ return {
370
+ path: scanPath,
371
+ filesScanned: files.length,
372
+ tokens,
373
+ score,
374
+ persona,
375
+ framework,
376
+ };
377
+ }
378
+ /* ─── URL scan function ─── */
379
+ export async function scanFromUrl(url) {
380
+ const { analysis } = await theatricalScan(url);
381
+ const tokens = designAnalysisToScanTokens(analysis);
382
+ const score = computeScore(tokens);
383
+ const persona = assignPersona(tokens);
384
+ return {
385
+ path: url,
386
+ filesScanned: 0,
387
+ tokens,
388
+ score,
389
+ persona,
390
+ framework: null,
391
+ };
392
+ }
393
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ScanResult } from './types.js';
2
+ export declare function renderScanResults(result: ScanResult): void;
@@ -0,0 +1,155 @@
1
+ /* ─── ANSI helpers ─── */
2
+ const USE_COLOR = process.stdout.isTTY !== false;
3
+ const RESET = USE_COLOR ? '\x1b[0m' : '';
4
+ const BOLD = USE_COLOR ? '\x1b[1m' : '';
5
+ const DIM = USE_COLOR ? '\x1b[2m' : '';
6
+ const GREEN = USE_COLOR ? '\x1b[32m' : '';
7
+ const CYAN = USE_COLOR ? '\x1b[36m' : '';
8
+ const YELLOW = USE_COLOR ? '\x1b[33m' : '';
9
+ const WHITE = USE_COLOR ? '\x1b[37m' : '';
10
+ const MAGENTA = USE_COLOR ? '\x1b[35m' : '';
11
+ /* ─── Box drawing ─── */
12
+ const BOX_WIDTH = 48;
13
+ function topBorder(title) {
14
+ if (title) {
15
+ const label = `\u2500 ${title} `;
16
+ const rest = '\u2500'.repeat(Math.max(0, BOX_WIDTH - label.length - 1));
17
+ return ` ${DIM}\u250c${label}${rest}\u2510${RESET}`;
18
+ }
19
+ return ` ${DIM}\u250c${'\u2500'.repeat(BOX_WIDTH)}\u2510${RESET}`;
20
+ }
21
+ function bottomBorder() {
22
+ return ` ${DIM}\u2514${'\u2500'.repeat(BOX_WIDTH)}\u2518${RESET}`;
23
+ }
24
+ function boxLine(content, rawLength) {
25
+ const padding = Math.max(0, BOX_WIDTH - rawLength);
26
+ return ` ${DIM}\u2502${RESET} ${content}${' '.repeat(padding - 1)}${DIM}\u2502${RESET}`;
27
+ }
28
+ function emptyBoxLine() {
29
+ return ` ${DIM}\u2502${' '.repeat(BOX_WIDTH)}\u2502${RESET}`;
30
+ }
31
+ /* ─── Score bar ─── */
32
+ function scoreBar(label, value, max) {
33
+ const barWidth = 16;
34
+ const filled = Math.round((value / max) * barWidth);
35
+ const empty = barWidth - filled;
36
+ const bar = `${GREEN}\u2588${RESET}`.repeat(filled) + `${DIM}\u2591${RESET}`.repeat(empty);
37
+ const paddedLabel = label.padEnd(22);
38
+ const valueStr = `${value}`.padStart(2);
39
+ return `${paddedLabel}${bar} ${BOLD}${valueStr}${RESET}`;
40
+ }
41
+ function scoreBarRaw(label, value, max) {
42
+ // Raw length without ANSI
43
+ return label.padEnd(22).length + 16 + 2 + `${value}`.padStart(2).length;
44
+ }
45
+ /* ─── Checkmark lines ─── */
46
+ function check(text) {
47
+ return ` ${GREEN}\u2714${RESET} ${text}`;
48
+ }
49
+ /* ─── Framework display name ─── */
50
+ function frameworkName(fw) {
51
+ if (!fw)
52
+ return 'None detected';
53
+ const names = {
54
+ tailwind: 'Tailwind CSS',
55
+ chakra: 'Chakra UI',
56
+ mui: 'Material UI',
57
+ };
58
+ return names[fw] ?? fw;
59
+ }
60
+ /* ─── Main renderer ─── */
61
+ export function renderScanResults(result) {
62
+ const { tokens, score, persona, filesScanned, framework } = result;
63
+ console.log('');
64
+ // Header box
65
+ console.log(topBorder());
66
+ console.log(emptyBoxLine());
67
+ const title = `${BOLD}${CYAN}design-brain${RESET} v0.9.0`;
68
+ console.log(boxLine(title, 'design-brain v0.9.0'.length));
69
+ const subtitle = `${DIM}Relational design memory${RESET}`;
70
+ console.log(boxLine(subtitle, 'Relational design memory'.length));
71
+ console.log(emptyBoxLine());
72
+ console.log(bottomBorder());
73
+ console.log('');
74
+ // Checkmark summary
75
+ const isUrl = result.path.startsWith('http://') || result.path.startsWith('https://');
76
+ if (isUrl) {
77
+ console.log(check(`Scanned ${BOLD}${result.path}${RESET} (live site)`));
78
+ }
79
+ else {
80
+ console.log(check(`Scanned ${BOLD}${filesScanned}${RESET} files`));
81
+ }
82
+ console.log(check(`Found ${BOLD}${tokens.colors.length}${RESET} colors, ` +
83
+ `${BOLD}${tokens.fontFamilies.length}${RESET} fonts, ` +
84
+ `${BOLD}${tokens.spacingValues.length}${RESET} spacing values, ` +
85
+ `${BOLD}${tokens.transitions.length}${RESET} transitions`));
86
+ if (framework) {
87
+ console.log(check(`Detected framework: ${BOLD}${frameworkName(framework)}${RESET}`));
88
+ }
89
+ console.log(check(`Design Health Score: ${BOLD}${scoreColor(score.total)}${score.total}/100${RESET}`));
90
+ console.log('');
91
+ // Score breakdown box
92
+ console.log(topBorder('Design Health'));
93
+ console.log(emptyBoxLine());
94
+ const categories = [
95
+ ['Color Discipline', score.colorDiscipline, 25],
96
+ ['Typography System', score.typographySystem, 25],
97
+ ['Spacing & Layout', score.spacingLayout, 25],
98
+ ['Motion & Polish', score.motionPolish, 25],
99
+ ];
100
+ for (const [label, value, max] of categories) {
101
+ const bar = scoreBar(label, value, max);
102
+ const rawLen = scoreBarRaw(label, value, max);
103
+ console.log(boxLine(bar, rawLen));
104
+ }
105
+ console.log(emptyBoxLine());
106
+ const totalBar = scoreBar('Total', score.total, 100);
107
+ const totalRawLen = scoreBarRaw('Total', score.total, 100);
108
+ console.log(boxLine(totalBar, totalRawLen));
109
+ console.log(emptyBoxLine());
110
+ console.log(bottomBorder());
111
+ console.log('');
112
+ // Persona box
113
+ console.log(topBorder('Your Design Persona'));
114
+ console.log(emptyBoxLine());
115
+ const personaLine = `${MAGENTA}\u{1f3a8}${RESET} ${BOLD}${persona.name}${RESET}`;
116
+ console.log(boxLine(personaLine, `\u{1f3a8} ${persona.name}`.length + 1));
117
+ // Tagline (wrapped)
118
+ const tagline = `${DIM}"${persona.tagline}"${RESET}`;
119
+ console.log(boxLine(tagline, `"${persona.tagline}"`.length));
120
+ console.log(emptyBoxLine());
121
+ // Reasoning (word-wrap to box width)
122
+ const reasonLines = wordWrap(persona.reasoning, BOX_WIDTH - 4);
123
+ for (const line of reasonLines) {
124
+ console.log(boxLine(`${DIM}${line}${RESET}`, line.length));
125
+ }
126
+ console.log(emptyBoxLine());
127
+ console.log(bottomBorder());
128
+ console.log('');
129
+ }
130
+ function scoreColor(total) {
131
+ if (total >= 75)
132
+ return GREEN;
133
+ if (total >= 50)
134
+ return YELLOW;
135
+ return '\x1b[31m'; // red
136
+ }
137
+ function wordWrap(text, maxWidth) {
138
+ const words = text.split(' ');
139
+ const lines = [];
140
+ let current = '';
141
+ for (const word of words) {
142
+ if (current.length + word.length + 1 > maxWidth) {
143
+ if (current)
144
+ lines.push(current);
145
+ current = word;
146
+ }
147
+ else {
148
+ current = current ? `${current} ${word}` : word;
149
+ }
150
+ }
151
+ if (current)
152
+ lines.push(current);
153
+ return lines;
154
+ }
155
+ //# sourceMappingURL=scanRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanRenderer.js","sourceRoot":"","sources":["../src/scanRenderer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import type { AgentInfo, InstallResult } from './types.js';
1
2
  export declare function getDefaultSkillRepo(): string;
2
- export declare function installSkill(repo?: string): boolean;
3
+ export declare function detectAgents(): AgentInfo[];
4
+ export declare function installSkillToAgents(agents: AgentInfo[]): InstallResult[];
3
5
  export declare function maybePromptSkillInstall(skipPrompts: boolean): Promise<void>;