@vibebrowser/mcp 0.2.4 → 0.2.5
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 +75 -12
- package/dist/browser-cli.d.ts +4 -0
- package/dist/browser-cli.d.ts.map +1 -0
- package/dist/browser-cli.js +1473 -0
- package/dist/browser-cli.js.map +1 -0
- package/dist/browser-main.d.ts +3 -0
- package/dist/browser-main.d.ts.map +1 -0
- package/dist/browser-main.js +10 -0
- package/dist/browser-main.js.map +1 -0
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +104 -13
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +1 -0
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +10 -4
- package/dist/connection.js.map +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.js +4 -4
- package/dist/ollama.js.map +1 -1
- package/dist/relay.d.ts +8 -7
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +53 -39
- package/dist/relay.js.map +1 -1
- package/dist/server.d.ts +52 -11
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +303 -64
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/docs/chrome-devtools-relay.md +351 -0
- package/docs/eval.md +209 -0
- package/docs/openclaw-local-browser.md +173 -0
- package/openclaw/vibe-local-browser/SKILL.md +132 -0
- package/package.json +8 -2
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# Chrome DevTools Relay — System Design
|
|
2
|
+
|
|
3
|
+
## Problem
|
|
4
|
+
|
|
5
|
+
Cloud AI agents (OpenClaw tenants, coding assistants, automation pipelines) need to
|
|
6
|
+
control a user's **local Chrome browser** — the one with their cookies, bookmarks,
|
|
7
|
+
logged-in sessions, and extensions. Today this requires the agent and browser to
|
|
8
|
+
be on the same machine or network.
|
|
9
|
+
|
|
10
|
+
The user's browser is behind NAT, on a laptop, on a home network. The agent runs
|
|
11
|
+
in a cloud Kubernetes pod. There is no direct path.
|
|
12
|
+
|
|
13
|
+
## Solution
|
|
14
|
+
|
|
15
|
+
A **secure relay** that bridges the gap:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
19
|
+
│ CLOUD │
|
|
20
|
+
│ │
|
|
21
|
+
│ ┌─────────────────────┐ ┌──────────────────────────┐ │
|
|
22
|
+
│ │ OpenClaw Skill │ │ Vibe Relay Backend │ │
|
|
23
|
+
│ │ (or any REST caller)│──POST─▶│ relay.vibebrowser.com │ │
|
|
24
|
+
│ │ │◀─resp──│ │ │
|
|
25
|
+
│ │ Authorization: │ │ • authenticates bearer │ │
|
|
26
|
+
│ │ Bearer <token> │ │ • routes by browser_uuid │ │
|
|
27
|
+
│ └─────────────────────┘ │ • queues tool calls │ │
|
|
28
|
+
│ │ • returns results │ │
|
|
29
|
+
│ └────────────┬─────────────┘ │
|
|
30
|
+
│ │ │
|
|
31
|
+
└───────────────────────────────────────────────│───────────────────┘
|
|
32
|
+
│ WSS (outbound
|
|
33
|
+
│ from user machine)
|
|
34
|
+
┌───────────────────────────────────────────────│───────────────────┐
|
|
35
|
+
│ USER MACHINE │ │
|
|
36
|
+
│ ▼ │
|
|
37
|
+
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
38
|
+
│ │ Relay Client (local process) │ │
|
|
39
|
+
│ │ • connects outbound to wss://relay.vibebrowser.com │ │
|
|
40
|
+
│ │ • registers browser_uuid │ │
|
|
41
|
+
│ │ • receives tool calls from relay │ │
|
|
42
|
+
│ │ • executes them via chrome-devtools-mcp tools │ │
|
|
43
|
+
│ │ • returns results through relay │ │
|
|
44
|
+
│ └──────────────────────────┬─────────────────────────────────┘ │
|
|
45
|
+
│ │ CDP (localhost:9222) │
|
|
46
|
+
│ ▼ │
|
|
47
|
+
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
48
|
+
│ │ Chrome (user's browser) │ │
|
|
49
|
+
│ │ --remote-debugging-port=9222 │ │
|
|
50
|
+
│ │ User's cookies, sessions, extensions, bookmarks │ │
|
|
51
|
+
│ └────────────────────────────────────────────────────────────┘ │
|
|
52
|
+
│ │
|
|
53
|
+
└───────────────────────────────────────────────────────────────────┘
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Key properties
|
|
57
|
+
|
|
58
|
+
- **No inbound ports** on the user's machine. The relay client connects outbound.
|
|
59
|
+
- **Bearer token auth** on every cloud API call. The browser UUID alone is not a secret.
|
|
60
|
+
- **Full chrome-devtools-mcp toolset** — 27 tools: click, fill, navigate, screenshot,
|
|
61
|
+
snapshot, network interception, performance tracing, Lighthouse, etc.
|
|
62
|
+
- **User stays in control** — they start/stop the relay client, they see their browser.
|
|
63
|
+
- **Works with any cloud caller** — OpenClaw skills, CI pipelines, REST scripts.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Components
|
|
68
|
+
|
|
69
|
+
### 1. Relay Client (this repo, forked from chrome-devtools-mcp)
|
|
70
|
+
|
|
71
|
+
A local CLI process the user runs. Based on a fork of
|
|
72
|
+
[chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp)
|
|
73
|
+
(Apache 2.0, by Google/ChromeDevTools team).
|
|
74
|
+
|
|
75
|
+
**What chrome-devtools-mcp already provides:**
|
|
76
|
+
|
|
77
|
+
- 27 browser automation tools (input, navigation, emulation, performance,
|
|
78
|
+
network, console, debugging, Lighthouse)
|
|
79
|
+
- Puppeteer-based Chrome control via CDP
|
|
80
|
+
- Connection to running Chrome via `--browser-url` or `--autoConnect`
|
|
81
|
+
- WebSocket endpoint connection with custom headers
|
|
82
|
+
- Slim mode (3 tools) for basic tasks
|
|
83
|
+
- Requires Node.js v20.19+, Chrome stable+
|
|
84
|
+
|
|
85
|
+
**What we add:**
|
|
86
|
+
|
|
87
|
+
- Outbound WebSocket connection to cloud relay
|
|
88
|
+
- Tool call receive/execute/respond loop
|
|
89
|
+
- Auth handshake (browser_uuid + access_token)
|
|
90
|
+
- Reconnection with backoff
|
|
91
|
+
- Local config persistence (~/.vibe-relay/)
|
|
92
|
+
|
|
93
|
+
**CLI interface:**
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# First time: authenticate
|
|
97
|
+
vibe-relay login --token <access_token>
|
|
98
|
+
|
|
99
|
+
# Connect to relay (browser must be running with --remote-debugging-port)
|
|
100
|
+
vibe-relay connect
|
|
101
|
+
|
|
102
|
+
# Or with explicit browser URL
|
|
103
|
+
vibe-relay connect --browser-url http://localhost:9222
|
|
104
|
+
|
|
105
|
+
# Check status
|
|
106
|
+
vibe-relay status
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 2. Vibe Relay Backend (cloud service)
|
|
110
|
+
|
|
111
|
+
Stateless relay that authenticates callers and routes tool calls to connected
|
|
112
|
+
browser sessions.
|
|
113
|
+
|
|
114
|
+
**API endpoints:**
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
GET /v1/browser-sessions/:uuid/status
|
|
118
|
+
→ { connected: bool, tools: string[], connectedAt: ISO8601 }
|
|
119
|
+
|
|
120
|
+
GET /v1/browser-sessions/:uuid/tools
|
|
121
|
+
→ { tools: [ { name, description, inputSchema } ] }
|
|
122
|
+
|
|
123
|
+
POST /v1/browser-sessions/:uuid/tools/:toolName
|
|
124
|
+
→ { result: ... }
|
|
125
|
+
Body: { arguments: { ... } }
|
|
126
|
+
|
|
127
|
+
All require: Authorization: Bearer <token>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Responsibilities:**
|
|
131
|
+
|
|
132
|
+
- Validate bearer tokens (scope: user, session, optional tenant/workspace)
|
|
133
|
+
- Maintain WebSocket connections to relay clients
|
|
134
|
+
- Queue tool call requests, match to responses
|
|
135
|
+
- Timeout handling (30s default, configurable)
|
|
136
|
+
- Rate limiting per token
|
|
137
|
+
|
|
138
|
+
**Not responsible for:**
|
|
139
|
+
|
|
140
|
+
- Executing any browser commands (that's the relay client)
|
|
141
|
+
- Storing browser state or screenshots
|
|
142
|
+
- Managing Chrome processes
|
|
143
|
+
|
|
144
|
+
### 3. OpenClaw Integration (skill + config)
|
|
145
|
+
|
|
146
|
+
OpenClaw does not speak MCP. It uses skills that call CLI tools or REST APIs.
|
|
147
|
+
|
|
148
|
+
**Skill definition:**
|
|
149
|
+
|
|
150
|
+
```yaml
|
|
151
|
+
name: vibe-browser
|
|
152
|
+
description: Control the user's local Chrome browser through Vibe relay
|
|
153
|
+
tools:
|
|
154
|
+
- navigate_page
|
|
155
|
+
- take_snapshot
|
|
156
|
+
- take_screenshot
|
|
157
|
+
- click
|
|
158
|
+
- fill
|
|
159
|
+
- press_key
|
|
160
|
+
- evaluate_script
|
|
161
|
+
- list_network_requests
|
|
162
|
+
- get_network_request
|
|
163
|
+
- lighthouse_audit
|
|
164
|
+
# ... all 27 chrome-devtools-mcp tools
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Each tool in the skill calls the relay REST API:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
curl -X POST \
|
|
171
|
+
-H "Authorization: Bearer $VIBE_ACCESS_TOKEN" \
|
|
172
|
+
-H "Content-Type: application/json" \
|
|
173
|
+
"https://relay.vibebrowser.com/v1/browser-sessions/$BROWSER_UUID/tools/navigate_page" \
|
|
174
|
+
-d '{"arguments": {"url": "https://example.com", "type": "url"}}'
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Security Model
|
|
180
|
+
|
|
181
|
+
### Identifiers vs Secrets
|
|
182
|
+
|
|
183
|
+
| Value | Purpose | Secret? | Rotatable? |
|
|
184
|
+
|----------------|--------------------------------|---------|------------|
|
|
185
|
+
| browser_uuid | Identifies which browser | No | Yes |
|
|
186
|
+
| access_token | Proves caller is authorized | Yes | Yes |
|
|
187
|
+
|
|
188
|
+
### Token Scoping
|
|
189
|
+
|
|
190
|
+
Access tokens are scoped to:
|
|
191
|
+
|
|
192
|
+
- **User** — which user owns this token
|
|
193
|
+
- **Session** (optional) — which browser session(s) it can access
|
|
194
|
+
- **Tenant/Workspace** (optional) — for multi-tenant scenarios
|
|
195
|
+
- **Expiration** — TTL, default 24h
|
|
196
|
+
- **Permissions** (future) — which tools are allowed
|
|
197
|
+
|
|
198
|
+
### Auth Flow
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
1. User generates access_token via Vibe dashboard or CLI
|
|
202
|
+
2. User starts relay client with token (stored in ~/.vibe-relay/config.json)
|
|
203
|
+
3. Relay client connects to cloud relay, sends { browser_uuid, access_token }
|
|
204
|
+
4. Cloud relay validates token, registers session
|
|
205
|
+
5. Cloud caller (OpenClaw) sends tool call with Authorization: Bearer <token>
|
|
206
|
+
6. Cloud relay validates caller's token, checks session access, forwards to client
|
|
207
|
+
7. Client executes tool locally, returns result through relay
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Threat Model
|
|
211
|
+
|
|
212
|
+
| Threat | Mitigation |
|
|
213
|
+
|----------------------------------|-------------------------------------------------|
|
|
214
|
+
| Stolen browser_uuid | UUID alone grants nothing; need valid token |
|
|
215
|
+
| Stolen access_token | Scoped + expiring; revocable via dashboard |
|
|
216
|
+
| MITM on relay connection | WSS (TLS) for client↔relay; HTTPS for API calls |
|
|
217
|
+
| Relay client compromise | Runs as user process; same trust as the browser |
|
|
218
|
+
| Cloud relay compromise | No browser access stored; just routing + auth |
|
|
219
|
+
| Unauthorized tool execution | Token scope + optional tool allowlists |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Why Not Other Approaches
|
|
224
|
+
|
|
225
|
+
### Why not HTTP MCP bridge on vibebrowser-mcp?
|
|
226
|
+
|
|
227
|
+
We explored adding `--transport http` to vibebrowser-mcp to expose a URL-addressable MCP
|
|
228
|
+
endpoint. This doesn't work for OpenClaw because:
|
|
229
|
+
|
|
230
|
+
1. **OpenClaw doesn't speak MCP** — it calls CLI tools and REST APIs from skills.
|
|
231
|
+
2. **MCP HTTP still requires a reachable endpoint** — the user's machine is behind
|
|
232
|
+
NAT, so a localhost MCP server isn't reachable from cloud.
|
|
233
|
+
3. **It solves the wrong problem** — the issue isn't MCP vs HTTP, it's
|
|
234
|
+
cloud-to-local connectivity.
|
|
235
|
+
|
|
236
|
+
### Why not CDP shim over Vibe browser extension?
|
|
237
|
+
|
|
238
|
+
The Vibe browser extension (`chrome.debugger` API) only exposes a restricted
|
|
239
|
+
subset of CDP domains:
|
|
240
|
+
|
|
241
|
+
- **Missing:** `Browser.*`, `SystemInfo.*`, `Security.*`, `ServiceWorker.*`,
|
|
242
|
+
`HeapProfiler`, `Memory`, `LayerTree`, `Media`
|
|
243
|
+
- **Conflict:** Opening Chrome DevTools terminates the extension's debugger session
|
|
244
|
+
- **Limited:** No `Browser.getWindowForTarget`, no full network interception
|
|
245
|
+
|
|
246
|
+
The chrome-devtools-mcp approach via Puppeteer/CDP gives full access to all
|
|
247
|
+
Chrome DevTools Protocol domains.
|
|
248
|
+
|
|
249
|
+
### Why not tunnel/ngrok?
|
|
250
|
+
|
|
251
|
+
- Requires the user to install and configure a separate tunneling tool
|
|
252
|
+
- Exposes a raw CDP endpoint to the internet (massive attack surface)
|
|
253
|
+
- No built-in auth, rate limiting, or tool-level access control
|
|
254
|
+
- CDP is designed for localhost trust, not internet exposure
|
|
255
|
+
|
|
256
|
+
### Why fork chrome-devtools-mcp instead of building from scratch?
|
|
257
|
+
|
|
258
|
+
- **27 production-tested tools** with proper error handling and edge cases
|
|
259
|
+
- **Apache 2.0 license** — fork-friendly, no copyleft concerns
|
|
260
|
+
- **Active maintenance** by Google/ChromeDevTools team
|
|
261
|
+
- **Puppeteer integration** — handles Chrome lifecycle, reconnection, tab management
|
|
262
|
+
- We only need to add the relay transport layer; the tool implementations stay as-is
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Data Flow: Tool Execution
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
OpenClaw skill Cloud Relay Relay Client Chrome
|
|
270
|
+
│ │ │ │
|
|
271
|
+
│ POST /tools/take_snapshot │ │ │
|
|
272
|
+
│ Authorization: Bearer xxx │ │ │
|
|
273
|
+
│ ──────────────────────────────▶│ │ │
|
|
274
|
+
│ │ validate token │ │
|
|
275
|
+
│ │ lookup browser session │ │
|
|
276
|
+
│ │ │ │
|
|
277
|
+
│ │ WS: { call: take_snapshot } │ │
|
|
278
|
+
│ │ ─────────────────────────────▶│ │
|
|
279
|
+
│ │ │ CDP: getDocument │
|
|
280
|
+
│ │ │ ────────────────────▶│
|
|
281
|
+
│ │ │ │
|
|
282
|
+
│ │ │ CDP: a11y snapshot │
|
|
283
|
+
│ │ │◀────────────────────│
|
|
284
|
+
│ │ │ │
|
|
285
|
+
│ │ WS: { result: snapshot } │ │
|
|
286
|
+
│ │◀─────────────────────────────│ │
|
|
287
|
+
│ │ │ │
|
|
288
|
+
│ 200 { result: snapshot } │ │ │
|
|
289
|
+
│◀──────────────────────────────│ │ │
|
|
290
|
+
│ │ │ │
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Implementation Plan
|
|
296
|
+
|
|
297
|
+
### Phase 1: Relay Client (fork + relay layer)
|
|
298
|
+
|
|
299
|
+
1. Fork `chrome-devtools-mcp` → `vibe-relay-client`
|
|
300
|
+
2. Add WebSocket client that connects outbound to relay backend
|
|
301
|
+
3. Implement tool call receive → execute → respond loop
|
|
302
|
+
4. Add `login`, `connect`, `status` CLI commands
|
|
303
|
+
5. Add config persistence (~/.vibe-relay/)
|
|
304
|
+
6. Test locally with a mock relay server
|
|
305
|
+
|
|
306
|
+
### Phase 2: Relay Backend (cloud service)
|
|
307
|
+
|
|
308
|
+
1. Minimal relay server (Node.js/Bun, deployable to Fly.io or AKS)
|
|
309
|
+
2. WebSocket handler for relay client connections
|
|
310
|
+
3. REST API for tool calls with bearer auth
|
|
311
|
+
4. Token validation + session management
|
|
312
|
+
5. Timeout + error handling
|
|
313
|
+
6. Deploy behind `relay.vibebrowser.com`
|
|
314
|
+
|
|
315
|
+
### Phase 3: OpenClaw Skill
|
|
316
|
+
|
|
317
|
+
1. Write skill that wraps relay REST API calls
|
|
318
|
+
2. Include setup instructions (install relay client, get token, connect)
|
|
319
|
+
3. Test with real OpenClaw tenant
|
|
320
|
+
4. Ship in OpenClawBot repo or as standalone installable skill
|
|
321
|
+
|
|
322
|
+
### Phase 4: Polish
|
|
323
|
+
|
|
324
|
+
1. Dashboard UI for token management
|
|
325
|
+
2. Session monitoring (connected browsers, active tools)
|
|
326
|
+
3. Tool-level permissions
|
|
327
|
+
4. Usage analytics
|
|
328
|
+
5. Documentation site / blog post
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## Open Questions
|
|
333
|
+
|
|
334
|
+
1. **Relay backend hosting** — Fly.io (simple, edge-deployed) vs AKS sidecar
|
|
335
|
+
(co-located with OpenClaw tenants, lower latency)?
|
|
336
|
+
2. **Binary vs screenshot transport** — should screenshots go through the relay
|
|
337
|
+
as base64, or should the relay client upload to object storage and return a URL?
|
|
338
|
+
3. **Multi-tab support** — should one relay client session expose all Chrome tabs,
|
|
339
|
+
or should users explicitly attach to specific tabs?
|
|
340
|
+
4. **Extension integration** — should the Vibe browser extension be able to act
|
|
341
|
+
as a relay client directly (no separate process)?
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## References
|
|
346
|
+
|
|
347
|
+
- [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp) — base for relay client
|
|
348
|
+
- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) — CDP spec
|
|
349
|
+
- [Puppeteer](https://pptr.dev/) — Chrome automation library used by chrome-devtools-mcp
|
|
350
|
+
- [OpenClaw Skills](https://github.com/openclaw/openclaw) — skill system documentation
|
|
351
|
+
- [Vibe Browser Extension](https://github.com/AnomalyCo/AnomalyBrowser) — existing Vibe browser tools
|
package/docs/eval.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# vibebrowser-mcp Evaluation Process
|
|
2
|
+
|
|
3
|
+
This document tracks the current validation matrix for the `vibebrowser-mcp` and `vibebrowser-cli` binaries, with an explicit split between:
|
|
4
|
+
|
|
5
|
+
- local workspace validation
|
|
6
|
+
- packed package artifact validation (`npm pack`)
|
|
7
|
+
- published npm validation (`@vibebrowser/mcp@latest`)
|
|
8
|
+
- real-extension browser evals versus fake-extension protocol evals
|
|
9
|
+
|
|
10
|
+
Evaluation date: **March 25, 2026 (America/Los_Angeles)**.
|
|
11
|
+
|
|
12
|
+
## Coverage Matrix
|
|
13
|
+
|
|
14
|
+
| Surface | Harness | Source Modes | Backend | What It Proves |
|
|
15
|
+
|---|---|---|---|---|
|
|
16
|
+
| Relay race regression | `npm run test:e2e:relay-race` | local | fake extension socket | relay preserves in-flight tool calls across extension reconnects |
|
|
17
|
+
| HTTP MCP transport | `npm run test:e2e:http` | local | fake extension socket | streamable HTTP MCP path works end to end |
|
|
18
|
+
| OpenClaw-compatible browser CLI | `npm run test:e2e:browser-cli` | `local`, `pack`, `npm` | fake extension socket | `vibebrowser-cli` command shape, JSON output, and tool routing work end to end |
|
|
19
|
+
| Codex + OpenCode MCP bridge | `npm run test:e2e:agents` | `local`, `pack`, `npm` | real extension session | packaged `vibebrowser-mcp` can be launched by Codex/OpenCode tooling and route MCP traffic to a real Vibe-connected browser |
|
|
20
|
+
| OpenCode financial eval (`../vibe`) | `node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source ...` | `auto`, `local`, `pack`, `npm` | harness-managed browser + extension | full OpenCode browser task execution against the Vibe extension |
|
|
21
|
+
|
|
22
|
+
Important scope note:
|
|
23
|
+
- There is **not yet** a full hosted OpenClaw runtime eval in this repo.
|
|
24
|
+
- Current OpenClaw coverage is the **OpenClaw-compatible CLI surface** (`vibebrowser-cli`) plus the `openclaw` helper and HTTP bridge docs.
|
|
25
|
+
- Do not claim full hosted OpenClaw runtime parity based only on the CLI test.
|
|
26
|
+
|
|
27
|
+
## Source Selectors
|
|
28
|
+
|
|
29
|
+
### Browser CLI harness
|
|
30
|
+
|
|
31
|
+
`scripts/e2e-browser-cli.mjs` now supports:
|
|
32
|
+
|
|
33
|
+
- `E2E_BROWSER_CLI_SOURCE=local`
|
|
34
|
+
- `E2E_BROWSER_CLI_SOURCE=pack`
|
|
35
|
+
- `E2E_BROWSER_CLI_SOURCE=npm`
|
|
36
|
+
|
|
37
|
+
Optional override:
|
|
38
|
+
|
|
39
|
+
- `E2E_BROWSER_CLI_PACKAGE=/absolute/or/relative/path/to/package.tgz`
|
|
40
|
+
|
|
41
|
+
`pack` mode creates a temporary tarball with `npm pack --json --pack-destination ...` and runs:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx -y --package <local-tarball> vibebrowser-cli ...
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### MCP agent harness
|
|
48
|
+
|
|
49
|
+
`scripts/e2e-mcp-agents.mjs` now supports:
|
|
50
|
+
|
|
51
|
+
- `E2E_MCP_SOURCE=local`
|
|
52
|
+
- `E2E_MCP_SOURCE=pack`
|
|
53
|
+
- `E2E_MCP_SOURCE=npm`
|
|
54
|
+
|
|
55
|
+
Optional override:
|
|
56
|
+
|
|
57
|
+
- `E2E_MCP_PACKAGE=/absolute/or/relative/path/to/package.tgz`
|
|
58
|
+
|
|
59
|
+
`pack` mode creates a temporary tarball and runs:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx -y --package <local-tarball> vibebrowser-mcp ...
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Cross-repo OpenCode eval
|
|
66
|
+
|
|
67
|
+
`../vibe/tests/mcp-eval.test.js` now accepts:
|
|
68
|
+
|
|
69
|
+
- `--mcp-source auto`
|
|
70
|
+
- `--mcp-source local`
|
|
71
|
+
- `--mcp-source pack`
|
|
72
|
+
- `--mcp-source npm`
|
|
73
|
+
- `--mcp-package <tarball-or-package-spec>`
|
|
74
|
+
|
|
75
|
+
Use `--mcp-source pack` when validating a release candidate before publish.
|
|
76
|
+
|
|
77
|
+
## Required Commands
|
|
78
|
+
|
|
79
|
+
### 1. Local regression suite
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
83
|
+
npm run build
|
|
84
|
+
npm test
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Pass signal:
|
|
88
|
+
|
|
89
|
+
- `npm test` exits `0`
|
|
90
|
+
- output contains:
|
|
91
|
+
- `e2e ok`
|
|
92
|
+
- `http e2e ok`
|
|
93
|
+
- `browser cli e2e ok`
|
|
94
|
+
|
|
95
|
+
### 2. Packaged CLI artifact validation
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
99
|
+
E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Pass signal:
|
|
103
|
+
|
|
104
|
+
- output contains `browser cli e2e ok`
|
|
105
|
+
- `vibebrowser-cli` is installed from a `.tgz` package artifact, not from the workspace
|
|
106
|
+
|
|
107
|
+
### 3. Packaged binary smoke check
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
111
|
+
TMP_DIR="$(mktemp -d)"
|
|
112
|
+
npm pack --json --pack-destination "$TMP_DIR"
|
|
113
|
+
npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-mcp --help
|
|
114
|
+
npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-cli --help
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Pass signal:
|
|
118
|
+
|
|
119
|
+
- `vibebrowser-mcp --help` prints the branded CLI
|
|
120
|
+
- `vibebrowser-cli --help` prints the standalone OpenClaw-compatible CLI
|
|
121
|
+
|
|
122
|
+
### 4. Real-extension agent eval
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
126
|
+
E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Pass signal:
|
|
130
|
+
|
|
131
|
+
- output contains `e2e ok`
|
|
132
|
+
- Codex uses `vibe-browser.*` tools
|
|
133
|
+
- OpenCode can resolve the same MCP config and report `vibe-browser connected`
|
|
134
|
+
|
|
135
|
+
Hard requirement:
|
|
136
|
+
|
|
137
|
+
- a live Vibe extension session must already be connected or connectable on the relay path
|
|
138
|
+
- this harness does **not** prove anything if the extension is absent
|
|
139
|
+
|
|
140
|
+
### 5. Full OpenCode browser eval in sibling repo
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
cd /Users/engineer/workspace/vibebrowser/vibe
|
|
144
|
+
node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source pack
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Pass criteria:
|
|
148
|
+
|
|
149
|
+
- `MCP External enabled: PASS`
|
|
150
|
+
- `Relay connected: PASS`
|
|
151
|
+
- `MCP tools used: PASS`
|
|
152
|
+
- `Tickers found: 6/6`
|
|
153
|
+
- process exits `0`
|
|
154
|
+
|
|
155
|
+
Note:
|
|
156
|
+
|
|
157
|
+
- this harness launches its own browser test environment from the `vibe` repo
|
|
158
|
+
- use it when you explicitly want the full browser-task eval, not just package smoke coverage
|
|
159
|
+
|
|
160
|
+
## Latest Verification Snapshot
|
|
161
|
+
|
|
162
|
+
Commands executed in this session:
|
|
163
|
+
|
|
164
|
+
| Command | Result | Notes |
|
|
165
|
+
|---|---|---|
|
|
166
|
+
| `npm run build` | PASS | local TypeScript build succeeded |
|
|
167
|
+
| `npm test` | PASS | relay race, HTTP, and local browser CLI e2e all passed |
|
|
168
|
+
| `E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs` | PASS | tarball-installed `vibebrowser-cli` passed end to end |
|
|
169
|
+
| `npm pack --json --pack-destination <tmp>` | PASS | tarball includes both `dist/cli.js` and `dist/browser-main.js` plus docs/openclaw skill files |
|
|
170
|
+
| `npx -y --package <local-tarball> vibebrowser-mcp --help` | PASS | branded `vibebrowser-mcp` binary available from package artifact |
|
|
171
|
+
| `npx -y --package <local-tarball> vibebrowser-cli --help` | PASS | standalone `vibebrowser-cli` binary available from package artifact |
|
|
172
|
+
| `E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs` | FAIL (environment) | timed out waiting for a live Vibe extension connection on the relay path |
|
|
173
|
+
| `npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --help` | PASS, but stale | published npm has the `vibebrowser-mcp` alias, but not the full new standalone CLI release shape |
|
|
174
|
+
| `npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --help` | FAIL | `vibebrowser-cli` is not present in the current npm `latest` release |
|
|
175
|
+
| `npm whoami` | FAIL | `ENEEDAUTH`; publish from this machine is currently blocked |
|
|
176
|
+
|
|
177
|
+
Observed real-extension agent failure:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
Error: Extension did not connect to relay within 120000ms. Ensure Vibe extension has MCP External enabled in the active Chrome profile.
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Interpretation:
|
|
184
|
+
|
|
185
|
+
- packaged artifacts are valid locally
|
|
186
|
+
- the standalone CLI branding and binaries are correct in the tarball
|
|
187
|
+
- published npm `latest` is **not yet** updated to the new branded binaries
|
|
188
|
+
- real-agent validation currently depends on a live extension session and was not satisfiable in this shell session
|
|
189
|
+
|
|
190
|
+
## Publish Reality
|
|
191
|
+
|
|
192
|
+
Current npm state:
|
|
193
|
+
|
|
194
|
+
- `npm view @vibebrowser/mcp version dist-tags.latest --json` returned `0.2.4`
|
|
195
|
+
- `@latest` still resolves to a partial older package surface
|
|
196
|
+
- `npm whoami` failed with `ENEEDAUTH`
|
|
197
|
+
|
|
198
|
+
Consequences:
|
|
199
|
+
|
|
200
|
+
- the new `vibebrowser-mcp` / `vibebrowser-cli` binaries are verified in a local tarball artifact
|
|
201
|
+
- they are **not yet published** to npm from this machine
|
|
202
|
+
- do not claim npm end-to-end availability until:
|
|
203
|
+
- a new version is cut
|
|
204
|
+
- publish auth is configured
|
|
205
|
+
- `npx -y --package @vibebrowser/mcp@<new-version> vibebrowser-cli --help` succeeds
|
|
206
|
+
|
|
207
|
+
## Tracking
|
|
208
|
+
|
|
209
|
+
- Tracking issue: `VibeTechnologies/vibe-mcp#22`
|