@vibebrowser/mcp 0.2.2 → 0.2.4
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 +71 -12
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +37 -2
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +31 -9
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +80 -13
- package/dist/connection.js.map +1 -1
- package/dist/ollama.d.ts +21 -0
- package/dist/ollama.d.ts.map +1 -0
- package/dist/ollama.js +248 -0
- package/dist/ollama.js.map +1 -0
- package/dist/relay.d.ts +13 -0
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +80 -9
- package/dist/relay.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +48 -5
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -227,36 +227,95 @@ Add to your Codex configuration:
|
|
|
227
227
|
|
|
228
228
|
## How It Works
|
|
229
229
|
|
|
230
|
+
Default local mode (no flags):
|
|
231
|
+
|
|
230
232
|
```
|
|
231
|
-
|
|
232
|
-
│
|
|
233
|
-
|
|
234
|
-
|
|
233
|
+
Claude / Cursor / VS Code (stdio)
|
|
234
|
+
│
|
|
235
|
+
▼
|
|
236
|
+
[vibebrowser-mcp]
|
|
237
|
+
│ ws://127.0.0.1:19888
|
|
238
|
+
▼
|
|
239
|
+
Local Relay (auto-spawned)
|
|
240
|
+
│ ws://127.0.0.1:19889
|
|
241
|
+
▼
|
|
242
|
+
Vibe Extension (Chrome)
|
|
235
243
|
```
|
|
236
244
|
|
|
237
|
-
1. AI applications connect via MCP
|
|
238
|
-
2.
|
|
239
|
-
3. The
|
|
240
|
-
4. Results flow back to the
|
|
245
|
+
1. AI applications connect via MCP over stdio
|
|
246
|
+
2. `vibebrowser-mcp` (or `vibe-mcp`) connects to the local relay on port `19888`
|
|
247
|
+
3. The relay forwards commands to the extension on port `19889`
|
|
248
|
+
4. Results flow back to the agent
|
|
241
249
|
|
|
242
250
|
### Multi-Agent Mode
|
|
243
251
|
|
|
244
252
|
When multiple agents connect, Vibe MCP automatically spawns a relay daemon:
|
|
245
253
|
|
|
246
|
-
- First agent starts the relay (listens on ports
|
|
254
|
+
- First agent starts the relay (listens on ports 19888 and 19889)
|
|
247
255
|
- Additional agents connect to the relay as clients
|
|
248
256
|
- Relay multiplexes all agent requests to the single extension connection
|
|
249
257
|
- Each agent receives only its own responses
|
|
250
258
|
|
|
259
|
+
## Local LLM: `serve` Command
|
|
260
|
+
|
|
261
|
+
Run a local LLM with one command — no cloud API keys required. Automatically installs [Ollama](https://ollama.com), downloads the model, and starts serving an OpenAI-compatible API.
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
npx @vibebrowser/mcp serve qwen3.5
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
That's it. Works on **macOS**, **Linux**, and **Windows**.
|
|
268
|
+
|
|
269
|
+
### What it does
|
|
270
|
+
|
|
271
|
+
1. **Detects Ollama** → installs it if missing (via `brew`, `curl`, or `winget`)
|
|
272
|
+
2. **Starts the server** → launches `ollama serve` in the background
|
|
273
|
+
3. **Downloads the model** → streams download progress to your terminal
|
|
274
|
+
4. **Prints connection info** → ready to use with VibeBrowser or any OpenAI-compatible client
|
|
275
|
+
|
|
276
|
+
### Recommended models
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
npx @vibebrowser/mcp serve qwen3.5 # Best overall for agentic tasks
|
|
280
|
+
npx @vibebrowser/mcp serve llama4 # Strong general reasoning
|
|
281
|
+
npx @vibebrowser/mcp serve deepseek-r1 # Reasoning chains
|
|
282
|
+
npx @vibebrowser/mcp serve mistral # Lightweight & fast (7B)
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Options
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
npx @vibebrowser/mcp serve <model> [options]
|
|
289
|
+
|
|
290
|
+
Options:
|
|
291
|
+
-p, --port <number> Ollama API port (default: 11434)
|
|
292
|
+
-y, --yes Skip install confirmation prompts
|
|
293
|
+
-d, --debug Enable debug logging
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Using with VibeBrowser extension
|
|
297
|
+
|
|
298
|
+
After `serve` completes, configure the extension:
|
|
299
|
+
- **Model provider** → `ollama`
|
|
300
|
+
- **Model name** → the model you served (e.g., `qwen3.5`)
|
|
301
|
+
|
|
302
|
+
The extension connects to `http://localhost:11434/v1` automatically.
|
|
303
|
+
|
|
251
304
|
## CLI Options
|
|
252
305
|
|
|
253
306
|
```bash
|
|
254
307
|
npx @vibebrowser/mcp --help
|
|
255
308
|
|
|
256
|
-
|
|
257
|
-
|
|
309
|
+
# MCP server (default)
|
|
310
|
+
npx @vibebrowser/mcp [start] [options]
|
|
311
|
+
-p, --port <number> WebSocket port for local relay (agent) connection (default: 19888)
|
|
312
|
+
-d, --debug Enable debug logging
|
|
313
|
+
|
|
314
|
+
# Local LLM server
|
|
315
|
+
npx @vibebrowser/mcp serve <model> [options]
|
|
316
|
+
-p, --port <number> Ollama API port (default: 11434)
|
|
317
|
+
-y, --yes Skip confirmation prompts
|
|
258
318
|
-d, --debug Enable debug logging
|
|
259
|
-
-h, --help Show help
|
|
260
319
|
```
|
|
261
320
|
|
|
262
321
|
## Troubleshooting
|
package/dist/cli.d.ts
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
* Vibe MCP Server - CLI Entry Point
|
|
4
4
|
*
|
|
5
5
|
* Command-line interface for starting the MCP server.
|
|
6
|
+
*
|
|
7
|
+
* Modes:
|
|
8
|
+
* Local (default): connects to local relay daemon on localhost
|
|
9
|
+
* Remote (--remote <uuid>): connects to public relay at relay.api.vibebrowser.app
|
|
6
10
|
*/
|
|
7
11
|
export {};
|
|
8
12
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
package/dist/cli.js
CHANGED
|
@@ -3,16 +3,27 @@
|
|
|
3
3
|
* Vibe MCP Server - CLI Entry Point
|
|
4
4
|
*
|
|
5
5
|
* Command-line interface for starting the MCP server.
|
|
6
|
+
*
|
|
7
|
+
* Modes:
|
|
8
|
+
* Local (default): connects to local relay daemon on localhost
|
|
9
|
+
* Remote (--remote <uuid>): connects to public relay at relay.api.vibebrowser.app
|
|
6
10
|
*/
|
|
7
11
|
import { program } from 'commander';
|
|
8
12
|
import { createServer } from './server.js';
|
|
9
13
|
import { DEFAULT_WS_PORT } from './types.js';
|
|
14
|
+
import { serve } from './ollama.js';
|
|
10
15
|
program
|
|
11
16
|
.name('vibe-mcp')
|
|
12
17
|
.description('MCP server for Vibe AI Browser - allows AI agents to control your browser')
|
|
13
|
-
.version('0.
|
|
14
|
-
|
|
18
|
+
.version('0.2.3');
|
|
19
|
+
// Default command — start MCP server (existing behaviour)
|
|
20
|
+
program
|
|
21
|
+
.command('start', { isDefault: true })
|
|
22
|
+
.description('Start the MCP server (default)')
|
|
23
|
+
.option('-p, --port <number>', 'WebSocket port for local relay (agent) connection', String(DEFAULT_WS_PORT))
|
|
15
24
|
.option('-d, --debug', 'Enable debug logging', false)
|
|
25
|
+
.option('-r, --remote <uuid>', 'Connect to a remote extension via public relay (provide the extension UUID)')
|
|
26
|
+
.option('--relay-url <url>', 'Custom relay server URL (default: wss://relay.api.vibebrowser.app)')
|
|
16
27
|
.action(async (options) => {
|
|
17
28
|
const port = parseInt(options.port, 10);
|
|
18
29
|
if (isNaN(port) || port < 1024 || port > 65535) {
|
|
@@ -23,6 +34,8 @@ program
|
|
|
23
34
|
await createServer({
|
|
24
35
|
port,
|
|
25
36
|
debug: options.debug,
|
|
37
|
+
remoteUuid: options.remote,
|
|
38
|
+
remoteRelayUrl: options.relayUrl,
|
|
26
39
|
});
|
|
27
40
|
}
|
|
28
41
|
catch (error) {
|
|
@@ -31,5 +44,27 @@ program
|
|
|
31
44
|
process.exit(1);
|
|
32
45
|
}
|
|
33
46
|
});
|
|
47
|
+
// Serve command — one-liner local LLM setup via Ollama
|
|
48
|
+
program
|
|
49
|
+
.command('serve')
|
|
50
|
+
.description('Install Ollama (if needed), download a model, and start serving it locally')
|
|
51
|
+
.argument('<model>', 'Model to serve (e.g., qwen3.5, llama4, deepseek-r1, mistral)')
|
|
52
|
+
.option('-p, --port <number>', 'Ollama API port', '11434')
|
|
53
|
+
.option('-y, --yes', 'Skip confirmation prompts (auto-install)', false)
|
|
54
|
+
.option('-d, --debug', 'Enable debug logging', false)
|
|
55
|
+
.action(async (model, options) => {
|
|
56
|
+
try {
|
|
57
|
+
await serve(model, {
|
|
58
|
+
port: parseInt(options.port, 10),
|
|
59
|
+
yes: options.yes,
|
|
60
|
+
debug: options.debug,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
65
|
+
console.error(`Failed to serve model: ${message}`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
34
69
|
program.parse();
|
|
35
70
|
//# 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":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/connection.d.ts
CHANGED
|
@@ -2,14 +2,23 @@
|
|
|
2
2
|
* Vibe MCP Server - Relay Connection
|
|
3
3
|
*
|
|
4
4
|
* Connects to the relay server as a WebSocket client.
|
|
5
|
-
*
|
|
5
|
+
* Supports two modes:
|
|
6
|
+
* - Local: connects to local relay daemon at ws://127.0.0.1:19888
|
|
7
|
+
* - Remote: connects to public relay at wss://relay.api.vibebrowser.app/<uuid>
|
|
6
8
|
*/
|
|
7
9
|
import { EventEmitter } from 'events';
|
|
8
10
|
import { ConnectionStatus, ToolDefinition, ToolResult, SnapshotResult } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Remote relay configuration
|
|
13
|
+
*/
|
|
14
|
+
export interface RemoteConfig {
|
|
15
|
+
uuid: string;
|
|
16
|
+
relayUrl?: string;
|
|
17
|
+
}
|
|
9
18
|
/**
|
|
10
19
|
* Relay connection manager
|
|
11
20
|
*
|
|
12
|
-
* Connects to
|
|
21
|
+
* Connects to a relay server (local or remote) to reach the extension.
|
|
13
22
|
*/
|
|
14
23
|
export declare class ExtensionConnection extends EventEmitter {
|
|
15
24
|
private ws;
|
|
@@ -21,22 +30,30 @@ export declare class ExtensionConnection extends EventEmitter {
|
|
|
21
30
|
private tools;
|
|
22
31
|
private reconnectTimer;
|
|
23
32
|
private extensionConnected;
|
|
24
|
-
|
|
33
|
+
private remoteConfig;
|
|
34
|
+
constructor(port?: number, debug?: boolean, remote?: RemoteConfig);
|
|
25
35
|
/**
|
|
26
|
-
* Start connection to relay server
|
|
27
|
-
*
|
|
36
|
+
* Start connection to relay server.
|
|
37
|
+
* In local mode: spawns relay daemon if needed, then connects.
|
|
38
|
+
* In remote mode: connects directly to public relay.
|
|
28
39
|
*/
|
|
29
40
|
start(): Promise<void>;
|
|
30
41
|
/**
|
|
31
|
-
* Spawn relay daemon as detached process
|
|
42
|
+
* Spawn relay daemon as detached process (local mode only)
|
|
32
43
|
*/
|
|
33
44
|
private spawnRelay;
|
|
34
45
|
/**
|
|
35
|
-
* Wait for relay to become available
|
|
46
|
+
* Wait for local relay to become available
|
|
36
47
|
*/
|
|
37
48
|
private waitForRelay;
|
|
38
49
|
/**
|
|
39
|
-
*
|
|
50
|
+
* Get the WebSocket URL for connection.
|
|
51
|
+
* Local mode: ws://127.0.0.1:<port>
|
|
52
|
+
* Remote mode: wss://relay.api.vibebrowser.app/<uuid>
|
|
53
|
+
*/
|
|
54
|
+
private getRelayUrl;
|
|
55
|
+
/**
|
|
56
|
+
* Connect to the relay server (local or remote)
|
|
40
57
|
*/
|
|
41
58
|
private connectToRelay;
|
|
42
59
|
/**
|
|
@@ -58,7 +75,12 @@ export declare class ExtensionConnection extends EventEmitter {
|
|
|
58
75
|
/**
|
|
59
76
|
* Refresh available tools from extension
|
|
60
77
|
*/
|
|
61
|
-
refreshTools(): Promise<ToolDefinition[]>;
|
|
78
|
+
refreshTools(timeoutMs?: number): Promise<ToolDefinition[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Wait briefly for a tools update event without forcing a request.
|
|
81
|
+
* This keeps MCP startup responsive when extension announces tools asynchronously.
|
|
82
|
+
*/
|
|
83
|
+
waitForToolsUpdate(timeoutMs?: number): Promise<ToolDefinition[]>;
|
|
62
84
|
/**
|
|
63
85
|
* Get cached list of available tools
|
|
64
86
|
*/
|
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;;;;;;;GAOG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EACL,gBAAgB,EAGhB,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD;;;;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;IAC5C,OAAO,CAAC,YAAY,CAA6B;gBAErC,IAAI,GAAE,MAAmB,EAAE,KAAK,GAAE,OAAe,EAAE,MAAM,CAAC,EAAE,YAAY;IAOpF;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;YACW,UAAU;IAaxB;;OAEG;YACW,YAAY;IAoC1B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;YACW,cAAc;IAwD5B;;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,CAAC,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAMzE;;;OAGG;IACG,kBAAkB,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA8B9E;;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"}
|
package/dist/connection.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* Vibe MCP Server - Relay Connection
|
|
3
3
|
*
|
|
4
4
|
* Connects to the relay server as a WebSocket client.
|
|
5
|
-
*
|
|
5
|
+
* Supports two modes:
|
|
6
|
+
* - Local: connects to local relay daemon at ws://127.0.0.1:19888
|
|
7
|
+
* - Remote: connects to public relay at wss://relay.api.vibebrowser.app/<uuid>
|
|
6
8
|
*/
|
|
7
9
|
import WebSocket from 'ws';
|
|
8
10
|
import { EventEmitter } from 'events';
|
|
@@ -13,12 +15,18 @@ const NO_CONNECTION_MESSAGE = `No connection to Vibe extension. Please:
|
|
|
13
15
|
1. Install the Vibe AI Browser extension from https://vibebrowser.app
|
|
14
16
|
2. Click the Vibe extension icon in Chrome
|
|
15
17
|
3. Enable "MCP External Control" in Settings`;
|
|
18
|
+
const NO_CONNECTION_REMOTE_MESSAGE = `No connection to Vibe extension via remote relay. Please:
|
|
19
|
+
1. Install the Vibe AI Browser extension from https://vibebrowser.app
|
|
20
|
+
2. Open extension Settings > MCP External
|
|
21
|
+
3. Select "Remote" mode and note your Extension UUID
|
|
22
|
+
4. Make sure the extension is connected to the relay`;
|
|
16
23
|
const RELAY_CONNECT_TIMEOUT = 10000;
|
|
17
24
|
const RELAY_RECONNECT_DELAY = 2000;
|
|
25
|
+
const DEFAULT_RELAY_URL = 'wss://relay.api.vibebrowser.app';
|
|
18
26
|
/**
|
|
19
27
|
* Relay connection manager
|
|
20
28
|
*
|
|
21
|
-
* Connects to
|
|
29
|
+
* Connects to a relay server (local or remote) to reach the extension.
|
|
22
30
|
*/
|
|
23
31
|
export class ExtensionConnection extends EventEmitter {
|
|
24
32
|
ws = null;
|
|
@@ -30,17 +38,25 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
30
38
|
tools = [];
|
|
31
39
|
reconnectTimer = null;
|
|
32
40
|
extensionConnected = false;
|
|
33
|
-
|
|
41
|
+
remoteConfig = null;
|
|
42
|
+
constructor(port = AGENT_PORT, debug = false, remote) {
|
|
34
43
|
super();
|
|
35
44
|
this.port = port;
|
|
36
45
|
this.debug = debug;
|
|
46
|
+
this.remoteConfig = remote || null;
|
|
37
47
|
}
|
|
38
48
|
/**
|
|
39
|
-
* Start connection to relay server
|
|
40
|
-
*
|
|
49
|
+
* Start connection to relay server.
|
|
50
|
+
* In local mode: spawns relay daemon if needed, then connects.
|
|
51
|
+
* In remote mode: connects directly to public relay.
|
|
41
52
|
*/
|
|
42
53
|
async start() {
|
|
43
|
-
|
|
54
|
+
if (this.remoteConfig) {
|
|
55
|
+
this.log(`Remote mode: connecting to relay for UUID ${this.remoteConfig.uuid}`);
|
|
56
|
+
await this.connectToRelay();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Local mode: check if relay is already running
|
|
44
60
|
if (!isRelayRunning()) {
|
|
45
61
|
this.log('Starting relay daemon...');
|
|
46
62
|
await this.spawnRelay();
|
|
@@ -51,7 +67,7 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
51
67
|
await this.connectToRelay();
|
|
52
68
|
}
|
|
53
69
|
/**
|
|
54
|
-
* Spawn relay daemon as detached process
|
|
70
|
+
* Spawn relay daemon as detached process (local mode only)
|
|
55
71
|
*/
|
|
56
72
|
async spawnRelay() {
|
|
57
73
|
// Use __dirname equivalent for ESM
|
|
@@ -64,7 +80,7 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
64
80
|
this.log('Relay daemon spawned');
|
|
65
81
|
}
|
|
66
82
|
/**
|
|
67
|
-
* Wait for relay to become available
|
|
83
|
+
* Wait for local relay to become available
|
|
68
84
|
*/
|
|
69
85
|
async waitForRelay() {
|
|
70
86
|
const startTime = Date.now();
|
|
@@ -98,11 +114,23 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
98
114
|
throw new Error('Relay failed to start within timeout');
|
|
99
115
|
}
|
|
100
116
|
/**
|
|
101
|
-
*
|
|
117
|
+
* Get the WebSocket URL for connection.
|
|
118
|
+
* Local mode: ws://127.0.0.1:<port>
|
|
119
|
+
* Remote mode: wss://relay.api.vibebrowser.app/<uuid>
|
|
120
|
+
*/
|
|
121
|
+
getRelayUrl() {
|
|
122
|
+
if (this.remoteConfig) {
|
|
123
|
+
const base = this.remoteConfig.relayUrl || DEFAULT_RELAY_URL;
|
|
124
|
+
return `${base}/${this.remoteConfig.uuid}`;
|
|
125
|
+
}
|
|
126
|
+
return `ws://127.0.0.1:${this.port}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Connect to the relay server (local or remote)
|
|
102
130
|
*/
|
|
103
131
|
async connectToRelay() {
|
|
104
132
|
return new Promise((resolve, reject) => {
|
|
105
|
-
const url =
|
|
133
|
+
const url = this.getRelayUrl();
|
|
106
134
|
this.log(`Connecting to relay at ${url}...`);
|
|
107
135
|
try {
|
|
108
136
|
this.ws = new WebSocket(url);
|
|
@@ -125,6 +153,15 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
125
153
|
this.log('Disconnected from relay');
|
|
126
154
|
this.ws = null;
|
|
127
155
|
this.status = 'disconnected';
|
|
156
|
+
// Reject all pending requests — responses will never arrive on a
|
|
157
|
+
// closed socket. Without this, requests sit until their individual
|
|
158
|
+
// timeouts fire, and if the server reconnects before that the MCP
|
|
159
|
+
// client may retry, causing duplicate tool execution.
|
|
160
|
+
for (const [id, request] of this.pendingRequests) {
|
|
161
|
+
clearTimeout(request.timeout);
|
|
162
|
+
request.reject(new Error('Relay connection lost'));
|
|
163
|
+
}
|
|
164
|
+
this.pendingRequests.clear();
|
|
128
165
|
this.emit('disconnected');
|
|
129
166
|
// Schedule reconnect
|
|
130
167
|
this.scheduleReconnect();
|
|
@@ -232,7 +269,7 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
232
269
|
throw new Error('Not connected to relay');
|
|
233
270
|
}
|
|
234
271
|
if (!this.extensionConnected) {
|
|
235
|
-
throw new Error(NO_CONNECTION_MESSAGE);
|
|
272
|
+
throw new Error(this.remoteConfig ? NO_CONNECTION_REMOTE_MESSAGE : NO_CONNECTION_MESSAGE);
|
|
236
273
|
}
|
|
237
274
|
const requestId = `req_${++this.requestIdCounter}`;
|
|
238
275
|
return new Promise((resolve, reject) => {
|
|
@@ -253,11 +290,41 @@ export class ExtensionConnection extends EventEmitter {
|
|
|
253
290
|
/**
|
|
254
291
|
* Refresh available tools from extension
|
|
255
292
|
*/
|
|
256
|
-
async refreshTools() {
|
|
257
|
-
const tools = await this.sendRequest('list_tools');
|
|
293
|
+
async refreshTools(timeoutMs = 30_000) {
|
|
294
|
+
const tools = await this.sendRequest('list_tools', undefined, timeoutMs);
|
|
258
295
|
this.tools = tools;
|
|
259
296
|
return tools;
|
|
260
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Wait briefly for a tools update event without forcing a request.
|
|
300
|
+
* This keeps MCP startup responsive when extension announces tools asynchronously.
|
|
301
|
+
*/
|
|
302
|
+
async waitForToolsUpdate(timeoutMs = 1_500) {
|
|
303
|
+
if (this.tools.length > 0) {
|
|
304
|
+
return this.tools;
|
|
305
|
+
}
|
|
306
|
+
return new Promise((resolve) => {
|
|
307
|
+
const onToolsUpdated = (tools) => {
|
|
308
|
+
cleanup();
|
|
309
|
+
resolve(tools);
|
|
310
|
+
};
|
|
311
|
+
const onExtensionDisconnected = () => {
|
|
312
|
+
cleanup();
|
|
313
|
+
resolve(this.tools);
|
|
314
|
+
};
|
|
315
|
+
const timer = setTimeout(() => {
|
|
316
|
+
cleanup();
|
|
317
|
+
resolve(this.tools);
|
|
318
|
+
}, timeoutMs);
|
|
319
|
+
const cleanup = () => {
|
|
320
|
+
clearTimeout(timer);
|
|
321
|
+
this.off('tools_updated', onToolsUpdated);
|
|
322
|
+
this.off('extension_disconnected', onExtensionDisconnected);
|
|
323
|
+
};
|
|
324
|
+
this.on('tools_updated', onToolsUpdated);
|
|
325
|
+
this.on('extension_disconnected', onExtensionDisconnected);
|
|
326
|
+
});
|
|
327
|
+
}
|
|
261
328
|
/**
|
|
262
329
|
* Get cached list of available tools
|
|
263
330
|
*/
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/ollama.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama integration — detect, install, pull, serve.
|
|
3
|
+
*
|
|
4
|
+
* Provides a cross-platform (macOS / Linux / Windows) one-liner experience:
|
|
5
|
+
* npx @vibebrowser/mcp serve qwen3.5
|
|
6
|
+
*/
|
|
7
|
+
export interface ServeOptions {
|
|
8
|
+
/** Custom Ollama API port (default 11434) */
|
|
9
|
+
port?: number;
|
|
10
|
+
/** Skip auto-install prompt */
|
|
11
|
+
yes?: boolean;
|
|
12
|
+
/** Enable debug logging */
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function isOllamaInstalled(): boolean;
|
|
16
|
+
export declare function installOllama(opts?: ServeOptions): Promise<void>;
|
|
17
|
+
export declare function ensureOllamaServing(opts?: ServeOptions): Promise<string>;
|
|
18
|
+
export declare function isModelAvailable(model: string, base?: string): Promise<boolean>;
|
|
19
|
+
export declare function pullModel(model: string, base?: string): Promise<void>;
|
|
20
|
+
export declare function serve(model: string, opts?: ServeOptions): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA2BD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAgBD,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDtE;AAwBD,wBAAsB,mBAAmB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B9E;AAMD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CASjG;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DvF;AAMD,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC7E"}
|
package/dist/ollama.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama integration — detect, install, pull, serve.
|
|
3
|
+
*
|
|
4
|
+
* Provides a cross-platform (macOS / Linux / Windows) one-liner experience:
|
|
5
|
+
* npx @vibebrowser/mcp serve qwen3.5
|
|
6
|
+
*/
|
|
7
|
+
import { execSync, spawn } from 'child_process';
|
|
8
|
+
import { platform } from 'os';
|
|
9
|
+
import { createInterface } from 'readline';
|
|
10
|
+
/* ------------------------------------------------------------------ */
|
|
11
|
+
/* Constants */
|
|
12
|
+
/* ------------------------------------------------------------------ */
|
|
13
|
+
const OLLAMA_API = 'http://127.0.0.1:11434';
|
|
14
|
+
const HEALTH_POLL_MS = 500;
|
|
15
|
+
const HEALTH_TIMEOUT_MS = 15_000;
|
|
16
|
+
/* ------------------------------------------------------------------ */
|
|
17
|
+
/* Helpers */
|
|
18
|
+
/* ------------------------------------------------------------------ */
|
|
19
|
+
function log(msg) {
|
|
20
|
+
console.error(`[vibe-mcp] ${msg}`);
|
|
21
|
+
}
|
|
22
|
+
function debug(msg, opts) {
|
|
23
|
+
if (opts?.debug)
|
|
24
|
+
console.error(`[vibe-mcp:debug] ${msg}`);
|
|
25
|
+
}
|
|
26
|
+
/** Run a command and return trimmed stdout, or null on failure. */
|
|
27
|
+
function tryExec(cmd) {
|
|
28
|
+
try {
|
|
29
|
+
return execSync(cmd, { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/* ------------------------------------------------------------------ */
|
|
36
|
+
/* 1. Detection */
|
|
37
|
+
/* ------------------------------------------------------------------ */
|
|
38
|
+
export function isOllamaInstalled() {
|
|
39
|
+
return tryExec('ollama --version') !== null;
|
|
40
|
+
}
|
|
41
|
+
/* ------------------------------------------------------------------ */
|
|
42
|
+
/* 2. Installation */
|
|
43
|
+
/* ------------------------------------------------------------------ */
|
|
44
|
+
async function promptYesNo(question) {
|
|
45
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
rl.question(`${question} [Y/n] `, (answer) => {
|
|
48
|
+
rl.close();
|
|
49
|
+
resolve(answer.trim().toLowerCase() !== 'n');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export async function installOllama(opts) {
|
|
54
|
+
const os = platform();
|
|
55
|
+
if (!opts?.yes) {
|
|
56
|
+
const ok = await promptYesNo('Ollama is not installed. Install it now?');
|
|
57
|
+
if (!ok) {
|
|
58
|
+
log('Aborted. Install Ollama manually: https://ollama.com/download');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
log('Installing Ollama…');
|
|
63
|
+
switch (os) {
|
|
64
|
+
case 'darwin': {
|
|
65
|
+
// Prefer Homebrew, fall back to official script
|
|
66
|
+
const hasBrew = tryExec('brew --version') !== null;
|
|
67
|
+
if (hasBrew) {
|
|
68
|
+
execSync('brew install ollama', { stdio: 'inherit' });
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
execSync('curl -fsSL https://ollama.com/install.sh | sh', { stdio: 'inherit' });
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case 'linux':
|
|
76
|
+
execSync('curl -fsSL https://ollama.com/install.sh | sh', { stdio: 'inherit' });
|
|
77
|
+
break;
|
|
78
|
+
case 'win32':
|
|
79
|
+
// winget is available on Windows 10 1709+ and Windows 11
|
|
80
|
+
try {
|
|
81
|
+
execSync('winget install Ollama.Ollama --silent --accept-source-agreements --accept-package-agreements', { stdio: 'inherit' });
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
log('winget install failed. Download Ollama from https://ollama.com/download');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
log(`Unsupported platform: ${os}. Install Ollama manually: https://ollama.com/download`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Verify installation
|
|
93
|
+
if (!isOllamaInstalled()) {
|
|
94
|
+
log('Installation succeeded but `ollama` is not on PATH. You may need to restart your terminal.');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
log('Ollama installed ✓');
|
|
98
|
+
}
|
|
99
|
+
/* ------------------------------------------------------------------ */
|
|
100
|
+
/* 3. Server lifecycle */
|
|
101
|
+
/* ------------------------------------------------------------------ */
|
|
102
|
+
async function isOllamaRunning(base = OLLAMA_API) {
|
|
103
|
+
try {
|
|
104
|
+
const res = await fetch(`${base}/api/tags`);
|
|
105
|
+
return res.ok;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function waitForOllama(base = OLLAMA_API, timeoutMs = HEALTH_TIMEOUT_MS) {
|
|
112
|
+
const deadline = Date.now() + timeoutMs;
|
|
113
|
+
while (Date.now() < deadline) {
|
|
114
|
+
if (await isOllamaRunning(base))
|
|
115
|
+
return;
|
|
116
|
+
await new Promise((r) => setTimeout(r, HEALTH_POLL_MS));
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Ollama API did not become ready within ${timeoutMs / 1000}s`);
|
|
119
|
+
}
|
|
120
|
+
export async function ensureOllamaServing(opts) {
|
|
121
|
+
const port = opts?.port ?? 11434;
|
|
122
|
+
const base = `http://127.0.0.1:${port}`;
|
|
123
|
+
if (await isOllamaRunning(base)) {
|
|
124
|
+
debug('Ollama already running', opts);
|
|
125
|
+
return base;
|
|
126
|
+
}
|
|
127
|
+
log('Starting Ollama server…');
|
|
128
|
+
const env = { ...process.env };
|
|
129
|
+
if (port !== 11434)
|
|
130
|
+
env.OLLAMA_HOST = `0.0.0.0:${port}`;
|
|
131
|
+
const spawnOpts = {
|
|
132
|
+
detached: true,
|
|
133
|
+
stdio: 'ignore',
|
|
134
|
+
env,
|
|
135
|
+
};
|
|
136
|
+
const child = spawn('ollama', ['serve'], spawnOpts);
|
|
137
|
+
child.unref();
|
|
138
|
+
await waitForOllama(base);
|
|
139
|
+
log(`Ollama server ready on ${base}`);
|
|
140
|
+
return base;
|
|
141
|
+
}
|
|
142
|
+
/* ------------------------------------------------------------------ */
|
|
143
|
+
/* 4. Model pull */
|
|
144
|
+
/* ------------------------------------------------------------------ */
|
|
145
|
+
export async function isModelAvailable(model, base = OLLAMA_API) {
|
|
146
|
+
try {
|
|
147
|
+
const res = await fetch(`${base}/api/tags`);
|
|
148
|
+
if (!res.ok)
|
|
149
|
+
return false;
|
|
150
|
+
const body = (await res.json());
|
|
151
|
+
return body.models?.some((m) => m.name === model || m.name.startsWith(`${model}:`)) ?? false;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export async function pullModel(model, base = OLLAMA_API) {
|
|
158
|
+
log(`Pulling model "${model}"… (this may take a while on first run)`);
|
|
159
|
+
const res = await fetch(`${base}/api/pull`, {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: { 'Content-Type': 'application/json' },
|
|
162
|
+
body: JSON.stringify({ model, stream: true }),
|
|
163
|
+
});
|
|
164
|
+
if (!res.ok || !res.body) {
|
|
165
|
+
throw new Error(`Failed to pull model: HTTP ${res.status}`);
|
|
166
|
+
}
|
|
167
|
+
// Stream progress to stderr
|
|
168
|
+
const reader = res.body.getReader();
|
|
169
|
+
const decoder = new TextDecoder();
|
|
170
|
+
let lastPercent = -1;
|
|
171
|
+
let lastStatus = '';
|
|
172
|
+
while (true) {
|
|
173
|
+
const { done, value } = await reader.read();
|
|
174
|
+
if (done)
|
|
175
|
+
break;
|
|
176
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
177
|
+
for (const line of chunk.split('\n').filter(Boolean)) {
|
|
178
|
+
try {
|
|
179
|
+
const msg = JSON.parse(line);
|
|
180
|
+
if (msg.error)
|
|
181
|
+
throw new Error(`Pull failed: ${msg.error}`);
|
|
182
|
+
if (msg.total && msg.completed) {
|
|
183
|
+
const pct = Math.round((msg.completed / msg.total) * 100);
|
|
184
|
+
if (pct !== lastPercent) {
|
|
185
|
+
process.stderr.write(`\r[vibe-mcp] Downloading… ${pct}%`);
|
|
186
|
+
lastPercent = pct;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (msg.status && msg.status !== lastStatus) {
|
|
190
|
+
// Only print new status transitions (e.g. "pulling manifest" → "verifying")
|
|
191
|
+
// Skip repetitive "pulling <digest>" lines during download
|
|
192
|
+
if (!msg.status.startsWith('pulling ') || msg.status === 'pulling manifest') {
|
|
193
|
+
if (lastPercent >= 0)
|
|
194
|
+
process.stderr.write('\n');
|
|
195
|
+
log(msg.status);
|
|
196
|
+
lastPercent = -1;
|
|
197
|
+
}
|
|
198
|
+
lastStatus = msg.status;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
if (e instanceof SyntaxError)
|
|
203
|
+
continue; // partial JSON
|
|
204
|
+
throw e;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (lastPercent >= 0)
|
|
209
|
+
process.stderr.write('\n');
|
|
210
|
+
log(`Model "${model}" ready ✓`);
|
|
211
|
+
}
|
|
212
|
+
/* ------------------------------------------------------------------ */
|
|
213
|
+
/* 5. Top-level orchestrator */
|
|
214
|
+
/* ------------------------------------------------------------------ */
|
|
215
|
+
export async function serve(model, opts) {
|
|
216
|
+
// 1. Ensure Ollama is installed
|
|
217
|
+
if (!isOllamaInstalled()) {
|
|
218
|
+
await installOllama(opts);
|
|
219
|
+
}
|
|
220
|
+
// 2. Ensure Ollama server is running
|
|
221
|
+
const base = await ensureOllamaServing(opts);
|
|
222
|
+
// 3. Pull model if not already available
|
|
223
|
+
if (!(await isModelAvailable(model, base))) {
|
|
224
|
+
await pullModel(model, base);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
log(`Model "${model}" already available ✓`);
|
|
228
|
+
}
|
|
229
|
+
// 4. Done — print connection info
|
|
230
|
+
const openaiBase = `${base}/v1`;
|
|
231
|
+
console.error('');
|
|
232
|
+
log('═══════════════════════════════════════════════════');
|
|
233
|
+
log(` Model: ${model}`);
|
|
234
|
+
log(` API: ${openaiBase}`);
|
|
235
|
+
log(` Health: ${base}/api/tags`);
|
|
236
|
+
log('');
|
|
237
|
+
log(' Use with VibeBrowser extension:');
|
|
238
|
+
log(` Model provider → ollama`);
|
|
239
|
+
log(` Model name → ${model}`);
|
|
240
|
+
log('');
|
|
241
|
+
log(' Use with vibe-cli:');
|
|
242
|
+
log(` npx tsx cli.ts run "your task" --model ollama:${model}`);
|
|
243
|
+
log('');
|
|
244
|
+
log(' OpenAI-compatible endpoint (for any client):');
|
|
245
|
+
log(` ${openaiBase}/chat/completions`);
|
|
246
|
+
log('═══════════════════════════════════════════════════');
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"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"}
|
package/dist/relay.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare class RelayServer extends EventEmitter {
|
|
|
23
23
|
private tools;
|
|
24
24
|
private requestIdCounter;
|
|
25
25
|
private debug;
|
|
26
|
+
private toolsSyncTimer;
|
|
26
27
|
constructor(debug?: boolean);
|
|
27
28
|
/**
|
|
28
29
|
* Start the relay server
|
|
@@ -56,6 +57,18 @@ export declare class RelayServer extends EventEmitter {
|
|
|
56
57
|
* Request tools list from extension
|
|
57
58
|
*/
|
|
58
59
|
private requestToolsFromExtension;
|
|
60
|
+
/**
|
|
61
|
+
* Reject all pending requests and notify agents of the error.
|
|
62
|
+
* Called when the extension reconnects — responses to in-flight requests
|
|
63
|
+
* from the previous connection are lost, so we surface an error to let
|
|
64
|
+
* the MCP client retry if appropriate.
|
|
65
|
+
*/
|
|
66
|
+
private rejectPendingRequests;
|
|
67
|
+
/**
|
|
68
|
+
* Keep requesting tools until extension responds with tools_list.
|
|
69
|
+
*/
|
|
70
|
+
private startToolsSyncLoop;
|
|
71
|
+
private stopToolsSyncLoop;
|
|
59
72
|
/**
|
|
60
73
|
* Broadcast message to all connected agents
|
|
61
74
|
*/
|
package/dist/relay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,eAAO,MAAM,cAAc,QAAQ,CAAC;AACpC,eAAO,MAAM,UAAU,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,eAAO,MAAM,cAAc,QAAQ,CAAC;AACpC,eAAO,MAAM,UAAU,QAAQ,CAAC;AA+ChC;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,cAAc,CAA+B;gBAEzC,KAAK,GAAE,OAAe;IAKlC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B;;OAEG;YACW,oBAAoB;IAoBlC;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA8CjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiD7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8C9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;YACW,QAAQ;IA2CtB;;OAEG;IACH,OAAO,CAAC,GAAG;CAgBZ;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAmBxC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAY3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI,CAe7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5E"}
|
package/dist/relay.js
CHANGED
|
@@ -32,6 +32,7 @@ export class RelayServer extends EventEmitter {
|
|
|
32
32
|
tools = [];
|
|
33
33
|
requestIdCounter = 0;
|
|
34
34
|
debug;
|
|
35
|
+
toolsSyncTimer = null;
|
|
35
36
|
constructor(debug = false) {
|
|
36
37
|
super();
|
|
37
38
|
this.debug = debug;
|
|
@@ -97,33 +98,43 @@ export class RelayServer extends EventEmitter {
|
|
|
97
98
|
* Handle extension connection
|
|
98
99
|
*/
|
|
99
100
|
handleExtensionConnection(ws) {
|
|
100
|
-
|
|
101
|
-
// Close previous connection if any
|
|
101
|
+
// Replace prior extension connection (background/sidepanel can reconnect).
|
|
102
102
|
if (this.extensionWs) {
|
|
103
103
|
this.extensionWs.close();
|
|
104
|
+
// Reject pending requests immediately — the old connection is gone and the
|
|
105
|
+
// extension will send 'connected' again, but we don't want a window where
|
|
106
|
+
// new requests could slip through to the new socket before rejection.
|
|
107
|
+
this.rejectPendingRequests('Extension reconnected — previous connection replaced');
|
|
104
108
|
}
|
|
109
|
+
this.log('Extension connected');
|
|
105
110
|
this.extensionWs = ws;
|
|
106
111
|
ws.on('message', (data) => {
|
|
107
112
|
try {
|
|
108
113
|
const message = JSON.parse(data.toString());
|
|
109
|
-
this.handleExtensionMessage(message);
|
|
114
|
+
this.handleExtensionMessage(ws, message);
|
|
110
115
|
}
|
|
111
116
|
catch (error) {
|
|
112
117
|
this.log(`Failed to parse extension message: ${error}`);
|
|
113
118
|
}
|
|
114
119
|
});
|
|
115
|
-
ws.on('close', () => {
|
|
116
|
-
|
|
120
|
+
ws.on('close', (code, reasonBuffer) => {
|
|
121
|
+
const reason = reasonBuffer?.toString() || '';
|
|
122
|
+
this.log(`Extension disconnected (code=${code}${reason ? `, reason=${reason}` : ''})`);
|
|
123
|
+
// Ignore stale close events from replaced sockets.
|
|
124
|
+
if (this.extensionWs !== ws) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
117
127
|
this.extensionWs = null;
|
|
118
128
|
this.tools = [];
|
|
129
|
+
this.stopToolsSyncLoop();
|
|
119
130
|
// Notify all agents
|
|
120
131
|
this.broadcastToAgents({ type: 'extension_disconnected' });
|
|
121
132
|
});
|
|
122
133
|
ws.on('error', (error) => {
|
|
123
134
|
this.log(`Extension WebSocket error: ${error.message}`);
|
|
124
135
|
});
|
|
125
|
-
// Request tools list
|
|
126
|
-
this.
|
|
136
|
+
// Request tools list, with retries in case the extension wasn't ready yet.
|
|
137
|
+
this.startToolsSyncLoop();
|
|
127
138
|
}
|
|
128
139
|
/**
|
|
129
140
|
* Handle agent connection
|
|
@@ -172,11 +183,22 @@ export class RelayServer extends EventEmitter {
|
|
|
172
183
|
/**
|
|
173
184
|
* Handle message from extension
|
|
174
185
|
*/
|
|
175
|
-
handleExtensionMessage(message) {
|
|
186
|
+
handleExtensionMessage(sourceWs, message) {
|
|
187
|
+
if (this.extensionWs !== sourceWs) {
|
|
188
|
+
this.log(`Ignoring stale extension message: ${message.type}`);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
176
191
|
this.log(`Extension message: ${message.type}`);
|
|
192
|
+
if (message.type === 'connected') {
|
|
193
|
+
// Reject any remaining pending requests (belt-and-suspenders —
|
|
194
|
+
// handleExtensionConnection already rejects when replacing, but this
|
|
195
|
+
// covers the case where extension reconnects without a new WS connection).
|
|
196
|
+
this.rejectPendingRequests('Extension reconnected — request may have been lost');
|
|
197
|
+
}
|
|
177
198
|
// Handle tools list
|
|
178
199
|
if (message.type === 'tools_list') {
|
|
179
200
|
this.tools = message.data;
|
|
201
|
+
this.stopToolsSyncLoop();
|
|
180
202
|
// Broadcast to all agents
|
|
181
203
|
this.broadcastToAgents({ type: 'tools_list', data: this.tools });
|
|
182
204
|
return;
|
|
@@ -219,10 +241,11 @@ export class RelayServer extends EventEmitter {
|
|
|
219
241
|
}
|
|
220
242
|
// Generate relay request ID
|
|
221
243
|
const relayRequestId = `relay_${++this.requestIdCounter}`;
|
|
222
|
-
// Store pending request mapping
|
|
244
|
+
// Store pending request mapping (without forwardMessage — no replay)
|
|
223
245
|
this.pendingRequests.set(relayRequestId, {
|
|
224
246
|
agentId,
|
|
225
247
|
originalRequestId: message.requestId,
|
|
248
|
+
lastSentAt: Date.now(),
|
|
226
249
|
});
|
|
227
250
|
// Forward to extension with relay request ID
|
|
228
251
|
this.extensionWs.send(JSON.stringify({
|
|
@@ -242,6 +265,53 @@ export class RelayServer extends EventEmitter {
|
|
|
242
265
|
requestId,
|
|
243
266
|
}));
|
|
244
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Reject all pending requests and notify agents of the error.
|
|
270
|
+
* Called when the extension reconnects — responses to in-flight requests
|
|
271
|
+
* from the previous connection are lost, so we surface an error to let
|
|
272
|
+
* the MCP client retry if appropriate.
|
|
273
|
+
*/
|
|
274
|
+
rejectPendingRequests(reason) {
|
|
275
|
+
if (this.pendingRequests.size === 0)
|
|
276
|
+
return;
|
|
277
|
+
this.log(`Rejecting ${this.pendingRequests.size} pending request(s): ${reason}`);
|
|
278
|
+
for (const [relayRequestId, pending] of this.pendingRequests) {
|
|
279
|
+
const agent = this.agents.get(pending.agentId);
|
|
280
|
+
if (agent) {
|
|
281
|
+
try {
|
|
282
|
+
agent.ws.send(JSON.stringify({
|
|
283
|
+
type: 'error',
|
|
284
|
+
requestId: pending.originalRequestId,
|
|
285
|
+
error: reason,
|
|
286
|
+
}));
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
this.log(`Failed to notify agent for ${relayRequestId}: ${error}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
this.pendingRequests.clear();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Keep requesting tools until extension responds with tools_list.
|
|
297
|
+
*/
|
|
298
|
+
startToolsSyncLoop() {
|
|
299
|
+
this.stopToolsSyncLoop();
|
|
300
|
+
this.requestToolsFromExtension();
|
|
301
|
+
this.toolsSyncTimer = setInterval(() => {
|
|
302
|
+
if (!this.extensionWs) {
|
|
303
|
+
this.stopToolsSyncLoop();
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
this.requestToolsFromExtension();
|
|
307
|
+
}, 1_000);
|
|
308
|
+
}
|
|
309
|
+
stopToolsSyncLoop() {
|
|
310
|
+
if (this.toolsSyncTimer) {
|
|
311
|
+
clearInterval(this.toolsSyncTimer);
|
|
312
|
+
this.toolsSyncTimer = null;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
245
315
|
/**
|
|
246
316
|
* Broadcast message to all connected agents
|
|
247
317
|
*/
|
|
@@ -285,6 +355,7 @@ export class RelayServer extends EventEmitter {
|
|
|
285
355
|
this.extensionWs.close();
|
|
286
356
|
this.extensionWs = null;
|
|
287
357
|
}
|
|
358
|
+
this.stopToolsSyncLoop();
|
|
288
359
|
// Close servers
|
|
289
360
|
if (this.agentWss) {
|
|
290
361
|
this.agentWss.close();
|
package/dist/relay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAyC,YAAY,EAAkB,MAAM,YAAY,CAAC;AAOjG;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAiC9C;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;OAEG;YACW,QAAQ;IAatB;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,qBAAqB;CAS9B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAIzF"}
|
package/dist/server.js
CHANGED
|
@@ -7,8 +7,11 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
7
7
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
8
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
9
9
|
import { ExtensionConnection } from './connection.js';
|
|
10
|
+
import { DEFAULT_WS_PORT } from './types.js';
|
|
10
11
|
const SERVER_NAME = 'vibe-mcp';
|
|
11
12
|
const SERVER_VERSION = '0.1.0';
|
|
13
|
+
const STARTUP_TOOLS_REFRESH_TIMEOUT_MS = 4_000;
|
|
14
|
+
const STARTUP_TOOLS_EVENT_WAIT_TIMEOUT_MS = 1_500;
|
|
12
15
|
/**
|
|
13
16
|
* Vibe MCP Server
|
|
14
17
|
*
|
|
@@ -20,17 +23,24 @@ export class VibeMcpServer {
|
|
|
20
23
|
config;
|
|
21
24
|
constructor(config = {}) {
|
|
22
25
|
this.config = {
|
|
23
|
-
port: config.port ??
|
|
26
|
+
port: config.port ?? DEFAULT_WS_PORT,
|
|
24
27
|
host: config.host ?? '127.0.0.1',
|
|
25
28
|
debug: config.debug ?? false,
|
|
29
|
+
remoteUuid: config.remoteUuid,
|
|
30
|
+
remoteRelayUrl: config.remoteRelayUrl,
|
|
26
31
|
};
|
|
27
|
-
|
|
32
|
+
const remoteConfig = this.config.remoteUuid
|
|
33
|
+
? { uuid: this.config.remoteUuid, relayUrl: this.config.remoteRelayUrl }
|
|
34
|
+
: undefined;
|
|
35
|
+
this.connection = new ExtensionConnection(this.config.port, this.config.debug, remoteConfig);
|
|
28
36
|
this.server = new Server({
|
|
29
37
|
name: SERVER_NAME,
|
|
30
38
|
version: SERVER_VERSION,
|
|
31
39
|
}, {
|
|
32
40
|
capabilities: {
|
|
33
|
-
tools: {
|
|
41
|
+
tools: {
|
|
42
|
+
listChanged: true,
|
|
43
|
+
},
|
|
34
44
|
},
|
|
35
45
|
});
|
|
36
46
|
this.setupHandlers();
|
|
@@ -42,6 +52,19 @@ export class VibeMcpServer {
|
|
|
42
52
|
setupHandlers() {
|
|
43
53
|
// List available tools
|
|
44
54
|
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
55
|
+
if (this.connection.getTools().length === 0 && this.connection.isExtensionConnected()) {
|
|
56
|
+
try {
|
|
57
|
+
// Keep startup tool discovery under client startup budgets (e.g. Codex 10s).
|
|
58
|
+
await this.connection.refreshTools(STARTUP_TOOLS_REFRESH_TIMEOUT_MS);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
62
|
+
this.log(`tools/list refresh failed: ${message}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (this.connection.getTools().length === 0 && this.connection.isExtensionConnected()) {
|
|
66
|
+
await this.connection.waitForToolsUpdate(STARTUP_TOOLS_EVENT_WAIT_TIMEOUT_MS);
|
|
67
|
+
}
|
|
45
68
|
const tools = this.connection.getTools();
|
|
46
69
|
return {
|
|
47
70
|
tools: tools.map((tool) => ({
|
|
@@ -79,18 +102,29 @@ export class VibeMcpServer {
|
|
|
79
102
|
});
|
|
80
103
|
this.connection.on('disconnected', () => {
|
|
81
104
|
this.log('Extension disconnected');
|
|
105
|
+
this.notifyToolListChanged();
|
|
82
106
|
});
|
|
83
107
|
this.connection.on('tools_updated', (tools) => {
|
|
84
108
|
this.log(`Received ${tools.length} tools from extension`);
|
|
109
|
+
this.notifyToolListChanged();
|
|
110
|
+
});
|
|
111
|
+
this.connection.on('extension_disconnected', () => {
|
|
112
|
+
this.log('Extension disconnected from relay');
|
|
113
|
+
this.notifyToolListChanged();
|
|
85
114
|
});
|
|
86
115
|
}
|
|
87
116
|
/**
|
|
88
117
|
* Start the MCP server
|
|
89
118
|
*/
|
|
90
119
|
async start() {
|
|
91
|
-
// Start
|
|
120
|
+
// Start connection to extension (local relay or remote)
|
|
92
121
|
await this.connection.start();
|
|
93
|
-
|
|
122
|
+
if (this.config.remoteUuid) {
|
|
123
|
+
this.log(`Connected to remote relay for UUID ${this.config.remoteUuid}`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.log(`Waiting for Vibe extension connection on port ${this.config.port}...`);
|
|
127
|
+
}
|
|
94
128
|
// Connect MCP server to stdio transport
|
|
95
129
|
const transport = new StdioServerTransport();
|
|
96
130
|
await this.server.connect(transport);
|
|
@@ -122,6 +156,15 @@ export class VibeMcpServer {
|
|
|
122
156
|
console.error(`[${SERVER_NAME}] ${message}`);
|
|
123
157
|
}
|
|
124
158
|
}
|
|
159
|
+
notifyToolListChanged() {
|
|
160
|
+
if (!this.server.transport) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.server.sendToolListChanged().catch((error) => {
|
|
164
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
165
|
+
this.log(`Failed to send tools/list_changed: ${message}`);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
125
168
|
}
|
|
126
169
|
/**
|
|
127
170
|
* Create and start the MCP server
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const MCP_PROTOCOL_VERSION = "2024-11-05";
|
|
10
10
|
/**
|
|
11
|
-
* Default WebSocket port for
|
|
11
|
+
* Default WebSocket port for local relay (agent) connection
|
|
12
12
|
*/
|
|
13
|
-
export declare const DEFAULT_WS_PORT =
|
|
13
|
+
export declare const DEFAULT_WS_PORT = 19888;
|
|
14
14
|
/**
|
|
15
15
|
* Connection status
|
|
16
16
|
*/
|
|
@@ -94,5 +94,9 @@ export interface ServerConfig {
|
|
|
94
94
|
port: number;
|
|
95
95
|
host: string;
|
|
96
96
|
debug: boolean;
|
|
97
|
+
/** Remote relay UUID — when set, connects to public relay instead of local */
|
|
98
|
+
remoteUuid?: string;
|
|
99
|
+
/** Remote relay URL — defaults to wss://relay.api.vibebrowser.app */
|
|
100
|
+
remoteRelayUrl?: string;
|
|
97
101
|
}
|
|
98
102
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,kBAAkB,GAAG,wBAAwB,CAAC;IACzI,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,kBAAkB,GAAG,wBAAwB,CAAC;IACzI,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
|
package/dist/types.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export const MCP_PROTOCOL_VERSION = '2024-11-05';
|
|
10
10
|
/**
|
|
11
|
-
* Default WebSocket port for
|
|
11
|
+
* Default WebSocket port for local relay (agent) connection
|
|
12
12
|
*/
|
|
13
|
-
export const DEFAULT_WS_PORT =
|
|
13
|
+
export const DEFAULT_WS_PORT = 19888;
|
|
14
14
|
//# sourceMappingURL=types.js.map
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibebrowser/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for browser automation - the only solution supporting multiple AI agents (Claude, Cursor, VS Code) simultaneously controlling your Chrome browser",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
|
+
"vibebrowser-mcp": "./dist/cli.js",
|
|
9
10
|
"vibe-mcp": "./dist/cli.js"
|
|
10
11
|
},
|
|
11
12
|
"publishConfig": {
|
|
@@ -15,7 +16,9 @@
|
|
|
15
16
|
"build": "tsc",
|
|
16
17
|
"dev": "tsc --watch",
|
|
17
18
|
"start": "node dist/cli.js",
|
|
18
|
-
"prepublishOnly": "npm run build"
|
|
19
|
+
"prepublishOnly": "npm run build",
|
|
20
|
+
"test:e2e:relay-race": "node scripts/e2e-relay-fake-extension-race.mjs",
|
|
21
|
+
"test:e2e:agents": "node scripts/e2e-mcp-agents.mjs"
|
|
19
22
|
},
|
|
20
23
|
"keywords": [
|
|
21
24
|
"mcp",
|