design-brain-memory 0.9.3 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +273 -0
- package/dist/agentBrowser.d.ts +0 -1
- package/dist/agentBrowser.js +13 -31
- package/dist/agentBrowser.js.map +1 -1
- package/dist/aggregate.d.ts +9 -0
- package/dist/aggregate.js +53 -0
- package/dist/aggregate.js.map +1 -0
- package/dist/batch.d.ts +16 -0
- package/dist/batch.js +44 -0
- package/dist/batch.js.map +1 -0
- package/dist/cli.js +260 -216
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +60 -1
- package/dist/commands.js +323 -10
- package/dist/commands.js.map +1 -1
- package/dist/compare.d.ts +33 -0
- package/dist/compare.js +83 -0
- package/dist/compare.js.map +1 -0
- package/dist/componentGraph.d.ts +22 -0
- package/dist/componentGraph.js +106 -0
- package/dist/componentGraph.js.map +1 -0
- package/dist/contextLayer.d.ts +12 -0
- package/dist/contextLayer.js +263 -0
- package/dist/contextLayer.js.map +1 -0
- package/dist/cssInJs.d.ts +9 -0
- package/dist/cssInJs.js +124 -0
- package/dist/cssInJs.js.map +1 -0
- package/dist/extractFromUrl.d.ts +8 -0
- package/dist/extractFromUrl.js +508 -414
- package/dist/extractFromUrl.js.map +1 -1
- package/dist/graphView.d.ts +21 -0
- package/dist/graphView.js +492 -0
- package/dist/graphView.js.map +1 -0
- package/dist/index.d.ts +26 -11
- package/dist/index.js +17 -10
- package/dist/index.js.map +1 -1
- package/dist/knowledge.d.ts +20 -0
- package/dist/knowledge.js +208 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/liveView.d.ts +15 -0
- package/dist/liveView.js +475 -0
- package/dist/liveView.js.map +1 -0
- package/dist/llm.js +1 -9
- package/dist/llm.js.map +1 -1
- package/dist/moodboard.d.ts +3 -0
- package/dist/moodboard.js +152 -0
- package/dist/moodboard.js.map +1 -0
- package/dist/persona.d.ts +2 -2
- package/dist/persona.js +82 -210
- package/dist/persona.js.map +1 -1
- package/dist/postinstall.d.ts +1 -0
- package/dist/postinstall.js +42 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/query.js +1 -6
- package/dist/query.js.map +1 -1
- package/dist/render.d.ts +2 -10
- package/dist/render.js +80 -175
- package/dist/render.js.map +1 -1
- package/dist/reviewChecklist.d.ts +17 -0
- package/dist/reviewChecklist.js +126 -0
- package/dist/reviewChecklist.js.map +1 -0
- package/dist/scan.d.ts +19 -7
- package/dist/scan.js +132 -374
- package/dist/scan.js.map +1 -1
- package/dist/scorecard.d.ts +53 -0
- package/dist/scorecard.js +325 -0
- package/dist/scorecard.js.map +1 -0
- package/dist/skillPrompt.d.ts +11 -3
- package/dist/skillPrompt.js +155 -139
- package/dist/skillPrompt.js.map +1 -1
- package/dist/store.d.ts +2 -2
- package/dist/store.js +7 -9
- package/dist/store.js.map +1 -1
- package/dist/styleDictionary.d.ts +16 -0
- package/dist/styleDictionary.js +89 -0
- package/dist/styleDictionary.js.map +1 -0
- package/dist/svg.d.ts +5 -0
- package/dist/svg.js +162 -0
- package/dist/svg.js.map +1 -0
- package/dist/systemDiff.d.ts +28 -0
- package/dist/systemDiff.js +107 -0
- package/dist/systemDiff.js.map +1 -0
- package/dist/tailwind.d.ts +2 -0
- package/dist/tailwind.js +122 -0
- package/dist/tailwind.js.map +1 -0
- package/dist/taste.d.ts +3 -2
- package/dist/taste.js +349 -536
- package/dist/taste.js.map +1 -1
- package/dist/tasteRenderer.d.ts +2 -3
- package/dist/tasteRenderer.js +123 -119
- package/dist/tasteRenderer.js.map +1 -1
- package/dist/tokenNaming.d.ts +5 -0
- package/dist/tokenNaming.js +229 -0
- package/dist/tokenNaming.js.map +1 -0
- package/dist/tokens.d.ts +17 -0
- package/dist/tokens.js +44 -0
- package/dist/tokens.js.map +1 -0
- package/dist/trends.d.ts +12 -0
- package/dist/trends.js +178 -0
- package/dist/trends.js.map +1 -0
- package/dist/types.d.ts +47 -101
- package/dist/wiki.d.ts +10 -0
- package/dist/wiki.js +346 -0
- package/dist/wiki.js.map +1 -0
- package/dist/writingStyle.d.ts +38 -0
- package/dist/writingStyle.js +224 -0
- package/dist/writingStyle.js.map +1 -0
- package/package.json +6 -3
- package/plugins/design-brain/.claude-plugin/plugin.json +22 -0
- package/plugins/design-brain/CLAUDE.md +225 -0
- package/plugins/design-brain/README.md +36 -0
- package/plugins/design-brain/commands/db-ask.md +32 -0
- package/plugins/design-brain/commands/db-batch.md +40 -0
- package/plugins/design-brain/commands/db-capture.md +47 -0
- package/plugins/design-brain/commands/db-compare.md +39 -0
- package/plugins/design-brain/commands/db-component-graph.md +27 -0
- package/plugins/design-brain/commands/db-context.md +32 -0
- package/plugins/design-brain/commands/db-evolve.md +110 -0
- package/plugins/design-brain/commands/db-export.md +41 -0
- package/plugins/design-brain/commands/db-extract.md +133 -0
- package/plugins/design-brain/commands/db-graph.md +24 -0
- package/plugins/design-brain/commands/db-moodboard.md +35 -0
- package/plugins/design-brain/commands/db-name-tokens.md +28 -0
- package/plugins/design-brain/commands/db-next.md +73 -0
- package/plugins/design-brain/commands/db-pipeline.md +112 -0
- package/plugins/design-brain/commands/db-review.md +35 -0
- package/plugins/design-brain/commands/db-scorecard.md +42 -0
- package/plugins/design-brain/commands/db-search.md +84 -0
- package/plugins/design-brain/commands/db-stats.md +88 -0
- package/plugins/design-brain/commands/db-synthesize.md +113 -0
- package/plugins/design-brain/commands/db-system-diff.md +33 -0
- package/plugins/design-brain/commands/db-taste.md +29 -0
- package/plugins/design-brain/commands/db-trends.md +42 -0
- package/plugins/design-brain/commands/db-verify.md +129 -0
- package/plugins/design-brain/commands/db-wiki.md +27 -0
- package/plugins/design-brain/commands/db-writing-style.md +28 -0
- package/plugins/design-brain/hooks/hooks.json +33 -0
- package/plugins/design-brain/hooks/scripts/session-capture.sh +54 -0
- package/plugins/design-brain/hooks/scripts/session-orient.sh +58 -0
- package/plugins/design-brain/hooks/scripts/write-validate.sh +66 -0
- package/plugins/design-brain/skills/design-brain/SKILL.md +200 -0
- package/plugins/design-brain/skills/design-brain/agents/openai.yaml +3 -0
- package/plugins/design-brain/skills/setup/SKILL.md +159 -0
- package/plugins/design-brain/templates/decision.md +26 -0
- package/plugins/design-brain/templates/pattern.md +23 -0
- package/plugins/design-brain/templates/principle.md +22 -0
- package/dist/classify.d.ts +0 -21
- package/dist/classify.js +0 -205
- package/dist/classify.js.map +0 -1
- package/dist/scanRenderer.d.ts +0 -2
- package/dist/scanRenderer.js +0 -155
- package/dist/scanRenderer.js.map +0 -1
- package/dist/tasteDiff.d.ts +0 -19
- package/dist/tasteDiff.js +0 -340
- package/dist/tasteDiff.js.map +0 -1
- package/dist/tasteGenerate.d.ts +0 -12
- package/dist/tasteGenerate.js +0 -140
- package/dist/tasteGenerate.js.map +0 -1
- package/dist/tasteRefine.d.ts +0 -13
- package/dist/tasteRefine.js +0 -351
- package/dist/tasteRefine.js.map +0 -1
- package/dist/theatrical.d.ts +0 -5
- package/dist/theatrical.js +0 -258
- package/dist/theatrical.js.map +0 -1
- package/skills/SKILL.md +0 -36
- package/skills/design-brain/SKILL.md +0 -77
package/README.md
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# design-brain-memory
|
|
2
|
+
|
|
3
|
+
A persistent design knowledge system that captures inspiration from websites and screenshots, extracts reusable patterns, and builds a grep-friendly markdown knowledge graph.
|
|
4
|
+
|
|
5
|
+
Built on [Agent Browser CLI](https://github.com/vercel-labs/agent-browser) for headless capture. No external LLM required — bring your own optionally for semantic enrichment.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Capture** — Extract colors, typography, components, motion, layout, and CSS variables from any URL or screenshot
|
|
10
|
+
- **Knowledge system** — Three-space architecture (self / notes / ops) with pattern, decision, and principle notes
|
|
11
|
+
- **Processing pipeline** — Extract → Synthesize → Evolve → Verify with queue tracking
|
|
12
|
+
- **Tailwind export** — Generate `tailwind.config.js` from captured design tokens with auto-named colors from CSS variables
|
|
13
|
+
- **Visual catalog** — SVG palette, component, typography, and layout visualizations per capture
|
|
14
|
+
- **Component isolation** — Grouped JSON tokens by component kind (button, card, navigation, etc.)
|
|
15
|
+
- **Version lineage** — Fingerprint-based versioning with diffs between captures
|
|
16
|
+
- **Responsive coverage** — Capture at multiple viewports in a single pass
|
|
17
|
+
- **Interaction states** — Hover, focus, and active state extraction from runtime CSS
|
|
18
|
+
- **Journey capture** — Click-through exploration with per-step snapshots
|
|
19
|
+
- **Ripgrep-friendly** — Flat markdown files with YAML frontmatter, wiki links, and CSV relation graph
|
|
20
|
+
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g design-brain-memory
|
|
25
|
+
agent-browser install
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Initialize the knowledge system
|
|
32
|
+
design-brain-memory init --root .
|
|
33
|
+
|
|
34
|
+
# Capture a website
|
|
35
|
+
design-brain-memory ingest \
|
|
36
|
+
--project my-project \
|
|
37
|
+
--url https://stripe.com \
|
|
38
|
+
--name "Stripe Homepage" \
|
|
39
|
+
--tags fintech,payments
|
|
40
|
+
|
|
41
|
+
# Search with ripgrep
|
|
42
|
+
rg "button|card" .design-brain/notes/patterns/
|
|
43
|
+
rg "#533AFD" .design-brain/
|
|
44
|
+
|
|
45
|
+
# Or use the built-in search
|
|
46
|
+
design-brain-memory search --query "button hierarchy"
|
|
47
|
+
|
|
48
|
+
# Export Tailwind config
|
|
49
|
+
design-brain-memory export --project my-project --format tailwind
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Commands
|
|
53
|
+
|
|
54
|
+
| Command | Description |
|
|
55
|
+
|---------|-------------|
|
|
56
|
+
| `init` | Create `.design-brain/` with knowledge system directories |
|
|
57
|
+
| `ingest` | Capture inspiration from a URL or screenshot |
|
|
58
|
+
| `outcome` | Record a design outcome linked to inspirations |
|
|
59
|
+
| `search` | Keyword search across the brain |
|
|
60
|
+
| `ask` | Semantic search (requires LLM config) |
|
|
61
|
+
| `install-skill` | Install the Design Brain coding-agent skill |
|
|
62
|
+
| `reindex` | Regenerate markdown, visuals, and relation graph from `database.json` |
|
|
63
|
+
| `export` | Export tokens (`tailwind`, `style-dictionary`, or `css-in-js`) |
|
|
64
|
+
| `compare` | Compare two captures or version diff |
|
|
65
|
+
| `batch` | Batch capture from a URL list file |
|
|
66
|
+
| `moodboard` | Generate HTML + PNG visual moodboard |
|
|
67
|
+
| `trends` | Detect design trends across captures |
|
|
68
|
+
| `scorecard` | Audit codebase against captured design tokens |
|
|
69
|
+
| `component-graph` | Generate component relationship graph for a project |
|
|
70
|
+
| `review` | Generate design review checklist from captures and optional code scan |
|
|
71
|
+
| `name-tokens` | Preview human-readable token names |
|
|
72
|
+
| `wiki` | Generate wiki pages with project and shared context |
|
|
73
|
+
| `graph` | Generate interactive knowledge graph HTML |
|
|
74
|
+
| `context` | Generate AI-consumable context file (Claude/Cursor) |
|
|
75
|
+
| `writing-style` | Analyze writing style patterns from captures |
|
|
76
|
+
| `system-diff` | Diff design systems across projects or over time |
|
|
77
|
+
| `taste` | Build a taste profile from multiple URLs/domains |
|
|
78
|
+
|
|
79
|
+
### Ingest
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
design-brain-memory ingest \
|
|
83
|
+
--project checkout-redesign \
|
|
84
|
+
--project-name "Checkout Redesign" \
|
|
85
|
+
--url https://stripe.com \
|
|
86
|
+
--name "Stripe checkout inspiration" \
|
|
87
|
+
--tags payments,checkout,cta \
|
|
88
|
+
--journey-steps 4 \
|
|
89
|
+
--viewport desktop=1440x1200 tablet=1024x1366 mobile=390x844
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
From a screenshot:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
design-brain-memory ingest \
|
|
96
|
+
--project checkout-redesign \
|
|
97
|
+
--screenshot ./screens/inspo-hero.png \
|
|
98
|
+
--name "Hero screenshot" \
|
|
99
|
+
--tags hero,landing
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Record Outcome
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
design-brain-memory outcome \
|
|
106
|
+
--project checkout-redesign \
|
|
107
|
+
--title "v1 shipped" \
|
|
108
|
+
--description "Card-based checkout with clear primary CTA" \
|
|
109
|
+
--inspired-by inspo-stripe-checkout-1234abcd \
|
|
110
|
+
--tags shipped,frontend
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Knowledge System
|
|
114
|
+
|
|
115
|
+
The brain organizes knowledge across five spaces:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
.design-brain/
|
|
119
|
+
├── self/ # Agent identity and methodology
|
|
120
|
+
│ ├── identity.md
|
|
121
|
+
│ └── methodology.md
|
|
122
|
+
├── notes/ # Knowledge graph
|
|
123
|
+
│ ├── patterns/*.md # Reusable design patterns
|
|
124
|
+
│ ├── decisions/*.md # Design decisions with rationale
|
|
125
|
+
│ ├── principles/*.md # Cross-project principles
|
|
126
|
+
│ └── mocs/ # Maps of Content
|
|
127
|
+
│ ├── hub.md
|
|
128
|
+
│ ├── color-systems.md
|
|
129
|
+
│ ├── typography.md
|
|
130
|
+
│ ├── components.md
|
|
131
|
+
│ ├── layout.md
|
|
132
|
+
│ ├── motion.md
|
|
133
|
+
│ └── brand.md
|
|
134
|
+
├── ops/ # Operations
|
|
135
|
+
│ ├── queue/*.yaml # Processing pipeline queue
|
|
136
|
+
│ ├── sessions/*.md # Session activity logs
|
|
137
|
+
│ └── maintenance.md # Health signals
|
|
138
|
+
├── projects/ # Raw captures
|
|
139
|
+
│ └── <project>/
|
|
140
|
+
│ ├── README.md
|
|
141
|
+
│ ├── inspirations/*.md
|
|
142
|
+
│ ├── outcomes/*.md
|
|
143
|
+
│ ├── tokens/ # Aggregated design tokens
|
|
144
|
+
│ ├── visuals/*.svg # SVG visual catalog
|
|
145
|
+
│ └── tailwind.config.js # Generated Tailwind config
|
|
146
|
+
└── graph/ # Relation graph
|
|
147
|
+
├── entities.csv
|
|
148
|
+
└── relations.csv
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Note Schema
|
|
152
|
+
|
|
153
|
+
All notes use YAML frontmatter:
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
---
|
|
157
|
+
type: pattern | decision | principle
|
|
158
|
+
title: "Descriptive title"
|
|
159
|
+
sources: ["[[inspo-id]]"]
|
|
160
|
+
domains: [web, brand, mobile, design-systems]
|
|
161
|
+
tags: [relevant, tags]
|
|
162
|
+
confidence: emerging | established | canonical
|
|
163
|
+
created: 2026-02-18
|
|
164
|
+
updated: 2026-02-18
|
|
165
|
+
---
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Processing Pipeline
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
Capture → Extract → Synthesize → Evolve → Verify
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
1. **Capture** — Ingest inspiration, create queue entry
|
|
175
|
+
2. **Extract** — Generate pattern and decision notes from capture data
|
|
176
|
+
3. **Synthesize** — Find connections, add wiki links, update MOCs
|
|
177
|
+
4. **Evolve** — Update older notes with new evidence, upgrade confidence
|
|
178
|
+
5. **Verify** — Check schema compliance, link health, MOC coverage
|
|
179
|
+
|
|
180
|
+
## Retrieval
|
|
181
|
+
|
|
182
|
+
Designed for ripgrep:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Find patterns by keyword
|
|
186
|
+
rg "button|card|navigation" .design-brain/notes/patterns/
|
|
187
|
+
|
|
188
|
+
# Find canonical patterns
|
|
189
|
+
rg "confidence: canonical" .design-brain/notes/
|
|
190
|
+
|
|
191
|
+
# Search by color hex
|
|
192
|
+
rg "#533AFD" .design-brain/
|
|
193
|
+
|
|
194
|
+
# Query the relation graph
|
|
195
|
+
rg "has_inspiration|inspired_by" .design-brain/graph/relations.csv
|
|
196
|
+
|
|
197
|
+
# Find notes linked to a specific capture
|
|
198
|
+
rg "inspo-stripe" .design-brain/notes/
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Claude Code Plugin
|
|
202
|
+
|
|
203
|
+
design-brain ships as a Claude Code plugin with slash commands and hooks:
|
|
204
|
+
Current plugin command coverage includes:
|
|
205
|
+
|
|
206
|
+
| Command | Description |
|
|
207
|
+
|---------|-------------|
|
|
208
|
+
| `/db-capture` | Capture inspiration from URL or screenshot |
|
|
209
|
+
| `/db-extract` | Extract patterns and decisions from captures |
|
|
210
|
+
| `/db-synthesize` | Find connections, update MOCs |
|
|
211
|
+
| `/db-evolve` | Backward pass — update older notes |
|
|
212
|
+
| `/db-verify` | Schema and link health check |
|
|
213
|
+
| `/db-pipeline` | Run all pipeline phases |
|
|
214
|
+
| `/db-next` | Show next pending queue item |
|
|
215
|
+
| `/db-search` | Ripgrep search across the brain |
|
|
216
|
+
| `/db-ask` | Ask semantic design questions with cited sources |
|
|
217
|
+
| `/db-stats` | Vault metrics and health report |
|
|
218
|
+
| `/db-export` | Export tokens (Tailwind, Style Dictionary, CSS-in-JS) |
|
|
219
|
+
| `/db-compare` | Compare two captures or version diff |
|
|
220
|
+
| `/db-batch` | Batch capture from URL list file |
|
|
221
|
+
| `/db-moodboard` | Generate visual moodboard |
|
|
222
|
+
| `/db-trends` | Detect design trends across captures |
|
|
223
|
+
| `/db-scorecard` | Audit codebase against captured tokens |
|
|
224
|
+
| `/db-component-graph` | Generate component relationship graph |
|
|
225
|
+
| `/db-review` | Generate design review checklist |
|
|
226
|
+
| `/db-name-tokens` | Preview semantic token names |
|
|
227
|
+
| `/db-system-diff` | Diff systems over time or across projects |
|
|
228
|
+
| `/db-context` | Generate AI-ready context markdown |
|
|
229
|
+
| `/db-wiki` | Generate project + shared wiki pages |
|
|
230
|
+
| `/db-graph` | Generate interactive graph visualization |
|
|
231
|
+
| `/db-writing-style` | Analyze UI writing style patterns |
|
|
232
|
+
| `/db-taste` | Build a taste profile from multiple inspirations |
|
|
233
|
+
|
|
234
|
+
### Hooks
|
|
235
|
+
|
|
236
|
+
| Event | Action |
|
|
237
|
+
|-------|--------|
|
|
238
|
+
| SessionStart | Load identity context, queue status, maintenance signals |
|
|
239
|
+
| PostToolUse (Write) | Validate note frontmatter schema |
|
|
240
|
+
| Stop | Log session activity summary |
|
|
241
|
+
|
|
242
|
+
## Optional: LLM Enrichment
|
|
243
|
+
|
|
244
|
+
For semantic search and richer capture summaries, configure any OpenAI-compatible endpoint:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
export DESIGN_BRAIN_LLM_BASE_URL="https://api.openai.com/v1"
|
|
248
|
+
export DESIGN_BRAIN_LLM_API_KEY="<your-key>"
|
|
249
|
+
export DESIGN_BRAIN_LLM_MODEL="gpt-4o-mini"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Or pass per command: `--llm-base-url <url> --llm-api-key <key> --llm-model <model>`
|
|
253
|
+
|
|
254
|
+
Not required for core functionality.
|
|
255
|
+
|
|
256
|
+
## Packaging & Publish
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
npm login --auth-type=web
|
|
260
|
+
npm run release:check
|
|
261
|
+
npm publish --access public
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
`release:check` runs a clean build, tests, and `npm pack --dry-run` to verify publish contents.
|
|
265
|
+
|
|
266
|
+
## Requirements
|
|
267
|
+
|
|
268
|
+
- Node.js 20+
|
|
269
|
+
- [Agent Browser CLI](https://github.com/vercel-labs/agent-browser) (`agent-browser install`)
|
|
270
|
+
|
|
271
|
+
## License
|
|
272
|
+
|
|
273
|
+
MIT
|
package/dist/agentBrowser.d.ts
CHANGED
package/dist/agentBrowser.js
CHANGED
|
@@ -49,20 +49,16 @@ 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;
|
|
53
52
|
export async function runAgentBrowserJson(args, options = {}) {
|
|
54
53
|
const runner = resolveRunner();
|
|
55
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
56
54
|
const finalArgs = [
|
|
57
55
|
...runner.prefixArgs,
|
|
58
|
-
...(options.session ? ['--session', options.session] : []),
|
|
59
56
|
...(options.headed ? ['--headed'] : []),
|
|
57
|
+
...(options.session ? ['--session', options.session] : []),
|
|
60
58
|
'--json',
|
|
61
59
|
...args,
|
|
62
60
|
];
|
|
63
61
|
return new Promise((resolve, reject) => {
|
|
64
|
-
let settled = false;
|
|
65
|
-
let timer;
|
|
66
62
|
const child = spawn(runner.command, finalArgs, {
|
|
67
63
|
cwd: options.cwd,
|
|
68
64
|
env: {
|
|
@@ -74,18 +70,6 @@ export async function runAgentBrowserJson(args, options = {}) {
|
|
|
74
70
|
});
|
|
75
71
|
let stdout = '';
|
|
76
72
|
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);
|
|
89
73
|
child.stdout.on('data', (chunk) => {
|
|
90
74
|
stdout += chunk.toString();
|
|
91
75
|
});
|
|
@@ -93,22 +77,20 @@ export async function runAgentBrowserJson(args, options = {}) {
|
|
|
93
77
|
stderr += chunk.toString();
|
|
94
78
|
});
|
|
95
79
|
child.on('error', (error) => {
|
|
96
|
-
|
|
80
|
+
reject(error);
|
|
97
81
|
});
|
|
98
82
|
child.on('close', (code) => {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
});
|
|
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
|
+
}
|
|
112
94
|
});
|
|
113
95
|
});
|
|
114
96
|
}
|
package/dist/agentBrowser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentBrowser.js","sourceRoot":"","sources":["../src/agentBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAatD,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,0BAA0B,EAAE,OAAO;YACnC,0BAA0B,EAAE,OAAO;SACpC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAC3D,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAClD,YAAY,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACpD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/C,YAAY,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC5D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YAAY,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC;IAC1E,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA6B,CAAC;YAC5D,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yDAAyD,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"agentBrowser.js","sourceRoot":"","sources":["../src/agentBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAatD,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,0BAA0B,EAAE,OAAO;YACnC,0BAA0B,EAAE,OAAO;SACpC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAC3D,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAClD,YAAY,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACpD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/C,YAAY,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC5D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YAAY,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC;IAC1E,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA6B,CAAC;YAC5D,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yDAAyD,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAc,EACd,UAAgE,EAAE;IAElE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG;QAChB,GAAG,MAAM,CAAC,UAAU;QACpB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,QAAQ;QACR,GAAG,IAAI;KACR,CAAC;IAEF,OAAO,IAAI,OAAO,CAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;YAC7C,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,0BAA0B,EAAE,OAAO;gBACnC,0BAA0B,EAAE,OAAO;aACpC;YACD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAI,KAAe,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAE,KAAe,CAAC,OAAO,CAAC;gBAC7F,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ColorToken, ComponentToken, InspirationRecord, MotionToken, TypographyToken } from './types.js';
|
|
2
|
+
export declare function aggregateColors(records: InspirationRecord[]): ColorToken[];
|
|
3
|
+
export declare function aggregateTypography(records: InspirationRecord[]): TypographyToken[];
|
|
4
|
+
export declare function aggregateComponents(records: InspirationRecord[]): Array<ComponentToken & {
|
|
5
|
+
count: number;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function aggregateMotion(records: InspirationRecord[]): Array<MotionToken & {
|
|
8
|
+
count: number;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function aggregateColors(records) {
|
|
2
|
+
const map = new Map();
|
|
3
|
+
for (const record of records) {
|
|
4
|
+
for (const color of record.analysis.colors) {
|
|
5
|
+
const existing = map.get(color.hex) ?? { hex: color.hex, count: 0, samples: [] };
|
|
6
|
+
existing.count += color.count;
|
|
7
|
+
for (const sample of color.samples) {
|
|
8
|
+
if (existing.samples.length < 6 && !existing.samples.includes(sample)) {
|
|
9
|
+
existing.samples.push(sample);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
map.set(color.hex, existing);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 40);
|
|
16
|
+
}
|
|
17
|
+
export function aggregateTypography(records) {
|
|
18
|
+
const map = new Map();
|
|
19
|
+
for (const record of records) {
|
|
20
|
+
for (const token of record.analysis.typography) {
|
|
21
|
+
const key = `${token.fontFamily}|${token.fontSize}|${token.fontWeight}|${token.lineHeight}`;
|
|
22
|
+
const existing = map.get(key) ?? { ...token, count: 0 };
|
|
23
|
+
existing.count += token.count;
|
|
24
|
+
map.set(key, existing);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 60);
|
|
28
|
+
}
|
|
29
|
+
export function aggregateComponents(records) {
|
|
30
|
+
const map = new Map();
|
|
31
|
+
for (const record of records) {
|
|
32
|
+
for (const token of record.analysis.components) {
|
|
33
|
+
const key = `${token.kind}|${token.tag}|${token.selector}`;
|
|
34
|
+
const existing = map.get(key) ?? { ...token, count: 0 };
|
|
35
|
+
existing.count += 1;
|
|
36
|
+
map.set(key, existing);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 120);
|
|
40
|
+
}
|
|
41
|
+
export function aggregateMotion(records) {
|
|
42
|
+
const map = new Map();
|
|
43
|
+
for (const record of records) {
|
|
44
|
+
for (const token of record.analysis.motion) {
|
|
45
|
+
const key = `${token.selector}|${token.transition}|${token.animation}|${token.transform}`;
|
|
46
|
+
const existing = map.get(key) ?? { ...token, count: 0 };
|
|
47
|
+
existing.count += 1;
|
|
48
|
+
map.set(key, existing);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return [...map.values()].sort((a, b) => b.count - a.count).slice(0, 140);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"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"}
|
package/dist/batch.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface BatchEntry {
|
|
2
|
+
url: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
tags: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function parseBatchFile(content: string): BatchEntry[];
|
|
7
|
+
export declare function batchCapture(params: {
|
|
8
|
+
rootDir: string;
|
|
9
|
+
project: string;
|
|
10
|
+
filePath: string;
|
|
11
|
+
skipVisuals: boolean;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
total: number;
|
|
14
|
+
succeeded: number;
|
|
15
|
+
failed: string[];
|
|
16
|
+
}>;
|
package/dist/batch.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { ingestInspiration } from './commands.js';
|
|
3
|
+
export function parseBatchFile(content) {
|
|
4
|
+
return content
|
|
5
|
+
.split('\n')
|
|
6
|
+
.map((line) => line.trim())
|
|
7
|
+
.filter((line) => line.length > 0 && !line.startsWith('#'))
|
|
8
|
+
.map((line) => {
|
|
9
|
+
const parts = line.split('\t');
|
|
10
|
+
const url = parts[0].trim();
|
|
11
|
+
const name = parts[1]?.trim() || undefined;
|
|
12
|
+
const tags = parts[2] ? parts[2].split(',').map((t) => t.trim()).filter(Boolean) : [];
|
|
13
|
+
return { url, name, tags };
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export async function batchCapture(params) {
|
|
17
|
+
const content = await fs.readFile(params.filePath, 'utf-8');
|
|
18
|
+
const entries = parseBatchFile(content);
|
|
19
|
+
const failed = [];
|
|
20
|
+
let succeeded = 0;
|
|
21
|
+
for (let i = 0; i < entries.length; i++) {
|
|
22
|
+
const entry = entries[i];
|
|
23
|
+
const label = entry.name || entry.url;
|
|
24
|
+
console.log(`[${i + 1}/${entries.length}] Capturing ${label}...`);
|
|
25
|
+
try {
|
|
26
|
+
await ingestInspiration({
|
|
27
|
+
rootDir: params.rootDir,
|
|
28
|
+
project: params.project,
|
|
29
|
+
url: entry.url,
|
|
30
|
+
name: entry.name,
|
|
31
|
+
tags: entry.tags,
|
|
32
|
+
skipVisuals: params.skipVisuals,
|
|
33
|
+
});
|
|
34
|
+
succeeded++;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
38
|
+
console.error(` Failed: ${msg}`);
|
|
39
|
+
failed.push(entry.url);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { total: entries.length, succeeded, failed };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAQlD,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO;SACX,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAKlC;IACC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,eAAe,KAAK,KAAK,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;YACH,SAAS,EAAE,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACtD,CAAC"}
|