@vibebrowser/mcp 0.1.0 → 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.
- package/README.md +92 -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,35 +1,61 @@
|
|
|
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
|
-
|
|
55
|
+
Get the Vibe AI Browser extension from [vibebrowser.app](https://vibebrowser.app) or the [Chrome Web Store](https://chromewebstore.google.com/detail/vibe-ai-web-agent/ajfjlohdpfgngdjfafhhcnpmijbbdgln).
|
|
28
56
|
|
|
29
57
|
### 2. Configure Your AI Application
|
|
30
58
|
|
|
31
|
-
Add the Vibe MCP server to your AI application's configuration:
|
|
32
|
-
|
|
33
59
|
<details>
|
|
34
60
|
<summary><strong>Claude Desktop</strong></summary>
|
|
35
61
|
|
|
@@ -56,7 +82,7 @@ Restart Claude Desktop after saving.
|
|
|
56
82
|
<summary><strong>Cursor</strong></summary>
|
|
57
83
|
|
|
58
84
|
1. Open Cursor Settings (Cmd/Ctrl + ,)
|
|
59
|
-
2. Go to "Features"
|
|
85
|
+
2. Go to "Features" -> "MCP Servers"
|
|
60
86
|
3. Click "Add Server" and add:
|
|
61
87
|
|
|
62
88
|
```json
|
|
@@ -88,8 +114,6 @@ Add to your VS Code settings.json:
|
|
|
88
114
|
}
|
|
89
115
|
```
|
|
90
116
|
|
|
91
|
-
Or use the MCP extension settings UI.
|
|
92
|
-
|
|
93
117
|
</details>
|
|
94
118
|
|
|
95
119
|
<details>
|
|
@@ -170,91 +194,76 @@ Add to your Codex configuration:
|
|
|
170
194
|
|
|
171
195
|
1. Open Chrome with the Vibe extension installed
|
|
172
196
|
2. Click the Vibe extension icon in the toolbar
|
|
173
|
-
3.
|
|
197
|
+
3. Go to Settings and enable "MCP External Control"
|
|
174
198
|
4. The status should show "Connected"
|
|
175
199
|
|
|
176
200
|
## Available Tools
|
|
177
201
|
|
|
178
|
-
The MCP server exposes all Vibe browser tools:
|
|
179
|
-
|
|
180
202
|
| Tool | Description |
|
|
181
203
|
|------|-------------|
|
|
182
|
-
| `navigate_to_url` | Navigate to
|
|
183
|
-
| `go_back`
|
|
184
|
-
| `
|
|
185
|
-
| `
|
|
186
|
-
| `type` | Type text into an element |
|
|
187
|
-
| `fill` | Fill a form field |
|
|
204
|
+
| `navigate_to_url` | Navigate to any URL |
|
|
205
|
+
| `go_back` / `go_forward` | Browser history navigation |
|
|
206
|
+
| `click` | Click elements on the page |
|
|
207
|
+
| `type` / `fill` | Enter text into inputs |
|
|
188
208
|
| `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 |
|
|
209
|
+
| `take_screenshot` | Capture screenshots |
|
|
210
|
+
| `get_page_content` | Extract page text/HTML |
|
|
211
|
+
| `get_tabs` / `create_new_tab` / `switch_to_tab` / `close_tab` | Tab management |
|
|
212
|
+
| `keyboard_shortcut` | Press keyboard combinations |
|
|
196
213
|
| `web_search` | Search the web |
|
|
197
214
|
|
|
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
|
|
215
|
+
## How It Works
|
|
210
216
|
|
|
211
217
|
```
|
|
212
218
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
213
|
-
│ AI Application
|
|
214
|
-
│ (Claude/Cursor) │stdio│
|
|
219
|
+
│ AI Application │────>│ Vibe MCP │────>│ Vibe Extension │
|
|
220
|
+
│ (Claude/Cursor) │stdio│ (this package) │ WS │ (Chrome) │
|
|
215
221
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
216
222
|
```
|
|
217
223
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
224
|
+
1. AI applications connect via MCP protocol (stdio)
|
|
225
|
+
2. Vibe MCP forwards commands to the browser extension via WebSocket
|
|
226
|
+
3. The extension executes actions in your actual browser
|
|
227
|
+
4. Results flow back to the AI
|
|
222
228
|
|
|
223
|
-
|
|
229
|
+
### Multi-Agent Mode
|
|
224
230
|
|
|
225
|
-
|
|
231
|
+
When multiple agents connect, Vibe MCP automatically spawns a relay daemon:
|
|
226
232
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
233
|
+
- First agent starts the relay (listens on ports 19988 and 19989)
|
|
234
|
+
- Additional agents connect to the relay as clients
|
|
235
|
+
- Relay multiplexes all agent requests to the single extension connection
|
|
236
|
+
- Each agent receives only its own responses
|
|
230
237
|
|
|
231
|
-
|
|
238
|
+
## CLI Options
|
|
232
239
|
|
|
233
|
-
|
|
240
|
+
```bash
|
|
241
|
+
npx @vibebrowser/mcp --help
|
|
234
242
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
"command": "npx",
|
|
240
|
-
"args": ["-y", "@anthropic/vibe-mcp", "--port", "19990"]
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
243
|
+
Options:
|
|
244
|
+
-p, --port <number> WebSocket port for extension (default: 19989)
|
|
245
|
+
-d, --debug Enable debug logging
|
|
246
|
+
-h, --help Show help
|
|
244
247
|
```
|
|
245
248
|
|
|
246
|
-
|
|
249
|
+
## Troubleshooting
|
|
250
|
+
|
|
251
|
+
### "No connection to Vibe extension"
|
|
252
|
+
|
|
253
|
+
1. Ensure the Vibe extension is installed in Chrome
|
|
254
|
+
2. Click the extension icon and enable "MCP External Control" in Settings
|
|
255
|
+
3. Check that no firewall is blocking localhost connections
|
|
247
256
|
|
|
248
257
|
### Debug mode
|
|
249
258
|
|
|
250
|
-
Enable debug logging to
|
|
259
|
+
Enable debug logging to diagnose issues:
|
|
251
260
|
|
|
252
261
|
```json
|
|
253
262
|
{
|
|
254
263
|
"mcpServers": {
|
|
255
264
|
"vibe": {
|
|
256
265
|
"command": "npx",
|
|
257
|
-
"args": ["-y", "@
|
|
266
|
+
"args": ["-y", "@vibebrowser/mcp", "--debug"]
|
|
258
267
|
}
|
|
259
268
|
}
|
|
260
269
|
}
|
|
@@ -263,27 +272,25 @@ Enable debug logging to see what's happening:
|
|
|
263
272
|
## Development
|
|
264
273
|
|
|
265
274
|
```bash
|
|
266
|
-
# Clone the repository
|
|
267
275
|
git clone https://github.com/VibeTechnologies/vibe-mcp.git
|
|
268
276
|
cd vibe-mcp
|
|
269
|
-
|
|
270
|
-
# Install dependencies
|
|
271
277
|
npm install
|
|
272
|
-
|
|
273
|
-
# Build
|
|
274
278
|
npm run build
|
|
275
|
-
|
|
276
|
-
# Run locally
|
|
277
279
|
node dist/cli.js --debug
|
|
278
280
|
```
|
|
279
281
|
|
|
282
|
+
## Keywords
|
|
283
|
+
|
|
284
|
+
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
|
|
285
|
+
|
|
280
286
|
## License
|
|
281
287
|
|
|
282
288
|
Apache-2.0
|
|
283
289
|
|
|
284
290
|
## Links
|
|
285
291
|
|
|
286
|
-
- [Vibe AI Browser](https://vibebrowser.app)
|
|
287
|
-
- [Documentation](https://docs.vibebrowser.app)
|
|
288
|
-
- [
|
|
289
|
-
- [
|
|
292
|
+
- [Vibe AI Browser](https://vibebrowser.app) - Main product
|
|
293
|
+
- [Documentation](https://docs.vibebrowser.app) - Full docs
|
|
294
|
+
- [Chrome Extension](https://chromewebstore.google.com/detail/vibe-ai-web-agent/ajfjlohdpfgngdjfafhhcnpmijbbdgln) - Install extension
|
|
295
|
+
- [GitHub Issues](https://github.com/VibeTechnologies/vibe-mcp/issues) - Report bugs
|
|
296
|
+
- [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"}
|