@jobshimo/browser-link 0.5.1 → 0.5.3

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.
Files changed (42) hide show
  1. package/dist/auth/process-identity.d.ts +19 -3
  2. package/dist/auth/process-identity.js +81 -20
  3. package/dist/auth/process-identity.js.map +1 -1
  4. package/dist/bridge/dispatch.d.ts +6 -0
  5. package/dist/bridge/dispatch.js +2 -2
  6. package/dist/bridge/dispatch.js.map +1 -1
  7. package/dist/bridge/events.d.ts +1 -1
  8. package/dist/bridge/events.js.map +1 -1
  9. package/dist/bridge/server.d.ts +7 -1
  10. package/dist/bridge/server.js +42 -5
  11. package/dist/bridge/server.js.map +1 -1
  12. package/dist/commands/self-update.d.ts +59 -0
  13. package/dist/commands/self-update.js +110 -0
  14. package/dist/commands/self-update.js.map +1 -0
  15. package/dist/commands/updates.js +27 -1
  16. package/dist/commands/updates.js.map +1 -1
  17. package/dist/config.d.ts +12 -10
  18. package/dist/config.js +55 -20
  19. package/dist/config.js.map +1 -1
  20. package/dist/extension/background.js +56 -6
  21. package/dist/extension/background.js.map +1 -1
  22. package/dist/extension/manifest.json +2 -2
  23. package/dist/extension/popup.d.ts +4 -0
  24. package/dist/extension/popup.html +238 -48
  25. package/dist/extension/popup.js +37 -24
  26. package/dist/extension/popup.js.map +1 -1
  27. package/dist/server.js +50 -1
  28. package/dist/server.js.map +1 -1
  29. package/dist/tools/browser-definitions.js +36 -1
  30. package/dist/tools/browser-definitions.js.map +1 -1
  31. package/dist/tools/browser-dispatch.d.ts +39 -3
  32. package/dist/tools/browser-dispatch.js +170 -63
  33. package/dist/tools/browser-dispatch.js.map +1 -1
  34. package/dist/tools/server-instructions.d.ts +1 -1
  35. package/dist/tools/server-instructions.js +32 -0
  36. package/dist/tools/server-instructions.js.map +1 -1
  37. package/dist/tools/tab-claims.d.ts +117 -0
  38. package/dist/tools/tab-claims.js +186 -0
  39. package/dist/tools/tab-claims.js.map +1 -0
  40. package/dist/ui/screens.js +57 -6
  41. package/dist/ui/screens.js.map +1 -1
  42. package/package.json +1 -1
@@ -3,16 +3,32 @@ export interface PeerProcess {
3
3
  binaryName: string;
4
4
  }
5
5
  /**
6
- * Identify which OS process owns the local end of a loopback TCP connection
7
- * at `host:port`. Returns null when the lookup cannot resolve a single owner
6
+ * Identify which OS process owns the LOCAL end of a TCP connection at
7
+ * `host:port`. Returns null when the lookup cannot resolve a single owner
8
8
  * (no result, ambiguous result, command not available, timeout).
9
9
  *
10
10
  * The caller decides how to treat null: this module's only job is to ask the
11
11
  * kernel honestly. Concretely the server treats null as "reject", so users
12
12
  * on systems without lsof / netstat fail closed.
13
+ *
14
+ * Defense in depth: even if the OS lookup somehow points at our own process,
15
+ * we return null. The auth path must never identify the server as its own
16
+ * peer — that would short-circuit the allowlist check.
13
17
  */
14
18
  export declare function lookupPeerProcess(host: string, port: number): Promise<PeerProcess | null>;
15
- export declare function parseLsofOutput(out: string): PeerProcess | null;
19
+ /**
20
+ * Parse `lsof -F pcn` output and return the unique process whose LOCAL
21
+ * endpoint equals `host:port`. Returns null on:
22
+ * - empty output
23
+ * - no entry matching the local endpoint
24
+ * - two or more distinct PIDs claiming the same local endpoint (fail closed)
25
+ * - malformed records (missing pid/command/name)
26
+ *
27
+ * Output shape: every process group starts with `p<pid>`, followed by
28
+ * `c<command>` (one), then one or more `n<local>-><remote>` lines (one per
29
+ * matching socket). Names can contain spaces; lsof escapes them as `\xHH`.
30
+ */
31
+ export declare function parseLsofOutput(out: string, host: string, port: number): PeerProcess | null;
16
32
  /** lsof escapes spaces and tabs in command names as \xHH. Reverse that. */
17
33
  export declare function decodeLsofString(s: string): string;
18
34
  export declare function parseNetstatForLocal(out: string, host: string, port: number): number | null;
@@ -4,53 +4,111 @@ import { promisify } from 'node:util';
4
4
  const execAsync = promisify(exec);
5
5
  const LOOKUP_TIMEOUT_MS = 1500;
6
6
  /**
7
- * Identify which OS process owns the local end of a loopback TCP connection
8
- * at `host:port`. Returns null when the lookup cannot resolve a single owner
7
+ * Identify which OS process owns the LOCAL end of a TCP connection at
8
+ * `host:port`. Returns null when the lookup cannot resolve a single owner
9
9
  * (no result, ambiguous result, command not available, timeout).
10
10
  *
11
11
  * The caller decides how to treat null: this module's only job is to ask the
12
12
  * kernel honestly. Concretely the server treats null as "reject", so users
13
13
  * on systems without lsof / netstat fail closed.
14
+ *
15
+ * Defense in depth: even if the OS lookup somehow points at our own process,
16
+ * we return null. The auth path must never identify the server as its own
17
+ * peer — that would short-circuit the allowlist check.
14
18
  */
15
19
  export async function lookupPeerProcess(host, port) {
16
20
  const os = platform();
21
+ let result;
17
22
  try {
18
23
  if (os === 'darwin' || os === 'linux') {
19
- return await lookupUnix(host, port);
24
+ result = await lookupUnix(host, port);
20
25
  }
21
- if (os === 'win32') {
22
- return await lookupWindows(host, port);
26
+ else if (os === 'win32') {
27
+ result = await lookupWindows(host, port);
28
+ }
29
+ else {
30
+ return null;
23
31
  }
24
- return null;
25
32
  }
26
33
  catch {
27
34
  return null;
28
35
  }
36
+ if (result && result.pid === process.pid)
37
+ return null;
38
+ return result;
29
39
  }
30
40
  /**
31
- * macOS / Linux path: `lsof` is the broadest tool available. The -F flag
32
- * gives us a stable, field-tagged output (one field per line, prefixed with
33
- * the field letter) that survives binary names containing spaces common
34
- * on macOS ("Google Chrome Helper").
41
+ * macOS / Linux path: `lsof` is the broadest tool available.
42
+ *
43
+ * The `-F pcn` flag asks for a stable, field-tagged output (one field per
44
+ * line, prefixed with the field letter): p=PID, c=command, n=NAME (which for
45
+ * TCP sockets is "local->remote"). We need the NAME because `-i @host:port`
46
+ * matches BOTH ends of any socket that touches host:port — and on loopback
47
+ * (peer and server both on 127.0.0.1) that means lsof returns both ends of
48
+ * the same connection. The parser then keeps only entries whose LOCAL side
49
+ * is host:port — the unambiguous peer.
50
+ *
51
+ * The Windows path (`parseNetstatForLocal`) applies the same local-endpoint
52
+ * filter; keep these two branches in sync.
35
53
  */
36
54
  async function lookupUnix(host, port) {
37
- const cmd = `lsof -nP -F pc -iTCP@${host}:${port} -sTCP:ESTABLISHED`;
55
+ const cmd = `lsof -nP -F pcn -iTCP@${host}:${port} -sTCP:ESTABLISHED`;
38
56
  const { stdout } = await execAsync(cmd, { timeout: LOOKUP_TIMEOUT_MS });
39
- return parseLsofOutput(stdout);
57
+ return parseLsofOutput(stdout, host, port);
40
58
  }
41
- export function parseLsofOutput(out) {
42
- let pid = null;
59
+ /**
60
+ * Parse `lsof -F pcn` output and return the unique process whose LOCAL
61
+ * endpoint equals `host:port`. Returns null on:
62
+ * - empty output
63
+ * - no entry matching the local endpoint
64
+ * - two or more distinct PIDs claiming the same local endpoint (fail closed)
65
+ * - malformed records (missing pid/command/name)
66
+ *
67
+ * Output shape: every process group starts with `p<pid>`, followed by
68
+ * `c<command>` (one), then one or more `n<local>-><remote>` lines (one per
69
+ * matching socket). Names can contain spaces; lsof escapes them as `\xHH`.
70
+ */
71
+ export function parseLsofOutput(out, host, port) {
72
+ const target = `${host}:${port}`;
73
+ const owners = new Map();
74
+ let curPid = null;
75
+ let curName = null;
43
76
  for (const line of out.split('\n')) {
44
- if (line.startsWith('p')) {
45
- const n = Number.parseInt(line.slice(1), 10);
46
- pid = Number.isFinite(n) ? n : null;
77
+ if (line.length === 0)
78
+ continue;
79
+ const tag = line[0];
80
+ const rest = line.slice(1);
81
+ if (tag === 'p') {
82
+ const n = Number.parseInt(rest, 10);
83
+ curPid = Number.isFinite(n) ? n : null;
84
+ curName = null;
85
+ continue;
86
+ }
87
+ if (tag === 'c') {
88
+ curName = decodeLsofString(rest);
47
89
  continue;
48
90
  }
49
- if (line.startsWith('c') && pid !== null) {
50
- return { pid, binaryName: decodeLsofString(line.slice(1)) };
91
+ if (tag === 'n' && curPid !== null && curName !== null) {
92
+ const arrowIdx = rest.indexOf('->');
93
+ if (arrowIdx < 0)
94
+ continue;
95
+ const local = rest.slice(0, arrowIdx);
96
+ if (local !== target)
97
+ continue;
98
+ const existing = owners.get(curPid);
99
+ if (existing === undefined)
100
+ owners.set(curPid, curName);
101
+ else if (existing !== curName) {
102
+ // Same pid reporting two different names within one dump is
103
+ // contradictory — bail rather than guess.
104
+ return null;
105
+ }
51
106
  }
52
107
  }
53
- return null;
108
+ if (owners.size !== 1)
109
+ return null;
110
+ const [[pid, binaryName]] = owners.entries();
111
+ return { pid, binaryName };
54
112
  }
55
113
  /** lsof escapes spaces and tabs in command names as \xHH. Reverse that. */
56
114
  export function decodeLsofString(s) {
@@ -60,6 +118,9 @@ export function decodeLsofString(s) {
60
118
  * Windows path: `netstat -ano` lists every TCP connection with its owning
61
119
  * PID. We then ask `tasklist` for the image name of that PID. Both ship by
62
120
  * default with Windows; no extra tooling needed.
121
+ *
122
+ * Like the UNIX path, this filters by LOCAL endpoint match — see
123
+ * `parseNetstatForLocal`. Keep the two branches in sync.
63
124
  */
64
125
  async function lookupWindows(host, port) {
65
126
  const { stdout: netstatOut } = await execAsync('netstat -ano -p TCP', {
@@ -1 +1 @@
1
- {"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../src/auth/process-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../src/auth/process-identity.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,12 @@
8
8
  * out. Both callers wrap these results in whatever envelope they need.
9
9
  */
10
10
  import { type BrowserToolDeps } from '../tools/browser-dispatch.js';
11
+ import type { AgentCaller } from '../tools/tab-claims.js';
11
12
  export interface DispatchDeps {
12
13
  browserTools: BrowserToolDeps;
13
14
  disabledTools: readonly string[];
14
15
  }
16
+ export type { AgentCaller };
15
17
  /** Mirror of MCP `tools/list` shape. Kept minimal so the IPC layer can
16
18
  * forward it as a JSON-RPC result without any SDK-specific transformations. */
17
19
  export interface ToolsListResult {
@@ -25,5 +27,9 @@ export declare function handleToolsList(deps: DispatchDeps): ToolsListResult;
25
27
  export interface ToolCallRequest {
26
28
  name: string;
27
29
  arguments?: unknown;
30
+ /** Identity of the MCP client whose request this is. The transport layer
31
+ * (primary's stdio handler or IPC server) is responsible for filling it in
32
+ * — handlers that need to enforce per-agent ownership read from here. */
33
+ caller: AgentCaller;
28
34
  }
29
35
  export declare function handleToolCall(req: ToolCallRequest, deps: DispatchDeps): Promise<import("../tools/responses.js").ToolResponse>;
@@ -18,7 +18,7 @@ export function handleToolsList(deps) {
18
18
  };
19
19
  }
20
20
  export async function handleToolCall(req, deps) {
21
- const { name, arguments: args } = req;
21
+ const { name, arguments: args, caller } = req;
22
22
  if (!isToolEnabled(name, deps.disabledTools)) {
23
23
  // Defence in depth: a client that cached the previous tools/list could
24
24
  // still try to call a now-disabled tool. Refuse with a clear reason.
@@ -29,7 +29,7 @@ export async function handleToolCall(req, deps) {
29
29
  if (isMapTool(name))
30
30
  return toolResponse(handleMapTool(name, args));
31
31
  if (isBrowserTool(name))
32
- return toolResponse(await handleBrowserTool(name, args, deps.browserTools));
32
+ return toolResponse(await handleBrowserTool(name, args, deps.browserTools, caller));
33
33
  return toolError(`Unknown tool: ${name}`);
34
34
  }
35
35
  catch (err) {
@@ -1 +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"}
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;AAoBhE,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;AAWD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAoB,EAAE,IAAkB;IAC3E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAC9C,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,EAAE,MAAM,CAAC,CAAC,CAAC;QACtF,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"}
@@ -10,7 +10,7 @@
10
10
  * `primary-elected` event as the fundamental marker — older history is
11
11
  * intentionally lost (the agent has nothing useful to do with it anyway).
12
12
  */
13
- export type BridgeEventKind = 'primary-elected' | 'tab-registered' | 'tab-disconnected' | 'tab-renamed';
13
+ export type BridgeEventKind = 'primary-elected' | 'tab-registered' | 'tab-disconnected' | 'tab-renamed' | 'tab-claimed' | 'tab-released' | 'tab-claim-rejected';
14
14
  export interface BridgeEvent {
15
15
  /** Monotonic id assigned by addEvent. */
16
16
  id: number;
@@ -1 +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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/bridge/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH,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"}
@@ -43,6 +43,12 @@ export declare class IpcServer {
43
43
  private handleFrame;
44
44
  /** Dispatch a JSON-RPC 2.0 MCP request to the shared handlers and return
45
45
  * a JSON-RPC 2.0 response object. Errors are converted to JSON-RPC error
46
- * envelopes — never thrown back to the socket layer. */
46
+ * envelopes — never thrown back to the socket layer.
47
+ *
48
+ * `sessionId` ties the call back to the IPC session that originated it,
49
+ * so handlers that care about per-agent ownership (tab claims) see the
50
+ * right identity. The session is the authentication scope: only the agent
51
+ * that passed the handshake gets a session id, and the id dies with the
52
+ * connection. */
47
53
  private dispatchMcpRequest;
48
54
  }
@@ -14,9 +14,22 @@ import { rotateToken } from './token.js';
14
14
  *
15
15
  * Construction does NOT bind the port. Call `start()` and await.
16
16
  */
17
+ /** Strip ASCII control characters from anything we put through `log()`.
18
+ * Some of what we log includes data that originally came from a peer
19
+ * (binary names, error messages, frame kinds), so a malicious or just
20
+ * quirky value with embedded newlines / ANSI escapes / NULs could forge
21
+ * additional log lines or hide context. Replacing them with `?` makes
22
+ * every entry survive a single line and a single visible character per
23
+ * source character. */
24
+ function sanitizeLogValue(s) {
25
+ // ASCII C0 (U+0000-U+001F) plus DEL (U+007F). Stops embedded newlines /
26
+ // NUL / ANSI escapes from forging extra log lines or hiding text.
27
+ // eslint-disable-next-line no-control-regex
28
+ return s.replace(/[\x00-\x1f\x7f]/g, '?');
29
+ }
17
30
  function log(msg) {
18
31
  // stderr — stdout belongs to the MCP transport.
19
- console.error(`[browser-link ipc] ${msg}`);
32
+ console.error(`[browser-link ipc] ${sanitizeLogValue(msg)}`);
20
33
  }
21
34
  /** Binaries we'll accept as legitimate peers. The token is the real auth;
22
35
  * this is defence in depth. Names normalised to lowercase before comparison. */
@@ -184,11 +197,17 @@ export class IpcServer {
184
197
  sessionId = randomUUID();
185
198
  socket.write(encodeFrame({ kind: 'hello-ack', version: IPC_PROTOCOL_VERSION, sessionId }));
186
199
  const sid = sessionId;
200
+ const caller = {
201
+ agent_id: sid,
202
+ pid: peer.pid,
203
+ binary: peer.binaryName,
204
+ };
187
205
  const session = {
188
206
  id: sid,
189
207
  socket,
190
208
  pingTimer: setInterval(() => this.heartbeat(sid), IPC_PING_INTERVAL_MS),
191
209
  pongDeadline: null,
210
+ caller,
192
211
  };
193
212
  this.sessions.set(sid, session);
194
213
  log(`Proxy connected: session=${sid} pid=${peer.pid}`);
@@ -213,6 +232,10 @@ export class IpcServer {
213
232
  if (session.pongDeadline)
214
233
  clearTimeout(session.pongDeadline);
215
234
  this.sessions.delete(sessionId);
235
+ // Drop every claim the agent held. The registry emits one
236
+ // tab-released event per dropped claim, which surfaces in
237
+ // browser.events for the remaining agents.
238
+ this.deps.browserTools.tabClaims?.onAgentDisconnect(sessionId);
216
239
  log(`Proxy disconnected: session=${sessionId}`);
217
240
  }
218
241
  }
@@ -250,7 +273,7 @@ export class IpcServer {
250
273
  return;
251
274
  }
252
275
  case 'mcp.request': {
253
- const response = await this.dispatchMcpRequest(frame.payload);
276
+ const response = await this.dispatchMcpRequest(frame.payload, sessionId);
254
277
  try {
255
278
  socket.write(encodeFrame({ kind: 'mcp.response', requestId: frame.requestId, payload: response }));
256
279
  }
@@ -282,8 +305,14 @@ export class IpcServer {
282
305
  }
283
306
  /** Dispatch a JSON-RPC 2.0 MCP request to the shared handlers and return
284
307
  * a JSON-RPC 2.0 response object. Errors are converted to JSON-RPC error
285
- * envelopes — never thrown back to the socket layer. */
286
- async dispatchMcpRequest(payload) {
308
+ * envelopes — never thrown back to the socket layer.
309
+ *
310
+ * `sessionId` ties the call back to the IPC session that originated it,
311
+ * so handlers that care about per-agent ownership (tab claims) see the
312
+ * right identity. The session is the authentication scope: only the agent
313
+ * that passed the handshake gets a session id, and the id dies with the
314
+ * connection. */
315
+ async dispatchMcpRequest(payload, sessionId) {
287
316
  if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
288
317
  return { jsonrpc: '2.0', id: null, error: { code: -32600, message: 'Invalid request' } };
289
318
  }
@@ -314,7 +343,15 @@ export class IpcServer {
314
343
  error: { code: -32602, message: 'Missing tool name in params' },
315
344
  };
316
345
  }
317
- const result = await handleToolCall({ name: params.name, arguments: params.arguments }, this.deps);
346
+ const session = this.sessions.get(sessionId);
347
+ if (!session) {
348
+ return {
349
+ jsonrpc: '2.0',
350
+ id,
351
+ error: { code: -32603, message: 'Session not found for tools/call' },
352
+ };
353
+ }
354
+ const result = await handleToolCall({ name: params.name, arguments: params.arguments, caller: session.caller }, this.deps);
318
355
  return { jsonrpc: '2.0', id, result };
319
356
  }
320
357
  case 'ping': {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyC,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAoB,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,QAAQ,EACR,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,UAAU,GAEX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;GAOG;AAEH,SAAS,GAAG,CAAC,GAAW;IACtB,gDAAgD;IAChD,OAAO,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;gFACgF;AAChF,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACtD,MAAM;IACN,UAAU;IACV,QAAQ;IACR,KAAK;IACL,SAAS;IACT,cAAc;IACd,kBAAkB;CACnB,CAAC,CAAC;AAEH,uEAAuE;AACvE,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,WAAW,CAAC;IACtE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAuBD,MAAM,OAAO,SAAS;IAQV;IACA;IARF,MAAM,GAAqB,IAAI,CAAC;IAChC,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC3C,KAAK,CAAS;IACd,SAAS,GAAG,QAAQ,CAAC;IACrB,cAAc,GAAG,QAAQ,CAAC;IAElC,YACU,IAAkB,EAClB,UAA4B,EAAE;QAD9B,SAAI,GAAJ,IAAI,CAAc;QAClB,YAAO,GAAP,OAAO,CAAuB;QAEtC,uEAAuE;QACvE,uDAAuD;QACvD,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED;+EAC2E;IAC3E,KAAK;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC1C,GAAG,CAAC,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrF,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;gBAChD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBAC9B,MAAM,CACJ,IAAI,KAAK,CACP,YAAY,IAAI,IAAI,IAAI,wEAAwE,CACjG,CACF,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;gBAC7B,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBACD,GAAG,CAAC,2BAA2B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBACxE,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;2DACuD;IACvD,YAAY;QACV,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC7D,CAAC;IAED;+EAC2E;IAC3E,KAAK,CAAC,IAAI;QACR,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACrF,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;YACD,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,YAAY;gBAAE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7D,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,kEAAkE;IAClE,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAc;QAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAErC,IAAI,CAAC,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACtC,GAAG,CAAC,mEAAmE,CAAC,CAAC;YACzE,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,iBAAiB,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACpE,GAAG,CACD,gCAAgC,UAAU,IAAI,UAAU,+BACtD,IAAI,EAAE,UAAU,IAAI,SACtB,IAAI,CACL,CAAC;YACF,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,SAAS,GAAkB,IAAI,CAAC;QAEpC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBACnD,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,GAAG,CAAC,oCAAoC,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC;oBACjE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,KAAK,CACV,WAAW,CAAC;wBACV,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,6BAA6B,oBAAoB,WAAW,KAAK,CAAC,OAAO,EAAE;qBACpF,CAAC,CACH,CAAC;oBACF,MAAM,CAAC,GAAG,EAAE,CAAC;oBACb,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;oBAC7E,MAAM,CAAC,GAAG,EAAE,CAAC;oBACb,OAAO;gBACT,CAAC;gBACD,sDAAsD;gBACtD,aAAa,GAAG,IAAI,CAAC;gBACrB,SAAS,GAAG,UAAU,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC3F,MAAM,GAAG,GAAG,SAAS,CAAC;gBACtB,MAAM,OAAO,GAAiB;oBAC5B,EAAE,EAAE,GAAG;oBACP,MAAM;oBACN,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC;oBACvE,YAAY,EAAE,IAAI;iBACnB,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChC,GAAG,CAAC,4BAA4B,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YACD,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAU,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,EAAU,CAAC;YACf,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,OAAO,EAAE,CAAC;oBACZ,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACjC,IAAI,OAAO,CAAC,YAAY;wBAAE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAChC,GAAG,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,GAAG,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;YAC3D,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBACrC,GAAG,CAAC,SAAS,GAAG,kCAAkC,CAAC,CAAC;gBACpD,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,KAAY,EAAE,SAAiB,EAAE,MAAc;QACvE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;oBAC1B,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBACnC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC9B,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,CAAC,KAAK,CACV,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CACrF,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,iBAAiB;gBACnB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,mEAAmE;gBACnE,oEAAoE;gBACpE,gDAAgD;gBAChD,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC;oBACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC;oBACP,iBAAiB;gBACnB,CAAC;gBACD,OAAO;YACT,CAAC;YACD;gBACE,iEAAiE;gBACjE,mDAAmD;gBACnD,OAAO;QACX,CAAC;IACH,CAAC;IAED;;4DAEwD;IAChD,KAAK,CAAC,kBAAkB,CAAC,OAAgB;QAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC;QAC3F,CAAC;QACD,MAAM,GAAG,GAAG,OAKX,CAAC;QACF,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,MAAM,GAAG;wBACb,eAAe,EAAE,YAAY;wBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;wBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE;wBACtD,YAAY,EAAE,mBAAmB;qBAClC,CAAC;oBACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;gBACxC,CAAC;gBACD,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;gBACxC,CAAC;gBACD,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAA4D,CAAC;oBAChF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC/C,OAAO;4BACL,OAAO,EAAE,KAAK;4BACd,EAAE;4BACF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE;yBAChE,CAAC;oBACJ,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,EAClD,IAAI,CAAC,IAAI,CACV,CAAC;oBACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;gBACxC,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBAC5C,CAAC;gBACD;oBACE,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,EAAE;wBACF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,MAAM,EAAE,EAAE;qBAChE,CAAC;YACN,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;QAClE,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * One-shot self-update for the browser-link CLI / MCP server.
3
+ *
4
+ * Strategy:
5
+ * 1. Optionally free port 17529 — if a primary is running, npm install
6
+ * can race with the live binary on Windows (file lock) and produces
7
+ * confusing errors on Unix when the process is rebound to a stale
8
+ * dist/. Stopping the primary first keeps the install clean and
9
+ * forces the next MCP-client spawn to pick up the new code.
10
+ * 2. Run `npm install -g <package>@<target>` as a child process, with
11
+ * stdio piped so we can capture output and report it to the caller
12
+ * (UI streams a short summary; CLI prints raw stderr on failure).
13
+ * 3. Return a structured result. The caller decides what to do next:
14
+ * the interactive UI shows a "restart your MCP client" hint, the
15
+ * command-line wrapper prints stdout and exits.
16
+ *
17
+ * Why not auto-restart the MCP client? We don't own that process — it is
18
+ * the parent (Claude Code, OpenCode, Copilot CLI, …). Telling the user
19
+ * to relaunch it is the only honest thing we can do.
20
+ */
21
+ import { spawn } from 'node:child_process';
22
+ import type { Language } from './welcome.js';
23
+ export interface SelfUpdateProgress {
24
+ /** What stage are we in. Drives the UI's status label. */
25
+ stage: 'preflight' | 'stopping-primary' | 'installing' | 'done' | 'failed';
26
+ /** Human-readable message safe to surface to the user as-is. */
27
+ message: string;
28
+ }
29
+ export type SelfUpdateProgressCallback = (event: SelfUpdateProgress) => void;
30
+ export interface SelfUpdateResult {
31
+ ok: boolean;
32
+ /** The version requested (e.g. `"latest"`, `"0.5.3"`). */
33
+ target: string;
34
+ /** Final message — the one to show in the UI when the spinner stops. */
35
+ message: string;
36
+ /** Combined npm stderr in case the caller wants to dump it for diagnosis. */
37
+ stderr?: string;
38
+ }
39
+ interface SelfUpdateOptions {
40
+ /** Override the package name (mainly for tests). */
41
+ packageName?: string;
42
+ /** Force `npm` command path. Defaults to the `npm` on PATH. */
43
+ npmBin?: string;
44
+ /** Skip the `runFreePort` step. Tests / dry-run use this. */
45
+ skipFreePort?: boolean;
46
+ /** Override the actual spawn for tests. */
47
+ spawnImpl?: typeof spawn;
48
+ }
49
+ /** Returns the human-readable hint to restart the MCP client after a
50
+ * successful update. Exported so the CLI wrapper can reuse it without
51
+ * duplicating the i18n table. */
52
+ export declare function restartHint(language?: Language): string;
53
+ /**
54
+ * Run the full self-update pipeline. Reports progress via `onProgress`
55
+ * (optional). Always resolves with a `SelfUpdateResult` — never throws so
56
+ * the UI doesn't have to wrap calls in try/catch.
57
+ */
58
+ export declare function runSelfUpdate(target: string, language?: Language, onProgress?: SelfUpdateProgressCallback, opts?: SelfUpdateOptions): Promise<SelfUpdateResult>;
59
+ export {};
@@ -0,0 +1,110 @@
1
+ /**
2
+ * One-shot self-update for the browser-link CLI / MCP server.
3
+ *
4
+ * Strategy:
5
+ * 1. Optionally free port 17529 — if a primary is running, npm install
6
+ * can race with the live binary on Windows (file lock) and produces
7
+ * confusing errors on Unix when the process is rebound to a stale
8
+ * dist/. Stopping the primary first keeps the install clean and
9
+ * forces the next MCP-client spawn to pick up the new code.
10
+ * 2. Run `npm install -g <package>@<target>` as a child process, with
11
+ * stdio piped so we can capture output and report it to the caller
12
+ * (UI streams a short summary; CLI prints raw stderr on failure).
13
+ * 3. Return a structured result. The caller decides what to do next:
14
+ * the interactive UI shows a "restart your MCP client" hint, the
15
+ * command-line wrapper prints stdout and exits.
16
+ *
17
+ * Why not auto-restart the MCP client? We don't own that process — it is
18
+ * the parent (Claude Code, OpenCode, Copilot CLI, …). Telling the user
19
+ * to relaunch it is the only honest thing we can do.
20
+ */
21
+ import { spawn } from 'node:child_process';
22
+ import { runFreePort } from './free-port.js';
23
+ import { PACKAGE_NAME } from '../version.js';
24
+ const I18N = {
25
+ en: {
26
+ starting: (t) => `Updating browser-link → ${t}`,
27
+ stopping: 'Stopping the running browser-link primary…',
28
+ notRunning: 'No primary running — port is already free.',
29
+ stopFailed: (reason) => `Could not stop the running browser-link primary: ${reason}. Continuing with the install anyway.`,
30
+ installing: (t) => `Running: npm install -g ${PACKAGE_NAME}@${t}`,
31
+ installed: (t) => `✓ Installed browser-link@${t}. Restart your MCP client (Claude Code, OpenCode, Copilot CLI, …) to load the new version.`,
32
+ failed: (reason) => `✗ Update failed: ${reason}`,
33
+ restartHint: 'Restart your MCP client to pick up the new version.',
34
+ },
35
+ es: {
36
+ starting: (t) => `Actualizando browser-link → ${t}`,
37
+ stopping: 'Deteniendo el primary de browser-link en uso…',
38
+ notRunning: 'No hay primary corriendo — el puerto ya está libre.',
39
+ stopFailed: (reason) => `No se pudo detener el primary en uso: ${reason}. Igual sigo con la instalación.`,
40
+ installing: (t) => `Ejecutando: npm install -g ${PACKAGE_NAME}@${t}`,
41
+ installed: (t) => `✓ Instalado browser-link@${t}. Reiniciá tu cliente MCP (Claude Code, OpenCode, Copilot CLI, …) para cargar la nueva versión.`,
42
+ failed: (reason) => `✗ La actualización falló: ${reason}`,
43
+ restartHint: 'Reiniciá tu cliente MCP para que tome la nueva versión.',
44
+ },
45
+ };
46
+ /** Returns the human-readable hint to restart the MCP client after a
47
+ * successful update. Exported so the CLI wrapper can reuse it without
48
+ * duplicating the i18n table. */
49
+ export function restartHint(language = 'en') {
50
+ return I18N[language].restartHint;
51
+ }
52
+ /**
53
+ * Run the full self-update pipeline. Reports progress via `onProgress`
54
+ * (optional). Always resolves with a `SelfUpdateResult` — never throws so
55
+ * the UI doesn't have to wrap calls in try/catch.
56
+ */
57
+ export async function runSelfUpdate(target, language = 'en', onProgress, opts = {}) {
58
+ const t = I18N[language];
59
+ const pkgName = opts.packageName ?? PACKAGE_NAME;
60
+ const npmBin = opts.npmBin ?? 'npm';
61
+ const doSpawn = opts.spawnImpl ?? spawn;
62
+ const emit = (stage, message) => {
63
+ if (onProgress)
64
+ onProgress({ stage, message });
65
+ };
66
+ emit('preflight', t.starting(target));
67
+ // Stop the running primary (if any). Failure here is non-fatal — we still
68
+ // try to install; only the install failure is treated as terminal.
69
+ if (!opts.skipFreePort) {
70
+ let stopMessage;
71
+ try {
72
+ const freed = runFreePort(language);
73
+ stopMessage = freed.pid == null ? t.notRunning : freed.message;
74
+ }
75
+ catch (err) {
76
+ const reason = err instanceof Error ? err.message : String(err);
77
+ stopMessage = t.stopFailed(reason);
78
+ }
79
+ emit('stopping-primary', stopMessage);
80
+ }
81
+ emit('installing', t.installing(target));
82
+ const ref = `${pkgName}@${target}`;
83
+ const installResult = await new Promise((resolve) => {
84
+ const child = doSpawn(npmBin, ['install', '-g', ref], {
85
+ stdio: ['ignore', 'pipe', 'pipe'],
86
+ });
87
+ let stderr = '';
88
+ child.stderr?.on('data', (chunk) => {
89
+ stderr += chunk.toString();
90
+ });
91
+ // Drain stdout to avoid blocking npm on large logs.
92
+ child.stdout?.on('data', () => { });
93
+ child.on('error', (err) => {
94
+ resolve({ code: 1, stderr: err.message });
95
+ });
96
+ child.on('close', (code) => {
97
+ resolve({ code, stderr });
98
+ });
99
+ });
100
+ if (installResult.code !== 0) {
101
+ const lastLine = installResult.stderr.trim().split('\n').pop() ?? `exit code ${installResult.code}`;
102
+ const message = t.failed(lastLine);
103
+ emit('failed', message);
104
+ return { ok: false, target, message, stderr: installResult.stderr };
105
+ }
106
+ const okMessage = t.installed(target);
107
+ emit('done', okMessage);
108
+ return { ok: true, target, message: okMessage };
109
+ }
110
+ //# sourceMappingURL=self-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}