@jobshimo/browser-link 0.2.0 → 0.4.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 +37 -0
- package/dist/bridge/client.d.ts +101 -0
- package/dist/bridge/client.js +435 -0
- package/dist/bridge/client.js.map +1 -0
- package/dist/bridge/dispatch.d.ts +29 -0
- package/dist/bridge/dispatch.js +39 -0
- package/dist/bridge/dispatch.js.map +1 -0
- package/dist/bridge/events.d.ts +39 -0
- package/dist/bridge/events.js +47 -0
- package/dist/bridge/events.js.map +1 -0
- package/dist/bridge/protocol.d.ts +80 -0
- package/dist/bridge/protocol.js +79 -0
- package/dist/bridge/protocol.js.map +1 -0
- package/dist/bridge/server.d.ts +42 -0
- package/dist/bridge/server.js +336 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/bridge/token.d.ts +17 -0
- package/dist/bridge/token.js +79 -0
- package/dist/bridge/token.js.map +1 -0
- package/dist/cli.js +94 -15
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +12 -1
- package/dist/commands/doctor.js +90 -20
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/extension.d.ts +3 -2
- package/dist/commands/extension.js +53 -28
- package/dist/commands/extension.js.map +1 -1
- package/dist/commands/multi-agent.d.ts +7 -0
- package/dist/commands/multi-agent.js +109 -0
- package/dist/commands/multi-agent.js.map +1 -0
- package/dist/commands/tools.d.ts +11 -0
- package/dist/commands/tools.js +168 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/updates.d.ts +2 -1
- package/dist/commands/updates.js +24 -7
- package/dist/commands/updates.js.map +1 -1
- package/dist/config.d.ts +25 -3
- package/dist/config.js +35 -2
- package/dist/config.js.map +1 -1
- package/dist/messages.d.ts +7 -0
- package/dist/permissions.d.ts +37 -0
- package/dist/permissions.js +156 -0
- package/dist/permissions.js.map +1 -0
- package/dist/server.d.ts +7 -3
- package/dist/server.js +160 -32
- package/dist/server.js.map +1 -1
- package/dist/tools/browser-definitions.js +18 -0
- package/dist/tools/browser-definitions.js.map +1 -1
- package/dist/tools/browser-dispatch.d.ts +7 -0
- package/dist/tools/browser-dispatch.js +11 -0
- package/dist/tools/browser-dispatch.js.map +1 -1
- package/dist/tools/server-instructions.d.ts +1 -1
- package/dist/tools/server-instructions.js +4 -0
- package/dist/tools/server-instructions.js.map +1 -1
- package/dist/ui/app.js +16 -1
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/screens.d.ts +14 -1
- package/dist/ui/screens.js +314 -2
- package/dist/ui/screens.js.map +1 -1
- package/package.json +4 -3
package/dist/messages.d.ts
CHANGED
|
@@ -9,6 +9,13 @@ export type TabId = string;
|
|
|
9
9
|
export interface TabRegisterPayload {
|
|
10
10
|
url: string;
|
|
11
11
|
title: string;
|
|
12
|
+
/**
|
|
13
|
+
* Optional. The browser-link tab_id this Chrome tab last had, as
|
|
14
|
+
* remembered by the extension across primary swaps. The primary honours
|
|
15
|
+
* it if free; otherwise it assigns a new id and emits a `tab-renamed`
|
|
16
|
+
* event the agent can pick up via the `browser.events` tool.
|
|
17
|
+
*/
|
|
18
|
+
previousTabId?: TabId;
|
|
12
19
|
}
|
|
13
20
|
export interface TabRegisteredPayload {
|
|
14
21
|
tabId: TabId;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool access control — single source of truth for which MCP tools
|
|
3
|
+
* browser-link exposes and how the user can narrow that down.
|
|
4
|
+
*
|
|
5
|
+
* The runtime answer to "is this tool allowed?" is computed from the
|
|
6
|
+
* `disabledTools` list in `config.json` (default: empty = everything
|
|
7
|
+
* allowed). The catalogue below adds human-readable metadata used by
|
|
8
|
+
* the UI and the CLI subcommand — it never affects what the MCP server
|
|
9
|
+
* returns by itself.
|
|
10
|
+
*/
|
|
11
|
+
export type ToolFamily = 'bridge' | 'map';
|
|
12
|
+
/** Coarse-grained behaviour bucket — used by presets, not by the runtime
|
|
13
|
+
* filter. The runtime only cares about the exact tool name. */
|
|
14
|
+
export type ToolCategory = 'read' | 'action' | 'eval' | 'map-read' | 'map-write';
|
|
15
|
+
export interface ToolMeta {
|
|
16
|
+
name: string;
|
|
17
|
+
family: ToolFamily;
|
|
18
|
+
category: ToolCategory;
|
|
19
|
+
summary: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const TOOL_CATALOGUE: readonly ToolMeta[];
|
|
22
|
+
export type PresetId = 'all' | 'readonly' | 'no-eval' | 'no-map';
|
|
23
|
+
export interface PresetDef {
|
|
24
|
+
id: PresetId;
|
|
25
|
+
label: string;
|
|
26
|
+
/** Which tool names this preset disables. */
|
|
27
|
+
disabled: readonly string[];
|
|
28
|
+
}
|
|
29
|
+
export declare const PRESETS: readonly PresetDef[];
|
|
30
|
+
/** True when the tool should be exposed in tools/list and accepted in tools/call. */
|
|
31
|
+
export declare function isToolEnabled(name: string, disabled: readonly string[] | undefined): boolean;
|
|
32
|
+
/** Drop entries that don't match any current tool, dedupe, and sort. Used
|
|
33
|
+
* before writing the list to disk and after reading it back, so unknown
|
|
34
|
+
* names from older or newer versions never poison the runtime. */
|
|
35
|
+
export declare function sanitizeDisabledTools(input: readonly string[] | undefined): string[];
|
|
36
|
+
export declare function getPreset(id: PresetId): PresetDef;
|
|
37
|
+
export declare function isKnownTool(name: string): boolean;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool access control — single source of truth for which MCP tools
|
|
3
|
+
* browser-link exposes and how the user can narrow that down.
|
|
4
|
+
*
|
|
5
|
+
* The runtime answer to "is this tool allowed?" is computed from the
|
|
6
|
+
* `disabledTools` list in `config.json` (default: empty = everything
|
|
7
|
+
* allowed). The catalogue below adds human-readable metadata used by
|
|
8
|
+
* the UI and the CLI subcommand — it never affects what the MCP server
|
|
9
|
+
* returns by itself.
|
|
10
|
+
*/
|
|
11
|
+
export const TOOL_CATALOGUE = [
|
|
12
|
+
// Browser bridge — read-only
|
|
13
|
+
{ name: 'browser.list_tabs', family: 'bridge', category: 'read', summary: 'List connected tabs' },
|
|
14
|
+
{
|
|
15
|
+
name: 'browser.ping',
|
|
16
|
+
family: 'bridge',
|
|
17
|
+
category: 'read',
|
|
18
|
+
summary: 'Verify the bridge to a tab',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'browser.snapshot',
|
|
22
|
+
family: 'bridge',
|
|
23
|
+
category: 'read',
|
|
24
|
+
summary: 'Dump DOM, text and interactive elements',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'browser.console',
|
|
28
|
+
family: 'bridge',
|
|
29
|
+
category: 'read',
|
|
30
|
+
summary: 'Read recent console messages',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'browser.network',
|
|
34
|
+
family: 'bridge',
|
|
35
|
+
category: 'read',
|
|
36
|
+
summary: 'Read recent network requests',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'browser.network_body',
|
|
40
|
+
family: 'bridge',
|
|
41
|
+
category: 'read',
|
|
42
|
+
summary: 'Fetch the body of a specific request',
|
|
43
|
+
},
|
|
44
|
+
// Browser bridge — actions
|
|
45
|
+
{
|
|
46
|
+
name: 'browser.navigate',
|
|
47
|
+
family: 'bridge',
|
|
48
|
+
category: 'action',
|
|
49
|
+
summary: 'Navigate the tab to a URL',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'browser.click',
|
|
53
|
+
family: 'bridge',
|
|
54
|
+
category: 'action',
|
|
55
|
+
summary: 'Click an element by CSS selector',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'browser.type',
|
|
59
|
+
family: 'bridge',
|
|
60
|
+
category: 'action',
|
|
61
|
+
summary: 'Type text into an input',
|
|
62
|
+
},
|
|
63
|
+
// Browser bridge — arbitrary code
|
|
64
|
+
{
|
|
65
|
+
name: 'browser.evaluate',
|
|
66
|
+
family: 'bridge',
|
|
67
|
+
category: 'eval',
|
|
68
|
+
summary: 'Run arbitrary JavaScript in the page',
|
|
69
|
+
},
|
|
70
|
+
// Persistent map — reads
|
|
71
|
+
{
|
|
72
|
+
name: 'browser.map.recall',
|
|
73
|
+
family: 'map',
|
|
74
|
+
category: 'map-read',
|
|
75
|
+
summary: 'Recall selectors / flows / gotchas for an app',
|
|
76
|
+
},
|
|
77
|
+
{ name: 'browser.map.apps', family: 'map', category: 'map-read', summary: 'List known apps' },
|
|
78
|
+
// Persistent map — writes
|
|
79
|
+
{
|
|
80
|
+
name: 'browser.map.save',
|
|
81
|
+
family: 'map',
|
|
82
|
+
category: 'map-write',
|
|
83
|
+
summary: 'Persist a selector / flow / gotcha',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'browser.map.record_use',
|
|
87
|
+
family: 'map',
|
|
88
|
+
category: 'map-write',
|
|
89
|
+
summary: 'Mark an entry verified or failed',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'browser.map.forget',
|
|
93
|
+
family: 'map',
|
|
94
|
+
category: 'map-write',
|
|
95
|
+
summary: 'Delete an entry or a whole app',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'browser.map.rename_app',
|
|
99
|
+
family: 'map',
|
|
100
|
+
category: 'map-write',
|
|
101
|
+
summary: 'Rename an app_key',
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
function namesWhere(predicate) {
|
|
105
|
+
return TOOL_CATALOGUE.filter(predicate)
|
|
106
|
+
.map((m) => m.name)
|
|
107
|
+
.sort();
|
|
108
|
+
}
|
|
109
|
+
export const PRESETS = [
|
|
110
|
+
{ id: 'all', label: 'All enabled', disabled: [] },
|
|
111
|
+
{
|
|
112
|
+
id: 'readonly',
|
|
113
|
+
label: 'Read-only (no actions, no JS, no map writes)',
|
|
114
|
+
disabled: namesWhere((m) => m.category === 'action' || m.category === 'eval' || m.category === 'map-write'),
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 'no-eval',
|
|
118
|
+
label: 'No evaluate (everything except arbitrary JS)',
|
|
119
|
+
disabled: ['browser.evaluate'],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: 'no-map',
|
|
123
|
+
label: 'No persistent map (all bridge tools on)',
|
|
124
|
+
disabled: namesWhere((m) => m.family === 'map'),
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
const KNOWN_NAMES = new Set(TOOL_CATALOGUE.map((m) => m.name));
|
|
128
|
+
/** True when the tool should be exposed in tools/list and accepted in tools/call. */
|
|
129
|
+
export function isToolEnabled(name, disabled) {
|
|
130
|
+
if (!disabled || disabled.length === 0)
|
|
131
|
+
return true;
|
|
132
|
+
return !disabled.includes(name);
|
|
133
|
+
}
|
|
134
|
+
/** Drop entries that don't match any current tool, dedupe, and sort. Used
|
|
135
|
+
* before writing the list to disk and after reading it back, so unknown
|
|
136
|
+
* names from older or newer versions never poison the runtime. */
|
|
137
|
+
export function sanitizeDisabledTools(input) {
|
|
138
|
+
if (!input || input.length === 0)
|
|
139
|
+
return [];
|
|
140
|
+
const out = new Set();
|
|
141
|
+
for (const name of input) {
|
|
142
|
+
if (typeof name === 'string' && KNOWN_NAMES.has(name))
|
|
143
|
+
out.add(name);
|
|
144
|
+
}
|
|
145
|
+
return [...out].sort();
|
|
146
|
+
}
|
|
147
|
+
export function getPreset(id) {
|
|
148
|
+
const found = PRESETS.find((p) => p.id === id);
|
|
149
|
+
if (!found)
|
|
150
|
+
throw new Error(`Unknown preset: ${id}`);
|
|
151
|
+
return found;
|
|
152
|
+
}
|
|
153
|
+
export function isKnownTool(name) {
|
|
154
|
+
return KNOWN_NAMES.has(name);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export declare const WS_HOST = "127.0.0.1";
|
|
2
2
|
export declare const WS_PORT = 17529;
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
/**
|
|
4
|
+
* Entry point used by the MCP client over stdio. Decides whether THIS
|
|
5
|
+
* process becomes the primary (binds 17529, runs the WS bridge + MCP
|
|
6
|
+
* server + optional IPC server) or — when multi-agent mode is enabled
|
|
7
|
+
* and another primary is already running — becomes a thin proxy that
|
|
8
|
+
* forwards MCP stdio frames to the primary over IPC.
|
|
9
|
+
*/
|
|
6
10
|
export declare function runServer(): Promise<void>;
|
package/dist/server.js
CHANGED
|
@@ -3,14 +3,15 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
import { WebSocketServer } from 'ws';
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
|
-
import { MAP_TOOL_DEFINITIONS, handleMapTool, isMapTool } from './map/tools.js';
|
|
7
6
|
import { closeDb } from './map/db.js';
|
|
8
7
|
import { isAllowedBrowser } from './auth/allowlist.js';
|
|
9
8
|
import { lookupPeerProcess } from './auth/process-identity.js';
|
|
10
|
-
import { BROWSER_TOOL_DEFINITIONS } from './tools/browser-definitions.js';
|
|
11
|
-
import { handleBrowserTool, isBrowserTool, } from './tools/browser-dispatch.js';
|
|
12
|
-
import { toolError, toolResponse } from './tools/responses.js';
|
|
13
9
|
import { SERVER_INSTRUCTIONS } from './tools/server-instructions.js';
|
|
10
|
+
import { loadConfig } from './config.js';
|
|
11
|
+
import { handleToolCall, handleToolsList } from './bridge/dispatch.js';
|
|
12
|
+
import { IpcServer } from './bridge/server.js';
|
|
13
|
+
import { runProxy } from './bridge/client.js';
|
|
14
|
+
import { BridgeEventLog } from './bridge/events.js';
|
|
14
15
|
export const WS_HOST = '127.0.0.1';
|
|
15
16
|
export const WS_PORT = 17529;
|
|
16
17
|
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
@@ -44,7 +45,7 @@ function normaliseLoopback(addr) {
|
|
|
44
45
|
return addr.slice('::ffff:'.length);
|
|
45
46
|
return addr;
|
|
46
47
|
}
|
|
47
|
-
function startWsBridge(tabs, pendingRequests) {
|
|
48
|
+
function startWsBridge(tabs, pendingRequests, events) {
|
|
48
49
|
return new Promise((resolve, reject) => {
|
|
49
50
|
const wss = new WebSocketServer({
|
|
50
51
|
host: WS_HOST,
|
|
@@ -103,7 +104,21 @@ function startWsBridge(tabs, pendingRequests) {
|
|
|
103
104
|
if (!msg)
|
|
104
105
|
return;
|
|
105
106
|
if (msg.kind === 'tab.register' && !assignedTabId) {
|
|
106
|
-
|
|
107
|
+
// The extension may pass `previousTabId` so we can preserve the
|
|
108
|
+
// browser-link tab id across primary swaps. We honour it when it
|
|
109
|
+
// is free; otherwise we assign a new id and emit `tab-renamed`
|
|
110
|
+
// so the agent can recover.
|
|
111
|
+
const previousTabId = typeof msg.payload.previousTabId === 'string' ? msg.payload.previousTabId : undefined;
|
|
112
|
+
if (previousTabId && !tabs.has(previousTabId) && /^tab_\d+$/.test(previousTabId)) {
|
|
113
|
+
assignedTabId = previousTabId;
|
|
114
|
+
// Bump the counter so future fresh assignments don't collide.
|
|
115
|
+
const n = parseInt(previousTabId.slice('tab_'.length), 10);
|
|
116
|
+
if (Number.isFinite(n) && n > tabIdCounter)
|
|
117
|
+
tabIdCounter = n;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
assignedTabId = assignTabId();
|
|
121
|
+
}
|
|
107
122
|
tabs.set(assignedTabId, {
|
|
108
123
|
tabId: assignedTabId,
|
|
109
124
|
url: msg.payload.url,
|
|
@@ -112,6 +127,22 @@ function startWsBridge(tabs, pendingRequests) {
|
|
|
112
127
|
});
|
|
113
128
|
send(ws, { kind: 'tab.registered', payload: { tabId: assignedTabId } });
|
|
114
129
|
log(`Tab registered: ${assignedTabId} -> ${msg.payload.url}`);
|
|
130
|
+
if (previousTabId && previousTabId !== assignedTabId) {
|
|
131
|
+
events.add('tab-renamed', {
|
|
132
|
+
previous: previousTabId,
|
|
133
|
+
current: assignedTabId,
|
|
134
|
+
url: msg.payload.url,
|
|
135
|
+
title: msg.payload.title,
|
|
136
|
+
});
|
|
137
|
+
log(`Tab id renamed: ${previousTabId} -> ${assignedTabId}`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
events.add('tab-registered', {
|
|
141
|
+
tabId: assignedTabId,
|
|
142
|
+
url: msg.payload.url,
|
|
143
|
+
title: msg.payload.title,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
115
146
|
return;
|
|
116
147
|
}
|
|
117
148
|
if (msg.kind === 'tool.response') {
|
|
@@ -129,6 +160,7 @@ function startWsBridge(tabs, pendingRequests) {
|
|
|
129
160
|
ws.on('close', () => {
|
|
130
161
|
if (assignedTabId) {
|
|
131
162
|
tabs.delete(assignedTabId);
|
|
163
|
+
events.add('tab-disconnected', { tabId: assignedTabId });
|
|
132
164
|
log(`Tab disconnected: ${assignedTabId}`);
|
|
133
165
|
}
|
|
134
166
|
});
|
|
@@ -143,19 +175,33 @@ function assignTabId() {
|
|
|
143
175
|
tabIdCounter += 1;
|
|
144
176
|
return `tab_${tabIdCounter}`;
|
|
145
177
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
178
|
+
/** Sentinel error used by runServer() to detect a port-in-use and decide
|
|
179
|
+
* whether to fall back to proxy mode. Anything else propagates unchanged. */
|
|
180
|
+
class AddrInUseError extends Error {
|
|
181
|
+
constructor() {
|
|
182
|
+
super(`browser-link: port ${WS_HOST}:${WS_PORT} is already in use.`);
|
|
183
|
+
this.name = 'AddrInUseError';
|
|
151
184
|
}
|
|
185
|
+
}
|
|
186
|
+
function translateBindError(err) {
|
|
187
|
+
if (err.code === 'EADDRINUSE')
|
|
188
|
+
return new AddrInUseError();
|
|
152
189
|
return err;
|
|
153
190
|
}
|
|
191
|
+
function isAddrInUse(err) {
|
|
192
|
+
return err instanceof AddrInUseError;
|
|
193
|
+
}
|
|
154
194
|
function buildCallBrowserTool(tabs, pendingRequests) {
|
|
155
195
|
return (tabId, tool, params, timeoutMs = DEFAULT_TIMEOUT_MS) => {
|
|
156
196
|
const session = tabs.get(tabId);
|
|
157
|
-
if (!session)
|
|
158
|
-
|
|
197
|
+
if (!session) {
|
|
198
|
+
// Auto-hint pointing the agent at `browser.events`. The event log
|
|
199
|
+
// tracks tab-renamed entries that explain stale tab_ids after a
|
|
200
|
+
// primary swap, so the agent can self-recover instead of failing.
|
|
201
|
+
return Promise.reject(new Error(`Tab not connected: ${tabId}. The Chrome extension may have re-registered with a new id ` +
|
|
202
|
+
`after a primary change. Call browser.events (look for tab-renamed entries with previous=${tabId}) ` +
|
|
203
|
+
`to find the current id, then retry the call on it.`));
|
|
204
|
+
}
|
|
159
205
|
const id = randomUUID();
|
|
160
206
|
return new Promise((resolve, reject) => {
|
|
161
207
|
const timeout = setTimeout(() => {
|
|
@@ -174,44 +220,126 @@ function buildListTabs(tabs) {
|
|
|
174
220
|
title: t.title,
|
|
175
221
|
}));
|
|
176
222
|
}
|
|
177
|
-
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
223
|
+
/**
|
|
224
|
+
* Entry point used by the MCP client over stdio. Decides whether THIS
|
|
225
|
+
* process becomes the primary (binds 17529, runs the WS bridge + MCP
|
|
226
|
+
* server + optional IPC server) or — when multi-agent mode is enabled
|
|
227
|
+
* and another primary is already running — becomes a thin proxy that
|
|
228
|
+
* forwards MCP stdio frames to the primary over IPC.
|
|
229
|
+
*/
|
|
180
230
|
export async function runServer() {
|
|
231
|
+
const cfg = loadConfig();
|
|
232
|
+
try {
|
|
233
|
+
await runPrimary(cfg);
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
if (!isAddrInUse(err))
|
|
237
|
+
throw err;
|
|
238
|
+
if (cfg.multiAgent === true) {
|
|
239
|
+
// Another primary is already running — degrade to proxy mode so this
|
|
240
|
+
// MCP client can still reach the bridge.
|
|
241
|
+
await runProxyMode();
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
throw new Error(`browser-link: port ${WS_HOST}:${WS_PORT} is already in use by another browser-link instance.\n` +
|
|
245
|
+
`\n` +
|
|
246
|
+
`Enable multi-agent mode if you want multiple MCP clients (Claude + Copilot + OpenCode) to share one bridge:\n` +
|
|
247
|
+
` • From a terminal: \`browser-link multi-agent enable\`\n` +
|
|
248
|
+
` • Or open the setup menu: \`browser-link\` → Multi-agent\n` +
|
|
249
|
+
`\n` +
|
|
250
|
+
`Then restart your MCP client. With multi-agent on, this process would have become a proxy instead of erroring.`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function runPrimary(cfg) {
|
|
181
254
|
const tabs = new Map();
|
|
182
255
|
const pendingRequests = new Map();
|
|
183
|
-
|
|
184
|
-
//
|
|
185
|
-
|
|
256
|
+
const events = new BridgeEventLog();
|
|
257
|
+
// First event of every primary: who am I and when did I start. The agent
|
|
258
|
+
// sees this when calling browser.events after a "Tab not connected".
|
|
259
|
+
events.add('primary-elected', {
|
|
260
|
+
pid: process.pid,
|
|
261
|
+
multiAgent: cfg.multiAgent === true,
|
|
262
|
+
});
|
|
263
|
+
// Bind the WS bridge first. AddrInUseError propagates up to runServer()
|
|
264
|
+
// so the caller can decide between proxy mode and a clear error.
|
|
265
|
+
await startWsBridge(tabs, pendingRequests, events);
|
|
186
266
|
const deps = {
|
|
187
267
|
listTabs: buildListTabs(tabs),
|
|
188
268
|
callBrowserTool: buildCallBrowserTool(tabs, pendingRequests),
|
|
269
|
+
recentEvents: (opts) => events.recent(opts),
|
|
189
270
|
};
|
|
271
|
+
// Snapshot the user's deny-list at boot. Changes made via the standalone
|
|
272
|
+
// CLI/UI while the MCP server is already running do NOT take effect until
|
|
273
|
+
// the MCP client restarts — the welcome and permissions screens both warn
|
|
274
|
+
// the user about that.
|
|
275
|
+
const disabledTools = cfg.disabledTools ?? [];
|
|
276
|
+
if (disabledTools.length > 0) {
|
|
277
|
+
log(`Tool filter active — ${disabledTools.length} disabled: ${disabledTools.join(', ')}`);
|
|
278
|
+
}
|
|
279
|
+
const dispatchDeps = { browserTools: deps, disabledTools };
|
|
190
280
|
const mcpServer = new Server({ name: 'browser-link', version: '0.0.1' }, { capabilities: { tools: {} }, instructions: SERVER_INSTRUCTIONS });
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
mcpServer.setRequestHandler(CallToolRequestSchema, async (req) =>
|
|
195
|
-
|
|
281
|
+
// The SDK's request-handler return types include task/streaming variants we
|
|
282
|
+
// never produce. Cast keeps the shared dispatch module SDK-agnostic.
|
|
283
|
+
mcpServer.setRequestHandler(ListToolsRequestSchema, async () => handleToolsList(dispatchDeps));
|
|
284
|
+
mcpServer.setRequestHandler(CallToolRequestSchema, async (req) => (await handleToolCall(req.params, dispatchDeps)));
|
|
285
|
+
// Optional: open the IPC bridge for proxy connections, but only when
|
|
286
|
+
// multi-agent mode is opt-in via config. Default is off — this keeps
|
|
287
|
+
// behaviour identical for users who never enable the feature.
|
|
288
|
+
let ipcServer = null;
|
|
289
|
+
if (cfg.multiAgent === true) {
|
|
290
|
+
ipcServer = new IpcServer(dispatchDeps);
|
|
196
291
|
try {
|
|
197
|
-
|
|
198
|
-
return toolResponse(handleMapTool(name, args));
|
|
199
|
-
if (isBrowserTool(name))
|
|
200
|
-
return toolResponse(await handleBrowserTool(name, args, deps));
|
|
201
|
-
return toolError(`Unknown tool: ${name}`);
|
|
292
|
+
await ipcServer.start();
|
|
202
293
|
}
|
|
203
294
|
catch (err) {
|
|
204
|
-
|
|
295
|
+
// Surface and keep going. The primary MCP server still works for the
|
|
296
|
+
// current client even if multi-agent failed to come up.
|
|
297
|
+
log(`Multi-agent IPC failed to start: ${err instanceof Error ? err.message : String(err)}`);
|
|
298
|
+
ipcServer = null;
|
|
205
299
|
}
|
|
206
|
-
}
|
|
300
|
+
}
|
|
207
301
|
const transport = new StdioServerTransport();
|
|
208
302
|
await mcpServer.connect(transport);
|
|
209
|
-
log(
|
|
303
|
+
log(`MCP server ready on stdio (role=primary${ipcServer ? ', multi-agent=on' : ''})`);
|
|
210
304
|
for (const sig of ['SIGINT', 'SIGTERM']) {
|
|
211
305
|
process.once(sig, () => {
|
|
306
|
+
if (ipcServer) {
|
|
307
|
+
// Best-effort: tell connected proxies we're going down so they can
|
|
308
|
+
// trigger auto-reelect (phase 4) and not just hit a dead socket.
|
|
309
|
+
ipcServer.stop().catch(() => {
|
|
310
|
+
/* shutting down; ignore */
|
|
311
|
+
});
|
|
312
|
+
}
|
|
212
313
|
closeDb();
|
|
213
314
|
process.exit(0);
|
|
214
315
|
});
|
|
215
316
|
}
|
|
216
317
|
}
|
|
318
|
+
/** Connect to the running primary as a proxy and pipe MCP stdio through.
|
|
319
|
+
* When autoReelect is enabled in config, the proxy survives IPC drops
|
|
320
|
+
* by waiting for a fresh primary to appear and reconnecting. */
|
|
321
|
+
async function runProxyMode() {
|
|
322
|
+
const cfg = loadConfig();
|
|
323
|
+
const autoReelect = cfg.autoReelect === true;
|
|
324
|
+
log(`Port in use — connecting as proxy to the running primary` +
|
|
325
|
+
(autoReelect ? ' (auto-reelect on).' : '.'));
|
|
326
|
+
let exiting = false;
|
|
327
|
+
const handle = await runProxy({
|
|
328
|
+
autoReelect,
|
|
329
|
+
onClose: (reason) => {
|
|
330
|
+
if (exiting)
|
|
331
|
+
return;
|
|
332
|
+
exiting = true;
|
|
333
|
+
log(`Primary connection closed (${reason}). Exiting so the MCP client can respawn.`);
|
|
334
|
+
// Exit with non-zero so the MCP client knows something abnormal happened.
|
|
335
|
+
process.exit(reason === 'primary-closing' ? 0 : 1);
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
log(`Proxy ready — forwarding MCP frames to the primary` +
|
|
339
|
+
(autoReelect ? ' (auto-reelect on).' : '.'));
|
|
340
|
+
// Wait until the IPC connection drops AND any reelect window expires;
|
|
341
|
+
// runProxy resolves once the pipe is wired so this await holds the
|
|
342
|
+
// process alive.
|
|
343
|
+
await handle.closed;
|
|
344
|
+
}
|
|
217
345
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -123,5 +123,23 @@ export const BROWSER_TOOL_DEFINITIONS = [
|
|
|
123
123
|
additionalProperties: false,
|
|
124
124
|
},
|
|
125
125
|
},
|
|
126
|
+
{
|
|
127
|
+
name: 'browser.events',
|
|
128
|
+
description: 'Return recent bridge lifecycle events: primary-elected (a new browser-link primary started), tab-registered / tab-disconnected (Chrome tabs joined/left), tab-renamed (the same Chrome tab got a new tab_id, usually after a primary swap). Call this when you get "Tab not connected: …" so you can pick up the new tab_id and resume work. Returns { events, latest_id } — pass latest_id back as since_id next time to get only new entries.',
|
|
129
|
+
inputSchema: {
|
|
130
|
+
type: 'object',
|
|
131
|
+
properties: {
|
|
132
|
+
since_id: {
|
|
133
|
+
type: 'number',
|
|
134
|
+
description: 'Only return events with id > since_id. Omit to get the most recent slice.',
|
|
135
|
+
},
|
|
136
|
+
limit: {
|
|
137
|
+
type: 'number',
|
|
138
|
+
description: 'Maximum number of events to return (default 20, max 200).',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
additionalProperties: false,
|
|
142
|
+
},
|
|
143
|
+
},
|
|
126
144
|
];
|
|
127
145
|
//# sourceMappingURL=browser-definitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-definitions.js","sourceRoot":"","sources":["../../src/tools/browser-definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAqB;IACxD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,8KAA8K;QAChL,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE;KAC7E;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACpE,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;aAClD;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC3B,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,wOAAwO;QAC1O,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,kIAAkI;QACpI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;aAC3E;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,mNAAmN;QACrN,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE;aAC1F;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,2FAA2F;QAC7F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC/B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;YAClC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,0GAA0G;QAC5G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC7B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;YAChC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sGAAsG;QACxG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aAC3C;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;YACxC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC/B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;YAClC,oBAAoB,EAAE,KAAK;SAC5B;KACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"browser-definitions.js","sourceRoot":"","sources":["../../src/tools/browser-definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAqB;IACxD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,8KAA8K;QAChL,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE;KAC7E;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACpE,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;aAClD;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC3B,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,wOAAwO;QAC1O,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,kIAAkI;QACpI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;aAC3E;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,mNAAmN;QACrN,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE;aAC1F;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,2FAA2F;QAC7F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC/B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;YAClC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,0GAA0G;QAC5G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC7B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;YAChC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sGAAsG;QACxG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aAC3C;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;YACxC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC/B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;YAClC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,ibAAib;QACnb,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2EAA2E;iBACzF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2DAA2D;iBACzE;aACF;YACD,oBAAoB,EAAE,KAAK;SAC5B;KACF;CACF,CAAC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* with the live tab map and the call function. This makes the dispatcher
|
|
8
8
|
* unit-testable with a fake `callBrowserTool`.
|
|
9
9
|
*/
|
|
10
|
+
import type { BridgeEvent } from '../bridge/events.js';
|
|
10
11
|
export interface TabSnapshot {
|
|
11
12
|
tab_id: string;
|
|
12
13
|
url: string;
|
|
@@ -15,6 +16,12 @@ export interface TabSnapshot {
|
|
|
15
16
|
export interface BrowserToolDeps {
|
|
16
17
|
listTabs(): TabSnapshot[];
|
|
17
18
|
callBrowserTool(tabId: string, tool: string, params: unknown, timeoutMs?: number): Promise<unknown>;
|
|
19
|
+
/** Optional event-log accessor — when present, `browser.events` returns
|
|
20
|
+
* its slice. When absent (e.g. in unit tests), the tool returns []. */
|
|
21
|
+
recentEvents?(opts: {
|
|
22
|
+
sinceId?: number;
|
|
23
|
+
limit?: number;
|
|
24
|
+
}): BridgeEvent[];
|
|
18
25
|
}
|
|
19
26
|
export declare function isBrowserTool(name: string): boolean;
|
|
20
27
|
export declare function handleBrowserTool(name: string, args: unknown, deps: BrowserToolDeps): Promise<unknown>;
|
|
@@ -65,6 +65,17 @@ const BROWSER_TOOL_HANDLERS = new Map([
|
|
|
65
65
|
return deps.callBrowserTool(requireTabId(args), 'evaluate', { expression });
|
|
66
66
|
},
|
|
67
67
|
],
|
|
68
|
+
[
|
|
69
|
+
'browser.events',
|
|
70
|
+
(args, deps) => {
|
|
71
|
+
const { since_id, limit } = args ?? {};
|
|
72
|
+
if (!deps.recentEvents)
|
|
73
|
+
return { events: [], latest_id: 0 };
|
|
74
|
+
const events = deps.recentEvents({ sinceId: since_id, limit });
|
|
75
|
+
const latest_id = events.length > 0 ? events[events.length - 1].id : (since_id ?? 0);
|
|
76
|
+
return { events, latest_id };
|
|
77
|
+
},
|
|
78
|
+
],
|
|
68
79
|
]);
|
|
69
80
|
export async function handleBrowserTool(name, args, deps) {
|
|
70
81
|
const handler = BROWSER_TOOL_HANDLERS.get(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-dispatch.js","sourceRoot":"","sources":["../../src/tools/browser-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-dispatch.js","sourceRoot":"","sources":["../../src/tools/browser-dispatch.ts"],"names":[],"mappings":"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"}
|