design-brain-memory 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +273 -0
  2. package/dist/agentBrowser.d.ts +0 -1
  3. package/dist/agentBrowser.js +13 -31
  4. package/dist/agentBrowser.js.map +1 -1
  5. package/dist/aggregate.d.ts +9 -0
  6. package/dist/aggregate.js +53 -0
  7. package/dist/aggregate.js.map +1 -0
  8. package/dist/batch.d.ts +16 -0
  9. package/dist/batch.js +44 -0
  10. package/dist/batch.js.map +1 -0
  11. package/dist/cli.js +250 -216
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands.d.ts +60 -1
  14. package/dist/commands.js +323 -10
  15. package/dist/commands.js.map +1 -1
  16. package/dist/compare.d.ts +33 -0
  17. package/dist/compare.js +83 -0
  18. package/dist/compare.js.map +1 -0
  19. package/dist/componentGraph.d.ts +22 -0
  20. package/dist/componentGraph.js +106 -0
  21. package/dist/componentGraph.js.map +1 -0
  22. package/dist/contextLayer.d.ts +12 -0
  23. package/dist/contextLayer.js +263 -0
  24. package/dist/contextLayer.js.map +1 -0
  25. package/dist/cssInJs.d.ts +9 -0
  26. package/dist/cssInJs.js +124 -0
  27. package/dist/cssInJs.js.map +1 -0
  28. package/dist/extractFromUrl.d.ts +8 -0
  29. package/dist/extractFromUrl.js +508 -414
  30. package/dist/extractFromUrl.js.map +1 -1
  31. package/dist/graphView.d.ts +21 -0
  32. package/dist/graphView.js +492 -0
  33. package/dist/graphView.js.map +1 -0
  34. package/dist/index.d.ts +26 -11
  35. package/dist/index.js +17 -10
  36. package/dist/index.js.map +1 -1
  37. package/dist/knowledge.d.ts +20 -0
  38. package/dist/knowledge.js +208 -0
  39. package/dist/knowledge.js.map +1 -0
  40. package/dist/liveView.d.ts +15 -0
  41. package/dist/liveView.js +475 -0
  42. package/dist/liveView.js.map +1 -0
  43. package/dist/llm.js +1 -9
  44. package/dist/llm.js.map +1 -1
  45. package/dist/moodboard.d.ts +3 -0
  46. package/dist/moodboard.js +152 -0
  47. package/dist/moodboard.js.map +1 -0
  48. package/dist/persona.d.ts +2 -2
  49. package/dist/persona.js +82 -210
  50. package/dist/persona.js.map +1 -1
  51. package/dist/query.js +1 -6
  52. package/dist/query.js.map +1 -1
  53. package/dist/render.d.ts +2 -10
  54. package/dist/render.js +80 -175
  55. package/dist/render.js.map +1 -1
  56. package/dist/reviewChecklist.d.ts +17 -0
  57. package/dist/reviewChecklist.js +126 -0
  58. package/dist/reviewChecklist.js.map +1 -0
  59. package/dist/scan.d.ts +19 -7
  60. package/dist/scan.js +132 -374
  61. package/dist/scan.js.map +1 -1
  62. package/dist/scorecard.d.ts +53 -0
  63. package/dist/scorecard.js +325 -0
  64. package/dist/scorecard.js.map +1 -0
  65. package/dist/skillPrompt.d.ts +1 -3
  66. package/dist/skillPrompt.js +22 -148
  67. package/dist/skillPrompt.js.map +1 -1
  68. package/dist/store.d.ts +2 -2
  69. package/dist/store.js +7 -9
  70. package/dist/store.js.map +1 -1
  71. package/dist/styleDictionary.d.ts +16 -0
  72. package/dist/styleDictionary.js +89 -0
  73. package/dist/styleDictionary.js.map +1 -0
  74. package/dist/svg.d.ts +5 -0
  75. package/dist/svg.js +162 -0
  76. package/dist/svg.js.map +1 -0
  77. package/dist/systemDiff.d.ts +28 -0
  78. package/dist/systemDiff.js +107 -0
  79. package/dist/systemDiff.js.map +1 -0
  80. package/dist/tailwind.d.ts +2 -0
  81. package/dist/tailwind.js +122 -0
  82. package/dist/tailwind.js.map +1 -0
  83. package/dist/taste.d.ts +3 -2
  84. package/dist/taste.js +349 -536
  85. package/dist/taste.js.map +1 -1
  86. package/dist/tasteRenderer.d.ts +2 -3
  87. package/dist/tasteRenderer.js +123 -119
  88. package/dist/tasteRenderer.js.map +1 -1
  89. package/dist/tokenNaming.d.ts +5 -0
  90. package/dist/tokenNaming.js +229 -0
  91. package/dist/tokenNaming.js.map +1 -0
  92. package/dist/tokens.d.ts +17 -0
  93. package/dist/tokens.js +44 -0
  94. package/dist/tokens.js.map +1 -0
  95. package/dist/trends.d.ts +12 -0
  96. package/dist/trends.js +178 -0
  97. package/dist/trends.js.map +1 -0
  98. package/dist/types.d.ts +47 -101
  99. package/dist/wiki.d.ts +10 -0
  100. package/dist/wiki.js +346 -0
  101. package/dist/wiki.js.map +1 -0
  102. package/dist/writingStyle.d.ts +38 -0
  103. package/dist/writingStyle.js +224 -0
  104. package/dist/writingStyle.js.map +1 -0
  105. package/package.json +5 -4
  106. package/dist/classify.d.ts +0 -21
  107. package/dist/classify.js +0 -205
  108. package/dist/classify.js.map +0 -1
  109. package/dist/scanRenderer.d.ts +0 -2
  110. package/dist/scanRenderer.js +0 -155
  111. package/dist/scanRenderer.js.map +0 -1
  112. package/dist/tasteDiff.d.ts +0 -19
  113. package/dist/tasteDiff.js +0 -340
  114. package/dist/tasteDiff.js.map +0 -1
  115. package/dist/tasteGenerate.d.ts +0 -12
  116. package/dist/tasteGenerate.js +0 -140
  117. package/dist/tasteGenerate.js.map +0 -1
  118. package/dist/tasteRefine.d.ts +0 -13
  119. package/dist/tasteRefine.js +0 -351
  120. package/dist/tasteRefine.js.map +0 -1
  121. package/dist/theatrical.d.ts +0 -5
  122. package/dist/theatrical.js +0 -258
  123. package/dist/theatrical.js.map +0 -1
  124. package/skills/SKILL.md +0 -36
  125. package/skills/design-brain/SKILL.md +0 -77
package/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
@@ -7,5 +7,4 @@ export declare function runAgentBrowserJson(args: string[], options?: {
7
7
  session?: string;
8
8
  cwd?: string;
9
9
  headed?: boolean;
10
- timeoutMs?: number;
11
10
  }): Promise<AgentBrowserJsonResponse>;
@@ -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
- settle(() => reject(error));
80
+ reject(error);
97
81
  });
98
82
  child.on('close', (code) => {
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
- });
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
  }
@@ -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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"}
@@ -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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"}
@@ -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"}