@jobshimo/browser-link 0.40.0 → 0.42.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.
Files changed (82) hide show
  1. package/README.md +27 -12
  2. package/dist/admin/actions.d.ts +57 -0
  3. package/dist/admin/actions.js +163 -0
  4. package/dist/admin/actions.js.map +1 -0
  5. package/dist/admin/descriptor.d.ts +65 -0
  6. package/dist/admin/descriptor.js +205 -0
  7. package/dist/admin/descriptor.js.map +1 -0
  8. package/dist/admin/i18n.d.ts +90 -0
  9. package/dist/admin/i18n.js +203 -0
  10. package/dist/admin/i18n.js.map +1 -0
  11. package/dist/admin/primary.d.ts +21 -0
  12. package/dist/admin/primary.js +56 -0
  13. package/dist/admin/primary.js.map +1 -0
  14. package/dist/admin/sources.d.ts +22 -0
  15. package/dist/admin/sources.js +82 -0
  16. package/dist/admin/sources.js.map +1 -0
  17. package/dist/bridge/dispatch.js +17 -7
  18. package/dist/bridge/dispatch.js.map +1 -1
  19. package/dist/bridge/ws-bridge.d.ts +65 -3
  20. package/dist/bridge/ws-bridge.js +165 -7
  21. package/dist/bridge/ws-bridge.js.map +1 -1
  22. package/dist/cli.js +6 -2
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/doctor.d.ts +24 -0
  25. package/dist/commands/doctor.js +62 -1
  26. package/dist/commands/doctor.js.map +1 -1
  27. package/dist/commands/free-port.d.ts +40 -1
  28. package/dist/commands/free-port.js +72 -7
  29. package/dist/commands/free-port.js.map +1 -1
  30. package/dist/extension/admin-view.d.ts +95 -0
  31. package/dist/extension/admin-view.js +164 -0
  32. package/dist/extension/admin-view.js.map +1 -0
  33. package/dist/extension/background.js +176 -8
  34. package/dist/extension/background.js.map +1 -1
  35. package/dist/extension/manifest.json +1 -1
  36. package/dist/extension/popup.html +113 -0
  37. package/dist/extension/popup.js +282 -1
  38. package/dist/extension/popup.js.map +1 -1
  39. package/dist/extension/repair-policy.d.ts +60 -0
  40. package/dist/extension/repair-policy.js +79 -0
  41. package/dist/extension/repair-policy.js.map +1 -0
  42. package/dist/extension/version-status.d.ts +44 -0
  43. package/dist/extension/version-status.js +60 -0
  44. package/dist/extension/version-status.js.map +1 -0
  45. package/dist/lifecycle/election.d.ts +98 -0
  46. package/dist/lifecycle/election.js +187 -0
  47. package/dist/lifecycle/election.js.map +1 -0
  48. package/dist/lifecycle/processes.d.ts +67 -0
  49. package/dist/lifecycle/processes.js +239 -0
  50. package/dist/lifecycle/processes.js.map +1 -0
  51. package/dist/lifecycle/repair.d.ts +48 -0
  52. package/dist/lifecycle/repair.js +67 -0
  53. package/dist/lifecycle/repair.js.map +1 -0
  54. package/dist/lifecycle/version-endpoint.d.ts +16 -0
  55. package/dist/lifecycle/version-endpoint.js +50 -0
  56. package/dist/lifecycle/version-endpoint.js.map +1 -0
  57. package/dist/manual/topics.js +1 -1
  58. package/dist/manual/topics.js.map +1 -1
  59. package/dist/messages.d.ts +115 -2
  60. package/dist/server.js +104 -1
  61. package/dist/server.js.map +1 -1
  62. package/dist/tools/browser-dispatch.d.ts +8 -0
  63. package/dist/tools/browser-dispatch.js +15 -1
  64. package/dist/tools/browser-dispatch.js.map +1 -1
  65. package/dist/ui/app.d.ts +4 -1
  66. package/dist/ui/app.js +55 -42
  67. package/dist/ui/app.js.map +1 -1
  68. package/dist/ui/screens/free-port.js +4 -2
  69. package/dist/ui/screens/free-port.js.map +1 -1
  70. package/dist/ui/screens/index.d.ts +1 -0
  71. package/dist/ui/screens/index.js +1 -0
  72. package/dist/ui/screens/index.js.map +1 -1
  73. package/dist/ui/screens/menu.d.ts +11 -1
  74. package/dist/ui/screens/menu.js +12 -4
  75. package/dist/ui/screens/menu.js.map +1 -1
  76. package/dist/ui/screens/status.d.ts +19 -0
  77. package/dist/ui/screens/status.js +67 -0
  78. package/dist/ui/screens/status.js.map +1 -0
  79. package/dist/version.d.ts +8 -0
  80. package/dist/version.js +16 -0
  81. package/dist/version.js.map +1 -1
  82. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/lifecycle/processes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { BridgeRepairMessage, ServerToExtension } from '../messages.js';
2
+ /**
3
+ * Popup "Repair connection", server side (S4).
4
+ *
5
+ * On `bridge.repair` the bridge answers first, then this process restarts
6
+ * itself on the installed code: spawn the installed CLI detached, terminate
7
+ * every extension socket uncleanly (`ws.terminate()`, which the extension's
8
+ * auto-reconnect treats as involuntary), stop IPC (proxies get
9
+ * `primary-closing`) and exit 0. The child wins the port through the
10
+ * election's bind retries, and the extension reconnects to it by itself.
11
+ *
12
+ * The policy is pure; `server.ts` injects the real spawn/terminate/exit.
13
+ */
14
+ export interface RepairDeps {
15
+ /** `process.execPath`. */
16
+ execPath: string;
17
+ /** The installed `dist/cli.js` (same file the process started from). */
18
+ cliPath: string;
19
+ spawn: (command: string, args: string[], options: {
20
+ detached: true;
21
+ stdio: 'ignore';
22
+ windowsHide: true;
23
+ }) => {
24
+ unref(): void;
25
+ };
26
+ terminateSockets: () => void;
27
+ stopIpc: () => Promise<void>;
28
+ exit: (code: number) => void;
29
+ /** Waits long enough for the ack frame to be flushed to the socket. */
30
+ delay: (ms: number) => Promise<void>;
31
+ log?: (msg: string) => void;
32
+ }
33
+ /** Time given to the `bridge.repair.result` frame before sockets die. */
34
+ export declare const REPAIR_FLUSH_DELAY_MS = 150;
35
+ export interface RepairController {
36
+ /** Start the restart (once). Returns whether it is (now) in progress. */
37
+ start(): boolean;
38
+ /** Settles when the current restart attempt finished (tests). */
39
+ readonly done: Promise<void>;
40
+ }
41
+ export declare function createRepairController(deps: RepairDeps): RepairController;
42
+ /**
43
+ * Answer one `bridge.repair` frame: the ack goes out BEFORE the repair
44
+ * starts, so the popup learns the outcome even though its socket is about to
45
+ * be terminated. `startRepair` is undefined in a process that cannot repair
46
+ * itself (tests, a bridge started without the wiring).
47
+ */
48
+ export declare function answerRepairRequest(msg: BridgeRepairMessage, send: (reply: ServerToExtension) => void, startRepair: (() => boolean) | undefined): void;
@@ -0,0 +1,67 @@
1
+ /** Time given to the `bridge.repair.result` frame before sockets die. */
2
+ export const REPAIR_FLUSH_DELAY_MS = 150;
3
+ export function createRepairController(deps) {
4
+ let inProgress = false;
5
+ let done = Promise.resolve();
6
+ const run = async () => {
7
+ await deps.delay(REPAIR_FLUSH_DELAY_MS);
8
+ try {
9
+ deps
10
+ .spawn(deps.execPath, [deps.cliPath], {
11
+ detached: true,
12
+ stdio: 'ignore',
13
+ windowsHide: true,
14
+ })
15
+ .unref();
16
+ }
17
+ catch (err) {
18
+ // Without a successor, exiting would leave no server at all: keep
19
+ // serving and let the user fall back to `browser-link stop`.
20
+ inProgress = false;
21
+ deps.log?.(`Repair: could not start the installed server (${err instanceof Error ? err.message : String(err)}); still serving.`);
22
+ return;
23
+ }
24
+ deps.log?.('Repair: installed server started; handing over the port.');
25
+ deps.terminateSockets();
26
+ try {
27
+ await deps.stopIpc();
28
+ }
29
+ catch {
30
+ /* already closed; exiting anyway */
31
+ }
32
+ deps.exit(0);
33
+ };
34
+ return {
35
+ start() {
36
+ if (inProgress)
37
+ return true;
38
+ inProgress = true;
39
+ done = run();
40
+ return true;
41
+ },
42
+ get done() {
43
+ return done;
44
+ },
45
+ };
46
+ }
47
+ /**
48
+ * Answer one `bridge.repair` frame: the ack goes out BEFORE the repair
49
+ * starts, so the popup learns the outcome even though its socket is about to
50
+ * be terminated. `startRepair` is undefined in a process that cannot repair
51
+ * itself (tests, a bridge started without the wiring).
52
+ */
53
+ export function answerRepairRequest(msg, send, startRepair) {
54
+ const requestId = typeof msg.request_id === 'string' ? msg.request_id : '';
55
+ if (!startRepair) {
56
+ send({
57
+ kind: 'bridge.repair.result',
58
+ request_id: requestId,
59
+ ok: false,
60
+ error: 'repair is not available in this server process',
61
+ });
62
+ return;
63
+ }
64
+ send({ kind: 'bridge.repair.result', request_id: requestId, ok: true, action: 'restarting' });
65
+ startRepair();
66
+ }
67
+ //# sourceMappingURL=repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/lifecycle/repair.ts"],"names":[],"mappings":"AAiCA,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AASzC,MAAM,UAAU,sBAAsB,CAAC,IAAgB;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,IAAI;iBACD,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACpC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,IAAI;aAClB,CAAC;iBACD,KAAK,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kEAAkE;YAClE,6DAA6D;YAC7D,UAAU,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,GAAG,EAAE,CACR,iDAAiD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CACrH,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,CAAC,0DAA0D,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CAAC;IAEF,OAAO;QACL,KAAK;YACH,IAAI,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC5B,UAAU,GAAG,IAAI,CAAC;YAClB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI;YACN,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAwB,EACxB,IAAwC,EACxC,WAAwC;IAExC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,EAAE,sBAAsB;YAC5B,UAAU,EAAE,SAAS;YACrB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,gDAAgD;SACxD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9F,WAAW,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { VersionInfo } from './election.js';
3
+ /**
4
+ * The installed CLI entry point: `<package>/dist/cli.js`. This module lives
5
+ * in `dist/lifecycle/` (installed) or `src/lifecycle/` (dev), two levels
6
+ * below the package root either way. After `npm install -g` this is the
7
+ * same path the running process started from, now holding the new code.
8
+ */
9
+ export declare const INSTALLED_CLI_PATH: string;
10
+ /** Last-modified time of the installed CLI (epoch ms), or `null`. */
11
+ export declare function readInstalledCodeMtime(path?: string): number | null;
12
+ /** Approximate wall-clock start of this process, epoch ms. */
13
+ export declare const PROCESS_STARTED_AT: number;
14
+ export declare function buildVersionInfo(version: string, pid?: number, startedAt?: number, installed?: () => string | null): VersionInfo;
15
+ /** The bridge's plain-HTTP handler: `/version` or 404. */
16
+ export declare function handleBridgeHttpRequest(req: IncomingMessage, res: ServerResponse, version: string): void;
@@ -0,0 +1,50 @@
1
+ import { statSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { PACKAGE_NAME, readInstalledVersion } from '../version.js';
5
+ /**
6
+ * `GET /version` on the bridge port (S5). The election (`election.ts`),
7
+ * `doctor` and anything else that needs to know "which browser-link is the
8
+ * primary, and is it outdated?" read it. Every other plain HTTP request is a
9
+ * 404; WebSocket upgrades never reach this handler.
10
+ */
11
+ const here = dirname(fileURLToPath(import.meta.url));
12
+ /**
13
+ * The installed CLI entry point: `<package>/dist/cli.js`. This module lives
14
+ * in `dist/lifecycle/` (installed) or `src/lifecycle/` (dev), two levels
15
+ * below the package root either way. After `npm install -g` this is the
16
+ * same path the running process started from, now holding the new code.
17
+ */
18
+ export const INSTALLED_CLI_PATH = join(here, '..', '..', 'dist', 'cli.js');
19
+ /** Last-modified time of the installed CLI (epoch ms), or `null`. */
20
+ export function readInstalledCodeMtime(path = INSTALLED_CLI_PATH) {
21
+ try {
22
+ return statSync(path).mtimeMs;
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /** Approximate wall-clock start of this process, epoch ms. */
29
+ export const PROCESS_STARTED_AT = Date.now() - Math.round(process.uptime() * 1000);
30
+ export function buildVersionInfo(version, pid = process.pid, startedAt = PROCESS_STARTED_AT, installed = readInstalledVersion) {
31
+ return {
32
+ name: PACKAGE_NAME,
33
+ version,
34
+ pid,
35
+ startedAt: new Date(startedAt).toISOString(),
36
+ installedVersion: installed(),
37
+ };
38
+ }
39
+ /** The bridge's plain-HTTP handler: `/version` or 404. */
40
+ export function handleBridgeHttpRequest(req, res, version) {
41
+ const path = (req.url ?? '').split('?')[0];
42
+ if (req.method === 'GET' && path === '/version') {
43
+ res.writeHead(200, { 'content-type': 'application/json' });
44
+ res.end(JSON.stringify(buildVersionInfo(version)));
45
+ return;
46
+ }
47
+ res.writeHead(404, { 'content-type': 'text/plain' });
48
+ res.end('Not found');
49
+ }
50
+ //# sourceMappingURL=version-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-endpoint.js","sourceRoot":"","sources":["../../src/lifecycle/version-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGnE;;;;;GAKG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEnF,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,OAAe,kBAAkB;IACtE,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAW,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAE3F,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,MAAc,OAAO,CAAC,GAAG,EACzB,YAAoB,kBAAkB,EACtC,YAAiC,oBAAoB;IAErD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO;QACP,GAAG;QACH,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC5C,gBAAgB,EAAE,SAAS,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,uBAAuB,CACrC,GAAoB,EACpB,GAAmB,EACnB,OAAe;IAEf,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAChD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;IACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACvB,CAAC"}
@@ -45,7 +45,7 @@ export const TOPICS = {
45
45
  },
46
46
  'multi-agent': {
47
47
  title: 'Sharing tabs with other agents (multi-agent mode)',
48
- body: lines('Several MCP clients can share one bridge; a cooperative claim layer keeps two agents off the same tab.', '- Action tools (`browser.click`, `browser.type`, `browser.navigate`, `browser.evaluate`) auto-claim a free tab on first use. If another agent holds it they fail naming the owner: ask the user whose tab it is, or use a different one.', '- Read tools (`browser.snapshot`, `browser.state`, `browser.console`, `browser.network`, `browser.network_body`, `browser.events`, `browser.ping`) ignore claims.', '- Give `browser.claim_tab` a stable `label` ("claude-code", "opencode"); claims also end on disconnect and after the inactivity TTL. The label is display only: ownership rests on the IPC session id, not on what an agent calls itself.'),
48
+ body: lines('Several MCP clients can share one bridge; a cooperative claim layer keeps two agents off the same tab.', '- Action tools (`browser.click`, `browser.type`, `browser.navigate`, `browser.evaluate`) auto-claim a free tab on first use. If another agent holds it they fail naming the owner: ask the user whose tab it is, or use a different one.', '- Read tools (`browser.snapshot`, `browser.state`, `browser.console`, `browser.network`, `browser.network_body`, `browser.events`, `browser.ping`) ignore claims.', '- Give `browser.claim_tab` a stable `label` ("claude-code", "opencode"); claims also end on disconnect and after the inactivity TTL. The label is display only: ownership rests on the IPC session id, not on what an agent calls itself.', '- One server process is the primary. A newer browser-link that starts displaces an older primary (it reads `GET /version` on the bridge port, then stops the old process), and the extension reconnects by itself.', '- A `list_tabs` hint "server running X, installed Y" means the package was updated under a live server: ask the user to run `browser-link stop` and restart the agent, or to click "Repair connection" in the extension popup. Do not kill processes yourself.'),
49
49
  },
50
50
  'cdp-direct': {
51
51
  title: 'cdp-direct tabs (optional, off by default, human-gated)',
@@ -1 +1 @@
1
- {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/manual/topics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,KAAK;IACL,kBAAkB;IAClB,aAAa;IACb,YAAY;CACJ,CAAC;AASX,MAAM,KAAK,GAAG,CAAC,GAAG,CAAW,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,MAAM,GAA6B;IAC9C,SAAS,EAAE;QACT,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,KAAK,CACT,kOAAkO,EAClO,+OAA+O,EAC/O,0EAA0E,EAC1E,uHAAuH,CACxH;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,0DAA0D;QACjE,IAAI,EAAE,KAAK,CACT,+OAA+O,EAC/O,oPAAoP,EACpP,oSAAoS,CACrS;KACF;IACD,UAAU,EAAE;QACV,KAAK,EAAE,mCAAmC;QAC1C,IAAI,EAAE,KAAK,CACT,wKAAwK,EACxK,oLAAoL,EACpL,oFAAoF,CACrF;KACF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,KAAK,CACT,gaAAga,EACha,EAAE,EACF,iJAAiJ,EACjJ,6HAA6H,EAC7H,iOAAiO,EACjO,gWAAgW,EAChW,qIAAqI,EACrI,sXAAsX,EACtX,kMAAkM,EAClM,EAAE,EACF,6aAA6a,EAC7a,EAAE,EACF,2XAA2X,EAC3X,kNAAkN,EAClN,qGAAqG,EACrG,uGAAuG,EACvG,mLAAmL,CACpL;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,mEAAmE;QAC1E,IAAI,EAAE,KAAK,CACT,qRAAqR,EACrR,0MAA0M,EAC1M,0MAA0M,EAC1M,+UAA+U,EAC/U,yRAAyR,EACzR,2IAA2I,CAC5I;KACF;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,KAAK,CACT,kGAAkG,EAClG,qRAAqR,EACrR,iJAAiJ,EACjJ,gNAAgN,EAChN,wFAAwF,EACxF,2HAA2H,EAC3H,iGAAiG,EACjG,sPAAsP,EACtP,uaAAua,EACva,sQAAsQ,EACtQ,+HAA+H,EAC/H,2QAA2Q,EAC3Q,oNAAoN,CACrN;KACF;IACD,aAAa,EAAE;QACb,KAAK,EAAE,mDAAmD;QAC1D,IAAI,EAAE,KAAK,CACT,wGAAwG,EACxG,0OAA0O,EAC1O,mKAAmK,EACnK,2OAA2O,CAC5O;KACF;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,yDAAyD;QAChE,IAAI,EAAE,KAAK,CACT,yOAAyO,EACzO,gIAAgI,EAChI,qHAAqH,EACrH,0GAA0G,CAC3G;KACF;CACF,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,WAAW,CAAC,IAAe;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/manual/topics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,KAAK;IACL,kBAAkB;IAClB,aAAa;IACb,YAAY;CACJ,CAAC;AASX,MAAM,KAAK,GAAG,CAAC,GAAG,CAAW,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,MAAM,GAA6B;IAC9C,SAAS,EAAE;QACT,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,KAAK,CACT,kOAAkO,EAClO,+OAA+O,EAC/O,0EAA0E,EAC1E,uHAAuH,CACxH;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,0DAA0D;QACjE,IAAI,EAAE,KAAK,CACT,+OAA+O,EAC/O,oPAAoP,EACpP,oSAAoS,CACrS;KACF;IACD,UAAU,EAAE;QACV,KAAK,EAAE,mCAAmC;QAC1C,IAAI,EAAE,KAAK,CACT,wKAAwK,EACxK,oLAAoL,EACpL,oFAAoF,CACrF;KACF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,KAAK,CACT,gaAAga,EACha,EAAE,EACF,iJAAiJ,EACjJ,6HAA6H,EAC7H,iOAAiO,EACjO,gWAAgW,EAChW,qIAAqI,EACrI,sXAAsX,EACtX,kMAAkM,EAClM,EAAE,EACF,6aAA6a,EAC7a,EAAE,EACF,2XAA2X,EAC3X,kNAAkN,EAClN,qGAAqG,EACrG,uGAAuG,EACvG,mLAAmL,CACpL;KACF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,mEAAmE;QAC1E,IAAI,EAAE,KAAK,CACT,qRAAqR,EACrR,0MAA0M,EAC1M,0MAA0M,EAC1M,+UAA+U,EAC/U,yRAAyR,EACzR,2IAA2I,CAC5I;KACF;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,KAAK,CACT,kGAAkG,EAClG,qRAAqR,EACrR,iJAAiJ,EACjJ,gNAAgN,EAChN,wFAAwF,EACxF,2HAA2H,EAC3H,iGAAiG,EACjG,sPAAsP,EACtP,uaAAua,EACva,sQAAsQ,EACtQ,+HAA+H,EAC/H,2QAA2Q,EAC3Q,oNAAoN,CACrN;KACF;IACD,aAAa,EAAE;QACb,KAAK,EAAE,mDAAmD;QAC1D,IAAI,EAAE,KAAK,CACT,wGAAwG,EACxG,0OAA0O,EAC1O,mKAAmK,EACnK,2OAA2O,EAC3O,oNAAoN,EACpN,gQAAgQ,CACjQ;KACF;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,yDAAyD;QAChE,IAAI,EAAE,KAAK,CACT,yOAAyO,EACzO,gIAAgI,EAChI,qHAAqH,EACrH,0GAA0G,CAC3G;KACF;CACF,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,WAAW,CAAC,IAAe;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
@@ -35,6 +35,14 @@ export interface TabRegisteredPayload {
35
35
  * extensions that don't know about the field can still parse the message.
36
36
  */
37
37
  serverVersion?: string;
38
+ /**
39
+ * Version installed on disk right now (re-read on every register). When it
40
+ * differs from `serverVersion`, the running server is outdated and the
41
+ * popup offers "Repair connection". Absent from servers older than 0.41.0.
42
+ */
43
+ installedVersion?: string;
44
+ /** PID of the server process that handed out this tabId (0.41.0+). */
45
+ serverPid?: number;
38
46
  }
39
47
  export interface TabRegisterMessage {
40
48
  kind: 'tab.register';
@@ -254,5 +262,110 @@ export type ActivityPurgeResultMessage = {
254
262
  ok: false;
255
263
  error: string;
256
264
  };
257
- export type ExtensionToServer = TabRegisterMessage | ToolResponseMessage | BridgeEventMessage | FlowRecordedMessage | ActivityQueryMessage | ActivityPurgeMessage;
258
- export type ServerToExtension = TabRegisteredMessage | ToolRequestMessage | ToolCancelMessage | SettingsUpdateMessage | FlowRecordedResultMessage | ActivityResultMessage | ActivityPurgeResultMessage;
265
+ /**
266
+ * Popup "Repair connection": ask the running server to restart itself on
267
+ * the installed code. The server answers with `bridge.repair.result` first,
268
+ * then spawns the installed CLI detached, terminates every extension socket
269
+ * uncleanly (so the extension auto-reconnects) and exits.
270
+ */
271
+ export interface BridgeRepairMessage {
272
+ kind: 'bridge.repair';
273
+ request_id: string;
274
+ }
275
+ export type BridgeRepairResultMessage = {
276
+ kind: 'bridge.repair.result';
277
+ request_id: string;
278
+ ok: true;
279
+ action: 'restarting';
280
+ } | {
281
+ kind: 'bridge.repair.result';
282
+ request_id: string;
283
+ ok: false;
284
+ error: string;
285
+ };
286
+ /**
287
+ * Admin panel (0.42.0): the server describes its administration state and
288
+ * actions as data, already localised, so the popup renders the same
289
+ * sections, options and labels as the console without a copy of its own.
290
+ * The same text lives in `packages/shared/src/index.ts`; keep both identical.
291
+ */
292
+ export type AdminItemKind = 'readout' | 'toggle' | 'select' | 'button' | 'link';
293
+ export interface AdminOption {
294
+ value: string;
295
+ label: string;
296
+ }
297
+ export interface AdminItem {
298
+ id: string;
299
+ kind: AdminItemKind;
300
+ label: string;
301
+ description?: string;
302
+ value?: string | number | boolean | null;
303
+ options?: AdminOption[];
304
+ writesDisk: boolean;
305
+ requiresRestart?: boolean;
306
+ hint?: string;
307
+ }
308
+ export interface AdminSection {
309
+ id: 'status' | 'setup' | 'diagnose' | 'reference';
310
+ title: string;
311
+ items: AdminItem[];
312
+ }
313
+ export interface AdminUiStrings {
314
+ language: 'en' | 'es';
315
+ confirm: string;
316
+ cancel: string;
317
+ apply: string;
318
+ notConnected: string;
319
+ restartRequired: string;
320
+ changed: string;
321
+ }
322
+ export interface AdminState {
323
+ version: 1;
324
+ generatedAt: string;
325
+ sections: AdminSection[];
326
+ ui: AdminUiStrings;
327
+ }
328
+ export type AdminActionResult = {
329
+ ok: true;
330
+ applied: true;
331
+ requiresRestart?: boolean;
332
+ state?: AdminState;
333
+ output?: string[];
334
+ } | {
335
+ ok: true;
336
+ applied: false;
337
+ needsConfirm: true;
338
+ preview: string;
339
+ } | {
340
+ ok: false;
341
+ error: string;
342
+ };
343
+ export interface AdminDescribeMessage {
344
+ kind: 'admin.describe';
345
+ request_id: string;
346
+ }
347
+ export interface AdminActionMessage {
348
+ kind: 'admin.action';
349
+ request_id: string;
350
+ id: string;
351
+ value?: string | number | boolean;
352
+ confirm?: boolean;
353
+ }
354
+ export type AdminStateMessage = {
355
+ kind: 'admin.state';
356
+ request_id: string;
357
+ ok: true;
358
+ state: AdminState;
359
+ } | {
360
+ kind: 'admin.state';
361
+ request_id: string;
362
+ ok: false;
363
+ error: string;
364
+ };
365
+ export interface AdminActionResultMessage {
366
+ kind: 'admin.action.result';
367
+ request_id: string;
368
+ result: AdminActionResult;
369
+ }
370
+ export type ExtensionToServer = TabRegisterMessage | ToolResponseMessage | BridgeEventMessage | FlowRecordedMessage | ActivityQueryMessage | ActivityPurgeMessage | BridgeRepairMessage | AdminDescribeMessage | AdminActionMessage;
371
+ export type ServerToExtension = TabRegisteredMessage | ToolRequestMessage | ToolCancelMessage | SettingsUpdateMessage | FlowRecordedResultMessage | ActivityResultMessage | ActivityPurgeResultMessage | BridgeRepairResultMessage | AdminStateMessage | AdminActionResultMessage;
package/dist/server.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
4
+ import { spawn } from 'node:child_process';
4
5
  import { randomUUID } from 'node:crypto';
5
6
  import { closeDb } from './map/db.js';
6
7
  import { getMapHints } from './map/queries.js';
@@ -19,7 +20,13 @@ import { checkCdpDirectGate } from './cdp/gate.js';
19
20
  import { listCdpTargets } from './cdp/targets.js';
20
21
  import { callCdpTool } from './cdp/transport.js';
21
22
  import { setCdpFlowEventSink } from './cdp/detached-flows.js';
23
+ import { findPidOnPort, imageNameOf, isNodeImage } from './commands/free-port.js';
24
+ import { probeVersion, retryBind, runElection, stepDownProcess } from './lifecycle/election.js';
25
+ import { readProcessStartTime } from './lifecycle/processes.js';
26
+ import { createRepairController } from './lifecycle/repair.js';
27
+ import { INSTALLED_CLI_PATH, readInstalledCodeMtime } from './lifecycle/version-endpoint.js';
22
28
  import { WS_HOST, WS_PORT, isAddrInUse, pushSettingsToAllTabs, sendToolCancel, sendToolRequest, startWsBridge, } from './bridge/ws-bridge.js';
29
+ import { createPrimaryAdminHandlers } from './admin/primary.js';
23
30
  export { WS_HOST, WS_PORT };
24
31
  const DEFAULT_TIMEOUT_MS = 15_000;
25
32
  function log(msg) {
@@ -58,6 +65,11 @@ export async function runServer() {
58
65
  catch (err) {
59
66
  if (!isAddrInUse(err))
60
67
  throw err;
68
+ // Version-aware election (lifecycle/election.ts): a newer process
69
+ // displaces an older primary; otherwise fall through to the existing
70
+ // proxy / error path.
71
+ if (await electPrimary(() => runPrimary(cfg)))
72
+ return;
61
73
  if (cfg.multiAgent === true) {
62
74
  // Another primary is already running — degrade to proxy mode so this
63
75
  // MCP client can still reach the bridge.
@@ -73,6 +85,63 @@ export async function runServer() {
73
85
  `Then restart your MCP client. With multi-agent on, this process would have become a proxy instead of erroring.`, { cause: err });
74
86
  }
75
87
  }
88
+ /** Hand-off race: a repair or take-over predecessor may be exiting right
89
+ * now. Retry the bind briefly before asking who holds the port. */
90
+ const HANDOFF_ATTEMPTS = 5;
91
+ const HANDOFF_DELAY_MS = 100;
92
+ /** After a take-over step-down: 200 ms × up to 25. */
93
+ const TAKEOVER_ATTEMPTS = 25;
94
+ const TAKEOVER_DELAY_MS = 200;
95
+ /**
96
+ * The port is taken. Returns true when this process ended up as the primary
97
+ * (the holder left during the hand-off window, or it was older and stepped
98
+ * down), false when it must defer.
99
+ */
100
+ async function electPrimary(bind) {
101
+ try {
102
+ await retryBind(bind, {
103
+ attempts: HANDOFF_ATTEMPTS,
104
+ delayMs: HANDOFF_DELAY_MS,
105
+ isRetryable: isAddrInUse,
106
+ });
107
+ return true;
108
+ }
109
+ catch (err) {
110
+ if (!isAddrInUse(err))
111
+ throw err;
112
+ }
113
+ const outcome = await runElection({
114
+ localVersion: VERSION,
115
+ probe: () => probeVersion(WS_PORT),
116
+ findOwnerPid: () => findPidOnPort(WS_PORT),
117
+ processStartTime: (pid) => readProcessStartTime(pid),
118
+ installedCodeMtime: () => readInstalledCodeMtime(),
119
+ stepDown: async (pid) => {
120
+ // Same safety rule as `browser-link stop`: only a node process.
121
+ if (!isNodeImage(imageNameOf(pid)))
122
+ throw new Error(`PID ${pid} is not a node process`);
123
+ await stepDownProcess(pid);
124
+ },
125
+ });
126
+ log(`Primary election: ${outcome.decision} (${outcome.reason}).`);
127
+ if (outcome.decision !== 'take-over')
128
+ return false;
129
+ try {
130
+ await retryBind(bind, {
131
+ attempts: TAKEOVER_ATTEMPTS,
132
+ delayMs: TAKEOVER_DELAY_MS,
133
+ isRetryable: isAddrInUse,
134
+ });
135
+ log(`Took over from PID ${outcome.pid ?? '?'} (running ${VERSION}).`);
136
+ return true;
137
+ }
138
+ catch (err) {
139
+ if (!isAddrInUse(err))
140
+ throw err;
141
+ log('Take-over: the port did not free up in time; deferring.');
142
+ return false;
143
+ }
144
+ }
76
145
  async function runPrimary(cfg) {
77
146
  const tabs = new Map();
78
147
  const pendingRequests = new Map();
@@ -83,9 +152,43 @@ async function runPrimary(cfg) {
83
152
  pid: process.pid,
84
153
  multiAgent: cfg.multiAgent === true,
85
154
  });
155
+ // Popup "Repair connection" (lifecycle/repair.ts): restart on the
156
+ // installed code. Wired here because only the primary owns the sockets,
157
+ // the IPC server and the process.
158
+ const repair = createRepairController({
159
+ execPath: process.execPath,
160
+ cliPath: INSTALLED_CLI_PATH,
161
+ spawn: (command, args, options) => spawn(command, args, options),
162
+ terminateSockets: () => {
163
+ for (const client of wss.clients)
164
+ client.terminate();
165
+ },
166
+ stopIpc: () => (ipcServer ? ipcServer.stop() : Promise.resolve()),
167
+ exit: (code) => {
168
+ closeDb();
169
+ process.exit(code);
170
+ },
171
+ delay: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
172
+ log,
173
+ });
86
174
  // Bind the WS bridge first. AddrInUseError propagates up to runServer()
87
175
  // so the caller can decide between proxy mode and a clear error.
88
- await startWsBridge(tabs, pendingRequests, events);
176
+ const wss = await startWsBridge(tabs, pendingRequests, events, {
177
+ onRepair: () => repair.start(),
178
+ // Admin panel (popup): describe/act on this primary's settings through
179
+ // the same helpers the console uses. Doctor runs only on its button.
180
+ admin: createPrimaryAdminHandlers({
181
+ version: VERSION,
182
+ tabsConnected: () => tabs.size,
183
+ connectedExtensionVersion: () => {
184
+ for (const session of tabs.values()) {
185
+ if (session.extensionVersion !== undefined)
186
+ return session.extensionVersion;
187
+ }
188
+ return null;
189
+ },
190
+ }),
191
+ });
89
192
  // Cooperative tab ownership across MCP clients. Claim events are mirrored
90
193
  // into the bridge event log so `browser.events` doubles as an audit trail.
91
194
  const tabClaims = new TabClaimRegistry({
@@ -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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"}
@@ -41,6 +41,14 @@ export interface EnrichedTabSnapshot extends TabSnapshot {
41
41
  * MAJOR.MINOR.PATCH lower than the server's version. */
42
42
  extension_outdated?: true;
43
43
  }
44
+ /**
45
+ * Second-block hint for `browser.list_tabs` when the version installed on
46
+ * disk is newer than the one this process is running (an `npm install -g`
47
+ * happened under a live server). `null` otherwise, including when the
48
+ * installed version cannot be read. Meant for `hintToolResponse`: the tab
49
+ * array itself never changes shape.
50
+ */
51
+ export declare function outdatedServerHint(running?: string, installed?: string | null): string | null;
44
52
  export interface BrowserToolDeps {
45
53
  listTabs(): TabSnapshot[];
46
54
  callBrowserTool(tabId: string, tool: string, params: unknown, timeoutMs?: number): Promise<unknown>;
@@ -21,7 +21,7 @@ function handleReset(deps) {
21
21
  */
22
22
  import { randomUUID } from 'node:crypto';
23
23
  import { compareSemver } from '../utils/semver.js';
24
- import { VERSION } from '../version.js';
24
+ import { VERSION, readInstalledVersion } from '../version.js';
25
25
  import { requireTabId } from './responses.js';
26
26
  import { DOWNLOAD_BRIDGE_SLACK_MS, MAX_DOWNLOAD_BYTES, buildFetchDownloadJs, clampDownloadTimeoutMs, pickFilename, shapeDownloadResult, validateRequestedFilename, } from '../downloads.js';
27
27
  import { buildRow } from '../activity/extract.js';
@@ -39,6 +39,20 @@ function isExtensionOutdated(t) {
39
39
  return false;
40
40
  return compareSemver(t.extension_version, VERSION) < 0;
41
41
  }
42
+ /**
43
+ * Second-block hint for `browser.list_tabs` when the version installed on
44
+ * disk is newer than the one this process is running (an `npm install -g`
45
+ * happened under a live server). `null` otherwise, including when the
46
+ * installed version cannot be read. Meant for `hintToolResponse`: the tab
47
+ * array itself never changes shape.
48
+ */
49
+ export function outdatedServerHint(running = VERSION, installed = readInstalledVersion()) {
50
+ if (installed === null || compareSemver(installed, running) <= 0)
51
+ return null;
52
+ return (`server running ${running}, installed ${installed}: this server is outdated; ` +
53
+ `ask the user to run browser-link stop and restart the agent, ` +
54
+ `or to click "Repair connection" in the extension popup`);
55
+ }
42
56
  /** Closed set of browser tool names. Used both as the discriminant in
43
57
  * `handleBrowserTool`'s switch and as the allowlist behind `isBrowserTool`,
44
58
  * so adding a tool requires touching one place. The literal-union type lets