@vibebrowser/mcp 0.1.0 → 0.2.1
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 +105 -85
- package/dist/cli.js +7 -9
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +32 -12
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +153 -74
- package/dist/connection.js.map +1 -1
- package/dist/index.js +3 -23
- package/dist/index.js.map +1 -1
- package/dist/relay-daemon.d.ts +8 -0
- package/dist/relay-daemon.d.ts.map +1 -0
- package/dist/relay-daemon.js +13 -0
- package/dist/relay-daemon.js.map +1 -0
- package/dist/relay.d.ts +86 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +381 -0
- package/dist/relay.js.map +1 -0
- package/dist/server.js +11 -16
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -5
- package/dist/types.js.map +1 -1
- package/package.json +21 -8
package/README.md
CHANGED
|
@@ -1,34 +1,73 @@
|
|
|
1
|
-
# Vibe MCP
|
|
1
|
+
# Vibe MCP - Browser Automation for AI Agents
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@vibebrowser/mcp)
|
|
4
|
+
[](LICENSE)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
MCP server for [Vibe AI Browser](https://vibebrowser.app) - the **only browser automation tool that supports multiple AI agents simultaneously**.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
## Why Vibe MCP?
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
10
|
+
| Feature | Vibe MCP | Playwright MCP | BrowserMCP |
|
|
11
|
+
|---------|----------|----------------|------------|
|
|
12
|
+
| **Multi-Agent Support** | Yes | No | No |
|
|
13
|
+
| Uses Your Browser Profile | Yes | No | No |
|
|
14
|
+
| Logged-In Sessions | Yes | No | No |
|
|
15
|
+
| No Separate Browser | Yes | No | No |
|
|
16
|
+
| Local & Private | Yes | Yes | Partial |
|
|
17
|
+
| Content Script Based | Yes | No | No |
|
|
18
|
+
|
|
19
|
+
### Multi-Agent Architecture
|
|
20
|
+
|
|
21
|
+
Vibe MCP is the **only solution that allows multiple AI agents to control the same browser simultaneously**. Run Claude Desktop, Cursor, VS Code Copilot, and OpenCode all at once - they all share control of your browser through our relay architecture.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Claude Desktop Cursor VS Code OpenCode
|
|
25
|
+
| | | |
|
|
26
|
+
v v v v
|
|
27
|
+
[vibe-mcp] [vibe-mcp] [vibe-mcp] [vibe-mcp]
|
|
28
|
+
| | | |
|
|
29
|
+
+------------------+----------------+---------------+
|
|
30
|
+
|
|
|
31
|
+
v
|
|
32
|
+
[Relay Daemon] <-- Auto-spawned, handles multiplexing
|
|
33
|
+
|
|
|
34
|
+
v
|
|
35
|
+
[Vibe Extension]
|
|
36
|
+
|
|
|
37
|
+
v
|
|
38
|
+
[Your Chrome]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Competitors like Playwright MCP and BrowserMCP fail when you try to run multiple agents** - they get port conflicts or connection errors. Vibe MCP just works.
|
|
15
42
|
|
|
16
43
|
## Features
|
|
17
44
|
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
45
|
+
- **Multi-Agent Ready** - Run Claude, Cursor, VS Code, and more simultaneously
|
|
46
|
+
- **Uses Your Browser** - No separate browser instance, uses your existing Chrome with all your logins
|
|
47
|
+
- **Fast & Local** - Automation happens on your machine, no cloud latency
|
|
48
|
+
- **Private** - Your browsing data never leaves your device
|
|
49
|
+
- **Stable** - Content script based, no flaky CDP connections
|
|
22
50
|
|
|
23
|
-
##
|
|
51
|
+
## Quick Start
|
|
24
52
|
|
|
25
53
|
### 1. Install the Vibe Extension
|
|
26
54
|
|
|
27
|
-
Install the Vibe AI Browser extension
|
|
55
|
+
Install the Vibe AI Browser extension in Chrome, Brave, or any Chromium browser:
|
|
28
56
|
|
|
29
|
-
|
|
57
|
+
**Option A: Chrome Web Store (Recommended)**
|
|
58
|
+
1. Visit the [Chrome Web Store](https://chromewebstore.google.com/detail/vibe-ai-browser-co-pilot/djodpgokbmobeclicaicnnidccoinado)
|
|
59
|
+
2. Click "Add to Chrome"
|
|
60
|
+
3. The Vibe icon will appear in your toolbar
|
|
61
|
+
|
|
62
|
+
**Option B: Developer Version**
|
|
63
|
+
1. Download the [latest release ZIP](https://github.com/VibeTechnologies/VibeWebAgent/releases/latest/download/vibe-ai-copilot-latest.zip)
|
|
64
|
+
2. Extract to a permanent folder
|
|
65
|
+
3. Go to `chrome://extensions`, enable Developer Mode
|
|
66
|
+
4. Click "Load unpacked" and select the extracted folder
|
|
67
|
+
|
|
68
|
+
For detailed instructions, see the [installation guide](https://docs.vibebrowser.app/getting-started/extension).
|
|
30
69
|
|
|
31
|
-
|
|
70
|
+
### 2. Configure Your AI Application
|
|
32
71
|
|
|
33
72
|
<details>
|
|
34
73
|
<summary><strong>Claude Desktop</strong></summary>
|
|
@@ -56,7 +95,7 @@ Restart Claude Desktop after saving.
|
|
|
56
95
|
<summary><strong>Cursor</strong></summary>
|
|
57
96
|
|
|
58
97
|
1. Open Cursor Settings (Cmd/Ctrl + ,)
|
|
59
|
-
2. Go to "Features"
|
|
98
|
+
2. Go to "Features" -> "MCP Servers"
|
|
60
99
|
3. Click "Add Server" and add:
|
|
61
100
|
|
|
62
101
|
```json
|
|
@@ -88,8 +127,6 @@ Add to your VS Code settings.json:
|
|
|
88
127
|
}
|
|
89
128
|
```
|
|
90
129
|
|
|
91
|
-
Or use the MCP extension settings UI.
|
|
92
|
-
|
|
93
130
|
</details>
|
|
94
131
|
|
|
95
132
|
<details>
|
|
@@ -170,91 +207,76 @@ Add to your Codex configuration:
|
|
|
170
207
|
|
|
171
208
|
1. Open Chrome with the Vibe extension installed
|
|
172
209
|
2. Click the Vibe extension icon in the toolbar
|
|
173
|
-
3.
|
|
210
|
+
3. Go to Settings and enable "MCP External Control"
|
|
174
211
|
4. The status should show "Connected"
|
|
175
212
|
|
|
176
213
|
## Available Tools
|
|
177
214
|
|
|
178
|
-
The MCP server exposes all Vibe browser tools:
|
|
179
|
-
|
|
180
215
|
| Tool | Description |
|
|
181
216
|
|------|-------------|
|
|
182
|
-
| `navigate_to_url` | Navigate to
|
|
183
|
-
| `go_back`
|
|
184
|
-
| `
|
|
185
|
-
| `
|
|
186
|
-
| `type` | Type text into an element |
|
|
187
|
-
| `fill` | Fill a form field |
|
|
217
|
+
| `navigate_to_url` | Navigate to any URL |
|
|
218
|
+
| `go_back` / `go_forward` | Browser history navigation |
|
|
219
|
+
| `click` | Click elements on the page |
|
|
220
|
+
| `type` / `fill` | Enter text into inputs |
|
|
188
221
|
| `scroll` | Scroll the page |
|
|
189
|
-
| `take_screenshot` | Capture
|
|
190
|
-
| `get_page_content` |
|
|
191
|
-
| `
|
|
192
|
-
| `
|
|
193
|
-
| `switch_to_tab` | Switch to a tab |
|
|
194
|
-
| `close_tab` | Close a tab |
|
|
195
|
-
| `keyboard_shortcut` | Press keyboard shortcuts |
|
|
222
|
+
| `take_screenshot` | Capture screenshots |
|
|
223
|
+
| `get_page_content` | Extract page text/HTML |
|
|
224
|
+
| `get_tabs` / `create_new_tab` / `switch_to_tab` / `close_tab` | Tab management |
|
|
225
|
+
| `keyboard_shortcut` | Press keyboard combinations |
|
|
196
226
|
| `web_search` | Search the web |
|
|
197
227
|
|
|
198
|
-
##
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
npx @anthropic/vibe-mcp --help
|
|
202
|
-
|
|
203
|
-
Options:
|
|
204
|
-
-p, --port <number> WebSocket port for extension connection (default: 19989)
|
|
205
|
-
-d, --debug Enable debug logging
|
|
206
|
-
-h, --help Show help
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
## Architecture
|
|
228
|
+
## How It Works
|
|
210
229
|
|
|
211
230
|
```
|
|
212
231
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
213
|
-
│ AI Application
|
|
214
|
-
│ (Claude/Cursor) │stdio│
|
|
232
|
+
│ AI Application │────>│ Vibe MCP │────>│ Vibe Extension │
|
|
233
|
+
│ (Claude/Cursor) │stdio│ (this package) │ WS │ (Chrome) │
|
|
215
234
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
216
235
|
```
|
|
217
236
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
237
|
+
1. AI applications connect via MCP protocol (stdio)
|
|
238
|
+
2. Vibe MCP forwards commands to the browser extension via WebSocket
|
|
239
|
+
3. The extension executes actions in your actual browser
|
|
240
|
+
4. Results flow back to the AI
|
|
222
241
|
|
|
223
|
-
|
|
242
|
+
### Multi-Agent Mode
|
|
224
243
|
|
|
225
|
-
|
|
244
|
+
When multiple agents connect, Vibe MCP automatically spawns a relay daemon:
|
|
226
245
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
246
|
+
- First agent starts the relay (listens on ports 19988 and 19989)
|
|
247
|
+
- Additional agents connect to the relay as clients
|
|
248
|
+
- Relay multiplexes all agent requests to the single extension connection
|
|
249
|
+
- Each agent receives only its own responses
|
|
230
250
|
|
|
231
|
-
|
|
251
|
+
## CLI Options
|
|
232
252
|
|
|
233
|
-
|
|
253
|
+
```bash
|
|
254
|
+
npx @vibebrowser/mcp --help
|
|
234
255
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
"command": "npx",
|
|
240
|
-
"args": ["-y", "@anthropic/vibe-mcp", "--port", "19990"]
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
256
|
+
Options:
|
|
257
|
+
-p, --port <number> WebSocket port for extension (default: 19989)
|
|
258
|
+
-d, --debug Enable debug logging
|
|
259
|
+
-h, --help Show help
|
|
244
260
|
```
|
|
245
261
|
|
|
246
|
-
|
|
262
|
+
## Troubleshooting
|
|
263
|
+
|
|
264
|
+
### "No connection to Vibe extension"
|
|
265
|
+
|
|
266
|
+
1. Ensure the Vibe extension is installed in Chrome
|
|
267
|
+
2. Click the extension icon and enable "MCP External Control" in Settings
|
|
268
|
+
3. Check that no firewall is blocking localhost connections
|
|
247
269
|
|
|
248
270
|
### Debug mode
|
|
249
271
|
|
|
250
|
-
Enable debug logging to
|
|
272
|
+
Enable debug logging to diagnose issues:
|
|
251
273
|
|
|
252
274
|
```json
|
|
253
275
|
{
|
|
254
276
|
"mcpServers": {
|
|
255
277
|
"vibe": {
|
|
256
278
|
"command": "npx",
|
|
257
|
-
"args": ["-y", "@
|
|
279
|
+
"args": ["-y", "@vibebrowser/mcp", "--debug"]
|
|
258
280
|
}
|
|
259
281
|
}
|
|
260
282
|
}
|
|
@@ -263,27 +285,25 @@ Enable debug logging to see what's happening:
|
|
|
263
285
|
## Development
|
|
264
286
|
|
|
265
287
|
```bash
|
|
266
|
-
# Clone the repository
|
|
267
288
|
git clone https://github.com/VibeTechnologies/vibe-mcp.git
|
|
268
289
|
cd vibe-mcp
|
|
269
|
-
|
|
270
|
-
# Install dependencies
|
|
271
290
|
npm install
|
|
272
|
-
|
|
273
|
-
# Build
|
|
274
291
|
npm run build
|
|
275
|
-
|
|
276
|
-
# Run locally
|
|
277
292
|
node dist/cli.js --debug
|
|
278
293
|
```
|
|
279
294
|
|
|
295
|
+
## Keywords
|
|
296
|
+
|
|
297
|
+
browser automation, mcp server, model context protocol, ai browser control, claude desktop browser, cursor browser automation, web automation, chrome automation, ai agent browser, multi-agent browser control, playwright alternative, puppeteer alternative, browser mcp, web scraping ai, ai web agent
|
|
298
|
+
|
|
280
299
|
## License
|
|
281
300
|
|
|
282
301
|
Apache-2.0
|
|
283
302
|
|
|
284
303
|
## Links
|
|
285
304
|
|
|
286
|
-
- [Vibe AI Browser](https://vibebrowser.app)
|
|
287
|
-
- [Documentation](https://docs.vibebrowser.app)
|
|
288
|
-
- [
|
|
289
|
-
- [
|
|
305
|
+
- [Vibe AI Browser](https://vibebrowser.app) - Main product
|
|
306
|
+
- [Documentation](https://docs.vibebrowser.app) - Full docs
|
|
307
|
+
- [Chrome Extension](https://chromewebstore.google.com/detail/vibe-ai-web-agent/ajfjlohdpfgngdjfafhhcnpmijbbdgln) - Install extension
|
|
308
|
+
- [GitHub Issues](https://github.com/VibeTechnologies/vibe-mcp/issues) - Report bugs
|
|
309
|
+
- [npm Package](https://www.npmjs.com/package/@vibebrowser/mcp) - npm registry
|
package/dist/cli.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
2
|
/**
|
|
4
3
|
* Vibe MCP Server - CLI Entry Point
|
|
5
4
|
*
|
|
6
5
|
* Command-line interface for starting the MCP server.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
commander_1.program
|
|
7
|
+
import { program } from 'commander';
|
|
8
|
+
import { createServer } from './server.js';
|
|
9
|
+
import { DEFAULT_WS_PORT } from './types.js';
|
|
10
|
+
program
|
|
13
11
|
.name('vibe-mcp')
|
|
14
12
|
.description('MCP server for Vibe AI Browser - allows AI agents to control your browser')
|
|
15
13
|
.version('0.1.0')
|
|
16
|
-
.option('-p, --port <number>', 'WebSocket port for extension connection', String(
|
|
14
|
+
.option('-p, --port <number>', 'WebSocket port for extension connection', String(DEFAULT_WS_PORT))
|
|
17
15
|
.option('-d, --debug', 'Enable debug logging', false)
|
|
18
16
|
.action(async (options) => {
|
|
19
17
|
const port = parseInt(options.port, 10);
|
|
@@ -22,7 +20,7 @@ commander_1.program
|
|
|
22
20
|
process.exit(1);
|
|
23
21
|
}
|
|
24
22
|
try {
|
|
25
|
-
await
|
|
23
|
+
await createServer({
|
|
26
24
|
port,
|
|
27
25
|
debug: options.debug,
|
|
28
26
|
});
|
|
@@ -33,5 +31,5 @@ commander_1.program
|
|
|
33
31
|
process.exit(1);
|
|
34
32
|
}
|
|
35
33
|
});
|
|
36
|
-
|
|
34
|
+
program.parse();
|
|
37
35
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,2EAA2E,CAAC;KACxF,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;KACjG,MAAM,CAAC,aAAa,EAAE,sBAAsB,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAExC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC;YACjB,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/connection.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Vibe MCP Server -
|
|
2
|
+
* Vibe MCP Server - Relay Connection
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Connects to the relay server as a WebSocket client.
|
|
5
|
+
* The relay handles the actual extension connection.
|
|
5
6
|
*/
|
|
6
7
|
import { EventEmitter } from 'events';
|
|
7
8
|
import { ConnectionStatus, ToolDefinition, ToolResult, SnapshotResult } from './types.js';
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
+
* Relay connection manager
|
|
11
|
+
*
|
|
12
|
+
* Connects to the relay server instead of directly to the extension.
|
|
10
13
|
*/
|
|
11
14
|
export declare class ExtensionConnection extends EventEmitter {
|
|
12
|
-
private wss;
|
|
13
15
|
private ws;
|
|
14
16
|
private status;
|
|
15
17
|
private pendingRequests;
|
|
@@ -18,25 +20,39 @@ export declare class ExtensionConnection extends EventEmitter {
|
|
|
18
20
|
private debug;
|
|
19
21
|
private tools;
|
|
20
22
|
private reconnectTimer;
|
|
23
|
+
private extensionConnected;
|
|
21
24
|
constructor(port?: number, debug?: boolean);
|
|
22
25
|
/**
|
|
23
|
-
* Start
|
|
26
|
+
* Start connection to relay server
|
|
27
|
+
* Spawns relay daemon if not already running
|
|
24
28
|
*/
|
|
25
29
|
start(): Promise<void>;
|
|
26
30
|
/**
|
|
27
|
-
*
|
|
31
|
+
* Spawn relay daemon as detached process
|
|
28
32
|
*/
|
|
29
|
-
|
|
33
|
+
private spawnRelay;
|
|
34
|
+
/**
|
|
35
|
+
* Wait for relay to become available
|
|
36
|
+
*/
|
|
37
|
+
private waitForRelay;
|
|
38
|
+
/**
|
|
39
|
+
* Connect to the relay server
|
|
40
|
+
*/
|
|
41
|
+
private connectToRelay;
|
|
30
42
|
/**
|
|
31
|
-
*
|
|
43
|
+
* Schedule reconnection attempt
|
|
32
44
|
*/
|
|
33
|
-
private
|
|
45
|
+
private scheduleReconnect;
|
|
34
46
|
/**
|
|
35
|
-
*
|
|
47
|
+
* Stop the connection
|
|
48
|
+
*/
|
|
49
|
+
stop(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Handle message from relay
|
|
36
52
|
*/
|
|
37
53
|
private handleMessage;
|
|
38
54
|
/**
|
|
39
|
-
* Send a message to the extension and wait for response
|
|
55
|
+
* Send a message to the extension via relay and wait for response
|
|
40
56
|
*/
|
|
41
57
|
private sendRequest;
|
|
42
58
|
/**
|
|
@@ -56,13 +72,17 @@ export declare class ExtensionConnection extends EventEmitter {
|
|
|
56
72
|
*/
|
|
57
73
|
getSnapshot(): Promise<SnapshotResult>;
|
|
58
74
|
/**
|
|
59
|
-
* Check if extension is connected
|
|
75
|
+
* Check if extension is connected (via relay)
|
|
60
76
|
*/
|
|
61
77
|
isConnected(): boolean;
|
|
62
78
|
/**
|
|
63
79
|
* Get connection status
|
|
64
80
|
*/
|
|
65
81
|
getStatus(): ConnectionStatus;
|
|
82
|
+
/**
|
|
83
|
+
* Check if extension is connected to relay
|
|
84
|
+
*/
|
|
85
|
+
isExtensionConnected(): boolean;
|
|
66
86
|
/**
|
|
67
87
|
* Log message if debug is enabled
|
|
68
88
|
*/
|
package/dist/connection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EACL,gBAAgB,EAGhB,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,YAAY,CAAC;AAoBpB;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,kBAAkB,CAAkB;gBAEhC,IAAI,GAAE,MAAmB,EAAE,KAAK,GAAE,OAAe;IAM7D;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;YACW,UAAU;IAaxB;;OAEG;YACW,YAAY;IAoC1B;;OAEG;YACW,cAAc;IA6C5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmDrB;;OAEG;YACW,WAAW;IAiCzB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAM/C;;OAEG;IACH,QAAQ,IAAI,cAAc,EAAE;IAI5B;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IAI5C;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,SAAS,IAAI,gBAAgB;IAI7B;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
|