design-brain-memory 0.9.2 → 0.9.3

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.
@@ -7,4 +7,5 @@ export declare function runAgentBrowserJson(args: string[], options?: {
7
7
  session?: string;
8
8
  cwd?: string;
9
9
  headed?: boolean;
10
+ timeoutMs?: number;
10
11
  }): Promise<AgentBrowserJsonResponse>;
@@ -49,8 +49,10 @@ function parseJsonFromOutput(stdout) {
49
49
  }
50
50
  throw new Error(`Failed to parse Agent Browser JSON response. Output:\n${stdout}`);
51
51
  }
52
+ const DEFAULT_TIMEOUT_MS = 60_000;
52
53
  export async function runAgentBrowserJson(args, options = {}) {
53
54
  const runner = resolveRunner();
55
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
54
56
  const finalArgs = [
55
57
  ...runner.prefixArgs,
56
58
  ...(options.session ? ['--session', options.session] : []),
@@ -59,6 +61,8 @@ export async function runAgentBrowserJson(args, options = {}) {
59
61
  ...args,
60
62
  ];
61
63
  return new Promise((resolve, reject) => {
64
+ let settled = false;
65
+ let timer;
62
66
  const child = spawn(runner.command, finalArgs, {
63
67
  cwd: options.cwd,
64
68
  env: {
@@ -70,6 +74,18 @@ export async function runAgentBrowserJson(args, options = {}) {
70
74
  });
71
75
  let stdout = '';
72
76
  let stderr = '';
77
+ function settle(fn) {
78
+ if (settled)
79
+ return;
80
+ settled = true;
81
+ if (timer)
82
+ clearTimeout(timer);
83
+ fn();
84
+ }
85
+ timer = setTimeout(() => {
86
+ child.kill('SIGKILL');
87
+ settle(() => reject(new Error(`agent-browser timed out after ${timeoutMs}ms: ${args.join(' ')}`)));
88
+ }, timeoutMs);
73
89
  child.stdout.on('data', (chunk) => {
74
90
  stdout += chunk.toString();
75
91
  });
@@ -77,20 +93,22 @@ export async function runAgentBrowserJson(args, options = {}) {
77
93
  stderr += chunk.toString();
78
94
  });
79
95
  child.on('error', (error) => {
80
- reject(error);
96
+ settle(() => reject(error));
81
97
  });
82
98
  child.on('close', (code) => {
83
- if (code !== 0) {
84
- reject(new Error(`agent-browser command failed (${code}): ${stderr || stdout}`));
85
- return;
86
- }
87
- try {
88
- resolve(parseJsonFromOutput(stdout));
89
- }
90
- catch (error) {
91
- const details = stderr ? `${error.message}\n${stderr}` : error.message;
92
- reject(new Error(details));
93
- }
99
+ settle(() => {
100
+ if (code !== 0) {
101
+ reject(new Error(`agent-browser command failed (${code}): ${stderr || stdout}`));
102
+ return;
103
+ }
104
+ try {
105
+ resolve(parseJsonFromOutput(stdout));
106
+ }
107
+ catch (error) {
108
+ const details = stderr ? `${error.message}\n${stderr}` : error.message;
109
+ reject(new Error(details));
110
+ }
111
+ });
94
112
  });
95
113
  });
96
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agentBrowser.js","sourceRoot":"","sources":["../src/agentBrowser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentBrowser.js","sourceRoot":"","sources":["../src/agentBrowser.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -61,7 +61,7 @@ async function main() {
61
61
  program
62
62
  .name('design-brain-memory')
63
63
  .description('Relational markdown design memory powered by Agent Browser CLI')
64
- .version('0.9.2')
64
+ .version('0.9.3')
65
65
  .option('-y, --yes', 'Skip interactive prompts');
66
66
  /* ─── scan (default command) ─── */
67
67
  program
@@ -7,518 +7,313 @@ const DEFAULT_VIEWPORTS = [
7
7
  { label: 'tablet', width: 1024, height: 1366 },
8
8
  { label: 'mobile', width: 390, height: 844 },
9
9
  ];
10
- const EXTRACTION_SCRIPT = String.raw `(() => {
11
- const maxNodes = 2000;
12
- const nodes = Array.from(document.querySelectorAll('body *')).slice(0, maxNodes);
13
-
14
- const colorMap = new Map();
15
- const typographyMap = new Map();
16
- const componentList = [];
17
- const motionList = [];
18
- const layoutList = [];
19
- const variableMap = {};
20
- const stateStyleList = [];
21
-
22
- const componentTags = new Set(['button', 'a', 'input', 'select', 'textarea', 'nav', 'header', 'footer', 'form']);
23
- const maxComponents = 220;
24
- const maxMotion = 220;
25
- const maxStateStyles = 260;
26
-
27
- function normalizeWhitespace(text) {
28
- return (text || '').replace(/\s+/g, ' ').trim();
29
- }
30
-
31
- function pushColor(value, sample) {
32
- if (!value || value === 'transparent' || value === 'rgba(0, 0, 0, 0)') {
33
- return;
34
- }
35
-
36
- const parsed = parseCssColor(value);
37
- if (!parsed) {
38
- return;
39
- }
40
-
41
- const key = parsed.toUpperCase();
42
- const entry = colorMap.get(key) || { hex: key, count: 0, samples: [] };
43
- entry.count += 1;
44
- if (sample && entry.samples.length < 5 && !entry.samples.includes(sample)) {
45
- entry.samples.push(sample);
10
+ // ---------------------------------------------------------------------------
11
+ // UNIFIED_SCRIPT: single eval that extracts design tokens, scrolls the page
12
+ // to trigger lazy-loaded animations, observes animations, and returns
13
+ // everything in one shot. This replaces 3 separate scripts + a scroll loop
14
+ // that used to spawn 40-70 child processes.
15
+ // ---------------------------------------------------------------------------
16
+ const UNIFIED_SCRIPT = String.raw `(async () => {
17
+ /* ── Shared helpers ── */
18
+ function buildSelector(el) {
19
+ if (!el || !el.tagName) return 'unknown';
20
+ var tag = el.tagName.toLowerCase();
21
+ if (el.id) return tag + '#' + el.id;
22
+ if (typeof el.className === 'string' && el.className.trim()) {
23
+ var firstClass = el.className.trim().split(/\s+/).slice(0, 2).join('.');
24
+ if (firstClass) return tag + '.' + firstClass;
46
25
  }
47
- colorMap.set(key, entry);
26
+ return tag;
48
27
  }
49
28
 
50
29
  function parseCssColor(input) {
51
- if (!input) {
52
- return null;
53
- }
54
-
55
- const value = input.toString().trim().toLowerCase();
56
-
30
+ if (!input) return null;
31
+ var value = input.toString().trim().toLowerCase();
57
32
  if (value.startsWith('#')) {
58
- if (value.length === 4) {
59
- return ('#' + value[1] + value[1] + value[2] + value[2] + value[3] + value[3]);
60
- }
61
- if (value.length === 7) {
62
- return value;
63
- }
33
+ if (value.length === 4) return '#' + value[1]+value[1]+value[2]+value[2]+value[3]+value[3];
34
+ if (value.length === 7) return value;
64
35
  return null;
65
36
  }
66
-
67
- const rgbMatch = value.match(/rgba?\(([^)]+)\)/);
68
- if (rgbMatch) {
69
- const parts = rgbMatch[1].split(',').map((part) => part.trim());
70
- const r = Number(parts[0]);
71
- const g = Number(parts[1]);
72
- const b = Number(parts[2]);
73
- if ([r, g, b].some((n) => Number.isNaN(n))) {
74
- return null;
75
- }
76
- const toHex = (n) => Math.max(0, Math.min(255, n)).toString(16).padStart(2, '0');
77
- return '#' + toHex(r) + toHex(g) + toHex(b);
37
+ var m = value.match(/rgba?\(([^)]+)\)/);
38
+ if (m) {
39
+ var parts = m[1].split(',').map(function(p){return p.trim();});
40
+ var r = Number(parts[0]), g = Number(parts[1]), b = Number(parts[2]);
41
+ if ([r,g,b].some(isNaN)) return null;
42
+ var h = function(n){return Math.max(0,Math.min(255,n)).toString(16).padStart(2,'0');};
43
+ return '#'+h(r)+h(g)+h(b);
78
44
  }
79
-
80
45
  return null;
81
46
  }
82
47
 
83
- function buildSelector(el) {
84
- const tag = el.tagName.toLowerCase();
85
- if (el.id) {
86
- return tag + '#' + el.id;
87
- }
88
-
89
- if (typeof el.className === 'string' && el.className.trim()) {
90
- const firstClass = el.className.trim().split(/\s+/).slice(0, 2).join('.');
91
- if (firstClass) {
92
- return tag + '.' + firstClass;
93
- }
94
- }
95
-
96
- return tag;
97
- }
98
-
99
- function addTypography(style) {
100
- const key = [style.fontFamily, style.fontSize, style.fontWeight, style.lineHeight].join('|');
101
- const existing = typographyMap.get(key) || {
102
- fontFamily: style.fontFamily,
103
- fontSize: style.fontSize,
104
- fontWeight: style.fontWeight,
105
- lineHeight: style.lineHeight,
106
- count: 0,
107
- };
108
- existing.count += 1;
109
- typographyMap.set(key, existing);
48
+ function normalizeWhitespace(text) {
49
+ return (text || '').replace(/\s+/g, ' ').trim();
110
50
  }
111
51
 
112
- function shouldCaptureAsComponent(el, selector) {
113
- const tag = el.tagName.toLowerCase();
114
- if (componentTags.has(tag)) {
115
- return true;
116
- }
117
-
118
- const className = typeof el.className === 'string' ? el.className.toLowerCase() : '';
119
- if (className.includes('btn') || className.includes('button') || className.includes('card') || className.includes('hero')) {
120
- return true;
121
- }
122
-
123
- if (el.getAttribute('role') === 'button' || el.getAttribute('role') === 'navigation') {
124
- return true;
125
- }
126
-
127
- return selector.startsWith('section.') || selector.startsWith('div.card');
52
+ function inferComponentKind(el) {
53
+ var tag = el.tagName.toLowerCase();
54
+ var cn = typeof el.className === 'string' ? el.className.toLowerCase() : '';
55
+ if (tag === 'button' || cn.includes('btn')) return 'button';
56
+ if (tag === 'a') return 'link';
57
+ if (tag === 'input' || tag === 'textarea' || tag === 'select') return 'form-control';
58
+ if (tag === 'nav' || cn.includes('nav')) return 'navigation';
59
+ if (cn.includes('card')) return 'card';
60
+ if (tag === 'header') return 'header';
61
+ if (tag === 'footer') return 'footer';
62
+ if (cn.includes('hero')) return 'hero';
63
+ return tag;
128
64
  }
129
65
 
130
- function addPseudoStateStyles() {
131
- const stateKinds = [':hover', ':focus', ':active'];
132
-
133
- for (const sheet of Array.from(document.styleSheets)) {
134
- let rules;
135
- try {
136
- rules = sheet.cssRules;
137
- } catch {
138
- continue;
139
- }
140
-
141
- if (!rules) {
142
- continue;
143
- }
66
+ /* ═══════════════════════════════════════════════
67
+ PHASE 1: Design token extraction
68
+ ═══════════════════════════════════════════════ */
69
+ var maxNodes = 2000;
70
+ var nodes = Array.from(document.querySelectorAll('body *')).slice(0, maxNodes);
144
71
 
145
- for (const rule of Array.from(rules)) {
146
- const selectorText = 'selectorText' in rule ? String(rule.selectorText || '') : '';
147
- const style = 'style' in rule ? rule.style : undefined;
148
- if (!selectorText || !style) {
149
- continue;
150
- }
72
+ var colorMap = new Map();
73
+ var typographyMap = new Map();
74
+ var componentList = [];
75
+ var motionList = [];
76
+ var layoutList = [];
77
+ var variableMap = {};
78
+ var stateStyleList = [];
151
79
 
152
- for (const stateKind of stateKinds) {
153
- if (!selectorText.includes(stateKind)) {
154
- continue;
155
- }
80
+ var componentTags = new Set(['button','a','input','select','textarea','nav','header','footer','form']);
81
+ var maxComponents = 220, maxMotion = 220, maxStateStyles = 260, maxRulesPerSheet = 5000;
156
82
 
157
- const declarations = {};
158
- for (const prop of ['color', 'background-color', 'border-color', 'box-shadow', 'transform', 'transition', 'opacity']) {
159
- const value = style.getPropertyValue(prop);
160
- if (value) {
161
- declarations[prop] = value;
162
- }
163
- }
164
-
165
- if (Object.keys(declarations).length === 0) {
166
- continue;
167
- }
168
-
169
- const cleanSelector = selectorText.split(stateKind).join('').trim();
170
- stateStyleList.push({
171
- selector: cleanSelector || selectorText,
172
- state: stateKind.slice(1),
173
- declarations,
174
- });
175
-
176
- if (stateStyleList.length >= maxStateStyles) {
177
- return;
178
- }
179
- }
180
- }
181
- }
83
+ function pushColor(value, sample) {
84
+ if (!value || value === 'transparent' || value === 'rgba(0, 0, 0, 0)') return;
85
+ var parsed = parseCssColor(value);
86
+ if (!parsed) return;
87
+ var key = parsed.toUpperCase();
88
+ var entry = colorMap.get(key) || { hex: key, count: 0, samples: [] };
89
+ entry.count += 1;
90
+ if (sample && entry.samples.length < 5 && !entry.samples.includes(sample)) entry.samples.push(sample);
91
+ colorMap.set(key, entry);
182
92
  }
183
93
 
184
- nodes.forEach((el) => {
185
- const style = window.getComputedStyle(el);
94
+ nodes.forEach(function(el) {
95
+ var style = window.getComputedStyle(el);
96
+ if (style.display === 'none' || style.visibility === 'hidden' || Number(style.opacity) === 0) return;
186
97
 
187
- if (style.display === 'none' || style.visibility === 'hidden' || Number(style.opacity) === 0) {
188
- return;
189
- }
190
-
191
- const selector = buildSelector(el);
98
+ var selector = buildSelector(el);
192
99
  pushColor(style.color, selector + ':color');
193
100
  pushColor(style.backgroundColor, selector + ':background');
101
+ if (style.borderColor && style.borderColor !== 'rgba(0, 0, 0, 0)') pushColor(style.borderColor, selector + ':border');
194
102
 
195
- if (style.borderColor && style.borderColor !== 'rgba(0, 0, 0, 0)') {
196
- pushColor(style.borderColor, selector + ':border');
197
- }
198
-
199
- const hasText = normalizeWhitespace(el.textContent || '').length > 0;
200
- if (hasText) {
201
- addTypography(style);
103
+ if (normalizeWhitespace(el.textContent || '').length > 0) {
104
+ var tKey = [style.fontFamily, style.fontSize, style.fontWeight, style.lineHeight].join('|');
105
+ var existing = typographyMap.get(tKey) || { fontFamily: style.fontFamily, fontSize: style.fontSize, fontWeight: style.fontWeight, lineHeight: style.lineHeight, count: 0 };
106
+ existing.count += 1;
107
+ typographyMap.set(tKey, existing);
202
108
  }
203
109
 
204
- if (shouldCaptureAsComponent(el, selector) && componentList.length < maxComponents) {
110
+ var tag = el.tagName.toLowerCase();
111
+ var cn = typeof el.className === 'string' ? el.className.toLowerCase() : '';
112
+ var isComponent = componentTags.has(tag) || cn.includes('btn') || cn.includes('button') || cn.includes('card') || cn.includes('hero') || el.getAttribute('role') === 'button' || el.getAttribute('role') === 'navigation' || selector.startsWith('section.') || selector.startsWith('div.card');
113
+ if (isComponent && componentList.length < maxComponents) {
205
114
  componentList.push({
206
- kind: inferComponentKind(el),
207
- tag: el.tagName.toLowerCase(),
208
- selector,
115
+ kind: inferComponentKind(el), tag: tag, selector: selector,
209
116
  text: normalizeWhitespace(el.textContent || '').slice(0, 90),
210
117
  className: typeof el.className === 'string' ? normalizeWhitespace(el.className) : '',
211
- styles: {
212
- color: style.color,
213
- backgroundColor: style.backgroundColor,
214
- borderRadius: style.borderRadius,
215
- border: style.border,
216
- padding: style.padding,
217
- margin: style.margin,
218
- fontSize: style.fontSize,
219
- fontWeight: style.fontWeight,
220
- boxShadow: style.boxShadow,
221
- },
118
+ styles: { color: style.color, backgroundColor: style.backgroundColor, borderRadius: style.borderRadius, border: style.border, padding: style.padding, margin: style.margin, fontSize: style.fontSize, fontWeight: style.fontWeight, boxShadow: style.boxShadow },
222
119
  });
223
120
  }
224
121
 
225
- const hasTransition = style.transitionDuration && style.transitionDuration !== '0s';
226
- const hasAnimation = style.animationName && style.animationName !== 'none';
227
- const hasTransform = style.transform && style.transform !== 'none';
228
-
122
+ var hasTransition = style.transitionDuration && style.transitionDuration !== '0s';
123
+ var hasAnimation = style.animationName && style.animationName !== 'none';
124
+ var hasTransform = style.transform && style.transform !== 'none';
229
125
  if ((hasTransition || hasAnimation || hasTransform) && motionList.length < maxMotion) {
230
- motionList.push({
231
- selector,
232
- transition: style.transition,
233
- animation: style.animation,
234
- transform: style.transform,
235
- });
126
+ motionList.push({ selector: selector, transition: style.transition, animation: style.animation, transform: style.transform });
236
127
  }
237
128
  });
238
129
 
239
- const layoutSelectors = Array.from(document.querySelectorAll('header, nav, main, section, article, aside, footer')).slice(0, 160);
240
-
241
- layoutSelectors.forEach((el) => {
242
- layoutList.push({
243
- tag: el.tagName.toLowerCase(),
244
- selector: buildSelector(el),
245
- role: el.getAttribute('role') || '',
246
- children: el.children.length,
247
- });
130
+ Array.from(document.querySelectorAll('header, nav, main, section, article, aside, footer')).slice(0, 160).forEach(function(el) {
131
+ layoutList.push({ tag: el.tagName.toLowerCase(), selector: buildSelector(el), role: el.getAttribute('role') || '', children: el.children.length });
248
132
  });
249
133
 
250
- [document.documentElement, document.body].forEach((root) => {
251
- if (!root) {
252
- return;
253
- }
254
-
255
- const style = window.getComputedStyle(root);
256
- for (const propertyName of style) {
257
- if (!propertyName.startsWith('--')) {
258
- continue;
259
- }
260
- const value = style.getPropertyValue(propertyName).trim();
261
- if (value) {
262
- variableMap[propertyName] = value;
263
- }
134
+ [document.documentElement, document.body].forEach(function(root) {
135
+ if (!root) return;
136
+ var style = window.getComputedStyle(root);
137
+ for (var prop of style) {
138
+ if (!prop.startsWith('--')) continue;
139
+ var val = style.getPropertyValue(prop).trim();
140
+ if (val) variableMap[prop] = val;
264
141
  }
265
142
  });
266
143
 
267
- function inferComponentKind(el) {
268
- const tag = el.tagName.toLowerCase();
269
- const className = typeof el.className === 'string' ? el.className.toLowerCase() : '';
270
- if (tag === 'button' || className.includes('btn')) {
271
- return 'button';
272
- }
273
- if (tag === 'a') {
274
- return 'link';
275
- }
276
- if (tag === 'input' || tag === 'textarea' || tag === 'select') {
277
- return 'form-control';
278
- }
279
- if (tag === 'nav' || className.includes('nav')) {
280
- return 'navigation';
281
- }
282
- if (className.includes('card')) {
283
- return 'card';
284
- }
285
- if (tag === 'header') {
286
- return 'header';
287
- }
288
- if (tag === 'footer') {
289
- return 'footer';
290
- }
291
- if (className.includes('hero')) {
292
- return 'hero';
144
+ // Pseudo-state styles from stylesheets
145
+ try {
146
+ var stateKinds = [':hover', ':focus', ':active'];
147
+ for (var sheet of Array.from(document.styleSheets)) {
148
+ var rules;
149
+ try { rules = sheet.cssRules; } catch(e) { continue; }
150
+ if (!rules) continue;
151
+ var rc = Math.min(rules.length, maxRulesPerSheet);
152
+ for (var ri = 0; ri < rc; ri++) {
153
+ var rule = rules[ri];
154
+ var st = 'selectorText' in rule ? String(rule.selectorText || '') : '';
155
+ var rs = 'style' in rule ? rule.style : undefined;
156
+ if (!st || !rs) continue;
157
+ for (var sk of stateKinds) {
158
+ if (!st.includes(sk)) continue;
159
+ var decl = {};
160
+ for (var dp of ['color','background-color','border-color','box-shadow','transform','transition','opacity']) {
161
+ var dv = rs.getPropertyValue(dp);
162
+ if (dv) decl[dp] = dv;
163
+ }
164
+ if (Object.keys(decl).length === 0) continue;
165
+ stateStyleList.push({ selector: st.split(sk).join('').trim() || st, state: sk.slice(1), declarations: decl });
166
+ if (stateStyleList.length >= maxStateStyles) break;
167
+ }
168
+ if (stateStyleList.length >= maxStateStyles) break;
169
+ }
170
+ if (stateStyleList.length >= maxStateStyles) break;
293
171
  }
294
- return tag;
295
- }
296
-
297
- addPseudoStateStyles();
298
-
299
- const colors = Array.from(colorMap.values()).sort((a, b) => b.count - a.count).slice(0, 70);
300
- const typography = Array.from(typographyMap.values()).sort((a, b) => b.count - a.count).slice(0, 90);
172
+ } catch(e) {}
301
173
 
302
- return {
174
+ var designTokens = {
303
175
  pageTitle: document.title,
304
176
  pageUrl: window.location.href,
305
- viewport: {
306
- width: window.innerWidth,
307
- height: window.innerHeight,
308
- },
309
- colors,
310
- typography,
177
+ viewport: { width: window.innerWidth, height: window.innerHeight },
178
+ colors: Array.from(colorMap.values()).sort(function(a,b){return b.count-a.count;}).slice(0, 70),
179
+ typography: Array.from(typographyMap.values()).sort(function(a,b){return b.count-a.count;}).slice(0, 90),
311
180
  components: componentList,
312
181
  motion: motionList,
313
182
  layout: layoutList,
314
183
  cssVariables: variableMap,
315
184
  stateStyles: stateStyleList,
316
185
  };
317
- })();`;
318
- const PAGE_SUMMARY_SCRIPT = String.raw `(() => {
319
- const h1 = document.querySelector('h1')?.textContent?.trim() || '';
320
- const navCount = document.querySelectorAll('nav a, header a').length;
321
- const ctaCount = document.querySelectorAll('button, a[role="button"], .btn, .button').length;
322
- return {
323
- title: document.title,
324
- url: window.location.href,
325
- summary: [h1, 'nav-links:' + navCount, 'ctas:' + ctaCount].filter(Boolean).join(' | '),
326
- };
327
- })();`;
328
- const ANIMATION_OBSERVER_SCRIPT = String.raw `(() => {
329
- const maxAnimations = 200;
330
- const result = {
186
+
187
+ /* ═══════════════════════════════════════════════
188
+ PHASE 2: Scroll through the page (in-browser)
189
+ Triggers lazy-loaded GSAP, ScrollTrigger, etc.
190
+ ═══════════════════════════════════════════════ */
191
+ try {
192
+ var height = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
193
+ var vh = window.innerHeight;
194
+ var scrollSteps = Math.min(Math.ceil(height / vh), 12);
195
+ var stepSize = Math.ceil(height / scrollSteps);
196
+ for (var si = 1; si <= scrollSteps; si++) {
197
+ window.scrollTo({ top: si * stepSize, behavior: 'instant' });
198
+ await new Promise(function(r) { setTimeout(r, 150); });
199
+ }
200
+ window.scrollTo({ top: 0, behavior: 'instant' });
201
+ await new Promise(function(r) { setTimeout(r, 800); });
202
+ } catch(e) {}
203
+
204
+ /* ═══════════════════════════════════════════════
205
+ PHASE 3: Animation observation (post-scroll)
206
+ ═══════════════════════════════════════════════ */
207
+ var animResult = {
331
208
  libraries: [],
332
209
  webAnimations: [],
333
210
  gsapTweens: [],
334
211
  lottiePlayers: [],
335
- scrollBindings: {
336
- hasScrollTrigger: false,
337
- hasIntersectionObserver: false,
338
- scrollTriggers: [],
339
- hasScrollSnap: false,
340
- hasScrollTimeline: false,
341
- },
212
+ scrollBindings: { hasScrollTrigger: false, hasIntersectionObserver: false, scrollTriggers: [], hasScrollSnap: false, hasScrollTimeline: false },
342
213
  };
214
+ var maxAnims = 200;
343
215
 
344
- function buildSelector(el) {
345
- if (!el || !el.tagName) return 'unknown';
346
- const tag = el.tagName.toLowerCase();
347
- if (el.id) return tag + '#' + el.id;
348
- if (typeof el.className === 'string' && el.className.trim()) {
349
- const firstClass = el.className.trim().split(/\s+/).slice(0, 2).join('.');
350
- if (firstClass) return tag + '.' + firstClass;
351
- }
352
- return tag;
353
- }
354
-
355
- /* Layer 1: Library Detection */
356
216
  try {
357
- if (typeof gsap !== 'undefined') {
358
- result.libraries.push({ name: 'gsap', version: typeof gsap.version === 'string' ? gsap.version : 'unknown' });
359
- }
360
- if (typeof ScrollTrigger !== 'undefined') {
361
- result.libraries.push({ name: 'scrolltrigger', version: 'detected' });
362
- result.scrollBindings.hasScrollTrigger = true;
363
- }
364
- if (typeof lottie !== 'undefined' || typeof bodymovin !== 'undefined') {
365
- result.libraries.push({ name: 'lottie', version: 'detected' });
366
- }
367
- if (document.querySelector('lottie-player, dotlottie-player')) {
368
- if (!result.libraries.some(function(l) { return l.name === 'lottie'; })) {
369
- result.libraries.push({ name: 'lottie', version: 'web-component' });
370
- }
371
- }
372
- if (document.querySelector('[data-framer-name], [data-framer-component-type]')) {
373
- result.libraries.push({ name: 'framer-motion', version: 'detected' });
374
- }
217
+ if (typeof gsap !== 'undefined') animResult.libraries.push({ name: 'gsap', version: typeof gsap.version === 'string' ? gsap.version : 'unknown' });
218
+ if (typeof ScrollTrigger !== 'undefined') { animResult.libraries.push({ name: 'scrolltrigger', version: 'detected' }); animResult.scrollBindings.hasScrollTrigger = true; }
219
+ if (typeof lottie !== 'undefined' || typeof bodymovin !== 'undefined') animResult.libraries.push({ name: 'lottie', version: 'detected' });
220
+ if (document.querySelector('lottie-player, dotlottie-player') && !animResult.libraries.some(function(l){return l.name==='lottie';})) animResult.libraries.push({ name: 'lottie', version: 'web-component' });
221
+ if (document.querySelector('[data-framer-name], [data-framer-component-type]')) animResult.libraries.push({ name: 'framer-motion', version: 'detected' });
375
222
  } catch(e) {}
376
223
 
377
- /* Layer 2: Web Animations API */
378
224
  try {
379
- var animations = document.getAnimations();
380
- for (var ai = 0; ai < Math.min(animations.length, maxAnimations); ai++) {
381
- var anim = animations[ai];
225
+ var anims = document.getAnimations();
226
+ for (var ai = 0; ai < Math.min(anims.length, maxAnims); ai++) {
227
+ var anim = anims[ai];
382
228
  var effect = anim.effect;
383
229
  if (!effect || !effect.target) continue;
384
-
385
- var target = effect.target;
386
- var selector = buildSelector(target);
387
-
388
- var keyframes = [];
389
- try { keyframes = effect.getKeyframes(); } catch(e) {}
390
-
391
- var computedTiming = {};
392
- try { computedTiming = effect.getComputedTiming(); } catch(e) {}
393
-
394
- var timelineType = 'document';
395
- try {
396
- if (anim.timeline && anim.timeline.constructor) {
397
- var tlName = anim.timeline.constructor.name;
398
- if (tlName === 'ScrollTimeline') timelineType = 'scroll';
399
- else if (tlName === 'ViewTimeline') timelineType = 'view';
400
- }
401
- } catch(e) {}
402
-
403
- if (timelineType !== 'document') {
404
- result.scrollBindings.hasScrollTimeline = true;
405
- }
406
-
407
- result.webAnimations.push({
408
- selector: selector,
409
- playState: anim.playState,
410
- animationName: anim.animationName || anim.id || '',
411
- keyframes: keyframes.map(function(kf) {
230
+ var sel = buildSelector(effect.target);
231
+ var kfs = []; try { kfs = effect.getKeyframes(); } catch(e) {}
232
+ var ct = {}; try { ct = effect.getComputedTiming(); } catch(e) {}
233
+ var tlt = 'document';
234
+ try { if (anim.timeline && anim.timeline.constructor) { var tn = anim.timeline.constructor.name; if (tn === 'ScrollTimeline') tlt = 'scroll'; else if (tn === 'ViewTimeline') tlt = 'view'; } } catch(e) {}
235
+ if (tlt !== 'document') animResult.scrollBindings.hasScrollTimeline = true;
236
+ animResult.webAnimations.push({
237
+ selector: sel, playState: anim.playState, animationName: anim.animationName || anim.id || '',
238
+ keyframes: kfs.map(function(kf) {
412
239
  var props = {};
413
- for (var k in kf) {
414
- if (k !== 'offset' && k !== 'computedOffset' && k !== 'easing' && k !== 'composite') {
415
- props[k] = String(kf[k]);
416
- }
417
- }
418
- return {
419
- offset: kf.computedOffset != null ? kf.computedOffset : (kf.offset || 0),
420
- properties: props,
421
- easing: kf.easing || 'linear',
422
- };
240
+ for (var k in kf) { if (k !== 'offset' && k !== 'computedOffset' && k !== 'easing' && k !== 'composite') props[k] = String(kf[k]); }
241
+ return { offset: kf.computedOffset != null ? kf.computedOffset : (kf.offset || 0), properties: props, easing: kf.easing || 'linear' };
423
242
  }),
424
- timing: {
425
- duration: typeof computedTiming.duration === 'number' ? computedTiming.duration : 0,
426
- delay: computedTiming.delay || 0,
427
- easing: computedTiming.easing || 'linear',
428
- iterations: computedTiming.iterations != null ? computedTiming.iterations : 1,
429
- direction: computedTiming.direction || 'normal',
430
- fillMode: computedTiming.fill || 'none',
431
- },
432
- timelineType: timelineType,
243
+ timing: { duration: typeof ct.duration === 'number' ? ct.duration : 0, delay: ct.delay || 0, easing: ct.easing || 'linear', iterations: ct.iterations != null ? ct.iterations : 1, direction: ct.direction || 'normal', fillMode: ct.fill || 'none' },
244
+ timelineType: tlt,
433
245
  });
434
246
  }
435
247
  } catch(e) {}
436
248
 
437
- /* Layer 3: GSAP Introspection */
438
249
  try {
439
250
  if (typeof gsap !== 'undefined' && gsap.globalTimeline) {
440
251
  var children = gsap.globalTimeline.getChildren(true, true, false);
441
- for (var gi = 0; gi < Math.min(children.length, maxAnimations); gi++) {
442
- var tween = children[gi];
443
- var targets = tween.targets ? tween.targets() : [];
252
+ for (var gi = 0; gi < Math.min(children.length, maxAnims); gi++) {
253
+ var tw = children[gi];
254
+ var targets = tw.targets ? tw.targets() : [];
444
255
  if (targets.length === 0) continue;
445
-
446
- var gsSelector = buildSelector(targets[0]);
447
256
  var vars = {};
448
- if (tween.vars) {
449
- for (var vk in tween.vars) {
450
- var vv = tween.vars[vk];
451
- if (typeof vv === 'number' || typeof vv === 'string') {
452
- vars[vk] = vv;
453
- }
454
- }
455
- }
456
-
457
- result.gsapTweens.push({
458
- selector: gsSelector,
459
- duration: typeof tween.duration === 'function' ? tween.duration() : 0,
460
- delay: typeof tween.delay === 'function' ? tween.delay() : 0,
461
- ease: tween.vars && tween.vars.ease ? tween.vars.ease : 'power1.out',
257
+ if (tw.vars) { for (var vk in tw.vars) { var vv = tw.vars[vk]; if (typeof vv === 'number' || typeof vv === 'string') vars[vk] = vv; } }
258
+ animResult.gsapTweens.push({
259
+ selector: buildSelector(targets[0]),
260
+ duration: typeof tw.duration === 'function' ? tw.duration() : 0,
261
+ delay: typeof tw.delay === 'function' ? tw.delay() : 0,
262
+ ease: tw.vars && tw.vars.ease ? tw.vars.ease : 'power1.out',
462
263
  vars: vars,
463
- startTime: typeof tween.startTime === 'function' ? tween.startTime() : 0,
264
+ startTime: typeof tw.startTime === 'function' ? tw.startTime() : 0,
464
265
  });
465
266
  }
466
267
  }
467
268
  } catch(e) {}
468
269
 
469
- /* Layer 4: Lottie Extraction */
470
270
  try {
471
- var lottieRef = (typeof lottie !== 'undefined') ? lottie : ((typeof bodymovin !== 'undefined') ? bodymovin : null);
472
- if (lottieRef && typeof lottieRef.getRegisteredAnimations === 'function') {
473
- var registered = lottieRef.getRegisteredAnimations();
474
- for (var li = 0; li < Math.min(registered.length, 20); li++) {
475
- var la = registered[li];
476
- var container = la.wrapper || la.container;
477
- result.lottiePlayers.push({
478
- selector: container ? buildSelector(container) : 'lottie-unknown',
479
- frameRate: la.frameRate || (la.animationData && la.animationData.fr) || 0,
480
- totalFrames: la.totalFrames || (la.animationData && la.animationData.op) || 0,
481
- duration: typeof la.getDuration === 'function' ? la.getDuration(false) : 0,
482
- });
271
+ var lr = (typeof lottie !== 'undefined') ? lottie : ((typeof bodymovin !== 'undefined') ? bodymovin : null);
272
+ if (lr && typeof lr.getRegisteredAnimations === 'function') {
273
+ var regs = lr.getRegisteredAnimations();
274
+ for (var li = 0; li < Math.min(regs.length, 20); li++) {
275
+ var la = regs[li]; var c = la.wrapper || la.container;
276
+ animResult.lottiePlayers.push({ selector: c ? buildSelector(c) : 'lottie-unknown', frameRate: la.frameRate || (la.animationData && la.animationData.fr) || 0, totalFrames: la.totalFrames || (la.animationData && la.animationData.op) || 0, duration: typeof la.getDuration === 'function' ? la.getDuration(false) : 0 });
483
277
  }
484
278
  }
485
-
486
- var players = document.querySelectorAll('lottie-player, dotlottie-player');
487
- for (var pi = 0; pi < Math.min(players.length, 20); pi++) {
488
- var pSelector = buildSelector(players[pi]);
489
- if (!result.lottiePlayers.some(function(l) { return l.selector === pSelector; })) {
490
- result.lottiePlayers.push({ selector: pSelector, frameRate: 0, totalFrames: 0, duration: 0 });
491
- }
279
+ var ps = document.querySelectorAll('lottie-player, dotlottie-player');
280
+ for (var pi = 0; pi < Math.min(ps.length, 20); pi++) {
281
+ var pSel = buildSelector(ps[pi]);
282
+ if (!animResult.lottiePlayers.some(function(l){return l.selector === pSel;})) animResult.lottiePlayers.push({ selector: pSel, frameRate: 0, totalFrames: 0, duration: 0 });
492
283
  }
493
284
  } catch(e) {}
494
285
 
495
- /* Layer 5: Passive Scroll Detection */
496
286
  try {
497
287
  if (typeof ScrollTrigger !== 'undefined' && typeof ScrollTrigger.getAll === 'function') {
498
- var triggers = ScrollTrigger.getAll();
499
- for (var si = 0; si < Math.min(triggers.length, 50); si++) {
500
- var st = triggers[si];
501
- result.scrollBindings.scrollTriggers.push({
502
- triggerSelector: st.trigger ? buildSelector(st.trigger) : '',
503
- isActive: !!st.isActive,
504
- });
288
+ var trigs = ScrollTrigger.getAll();
289
+ for (var ti = 0; ti < Math.min(trigs.length, 50); ti++) {
290
+ var tr = trigs[ti];
291
+ animResult.scrollBindings.scrollTriggers.push({ triggerSelector: tr.trigger ? buildSelector(tr.trigger) : '', isActive: !!tr.isActive });
505
292
  }
506
293
  }
507
294
  } catch(e) {}
508
295
 
509
296
  try {
510
- var scrollSnap = window.getComputedStyle(document.documentElement).scrollSnapType;
511
- if (scrollSnap && scrollSnap !== 'none') {
512
- result.scrollBindings.hasScrollSnap = true;
513
- }
297
+ var snap = window.getComputedStyle(document.documentElement).scrollSnapType;
298
+ if (snap && snap !== 'none') animResult.scrollBindings.hasScrollSnap = true;
514
299
  } catch(e) {}
515
300
 
516
- return result;
517
- })();`;
301
+ /* ═══════════════════════════════════════════════
302
+ PHASE 4: Page summary (for journey context)
303
+ ═══════════════════════════════════════════════ */
304
+ var h1 = ''; try { h1 = (document.querySelector('h1') || {}).textContent || ''; h1 = h1.trim(); } catch(e) {}
305
+ var navCount = 0; try { navCount = document.querySelectorAll('nav a, header a').length; } catch(e) {}
306
+ var ctaCount = 0; try { ctaCount = document.querySelectorAll('button, a[role="button"], .btn, .button').length; } catch(e) {}
307
+
308
+ return {
309
+ designTokens: designTokens,
310
+ animations: animResult,
311
+ pageSummary: { title: document.title, url: window.location.href, summary: [h1, 'nav-links:' + navCount, 'ctas:' + ctaCount].filter(Boolean).join(' | ') },
312
+ };
313
+ })()`;
518
314
  function convertObserverResult(raw) {
519
315
  const tokens = [];
520
316
  const libraryNames = new Set(raw.libraries.map((l) => l.name));
521
- // Convert Web Animations API results
522
317
  for (const wa of raw.webAnimations) {
523
318
  const intent = classifyMotionIntent(wa.keyframes);
524
319
  let library = 'css';
@@ -547,7 +342,6 @@ function convertObserverResult(raw) {
547
342
  scrollTimelineAxis: 'block',
548
343
  };
549
344
  }
550
- // Detect physics from keyframes
551
345
  const allProps = new Set();
552
346
  for (const kf of wa.keyframes) {
553
347
  for (const prop of Object.keys(kf.properties))
@@ -565,7 +359,6 @@ function convertObserverResult(raw) {
565
359
  }
566
360
  tokens.push(token);
567
361
  }
568
- // Convert GSAP tweens
569
362
  for (const tween of raw.gsapTweens) {
570
363
  const token = {
571
364
  selector: tween.selector,
@@ -615,7 +408,6 @@ function convertObserverResult(raw) {
615
408
  }
616
409
  tokens.push(token);
617
410
  }
618
- // Convert Lottie players
619
411
  for (const lp of raw.lottiePlayers) {
620
412
  tokens.push({
621
413
  selector: lp.selector,
@@ -723,59 +515,6 @@ function mergeAnalysis(all) {
723
515
  stateStyles: [...stateMap.values()].slice(0, 300),
724
516
  };
725
517
  }
726
- function parseStylesFromGetStyles(data) {
727
- const payload = data;
728
- const first = payload.elements?.[0];
729
- const styles = first?.styles ?? {};
730
- const out = {};
731
- for (const [key, value] of Object.entries(styles)) {
732
- if (typeof value === 'string' && value.trim()) {
733
- out[key] = value;
734
- }
735
- }
736
- return out;
737
- }
738
- async function collectInteractiveStateStyles(params) {
739
- const states = [];
740
- const snapshot = await runAgentBrowserJson(['snapshot', '-i', '-d', '2'], {
741
- session: params.sessionName,
742
- cwd: params.workingDir,
743
- });
744
- const refs = (snapshot.data.refs ?? {});
745
- const refIds = Object.keys(refs).slice(0, 8);
746
- for (const refId of refIds) {
747
- const ref = `@${refId}`;
748
- await runAgentBrowserJson(['hover', ref], {
749
- session: params.sessionName,
750
- cwd: params.workingDir,
751
- }).catch(() => undefined);
752
- const hoverStyles = await runAgentBrowserJson(['get', 'styles', ref], {
753
- session: params.sessionName,
754
- cwd: params.workingDir,
755
- }).catch(() => undefined);
756
- if (hoverStyles?.success) {
757
- const declarations = parseStylesFromGetStyles(hoverStyles.data);
758
- if (Object.keys(declarations).length > 0) {
759
- states.push({ selector: ref, state: 'hover', declarations });
760
- }
761
- }
762
- await runAgentBrowserJson(['focus', ref], {
763
- session: params.sessionName,
764
- cwd: params.workingDir,
765
- }).catch(() => undefined);
766
- const focusStyles = await runAgentBrowserJson(['get', 'styles', ref], {
767
- session: params.sessionName,
768
- cwd: params.workingDir,
769
- }).catch(() => undefined);
770
- if (focusStyles?.success) {
771
- const declarations = parseStylesFromGetStyles(focusStyles.data);
772
- if (Object.keys(declarations).length > 0) {
773
- states.push({ selector: ref, state: 'focus', declarations });
774
- }
775
- }
776
- }
777
- return states;
778
- }
779
518
  function toResponsiveSnapshot(label, analysis) {
780
519
  return {
781
520
  label,
@@ -787,153 +526,69 @@ function toResponsiveSnapshot(label, analysis) {
787
526
  typographyCount: analysis.typography.length,
788
527
  };
789
528
  }
790
- async function getCurrentUrl(params) {
791
- const response = await runAgentBrowserJson(['get', 'url'], {
792
- session: params.sessionName,
793
- cwd: params.workingDir,
794
- }).catch(() => undefined);
795
- return response?.success ? response.data.url : undefined;
796
- }
797
- async function collectJourney(params) {
798
- const steps = [];
799
- if (params.maxSteps <= 0) {
800
- return steps;
801
- }
802
- const snapshot = await runAgentBrowserJson(['snapshot', '-i', '-d', '2'], {
803
- session: params.sessionName,
804
- cwd: params.workingDir,
805
- });
806
- const refs = (snapshot.data.refs ?? {});
807
- const clickable = Object.entries(refs)
808
- .filter(([, value]) => ['link', 'button', 'menuitem', 'tab'].includes(String(value?.role ?? '')))
809
- .slice(0, params.maxSteps);
810
- for (let i = 0; i < clickable.length; i += 1) {
811
- const [refId] = clickable[i];
812
- const ref = `@${refId}`;
813
- const fromUrl = await getCurrentUrl(params);
814
- const clickResult = await runAgentBrowserJson(['click', ref], {
815
- session: params.sessionName,
816
- cwd: params.workingDir,
817
- }).catch(() => undefined);
818
- if (!clickResult?.success) {
819
- continue;
820
- }
821
- await runAgentBrowserJson(['wait', '1200'], {
822
- session: params.sessionName,
823
- cwd: params.workingDir,
824
- }).catch(() => undefined);
825
- const summaryResult = await runAgentBrowserJson(['eval', PAGE_SUMMARY_SCRIPT], {
826
- session: params.sessionName,
827
- cwd: params.workingDir,
828
- }).catch(() => undefined);
829
- const summaryData = summaryResult?.data.result ?? {};
830
- const toUrl = summaryData.url ?? (await getCurrentUrl(params));
831
- if (toUrl && fromUrl && toUrl !== fromUrl) {
832
- steps.push({
833
- step: i + 1,
834
- action: `click ${ref}`,
835
- fromUrl,
836
- toUrl,
837
- title: summaryData.title,
838
- summary: summaryData.summary,
839
- });
840
- await runAgentBrowserJson(['back'], {
841
- session: params.sessionName,
842
- cwd: params.workingDir,
843
- }).catch(() => undefined);
844
- await runAgentBrowserJson(['wait', '900'], {
845
- session: params.sessionName,
846
- cwd: params.workingDir,
847
- }).catch(() => undefined);
848
- }
849
- }
850
- return steps;
851
- }
529
+ // ---------------------------------------------------------------------------
530
+ // captureDesignFromUrl the main entry point.
531
+ //
532
+ // Old version: 70-90 child process spawns per URL.
533
+ // New version: ~7 spawns: open, wait, set viewport, eval, snapshot, screenshot, close.
534
+ // ---------------------------------------------------------------------------
852
535
  export async function captureDesignFromUrl(params) {
853
- const { url, sessionName, screenshotPath, workingDir, journeySteps = 3, responsiveViewports = DEFAULT_VIEWPORTS, } = params;
536
+ const { url, sessionName, screenshotPath, workingDir, responsiveViewports = DEFAULT_VIEWPORTS, } = params;
854
537
  await fs.ensureDir(path.dirname(screenshotPath));
538
+ // 1. Open the URL
855
539
  await runAgentBrowserJson(['open', url], { session: sessionName, cwd: workingDir });
540
+ // 2. Wait for page to fully load (networkidle = no requests for 500ms).
541
+ // Falls back gracefully if the site has persistent connections (analytics, chat, etc.)
542
+ await runAgentBrowserJson(['wait', '--load', 'networkidle'], {
543
+ session: sessionName,
544
+ cwd: workingDir,
545
+ timeoutMs: 30_000,
546
+ }).catch(() => { });
856
547
  try {
857
548
  const captures = [];
858
549
  const responsiveSnapshots = [];
550
+ let animationTokens = [];
551
+ // 3. For each viewport: set size → run unified extraction (tokens + scroll + animations)
859
552
  for (const viewport of responsiveViewports) {
860
- await runAgentBrowserJson(['set', 'viewport', String(viewport.width), String(viewport.height)], {
553
+ await runAgentBrowserJson(['set', 'viewport', String(viewport.width), String(viewport.height)], { session: sessionName, cwd: workingDir });
554
+ const result = await runAgentBrowserJson(['eval', UNIFIED_SCRIPT], {
861
555
  session: sessionName,
862
556
  cwd: workingDir,
557
+ timeoutMs: 45_000,
863
558
  });
864
- await runAgentBrowserJson(['wait', '900'], {
865
- session: sessionName,
866
- cwd: workingDir,
867
- });
868
- const extraction = await runAgentBrowserJson(['eval', EXTRACTION_SCRIPT], {
869
- session: sessionName,
870
- cwd: workingDir,
871
- });
872
- if (!extraction.success) {
873
- throw new Error(`Extraction failed: ${extraction.error ?? 'Unknown error'}`);
559
+ if (!result.success) {
560
+ throw new Error(`Extraction failed: ${result.error ?? 'Unknown error'}`);
874
561
  }
875
- const normalized = normalizeResult(extraction.data.result ?? {});
562
+ const unified = result.data.result;
563
+ if (!unified) {
564
+ throw new Error('Extraction returned empty result');
565
+ }
566
+ const normalized = normalizeResult(unified.designTokens);
876
567
  captures.push(normalized);
877
568
  responsiveSnapshots.push(toResponsiveSnapshot(viewport.label, normalized));
878
- }
879
- await runAgentBrowserJson(['set', 'viewport', '1440', '1200'], {
880
- session: sessionName,
881
- cwd: workingDir,
882
- }).catch(() => undefined);
883
- // Scroll through the page to trigger lazy-loaded animation libraries (GSAP, ScrollTrigger, etc.)
884
- try {
885
- const pageInfo = await runAgentBrowserJson(['eval',
886
- `({ height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight), vh: window.innerHeight })`
887
- ], { session: sessionName, cwd: workingDir });
888
- const { height = 5000, vh = 800 } = pageInfo.data.result ?? {};
889
- const scrollSteps = Math.min(Math.ceil(height / vh), 15);
890
- const stepSize = Math.ceil(height / scrollSteps);
891
- for (let i = 1; i <= scrollSteps; i++) {
892
- await runAgentBrowserJson(['eval', `window.scrollTo({top:${i * stepSize},behavior:"instant"});true`], { session: sessionName, cwd: workingDir });
893
- await runAgentBrowserJson(['wait', '200'], { session: sessionName, cwd: workingDir });
894
- }
895
- await runAgentBrowserJson(['eval', 'window.scrollTo({top:0,behavior:"instant"});true'], { session: sessionName, cwd: workingDir });
896
- await runAgentBrowserJson(['wait', '1500'], { session: sessionName, cwd: workingDir });
897
- }
898
- catch {
899
- // Scroll is best-effort; continue to animation capture
900
- }
901
- // Run animation observer script (once, at desktop viewport)
902
- let animationTokens = [];
903
- try {
904
- const animResult = await runAgentBrowserJson(['eval', ANIMATION_OBSERVER_SCRIPT], {
905
- session: sessionName,
906
- cwd: workingDir,
907
- });
908
- if (animResult.success && animResult.data.result) {
909
- const rawAnimData = animResult.data.result;
910
- animationTokens = convertObserverResult(rawAnimData);
911
- animationTokens = detectAnimationGroups(animationTokens);
569
+ // Only process animations from the first (desktop) viewport
570
+ if (animationTokens.length === 0 && unified.animations) {
571
+ try {
572
+ animationTokens = convertObserverResult(unified.animations);
573
+ animationTokens = detectAnimationGroups(animationTokens);
574
+ }
575
+ catch {
576
+ // Animation conversion is best-effort
577
+ }
912
578
  }
913
579
  }
914
- catch {
915
- // Animation capture is best-effort; don't fail the whole extraction
916
- }
580
+ // 4. Get accessibility snapshot
917
581
  const snapshotResult = await runAgentBrowserJson(['snapshot', '-c', '-d', '3'], {
918
582
  session: sessionName,
919
583
  cwd: workingDir,
920
584
  });
921
- const interactiveStates = await collectInteractiveStateStyles({
922
- sessionName,
923
- workingDir,
924
- });
925
- const journey = await collectJourney({
926
- sessionName,
927
- workingDir,
928
- maxSteps: journeySteps,
929
- });
585
+ // 5. Take full-page screenshot
930
586
  await runAgentBrowserJson(['screenshot', screenshotPath, '--full'], {
931
587
  session: sessionName,
932
588
  cwd: workingDir,
933
589
  });
590
+ // 6. Merge results
934
591
  const merged = mergeAnalysis(captures);
935
- const stateStyles = [...(merged.stateStyles ?? []), ...interactiveStates].slice(0, 400);
936
- // Merge: prefer new AnimationTokens, fall back to legacy MotionTokens
937
592
  const mergedMotion = [
938
593
  ...animationTokens,
939
594
  ...merged.motion.filter((legacyToken) => !animationTokens.some((at) => at.selector === legacyToken.selector)),
@@ -943,12 +598,12 @@ export async function captureDesignFromUrl(params) {
943
598
  motion: mergedMotion,
944
599
  accessibilitySnapshot: snapshotResult.data.snapshot ?? undefined,
945
600
  responsiveSnapshots,
946
- stateStyles,
947
- journey,
601
+ stateStyles: merged.stateStyles ?? [],
948
602
  };
949
603
  }
950
604
  finally {
951
- await runAgentBrowserJson(['close'], { session: sessionName, cwd: workingDir }).catch(() => undefined);
605
+ // 7. Always close the browser session
606
+ await runAgentBrowserJson(['close'], { session: sessionName, cwd: workingDir }).catch(() => { });
952
607
  }
953
608
  }
954
609
  //# sourceMappingURL=extractFromUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extractFromUrl.js","sourceRoot":"","sources":["../src/extractFromUrl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractFromUrl.js","sourceRoot":"","sources":["../src/extractFromUrl.ts"],"names":[],"mappings":"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"}
@@ -64,8 +64,8 @@ export function renderScanResults(result) {
64
64
  // Header box
65
65
  console.log(topBorder());
66
66
  console.log(emptyBoxLine());
67
- const title = `${BOLD}${CYAN}design-brain${RESET} v0.9.2`;
68
- console.log(boxLine(title, 'design-brain v0.9.2'.length));
67
+ const title = `${BOLD}${CYAN}design-brain${RESET} v0.9.3`;
68
+ console.log(boxLine(title, 'design-brain v0.9.3'.length));
69
69
  const subtitle = `${DIM}Relational design memory${RESET}`;
70
70
  console.log(boxLine(subtitle, 'Relational design memory'.length));
71
71
  console.log(emptyBoxLine());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "design-brain-memory",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "Relational markdown design memory powered by Agent Browser CLI",
5
5
  "repository": {
6
6
  "type": "git",