@jobshimo/browser-link 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +37 -0
  2. package/dist/bridge/client.d.ts +101 -0
  3. package/dist/bridge/client.js +435 -0
  4. package/dist/bridge/client.js.map +1 -0
  5. package/dist/bridge/dispatch.d.ts +29 -0
  6. package/dist/bridge/dispatch.js +39 -0
  7. package/dist/bridge/dispatch.js.map +1 -0
  8. package/dist/bridge/events.d.ts +39 -0
  9. package/dist/bridge/events.js +47 -0
  10. package/dist/bridge/events.js.map +1 -0
  11. package/dist/bridge/protocol.d.ts +80 -0
  12. package/dist/bridge/protocol.js +79 -0
  13. package/dist/bridge/protocol.js.map +1 -0
  14. package/dist/bridge/server.d.ts +42 -0
  15. package/dist/bridge/server.js +336 -0
  16. package/dist/bridge/server.js.map +1 -0
  17. package/dist/bridge/token.d.ts +17 -0
  18. package/dist/bridge/token.js +79 -0
  19. package/dist/bridge/token.js.map +1 -0
  20. package/dist/cli.js +94 -15
  21. package/dist/cli.js.map +1 -1
  22. package/dist/commands/doctor.d.ts +12 -1
  23. package/dist/commands/doctor.js +90 -20
  24. package/dist/commands/doctor.js.map +1 -1
  25. package/dist/commands/extension.d.ts +3 -2
  26. package/dist/commands/extension.js +53 -28
  27. package/dist/commands/extension.js.map +1 -1
  28. package/dist/commands/multi-agent.d.ts +7 -0
  29. package/dist/commands/multi-agent.js +109 -0
  30. package/dist/commands/multi-agent.js.map +1 -0
  31. package/dist/commands/tools.d.ts +11 -0
  32. package/dist/commands/tools.js +168 -0
  33. package/dist/commands/tools.js.map +1 -0
  34. package/dist/commands/updates.d.ts +2 -1
  35. package/dist/commands/updates.js +24 -7
  36. package/dist/commands/updates.js.map +1 -1
  37. package/dist/config.d.ts +25 -3
  38. package/dist/config.js +35 -2
  39. package/dist/config.js.map +1 -1
  40. package/dist/messages.d.ts +7 -0
  41. package/dist/permissions.d.ts +37 -0
  42. package/dist/permissions.js +156 -0
  43. package/dist/permissions.js.map +1 -0
  44. package/dist/server.d.ts +7 -3
  45. package/dist/server.js +160 -32
  46. package/dist/server.js.map +1 -1
  47. package/dist/tools/browser-definitions.js +18 -0
  48. package/dist/tools/browser-definitions.js.map +1 -1
  49. package/dist/tools/browser-dispatch.d.ts +7 -0
  50. package/dist/tools/browser-dispatch.js +11 -0
  51. package/dist/tools/browser-dispatch.js.map +1 -1
  52. package/dist/tools/server-instructions.d.ts +1 -1
  53. package/dist/tools/server-instructions.js +4 -0
  54. package/dist/tools/server-instructions.js.map +1 -1
  55. package/dist/ui/app.js +16 -1
  56. package/dist/ui/app.js.map +1 -1
  57. package/dist/ui/screens.d.ts +14 -1
  58. package/dist/ui/screens.js +314 -2
  59. package/dist/ui/screens.js.map +1 -1
  60. package/package.json +4 -3
@@ -0,0 +1,17 @@
1
+ /** Where the per-session token file lives. */
2
+ export declare function tokenPath(): string;
3
+ /** Generate a fresh 32-byte hex token. */
4
+ export declare function generateToken(): string;
5
+ /** Write the given token to the data dir, replacing any previous value.
6
+ * Tries to set 0600 permissions on POSIX; on Windows the file ACL
7
+ * inherits from the user's profile, which is already user-only. */
8
+ export declare function writeToken(token: string): string;
9
+ /** Read the current token. Returns null if no token file exists or if
10
+ * it does not look like a valid 32-byte hex string. */
11
+ export declare function readToken(): string | null;
12
+ /** Generate + write a fresh token. Returns it. Called by every primary
13
+ * on startup, so any zombie token from a previous primary is invalidated. */
14
+ export declare function rotateToken(): string;
15
+ /** Best-effort cleanup. Used when the primary shuts down cleanly so the
16
+ * file doesn't linger as misleading state. */
17
+ export declare function clearToken(): void;
@@ -0,0 +1,79 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { randomBytes } from 'node:crypto';
4
+ import { getDataDir } from '../map/paths.js';
5
+ /**
6
+ * Per-session authentication token for the IPC channel between primary and
7
+ * proxy browser-link processes. The primary writes a fresh random token at
8
+ * startup; proxies read it just before sending their hello frame.
9
+ *
10
+ * Security model: the file lives in the user's data dir. On POSIX we set
11
+ * 0600 so only the user can read it. On Windows the file inherits the
12
+ * user-profile ACL, which is already restricted to the same user. A
13
+ * malicious process running as the same user can read the file — at that
14
+ * point the user has already lost — but a different local user, a remote
15
+ * peer, or a sandboxed process cannot.
16
+ */
17
+ const TOKEN_FILE_NAME = 'multi-agent-token';
18
+ const TOKEN_HEX_LENGTH = 64; // 32 bytes hex = 64 chars
19
+ /** Where the per-session token file lives. */
20
+ export function tokenPath() {
21
+ return join(getDataDir(), TOKEN_FILE_NAME);
22
+ }
23
+ /** Generate a fresh 32-byte hex token. */
24
+ export function generateToken() {
25
+ return randomBytes(32).toString('hex');
26
+ }
27
+ /** Write the given token to the data dir, replacing any previous value.
28
+ * Tries to set 0600 permissions on POSIX; on Windows the file ACL
29
+ * inherits from the user's profile, which is already user-only. */
30
+ export function writeToken(token) {
31
+ const path = tokenPath();
32
+ mkdirSync(dirname(path), { recursive: true });
33
+ writeFileSync(path, token, 'utf8');
34
+ try {
35
+ chmodSync(path, 0o600);
36
+ }
37
+ catch {
38
+ // chmod is a no-op on Windows; ignore.
39
+ }
40
+ return path;
41
+ }
42
+ /** Read the current token. Returns null if no token file exists or if
43
+ * it does not look like a valid 32-byte hex string. */
44
+ export function readToken() {
45
+ const path = tokenPath();
46
+ if (!existsSync(path))
47
+ return null;
48
+ try {
49
+ const raw = readFileSync(path, 'utf8').trim();
50
+ if (raw.length !== TOKEN_HEX_LENGTH)
51
+ return null;
52
+ if (!/^[0-9a-f]+$/i.test(raw))
53
+ return null;
54
+ return raw;
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ /** Generate + write a fresh token. Returns it. Called by every primary
61
+ * on startup, so any zombie token from a previous primary is invalidated. */
62
+ export function rotateToken() {
63
+ const token = generateToken();
64
+ writeToken(token);
65
+ return token;
66
+ }
67
+ /** Best-effort cleanup. Used when the primary shuts down cleanly so the
68
+ * file doesn't linger as misleading state. */
69
+ export function clearToken() {
70
+ const path = tokenPath();
71
+ try {
72
+ if (existsSync(path))
73
+ unlinkSync(path);
74
+ }
75
+ catch {
76
+ // ignore
77
+ }
78
+ }
79
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/bridge/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;GAWG;AAEH,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAC5C,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,0BAA0B;AAEvD,8CAA8C;AAC9C,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;AAC7C,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;mEAEmE;AACnE,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;uDACuD;AACvD,MAAM,UAAU,SAAS;IACvB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;8CAC8C;AAC9C,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC"}
package/dist/cli.js CHANGED
@@ -5,9 +5,50 @@ import { uninstallAll, uninstallFor } from './commands/uninstall.js';
5
5
  import { printExtensionInstructions } from './commands/extension.js';
6
6
  import { printAbout } from './commands/about.js';
7
7
  import { checkUpdates, formatUpdate } from './commands/updates.js';
8
+ import { runToolsCommand } from './commands/tools.js';
9
+ import { runMultiAgentCommand } from './commands/multi-agent.js';
8
10
  import { loadConfig } from './config.js';
9
11
  import { VERSION } from './version.js';
10
- const HELP = `browser-link ${VERSION} — bridge any MCP client to the Chrome tabs you enable.
12
+ function buildHelp(language) {
13
+ if (language === 'es') {
14
+ return `browser-link ${VERSION} — puente entre cualquier cliente MCP y las pestañas de Chrome que vos habilites.
15
+
16
+ Uso:
17
+ browser-link Abre el setup interactivo (registrar un
18
+ cliente, ver pasos de la extensión, doctor,
19
+ buscar actualizaciones) cuando se invoca
20
+ desde una terminal.
21
+ Cuando lo invoca un cliente MCP por stdio,
22
+ arranca el servidor MCP.
23
+ browser-link install Registra browser-link en todos los clientes detectados.
24
+ browser-link install --client <claude|opencode|copilot>
25
+ Registra sólo en el cliente nombrado.
26
+ browser-link uninstall Elimina todos los registros.
27
+ browser-link uninstall --client <id>
28
+ Elimina sólo el registro nombrado.
29
+ browser-link extension Muestra la ruta de los assets de la extensión
30
+ de Chrome y los pasos por SO.
31
+ browser-link doctor Diagnostica el setup actual (clientes, servidor, extensión, base del mapa).
32
+ browser-link updates Consulta el registry de npm en busca de versión nueva.
33
+ browser-link tools Muestra qué tools MCP están habilitadas / deshabilitadas.
34
+ browser-link tools enable <nombre…> Vuelve a habilitar tools concretas.
35
+ browser-link tools disable <nombre…> Deshabilita tools concretas.
36
+ browser-link tools preset <id> Aplica un preset: all | readonly | no-eval | no-map.
37
+ browser-link multi-agent Estado del modo multi-agente y re-elección automática.
38
+ browser-link multi-agent enable | disable
39
+ browser-link multi-agent auto-reelect enable | disable
40
+ browser-link about Muestra la explicación completa.
41
+ browser-link version Muestra la versión instalada (también: --version, -v).
42
+ browser-link help Este mensaje.
43
+
44
+ Variables de entorno:
45
+ BROWSER_LINK_DATA_DIR Sobreescribe la ruta de la base (default por SO).
46
+ BROWSER_LINK_BIN Sobreescribe el comando guardado en los configs
47
+ de los clientes (p. ej. "node /path/to/dist/index.js" en dev).
48
+ COPILOT_HOME Sobreescribe el directorio de config del CLI de
49
+ GitHub Copilot (default ~/.copilot).`;
50
+ }
51
+ return `browser-link ${VERSION} — bridge any MCP client to the Chrome tabs you enable.
11
52
 
12
53
  Usage:
13
54
  browser-link When invoked from an interactive terminal,
@@ -25,6 +66,13 @@ Usage:
25
66
  per-OS install instructions.
26
67
  browser-link doctor Diagnose current setup (clients, server, extension, map DB).
27
68
  browser-link updates Check the npm registry for a newer version.
69
+ browser-link tools Show which MCP tools are enabled / disabled.
70
+ browser-link tools enable <name…> Re-enable specific tools.
71
+ browser-link tools disable <name…> Disable specific tools.
72
+ browser-link tools preset <id> Apply a preset: all | readonly | no-eval | no-map.
73
+ browser-link multi-agent Show multi-agent mode + auto-reelect status.
74
+ browser-link multi-agent enable | disable
75
+ browser-link multi-agent auto-reelect enable | disable
28
76
  browser-link about Show the full explanation of what this is and how it works.
29
77
  browser-link version Print the installed version (also: --version, -v).
30
78
  browser-link help This message.
@@ -35,17 +83,39 @@ Environment:
35
83
  (e.g. "node /path/to/dist/index.js" for dev).
36
84
  COPILOT_HOME Override GitHub Copilot CLI's config dir
37
85
  (default ~/.copilot).`;
38
- function parseClient(argv) {
86
+ }
87
+ const CLI_I18N = {
88
+ en: {
89
+ help: '',
90
+ restartHint: 'Restart the MCP client so it picks up the registration.',
91
+ installNext: 'Next: install the Chrome extension — run `browser-link extension`.',
92
+ toolsRestart: 'Restart your MCP client so it picks up the change.',
93
+ unknownCommand: (cmd) => `Unknown command: ${cmd}`,
94
+ unknownClient: (val) => `Unknown --client value: ${val}. Use claude, opencode or copilot.`,
95
+ },
96
+ es: {
97
+ help: '',
98
+ restartHint: 'Reiniciá el cliente MCP para que tome el registro.',
99
+ installNext: 'Siguiente: instalá la extensión de Chrome — corré `browser-link extension`.',
100
+ toolsRestart: 'Reiniciá el cliente MCP para que tome el cambio.',
101
+ unknownCommand: (cmd) => `Comando desconocido: ${cmd}`,
102
+ unknownClient: (val) => `Valor de --client desconocido: ${val}. Usá claude, opencode o copilot.`,
103
+ },
104
+ };
105
+ function parseClient(argv, language) {
39
106
  const idx = argv.findIndex((a) => a === '--client');
40
107
  if (idx === -1 || idx === argv.length - 1)
41
108
  return null;
42
109
  const val = argv[idx + 1];
43
110
  if (val === 'claude' || val === 'opencode' || val === 'copilot')
44
111
  return val;
45
- throw new Error(`Unknown --client value: ${val}. Use claude, opencode or copilot.`);
112
+ throw new Error(CLI_I18N[language].unknownClient(val ?? ''));
46
113
  }
47
114
  async function dispatch(argv) {
48
115
  const [cmd, ...rest] = argv;
116
+ const cfg = loadConfig();
117
+ const language = cfg.language ?? 'en';
118
+ const t = CLI_I18N[language];
49
119
  switch (cmd) {
50
120
  case undefined:
51
121
  case 'start': {
@@ -56,50 +126,59 @@ async function dispatch(argv) {
56
126
  case 'help':
57
127
  case '-h':
58
128
  case '--help': {
59
- console.log(HELP);
129
+ console.log(buildHelp(language));
60
130
  return;
61
131
  }
62
132
  case 'install': {
63
- const client = parseClient(rest);
133
+ const client = parseClient(rest, language);
64
134
  const reports = client ? [installFor(client)] : installAll();
65
135
  for (const r of reports) {
66
136
  const prefix = r.installedClient ? '✓' : '·';
67
137
  console.log(`${prefix} ${r.displayName}: ${r.message}`);
68
138
  }
69
139
  console.log('');
70
- console.log('Restart the MCP client so it picks up the registration.');
71
- console.log('Next: install the Chrome extension — run `browser-link extension`.');
140
+ console.log(t.restartHint);
141
+ console.log(t.installNext);
72
142
  return;
73
143
  }
74
144
  case 'uninstall': {
75
- const client = parseClient(rest);
145
+ const client = parseClient(rest, language);
76
146
  const reports = client ? [uninstallFor(client)] : uninstallAll();
77
147
  for (const r of reports)
78
148
  console.log(`· ${r.displayName}: ${r.message}`);
79
149
  return;
80
150
  }
81
151
  case 'extension': {
82
- printExtensionInstructions();
152
+ printExtensionInstructions(language);
83
153
  return;
84
154
  }
85
155
  case 'doctor': {
86
156
  const report = await runDoctor();
87
- console.log(formatDoctor(report));
157
+ console.log(formatDoctor(report, language));
88
158
  return;
89
159
  }
90
160
  case 'about': {
91
- const cfg = loadConfig();
92
- printAbout(cfg.language ?? 'en');
161
+ printAbout(language);
93
162
  return;
94
163
  }
95
164
  case 'updates': {
96
165
  const info = await checkUpdates();
97
- console.log(formatUpdate(info));
166
+ console.log(formatUpdate(info, language));
98
167
  // Non-zero exit when we could not reach the registry, so scripts can detect it.
99
168
  if (info.error || info.latest === null)
100
169
  process.exit(2);
101
170
  return;
102
171
  }
172
+ case 'tools': {
173
+ console.log(runToolsCommand(rest, language));
174
+ console.log('');
175
+ console.log(t.toolsRestart);
176
+ return;
177
+ }
178
+ case 'multi-agent': {
179
+ console.log(runMultiAgentCommand(rest, language));
180
+ return;
181
+ }
103
182
  case 'version':
104
183
  case '-v':
105
184
  case '--version': {
@@ -107,9 +186,9 @@ async function dispatch(argv) {
107
186
  return;
108
187
  }
109
188
  default: {
110
- console.error(`Unknown command: ${cmd}`);
189
+ console.error(t.unknownCommand(cmd));
111
190
  console.error('');
112
- console.error(HELP);
191
+ console.error(buildHelp(language));
113
192
  process.exit(2);
114
193
  }
115
194
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAavC,SAAS,SAAS,CAAC,QAAkB;IACnC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,gBAAgB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAmCmC,CAAC;IACpE,CAAC;IACD,OAAO,gBAAgB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAkCsB,CAAC;AACvD,CAAC;AAED,MAAM,QAAQ,GAA8B;IAC1C,EAAE,EAAE;QACF,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE,oEAAoE;QACjF,YAAY,EAAE,oDAAoD;QAClE,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,GAAG,EAAE;QAClD,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,2BAA2B,GAAG,oCAAoC;KAC3F;IACD,EAAE,EAAE;QACF,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE,6EAA6E;QAC1F,YAAY,EAAE,kDAAkD;QAChE,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,wBAAwB,GAAG,EAAE;QACtD,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CACrB,kCAAkC,GAAG,mCAAmC;KAC3E;CACF,CAAC;AAEF,SAAS,WAAW,CAAC,IAAc,EAAE,QAAkB;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;IACpD,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC5E,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAc;IACpC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAa,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;IAChD,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE7B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,SAAS,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;YACjE,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1C,gFAAgF;YAChF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC;QACf,KAAK,IAAI,CAAC;QACV,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,4EAA4E;AAC5E,4DAA4D;AAC5D,kFAAkF;AAClF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,OAAO,EAAE,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { Language } from './welcome.js';
1
2
  export interface DoctorReport {
2
3
  ws: {
3
4
  listening: boolean;
@@ -5,6 +6,16 @@ export interface DoctorReport {
5
6
  host: string;
6
7
  port: number;
7
8
  };
9
+ ipc: {
10
+ listening: boolean;
11
+ detail: string;
12
+ host: string;
13
+ port: number;
14
+ };
15
+ multiAgent: {
16
+ enabled: boolean;
17
+ autoReelect: boolean;
18
+ };
8
19
  clients: {
9
20
  id: string;
10
21
  displayName: string;
@@ -26,4 +37,4 @@ export interface DoctorReport {
26
37
  };
27
38
  }
28
39
  export declare function runDoctor(): Promise<DoctorReport>;
29
- export declare function formatDoctor(r: DoctorReport): string;
40
+ export declare function formatDoctor(r: DoctorReport, language?: Language): string;
@@ -5,6 +5,8 @@ import { getAllowedBrowsers } from '../auth/allowlist.js';
5
5
  import { getDbPath } from '../map/paths.js';
6
6
  import { listApps } from '../map/queries.js';
7
7
  import { resolveExtensionPath } from './extension.js';
8
+ import { loadConfig } from '../config.js';
9
+ import { IPC_HOST, IPC_PORT } from '../bridge/protocol.js';
8
10
  const WS_HOST = '127.0.0.1';
9
11
  const WS_PORT = 17529;
10
12
  function checkPort(host, port, timeoutMs = 500) {
@@ -31,6 +33,7 @@ function checkPort(host, port, timeoutMs = 500) {
31
33
  }
32
34
  export async function runDoctor() {
33
35
  const ws = await checkPort(WS_HOST, WS_PORT);
36
+ const ipc = await checkPort(IPC_HOST, IPC_PORT);
34
37
  const clients = INSTALLERS.map((i) => {
35
38
  const d = i.detect();
36
39
  return { id: i.id, displayName: i.displayName, ...d };
@@ -48,8 +51,11 @@ export async function runDoctor() {
48
51
  apps = -1;
49
52
  }
50
53
  }
54
+ const cfg = loadConfig();
51
55
  return {
52
56
  ws: { ...ws, host: WS_HOST, port: WS_PORT },
57
+ ipc: { ...ipc, host: IPC_HOST, port: IPC_PORT },
58
+ multiAgent: { enabled: cfg.multiAgent === true, autoReelect: cfg.autoReelect === true },
53
59
  clients,
54
60
  extension: { path: extPath },
55
61
  map: { dbPath, exists: dbExists, sizeBytes, apps },
@@ -59,52 +65,116 @@ export async function runDoctor() {
59
65
  function symbol(ok) {
60
66
  return ok ? '✓' : '✗';
61
67
  }
62
- export function formatDoctor(r) {
68
+ const DOCTOR_I18N = {
69
+ en: {
70
+ title: 'browser-link doctor',
71
+ wsBridge: 'WebSocket bridge',
72
+ wsHint: ' (the server is launched by your MCP client; open Claude Code / OpenCode / Copilot CLI to start it)',
73
+ clientsHeader: 'MCP clients:',
74
+ clientNotInstalled: '✗ not installed',
75
+ clientRegistered: '✓ registered',
76
+ clientNotRegistered: '⚠ installed but not registered',
77
+ clientConfig: 'config:',
78
+ extensionHeader: 'Chrome extension assets:',
79
+ extensionNotFound: 'not found (run `browser-link extension` for guidance)',
80
+ mapHeader: 'Map DB:',
81
+ mapPath: 'path:',
82
+ mapNotCreated: ' (not created yet — will be initialized on first run)',
83
+ mapSize: 'size:',
84
+ mapApps: 'apps tracked:',
85
+ processBinding: 'Process binding:',
86
+ processBindingNone: ' ✗ no allowlist for this OS — incoming WS connections will be rejected.',
87
+ processBindingOk: (n) => ` ✓ accepts WS connections from ${n} known browser binaries.`,
88
+ multiAgentHeader: 'Multi-agent:',
89
+ multiAgentMode: ' Mode ',
90
+ autoReelect: ' Auto-reelect ',
91
+ on: 'on',
92
+ off: 'off',
93
+ ipcLine: ' IPC port ',
94
+ ipcListening: 'listening (a primary is running)',
95
+ ipcFree: 'free (no primary on this machine)',
96
+ },
97
+ es: {
98
+ title: 'browser-link doctor',
99
+ wsBridge: 'Puente WebSocket',
100
+ wsHint: ' (lo arranca tu cliente MCP; abrí Claude Code / OpenCode / Copilot CLI para iniciarlo)',
101
+ clientsHeader: 'Clientes MCP:',
102
+ clientNotInstalled: '✗ no instalado',
103
+ clientRegistered: '✓ registrado',
104
+ clientNotRegistered: '⚠ instalado pero no registrado',
105
+ clientConfig: 'config:',
106
+ extensionHeader: 'Assets de la extensión de Chrome:',
107
+ extensionNotFound: 'no encontrada (corré `browser-link extension` para la guía)',
108
+ mapHeader: 'Base de datos del mapa:',
109
+ mapPath: 'ruta:',
110
+ mapNotCreated: ' (todavía no se creó — se inicializa en el primer arranque)',
111
+ mapSize: 'tamaño:',
112
+ mapApps: 'apps registradas:',
113
+ processBinding: 'Validación por proceso:',
114
+ processBindingNone: ' ✗ sin allowlist para este SO — las conexiones WS entrantes se rechazan.',
115
+ processBindingOk: (n) => ` ✓ acepta conexiones WS desde ${n} binarios de navegador conocidos.`,
116
+ multiAgentHeader: 'Multi-agente:',
117
+ multiAgentMode: ' Modo ',
118
+ autoReelect: ' Re-elección auto ',
119
+ on: 'activado',
120
+ off: 'desactivado',
121
+ ipcLine: ' Puerto IPC ',
122
+ ipcListening: 'escuchando (hay un primary corriendo)',
123
+ ipcFree: 'libre (no hay primary en esta máquina)',
124
+ },
125
+ };
126
+ export function formatDoctor(r, language = 'en') {
127
+ const t = DOCTOR_I18N[language];
63
128
  const lines = [];
64
- lines.push('browser-link doctor');
129
+ lines.push(t.title);
65
130
  lines.push('');
66
- lines.push(`WebSocket bridge ${symbol(r.ws.listening)} ${r.ws.host}:${r.ws.port} — ${r.ws.detail}`);
131
+ lines.push(`${t.wsBridge} ${symbol(r.ws.listening)} ${r.ws.host}:${r.ws.port} — ${r.ws.detail}`);
67
132
  if (!r.ws.listening) {
68
- lines.push(' (the server is launched by your MCP client; open Claude Code / OpenCode to start it)');
133
+ lines.push(t.wsHint);
69
134
  }
70
135
  lines.push('');
71
- lines.push('MCP clients:');
136
+ lines.push(t.clientsHeader);
72
137
  for (const c of r.clients) {
73
138
  const status = !c.installed
74
- ? '✗ not installed'
139
+ ? t.clientNotInstalled
75
140
  : c.registered
76
- ? '✓ registered'
77
- : '⚠ installed but not registered';
78
- lines.push(` ${c.displayName.padEnd(14)} ${status}`);
79
- lines.push(` ${' '.repeat(14)} config: ${c.configPath}`);
141
+ ? t.clientRegistered
142
+ : t.clientNotRegistered;
143
+ lines.push(` ${c.displayName.padEnd(20)} ${status}`);
144
+ lines.push(` ${' '.repeat(20)} ${t.clientConfig} ${c.configPath}`);
80
145
  }
81
146
  lines.push('');
82
- lines.push('Chrome extension assets:');
147
+ lines.push(t.extensionHeader);
83
148
  if (r.extension.path) {
84
149
  lines.push(` ${symbol(true)} ${r.extension.path}`);
85
150
  }
86
151
  else {
87
- lines.push(` ${symbol(false)} not found (run \`browser-link extension\` for guidance)`);
152
+ lines.push(` ${symbol(false)} ${t.extensionNotFound}`);
88
153
  }
89
154
  lines.push('');
90
- lines.push('Map DB:');
91
- lines.push(` path: ${r.map.dbPath}`);
155
+ lines.push(t.mapHeader);
156
+ lines.push(` ${t.mapPath} ${r.map.dbPath}`);
92
157
  if (!r.map.exists) {
93
- lines.push(' (not created yet — will be initialized on first run)');
158
+ lines.push(t.mapNotCreated);
94
159
  }
95
160
  else {
96
- lines.push(` size: ${r.map.sizeBytes} bytes`);
97
- lines.push(` apps tracked: ${r.map.apps}`);
161
+ lines.push(` ${t.mapSize} ${r.map.sizeBytes} bytes`);
162
+ lines.push(` ${t.mapApps} ${r.map.apps}`);
98
163
  }
99
164
  lines.push('');
100
- lines.push('Process binding:');
165
+ lines.push(t.processBinding);
101
166
  if (r.security.allowedBrowsers.length === 0) {
102
- lines.push(` ✗ no allowlist for this OS — incoming WS connections will be rejected.`);
167
+ lines.push(t.processBindingNone);
103
168
  }
104
169
  else {
105
- lines.push(` ✓ accepts WS connections from ${r.security.allowedBrowsers.length} known browser binaries.`);
170
+ lines.push(t.processBindingOk(r.security.allowedBrowsers.length));
106
171
  lines.push(` (${r.security.allowedBrowsers.slice(0, 4).join(', ')}${r.security.allowedBrowsers.length > 4 ? ', …' : ''})`);
107
172
  }
173
+ lines.push('');
174
+ lines.push(t.multiAgentHeader);
175
+ lines.push(`${t.multiAgentMode}${r.multiAgent.enabled ? t.on : t.off}`);
176
+ lines.push(`${t.autoReelect}${r.multiAgent.autoReelect ? t.on : t.off}`);
177
+ lines.push(`${t.ipcLine}${r.ipc.listening ? t.ipcListening : t.ipcFree}`);
108
178
  return lines.join('\n');
109
179
  }
110
180
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,MAAM,OAAO,GAAG,KAAK,CAAC;AAOtB,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,SAAS,GAAG,GAAG;IAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,CAAC,SAAkB,EAAE,MAAc,EAAE,EAAE;YACpD,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,SAAS,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9F,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,EAAE,6BAA6B,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAClD,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;gBAAE,MAAM,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;;gBACnE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;QAC3C,OAAO;QACP,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QAC5B,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;QAClD,QAAQ,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,EAAW;IACzB,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAe;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,qBAAqB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CACzF,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CACR,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;YACzB,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,gCAAgC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC3F,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,mCAAmC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,0BAA0B,CAC/F,CAAC;QACF,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAClH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Language } from './welcome.js';
1
2
  /**
2
3
  * Resolve the absolute path to the Chrome extension assets.
3
4
  * Tries the npm-install layout first, then the monorepo dev layout.
@@ -8,5 +9,5 @@ export interface ExtensionInfo {
8
9
  path: string | null;
9
10
  hints: string;
10
11
  }
11
- export declare function getExtensionInfo(): ExtensionInfo;
12
- export declare function printExtensionInstructions(): void;
12
+ export declare function getExtensionInfo(language?: Language): ExtensionInfo;
13
+ export declare function printExtensionInstructions(language?: Language): void;