design-brain-memory 0.9.3 → 0.9.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.
Files changed (125) hide show
  1. package/README.md +273 -0
  2. package/dist/agentBrowser.d.ts +0 -1
  3. package/dist/agentBrowser.js +13 -31
  4. package/dist/agentBrowser.js.map +1 -1
  5. package/dist/aggregate.d.ts +9 -0
  6. package/dist/aggregate.js +53 -0
  7. package/dist/aggregate.js.map +1 -0
  8. package/dist/batch.d.ts +16 -0
  9. package/dist/batch.js +44 -0
  10. package/dist/batch.js.map +1 -0
  11. package/dist/cli.js +250 -216
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands.d.ts +60 -1
  14. package/dist/commands.js +323 -10
  15. package/dist/commands.js.map +1 -1
  16. package/dist/compare.d.ts +33 -0
  17. package/dist/compare.js +83 -0
  18. package/dist/compare.js.map +1 -0
  19. package/dist/componentGraph.d.ts +22 -0
  20. package/dist/componentGraph.js +106 -0
  21. package/dist/componentGraph.js.map +1 -0
  22. package/dist/contextLayer.d.ts +12 -0
  23. package/dist/contextLayer.js +263 -0
  24. package/dist/contextLayer.js.map +1 -0
  25. package/dist/cssInJs.d.ts +9 -0
  26. package/dist/cssInJs.js +124 -0
  27. package/dist/cssInJs.js.map +1 -0
  28. package/dist/extractFromUrl.d.ts +8 -0
  29. package/dist/extractFromUrl.js +508 -414
  30. package/dist/extractFromUrl.js.map +1 -1
  31. package/dist/graphView.d.ts +21 -0
  32. package/dist/graphView.js +492 -0
  33. package/dist/graphView.js.map +1 -0
  34. package/dist/index.d.ts +26 -11
  35. package/dist/index.js +17 -10
  36. package/dist/index.js.map +1 -1
  37. package/dist/knowledge.d.ts +20 -0
  38. package/dist/knowledge.js +208 -0
  39. package/dist/knowledge.js.map +1 -0
  40. package/dist/liveView.d.ts +15 -0
  41. package/dist/liveView.js +475 -0
  42. package/dist/liveView.js.map +1 -0
  43. package/dist/llm.js +1 -9
  44. package/dist/llm.js.map +1 -1
  45. package/dist/moodboard.d.ts +3 -0
  46. package/dist/moodboard.js +152 -0
  47. package/dist/moodboard.js.map +1 -0
  48. package/dist/persona.d.ts +2 -2
  49. package/dist/persona.js +82 -210
  50. package/dist/persona.js.map +1 -1
  51. package/dist/query.js +1 -6
  52. package/dist/query.js.map +1 -1
  53. package/dist/render.d.ts +2 -10
  54. package/dist/render.js +80 -175
  55. package/dist/render.js.map +1 -1
  56. package/dist/reviewChecklist.d.ts +17 -0
  57. package/dist/reviewChecklist.js +126 -0
  58. package/dist/reviewChecklist.js.map +1 -0
  59. package/dist/scan.d.ts +19 -7
  60. package/dist/scan.js +132 -374
  61. package/dist/scan.js.map +1 -1
  62. package/dist/scorecard.d.ts +53 -0
  63. package/dist/scorecard.js +325 -0
  64. package/dist/scorecard.js.map +1 -0
  65. package/dist/skillPrompt.d.ts +1 -3
  66. package/dist/skillPrompt.js +22 -148
  67. package/dist/skillPrompt.js.map +1 -1
  68. package/dist/store.d.ts +2 -2
  69. package/dist/store.js +7 -9
  70. package/dist/store.js.map +1 -1
  71. package/dist/styleDictionary.d.ts +16 -0
  72. package/dist/styleDictionary.js +89 -0
  73. package/dist/styleDictionary.js.map +1 -0
  74. package/dist/svg.d.ts +5 -0
  75. package/dist/svg.js +162 -0
  76. package/dist/svg.js.map +1 -0
  77. package/dist/systemDiff.d.ts +28 -0
  78. package/dist/systemDiff.js +107 -0
  79. package/dist/systemDiff.js.map +1 -0
  80. package/dist/tailwind.d.ts +2 -0
  81. package/dist/tailwind.js +122 -0
  82. package/dist/tailwind.js.map +1 -0
  83. package/dist/taste.d.ts +3 -2
  84. package/dist/taste.js +349 -536
  85. package/dist/taste.js.map +1 -1
  86. package/dist/tasteRenderer.d.ts +2 -3
  87. package/dist/tasteRenderer.js +123 -119
  88. package/dist/tasteRenderer.js.map +1 -1
  89. package/dist/tokenNaming.d.ts +5 -0
  90. package/dist/tokenNaming.js +229 -0
  91. package/dist/tokenNaming.js.map +1 -0
  92. package/dist/tokens.d.ts +17 -0
  93. package/dist/tokens.js +44 -0
  94. package/dist/tokens.js.map +1 -0
  95. package/dist/trends.d.ts +12 -0
  96. package/dist/trends.js +178 -0
  97. package/dist/trends.js.map +1 -0
  98. package/dist/types.d.ts +47 -101
  99. package/dist/wiki.d.ts +10 -0
  100. package/dist/wiki.js +346 -0
  101. package/dist/wiki.js.map +1 -0
  102. package/dist/writingStyle.d.ts +38 -0
  103. package/dist/writingStyle.js +224 -0
  104. package/dist/writingStyle.js.map +1 -0
  105. package/package.json +5 -4
  106. package/dist/classify.d.ts +0 -21
  107. package/dist/classify.js +0 -205
  108. package/dist/classify.js.map +0 -1
  109. package/dist/scanRenderer.d.ts +0 -2
  110. package/dist/scanRenderer.js +0 -155
  111. package/dist/scanRenderer.js.map +0 -1
  112. package/dist/tasteDiff.d.ts +0 -19
  113. package/dist/tasteDiff.js +0 -340
  114. package/dist/tasteDiff.js.map +0 -1
  115. package/dist/tasteGenerate.d.ts +0 -12
  116. package/dist/tasteGenerate.js +0 -140
  117. package/dist/tasteGenerate.js.map +0 -1
  118. package/dist/tasteRefine.d.ts +0 -13
  119. package/dist/tasteRefine.js +0 -351
  120. package/dist/tasteRefine.js.map +0 -1
  121. package/dist/theatrical.d.ts +0 -5
  122. package/dist/theatrical.js +0 -258
  123. package/dist/theatrical.js.map +0 -1
  124. package/skills/SKILL.md +0 -36
  125. package/skills/design-brain/SKILL.md +0 -77
package/dist/types.d.ts CHANGED
@@ -18,68 +18,37 @@ export interface ComponentToken {
18
18
  text: string;
19
19
  className: string;
20
20
  styles: Record<string, string>;
21
+ html?: string;
21
22
  }
22
- export type AnimationLibrary = 'css' | 'gsap' | 'lottie' | 'framer-motion' | 'react-spring' | 'motion-one' | 'unknown';
23
- export type MotionIntent = 'fade' | 'slide' | 'scale' | 'rotate' | 'color-shift' | 'spring' | 'bounce' | 'morph' | 'reveal' | 'parallax' | 'complex';
24
- export type TriggerEvent = 'load' | 'hover' | 'focus' | 'click' | 'scroll' | 'viewport-enter' | 'media-query' | 'unknown';
25
- export interface KeyframeStop {
26
- offset: number;
27
- properties: Record<string, string>;
28
- easing?: string;
29
- }
30
- export interface AnimationTiming {
31
- duration: number;
32
- delay: number;
33
- easing: string;
34
- iterations: number;
35
- direction: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
36
- fillMode: 'none' | 'forwards' | 'backwards' | 'both';
37
- }
38
- export interface ScrollBinding {
39
- triggerSelector?: string;
40
- hasScrollTrigger: boolean;
41
- hasIntersectionObserver: boolean;
42
- scrollTimelineAxis?: 'block' | 'inline';
43
- }
44
- export interface PhysicsParams {
45
- type: 'spring' | 'bounce' | 'inertia';
46
- mass?: number;
47
- stiffness?: number;
48
- damping?: number;
49
- oscillationCount?: number;
50
- overshootPercent?: number;
51
- }
52
- export interface AnimationGroup {
53
- groupId: string;
54
- role: 'lead' | 'follower';
55
- staggerDelay?: number;
56
- }
57
- export interface AnimationToken {
58
- selector: string;
59
- library: AnimationLibrary;
60
- motionIntent: MotionIntent;
61
- timing?: AnimationTiming;
62
- keyframes?: KeyframeStop[];
63
- trigger: TriggerEvent;
64
- scrollBinding?: ScrollBinding;
65
- physics?: PhysicsParams;
66
- group?: AnimationGroup;
67
- gsapVars?: Record<string, unknown>;
68
- lottieMetadata?: {
69
- frameRate: number;
70
- totalFrames: number;
71
- duration: number;
72
- };
73
- rawTransition?: string;
74
- rawAnimation?: string;
75
- rawTransform?: string;
23
+ export interface TransitionDetail {
24
+ property: string;
25
+ duration: string;
26
+ timingFunction: string;
27
+ delay: string;
28
+ }
29
+ export interface AnimationDetail {
30
+ name: string;
31
+ duration: string;
32
+ timingFunction: string;
33
+ delay: string;
34
+ iterationCount: string;
35
+ direction: string;
36
+ fillMode: string;
37
+ }
38
+ export interface KeyframeRule {
39
+ name: string;
40
+ steps: Array<{
41
+ offset: string;
42
+ declarations: Record<string, string>;
43
+ }>;
76
44
  }
77
- /** @deprecated Use AnimationToken instead */
78
45
  export interface MotionToken {
79
46
  selector: string;
80
47
  transition: string;
81
48
  animation: string;
82
49
  transform: string;
50
+ transitions?: TransitionDetail[];
51
+ animations?: AnimationDetail[];
83
52
  }
84
53
  export interface LayoutToken {
85
54
  tag: string;
@@ -122,7 +91,8 @@ export interface DesignAnalysis {
122
91
  colors: ColorToken[];
123
92
  typography: TypographyToken[];
124
93
  components: ComponentToken[];
125
- motion: (MotionToken | AnimationToken)[];
94
+ motion: MotionToken[];
95
+ keyframes?: KeyframeRule[];
126
96
  layout: LayoutToken[];
127
97
  cssVariables: Record<string, string>;
128
98
  accessibilitySnapshot?: string;
@@ -218,55 +188,22 @@ export interface IngestOptions {
218
188
  width: number;
219
189
  height: number;
220
190
  }>;
191
+ skipVisuals?: boolean;
192
+ live?: boolean;
193
+ headed?: boolean;
221
194
  }
222
- export interface OutcomeOptions {
223
- rootDir: string;
224
- project: string;
225
- title: string;
195
+ export interface PersonaMatch {
196
+ id: string;
197
+ label: string;
226
198
  description: string;
227
- inspiredBy: string[];
228
- artifactUrl?: string;
229
- tags: string[];
230
- }
231
- export interface ScanTokens {
232
- colors: string[];
233
- fontFamilies: string[];
234
- fontSizes: string[];
235
- transitions: string[];
236
- spacingValues: string[];
237
- cssVariableCount: number;
238
- framework: string | null;
199
+ confidence: number;
239
200
  }
240
201
  export interface ScanScore {
241
- colorDiscipline: number;
242
- typographySystem: number;
243
- spacingLayout: number;
244
- motionPolish: number;
245
- total: number;
246
- }
247
- export interface PersonaMatch {
248
- name: string;
249
- tagline: string;
250
- score: number;
251
- reasoning: string;
252
- }
253
- export interface ScanResult {
254
- path: string;
255
- filesScanned: number;
256
- tokens: ScanTokens;
257
- score: ScanScore;
258
- persona: PersonaMatch;
259
- framework: string | null;
260
- }
261
- export interface AgentInfo {
262
- name: string;
263
- configDir: string;
264
- skillDir: string;
265
- }
266
- export interface InstallResult {
267
- agent: AgentInfo;
268
- success: boolean;
269
- error?: string;
202
+ overall: number;
203
+ color: number;
204
+ typography: number;
205
+ spacing: number;
206
+ motion: number;
270
207
  }
271
208
  export interface TasteColorPreference {
272
209
  palette: Array<{
@@ -369,3 +306,12 @@ export interface TasteDelta {
369
306
  suggestion: string;
370
307
  severity: 'info' | 'warning' | 'mismatch';
371
308
  }
309
+ export interface OutcomeOptions {
310
+ rootDir: string;
311
+ project: string;
312
+ title: string;
313
+ description: string;
314
+ inspiredBy: string[];
315
+ artifactUrl?: string;
316
+ tags: string[];
317
+ }
package/dist/wiki.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { ProjectRecord } from './types.js';
2
+ export interface WikiResult {
3
+ projectPages: number;
4
+ sharedTokens: number;
5
+ wikiDir: string;
6
+ }
7
+ export declare function generateProjectWiki(project: ProjectRecord, allProjectIds: string[]): string;
8
+ export declare function generateSharedContextWiki(projects: ProjectRecord[]): string;
9
+ export declare function generateWikiIndex(projects: ProjectRecord[], sharedTokenCount: number): string;
10
+ export declare function countSharedTokens(projects: ProjectRecord[]): number;
package/dist/wiki.js ADDED
@@ -0,0 +1,346 @@
1
+ import { aggregateColors, aggregateTypography, aggregateComponents, aggregateMotion, } from './aggregate.js';
2
+ import { nameColor, nameTypographySize } from './tokenNaming.js';
3
+ import { aggregateWritingStyles } from './writingStyle.js';
4
+ // ── Per-project wiki page ─────────────────────────────────────────────
5
+ function renderProjectWiki(project, allProjectIds) {
6
+ const lines = [];
7
+ const inspos = project.inspirations;
8
+ lines.push(`# ${project.name}`);
9
+ lines.push('');
10
+ if (project.description) {
11
+ lines.push(`> ${project.description}`);
12
+ lines.push('');
13
+ }
14
+ lines.push(`**ID:** ${project.id}`);
15
+ lines.push(`**Created:** ${project.createdAt.slice(0, 10)}`);
16
+ lines.push(`**Updated:** ${project.updatedAt.slice(0, 10)}`);
17
+ lines.push(`**Captures:** ${inspos.length}`);
18
+ lines.push(`**Outcomes:** ${project.outcomes.length}`);
19
+ lines.push('');
20
+ // Colors
21
+ const colors = aggregateColors(inspos);
22
+ if (colors.length > 0) {
23
+ lines.push('## Colors');
24
+ lines.push('');
25
+ lines.push('| Hex | Name | Count | Samples |');
26
+ lines.push('| --- | --- | --- | --- |');
27
+ for (const c of colors.slice(0, 30)) {
28
+ const name = nameColor(c.hex);
29
+ lines.push(`| ${c.hex} | ${name} | ${c.count} | ${c.samples.slice(0, 3).join(', ') || '—'} |`);
30
+ }
31
+ lines.push('');
32
+ }
33
+ // Typography
34
+ const typo = aggregateTypography(inspos);
35
+ if (typo.length > 0) {
36
+ lines.push('## Typography');
37
+ lines.push('');
38
+ lines.push('| Font Family | Size | Weight | Scale | Count |');
39
+ lines.push('| --- | --- | --- | --- | --- |');
40
+ for (const t of typo.slice(0, 30)) {
41
+ const scale = nameTypographySize(t.fontSize);
42
+ lines.push(`| ${t.fontFamily} | ${t.fontSize} | ${t.fontWeight} | ${scale} | ${t.count} |`);
43
+ }
44
+ lines.push('');
45
+ }
46
+ // Components
47
+ const components = aggregateComponents(inspos);
48
+ if (components.length > 0) {
49
+ lines.push('## Components');
50
+ lines.push('');
51
+ const byKind = new Map();
52
+ for (const comp of components) {
53
+ const list = byKind.get(comp.kind) ?? [];
54
+ list.push(comp);
55
+ byKind.set(comp.kind, list);
56
+ }
57
+ for (const [kind, items] of [...byKind.entries()].slice(0, 20)) {
58
+ lines.push(`### ${kind}`);
59
+ lines.push('');
60
+ for (const item of items.slice(0, 5)) {
61
+ lines.push(`- \`${item.selector}\` (${item.tag}) — ${item.text.slice(0, 60) || 'no text'}`);
62
+ }
63
+ lines.push('');
64
+ }
65
+ }
66
+ // Writing Style
67
+ const writingAgg = aggregateWritingStyles(inspos);
68
+ const hasTones = Object.keys(writingAgg.tones).length > 0;
69
+ const hasCtas = writingAgg.topCtas.length > 0;
70
+ const hasHeadingStyles = Object.keys(writingAgg.headingStyles).length > 0;
71
+ if (hasTones || hasCtas || hasHeadingStyles) {
72
+ lines.push('## Writing Style');
73
+ lines.push('');
74
+ if (hasTones) {
75
+ const toneEntries = Object.entries(writingAgg.tones).sort((a, b) => b[1] - a[1]);
76
+ lines.push(`**Tone:** ${toneEntries.map(([t, c]) => `${t} (${c})`).join(', ')}`);
77
+ lines.push('');
78
+ }
79
+ if (hasHeadingStyles) {
80
+ const headingEntries = Object.entries(writingAgg.headingStyles).sort((a, b) => b[1] - a[1]);
81
+ lines.push(`**Heading styles:** ${headingEntries.map(([s, c]) => `${s} (${c})`).join(', ')}`);
82
+ lines.push('');
83
+ }
84
+ if (hasCtas) {
85
+ lines.push('**Top CTAs:**');
86
+ lines.push('');
87
+ for (const cta of writingAgg.topCtas.slice(0, 10)) {
88
+ lines.push(`- "${cta.text}" — verb: *${cta.verb}* (${cta.count}x)`);
89
+ }
90
+ lines.push('');
91
+ }
92
+ if (writingAgg.avgSentenceLength > 0) {
93
+ lines.push(`**Avg sentence length:** ${writingAgg.avgSentenceLength} words`);
94
+ lines.push('');
95
+ }
96
+ }
97
+ // Motion
98
+ const motion = aggregateMotion(inspos);
99
+ if (motion.length > 0) {
100
+ lines.push('## Motion');
101
+ lines.push('');
102
+ lines.push('| Selector | Transition | Animation | Count |');
103
+ lines.push('| --- | --- | --- | --- |');
104
+ for (const m of motion.slice(0, 20)) {
105
+ lines.push(`| ${m.selector} | ${m.transition || '—'} | ${m.animation || '—'} | ${m.count} |`);
106
+ }
107
+ lines.push('');
108
+ }
109
+ // CSS Variables
110
+ const allVars = new Map();
111
+ for (const inspo of inspos) {
112
+ for (const [key, value] of Object.entries(inspo.analysis.cssVariables)) {
113
+ if (!allVars.has(key))
114
+ allVars.set(key, value);
115
+ }
116
+ }
117
+ if (allVars.size > 0) {
118
+ lines.push('## CSS Variables');
119
+ lines.push('');
120
+ lines.push('| Variable | Value |');
121
+ lines.push('| --- | --- |');
122
+ for (const [key, value] of [...allVars.entries()].slice(0, 40)) {
123
+ lines.push(`| \`${key}\` | \`${value}\` |`);
124
+ }
125
+ lines.push('');
126
+ }
127
+ // Inspirations
128
+ if (inspos.length > 0) {
129
+ lines.push('## Inspirations');
130
+ lines.push('');
131
+ for (const inspo of inspos) {
132
+ lines.push(`### ${inspo.name}`);
133
+ lines.push('');
134
+ lines.push(`- **ID:** ${inspo.id}`);
135
+ lines.push(`- **Source:** ${inspo.url || inspo.originalImagePath || 'screenshot'}`);
136
+ lines.push(`- **Captured:** ${inspo.capturedAt.slice(0, 10)}`);
137
+ if (inspo.tags.length > 0)
138
+ lines.push(`- **Tags:** ${inspo.tags.join(', ')}`);
139
+ if (inspo.notes)
140
+ lines.push(`- **Notes:** ${inspo.notes}`);
141
+ if (inspo.inspirationSummary)
142
+ lines.push(`- **Summary:** ${inspo.inspirationSummary}`);
143
+ lines.push(`- **Colors:** ${inspo.analysis.colors.length} | **Typography:** ${inspo.analysis.typography.length} | **Components:** ${inspo.analysis.components.length}`);
144
+ lines.push('');
145
+ }
146
+ }
147
+ // Outcomes
148
+ if (project.outcomes.length > 0) {
149
+ lines.push('## Outcomes');
150
+ lines.push('');
151
+ for (const outcome of project.outcomes) {
152
+ lines.push(`### ${outcome.title}`);
153
+ lines.push('');
154
+ lines.push(outcome.description);
155
+ if (outcome.artifactUrl)
156
+ lines.push(`- **Artifact:** ${outcome.artifactUrl}`);
157
+ if (outcome.inspiredBy.length > 0)
158
+ lines.push(`- **Inspired by:** ${outcome.inspiredBy.map((id) => `[[${id}]]`).join(', ')}`);
159
+ if (outcome.tags.length > 0)
160
+ lines.push(`- **Tags:** ${outcome.tags.join(', ')}`);
161
+ lines.push('');
162
+ }
163
+ }
164
+ // Cross-references
165
+ const otherProjects = allProjectIds.filter((id) => id !== project.id);
166
+ if (otherProjects.length > 0) {
167
+ lines.push('## See Also');
168
+ lines.push('');
169
+ for (const id of otherProjects) {
170
+ lines.push(`- [[${id}]]`);
171
+ }
172
+ lines.push('- [[shared-context]]');
173
+ lines.push('');
174
+ }
175
+ return lines.join('\n');
176
+ }
177
+ function findSharedColors(projects) {
178
+ const colorProjects = new Map();
179
+ for (const project of projects) {
180
+ const colors = aggregateColors(project.inspirations);
181
+ for (const c of colors) {
182
+ const hex = c.hex.toUpperCase();
183
+ const set = colorProjects.get(hex) ?? new Set();
184
+ set.add(project.id);
185
+ colorProjects.set(hex, set);
186
+ }
187
+ }
188
+ return [...colorProjects.entries()]
189
+ .filter(([, pids]) => pids.size > 1)
190
+ .map(([hex, pids]) => ({ value: hex, projects: [...pids].sort() }))
191
+ .sort((a, b) => b.projects.length - a.projects.length);
192
+ }
193
+ function findSharedFonts(projects) {
194
+ const fontProjects = new Map();
195
+ for (const project of projects) {
196
+ const typo = aggregateTypography(project.inspirations);
197
+ const families = new Set(typo.map((t) => t.fontFamily.split(',')[0].trim().replace(/['"]/g, '')));
198
+ for (const family of families) {
199
+ const set = fontProjects.get(family) ?? new Set();
200
+ set.add(project.id);
201
+ fontProjects.set(family, set);
202
+ }
203
+ }
204
+ return [...fontProjects.entries()]
205
+ .filter(([, pids]) => pids.size > 1)
206
+ .map(([font, pids]) => ({ value: font, projects: [...pids].sort() }))
207
+ .sort((a, b) => b.projects.length - a.projects.length);
208
+ }
209
+ function findSharedComponents(projects) {
210
+ const kindProjects = new Map();
211
+ for (const project of projects) {
212
+ const kinds = new Set(project.inspirations.flatMap((i) => i.analysis.components.map((c) => c.kind)));
213
+ for (const kind of kinds) {
214
+ const set = kindProjects.get(kind) ?? new Set();
215
+ set.add(project.id);
216
+ kindProjects.set(kind, set);
217
+ }
218
+ }
219
+ return [...kindProjects.entries()]
220
+ .filter(([, pids]) => pids.size > 1)
221
+ .map(([kind, pids]) => ({ value: kind, projects: [...pids].sort() }))
222
+ .sort((a, b) => b.projects.length - a.projects.length);
223
+ }
224
+ function findSharedMotion(projects) {
225
+ const durationProjects = new Map();
226
+ for (const project of projects) {
227
+ const motion = aggregateMotion(project.inspirations);
228
+ for (const m of motion) {
229
+ for (const t of m.transitions ?? []) {
230
+ if (t.duration && t.duration !== '0s') {
231
+ const set = durationProjects.get(t.duration) ?? new Set();
232
+ set.add(project.id);
233
+ durationProjects.set(t.duration, set);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ return [...durationProjects.entries()]
239
+ .filter(([, pids]) => pids.size > 1)
240
+ .map(([dur, pids]) => ({ value: dur, projects: [...pids].sort() }))
241
+ .sort((a, b) => b.projects.length - a.projects.length);
242
+ }
243
+ function renderSharedSection(title, tokens) {
244
+ if (tokens.length === 0)
245
+ return [];
246
+ const lines = [];
247
+ lines.push(`## ${title}`);
248
+ lines.push('');
249
+ lines.push('| Value | Shared By |');
250
+ lines.push('| --- | --- |');
251
+ for (const token of tokens) {
252
+ const links = token.projects.map((id) => `[[${id}]]`).join(', ');
253
+ lines.push(`| ${token.value} | ${links} |`);
254
+ }
255
+ lines.push('');
256
+ return lines;
257
+ }
258
+ function renderSharedContextWiki(projects) {
259
+ const lines = [];
260
+ lines.push('# Shared Design Context');
261
+ lines.push('');
262
+ lines.push('Cross-project design tokens and patterns that appear in multiple projects.');
263
+ lines.push(`Ripgrep this file to find what\'s shared across your design system.`);
264
+ lines.push('');
265
+ lines.push(`**Projects analyzed:** ${projects.length}`);
266
+ lines.push(`**Generated:** ${new Date().toISOString().slice(0, 10)}`);
267
+ lines.push('');
268
+ const sharedColors = findSharedColors(projects);
269
+ const sharedFonts = findSharedFonts(projects);
270
+ const sharedComponents = findSharedComponents(projects);
271
+ const sharedMotion = findSharedMotion(projects);
272
+ const total = sharedColors.length + sharedFonts.length + sharedComponents.length + sharedMotion.length;
273
+ lines.push('## Summary');
274
+ lines.push('');
275
+ lines.push(`| Category | Shared Tokens |`);
276
+ lines.push(`| --- | --- |`);
277
+ lines.push(`| Colors | ${sharedColors.length} |`);
278
+ lines.push(`| Fonts | ${sharedFonts.length} |`);
279
+ lines.push(`| Components | ${sharedComponents.length} |`);
280
+ lines.push(`| Motion | ${sharedMotion.length} |`);
281
+ lines.push(`| **Total** | **${total}** |`);
282
+ lines.push('');
283
+ lines.push(...renderSharedSection('Shared Colors', sharedColors));
284
+ lines.push(...renderSharedSection('Shared Fonts', sharedFonts));
285
+ lines.push(...renderSharedSection('Shared Components', sharedComponents));
286
+ lines.push(...renderSharedSection('Shared Motion Durations', sharedMotion));
287
+ // Project index
288
+ lines.push('## Projects');
289
+ lines.push('');
290
+ for (const project of projects) {
291
+ lines.push(`- [[${project.id}]] — ${project.name} (${project.inspirations.length} captures)`);
292
+ }
293
+ lines.push('');
294
+ return lines.join('\n');
295
+ }
296
+ // ── Wiki index page ───────────────────────────────────────────────────
297
+ function renderWikiIndex(projects, sharedTokenCount) {
298
+ const lines = [];
299
+ lines.push('# Design Wiki');
300
+ lines.push('');
301
+ lines.push('Your design knowledge base. Each project has its own wiki page.');
302
+ lines.push('Use `rg` to search across all projects at once.');
303
+ lines.push('');
304
+ lines.push('## Projects');
305
+ lines.push('');
306
+ lines.push('| Project | Captures | Outcomes | Updated |');
307
+ lines.push('| --- | --- | --- | --- |');
308
+ for (const p of projects) {
309
+ lines.push(`| [[${p.id}]] ${p.name} | ${p.inspirations.length} | ${p.outcomes.length} | ${p.updatedAt.slice(0, 10)} |`);
310
+ }
311
+ lines.push('');
312
+ lines.push('## Cross-Project');
313
+ lines.push('');
314
+ lines.push(`- [[shared-context]] — ${sharedTokenCount} shared tokens across projects`);
315
+ lines.push('');
316
+ lines.push('## Quick Search');
317
+ lines.push('');
318
+ lines.push('```bash');
319
+ lines.push('# Search a color across all projects');
320
+ lines.push('rg "#533AFD" .design-brain/wiki/');
321
+ lines.push('');
322
+ lines.push('# Find which projects use a component');
323
+ lines.push('rg "button" .design-brain/wiki/');
324
+ lines.push('');
325
+ lines.push('# Find shared tokens');
326
+ lines.push('rg "Shared By" .design-brain/wiki/shared/');
327
+ lines.push('```');
328
+ lines.push('');
329
+ return lines.join('\n');
330
+ }
331
+ export function generateProjectWiki(project, allProjectIds) {
332
+ return renderProjectWiki(project, allProjectIds);
333
+ }
334
+ export function generateSharedContextWiki(projects) {
335
+ return renderSharedContextWiki(projects);
336
+ }
337
+ export function generateWikiIndex(projects, sharedTokenCount) {
338
+ return renderWikiIndex(projects, sharedTokenCount);
339
+ }
340
+ export function countSharedTokens(projects) {
341
+ return (findSharedColors(projects).length +
342
+ findSharedFonts(projects).length +
343
+ findSharedComponents(projects).length +
344
+ findSharedMotion(projects).length);
345
+ }
346
+ //# sourceMappingURL=wiki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki.js","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { InspirationRecord } from './types.js';
2
+ export interface WritingStyleToken {
3
+ headings: HeadingPattern[];
4
+ ctas: CtaPattern[];
5
+ toneMarkers: string[];
6
+ textHierarchy: TextLevel[];
7
+ avgSentenceLength: number;
8
+ avgWordLength: number;
9
+ }
10
+ export interface HeadingPattern {
11
+ tag: string;
12
+ text: string;
13
+ wordCount: number;
14
+ style: 'question' | 'statement' | 'action' | 'label';
15
+ }
16
+ export interface CtaPattern {
17
+ text: string;
18
+ selector: string;
19
+ actionVerb: string;
20
+ }
21
+ export interface TextLevel {
22
+ level: string;
23
+ count: number;
24
+ avgWords: number;
25
+ }
26
+ export declare function analyzeWritingStyle(inspo: InspirationRecord): WritingStyleToken;
27
+ export declare function aggregateWritingStyles(inspirations: InspirationRecord[]): {
28
+ headingStyles: Record<string, number>;
29
+ topCtas: Array<{
30
+ text: string;
31
+ verb: string;
32
+ count: number;
33
+ }>;
34
+ tones: Record<string, number>;
35
+ avgSentenceLength: number;
36
+ textLevels: TextLevel[];
37
+ };
38
+ export declare function renderWritingStyleMd(styles: ReturnType<typeof aggregateWritingStyles>, projectId: string): string;