design-brain-memory 0.2.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/README.md +167 -0
- package/dist/agentBrowser.d.ts +9 -0
- package/dist/agentBrowser.js +96 -0
- package/dist/agentBrowser.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +212 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +27 -0
- package/dist/commands.js +178 -0
- package/dist/commands.js.map +1 -0
- package/dist/extractFromImage.d.ts +7 -0
- package/dist/extractFromImage.js +72 -0
- package/dist/extractFromImage.js.map +1 -0
- package/dist/extractFromUrl.d.ts +13 -0
- package/dist/extractFromUrl.js +605 -0
- package/dist/extractFromUrl.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +3 -0
- package/dist/interactive.js +42 -0
- package/dist/interactive.js.map +1 -0
- package/dist/llm.d.ts +33 -0
- package/dist/llm.js +250 -0
- package/dist/llm.js.map +1 -0
- package/dist/query.d.ts +25 -0
- package/dist/query.js +150 -0
- package/dist/query.js.map +1 -0
- package/dist/render.d.ts +2 -0
- package/dist/render.js +365 -0
- package/dist/render.js.map +1 -0
- package/dist/skillPrompt.d.ts +3 -0
- package/dist/skillPrompt.js +66 -0
- package/dist/skillPrompt.js.map +1 -0
- package/dist/store.d.ts +14 -0
- package/dist/store.js +69 -0
- package/dist/store.js.map +1 -0
- package/dist/svg.d.ts +5 -0
- package/dist/svg.js +162 -0
- package/dist/svg.js.map +1 -0
- package/dist/types.d.ts +175 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +9 -0
- package/dist/util.js +51 -0
- package/dist/util.js.map +1 -0
- package/package.json +53 -0
package/dist/render.js
ADDED
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { brainRoot, projectDir } from './store.js';
|
|
4
|
+
import { generatePaletteSvg, generateComponentsSvg, generateTypographySvg, generateLayoutSvg, } from './svg.js';
|
|
5
|
+
import { csvEscape, relPath, truncate, unique } from './util.js';
|
|
6
|
+
function mdTable(headers, rows) {
|
|
7
|
+
const head = `| ${headers.join(' | ')} |`;
|
|
8
|
+
const rule = `| ${headers.map(() => '---').join(' | ')} |`;
|
|
9
|
+
const body = rows.map((row) => `| ${row.join(' | ')} |`).join('\n');
|
|
10
|
+
return [head, rule, body].filter((line) => line.length > 0).join('\n');
|
|
11
|
+
}
|
|
12
|
+
function aggregateColors(records) {
|
|
13
|
+
const map = new Map();
|
|
14
|
+
for (const record of records) {
|
|
15
|
+
for (const color of record.analysis.colors) {
|
|
16
|
+
const existing = map.get(color.hex) ?? { hex: color.hex, count: 0, samples: [] };
|
|
17
|
+
existing.count += color.count;
|
|
18
|
+
for (const sample of color.samples) {
|
|
19
|
+
if (existing.samples.length < 6 && !existing.samples.includes(sample)) {
|
|
20
|
+
existing.samples.push(sample);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
map.set(color.hex, existing);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 40);
|
|
27
|
+
}
|
|
28
|
+
function aggregateTypography(records) {
|
|
29
|
+
const map = new Map();
|
|
30
|
+
for (const record of records) {
|
|
31
|
+
for (const token of record.analysis.typography) {
|
|
32
|
+
const key = `${token.fontFamily}|${token.fontSize}|${token.fontWeight}|${token.lineHeight}`;
|
|
33
|
+
const existing = map.get(key) ?? { ...token, count: 0 };
|
|
34
|
+
existing.count += token.count;
|
|
35
|
+
map.set(key, existing);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 60);
|
|
39
|
+
}
|
|
40
|
+
function aggregateComponents(records) {
|
|
41
|
+
const map = new Map();
|
|
42
|
+
for (const record of records) {
|
|
43
|
+
for (const token of record.analysis.components) {
|
|
44
|
+
const key = `${token.kind}|${token.tag}|${token.selector}`;
|
|
45
|
+
const existing = map.get(key) ?? { ...token, count: 0 };
|
|
46
|
+
existing.count += 1;
|
|
47
|
+
map.set(key, existing);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 120);
|
|
51
|
+
}
|
|
52
|
+
function aggregateMotion(records) {
|
|
53
|
+
const map = new Map();
|
|
54
|
+
for (const record of records) {
|
|
55
|
+
for (const token of record.analysis.motion) {
|
|
56
|
+
const key = `${token.selector}|${token.transition}|${token.animation}|${token.transform}`;
|
|
57
|
+
const existing = map.get(key) ?? { ...token, count: 0 };
|
|
58
|
+
existing.count += 1;
|
|
59
|
+
map.set(key, existing);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 140);
|
|
63
|
+
}
|
|
64
|
+
function renderProjectReadme(project) {
|
|
65
|
+
const inspirationLinks = project.inspirations.length > 0
|
|
66
|
+
? project.inspirations.map((record) => `- [${record.name}](./inspirations/${record.id}.md)`).join('\n')
|
|
67
|
+
: '- No inspirations captured yet.';
|
|
68
|
+
const outcomeLinks = project.outcomes.length > 0
|
|
69
|
+
? project.outcomes.map((record) => `- [${record.title}](./outcomes/${record.id}.md)`).join('\n')
|
|
70
|
+
: '- No outcomes recorded yet.';
|
|
71
|
+
return `# ${project.name}\n\n`
|
|
72
|
+
+ `Project ID: \`${project.id}\`\n\n`
|
|
73
|
+
+ `Created: ${project.createdAt}\n\n`
|
|
74
|
+
+ `Updated: ${project.updatedAt}\n\n`
|
|
75
|
+
+ `${project.description ? `${project.description}\n\n` : ''}`
|
|
76
|
+
+ `## Wiki\n\n`
|
|
77
|
+
+ `- [Colors](./tokens/colors.md)\n`
|
|
78
|
+
+ `- [Typography](./tokens/typography.md)\n`
|
|
79
|
+
+ `- [Components](./tokens/components.md)\n`
|
|
80
|
+
+ `- [Motion](./tokens/motion.md)\n`
|
|
81
|
+
+ `- [Layout](./tokens/layout.md)\n\n`
|
|
82
|
+
+ `## Visual Catalog\n\n`
|
|
83
|
+
+ `\n`
|
|
84
|
+
+ `\n`
|
|
85
|
+
+ `\n`
|
|
86
|
+
+ `\n\n`
|
|
87
|
+
+ `## Inspirations\n\n${inspirationLinks}\n\n`
|
|
88
|
+
+ `## Outcomes\n\n${outcomeLinks}\n`;
|
|
89
|
+
}
|
|
90
|
+
function renderInspiration(record, projectId) {
|
|
91
|
+
const colorsRows = record.analysis.colors.slice(0, 30).map((color) => [
|
|
92
|
+
color.hex,
|
|
93
|
+
`${color.count}`,
|
|
94
|
+
color.samples.map((value) => `\`${value}\``).join('<br/>'),
|
|
95
|
+
]);
|
|
96
|
+
const typeRows = record.analysis.typography.slice(0, 40).map((token) => [
|
|
97
|
+
token.fontFamily,
|
|
98
|
+
token.fontSize,
|
|
99
|
+
token.fontWeight,
|
|
100
|
+
token.lineHeight,
|
|
101
|
+
`${token.count}`,
|
|
102
|
+
]);
|
|
103
|
+
const componentRows = record.analysis.components.slice(0, 60).map((component) => [
|
|
104
|
+
component.kind,
|
|
105
|
+
`\`${component.selector}\``,
|
|
106
|
+
component.tag,
|
|
107
|
+
truncate(component.text || '-'),
|
|
108
|
+
truncate(component.className || '-'),
|
|
109
|
+
]);
|
|
110
|
+
const motionRows = record.analysis.motion.slice(0, 80).map((motion) => [
|
|
111
|
+
`\`${motion.selector}\``,
|
|
112
|
+
truncate(motion.transition || 'none'),
|
|
113
|
+
truncate(motion.animation || 'none'),
|
|
114
|
+
truncate(motion.transform || 'none'),
|
|
115
|
+
]);
|
|
116
|
+
const layoutRows = record.analysis.layout.slice(0, 80).map((layout) => [
|
|
117
|
+
layout.tag,
|
|
118
|
+
`\`${layout.selector}\``,
|
|
119
|
+
layout.role || '-',
|
|
120
|
+
`${layout.children}`,
|
|
121
|
+
]);
|
|
122
|
+
const variablesRows = Object.entries(record.analysis.cssVariables)
|
|
123
|
+
.slice(0, 120)
|
|
124
|
+
.map(([key, value]) => [key, truncate(value, 80)]);
|
|
125
|
+
const stateRows = (record.analysis.stateStyles ?? []).slice(0, 80).map((state) => [
|
|
126
|
+
`\`${state.selector}\``,
|
|
127
|
+
state.state,
|
|
128
|
+
Object.entries(state.declarations)
|
|
129
|
+
.map(([key, value]) => `${key}: ${truncate(value, 40)}`)
|
|
130
|
+
.join('<br/>'),
|
|
131
|
+
]);
|
|
132
|
+
const responsiveRows = (record.analysis.responsiveSnapshots ?? []).slice(0, 20).map((item) => [
|
|
133
|
+
item.label,
|
|
134
|
+
`${item.viewport.width}x${item.viewport.height}`,
|
|
135
|
+
`${item.colorCount}`,
|
|
136
|
+
`${item.typographyCount}`,
|
|
137
|
+
`${item.componentCount}`,
|
|
138
|
+
truncate(item.title ?? '-', 60),
|
|
139
|
+
]);
|
|
140
|
+
const journeyRows = (record.analysis.journey ?? []).slice(0, 20).map((step) => [
|
|
141
|
+
`${step.step}`,
|
|
142
|
+
step.action,
|
|
143
|
+
truncate(step.fromUrl ?? '-', 40),
|
|
144
|
+
truncate(step.toUrl ?? '-', 40),
|
|
145
|
+
truncate(step.summary ?? '-', 70),
|
|
146
|
+
]);
|
|
147
|
+
const tags = record.tags.length > 0 ? record.tags.map((tag) => `\`${tag}\``).join(', ') : '-';
|
|
148
|
+
return `# ${record.name}\n\n`
|
|
149
|
+
+ `ID: \`${record.id}\`\n\n`
|
|
150
|
+
+ `Project: \`${projectId}\`\n\n`
|
|
151
|
+
+ `Captured: ${record.capturedAt}\n\n`
|
|
152
|
+
+ `Source type: \`${record.sourceType}\`\n\n`
|
|
153
|
+
+ `${record.url ? `URL: ${record.url}\n\n` : ''}`
|
|
154
|
+
+ `${record.originalImagePath ? `Original image: \`${record.originalImagePath}\`\n\n` : ''}`
|
|
155
|
+
+ `${record.screenshotPath ? `Screenshot: \`${record.screenshotPath}\`\n\n` : ''}`
|
|
156
|
+
+ `Fingerprint: \`${record.fingerprint}\`\n\n`
|
|
157
|
+
+ `Version: \`${record.version}\`\n\n`
|
|
158
|
+
+ `${record.supersedes ? `Supersedes: \`${record.supersedes}\`\n\n` : ''}`
|
|
159
|
+
+ `Tags: ${tags}\n\n`
|
|
160
|
+
+ `${record.notes ? `Notes: ${record.notes}\n\n` : ''}`
|
|
161
|
+
+ `${record.inspirationSummary ? `Inspiration summary: ${record.inspirationSummary}\n\n` : ''}`
|
|
162
|
+
+ `${record.diffFromPrevious ? `## Diff From Previous\n\n- Previous: \`${record.diffFromPrevious.previousId}\`\n- Added colors: ${record.diffFromPrevious.addedColors.join(', ') || '-'}\n- Removed colors: ${record.diffFromPrevious.removedColors.join(', ') || '-'}\n- Component delta: ${record.diffFromPrevious.componentCountDelta}\n- Motion delta: ${record.diffFromPrevious.motionCountDelta}\n\n` : ''}`
|
|
163
|
+
+ `${record.llmEnrichment ? `## LLM Enrichment\n\n- Model: \`${record.llmEnrichment.model}\`\n- Base URL: \`${record.llmEnrichment.baseUrl}\`\n- Generated: ${record.llmEnrichment.generatedAt}\n- Color narrative: ${record.llmEnrichment.colorNarrative}\n\n### Design Principles\n${record.llmEnrichment.designPrinciples.map((item) => `- ${item}`).join('\n') || '- none'}\n\n### Component Patterns\n${record.llmEnrichment.componentPatterns.map((item) => `- ${item}`).join('\n') || '- none'}\n\n### Layout Guidance\n${(record.llmEnrichment.layoutGuidance ?? []).map((item) => `- ${item}`).join('\n') || '- none'}\n\n### Motion Guidance\n${(record.llmEnrichment.motionGuidance ?? []).map((item) => `- ${item}`).join('\n') || '- none'}\n\n` : ''}`
|
|
164
|
+
+ `${responsiveRows.length > 0 ? `## Responsive Coverage\n\n${mdTable(['Viewport', 'Size', 'Colors', 'Typography', 'Components', 'Title'], responsiveRows)}\n\n` : ''}`
|
|
165
|
+
+ `${stateRows.length > 0 ? `## Interaction States\n\n${mdTable(['Selector', 'State', 'Declarations'], stateRows)}\n\n` : ''}`
|
|
166
|
+
+ `${journeyRows.length > 0 ? `## Journey Capture\n\n${mdTable(['Step', 'Action', 'From', 'To', 'Summary'], journeyRows)}\n\n` : ''}`
|
|
167
|
+
+ `## Visual Catalog\n\n`
|
|
168
|
+
+ `\n`
|
|
169
|
+
+ `\n`
|
|
170
|
+
+ `\n`
|
|
171
|
+
+ `\n\n`
|
|
172
|
+
+ `## Colors\n\n${mdTable(['Hex', 'Weight', 'Samples'], colorsRows)}\n\n`
|
|
173
|
+
+ `## Typography\n\n${mdTable(['Font', 'Size', 'Weight', 'Line Height', 'Weight'], typeRows)}\n\n`
|
|
174
|
+
+ `## Components\n\n${mdTable(['Kind', 'Selector', 'Tag', 'Text', 'Class'], componentRows)}\n\n`
|
|
175
|
+
+ `## Motion\n\n${mdTable(['Selector', 'Transition', 'Animation', 'Transform'], motionRows)}\n\n`
|
|
176
|
+
+ `## Layout\n\n${mdTable(['Tag', 'Selector', 'Role', 'Children'], layoutRows)}\n\n`
|
|
177
|
+
+ `## CSS Variables\n\n${mdTable(['Variable', 'Value'], variablesRows)}\n\n`
|
|
178
|
+
+ `${record.analysis.accessibilitySnapshot ? `## Accessibility Snapshot\n\n\`\`\`text\n${record.analysis.accessibilitySnapshot}\n\`\`\`\n` : ''}`;
|
|
179
|
+
}
|
|
180
|
+
function renderOutcome(project, outcomeId) {
|
|
181
|
+
const outcome = project.outcomes.find((entry) => entry.id === outcomeId);
|
|
182
|
+
if (!outcome) {
|
|
183
|
+
throw new Error(`Outcome not found: ${outcomeId}`);
|
|
184
|
+
}
|
|
185
|
+
const inspirations = outcome.inspiredBy
|
|
186
|
+
.map((id) => project.inspirations.find((entry) => entry.id === id))
|
|
187
|
+
.filter((entry) => Boolean(entry));
|
|
188
|
+
const related = inspirations.length > 0
|
|
189
|
+
? inspirations.map((entry) => `- [${entry.name}](../inspirations/${entry.id}.md)`).join('\n')
|
|
190
|
+
: '- None linked.';
|
|
191
|
+
return `# ${outcome.title}\n\n`
|
|
192
|
+
+ `ID: \`${outcome.id}\`\n\n`
|
|
193
|
+
+ `Created: ${outcome.createdAt}\n\n`
|
|
194
|
+
+ `Description: ${outcome.description}\n\n`
|
|
195
|
+
+ `${outcome.artifactUrl ? `Artifact URL: ${outcome.artifactUrl}\n\n` : ''}`
|
|
196
|
+
+ `${outcome.tags.length > 0 ? `Tags: ${outcome.tags.map((tag) => `\`${tag}\``).join(', ')}\n\n` : ''}`
|
|
197
|
+
+ `## Inspired By\n\n${related}\n`;
|
|
198
|
+
}
|
|
199
|
+
function renderTokens(project) {
|
|
200
|
+
const colors = aggregateColors(project.inspirations);
|
|
201
|
+
const typography = aggregateTypography(project.inspirations);
|
|
202
|
+
const components = aggregateComponents(project.inspirations);
|
|
203
|
+
const motion = aggregateMotion(project.inspirations);
|
|
204
|
+
const colorRows = colors.map((token) => [token.hex, `${token.count}`, token.samples.map((sample) => `\`${sample}\``).join('<br/>')]);
|
|
205
|
+
const typographyRows = typography.map((token) => [token.fontFamily, token.fontSize, token.fontWeight, token.lineHeight, `${token.count}`]);
|
|
206
|
+
const componentRows = components.map((token) => [token.kind, token.tag, `\`${token.selector}\``, `${token.count}`]);
|
|
207
|
+
const motionRows = motion.map((token) => [truncate(token.transition || 'none'), truncate(token.animation || 'none'), `\`${token.selector}\``, `${token.count}`]);
|
|
208
|
+
const layoutRows = project.inspirations
|
|
209
|
+
.flatMap((inspiration) => inspiration.analysis.layout.map((layout) => [
|
|
210
|
+
layout.tag,
|
|
211
|
+
`\`${layout.selector}\``,
|
|
212
|
+
layout.role || '-',
|
|
213
|
+
`${layout.children}`,
|
|
214
|
+
inspiration.id,
|
|
215
|
+
]))
|
|
216
|
+
.slice(0, 250);
|
|
217
|
+
return {
|
|
218
|
+
colors: `# ${project.name} Color Brain\n\n` + mdTable(['Hex', 'Weight', 'Samples'], colorRows) + '\n',
|
|
219
|
+
typography: `# ${project.name} Typography Brain\n\n` + mdTable(['Font', 'Size', 'Weight', 'Line Height', 'Weight'], typographyRows) + '\n',
|
|
220
|
+
components: `# ${project.name} Component Brain\n\n` + mdTable(['Kind', 'Tag', 'Selector', 'Occurrences'], componentRows) + '\n',
|
|
221
|
+
motion: `# ${project.name} Motion Brain\n\n` + mdTable(['Transition', 'Animation', 'Selector', 'Occurrences'], motionRows) + '\n',
|
|
222
|
+
layout: `# ${project.name} Layout Brain\n\n` + mdTable(['Tag', 'Selector', 'Role', 'Children', 'Source'], layoutRows) + '\n',
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function renderRootReadme(db) {
|
|
226
|
+
const projects = db.projects.length > 0
|
|
227
|
+
? db.projects
|
|
228
|
+
.map((project) => {
|
|
229
|
+
const inspirationCount = project.inspirations.length;
|
|
230
|
+
const outcomeCount = project.outcomes.length;
|
|
231
|
+
return `- [${project.name}](./projects/${project.id}/README.md) - ${inspirationCount} inspirations, ${outcomeCount} outcomes`;
|
|
232
|
+
})
|
|
233
|
+
.join('\n')
|
|
234
|
+
: '- No projects yet.';
|
|
235
|
+
return `# Design Brain\n\n`
|
|
236
|
+
+ `Relational design memory generated by \`design-brain-memory\`.\n\n`
|
|
237
|
+
+ `## Projects\n\n${projects}\n\n`
|
|
238
|
+
+ `## Retrieval\n\n`
|
|
239
|
+
+ `- Search all inspirations: \`rg "inspiration|component|color" .design-brain/projects\`\n`
|
|
240
|
+
+ `- Query relation graph: \`rg "has_inspiration|inspired_by" .design-brain/graph/relations.csv\`\n`
|
|
241
|
+
+ `- Find a color usage: \`rg "#0055FF" .design-brain\`\n`
|
|
242
|
+
+ `- CLI keyword search: \`design-brain-memory search --query "button hierarchy"\`\n`
|
|
243
|
+
+ `- CLI semantic ask: \`design-brain-memory ask --query "What changed between versions?"\`\n`;
|
|
244
|
+
}
|
|
245
|
+
function renderGraphFiles(db) {
|
|
246
|
+
const entityRows = ['id,type,project,title,path'];
|
|
247
|
+
const relationRows = ['from,relation,to,project,notes'];
|
|
248
|
+
const seenEntities = new Set();
|
|
249
|
+
const seenRelations = new Set();
|
|
250
|
+
function pushEntity(values) {
|
|
251
|
+
const row = values.map(csvEscape).join(',');
|
|
252
|
+
if (!seenEntities.has(row)) {
|
|
253
|
+
seenEntities.add(row);
|
|
254
|
+
entityRows.push(row);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function pushRelation(values) {
|
|
258
|
+
const row = values.map(csvEscape).join(',');
|
|
259
|
+
if (!seenRelations.has(row)) {
|
|
260
|
+
seenRelations.add(row);
|
|
261
|
+
relationRows.push(row);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
for (const project of db.projects) {
|
|
265
|
+
const projectPath = `projects/${project.id}/README.md`;
|
|
266
|
+
pushEntity([project.id, 'project', project.id, project.name, projectPath]);
|
|
267
|
+
for (const inspiration of project.inspirations) {
|
|
268
|
+
const inspirationPath = `projects/${project.id}/inspirations/${inspiration.id}.md`;
|
|
269
|
+
pushEntity([inspiration.id, 'inspiration', project.id, inspiration.name, inspirationPath]);
|
|
270
|
+
pushRelation([project.id, 'has_inspiration', inspiration.id, project.id, inspiration.url ?? inspiration.originalImagePath ?? '']);
|
|
271
|
+
pushEntity([`fingerprint:${inspiration.fingerprint}`, 'fingerprint', project.id, inspiration.fingerprint, inspirationPath]);
|
|
272
|
+
pushRelation([inspiration.id, 'has_fingerprint', `fingerprint:${inspiration.fingerprint}`, project.id, '']);
|
|
273
|
+
if (inspiration.supersedes) {
|
|
274
|
+
pushRelation([inspiration.id, 'supersedes', inspiration.supersedes, project.id, 'version lineage']);
|
|
275
|
+
}
|
|
276
|
+
const componentKinds = unique(inspiration.analysis.components.map((component) => component.kind));
|
|
277
|
+
for (const kind of componentKinds) {
|
|
278
|
+
const componentId = `component:${kind}`;
|
|
279
|
+
pushEntity([componentId, 'component_kind', project.id, kind, inspirationPath]);
|
|
280
|
+
pushRelation([inspiration.id, 'uses_component_kind', componentId, project.id, '']);
|
|
281
|
+
}
|
|
282
|
+
const topColors = inspiration.analysis.colors.slice(0, 12).map((color) => color.hex.toUpperCase());
|
|
283
|
+
for (const color of topColors) {
|
|
284
|
+
const colorId = `color:${color}`;
|
|
285
|
+
pushEntity([colorId, 'color', project.id, color, inspirationPath]);
|
|
286
|
+
pushRelation([inspiration.id, 'uses_color', colorId, project.id, '']);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
for (const outcome of project.outcomes) {
|
|
290
|
+
const outcomePath = `projects/${project.id}/outcomes/${outcome.id}.md`;
|
|
291
|
+
pushEntity([outcome.id, 'outcome', project.id, outcome.title, outcomePath]);
|
|
292
|
+
pushRelation([project.id, 'has_outcome', outcome.id, project.id, '']);
|
|
293
|
+
for (const sourceId of outcome.inspiredBy) {
|
|
294
|
+
pushRelation([outcome.id, 'inspired_by', sourceId, project.id, '']);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
entities: entityRows.join('\n') + '\n',
|
|
300
|
+
relations: relationRows.join('\n') + '\n',
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
async function renderVisuals(baseDir, project, skipVisuals) {
|
|
304
|
+
if (skipVisuals)
|
|
305
|
+
return;
|
|
306
|
+
const visualDir = path.join(baseDir, 'visuals');
|
|
307
|
+
await fs.ensureDir(visualDir);
|
|
308
|
+
const colors = aggregateColors(project.inspirations);
|
|
309
|
+
const components = aggregateComponents(project.inspirations);
|
|
310
|
+
const typography = aggregateTypography(project.inspirations);
|
|
311
|
+
const layout = project.inspirations.at(-1)?.analysis.layout ?? [];
|
|
312
|
+
await fs.writeFile(path.join(visualDir, 'palette.svg'), generatePaletteSvg(colors, project.name));
|
|
313
|
+
await fs.writeFile(path.join(visualDir, 'components.svg'), generateComponentsSvg(components, project.name));
|
|
314
|
+
await fs.writeFile(path.join(visualDir, 'typography.svg'), generateTypographySvg(typography, project.name));
|
|
315
|
+
await fs.writeFile(path.join(visualDir, 'layout.svg'), generateLayoutSvg(layout, project.name));
|
|
316
|
+
for (const inspiration of project.inspirations) {
|
|
317
|
+
const inspoVisualDir = path.join(baseDir, 'inspirations', inspiration.id);
|
|
318
|
+
await fs.ensureDir(inspoVisualDir);
|
|
319
|
+
await fs.writeFile(path.join(inspoVisualDir, 'palette.svg'), generatePaletteSvg(inspiration.analysis.colors, inspiration.name));
|
|
320
|
+
await fs.writeFile(path.join(inspoVisualDir, 'components.svg'), generateComponentsSvg(inspiration.analysis.components, inspiration.name));
|
|
321
|
+
await fs.writeFile(path.join(inspoVisualDir, 'typography.svg'), generateTypographySvg(inspiration.analysis.typography, inspiration.name));
|
|
322
|
+
await fs.writeFile(path.join(inspoVisualDir, 'layout.svg'), generateLayoutSvg(inspiration.analysis.layout, inspiration.name));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
export async function renderAll(rootDir, db, skipVisuals = false) {
|
|
326
|
+
const root = brainRoot(rootDir);
|
|
327
|
+
await fs.ensureDir(root);
|
|
328
|
+
await fs.writeFile(path.join(root, 'README.md'), renderRootReadme(db));
|
|
329
|
+
for (const project of db.projects) {
|
|
330
|
+
const baseDir = projectDir(rootDir, project.id);
|
|
331
|
+
const inspirationDir = path.join(baseDir, 'inspirations');
|
|
332
|
+
const outcomeDir = path.join(baseDir, 'outcomes');
|
|
333
|
+
const tokenDir = path.join(baseDir, 'tokens');
|
|
334
|
+
await fs.ensureDir(inspirationDir);
|
|
335
|
+
await fs.ensureDir(outcomeDir);
|
|
336
|
+
await fs.ensureDir(tokenDir);
|
|
337
|
+
await fs.writeFile(path.join(baseDir, 'README.md'), renderProjectReadme(project));
|
|
338
|
+
for (const inspiration of project.inspirations) {
|
|
339
|
+
await fs.writeFile(path.join(inspirationDir, `${inspiration.id}.md`), renderInspiration(inspiration, project.id));
|
|
340
|
+
}
|
|
341
|
+
for (const outcome of project.outcomes) {
|
|
342
|
+
await fs.writeFile(path.join(outcomeDir, `${outcome.id}.md`), renderOutcome(project, outcome.id));
|
|
343
|
+
}
|
|
344
|
+
const tokenFiles = renderTokens(project);
|
|
345
|
+
await fs.writeFile(path.join(tokenDir, 'colors.md'), tokenFiles.colors);
|
|
346
|
+
await fs.writeFile(path.join(tokenDir, 'typography.md'), tokenFiles.typography);
|
|
347
|
+
await fs.writeFile(path.join(tokenDir, 'components.md'), tokenFiles.components);
|
|
348
|
+
await fs.writeFile(path.join(tokenDir, 'motion.md'), tokenFiles.motion);
|
|
349
|
+
await fs.writeFile(path.join(tokenDir, 'layout.md'), tokenFiles.layout);
|
|
350
|
+
await renderVisuals(baseDir, project, skipVisuals);
|
|
351
|
+
const projectIndex = path.join(baseDir, 'index.md');
|
|
352
|
+
const from = path.dirname(projectIndex);
|
|
353
|
+
const links = [
|
|
354
|
+
`[Project Wiki](${relPath(from, path.join(baseDir, 'README.md'))})`,
|
|
355
|
+
`[Inspirations](${relPath(from, inspirationDir)})`,
|
|
356
|
+
`[Outcomes](${relPath(from, outcomeDir)})`,
|
|
357
|
+
`[Token Brain](${relPath(from, tokenDir)})`,
|
|
358
|
+
];
|
|
359
|
+
await fs.writeFile(projectIndex, `# ${project.name} Index\n\n- ${links.join('\n- ')}\n`);
|
|
360
|
+
}
|
|
361
|
+
const graph = renderGraphFiles(db);
|
|
362
|
+
await fs.writeFile(path.join(root, 'graph', 'entities.csv'), graph.entities);
|
|
363
|
+
await fs.writeFile(path.join(root, 'graph', 'relations.csv'), graph.relations);
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { confirmPrompt } from './interactive.js';
|
|
6
|
+
const CONFIG_DIRECTORY = join(homedir(), '.design-brain-memory');
|
|
7
|
+
const CONFIG_FILE = join(CONFIG_DIRECTORY, 'config.json');
|
|
8
|
+
const DEFAULT_SKILL_REPO = 'design-brain/design-brain';
|
|
9
|
+
function readConfig() {
|
|
10
|
+
try {
|
|
11
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
return JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function writeConfig(config) {
|
|
21
|
+
try {
|
|
22
|
+
if (!existsSync(CONFIG_DIRECTORY)) {
|
|
23
|
+
mkdirSync(CONFIG_DIRECTORY, { recursive: true });
|
|
24
|
+
}
|
|
25
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// no-op: prompt persistence should never block command execution
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function getDefaultSkillRepo() {
|
|
32
|
+
return process.env.DESIGN_BRAIN_SKILL_REPO?.trim() || DEFAULT_SKILL_REPO;
|
|
33
|
+
}
|
|
34
|
+
export function installSkill(repo = getDefaultSkillRepo()) {
|
|
35
|
+
try {
|
|
36
|
+
execSync(`npx -y skills add ${repo}`, { stdio: 'inherit' });
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function maybePromptSkillInstall(skipPrompts) {
|
|
44
|
+
const config = readConfig();
|
|
45
|
+
if (config.skillPromptDismissed) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (skipPrompts) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
console.log('\nTip: install the Design Brain skill for coding agents (Cursor/Claude/Copilot).');
|
|
52
|
+
console.log(`Run via skills registry: npx -y skills add ${getDefaultSkillRepo()}\n`);
|
|
53
|
+
const shouldInstall = await confirmPrompt('Install Design Brain skill now?', true);
|
|
54
|
+
if (!shouldInstall) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const installed = installSkill();
|
|
58
|
+
if (installed) {
|
|
59
|
+
console.log('Design Brain skill installed.');
|
|
60
|
+
writeConfig({ ...config, skillPromptDismissed: true });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
console.log('Skill install failed. You can install manually:');
|
|
64
|
+
console.log(` npx -y skills add ${getDefaultSkillRepo()}`);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=skillPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPrompt.js","sourceRoot":"","sources":["../src/skillPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1D,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAe,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,kBAAkB,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAI,GAAG,mBAAmB,EAAE;IACvD,IAAI,CAAC;QACH,QAAQ,CAAC,qBAAqB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,WAAoB;IAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,8CAA8C,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAErF,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;IACnF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,uBAAuB,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DesignBrainDatabase, ProjectRecord } from './types.js';
|
|
2
|
+
export declare function brainRoot(rootDir: string): string;
|
|
3
|
+
export declare function databasePath(rootDir: string): string;
|
|
4
|
+
export declare function projectDir(rootDir: string, projectId: string): string;
|
|
5
|
+
export declare function projectAssetDir(rootDir: string, projectId: string): string;
|
|
6
|
+
export declare function ensureBrainExists(rootDir: string): Promise<void>;
|
|
7
|
+
export declare function loadDatabase(rootDir: string): Promise<DesignBrainDatabase>;
|
|
8
|
+
export declare function saveDatabase(rootDir: string, db: DesignBrainDatabase): Promise<void>;
|
|
9
|
+
export declare function findProject(db: DesignBrainDatabase, projectId: string): ProjectRecord | undefined;
|
|
10
|
+
export declare function ensureProject(db: DesignBrainDatabase, options: {
|
|
11
|
+
projectId: string;
|
|
12
|
+
projectName?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
}): ProjectRecord;
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { nowIso, slugify } from './util.js';
|
|
4
|
+
export function brainRoot(rootDir) {
|
|
5
|
+
return path.join(rootDir, '.design-brain');
|
|
6
|
+
}
|
|
7
|
+
export function databasePath(rootDir) {
|
|
8
|
+
return path.join(brainRoot(rootDir), 'database.json');
|
|
9
|
+
}
|
|
10
|
+
export function projectDir(rootDir, projectId) {
|
|
11
|
+
return path.join(brainRoot(rootDir), 'projects', projectId);
|
|
12
|
+
}
|
|
13
|
+
export function projectAssetDir(rootDir, projectId) {
|
|
14
|
+
return path.join(brainRoot(rootDir), 'assets', projectId);
|
|
15
|
+
}
|
|
16
|
+
export async function ensureBrainExists(rootDir) {
|
|
17
|
+
const base = brainRoot(rootDir);
|
|
18
|
+
await fs.ensureDir(path.join(base, 'projects'));
|
|
19
|
+
await fs.ensureDir(path.join(base, 'assets'));
|
|
20
|
+
await fs.ensureDir(path.join(base, 'graph'));
|
|
21
|
+
const dbFile = databasePath(rootDir);
|
|
22
|
+
if (!(await fs.pathExists(dbFile))) {
|
|
23
|
+
const db = {
|
|
24
|
+
version: 1,
|
|
25
|
+
createdAt: nowIso(),
|
|
26
|
+
updatedAt: nowIso(),
|
|
27
|
+
projects: [],
|
|
28
|
+
};
|
|
29
|
+
await fs.writeJson(dbFile, db, { spaces: 2 });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function loadDatabase(rootDir) {
|
|
33
|
+
await ensureBrainExists(rootDir);
|
|
34
|
+
const db = await fs.readJson(databasePath(rootDir));
|
|
35
|
+
return db;
|
|
36
|
+
}
|
|
37
|
+
export async function saveDatabase(rootDir, db) {
|
|
38
|
+
db.updatedAt = nowIso();
|
|
39
|
+
await fs.writeJson(databasePath(rootDir), db, { spaces: 2 });
|
|
40
|
+
}
|
|
41
|
+
export function findProject(db, projectId) {
|
|
42
|
+
return db.projects.find((project) => project.id === projectId);
|
|
43
|
+
}
|
|
44
|
+
export function ensureProject(db, options) {
|
|
45
|
+
const normalizedId = slugify(options.projectId);
|
|
46
|
+
const now = nowIso();
|
|
47
|
+
let project = findProject(db, normalizedId);
|
|
48
|
+
if (!project) {
|
|
49
|
+
project = {
|
|
50
|
+
id: normalizedId,
|
|
51
|
+
name: options.projectName?.trim() || options.projectId,
|
|
52
|
+
description: options.description,
|
|
53
|
+
createdAt: now,
|
|
54
|
+
updatedAt: now,
|
|
55
|
+
inspirations: [],
|
|
56
|
+
outcomes: [],
|
|
57
|
+
};
|
|
58
|
+
db.projects.push(project);
|
|
59
|
+
}
|
|
60
|
+
if (options.projectName?.trim()) {
|
|
61
|
+
project.name = options.projectName.trim();
|
|
62
|
+
}
|
|
63
|
+
if (options.description !== undefined) {
|
|
64
|
+
project.description = options.description;
|
|
65
|
+
}
|
|
66
|
+
project.updatedAt = now;
|
|
67
|
+
return project;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/svg.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ColorToken, ComponentToken, LayoutToken, TypographyToken } from './types.js';
|
|
2
|
+
export declare function generatePaletteSvg(colors: ColorToken[], title: string): string;
|
|
3
|
+
export declare function generateComponentsSvg(components: ComponentToken[], title: string): string;
|
|
4
|
+
export declare function generateTypographySvg(tokens: TypographyToken[], title: string): string;
|
|
5
|
+
export declare function generateLayoutSvg(layout: LayoutToken[], title: string): string;
|