@clueprint/mcp 1.1.10

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 ADDED
@@ -0,0 +1,113 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/mariojankovic/clueprint/main/assets/logo.png" alt="clueprint" width="260" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <a href="https://www.npmjs.com/package/@clueprint/mcp"><img src="https://img.shields.io/npm/v/@clueprint/mcp.svg?style=flat-square&color=7c3aed" alt="npm version" /></a>
7
+ <a href="https://www.npmjs.com/package/@clueprint/mcp"><img src="https://img.shields.io/npm/dm/@clueprint/mcp.svg?style=flat-square&color=06b6d4" alt="npm downloads" /></a>
8
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-94a3b8.svg?style=flat-square" alt="license" /></a>
9
+ </p>
10
+
11
+ <p align="center">
12
+ Give your AI coding assistant eyes on the browser.<br/>
13
+ Select elements, capture regions, record flows — all visible to Claude via MCP.
14
+ </p>
15
+
16
+ ---
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ npx @clueprint/mcp setup
22
+ ```
23
+
24
+ The setup wizard installs the Chrome extension, configures the MCP server, and connects everything to Claude Code. Follow the on-screen instructions to load the extension.
25
+
26
+ ## What it does
27
+
28
+ Instead of describing what you see or copy-pasting HTML, clueprint lets your AI assistant observe the browser directly:
29
+
30
+ | Action | What gets captured |
31
+ | --- | --- |
32
+ | **Cmd+Shift+S** to inspect, then click | Tag, classes, attributes, computed styles, parent context, related console errors |
33
+ | **Cmd+Shift+X** to select region, then drag | Screenshot, all elements within bounds, DOM structure, visual analysis |
34
+ | **Record a flow** (via widget) | Clicks, scrolls, inputs, network requests, console errors, layout shifts |
35
+ | **Activity buffer** (last 30s) | Background capture of interactions, network, and errors without explicit recording |
36
+ | **Run an audit** | Console errors, network failures, performance metrics, accessibility issues |
37
+ | **Snapshot & diff DOM** | Capture DOM state, compare before/after to see what changed |
38
+
39
+ All data flows through [MCP](https://modelcontextprotocol.io) so any compatible assistant can access it.
40
+
41
+ ## How it works
42
+
43
+ ```
44
+ ┌─────────────┐ WebSocket ┌────────────┐ MCP ┌─────────────┐
45
+ │ Chrome │ ◄──────────────────► │ MCP │ ◄──────────────► │ Claude │
46
+ │ Extension │ │ Server │ │ Code │
47
+ └─────────────┘ └────────────┘ └─────────────┘
48
+ Captures DOM, Exposes tools Calls tools to
49
+ styles, network, for browser understand what
50
+ console, screenshots visibility you're seeing
51
+ ```
52
+
53
+ ## CLI
54
+
55
+ ```bash
56
+ npx @clueprint/mcp setup # install extension + configure MCP
57
+ npx @clueprint/mcp status # check installation health
58
+ npx @clueprint/mcp start # start MCP server manually
59
+ ```
60
+
61
+ ## Manual setup
62
+
63
+ <details>
64
+ <summary>If you prefer to configure things yourself</summary>
65
+
66
+ ### Build
67
+
68
+ ```bash
69
+ pnpm install && pnpm run build
70
+ ```
71
+
72
+ ### Load the extension
73
+
74
+ 1. Open `chrome://extensions/`
75
+ 2. Enable **Developer mode**
76
+ 3. Click **Load unpacked** → select `packages/chrome-extension/dist`
77
+
78
+ ### Configure MCP
79
+
80
+ Add to your Claude Code MCP config:
81
+
82
+ ```json
83
+ {
84
+ "mcpServers": {
85
+ "clueprint": {
86
+ "command": "node",
87
+ "args": ["/path/to/clueprint/packages/mcp-server/dist/index.js"]
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ </details>
94
+
95
+ ## Development
96
+
97
+ ```bash
98
+ # Watch extension
99
+ cd packages/chrome-extension && pnpm run watch
100
+
101
+ # Watch MCP server
102
+ cd packages/mcp-server && pnpm run dev
103
+ ```
104
+
105
+ ## Requirements
106
+
107
+ - Node.js 18+
108
+ - Chrome
109
+ - Claude Code (or any MCP-compatible assistant)
110
+
111
+ ## License
112
+
113
+ MIT
Binary file
@@ -0,0 +1,7 @@
1
+ interface SetupOptions {
2
+ skipBuild?: boolean;
3
+ skipMcp?: boolean;
4
+ }
5
+ export declare function setup(options: SetupOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAUA,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhE"}
@@ -0,0 +1,283 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ import { spawn, execSync } from 'child_process';
4
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync, rmSync } from 'fs';
5
+ import { join, dirname } from 'path';
6
+ import { homedir } from 'os';
7
+ import { fileURLToPath } from 'url';
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ export async function setup(options) {
10
+ p.intro(pc.bgCyan(pc.black(' clueprint setup ')));
11
+ const projectRoot = findProjectRoot();
12
+ if (projectRoot) {
13
+ await setupLocal(projectRoot, options);
14
+ }
15
+ else {
16
+ await setupFromNpm(options);
17
+ }
18
+ }
19
+ // --- Local dev mode (inside cloned repo) ---
20
+ async function setupLocal(projectRoot, options) {
21
+ // Step 1: Install dependencies
22
+ const depsSpinner = p.spinner();
23
+ depsSpinner.start('Installing dependencies...');
24
+ try {
25
+ await runCommand('pnpm', ['install'], { cwd: projectRoot });
26
+ depsSpinner.stop('Dependencies installed');
27
+ }
28
+ catch (error) {
29
+ depsSpinner.stop('Failed to install dependencies');
30
+ p.log.error('Make sure pnpm is installed: npm install -g pnpm');
31
+ process.exit(1);
32
+ }
33
+ // Step 2: Build extension and MCP server
34
+ if (!options.skipBuild) {
35
+ const buildSpinner = p.spinner();
36
+ buildSpinner.start('Building Chrome extension...');
37
+ try {
38
+ await runCommand('pnpm', ['run', 'build:extension'], { cwd: projectRoot });
39
+ buildSpinner.message('Building MCP server...');
40
+ await runCommand('pnpm', ['run', 'build:server'], { cwd: projectRoot });
41
+ buildSpinner.stop('Extension and MCP server built');
42
+ }
43
+ catch (error) {
44
+ buildSpinner.stop('Build failed');
45
+ p.log.error('Check the error output above');
46
+ process.exit(1);
47
+ }
48
+ }
49
+ else {
50
+ p.log.info('Skipping build (--skip-build flag)');
51
+ }
52
+ // Step 3: Configure MCP for Claude Code
53
+ if (!options.skipMcp) {
54
+ const serverPath = join(projectRoot, 'packages/mcp-server/dist/index.js');
55
+ await configureMcp({ command: 'node', args: [serverPath] });
56
+ }
57
+ else {
58
+ p.log.info('Skipping MCP configuration (--skip-mcp flag)');
59
+ }
60
+ // Step 4: Verify installation
61
+ const verifySpinner = p.spinner();
62
+ verifySpinner.start('Verifying installation...');
63
+ const issues = [];
64
+ const extensionDist = join(projectRoot, 'packages/chrome-extension/dist');
65
+ if (!existsSync(extensionDist)) {
66
+ issues.push('Extension not built');
67
+ }
68
+ const mcpDist = join(projectRoot, 'packages/mcp-server/dist');
69
+ if (!existsSync(mcpDist)) {
70
+ issues.push('MCP server not built');
71
+ }
72
+ if (issues.length === 0) {
73
+ verifySpinner.stop('Installation verified');
74
+ }
75
+ else {
76
+ verifySpinner.stop('Installation incomplete');
77
+ issues.forEach(issue => p.log.warn(issue));
78
+ }
79
+ // Print completion message
80
+ const extensionPath = join(projectRoot, 'packages/chrome-extension/dist');
81
+ p.note(`${pc.bold('Load the Chrome extension:')}\n` +
82
+ ` ${pc.dim('1.')} Open ${pc.cyan('chrome://extensions/')}\n` +
83
+ ` ${pc.dim('2.')} Enable ${pc.cyan('Developer mode')}\n` +
84
+ ` ${pc.dim('3.')} Click ${pc.cyan('Load unpacked')}\n` +
85
+ ` ${pc.dim('4.')} Select:\n` +
86
+ ` ${pc.dim(extensionPath)}\n\n` +
87
+ `${pc.bold('Then restart Claude Code')} to load the MCP server`, 'Next steps');
88
+ p.outro(pc.green('Setup complete! Happy debugging ') + pc.cyan(''));
89
+ }
90
+ // --- npm mode (installed via npx @clueprint/mcp setup) ---
91
+ async function setupFromNpm(options) {
92
+ const clueprintDir = join(homedir(), '.clueprint');
93
+ // Resolve bundled assets relative to CLI location
94
+ // In the published package: cli/commands/setup.js → ../../extension/ and ../../server/
95
+ const packageRoot = join(__dirname, '..', '..');
96
+ const bundledExtension = join(packageRoot, 'extension');
97
+ const bundledServer = join(packageRoot, 'server');
98
+ // Verify bundled assets exist
99
+ if (!existsSync(bundledExtension)) {
100
+ p.cancel('Bundled extension not found. The package may be corrupted.');
101
+ process.exit(1);
102
+ }
103
+ if (!existsSync(bundledServer)) {
104
+ p.cancel('Bundled MCP server not found. The package may be corrupted.');
105
+ process.exit(1);
106
+ }
107
+ // Step 1: Copy extension + server to ~/.clueprint/
108
+ const copySpinner = p.spinner();
109
+ copySpinner.start('Installing Chrome extension and MCP server...');
110
+ try {
111
+ mkdirSync(clueprintDir, { recursive: true });
112
+ // Clean previous install to remove stale files from older versions
113
+ const extDest = join(clueprintDir, 'extension');
114
+ const serverDest = join(clueprintDir, 'server');
115
+ if (existsSync(extDest))
116
+ rmSync(extDest, { recursive: true });
117
+ if (existsSync(serverDest))
118
+ rmSync(serverDest, { recursive: true });
119
+ cpSync(bundledExtension, extDest, { recursive: true });
120
+ cpSync(bundledServer, serverDest, { recursive: true });
121
+ copySpinner.stop('Chrome extension and MCP server installed');
122
+ }
123
+ catch (error) {
124
+ copySpinner.stop('Installation failed');
125
+ p.log.error(`Could not copy files to ${clueprintDir}`);
126
+ process.exit(1);
127
+ }
128
+ // Step 2: Configure MCP for Claude Code (npx for automatic updates)
129
+ if (!options.skipMcp) {
130
+ await configureMcp({ command: 'npx', args: ['-y', '@clueprint/mcp'] });
131
+ }
132
+ else {
133
+ p.log.info('Skipping MCP configuration (--skip-mcp flag)');
134
+ }
135
+ // Step 3: Verify
136
+ const verifySpinner = p.spinner();
137
+ verifySpinner.start('Verifying installation...');
138
+ const issues = [];
139
+ if (!existsSync(join(clueprintDir, 'extension', 'manifest.json'))) {
140
+ issues.push('Extension not installed correctly');
141
+ }
142
+ if (!existsSync(join(clueprintDir, 'server', 'index.cjs'))) {
143
+ issues.push('MCP server not installed correctly');
144
+ }
145
+ if (issues.length === 0) {
146
+ verifySpinner.stop('Installation verified');
147
+ }
148
+ else {
149
+ verifySpinner.stop('Installation incomplete');
150
+ issues.forEach(issue => p.log.warn(issue));
151
+ }
152
+ // Print completion message
153
+ const extensionPath = join(clueprintDir, 'extension');
154
+ p.note(`${pc.bold('Load the Chrome extension:')}\n` +
155
+ ` ${pc.dim('1.')} Open ${pc.cyan('chrome://extensions/')}\n` +
156
+ ` ${pc.dim('2.')} Enable ${pc.cyan('Developer mode')}\n` +
157
+ ` ${pc.dim('3.')} Click ${pc.cyan('Load unpacked')}\n` +
158
+ ` ${pc.dim('4.')} Select:\n` +
159
+ ` ${pc.dim(extensionPath)}\n\n` +
160
+ `${pc.bold('Then restart Claude Code')} to load the MCP server`, 'Next steps');
161
+ p.outro(pc.green('Setup complete! Happy debugging ') + pc.cyan(''));
162
+ }
163
+ // --- Shared utilities ---
164
+ function findProjectRoot() {
165
+ let dir = process.cwd();
166
+ while (dir !== '/') {
167
+ const packageJson = join(dir, 'package.json');
168
+ if (existsSync(packageJson)) {
169
+ try {
170
+ const pkg = JSON.parse(readFileSync(packageJson, 'utf-8'));
171
+ if (pkg.name === 'clueprint' || existsSync(join(dir, 'packages/chrome-extension'))) {
172
+ return dir;
173
+ }
174
+ }
175
+ catch {
176
+ // Continue searching
177
+ }
178
+ }
179
+ dir = dirname(dir);
180
+ }
181
+ return null;
182
+ }
183
+ function runCommand(command, args, options) {
184
+ return new Promise((resolve, reject) => {
185
+ const proc = spawn(command, args, {
186
+ cwd: options.cwd,
187
+ stdio: 'pipe',
188
+ shell: true,
189
+ });
190
+ let stderr = '';
191
+ proc.stderr?.on('data', (data) => {
192
+ stderr += data.toString();
193
+ });
194
+ proc.on('close', (code) => {
195
+ if (code === 0) {
196
+ resolve();
197
+ }
198
+ else {
199
+ reject(new Error(stderr || `Command failed with code ${code}`));
200
+ }
201
+ });
202
+ proc.on('error', reject);
203
+ });
204
+ }
205
+ /**
206
+ * Check if `claude` CLI is available in PATH.
207
+ */
208
+ function isClaudeCliAvailable() {
209
+ try {
210
+ execSync('claude --version', { stdio: 'pipe' });
211
+ return true;
212
+ }
213
+ catch {
214
+ return false;
215
+ }
216
+ }
217
+ /**
218
+ * Configure MCP server for Claude Code.
219
+ *
220
+ * Strategy:
221
+ * 1. Try `claude mcp add --scope user` (canonical, works in all projects)
222
+ * 2. Fall back to writing ~/.claude.json directly (the correct user-scope location)
223
+ *
224
+ * IMPORTANT: User-scope MCP config lives in ~/.claude.json (NOT ~/.claude/mcp.json).
225
+ * The ~/.claude/mcp.json file is NOT read for user-scope servers.
226
+ */
227
+ async function configureMcp(mcpConfig) {
228
+ const mcpSpinner = p.spinner();
229
+ mcpSpinner.start('Configuring MCP server for Claude Code...');
230
+ // Strategy 1: Use `claude mcp add` (official API)
231
+ if (isClaudeCliAvailable()) {
232
+ try {
233
+ // Remove existing entry first (ignore errors if not found)
234
+ try {
235
+ execSync('claude mcp remove clueprint --scope user', { stdio: 'pipe' });
236
+ }
237
+ catch {
238
+ // Not found, that's fine
239
+ }
240
+ // Build the command: claude mcp add --scope user --transport stdio clueprint -- <command> <args...>
241
+ const cmdArgs = [mcpConfig.command, ...mcpConfig.args].map(a => `"${a}"`).join(' ');
242
+ execSync(`claude mcp add --scope user --transport stdio clueprint -- ${cmdArgs}`, { stdio: 'pipe' });
243
+ mcpSpinner.stop('MCP server registered (user scope - works in all projects)');
244
+ p.log.success(`Command: ${pc.dim(`${mcpConfig.command} ${mcpConfig.args.join(' ')}`)}`);
245
+ return true;
246
+ }
247
+ catch (error) {
248
+ // Fall through to manual config
249
+ mcpSpinner.message('Falling back to manual configuration...');
250
+ }
251
+ }
252
+ // Strategy 2: Write to ~/.claude.json directly (user-scope config file)
253
+ const claudeConfigPath = join(homedir(), '.claude.json');
254
+ let config = {};
255
+ if (existsSync(claudeConfigPath)) {
256
+ try {
257
+ config = JSON.parse(readFileSync(claudeConfigPath, 'utf-8'));
258
+ }
259
+ catch {
260
+ config = {};
261
+ }
262
+ }
263
+ const mcpServers = (config.mcpServers || {});
264
+ mcpServers['clueprint'] = {
265
+ type: 'stdio',
266
+ command: mcpConfig.command,
267
+ args: mcpConfig.args,
268
+ };
269
+ config.mcpServers = mcpServers;
270
+ try {
271
+ writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2) + '\n');
272
+ mcpSpinner.stop('MCP server configured (user scope - works in all projects)');
273
+ p.log.success(`Config: ${pc.dim(claudeConfigPath)}`);
274
+ p.log.success(`Command: ${pc.dim(`${mcpConfig.command} ${mcpConfig.args.join(' ')}`)}`);
275
+ return true;
276
+ }
277
+ catch (error) {
278
+ mcpSpinner.stop('Failed to configure MCP server');
279
+ p.log.error(`Could not write to ${claudeConfigPath}`);
280
+ return false;
281
+ }
282
+ }
283
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface StartOptions {
2
+ port?: string;
3
+ }
4
+ export declare function startServer(options: StartOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GtE"}
@@ -0,0 +1,144 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ import { spawn } from 'child_process';
4
+ import { existsSync, readFileSync } from 'fs';
5
+ import { join, dirname } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ export async function startServer(options) {
9
+ const port = options.port || '7007';
10
+ const mcpServerPath = findServerPath();
11
+ if (!mcpServerPath) {
12
+ // Only use fancy output if interactive
13
+ if (process.stdin.isTTY) {
14
+ p.log.error('MCP server not found');
15
+ p.outro(pc.dim('Run: clueprint setup'));
16
+ }
17
+ else {
18
+ process.stderr.write('[MCP] Server not found\n');
19
+ }
20
+ process.exit(1);
21
+ }
22
+ // MCP stdio mode: stdin is not a TTY, so an MCP client is connected.
23
+ // Pass stdio through directly — no banners, no spinners, no color wrapping.
24
+ if (!process.stdin.isTTY) {
25
+ const serverProcess = spawn('node', [mcpServerPath], {
26
+ env: { ...process.env, PORT: port },
27
+ stdio: 'inherit',
28
+ });
29
+ serverProcess.on('error', (error) => {
30
+ process.stderr.write(`[MCP] Failed to start: ${error.message}\n`);
31
+ process.exit(1);
32
+ });
33
+ serverProcess.on('close', (code) => {
34
+ process.exit(code ?? 0);
35
+ });
36
+ return;
37
+ }
38
+ // Interactive mode: show fancy UI
39
+ p.intro(pc.bgCyan(pc.black(' clueprint start ')));
40
+ const spinner = p.spinner();
41
+ spinner.start('Starting MCP server...');
42
+ const serverProcess = spawn('node', [mcpServerPath], {
43
+ env: { ...process.env, PORT: port },
44
+ stdio: ['inherit', 'pipe', 'pipe'],
45
+ });
46
+ let started = false;
47
+ function checkStarted(output) {
48
+ return output.includes('Server started') ||
49
+ output.includes('listening') ||
50
+ output.includes('ready');
51
+ }
52
+ serverProcess.stdout?.on('data', (data) => {
53
+ const output = data.toString();
54
+ if (!started && checkStarted(output)) {
55
+ started = true;
56
+ spinner.stop(`MCP server running`);
57
+ console.log();
58
+ console.log(pc.dim(' Press Ctrl+C to stop'));
59
+ console.log();
60
+ }
61
+ process.stdout.write(pc.dim(output));
62
+ });
63
+ serverProcess.stderr?.on('data', (data) => {
64
+ const output = data.toString();
65
+ if (!started && checkStarted(output)) {
66
+ started = true;
67
+ spinner.stop(`MCP server running`);
68
+ console.log();
69
+ console.log(pc.dim(' Press Ctrl+C to stop'));
70
+ console.log();
71
+ }
72
+ if (output.includes('error') || output.includes('Error')) {
73
+ process.stderr.write(pc.red(output));
74
+ }
75
+ else if (output.includes('warn') || output.includes('already in use')) {
76
+ process.stderr.write(pc.yellow(output));
77
+ }
78
+ else {
79
+ process.stderr.write(pc.dim(output));
80
+ }
81
+ });
82
+ serverProcess.on('error', (error) => {
83
+ spinner.stop('Failed to start server');
84
+ p.log.error(error.message);
85
+ process.exit(1);
86
+ });
87
+ serverProcess.on('close', (code) => {
88
+ if (code !== 0 && code !== null) {
89
+ console.log(pc.red(`Server exited with code ${code}`));
90
+ process.exit(code);
91
+ }
92
+ });
93
+ process.on('SIGINT', () => {
94
+ console.log('\n');
95
+ serverProcess.kill('SIGTERM');
96
+ setTimeout(() => {
97
+ p.outro(pc.dim('Server stopped'));
98
+ process.exit(0);
99
+ }, 300);
100
+ });
101
+ await new Promise(() => { });
102
+ }
103
+ function findServerPath() {
104
+ // 1. Published package: server is sibling to cli/ directory
105
+ // publish/cli/commands/start.js → publish/server/index.cjs
106
+ const publishedPath = join(__dirname, '..', '..', 'server', 'index.cjs');
107
+ if (existsSync(publishedPath)) {
108
+ return publishedPath;
109
+ }
110
+ // 2. Local dev: find project root and use packages/mcp-server/dist/index.js
111
+ const projectRoot = findProjectRoot();
112
+ if (projectRoot) {
113
+ const devPath = join(projectRoot, 'packages/mcp-server/dist/index.js');
114
+ if (existsSync(devPath)) {
115
+ return devPath;
116
+ }
117
+ }
118
+ // 3. Installed at ~/.clueprint/server/index.cjs
119
+ const homePath = join(process.env.HOME || '', '.clueprint', 'server', 'index.cjs');
120
+ if (existsSync(homePath)) {
121
+ return homePath;
122
+ }
123
+ return null;
124
+ }
125
+ function findProjectRoot() {
126
+ let dir = process.cwd();
127
+ while (dir !== '/') {
128
+ const packageJson = join(dir, 'package.json');
129
+ if (existsSync(packageJson)) {
130
+ try {
131
+ const pkg = JSON.parse(readFileSync(packageJson, 'utf-8'));
132
+ if (pkg.name === 'clueprint' || existsSync(join(dir, 'packages/chrome-extension'))) {
133
+ return dir;
134
+ }
135
+ }
136
+ catch {
137
+ // Continue searching
138
+ }
139
+ }
140
+ dir = dirname(dir);
141
+ }
142
+ return null;
143
+ }
144
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function status(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAgBA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA+I5C"}