design-brain-memory 0.2.0

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 (47) hide show
  1. package/README.md +167 -0
  2. package/dist/agentBrowser.d.ts +9 -0
  3. package/dist/agentBrowser.js +96 -0
  4. package/dist/agentBrowser.js.map +1 -0
  5. package/dist/cli.d.ts +2 -0
  6. package/dist/cli.js +212 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands.d.ts +27 -0
  9. package/dist/commands.js +178 -0
  10. package/dist/commands.js.map +1 -0
  11. package/dist/extractFromImage.d.ts +7 -0
  12. package/dist/extractFromImage.js +72 -0
  13. package/dist/extractFromImage.js.map +1 -0
  14. package/dist/extractFromUrl.d.ts +13 -0
  15. package/dist/extractFromUrl.js +605 -0
  16. package/dist/extractFromUrl.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.js +3 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/interactive.d.ts +3 -0
  21. package/dist/interactive.js +42 -0
  22. package/dist/interactive.js.map +1 -0
  23. package/dist/llm.d.ts +33 -0
  24. package/dist/llm.js +250 -0
  25. package/dist/llm.js.map +1 -0
  26. package/dist/query.d.ts +25 -0
  27. package/dist/query.js +150 -0
  28. package/dist/query.js.map +1 -0
  29. package/dist/render.d.ts +2 -0
  30. package/dist/render.js +365 -0
  31. package/dist/render.js.map +1 -0
  32. package/dist/skillPrompt.d.ts +3 -0
  33. package/dist/skillPrompt.js +66 -0
  34. package/dist/skillPrompt.js.map +1 -0
  35. package/dist/store.d.ts +14 -0
  36. package/dist/store.js +69 -0
  37. package/dist/store.js.map +1 -0
  38. package/dist/svg.d.ts +5 -0
  39. package/dist/svg.js +162 -0
  40. package/dist/svg.js.map +1 -0
  41. package/dist/types.d.ts +175 -0
  42. package/dist/types.js +2 -0
  43. package/dist/types.js.map +1 -0
  44. package/dist/util.d.ts +9 -0
  45. package/dist/util.js +51 -0
  46. package/dist/util.js.map +1 -0
  47. package/package.json +53 -0
package/README.md ADDED
@@ -0,0 +1,167 @@
1
+ # design-brain-memory
2
+
3
+ A relational markdown design brain that uses **Agent Browser CLI** for capture and supports **bring-your-own LLM** via base URL + API key.
4
+
5
+ ## What it does
6
+
7
+ - Capture inspirations from URLs and screenshots.
8
+ - Extract colors, typography, components, motion, layout, CSS variables.
9
+ - Add responsive coverage via multiple viewports.
10
+ - Capture interaction state signals (`hover`, `focus`, `active`) from runtime + CSS rules.
11
+ - Capture journey steps by click-through exploration.
12
+ - Build version lineage (`fingerprint`, `version`, `supersedes`, diffs).
13
+ - Store everything in `.design-brain/` (markdown + graph CSV).
14
+ - Query with `search` (keyword) and `ask` (semantic; optional LLM).
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ npm install -g design-brain-memory
20
+ agent-browser install
21
+ ```
22
+
23
+ Install directly from GitHub:
24
+
25
+ ```bash
26
+ npm install -g github:design-brain/design-brain
27
+ ```
28
+
29
+ ## Install as a skill
30
+
31
+ ```bash
32
+ design-brain-memory install-skill
33
+ ```
34
+
35
+ or
36
+
37
+ ```bash
38
+ npx -y skills add design-brain/design-brain
39
+ ```
40
+
41
+ `ingest` will also suggest this once in interactive terminals.
42
+
43
+ ## Bring your own LLM
44
+
45
+ Set once:
46
+
47
+ ```bash
48
+ export DESIGN_BRAIN_LLM_BASE_URL="https://api.openai.com/v1"
49
+ export DESIGN_BRAIN_LLM_API_KEY="<your-api-key>"
50
+ export DESIGN_BRAIN_LLM_MODEL="gpt-4o-mini"
51
+ ```
52
+
53
+ Or pass per command:
54
+
55
+ ```bash
56
+ --llm-base-url <url> --llm-api-key <key> --llm-model <model>
57
+ ```
58
+
59
+ Any OpenAI-compatible endpoint works.
60
+
61
+ ## Commands
62
+
63
+ ### Initialize
64
+
65
+ ```bash
66
+ design-brain-memory init --root /path/to/workspace
67
+ ```
68
+
69
+ ### Ingest URL inspiration
70
+
71
+ ```bash
72
+ design-brain-memory ingest \
73
+ --project checkout-redesign \
74
+ --project-name "Checkout Redesign" \
75
+ --url https://stripe.com \
76
+ --name "Stripe checkout inspiration" \
77
+ --inspiration "Button hierarchy + neutral surfaces" \
78
+ --journey-steps 4 \
79
+ --viewport desktop=1440x1200 tablet=1024x1366 mobile=390x844 \
80
+ --tags payments,checkout,cta
81
+ ```
82
+
83
+ ### Ingest screenshot inspiration
84
+
85
+ ```bash
86
+ design-brain-memory ingest \
87
+ --project checkout-redesign \
88
+ --screenshot ./screens/inspo-hero.png \
89
+ --name "Hero screenshot" \
90
+ --tags hero,landing
91
+ ```
92
+
93
+ ### Record outcome
94
+
95
+ ```bash
96
+ design-brain-memory outcome \
97
+ --project checkout-redesign \
98
+ --title "v1 shipped" \
99
+ --description "Shipped card-based checkout with clear primary CTA" \
100
+ --inspired-by inspo-stripe-checkout-1234abcd \
101
+ --artifact-url https://app.example.com/checkout \
102
+ --tags shipped,frontend
103
+ ```
104
+
105
+ ### Search
106
+
107
+ ```bash
108
+ design-brain-memory search --query "button hierarchy" --project checkout-redesign
109
+ ```
110
+
111
+ ### Ask
112
+
113
+ ```bash
114
+ design-brain-memory ask --query "What CTA patterns repeated across inspirations?" --project checkout-redesign
115
+ ```
116
+
117
+ ### Reindex
118
+
119
+ ```bash
120
+ design-brain-memory reindex
121
+ ```
122
+
123
+ ### Prompt control
124
+
125
+ Use `-y` / `--yes` to skip interactive prompts in local scripts and CI.
126
+
127
+ ## Output structure
128
+
129
+ ```
130
+ .design-brain/
131
+ ├── README.md
132
+ ├── database.json
133
+ ├── graph/
134
+ │ ├── entities.csv
135
+ │ └── relations.csv
136
+ ├── assets/
137
+ │ └── <project-id>/*.png
138
+ └── projects/
139
+ └── <project-id>/
140
+ ├── README.md
141
+ ├── index.md
142
+ ├── inspirations/*.md
143
+ ├── outcomes/*.md
144
+ └── tokens/
145
+ ├── colors.md
146
+ ├── typography.md
147
+ ├── components.md
148
+ ├── motion.md
149
+ └── layout.md
150
+ ```
151
+
152
+ ## Retrieval examples
153
+
154
+ ```bash
155
+ rg "supersedes|inspired_by" .design-brain/graph/relations.csv
156
+ rg "Interaction States|Responsive Coverage" .design-brain/projects
157
+ rg "fingerprint" .design-brain/projects/*/inspirations/*.md
158
+ ```
159
+
160
+ ## Notes
161
+
162
+ - Browser usage follows Agent Browser CLI patterns from the upstream README (`open`, `set viewport`, `snapshot`, `click`, `hover`, `focus`, `eval`, `screenshot`, `back`, `close`).
163
+ - If `agent-browser` is not globally installed, the CLI falls back to `npx agent-browser`.
164
+
165
+ ## Credits
166
+
167
+ - Built on top of [Agent Browser CLI](https://github.com/vercel-labs/agent-browser) by Vercel Labs.
@@ -0,0 +1,9 @@
1
+ export interface AgentBrowserJsonResponse {
2
+ success: boolean;
3
+ data: Record<string, unknown>;
4
+ error: string | null;
5
+ }
6
+ export declare function runAgentBrowserJson(args: string[], options?: {
7
+ session?: string;
8
+ cwd?: string;
9
+ }): Promise<AgentBrowserJsonResponse>;
@@ -0,0 +1,96 @@
1
+ import { spawn, spawnSync } from 'node:child_process';
2
+ let cachedRunner = null;
3
+ function canExecute(command, args) {
4
+ const result = spawnSync(command, args, {
5
+ stdio: 'ignore',
6
+ env: {
7
+ ...process.env,
8
+ NPM_CONFIG_UPDATE_NOTIFIER: 'false',
9
+ npm_config_update_notifier: 'false',
10
+ },
11
+ });
12
+ return result.status === 0;
13
+ }
14
+ function resolveRunner() {
15
+ if (cachedRunner) {
16
+ return cachedRunner;
17
+ }
18
+ const fromEnv = process.env.DESIGN_BRAIN_AGENT_BROWSER_BIN;
19
+ if (fromEnv && canExecute(fromEnv, ['--version'])) {
20
+ cachedRunner = { command: fromEnv, prefixArgs: [] };
21
+ return cachedRunner;
22
+ }
23
+ if (canExecute('agent-browser', ['--version'])) {
24
+ cachedRunner = { command: 'agent-browser', prefixArgs: [] };
25
+ return cachedRunner;
26
+ }
27
+ cachedRunner = { command: 'npx', prefixArgs: ['--yes', 'agent-browser'] };
28
+ return cachedRunner;
29
+ }
30
+ function parseJsonFromOutput(stdout) {
31
+ const lines = stdout
32
+ .split(/\r?\n/)
33
+ .map((line) => line.trim())
34
+ .filter((line) => line.length > 0);
35
+ for (let i = lines.length - 1; i >= 0; i -= 1) {
36
+ const line = lines[i];
37
+ if (!line.startsWith('{') || !line.endsWith('}')) {
38
+ continue;
39
+ }
40
+ try {
41
+ const parsed = JSON.parse(line);
42
+ if (typeof parsed.success === 'boolean') {
43
+ return parsed;
44
+ }
45
+ }
46
+ catch {
47
+ // keep searching
48
+ }
49
+ }
50
+ throw new Error(`Failed to parse Agent Browser JSON response. Output:\n${stdout}`);
51
+ }
52
+ export async function runAgentBrowserJson(args, options = {}) {
53
+ const runner = resolveRunner();
54
+ const finalArgs = [
55
+ ...runner.prefixArgs,
56
+ ...(options.session ? ['--session', options.session] : []),
57
+ '--json',
58
+ ...args,
59
+ ];
60
+ return new Promise((resolve, reject) => {
61
+ const child = spawn(runner.command, finalArgs, {
62
+ cwd: options.cwd,
63
+ env: {
64
+ ...process.env,
65
+ NPM_CONFIG_UPDATE_NOTIFIER: 'false',
66
+ npm_config_update_notifier: 'false',
67
+ },
68
+ stdio: ['ignore', 'pipe', 'pipe'],
69
+ });
70
+ let stdout = '';
71
+ let stderr = '';
72
+ child.stdout.on('data', (chunk) => {
73
+ stdout += chunk.toString();
74
+ });
75
+ child.stderr.on('data', (chunk) => {
76
+ stderr += chunk.toString();
77
+ });
78
+ child.on('error', (error) => {
79
+ reject(error);
80
+ });
81
+ child.on('close', (code) => {
82
+ if (code !== 0) {
83
+ reject(new Error(`agent-browser command failed (${code}): ${stderr || stdout}`));
84
+ return;
85
+ }
86
+ try {
87
+ resolve(parseJsonFromOutput(stdout));
88
+ }
89
+ catch (error) {
90
+ const details = stderr ? `${error.message}\n${stderr}` : error.message;
91
+ reject(new Error(details));
92
+ }
93
+ });
94
+ });
95
+ }
96
+ //# sourceMappingURL=agentBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentBrowser.js","sourceRoot":"","sources":["../src/agentBrowser.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,212 @@
1
+ #!/usr/bin/env node
2
+ import path from 'node:path';
3
+ import { Command } from 'commander';
4
+ import { askBrain, initBrain, ingestInspiration, recordOutcome, reindexBrain, searchBrain, } from './commands.js';
5
+ import { shouldSkipPrompts } from './interactive.js';
6
+ import { resolveLlmConfig } from './llm.js';
7
+ import { getDefaultSkillRepo, installSkill, maybePromptSkillInstall } from './skillPrompt.js';
8
+ function toStringList(value) {
9
+ if (!value) {
10
+ return [];
11
+ }
12
+ if (Array.isArray(value)) {
13
+ return value.flatMap((item) => item.split(',')).map((item) => item.trim()).filter(Boolean);
14
+ }
15
+ return value.split(',').map((item) => item.trim()).filter(Boolean);
16
+ }
17
+ function parseInteger(value, defaultValue) {
18
+ const parsed = Number.parseInt(value, 10);
19
+ return Number.isFinite(parsed) ? parsed : defaultValue;
20
+ }
21
+ function parseViewports(values) {
22
+ if (!values || values.length === 0) {
23
+ return undefined;
24
+ }
25
+ const parsed = values
26
+ .flatMap((value) => value.split(','))
27
+ .map((item) => item.trim())
28
+ .filter(Boolean)
29
+ .map((item, index) => {
30
+ const [label, size] = item.includes('=') ? item.split('=') : [`vp${index + 1}`, item];
31
+ const [widthRaw, heightRaw] = size.split('x');
32
+ const width = Number.parseInt(widthRaw, 10);
33
+ const height = Number.parseInt(heightRaw, 10);
34
+ if (!Number.isFinite(width) || !Number.isFinite(height)) {
35
+ throw new Error(`Invalid viewport format: ${item}. Use label=1440x1200.`);
36
+ }
37
+ return { label: label.trim(), width, height };
38
+ });
39
+ return parsed.length > 0 ? parsed : undefined;
40
+ }
41
+ async function main() {
42
+ const program = new Command();
43
+ program
44
+ .name('design-brain-memory')
45
+ .description('Relational markdown design memory powered by Agent Browser CLI')
46
+ .version('0.2.0')
47
+ .option('-y, --yes', 'Skip interactive prompts');
48
+ program
49
+ .command('init')
50
+ .description('Initialize .design-brain in the given workspace')
51
+ .option('--root <dir>', 'Workspace root', process.cwd())
52
+ .action(async (options) => {
53
+ await initBrain(path.resolve(options.root));
54
+ console.log(`Initialized design brain at ${path.resolve(options.root, '.design-brain')}`);
55
+ });
56
+ program
57
+ .command('ingest')
58
+ .description('Ingest a URL or screenshot into a project design wiki')
59
+ .requiredOption('--project <project>', 'Project ID/slug')
60
+ .option('--project-name <name>', 'Readable project name')
61
+ .option('--project-description <text>', 'Project description shown in the wiki')
62
+ .option('--url <url>', 'Website URL inspiration source')
63
+ .option('--screenshot <path>', 'Local screenshot inspiration source')
64
+ .option('--name <name>', 'Record name')
65
+ .option('--notes <notes>', 'Freeform notes about why it matters')
66
+ .option('--inspiration <text>', 'Summary of what this source inspired')
67
+ .option('--tags <tags...>', 'Tags list (repeat or comma-separated)')
68
+ .option('--journey-steps <n>', 'How many click-through journey steps to capture', '3')
69
+ .option('--viewport <viewports...>', 'Responsive viewports: desktop=1440x1200,mobile=390x844')
70
+ .option('--llm-base-url <url>', 'OpenAI-compatible LLM base URL')
71
+ .option('--llm-api-key <key>', 'LLM API key')
72
+ .option('--llm-model <model>', 'LLM model id')
73
+ .option('--llm-timeout-ms <ms>', 'LLM timeout in milliseconds', '30000')
74
+ .option('--root <dir>', 'Workspace root', process.cwd())
75
+ .option('--no-visuals', 'Skip SVG visual generation')
76
+ .action(async (options) => {
77
+ const llm = resolveLlmConfig({
78
+ baseUrl: options.llmBaseUrl,
79
+ apiKey: options.llmApiKey,
80
+ model: options.llmModel,
81
+ timeoutMs: parseInteger(options.llmTimeoutMs, 30000),
82
+ });
83
+ const result = await ingestInspiration({
84
+ rootDir: path.resolve(options.root),
85
+ project: options.project,
86
+ projectName: options.projectName,
87
+ projectDescription: options.projectDescription,
88
+ url: options.url,
89
+ screenshot: options.screenshot,
90
+ name: options.name,
91
+ notes: options.notes,
92
+ inspirationSummary: options.inspiration,
93
+ tags: toStringList(options.tags),
94
+ llm,
95
+ journeySteps: parseInteger(options.journeySteps, 3),
96
+ responsiveViewports: parseViewports(options.viewport),
97
+ skipVisuals: !options.visuals,
98
+ });
99
+ console.log(`Captured inspiration ${result.inspirationId} in project ${result.projectId}`);
100
+ const globalOptions = program.opts();
101
+ await maybePromptSkillInstall(shouldSkipPrompts(Boolean(globalOptions.yes)));
102
+ });
103
+ program
104
+ .command('outcome')
105
+ .description('Record what the team built and link it to inspirations')
106
+ .requiredOption('--project <project>', 'Project ID/slug')
107
+ .requiredOption('--title <title>', 'Outcome title')
108
+ .requiredOption('--description <description>', 'Outcome description')
109
+ .option('--artifact-url <url>', 'Deployed link, Figma link, or PR URL')
110
+ .option('--inspired-by <ids...>', 'Linked inspiration IDs')
111
+ .option('--tags <tags...>', 'Tags list (repeat or comma-separated)')
112
+ .option('--root <dir>', 'Workspace root', process.cwd())
113
+ .action(async (options) => {
114
+ const result = await recordOutcome({
115
+ rootDir: path.resolve(options.root),
116
+ project: options.project,
117
+ title: options.title,
118
+ description: options.description,
119
+ inspiredBy: toStringList(options.inspiredBy),
120
+ artifactUrl: options.artifactUrl,
121
+ tags: toStringList(options.tags),
122
+ });
123
+ console.log(`Recorded outcome ${result.outcomeId} in project ${result.projectId}`);
124
+ });
125
+ program
126
+ .command('search')
127
+ .description('Keyword search over relational design memory')
128
+ .requiredOption('--query <text>', 'Search query')
129
+ .option('--project <project>', 'Filter to project')
130
+ .option('--limit <n>', 'Max results', '10')
131
+ .option('--json', 'Output as JSON', false)
132
+ .option('--root <dir>', 'Workspace root', process.cwd())
133
+ .action(async (options) => {
134
+ const results = await searchBrain({
135
+ rootDir: path.resolve(options.root),
136
+ query: options.query,
137
+ project: options.project,
138
+ limit: parseInteger(options.limit, 10),
139
+ });
140
+ if (options.json) {
141
+ console.log(JSON.stringify(results, null, 2));
142
+ return;
143
+ }
144
+ if (results.length === 0) {
145
+ console.log('No matches found.');
146
+ return;
147
+ }
148
+ for (const result of results) {
149
+ console.log(`[${result.type}] ${result.projectId}/${result.id} :: ${result.title} (score=${result.score})`);
150
+ console.log(` ${result.snippet}`);
151
+ }
152
+ });
153
+ program
154
+ .command('ask')
155
+ .description('Ask a design question against the design brain')
156
+ .requiredOption('--query <text>', 'Question')
157
+ .option('--project <project>', 'Filter to project')
158
+ .option('--limit <n>', 'Context result count', '8')
159
+ .option('--llm-base-url <url>', 'OpenAI-compatible LLM base URL')
160
+ .option('--llm-api-key <key>', 'LLM API key')
161
+ .option('--llm-model <model>', 'LLM model id')
162
+ .option('--llm-timeout-ms <ms>', 'LLM timeout in milliseconds', '30000')
163
+ .option('--root <dir>', 'Workspace root', process.cwd())
164
+ .action(async (options) => {
165
+ const llm = resolveLlmConfig({
166
+ baseUrl: options.llmBaseUrl,
167
+ apiKey: options.llmApiKey,
168
+ model: options.llmModel,
169
+ timeoutMs: parseInteger(options.llmTimeoutMs, 30000),
170
+ });
171
+ const result = await askBrain({
172
+ rootDir: path.resolve(options.root),
173
+ query: options.query,
174
+ project: options.project,
175
+ limit: parseInteger(options.limit, 8),
176
+ llm,
177
+ });
178
+ console.log(result.answer);
179
+ if (result.matches.length > 0) {
180
+ console.log('\nSources:');
181
+ for (const match of result.matches.slice(0, 8)) {
182
+ console.log(`- [${match.type}] ${match.projectId}/${match.id}: ${match.title}`);
183
+ }
184
+ }
185
+ });
186
+ program
187
+ .command('install-skill')
188
+ .description('Install Design Brain skill into your local skills registry')
189
+ .option('--repo <repo>', 'Skill repository override', getDefaultSkillRepo())
190
+ .action(async (options) => {
191
+ const installed = installSkill(options.repo);
192
+ if (!installed) {
193
+ throw new Error(`Skill install failed. Try manually: npx -y skills add ${options.repo}`);
194
+ }
195
+ console.log(`Installed skill from ${options.repo}`);
196
+ });
197
+ program
198
+ .command('reindex')
199
+ .description('Regenerate markdown wiki and relation graph from database.json')
200
+ .option('--root <dir>', 'Workspace root', process.cwd())
201
+ .option('--no-visuals', 'Skip SVG visual generation')
202
+ .action(async (options) => {
203
+ await reindexBrain(path.resolve(options.root), !options.visuals);
204
+ console.log(`Reindexed ${path.resolve(options.root, '.design-brain')}`);
205
+ });
206
+ await program.parseAsync(process.argv);
207
+ }
208
+ main().catch((error) => {
209
+ console.error(error instanceof Error ? error.message : String(error));
210
+ process.exit(1);
211
+ });
212
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { IngestOptions, LlmConfig, OutcomeOptions } from './types.js';
2
+ export declare function initBrain(rootDir: string): Promise<void>;
3
+ export declare function ingestInspiration(options: IngestOptions): Promise<{
4
+ projectId: string;
5
+ inspirationId: string;
6
+ }>;
7
+ export declare function recordOutcome(options: OutcomeOptions): Promise<{
8
+ projectId: string;
9
+ outcomeId: string;
10
+ }>;
11
+ export declare function reindexBrain(rootDir: string, skipVisuals?: boolean): Promise<void>;
12
+ export declare function searchBrain(params: {
13
+ rootDir: string;
14
+ query: string;
15
+ project?: string;
16
+ limit?: number;
17
+ }): Promise<import("./query.js").SearchResult[]>;
18
+ export declare function askBrain(params: {
19
+ rootDir: string;
20
+ query: string;
21
+ project?: string;
22
+ limit?: number;
23
+ llm?: LlmConfig;
24
+ }): Promise<{
25
+ answer: string;
26
+ matches: import("./query.js").SearchResult[];
27
+ }>;