@jobshimo/browser-link 0.1.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 +58 -21
- 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 +132 -39
- package/dist/cli.js.map +1 -1
- package/dist/commands/about.d.ts +3 -6
- package/dist/commands/about.js +2 -18
- package/dist/commands/about.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 +20 -0
- package/dist/commands/updates.js +100 -0
- package/dist/commands/updates.js.map +1 -0
- package/dist/commands/welcome.d.ts +2 -1
- package/dist/commands/welcome.js +11 -47
- package/dist/commands/welcome.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/installers/copilot.d.ts +2 -0
- package/dist/installers/copilot.js +72 -0
- package/dist/installers/copilot.js.map +1 -0
- package/dist/installers/index.js +2 -1
- package/dist/installers/index.js.map +1 -1
- package/dist/installers/types.d.ts +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.d.ts +7 -0
- package/dist/ui/app.js +77 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components.d.ts +18 -0
- package/dist/ui/components.js +27 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/screens.d.ts +61 -0
- package/dist/ui/screens.js +603 -0
- package/dist/ui/screens.js.map +1 -0
- package/dist/ui/start.d.ts +6 -0
- package/dist/ui/start.js +19 -0
- package/dist/ui/start.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/package.json +10 -4
- package/dist/commands/menu.d.ts +0 -25
- package/dist/commands/menu.js +0 -167
- package/dist/commands/menu.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure MCP request handlers — used by both the SDK Server (stdio transport)
|
|
3
|
+
* and the IPC bridge (TCP transport for proxies). Lives in `bridge/` because
|
|
4
|
+
* sharing it with the IPC server was the reason to extract these out of
|
|
5
|
+
* the monolithic server.ts startup.
|
|
6
|
+
*
|
|
7
|
+
* No I/O, no transport, no SDK types — just request data in, response data
|
|
8
|
+
* out. Both callers wrap these results in whatever envelope they need.
|
|
9
|
+
*/
|
|
10
|
+
import { type BrowserToolDeps } from '../tools/browser-dispatch.js';
|
|
11
|
+
export interface DispatchDeps {
|
|
12
|
+
browserTools: BrowserToolDeps;
|
|
13
|
+
disabledTools: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
/** Mirror of MCP `tools/list` shape. Kept minimal so the IPC layer can
|
|
16
|
+
* forward it as a JSON-RPC result without any SDK-specific transformations. */
|
|
17
|
+
export interface ToolsListResult {
|
|
18
|
+
tools: ReadonlyArray<{
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
inputSchema: Record<string, unknown>;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
export declare function handleToolsList(deps: DispatchDeps): ToolsListResult;
|
|
25
|
+
export interface ToolCallRequest {
|
|
26
|
+
name: string;
|
|
27
|
+
arguments?: unknown;
|
|
28
|
+
}
|
|
29
|
+
export declare function handleToolCall(req: ToolCallRequest, deps: DispatchDeps): Promise<import("../tools/responses.js").ToolResponse>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure MCP request handlers — used by both the SDK Server (stdio transport)
|
|
3
|
+
* and the IPC bridge (TCP transport for proxies). Lives in `bridge/` because
|
|
4
|
+
* sharing it with the IPC server was the reason to extract these out of
|
|
5
|
+
* the monolithic server.ts startup.
|
|
6
|
+
*
|
|
7
|
+
* No I/O, no transport, no SDK types — just request data in, response data
|
|
8
|
+
* out. Both callers wrap these results in whatever envelope they need.
|
|
9
|
+
*/
|
|
10
|
+
import { isToolEnabled } from '../permissions.js';
|
|
11
|
+
import { MAP_TOOL_DEFINITIONS, handleMapTool, isMapTool } from '../map/tools.js';
|
|
12
|
+
import { BROWSER_TOOL_DEFINITIONS } from '../tools/browser-definitions.js';
|
|
13
|
+
import { handleBrowserTool, isBrowserTool, } from '../tools/browser-dispatch.js';
|
|
14
|
+
import { toolError, toolResponse } from '../tools/responses.js';
|
|
15
|
+
export function handleToolsList(deps) {
|
|
16
|
+
return {
|
|
17
|
+
tools: [...BROWSER_TOOL_DEFINITIONS, ...MAP_TOOL_DEFINITIONS].filter((t) => isToolEnabled(t.name, deps.disabledTools)),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export async function handleToolCall(req, deps) {
|
|
21
|
+
const { name, arguments: args } = req;
|
|
22
|
+
if (!isToolEnabled(name, deps.disabledTools)) {
|
|
23
|
+
// Defence in depth: a client that cached the previous tools/list could
|
|
24
|
+
// still try to call a now-disabled tool. Refuse with a clear reason.
|
|
25
|
+
return toolError(`Tool "${name}" is disabled in this browser-link config. ` +
|
|
26
|
+
`Re-enable it via the setup UI (Permissions) or \`browser-link tools enable ${name}\`.`);
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
if (isMapTool(name))
|
|
30
|
+
return toolResponse(handleMapTool(name, args));
|
|
31
|
+
if (isBrowserTool(name))
|
|
32
|
+
return toolResponse(await handleBrowserTool(name, args, deps.browserTools));
|
|
33
|
+
return toolError(`Unknown tool: ${name}`);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return toolError(err instanceof Error ? err.message : String(err));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/bridge/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,aAAa,GAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,wBAAwB,EAAE,GAAG,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAC1C;KACF,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAoB,EAAE,IAAkB;IAC3E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACtC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7C,uEAAuE;QACvE,qEAAqE;QACrE,OAAO,SAAS,CACd,SAAS,IAAI,6CAA6C;YACxD,8EAA8E,IAAI,KAAK,CAC1F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,IAAI,aAAa,CAAC,IAAI,CAAC;YACrB,OAAO,YAAY,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,SAAS,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory ring buffer of bridge lifecycle events. Exposed to the agent
|
|
3
|
+
* through the `browser.events` MCP tool so it can self-recover after a
|
|
4
|
+
* primary swap or tab id rename: instead of failing blind on a stale
|
|
5
|
+
* tab_id, the agent calls browser.events, sees a `tab-renamed` entry,
|
|
6
|
+
* and resumes work on the new id.
|
|
7
|
+
*
|
|
8
|
+
* The buffer is per-process. When the primary dies and a new primary
|
|
9
|
+
* takes over, the new primary starts with an empty buffer plus its own
|
|
10
|
+
* `primary-elected` event as the fundamental marker — older history is
|
|
11
|
+
* intentionally lost (the agent has nothing useful to do with it anyway).
|
|
12
|
+
*/
|
|
13
|
+
export type BridgeEventKind = 'primary-elected' | 'tab-registered' | 'tab-disconnected' | 'tab-renamed';
|
|
14
|
+
export interface BridgeEvent {
|
|
15
|
+
/** Monotonic id assigned by addEvent. */
|
|
16
|
+
id: number;
|
|
17
|
+
/** ISO-8601 timestamp. */
|
|
18
|
+
at: string;
|
|
19
|
+
kind: BridgeEventKind;
|
|
20
|
+
/** Kind-specific payload. Documented per-kind in the JSDoc below. */
|
|
21
|
+
data: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export declare class BridgeEventLog {
|
|
24
|
+
private buffer;
|
|
25
|
+
private nextId;
|
|
26
|
+
/** Append an event and return it. Drops the oldest if the buffer is full. */
|
|
27
|
+
add(kind: BridgeEventKind, data?: Record<string, unknown>): BridgeEvent;
|
|
28
|
+
/** Return up to `limit` recent events, optionally filtered to those
|
|
29
|
+
* with id > sinceId. Cursor pattern — pass the previous-call's last id
|
|
30
|
+
* back in as sinceId to get only what's new. */
|
|
31
|
+
recent(opts?: {
|
|
32
|
+
sinceId?: number;
|
|
33
|
+
limit?: number;
|
|
34
|
+
}): BridgeEvent[];
|
|
35
|
+
/** The highest id currently in the buffer (0 if empty). */
|
|
36
|
+
latestId(): number;
|
|
37
|
+
/** Total number of events in the buffer. */
|
|
38
|
+
size(): number;
|
|
39
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory ring buffer of bridge lifecycle events. Exposed to the agent
|
|
3
|
+
* through the `browser.events` MCP tool so it can self-recover after a
|
|
4
|
+
* primary swap or tab id rename: instead of failing blind on a stale
|
|
5
|
+
* tab_id, the agent calls browser.events, sees a `tab-renamed` entry,
|
|
6
|
+
* and resumes work on the new id.
|
|
7
|
+
*
|
|
8
|
+
* The buffer is per-process. When the primary dies and a new primary
|
|
9
|
+
* takes over, the new primary starts with an empty buffer plus its own
|
|
10
|
+
* `primary-elected` event as the fundamental marker — older history is
|
|
11
|
+
* intentionally lost (the agent has nothing useful to do with it anyway).
|
|
12
|
+
*/
|
|
13
|
+
const MAX_EVENTS = 200;
|
|
14
|
+
export class BridgeEventLog {
|
|
15
|
+
buffer = [];
|
|
16
|
+
nextId = 1;
|
|
17
|
+
/** Append an event and return it. Drops the oldest if the buffer is full. */
|
|
18
|
+
add(kind, data = {}) {
|
|
19
|
+
const event = {
|
|
20
|
+
id: this.nextId++,
|
|
21
|
+
at: new Date().toISOString(),
|
|
22
|
+
kind,
|
|
23
|
+
data,
|
|
24
|
+
};
|
|
25
|
+
this.buffer.push(event);
|
|
26
|
+
if (this.buffer.length > MAX_EVENTS)
|
|
27
|
+
this.buffer.shift();
|
|
28
|
+
return event;
|
|
29
|
+
}
|
|
30
|
+
/** Return up to `limit` recent events, optionally filtered to those
|
|
31
|
+
* with id > sinceId. Cursor pattern — pass the previous-call's last id
|
|
32
|
+
* back in as sinceId to get only what's new. */
|
|
33
|
+
recent(opts = {}) {
|
|
34
|
+
const limit = Math.max(1, Math.min(opts.limit ?? 20, MAX_EVENTS));
|
|
35
|
+
const filtered = opts.sinceId === undefined ? this.buffer : this.buffer.filter((e) => e.id > opts.sinceId);
|
|
36
|
+
return filtered.slice(-limit);
|
|
37
|
+
}
|
|
38
|
+
/** The highest id currently in the buffer (0 if empty). */
|
|
39
|
+
latestId() {
|
|
40
|
+
return this.buffer.length === 0 ? 0 : this.buffer[this.buffer.length - 1].id;
|
|
41
|
+
}
|
|
42
|
+
/** Total number of events in the buffer. */
|
|
43
|
+
size() {
|
|
44
|
+
return this.buffer.length;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/bridge/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAkBH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,OAAO,cAAc;IACjB,MAAM,GAAkB,EAAE,CAAC;IAC3B,MAAM,GAAG,CAAC,CAAC;IAEnB,6EAA6E;IAC7E,GAAG,CAAC,IAAqB,EAAE,OAAgC,EAAE;QAC3D,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI;YACJ,IAAI;SACL,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;oDAEgD;IAChD,MAAM,CAAC,OAA6C,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAClE,MAAM,QAAQ,GACZ,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,CAAC,CAAC;QAC7F,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,2DAA2D;IAC3D,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IAED,4CAA4C;IAC5C,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC protocol between browser-link primary and proxy instances.
|
|
3
|
+
*
|
|
4
|
+
* Wire format: newline-delimited JSON (NDJSON). Each line is one frame.
|
|
5
|
+
* The protocol version is bumped on any non-backwards-compatible change
|
|
6
|
+
* to frame shapes. A primary running version N rejects proxies that
|
|
7
|
+
* don't advertise the same N — they fall back to a clear error.
|
|
8
|
+
*
|
|
9
|
+
* This module is pure data + helpers; no I/O.
|
|
10
|
+
*/
|
|
11
|
+
export declare const IPC_HOST = "127.0.0.1";
|
|
12
|
+
export declare const IPC_PORT = 17530;
|
|
13
|
+
export declare const IPC_PROTOCOL_VERSION = "1";
|
|
14
|
+
/** Pings cadence. If a side doesn't reply within IPC_PONG_TIMEOUT_MS,
|
|
15
|
+
* the connection is considered dead. */
|
|
16
|
+
export declare const IPC_PING_INTERVAL_MS = 5000;
|
|
17
|
+
export declare const IPC_PONG_TIMEOUT_MS = 10000;
|
|
18
|
+
/** Initial handshake — proxy → primary. */
|
|
19
|
+
export interface HelloFrame {
|
|
20
|
+
kind: 'hello';
|
|
21
|
+
/** Protocol version the proxy speaks. Must match the primary's version. */
|
|
22
|
+
version: string;
|
|
23
|
+
/** Per-session token the proxy read from the data dir. */
|
|
24
|
+
token: string;
|
|
25
|
+
}
|
|
26
|
+
/** Successful handshake — primary → proxy. */
|
|
27
|
+
export interface HelloAckFrame {
|
|
28
|
+
kind: 'hello-ack';
|
|
29
|
+
/** Protocol version (always === IPC_PROTOCOL_VERSION). */
|
|
30
|
+
version: string;
|
|
31
|
+
/** Server-assigned id for this proxy session — used for logging. */
|
|
32
|
+
sessionId: string;
|
|
33
|
+
}
|
|
34
|
+
/** Rejected handshake — primary → proxy. The proxy closes after seeing this. */
|
|
35
|
+
export interface HelloRejectFrame {
|
|
36
|
+
kind: 'hello-reject';
|
|
37
|
+
reason: string;
|
|
38
|
+
}
|
|
39
|
+
/** Forwarded MCP request — proxy → primary. */
|
|
40
|
+
export interface McpRequestFrame {
|
|
41
|
+
kind: 'mcp.request';
|
|
42
|
+
/** Correlation id; the primary echoes it on the response. */
|
|
43
|
+
requestId: number;
|
|
44
|
+
/** Raw JSON-RPC 2.0 request frame from the proxy's stdin. */
|
|
45
|
+
payload: unknown;
|
|
46
|
+
}
|
|
47
|
+
/** Forwarded MCP response — primary → proxy. */
|
|
48
|
+
export interface McpResponseFrame {
|
|
49
|
+
kind: 'mcp.response';
|
|
50
|
+
requestId: number;
|
|
51
|
+
/** Raw JSON-RPC 2.0 response frame to be written to the proxy's stdout. */
|
|
52
|
+
payload: unknown;
|
|
53
|
+
}
|
|
54
|
+
/** Forwarded MCP notification — both directions. No response expected. */
|
|
55
|
+
export interface McpNotificationFrame {
|
|
56
|
+
kind: 'mcp.notification';
|
|
57
|
+
/** Raw JSON-RPC 2.0 notification frame (no id). */
|
|
58
|
+
payload: unknown;
|
|
59
|
+
}
|
|
60
|
+
/** Keep-alive frames. */
|
|
61
|
+
export interface PingFrame {
|
|
62
|
+
kind: 'ping';
|
|
63
|
+
}
|
|
64
|
+
export interface PongFrame {
|
|
65
|
+
kind: 'pong';
|
|
66
|
+
}
|
|
67
|
+
/** Broadcast from primary just before it closes its IPC server. Proxies
|
|
68
|
+
* use this to trigger the autoReelect race. */
|
|
69
|
+
export interface PrimaryClosingFrame {
|
|
70
|
+
kind: 'primary-closing';
|
|
71
|
+
reason?: string;
|
|
72
|
+
}
|
|
73
|
+
export type Frame = HelloFrame | HelloAckFrame | HelloRejectFrame | McpRequestFrame | McpResponseFrame | McpNotificationFrame | PingFrame | PongFrame | PrimaryClosingFrame;
|
|
74
|
+
/** Serialise one frame to its on-the-wire representation (a single NDJSON line). */
|
|
75
|
+
export declare function encodeFrame(frame: Frame): string;
|
|
76
|
+
/** Parse one NDJSON line into a frame. Returns null when the input is
|
|
77
|
+
* not a recognised frame (defensive — never throw on malformed data). */
|
|
78
|
+
export declare function parseFrame(line: string): Frame | null;
|
|
79
|
+
/** True when a peer's announced protocol version is compatible with ours. */
|
|
80
|
+
export declare function isCompatibleVersion(peerVersion: string): boolean;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC protocol between browser-link primary and proxy instances.
|
|
3
|
+
*
|
|
4
|
+
* Wire format: newline-delimited JSON (NDJSON). Each line is one frame.
|
|
5
|
+
* The protocol version is bumped on any non-backwards-compatible change
|
|
6
|
+
* to frame shapes. A primary running version N rejects proxies that
|
|
7
|
+
* don't advertise the same N — they fall back to a clear error.
|
|
8
|
+
*
|
|
9
|
+
* This module is pure data + helpers; no I/O.
|
|
10
|
+
*/
|
|
11
|
+
export const IPC_HOST = '127.0.0.1';
|
|
12
|
+
export const IPC_PORT = 17530;
|
|
13
|
+
export const IPC_PROTOCOL_VERSION = '1';
|
|
14
|
+
/** Pings cadence. If a side doesn't reply within IPC_PONG_TIMEOUT_MS,
|
|
15
|
+
* the connection is considered dead. */
|
|
16
|
+
export const IPC_PING_INTERVAL_MS = 5_000;
|
|
17
|
+
export const IPC_PONG_TIMEOUT_MS = 10_000;
|
|
18
|
+
/** Serialise one frame to its on-the-wire representation (a single NDJSON line). */
|
|
19
|
+
export function encodeFrame(frame) {
|
|
20
|
+
return JSON.stringify(frame) + '\n';
|
|
21
|
+
}
|
|
22
|
+
/** Parse one NDJSON line into a frame. Returns null when the input is
|
|
23
|
+
* not a recognised frame (defensive — never throw on malformed data). */
|
|
24
|
+
export function parseFrame(line) {
|
|
25
|
+
let obj;
|
|
26
|
+
try {
|
|
27
|
+
obj = JSON.parse(line);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj))
|
|
33
|
+
return null;
|
|
34
|
+
const o = obj;
|
|
35
|
+
if (typeof o.kind !== 'string')
|
|
36
|
+
return null;
|
|
37
|
+
switch (o.kind) {
|
|
38
|
+
case 'hello':
|
|
39
|
+
if (typeof o.version === 'string' && typeof o.token === 'string')
|
|
40
|
+
return o;
|
|
41
|
+
return null;
|
|
42
|
+
case 'hello-ack':
|
|
43
|
+
if (typeof o.version === 'string' && typeof o.sessionId === 'string')
|
|
44
|
+
return o;
|
|
45
|
+
return null;
|
|
46
|
+
case 'hello-reject':
|
|
47
|
+
if (typeof o.reason === 'string')
|
|
48
|
+
return o;
|
|
49
|
+
return null;
|
|
50
|
+
case 'mcp.request':
|
|
51
|
+
if (typeof o.requestId === 'number' && 'payload' in o)
|
|
52
|
+
return o;
|
|
53
|
+
return null;
|
|
54
|
+
case 'mcp.response':
|
|
55
|
+
if (typeof o.requestId === 'number' && 'payload' in o)
|
|
56
|
+
return o;
|
|
57
|
+
return null;
|
|
58
|
+
case 'mcp.notification':
|
|
59
|
+
if ('payload' in o)
|
|
60
|
+
return o;
|
|
61
|
+
return null;
|
|
62
|
+
case 'ping':
|
|
63
|
+
return { kind: 'ping' };
|
|
64
|
+
case 'pong':
|
|
65
|
+
return { kind: 'pong' };
|
|
66
|
+
case 'primary-closing':
|
|
67
|
+
return {
|
|
68
|
+
kind: 'primary-closing',
|
|
69
|
+
reason: typeof o.reason === 'string' ? o.reason : undefined,
|
|
70
|
+
};
|
|
71
|
+
default:
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** True when a peer's announced protocol version is compatible with ours. */
|
|
76
|
+
export function isCompatibleVersion(peerVersion) {
|
|
77
|
+
return peerVersion === IPC_PROTOCOL_VERSION;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/bridge/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC;AACpC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAC9B,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;wCACwC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AA4E1C,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5C,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;gBAC9D,OAAO,CAA0B,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,KAAK,WAAW;YACd,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;gBAClE,OAAO,CAA6B,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,KAAK,cAAc;YACjB,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,CAAgC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,KAAK,aAAa;YAChB,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,CAAC;gBAAE,OAAO,CAA+B,CAAC;YAC9F,OAAO,IAAI,CAAC;QACd,KAAK,cAAc;YACjB,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,CAAC;gBACnD,OAAO,CAAgC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,KAAK,kBAAkB;YACrB,IAAI,SAAS,IAAI,CAAC;gBAAE,OAAO,CAAoC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,iBAAiB;YACpB,OAAO;gBACL,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aAC5D,CAAC;QACJ;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO,WAAW,KAAK,oBAAoB,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type DispatchDeps } from './dispatch.js';
|
|
2
|
+
export interface IpcServerOptions {
|
|
3
|
+
/** Override the bind host. Default 127.0.0.1. Production callers should
|
|
4
|
+
* never set this — tests use it to dodge cross-suite port collisions. */
|
|
5
|
+
host?: string;
|
|
6
|
+
/** Override the bind port. Default 17530. Pass 0 to let the OS pick a
|
|
7
|
+
* free port; the chosen port is exposed via boundPort() after start(). */
|
|
8
|
+
port?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class IpcServer {
|
|
11
|
+
private deps;
|
|
12
|
+
private options;
|
|
13
|
+
private server;
|
|
14
|
+
private sessions;
|
|
15
|
+
private token;
|
|
16
|
+
private boundHost;
|
|
17
|
+
private boundPortValue;
|
|
18
|
+
constructor(deps: DispatchDeps, options?: IpcServerOptions);
|
|
19
|
+
/** Bind the IPC port. Rejects on EADDRINUSE so the caller (server.ts)
|
|
20
|
+
* can log and continue without multi-agent — never throws after listen. */
|
|
21
|
+
start(): Promise<void>;
|
|
22
|
+
/** The actual host+port the server is listening on. Set after start()
|
|
23
|
+
* resolves; meaningful even when port:0 was passed. */
|
|
24
|
+
boundAddress(): {
|
|
25
|
+
host: string;
|
|
26
|
+
port: number;
|
|
27
|
+
};
|
|
28
|
+
/** Tell every connected proxy we're going down (so auto-reelect can fire),
|
|
29
|
+
* then close the listening socket. Safe to call when start() never ran. */
|
|
30
|
+
stop(): Promise<void>;
|
|
31
|
+
/** Visible to tests + doctor. */
|
|
32
|
+
sessionCount(): number;
|
|
33
|
+
/** Exposed for tests only. Production callers never need this. */
|
|
34
|
+
currentToken(): string;
|
|
35
|
+
private handleConnection;
|
|
36
|
+
private heartbeat;
|
|
37
|
+
private handleFrame;
|
|
38
|
+
/** Dispatch a JSON-RPC 2.0 MCP request to the shared handlers and return
|
|
39
|
+
* a JSON-RPC 2.0 response object. Errors are converted to JSON-RPC error
|
|
40
|
+
* envelopes — never thrown back to the socket layer. */
|
|
41
|
+
private dispatchMcpRequest;
|
|
42
|
+
}
|