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
@@ -0,0 +1,229 @@
1
+ import { aggregateColors, aggregateTypography, aggregateMotion, } from './aggregate.js';
2
+ const CSS_NAMED_COLORS = [
3
+ ['black', 0, 0, 0],
4
+ ['white', 255, 255, 255],
5
+ ['red', 255, 0, 0],
6
+ ['lime', 0, 255, 0],
7
+ ['blue', 0, 0, 255],
8
+ ['yellow', 255, 255, 0],
9
+ ['cyan', 0, 255, 255],
10
+ ['magenta', 255, 0, 255],
11
+ ['silver', 192, 192, 192],
12
+ ['gray', 128, 128, 128],
13
+ ['maroon', 128, 0, 0],
14
+ ['olive', 128, 128, 0],
15
+ ['green', 0, 128, 0],
16
+ ['purple', 128, 0, 128],
17
+ ['teal', 0, 128, 128],
18
+ ['navy', 0, 0, 128],
19
+ ['orange', 255, 165, 0],
20
+ ['pink', 255, 192, 203],
21
+ ['coral', 255, 127, 80],
22
+ ['salmon', 250, 128, 114],
23
+ ['tomato', 255, 99, 71],
24
+ ['crimson', 220, 20, 60],
25
+ ['firebrick', 178, 34, 34],
26
+ ['darkred', 139, 0, 0],
27
+ ['indianred', 205, 92, 92],
28
+ ['lightcoral', 240, 128, 128],
29
+ ['orangered', 255, 69, 0],
30
+ ['darkorange', 255, 140, 0],
31
+ ['gold', 255, 215, 0],
32
+ ['khaki', 240, 230, 140],
33
+ ['darkkhaki', 189, 183, 107],
34
+ ['peachpuff', 255, 218, 185],
35
+ ['moccasin', 255, 228, 181],
36
+ ['papayawhip', 245, 222, 179],
37
+ ['lemonchiffon', 255, 250, 205],
38
+ ['lightyellow', 255, 255, 224],
39
+ ['wheat', 245, 222, 179],
40
+ ['tan', 210, 180, 140],
41
+ ['chocolate', 210, 105, 30],
42
+ ['saddlebrown', 139, 69, 19],
43
+ ['sienna', 160, 82, 45],
44
+ ['brown', 165, 42, 42],
45
+ ['peru', 205, 133, 63],
46
+ ['sandybrown', 244, 164, 96],
47
+ ['rosybrown', 188, 143, 143],
48
+ ['burlywood', 222, 184, 135],
49
+ ['bisque', 255, 228, 196],
50
+ ['blanchedalmond', 255, 235, 205],
51
+ ['antiquewhite', 250, 235, 215],
52
+ ['linen', 250, 240, 230],
53
+ ['lavenderblush', 255, 240, 245],
54
+ ['mistyrose', 255, 228, 225],
55
+ ['snow', 255, 250, 250],
56
+ ['seashell', 255, 245, 238],
57
+ ['floralwhite', 255, 250, 240],
58
+ ['ivory', 255, 255, 240],
59
+ ['honeydew', 240, 255, 240],
60
+ ['mintcream', 245, 255, 250],
61
+ ['azure', 240, 255, 255],
62
+ ['aliceblue', 240, 248, 255],
63
+ ['ghostwhite', 248, 248, 255],
64
+ ['whitesmoke', 245, 245, 245],
65
+ ['gainsboro', 220, 220, 220],
66
+ ['lightgray', 211, 211, 211],
67
+ ['darkgray', 169, 169, 169],
68
+ ['dimgray', 105, 105, 105],
69
+ ['lightslategray', 119, 136, 153],
70
+ ['slategray', 112, 128, 144],
71
+ ['darkslategray', 47, 79, 79],
72
+ ['greenyellow', 173, 255, 47],
73
+ ['chartreuse', 127, 255, 0],
74
+ ['lawngreen', 124, 252, 0],
75
+ ['limegreen', 50, 205, 50],
76
+ ['palegreen', 152, 251, 152],
77
+ ['lightgreen', 144, 238, 144],
78
+ ['springgreen', 0, 255, 127],
79
+ ['mediumspringgreen', 0, 250, 154],
80
+ ['darkgreen', 0, 100, 0],
81
+ ['forestgreen', 34, 139, 34],
82
+ ['seagreen', 46, 139, 87],
83
+ ['mediumseagreen', 60, 179, 113],
84
+ ['mediumaquamarine', 102, 205, 170],
85
+ ['darkseagreen', 143, 188, 143],
86
+ ['aquamarine', 127, 255, 212],
87
+ ['paleturquoise', 175, 238, 238],
88
+ ['lightcyan', 224, 255, 255],
89
+ ['darkturquoise', 0, 206, 209],
90
+ ['turquoise', 64, 224, 208],
91
+ ['mediumturquoise', 72, 209, 204],
92
+ ['lightseagreen', 32, 178, 170],
93
+ ['cadetblue', 95, 158, 160],
94
+ ['darkcyan', 0, 139, 139],
95
+ ['steelblue', 70, 130, 180],
96
+ ['lightsteelblue', 176, 196, 222],
97
+ ['powderblue', 176, 224, 230],
98
+ ['lightblue', 173, 216, 230],
99
+ ['skyblue', 135, 206, 235],
100
+ ['lightskyblue', 135, 206, 250],
101
+ ['deepskyblue', 0, 191, 255],
102
+ ['dodgerblue', 30, 144, 255],
103
+ ['cornflowerblue', 100, 149, 237],
104
+ ['mediumslateblue', 123, 104, 238],
105
+ ['royalblue', 65, 105, 225],
106
+ ['mediumblue', 0, 0, 205],
107
+ ['darkblue', 0, 0, 139],
108
+ ['midnightblue', 25, 25, 112],
109
+ ['indigo', 75, 0, 130],
110
+ ['darkslateblue', 72, 61, 139],
111
+ ['slateblue', 106, 90, 205],
112
+ ['blueviolet', 138, 43, 226],
113
+ ['mediumpurple', 147, 112, 219],
114
+ ['darkorchid', 153, 50, 204],
115
+ ['darkviolet', 148, 0, 211],
116
+ ['darkmagenta', 139, 0, 139],
117
+ ['plum', 221, 160, 221],
118
+ ['violet', 238, 130, 238],
119
+ ['orchid', 218, 112, 214],
120
+ ['mediumorchid', 186, 85, 211],
121
+ ['mediumvioletred', 199, 21, 133],
122
+ ['deeppink', 255, 20, 147],
123
+ ['hotpink', 255, 105, 180],
124
+ ['lavender', 230, 230, 250],
125
+ ['thistle', 216, 191, 216],
126
+ ['fuchsia', 255, 0, 255],
127
+ ['aqua', 0, 255, 255],
128
+ ['cornsilk', 255, 248, 220],
129
+ ['oldlace', 253, 245, 230],
130
+ ['navajowhite', 255, 222, 173],
131
+ ['goldenrod', 218, 165, 32],
132
+ ['darkgoldenrod', 184, 134, 11],
133
+ ['yellowgreen', 154, 205, 50],
134
+ ['olivedrab', 107, 142, 35],
135
+ ['darkolivegreen', 85, 107, 47],
136
+ ];
137
+ function parseHex(hex) {
138
+ let h = hex.replace(/^#/, '');
139
+ if (h.length === 3) {
140
+ h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
141
+ }
142
+ const r = Number.parseInt(h.slice(0, 2), 16);
143
+ const g = Number.parseInt(h.slice(2, 4), 16);
144
+ const b = Number.parseInt(h.slice(4, 6), 16);
145
+ return [r, g, b];
146
+ }
147
+ function colorDistance(r1, g1, b1, r2, g2, b2) {
148
+ return (r1 - r2) ** 2 + (g1 - g2) ** 2 + (b1 - b2) ** 2;
149
+ }
150
+ export function nameColor(hex) {
151
+ const [r, g, b] = parseHex(hex);
152
+ let bestName = 'unknown';
153
+ let bestDist = Infinity;
154
+ for (const [name, cr, cg, cb] of CSS_NAMED_COLORS) {
155
+ const dist = colorDistance(r, g, b, cr, cg, cb);
156
+ if (dist < bestDist) {
157
+ bestDist = dist;
158
+ bestName = name;
159
+ }
160
+ }
161
+ return bestName;
162
+ }
163
+ export function nameTypographySize(fontSize) {
164
+ const match = fontSize.match(/^(\d+(?:\.\d+)?)\s*px$/i);
165
+ if (!match)
166
+ return fontSize;
167
+ const px = parseFloat(match[1]);
168
+ if (px < 12)
169
+ return 'xs';
170
+ if (px < 15)
171
+ return 'sm';
172
+ if (px < 19)
173
+ return 'md';
174
+ if (px < 25)
175
+ return 'lg';
176
+ return 'xl';
177
+ }
178
+ function parseDurationMs(duration) {
179
+ const msMatch = duration.match(/^(\d+(?:\.\d+)?)\s*ms$/i);
180
+ if (msMatch)
181
+ return parseFloat(msMatch[1]);
182
+ const sMatch = duration.match(/^(\d+(?:\.\d+)?)\s*s$/i);
183
+ if (sMatch)
184
+ return parseFloat(sMatch[1]) * 1000;
185
+ return -1;
186
+ }
187
+ export function nameMotionDuration(duration) {
188
+ const ms = parseDurationMs(duration);
189
+ if (ms < 0)
190
+ return duration;
191
+ if (ms < 100)
192
+ return 'instant';
193
+ if (ms <= 200)
194
+ return 'quick';
195
+ if (ms <= 400)
196
+ return 'normal';
197
+ return 'slow';
198
+ }
199
+ export function nameTokens(project) {
200
+ const map = new Map();
201
+ const usedNames = new Map();
202
+ function uniqueName(base) {
203
+ const count = usedNames.get(base) ?? 0;
204
+ usedNames.set(base, count + 1);
205
+ return count === 0 ? base : `${base}-${count + 1}`;
206
+ }
207
+ for (const color of aggregateColors(project.inspirations)) {
208
+ const name = uniqueName(nameColor(color.hex));
209
+ map.set(color.hex, name);
210
+ }
211
+ const seenSizes = new Set();
212
+ for (const typo of aggregateTypography(project.inspirations)) {
213
+ if (!seenSizes.has(typo.fontSize)) {
214
+ seenSizes.add(typo.fontSize);
215
+ map.set(typo.fontSize, nameTypographySize(typo.fontSize));
216
+ }
217
+ }
218
+ const seenDurations = new Set();
219
+ for (const motion of aggregateMotion(project.inspirations)) {
220
+ for (const t of motion.transitions ?? []) {
221
+ if (t.duration && !seenDurations.has(t.duration)) {
222
+ seenDurations.add(t.duration);
223
+ map.set(t.duration, nameMotionDuration(t.duration));
224
+ }
225
+ }
226
+ }
227
+ return map;
228
+ }
229
+ //# sourceMappingURL=tokenNaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenNaming.js","sourceRoot":"","sources":["../src/tokenNaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ProjectRecord } from './types.js';
2
+ export interface TokenVariant {
3
+ selector: string;
4
+ tag: string;
5
+ text: string;
6
+ className: string;
7
+ html: string;
8
+ styles: Record<string, string>;
9
+ sources: string[];
10
+ }
11
+ export interface ComponentTokenFile {
12
+ kind: string;
13
+ project: string;
14
+ count: number;
15
+ variants: TokenVariant[];
16
+ }
17
+ export declare function generateComponentTokens(project: ProjectRecord): Record<string, ComponentTokenFile>;
package/dist/tokens.js ADDED
@@ -0,0 +1,44 @@
1
+ export function generateComponentTokens(project) {
2
+ const kindMap = new Map();
3
+ for (const inspiration of project.inspirations) {
4
+ for (const component of inspiration.analysis.components) {
5
+ let selectorMap = kindMap.get(component.kind);
6
+ if (!selectorMap) {
7
+ selectorMap = new Map();
8
+ kindMap.set(component.kind, selectorMap);
9
+ }
10
+ const existing = selectorMap.get(component.selector);
11
+ if (existing) {
12
+ existing.sources.add(inspiration.id);
13
+ }
14
+ else {
15
+ selectorMap.set(component.selector, {
16
+ component,
17
+ sources: new Set([inspiration.id]),
18
+ });
19
+ }
20
+ }
21
+ }
22
+ const result = {};
23
+ for (const [kind, selectorMap] of kindMap) {
24
+ const variants = [...selectorMap.values()]
25
+ .sort((a, b) => b.sources.size - a.sources.size)
26
+ .map(({ component, sources }) => ({
27
+ selector: component.selector,
28
+ tag: component.tag,
29
+ text: component.text,
30
+ className: component.className,
31
+ html: component.html ?? '',
32
+ styles: component.styles,
33
+ sources: [...sources],
34
+ }));
35
+ result[kind] = {
36
+ kind,
37
+ project: project.id,
38
+ count: variants.reduce((sum, v) => sum + v.sources.length, 0),
39
+ variants,
40
+ };
41
+ }
42
+ return result;
43
+ }
44
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,uBAAuB,CACrC,OAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4E,CAAC;IAEpG,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxD,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE;oBAClC,SAAS;oBACT,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAuC,EAAE,CAAC;IAEtD,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAmB,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;aAC/C,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;YAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;SACtB,CAAC,CAAC,CAAC;QAEN,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { InspirationRecord } from './types.js';
2
+ export interface TrendNote {
3
+ title: string;
4
+ signal: 'rising' | 'stable' | 'declining';
5
+ domain: string;
6
+ evidence: string[];
7
+ firstSeen: string;
8
+ lastSeen: string;
9
+ occurrences: number;
10
+ }
11
+ export declare function detectTrends(inspirations: InspirationRecord[]): TrendNote[];
12
+ export declare function writeTrendNotes(rootDir: string, trends: TrendNote[]): Promise<number>;
package/dist/trends.js ADDED
@@ -0,0 +1,178 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import { brainRoot } from './store.js';
4
+ function determineSignal(captures, allCaptures) {
5
+ if (captures.length < 3)
6
+ return 'stable';
7
+ const sorted = [...allCaptures].sort();
8
+ const mid = Math.floor(sorted.length / 2);
9
+ const firstHalf = new Set(sorted.slice(0, mid));
10
+ const secondHalf = new Set(sorted.slice(mid));
11
+ const countFirst = captures.filter((c) => firstHalf.has(c)).length;
12
+ const countSecond = captures.filter((c) => secondHalf.has(c)).length;
13
+ if (countSecond > countFirst)
14
+ return 'rising';
15
+ if (countFirst > countSecond)
16
+ return 'declining';
17
+ return 'stable';
18
+ }
19
+ export function detectTrends(inspirations) {
20
+ if (inspirations.length < 3)
21
+ return [];
22
+ const sorted = [...inspirations].sort((a, b) => a.capturedAt.localeCompare(b.capturedAt));
23
+ const allIds = sorted.map((i) => i.id);
24
+ const trends = [];
25
+ // Color trends — colors appearing in 3+ captures
26
+ const colorMap = new Map();
27
+ for (const inspo of sorted) {
28
+ for (const color of inspo.analysis.colors) {
29
+ const hex = color.hex.toUpperCase();
30
+ const list = colorMap.get(hex) ?? [];
31
+ list.push(inspo.id);
32
+ colorMap.set(hex, list);
33
+ }
34
+ }
35
+ for (const [hex, ids] of colorMap) {
36
+ if (ids.length >= 3) {
37
+ const captures = sorted.filter((i) => ids.includes(i.id));
38
+ trends.push({
39
+ title: `Color ${hex} appearing across ${ids.length} captures`,
40
+ signal: determineSignal(ids, allIds),
41
+ domain: 'color',
42
+ evidence: ids.map((id) => `[[${id}]]`),
43
+ firstSeen: captures[0].capturedAt.slice(0, 10),
44
+ lastSeen: captures.at(-1).capturedAt.slice(0, 10),
45
+ occurrences: ids.length,
46
+ });
47
+ }
48
+ }
49
+ // Typography trends — font families in 3+ captures
50
+ const fontMap = new Map();
51
+ for (const inspo of sorted) {
52
+ const families = new Set(inspo.analysis.typography.map((t) => t.fontFamily.split(',')[0].trim().replace(/['"]/g, '')));
53
+ for (const family of families) {
54
+ const list = fontMap.get(family) ?? [];
55
+ list.push(inspo.id);
56
+ fontMap.set(family, list);
57
+ }
58
+ }
59
+ for (const [family, ids] of fontMap) {
60
+ if (ids.length >= 3) {
61
+ const captures = sorted.filter((i) => ids.includes(i.id));
62
+ trends.push({
63
+ title: `Font "${family}" used in ${ids.length} captures`,
64
+ signal: determineSignal(ids, allIds),
65
+ domain: 'typography',
66
+ evidence: ids.map((id) => `[[${id}]]`),
67
+ firstSeen: captures[0].capturedAt.slice(0, 10),
68
+ lastSeen: captures.at(-1).capturedAt.slice(0, 10),
69
+ occurrences: ids.length,
70
+ });
71
+ }
72
+ }
73
+ // Component kind trends
74
+ const kindMap = new Map();
75
+ for (const inspo of sorted) {
76
+ const kinds = new Set(inspo.analysis.components.map((c) => c.kind));
77
+ for (const kind of kinds) {
78
+ const list = kindMap.get(kind) ?? [];
79
+ list.push(inspo.id);
80
+ kindMap.set(kind, list);
81
+ }
82
+ }
83
+ for (const [kind, ids] of kindMap) {
84
+ if (ids.length >= 3) {
85
+ const captures = sorted.filter((i) => ids.includes(i.id));
86
+ trends.push({
87
+ title: `Component kind "${kind}" in ${ids.length} captures`,
88
+ signal: determineSignal(ids, allIds),
89
+ domain: 'components',
90
+ evidence: ids.map((id) => `[[${id}]]`),
91
+ firstSeen: captures[0].capturedAt.slice(0, 10),
92
+ lastSeen: captures.at(-1).capturedAt.slice(0, 10),
93
+ occurrences: ids.length,
94
+ });
95
+ }
96
+ }
97
+ // Motion trends — easing curves in 3+ captures
98
+ const easingMap = new Map();
99
+ for (const inspo of sorted) {
100
+ const easings = new Set(inspo.analysis.motion.flatMap((m) => (m.transitions ?? []).map((t) => t.timingFunction)).filter(Boolean));
101
+ for (const easing of easings) {
102
+ const list = easingMap.get(easing) ?? [];
103
+ list.push(inspo.id);
104
+ easingMap.set(easing, list);
105
+ }
106
+ }
107
+ for (const [easing, ids] of easingMap) {
108
+ if (ids.length >= 3) {
109
+ const captures = sorted.filter((i) => ids.includes(i.id));
110
+ trends.push({
111
+ title: `Easing "${easing}" in ${ids.length} captures`,
112
+ signal: determineSignal(ids, allIds),
113
+ domain: 'motion',
114
+ evidence: ids.map((id) => `[[${id}]]`),
115
+ firstSeen: captures[0].capturedAt.slice(0, 10),
116
+ lastSeen: captures.at(-1).capturedAt.slice(0, 10),
117
+ occurrences: ids.length,
118
+ });
119
+ }
120
+ }
121
+ return trends;
122
+ }
123
+ function renderTrendNote(trend, today) {
124
+ return `---
125
+ type: trend
126
+ title: "${trend.title}"
127
+ signal: ${trend.signal}
128
+ domain: ${trend.domain}
129
+ evidence: [${trend.evidence.map((e) => `"${e}"`).join(', ')}]
130
+ first_seen: ${trend.firstSeen}
131
+ last_seen: ${trend.lastSeen}
132
+ occurrences: ${trend.occurrences}
133
+ created: ${today}
134
+ updated: ${today}
135
+ ---
136
+
137
+ # ${trend.title}
138
+
139
+ **Signal:** ${trend.signal}
140
+ **Domain:** ${trend.domain}
141
+ **Occurrences:** ${trend.occurrences}
142
+ **First seen:** ${trend.firstSeen}
143
+ **Last seen:** ${trend.lastSeen}
144
+
145
+ ## Evidence
146
+
147
+ ${trend.evidence.map((e) => `- ${e}`).join('\n')}
148
+ `;
149
+ }
150
+ function slugifyTrend(title) {
151
+ return title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 80);
152
+ }
153
+ export async function writeTrendNotes(rootDir, trends) {
154
+ const root = brainRoot(rootDir);
155
+ const trendDir = path.join(root, 'notes', 'trends');
156
+ await fs.ensureDir(trendDir);
157
+ const today = new Date().toISOString().slice(0, 10);
158
+ let written = 0;
159
+ for (const trend of trends) {
160
+ const filename = `${slugifyTrend(trend.title)}.md`;
161
+ const filepath = path.join(trendDir, filename);
162
+ await fs.writeFile(filepath, renderTrendNote(trend, today));
163
+ written++;
164
+ }
165
+ // Update trends MOC
166
+ const mocPath = path.join(root, 'notes', 'mocs', 'trends.md');
167
+ const mocLines = [
168
+ '# Trends Map of Content\n',
169
+ `Updated: ${today}\n`,
170
+ `## Active Trends (${trends.length})\n`,
171
+ ];
172
+ for (const trend of trends) {
173
+ mocLines.push(`- **${trend.signal}** ${trend.title} (${trend.occurrences} occurrences)`);
174
+ }
175
+ await fs.writeFile(mocPath, mocLines.join('\n') + '\n');
176
+ return written;
177
+ }
178
+ //# sourceMappingURL=trends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trends.js","sourceRoot":"","sources":["../src/trends.ts"],"names":[],"mappings":"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"}