@clueprint/mcp 1.1.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 (60) hide show
  1. package/README.md +113 -0
  2. package/assets/logo.png +0 -0
  3. package/cli/commands/setup.d.ts +7 -0
  4. package/cli/commands/setup.d.ts.map +1 -0
  5. package/cli/commands/setup.js +248 -0
  6. package/cli/commands/setup.js.map +1 -0
  7. package/cli/commands/start.d.ts +6 -0
  8. package/cli/commands/start.d.ts.map +1 -0
  9. package/cli/commands/start.js +115 -0
  10. package/cli/commands/start.js.map +1 -0
  11. package/cli/commands/status.d.ts +2 -0
  12. package/cli/commands/status.d.ts.map +1 -0
  13. package/cli/commands/status.js +186 -0
  14. package/cli/commands/status.js.map +1 -0
  15. package/cli/index.d.ts +3 -0
  16. package/cli/index.d.ts.map +1 -0
  17. package/cli/index.js +53 -0
  18. package/cli/index.js.map +1 -0
  19. package/cli/ui/banner.d.ts +8 -0
  20. package/cli/ui/banner.d.ts.map +1 -0
  21. package/cli/ui/banner.js +41 -0
  22. package/cli/ui/banner.js.map +1 -0
  23. package/extension/background/index.js +2 -0
  24. package/extension/content/index.js +986 -0
  25. package/extension/devtools/devtools.html +10 -0
  26. package/extension/devtools/devtools.js +1 -0
  27. package/extension/devtools/panel.css +1584 -0
  28. package/extension/devtools/panel.html +16 -0
  29. package/extension/devtools/panel.js +40 -0
  30. package/extension/icons/clueprint.png +0 -0
  31. package/extension/manifest.json +70 -0
  32. package/extension/popup/popup.css +1584 -0
  33. package/extension/popup/popup.html +16 -0
  34. package/extension/popup/popup.js +122 -0
  35. package/extension/styles/overlay.css +111 -0
  36. package/package.json +41 -0
  37. package/server/analysis/format.d.ts +21 -0
  38. package/server/analysis/format.d.ts.map +1 -0
  39. package/server/analysis/format.js +583 -0
  40. package/server/analysis/format.js.map +1 -0
  41. package/server/index.d.ts +7 -0
  42. package/server/index.d.ts.map +1 -0
  43. package/server/index.js +14 -0
  44. package/server/index.js.map +1 -0
  45. package/server/server.d.ts +8 -0
  46. package/server/server.d.ts.map +1 -0
  47. package/server/server.js +417 -0
  48. package/server/server.js.map +1 -0
  49. package/server/shared-state.d.ts +14 -0
  50. package/server/shared-state.d.ts.map +1 -0
  51. package/server/shared-state.js +131 -0
  52. package/server/shared-state.js.map +1 -0
  53. package/server/types/index.d.ts +239 -0
  54. package/server/types/index.d.ts.map +1 -0
  55. package/server/types/index.js +7 -0
  56. package/server/types/index.js.map +1 -0
  57. package/server/websocket.d.ts +55 -0
  58. package/server/websocket.d.ts.map +1 -0
  59. package/server/websocket.js +355 -0
  60. package/server/websocket.js.map +1 -0
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,248 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ import { spawn } from 'child_process';
4
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync } 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 mcpServerPath = join(projectRoot, 'packages/mcp-server/dist/index.js');
55
+ await configureMcp(mcpServerPath);
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 → ../server/ and ../extension/
95
+ const packageRoot = join(__dirname, '..', '..');
96
+ const bundledServer = join(packageRoot, 'server');
97
+ const bundledExtension = join(packageRoot, 'extension');
98
+ // Verify bundled assets exist
99
+ if (!existsSync(bundledServer) || !existsSync(bundledExtension)) {
100
+ p.cancel('Bundled assets not found. The package may be corrupted.');
101
+ process.exit(1);
102
+ }
103
+ // Step 1: Copy extension to ~/.clueprint/extension/
104
+ const copySpinner = p.spinner();
105
+ copySpinner.start('Installing Clueprint...');
106
+ try {
107
+ mkdirSync(clueprintDir, { recursive: true });
108
+ cpSync(bundledExtension, join(clueprintDir, 'extension'), { recursive: true });
109
+ copySpinner.message('Extension installed...');
110
+ cpSync(bundledServer, join(clueprintDir, 'server'), { recursive: true });
111
+ copySpinner.stop('Clueprint installed');
112
+ }
113
+ catch (error) {
114
+ copySpinner.stop('Installation failed');
115
+ p.log.error(`Could not copy files to ${clueprintDir}`);
116
+ process.exit(1);
117
+ }
118
+ // Step 2: Configure MCP for Claude Code
119
+ if (!options.skipMcp) {
120
+ const mcpServerPath = join(clueprintDir, 'server', 'index.js');
121
+ await configureMcp(mcpServerPath);
122
+ }
123
+ else {
124
+ p.log.info('Skipping MCP configuration (--skip-mcp flag)');
125
+ }
126
+ // Step 3: Verify
127
+ const verifySpinner = p.spinner();
128
+ verifySpinner.start('Verifying installation...');
129
+ const issues = [];
130
+ if (!existsSync(join(clueprintDir, 'extension', 'manifest.json'))) {
131
+ issues.push('Extension not installed correctly');
132
+ }
133
+ if (!existsSync(join(clueprintDir, 'server', 'index.js'))) {
134
+ issues.push('MCP server not installed correctly');
135
+ }
136
+ if (issues.length === 0) {
137
+ verifySpinner.stop('Installation verified');
138
+ }
139
+ else {
140
+ verifySpinner.stop('Installation incomplete');
141
+ issues.forEach(issue => p.log.warn(issue));
142
+ }
143
+ // Print completion message
144
+ const extensionPath = join(clueprintDir, 'extension');
145
+ p.note(`${pc.bold('Load the Chrome extension:')}\n` +
146
+ ` ${pc.dim('1.')} Open ${pc.cyan('chrome://extensions/')}\n` +
147
+ ` ${pc.dim('2.')} Enable ${pc.cyan('Developer mode')}\n` +
148
+ ` ${pc.dim('3.')} Click ${pc.cyan('Load unpacked')}\n` +
149
+ ` ${pc.dim('4.')} Select:\n` +
150
+ ` ${pc.dim(extensionPath)}\n\n` +
151
+ `${pc.bold('Then restart Claude Code')} to load the MCP server`, 'Next steps');
152
+ p.outro(pc.green('Setup complete! Happy debugging ') + pc.cyan(''));
153
+ }
154
+ // --- Shared utilities ---
155
+ function findProjectRoot() {
156
+ let dir = process.cwd();
157
+ while (dir !== '/') {
158
+ const packageJson = join(dir, 'package.json');
159
+ if (existsSync(packageJson)) {
160
+ try {
161
+ const pkg = JSON.parse(readFileSync(packageJson, 'utf-8'));
162
+ if (pkg.name === 'clueprint' || existsSync(join(dir, 'packages/chrome-extension'))) {
163
+ return dir;
164
+ }
165
+ }
166
+ catch {
167
+ // Continue searching
168
+ }
169
+ }
170
+ dir = dirname(dir);
171
+ }
172
+ return null;
173
+ }
174
+ function runCommand(command, args, options) {
175
+ return new Promise((resolve, reject) => {
176
+ const proc = spawn(command, args, {
177
+ cwd: options.cwd,
178
+ stdio: 'pipe',
179
+ shell: true,
180
+ });
181
+ let stderr = '';
182
+ proc.stderr?.on('data', (data) => {
183
+ stderr += data.toString();
184
+ });
185
+ proc.on('close', (code) => {
186
+ if (code === 0) {
187
+ resolve();
188
+ }
189
+ else {
190
+ reject(new Error(stderr || `Command failed with code ${code}`));
191
+ }
192
+ });
193
+ proc.on('error', reject);
194
+ });
195
+ }
196
+ async function configureMcp(mcpServerPath) {
197
+ const claudeConfigDir = join(homedir(), '.claude');
198
+ const claudeSettingsPath = join(claudeConfigDir, 'claude_desktop_config.json');
199
+ // Check if Claude Code config exists
200
+ if (!existsSync(claudeConfigDir)) {
201
+ const shouldCreate = await p.confirm({
202
+ message: 'Claude Code config not found. Create MCP configuration?',
203
+ initialValue: true,
204
+ });
205
+ if (p.isCancel(shouldCreate) || !shouldCreate) {
206
+ p.log.info('Skipping MCP configuration');
207
+ return false;
208
+ }
209
+ mkdirSync(claudeConfigDir, { recursive: true });
210
+ }
211
+ // Read existing config
212
+ let config = {};
213
+ if (existsSync(claudeSettingsPath)) {
214
+ try {
215
+ config = JSON.parse(readFileSync(claudeSettingsPath, 'utf-8'));
216
+ }
217
+ catch {
218
+ config = {};
219
+ }
220
+ }
221
+ const mcpServers = (config.mcpServers || {});
222
+ const existingClueprint = mcpServers['clueprint'];
223
+ if (existingClueprint) {
224
+ const shouldOverwrite = await p.confirm({
225
+ message: 'Clueprint MCP already configured. Overwrite?',
226
+ initialValue: false,
227
+ });
228
+ if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {
229
+ p.log.info('Keeping existing MCP configuration');
230
+ return true;
231
+ }
232
+ }
233
+ mcpServers['clueprint'] = {
234
+ command: 'node',
235
+ args: [mcpServerPath],
236
+ };
237
+ config.mcpServers = mcpServers;
238
+ try {
239
+ writeFileSync(claudeSettingsPath, JSON.stringify(config, null, 2));
240
+ p.log.success('MCP server configured for Claude Code');
241
+ return true;
242
+ }
243
+ catch (error) {
244
+ p.log.error(`Could not write to ${claudeSettingsPath}`);
245
+ return false;
246
+ }
247
+ }
248
+ //# 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,CAiGtE"}
@@ -0,0 +1,115 @@
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
+ p.intro(pc.bgCyan(pc.black(' clueprint start ')));
10
+ const port = options.port || '7007';
11
+ const projectRoot = findProjectRoot();
12
+ if (!projectRoot) {
13
+ p.log.error('Clueprint project not found');
14
+ p.outro(pc.red('Run from the project directory'));
15
+ process.exit(1);
16
+ }
17
+ const mcpServerPath = join(projectRoot, 'packages/mcp-server/dist/index.js');
18
+ if (!existsSync(mcpServerPath)) {
19
+ p.log.error('MCP server not built');
20
+ p.outro(pc.dim('Run: clueprint setup'));
21
+ process.exit(1);
22
+ }
23
+ const spinner = p.spinner();
24
+ spinner.start('Starting MCP server...');
25
+ const serverProcess = spawn('node', [mcpServerPath], {
26
+ env: { ...process.env, PORT: port },
27
+ stdio: ['inherit', 'pipe', 'pipe'],
28
+ });
29
+ let started = false;
30
+ // Helper to check for server started patterns
31
+ function checkStarted(output) {
32
+ return output.includes('Server started') ||
33
+ output.includes('listening') ||
34
+ output.includes('ready');
35
+ }
36
+ serverProcess.stdout?.on('data', (data) => {
37
+ const output = data.toString();
38
+ if (!started && checkStarted(output)) {
39
+ started = true;
40
+ spinner.stop(`MCP server running`);
41
+ console.log();
42
+ console.log(pc.dim(' Press Ctrl+C to stop'));
43
+ console.log();
44
+ }
45
+ process.stdout.write(pc.dim(output));
46
+ });
47
+ // Server logs often go to stderr - don't treat as error
48
+ serverProcess.stderr?.on('data', (data) => {
49
+ const output = data.toString();
50
+ // Check if this is actually a success message
51
+ if (!started && checkStarted(output)) {
52
+ started = true;
53
+ spinner.stop(`MCP server running`);
54
+ console.log();
55
+ console.log(pc.dim(' Press Ctrl+C to stop'));
56
+ console.log();
57
+ }
58
+ // Color warnings yellow, errors red, info dim
59
+ if (output.includes('error') || output.includes('Error')) {
60
+ process.stderr.write(pc.red(output));
61
+ }
62
+ else if (output.includes('warn') || output.includes('already in use')) {
63
+ process.stderr.write(pc.yellow(output));
64
+ }
65
+ else {
66
+ process.stderr.write(pc.dim(output));
67
+ }
68
+ });
69
+ serverProcess.on('error', (error) => {
70
+ spinner.stop('Failed to start server');
71
+ p.log.error(error.message);
72
+ process.exit(1);
73
+ });
74
+ serverProcess.on('close', (code) => {
75
+ if (code !== 0 && code !== null) {
76
+ console.log(pc.red(`Server exited with code ${code}`));
77
+ process.exit(code);
78
+ }
79
+ });
80
+ // Handle graceful shutdown
81
+ process.on('SIGINT', () => {
82
+ console.log('\n');
83
+ serverProcess.kill('SIGTERM');
84
+ setTimeout(() => {
85
+ p.outro(pc.dim('Server stopped'));
86
+ process.exit(0);
87
+ }, 300);
88
+ });
89
+ // Keep process running
90
+ await new Promise(() => { });
91
+ }
92
+ function findProjectRoot() {
93
+ let dir = process.cwd();
94
+ while (dir !== '/') {
95
+ const packageJson = join(dir, 'package.json');
96
+ if (existsSync(packageJson)) {
97
+ try {
98
+ const pkg = JSON.parse(readFileSync(packageJson, 'utf-8'));
99
+ if (pkg.name === 'clueprint' || existsSync(join(dir, 'packages/chrome-extension'))) {
100
+ return dir;
101
+ }
102
+ }
103
+ catch {
104
+ // Continue searching
105
+ }
106
+ }
107
+ dir = dirname(dir);
108
+ }
109
+ const globalRoot = join(__dirname, '../../../../..');
110
+ if (existsSync(join(globalRoot, 'packages/chrome-extension'))) {
111
+ return globalRoot;
112
+ }
113
+ return null;
114
+ }
115
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAM1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACrD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;IACpC,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3C,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;IAE7E,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACpC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE;QACnD,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;QACnC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;KACnC,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,8CAA8C;IAC9C,SAAS,YAAY,CAAC,MAAc;QAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE/B,8CAA8C;QAC9C,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,8CAA8C;QAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAExB,OAAO,GAAG,KAAK,GAAG,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC3D,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC;oBACnF,OAAO,GAAG,CAAC;gBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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,CAoK5C"}