@jobshimo/browser-link 0.7.8 → 0.7.9

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 (49) hide show
  1. package/dist/extension/manifest.json +1 -1
  2. package/dist/ui/app.js +1 -1
  3. package/dist/ui/app.js.map +1 -1
  4. package/dist/ui/screens/about.d.ts +6 -0
  5. package/dist/ui/screens/about.js +17 -0
  6. package/dist/ui/screens/about.js.map +1 -0
  7. package/dist/ui/screens/client-picker.d.ts +8 -0
  8. package/dist/ui/screens/client-picker.js +43 -0
  9. package/dist/ui/screens/client-picker.js.map +1 -0
  10. package/dist/ui/screens/doctor.d.ts +6 -0
  11. package/dist/ui/screens/doctor.js +43 -0
  12. package/dist/ui/screens/doctor.js.map +1 -0
  13. package/dist/ui/screens/extension.d.ts +6 -0
  14. package/dist/ui/screens/extension.js +32 -0
  15. package/dist/ui/screens/extension.js.map +1 -0
  16. package/dist/ui/screens/free-port.d.ts +6 -0
  17. package/dist/ui/screens/free-port.js +83 -0
  18. package/dist/ui/screens/free-port.js.map +1 -0
  19. package/dist/ui/screens/index.d.ts +12 -0
  20. package/dist/ui/screens/index.js +13 -0
  21. package/dist/ui/screens/index.js.map +1 -0
  22. package/dist/ui/screens/install-result.d.ts +8 -0
  23. package/dist/ui/screens/install-result.js +27 -0
  24. package/dist/ui/screens/install-result.js.map +1 -0
  25. package/dist/ui/screens/language.d.ts +8 -0
  26. package/dist/ui/screens/language.js +42 -0
  27. package/dist/ui/screens/language.js.map +1 -0
  28. package/dist/ui/screens/menu.d.ts +9 -0
  29. package/dist/ui/screens/menu.js +81 -0
  30. package/dist/ui/screens/menu.js.map +1 -0
  31. package/dist/ui/screens/multi-agent.d.ts +6 -0
  32. package/dist/ui/screens/multi-agent.js +131 -0
  33. package/dist/ui/screens/multi-agent.js.map +1 -0
  34. package/dist/ui/screens/permissions.d.ts +6 -0
  35. package/dist/ui/screens/permissions.js +135 -0
  36. package/dist/ui/screens/permissions.js.map +1 -0
  37. package/dist/ui/screens/types.d.ts +4 -0
  38. package/dist/ui/screens/types.js +2 -0
  39. package/dist/ui/screens/types.js.map +1 -0
  40. package/dist/ui/screens/updates.d.ts +6 -0
  41. package/dist/ui/screens/updates.js +113 -0
  42. package/dist/ui/screens/updates.js.map +1 -0
  43. package/dist/ui/screens/welcome.d.ts +10 -0
  44. package/dist/ui/screens/welcome.js +44 -0
  45. package/dist/ui/screens/welcome.js.map +1 -0
  46. package/package.json +1 -1
  47. package/dist/ui/screens.d.ts +0 -65
  48. package/dist/ui/screens.js +0 -743
  49. package/dist/ui/screens.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "browser-link",
4
- "version": "0.7.8",
4
+ "version": "0.7.9",
5
5
  "description": "Bridge between Chrome and an MCP client (Claude Code, OpenCode, GitHub Copilot CLI, …). Per-tab manual activation.",
6
6
  "permissions": [
7
7
  "debugger",
package/dist/ui/app.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useApp, useInput } from 'ink';
3
3
  import { useState } from 'react';
4
- import { AboutView, ClientPicker, DoctorView, ExtensionView, FreePortView, InstallResultView, LanguageView, MainMenu, MultiAgentView, PermissionsView, UpdatesView, WelcomeScreen, } from './screens.js';
4
+ import { AboutView, ClientPicker, DoctorView, ExtensionView, FreePortView, InstallResultView, LanguageView, MainMenu, MultiAgentView, PermissionsView, UpdatesView, WelcomeScreen, } from './screens/index.js';
5
5
  import { saveConfig } from '../config.js';
6
6
  import { installFor } from '../commands/install.js';
7
7
  import { openUrl } from '../utils/open-url.js';
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CommonProps } from './types.js';
2
+ interface AboutViewProps extends CommonProps {
3
+ onBack: () => void;
4
+ }
5
+ export declare function AboutView({ language, onBack }: AboutViewProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { Frame } from '../components.js';
4
+ import { I18N_ABOUT } from '../../commands/about.js';
5
+ export function AboutView({ language, onBack }) {
6
+ const t = I18N_ABOUT[language];
7
+ useInput((_input, key) => {
8
+ if (key.return || key.escape)
9
+ onBack();
10
+ });
11
+ const footer = language === 'es' ? '↵ / Esc volver al menú' : '↵ / Esc back to menu';
12
+ return (_jsxs(Frame, { title: t.title, footer: footer, children: [_jsx(AboutSection, { title: t.whatTitle, body: t.what }), _jsx(AboutSection, { title: t.howTitle, body: t.how }), _jsx(AboutSection, { title: t.bindingTitle, body: t.binding }), _jsx(AboutSection, { title: t.bridgeToolsTitle, body: t.bridgeTools }), _jsx(AboutSection, { title: t.mapToolsTitle, body: t.mapTools }), _jsx(AboutSection, { title: t.privacyTitle, body: t.privacy }), _jsx(AboutSection, { title: t.helpTitle, body: t.help })] }));
13
+ }
14
+ function AboutSection({ title, body }) {
15
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: title }), _jsx(Text, { children: body })] }));
16
+ }
17
+ //# sourceMappingURL=about.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"about.js","sourceRoot":"","sources":["../../../src/ui/screens/about.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAOrD,MAAM,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAkB;IAC5D,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACrF,OAAO,CACL,MAAC,KAAK,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,aACnC,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAI,EAClD,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAI,EAChD,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,GAAI,EACxD,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,GAAI,EAChE,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,GAAI,EAC1D,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,GAAI,EACxD,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAI,IAC5C,CACT,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAmC;IACpE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,kBACpB,KAAK,GACD,EACP,KAAC,IAAI,cAAE,IAAI,GAAQ,IACf,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ClientId } from '../../installers/index.js';
2
+ import type { CommonProps } from './types.js';
3
+ interface ClientPickerProps extends CommonProps {
4
+ onPick: (id: ClientId) => void;
5
+ onBack: () => void;
6
+ }
7
+ export declare function ClientPicker({ language, onPick, onBack }: ClientPickerProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { useState } from 'react';
4
+ import { Frame, Menu } from '../components.js';
5
+ import { INSTALLERS } from '../../installers/index.js';
6
+ const PICKER_I18N = {
7
+ en: {
8
+ title: 'Register browser-link in…',
9
+ prompt: 'Which MCP client?',
10
+ footer: '↑↓ navigate · ↵ register · Esc back',
11
+ },
12
+ es: {
13
+ title: 'Registrar browser-link en…',
14
+ prompt: '¿Qué cliente MCP?',
15
+ footer: '↑↓ moverse · ↵ registrar · Esc volver',
16
+ },
17
+ };
18
+ export function ClientPicker({ language, onPick, onBack }) {
19
+ const t = PICKER_I18N[language];
20
+ const STATUS = {
21
+ en: { registered: 'registered', notRegistered: 'not registered', notDetected: 'not detected' },
22
+ es: { registered: 'registrado', notRegistered: 'no registrado', notDetected: 'no detectado' },
23
+ };
24
+ const s = STATUS[language];
25
+ const items = INSTALLERS.map((inst) => {
26
+ const d = inst.detect();
27
+ const hint = !d.installed ? s.notDetected : d.registered ? s.registered : s.notRegistered;
28
+ return { value: inst.id, label: inst.displayName, hint };
29
+ });
30
+ const [idx, setIdx] = useState(0);
31
+ useInput((input, key) => {
32
+ if (key.upArrow)
33
+ setIdx((i) => (i - 1 + items.length) % items.length);
34
+ else if (key.downArrow)
35
+ setIdx((i) => (i + 1) % items.length);
36
+ else if (key.return)
37
+ onPick(items[idx].value);
38
+ else if (input === 'q' || key.escape)
39
+ onBack();
40
+ });
41
+ return (_jsxs(Frame, { title: t.title, footer: t.footer, children: [_jsx(Text, { color: "white", bold: true, children: t.prompt }), _jsx(Box, { marginTop: 1, children: _jsx(Menu, { items: items, selectedIndex: idx }) })] }));
42
+ }
43
+ //# sourceMappingURL=client-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-picker.js","sourceRoot":"","sources":["../../../src/ui/screens/client-picker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAiB,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAiB,MAAM,2BAA2B,CAAC;AAQtE,MAAM,WAAW,GAAwE;IACvF,EAAE,EAAE;QACF,KAAK,EAAE,2BAA2B;QAClC,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,qCAAqC;KAC9C;IACD,EAAE,EAAE;QACF,KAAK,EAAE,4BAA4B;QACnC,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,uCAAuC;KAChD;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAqB;IAC1E,MAAM,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,MAAM,GAGR;QACF,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE;QAC9F,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE;KAC9F,CAAC;IACF,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAyB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1F,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;aACjE,IAAI,GAAG,CAAC,SAAS;YAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;aACzD,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;aACzC,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,KAAK,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,aACrC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBACrB,CAAC,CAAC,MAAM,GACJ,EACP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,GAAI,GACtC,IACA,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CommonProps } from './types.js';
2
+ interface DoctorViewProps extends CommonProps {
3
+ onBack: () => void;
4
+ }
5
+ export declare function DoctorView({ language, onBack }: DoctorViewProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text, useInput } from 'ink';
3
+ import { useEffect, useState } from 'react';
4
+ import { Frame } from '../components.js';
5
+ import { runDoctor, formatDoctor } from '../../commands/doctor.js';
6
+ const DOCTOR_I18N = {
7
+ en: {
8
+ title: 'Doctor — diagnose current setup',
9
+ loading: 'Diagnosing…',
10
+ refresh: 'r refresh · ↵ / Esc back to menu',
11
+ footer: '↵ / Esc back to menu',
12
+ },
13
+ es: {
14
+ title: 'Diagnóstico — estado actual de la instalación',
15
+ loading: 'Diagnosticando…',
16
+ refresh: 'r refrescar · ↵ / Esc volver al menú',
17
+ footer: '↵ / Esc volver al menú',
18
+ },
19
+ };
20
+ export function DoctorView({ language, onBack }) {
21
+ const t = DOCTOR_I18N[language];
22
+ const [output, setOutput] = useState(null);
23
+ const [refreshKey, setRefreshKey] = useState(0);
24
+ useEffect(() => {
25
+ let cancelled = false;
26
+ setOutput(null);
27
+ void runDoctor().then((r) => {
28
+ if (!cancelled)
29
+ setOutput(formatDoctor(r));
30
+ });
31
+ return () => {
32
+ cancelled = true;
33
+ };
34
+ }, [refreshKey]);
35
+ useInput((input, key) => {
36
+ if (key.return || key.escape)
37
+ onBack();
38
+ else if (input === 'r')
39
+ setRefreshKey((k) => k + 1);
40
+ });
41
+ return (_jsx(Frame, { title: t.title, footer: t.refresh, children: output === null ? _jsx(Text, { color: "gray", children: t.loading }) : _jsx(Text, { children: output }) }));
42
+ }
43
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/ui/screens/doctor.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGnE,MAAM,WAAW,GAGb;IACF,EAAE,EAAE;QACF,KAAK,EAAE,iCAAiC;QACxC,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,kCAAkC;QAC3C,MAAM,EAAE,sBAAsB;KAC/B;IACD,EAAE,EAAE;QACF,KAAK,EAAE,+CAA+C;QACtD,OAAO,EAAE,iBAAiB;QAC1B,OAAO,EAAE,sCAAsC;QAC/C,MAAM,EAAE,wBAAwB;KACjC;CACF,CAAC;AAMF,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAmB;IAC9D,MAAM,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,SAAS;gBAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;aAClC,IAAI,KAAK,KAAK,GAAG;YAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,YACrC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,CAAC,CAAC,OAAO,GAAQ,CAAC,CAAC,CAAC,KAAC,IAAI,cAAE,MAAM,GAAQ,GAC1E,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CommonProps } from './types.js';
2
+ interface ExtensionViewProps extends CommonProps {
3
+ onBack: () => void;
4
+ }
5
+ export declare function ExtensionView({ language, onBack }: ExtensionViewProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { Frame } from '../components.js';
4
+ import { getExtensionInfo } from '../../commands/extension.js';
5
+ const EXT_I18N = {
6
+ en: {
7
+ title: 'Chrome extension — install steps',
8
+ pathLabel: 'Extension assets are at:',
9
+ stepsLabel: 'Install steps:',
10
+ afterLoading: 'After loading, open the extension popup on any tab and click "Conectar" to bridge it.',
11
+ notFound: 'Extension assets not found. Run `npm run build:extension` (dev) or reinstall the package.',
12
+ footer: '↵ / Esc back to menu',
13
+ },
14
+ es: {
15
+ title: 'Extensión de Chrome — pasos de instalación',
16
+ pathLabel: 'Los assets de la extensión están en:',
17
+ stepsLabel: 'Pasos:',
18
+ afterLoading: 'Después de cargarla, abrí el popup de la extensión en cualquier pestaña y hacé click en "Conectar" para puentearla.',
19
+ notFound: 'No se encontraron los assets. Corré `npm run build:extension` (dev) o reinstalá el paquete.',
20
+ footer: '↵ / Esc volver al menú',
21
+ },
22
+ };
23
+ export function ExtensionView({ language, onBack }) {
24
+ const t = EXT_I18N[language];
25
+ const info = getExtensionInfo();
26
+ useInput((_input, key) => {
27
+ if (key.return || key.escape)
28
+ onBack();
29
+ });
30
+ return (_jsx(Frame, { title: t.title, footer: t.footer, children: info.path ? (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, children: t.pathLabel }), _jsx(Text, { color: "cyan", children: info.path }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: t.stepsLabel }), _jsx(Text, { children: info.hints })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", italic: true, children: t.afterLoading }) })] })) : (_jsx(Text, { color: "yellow", children: t.notFound })) }));
31
+ }
32
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/ui/screens/extension.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,QAAQ,GAUV;IACF,EAAE,EAAE;QACF,KAAK,EAAE,kCAAkC;QACzC,SAAS,EAAE,0BAA0B;QACrC,UAAU,EAAE,gBAAgB;QAC5B,YAAY,EACV,uFAAuF;QACzF,QAAQ,EACN,2FAA2F;QAC7F,MAAM,EAAE,sBAAsB;KAC/B;IACD,EAAE,EAAE;QACF,KAAK,EAAE,4CAA4C;QACnD,SAAS,EAAE,sCAAsC;QACjD,UAAU,EAAE,QAAQ;QACpB,YAAY,EACV,qHAAqH;QACvH,QAAQ,EACN,6FAA6F;QAC/F,MAAM,EAAE,wBAAwB;KACjC;CACF,CAAC;AAMF,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAsB;IACpE,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACX,8BACE,KAAC,IAAI,IAAC,IAAI,kBAAE,CAAC,CAAC,SAAS,GAAQ,EAC/B,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,IAAI,CAAC,IAAI,GAAQ,EACrC,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,IAAI,kBAAE,CAAC,CAAC,UAAU,GAAQ,EAChC,KAAC,IAAI,cAAE,IAAI,CAAC,KAAK,GAAQ,IACrB,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,kBACtB,CAAC,CAAC,YAAY,GACV,GACH,IACL,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,CAAC,CAAC,QAAQ,GAAQ,CACzC,GACK,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CommonProps } from './types.js';
2
+ interface FreePortViewProps extends CommonProps {
3
+ onBack: () => void;
4
+ }
5
+ export declare function FreePortView({ language, onBack }: FreePortViewProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { useState } from 'react';
4
+ import { Frame, Menu } from '../components.js';
5
+ import { runFreePort } from '../../commands/free-port.js';
6
+ const FREE_PORT_I18N = {
7
+ en: {
8
+ title: 'Free port 17529',
9
+ intro: [
10
+ 'If an MCP client (Claude / OpenCode / Copilot) was closed without',
11
+ 'shutting down browser-link cleanly, the next client crashes with',
12
+ '"port already in use". This screen finds the process holding',
13
+ '127.0.0.1:17529 and stops it.',
14
+ '',
15
+ 'Safety: only processes whose image starts with "node" are killed.',
16
+ 'Anything else is left alone with an explanation.',
17
+ ].join('\n'),
18
+ confirmPrompt: 'Stop the process holding port 17529?',
19
+ confirmYes: 'Yes — kill it',
20
+ confirmNo: 'No — back to menu',
21
+ running: 'Stopping…',
22
+ footer: '↑↓ navigate · ↵ select · Esc back',
23
+ doneFooter: '↵ / Esc back to menu',
24
+ },
25
+ es: {
26
+ title: 'Liberar puerto 17529',
27
+ intro: [
28
+ 'Si un cliente MCP (Claude / OpenCode / Copilot) cerró sin bajar',
29
+ 'browser-link de forma limpia, el próximo cliente crashea con',
30
+ '"port already in use". Esta pantalla busca el proceso que tiene',
31
+ '127.0.0.1:17529 y lo para.',
32
+ '',
33
+ 'Seguridad: sólo se matan procesos cuyo nombre empieza con "node".',
34
+ 'Cualquier otro se deja vivo con una explicación.',
35
+ ].join('\n'),
36
+ confirmPrompt: '¿Parar el proceso que tiene el puerto 17529?',
37
+ confirmYes: 'Sí — matalo',
38
+ confirmNo: 'No — volver al menú',
39
+ running: 'Parando…',
40
+ footer: '↑↓ moverse · ↵ elegir · Esc volver',
41
+ doneFooter: '↵ / Esc volver al menú',
42
+ },
43
+ };
44
+ export function FreePortView({ language, onBack }) {
45
+ const t = FREE_PORT_I18N[language];
46
+ const [phase, setPhase] = useState('confirm');
47
+ const [result, setResult] = useState(null);
48
+ const items = [
49
+ { value: 'yes', label: t.confirmYes },
50
+ { value: 'no', label: t.confirmNo },
51
+ ];
52
+ const [idx, setIdx] = useState(1);
53
+ useInput((_input, key) => {
54
+ if (phase === 'confirm') {
55
+ if (key.upArrow)
56
+ setIdx((i) => (i - 1 + items.length) % items.length);
57
+ else if (key.downArrow)
58
+ setIdx((i) => (i + 1) % items.length);
59
+ else if (key.return) {
60
+ const v = items[idx].value;
61
+ if (v === 'no')
62
+ onBack();
63
+ else {
64
+ setPhase('running');
65
+ // Defer the synchronous kill so Ink renders the "running" state.
66
+ setTimeout(() => {
67
+ const r = runFreePort(language);
68
+ setResult(r);
69
+ setPhase('done');
70
+ }, 0);
71
+ }
72
+ }
73
+ else if (key.escape)
74
+ onBack();
75
+ }
76
+ else if (phase === 'done') {
77
+ if (key.return || key.escape)
78
+ onBack();
79
+ }
80
+ });
81
+ return (_jsxs(Frame, { title: t.title, footer: phase === 'done' ? t.doneFooter : t.footer, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: t.intro }) }), phase === 'confirm' && (_jsxs(_Fragment, { children: [_jsx(Text, { color: "white", bold: true, children: t.confirmPrompt }), _jsx(Box, { marginTop: 1, children: _jsx(Menu, { items: items, selectedIndex: idx }) })] })), phase === 'running' && _jsx(Text, { color: "gray", children: t.running }), phase === 'done' && result && (_jsx(Text, { color: result.ok ? 'green' : 'yellow', children: result.message }))] }));
82
+ }
83
+ //# sourceMappingURL=free-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"free-port.js","sourceRoot":"","sources":["../../../src/ui/screens/free-port.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { WelcomeScreen } from './welcome.js';
2
+ export { MainMenu, type MenuAction } from './menu.js';
3
+ export { ClientPicker } from './client-picker.js';
4
+ export { InstallResultView } from './install-result.js';
5
+ export { ExtensionView } from './extension.js';
6
+ export { DoctorView } from './doctor.js';
7
+ export { AboutView } from './about.js';
8
+ export { PermissionsView } from './permissions.js';
9
+ export { UpdatesView } from './updates.js';
10
+ export { LanguageView } from './language.js';
11
+ export { MultiAgentView } from './multi-agent.js';
12
+ export { FreePortView } from './free-port.js';
@@ -0,0 +1,13 @@
1
+ export { WelcomeScreen } from './welcome.js';
2
+ export { MainMenu } from './menu.js';
3
+ export { ClientPicker } from './client-picker.js';
4
+ export { InstallResultView } from './install-result.js';
5
+ export { ExtensionView } from './extension.js';
6
+ export { DoctorView } from './doctor.js';
7
+ export { AboutView } from './about.js';
8
+ export { PermissionsView } from './permissions.js';
9
+ export { UpdatesView } from './updates.js';
10
+ export { LanguageView } from './language.js';
11
+ export { MultiAgentView } from './multi-agent.js';
12
+ export { FreePortView } from './free-port.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/screens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type InstallReport } from '../../commands/install.js';
2
+ import type { CommonProps } from './types.js';
3
+ interface InstallResultProps extends CommonProps {
4
+ report: InstallReport;
5
+ onBack: () => void;
6
+ }
7
+ export declare function InstallResultView({ language, report, onBack }: InstallResultProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,27 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { Frame } from '../components.js';
4
+ const RESULT_I18N = {
5
+ en: {
6
+ ok: 'Registered',
7
+ warn: 'Not registered',
8
+ hint: 'Restart the MCP client so it picks up the new entry.',
9
+ footer: '↵ / Esc back to menu',
10
+ },
11
+ es: {
12
+ ok: 'Registrado',
13
+ warn: 'No registrado',
14
+ hint: 'Reiniciá el cliente MCP para que tome la nueva entrada.',
15
+ footer: '↵ / Esc volver al menú',
16
+ },
17
+ };
18
+ export function InstallResultView({ language, report, onBack }) {
19
+ const t = RESULT_I18N[language];
20
+ useInput((_input, key) => {
21
+ if (key.return || key.escape)
22
+ onBack();
23
+ });
24
+ const ok = report.installedClient;
25
+ return (_jsxs(Frame, { title: `${report.displayName} — ${ok ? t.ok : t.warn}`, footer: t.footer, children: [_jsxs(Text, { color: ok ? 'green' : 'yellow', children: [ok ? '✓ ' : '⚠ ', report.message] }), ok && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "cyan", children: ["\u2192 ", t.hint] }) }))] }));
26
+ }
27
+ //# sourceMappingURL=install-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-result.js","sourceRoot":"","sources":["../../../src/ui/screens/install-result.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAUzC,MAAM,WAAW,GAAiF;IAChG,EAAE,EAAE;QACF,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,sDAAsD;QAC5D,MAAM,EAAE,sBAAsB;KAC/B;IACD,EAAE,EAAE;QACF,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,yDAAyD;QAC/D,MAAM,EAAE,wBAAwB;KACjC;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAsB;IAChF,MAAM,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC;IAClC,OAAO,CACL,MAAC,KAAK,IAAC,KAAK,EAAE,GAAG,MAAM,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,aAC7E,MAAC,IAAI,IAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,aACjC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAChB,MAAM,CAAC,OAAO,IACV,EACN,EAAE,IAAI,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAI,CAAC,CAAC,IAAI,IAAQ,GAChC,CACP,IACK,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Language } from '../../commands/welcome.js';
2
+ import type { CommonProps } from './types.js';
3
+ interface LanguageViewProps extends CommonProps {
4
+ onPick: (next: Language) => void;
5
+ onBack: () => void;
6
+ }
7
+ export declare function LanguageView({ language, onPick, onBack }: LanguageViewProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { useState } from 'react';
4
+ import { Frame, Menu } from '../components.js';
5
+ const LANG_I18N = {
6
+ en: {
7
+ title: 'Language — switch between English and Español',
8
+ prompt: 'Pick a language',
9
+ saved: '✓ Saved. All output will now use the selected language.',
10
+ footer: '↑↓ navigate · ↵ pick · Esc back',
11
+ },
12
+ es: {
13
+ title: 'Idioma — cambiar entre English y Español',
14
+ prompt: 'Elegí un idioma',
15
+ saved: '✓ Guardado. Todo el output va a usar el idioma elegido.',
16
+ footer: '↑↓ moverse · ↵ elegir · Esc volver',
17
+ },
18
+ };
19
+ export function LanguageView({ language, onPick, onBack }) {
20
+ const t = LANG_I18N[language];
21
+ const items = [
22
+ { value: 'en', label: 'English' },
23
+ { value: 'es', label: 'Español' },
24
+ ];
25
+ const [idx, setIdx] = useState(language === 'es' ? 1 : 0);
26
+ const [saved, setSaved] = useState(false);
27
+ useInput((_input, key) => {
28
+ if (key.upArrow)
29
+ setIdx((i) => (i - 1 + items.length) % items.length);
30
+ else if (key.downArrow)
31
+ setIdx((i) => (i + 1) % items.length);
32
+ else if (key.return) {
33
+ const next = items[idx].value;
34
+ onPick(next);
35
+ setSaved(true);
36
+ }
37
+ else if (key.escape)
38
+ onBack();
39
+ });
40
+ return (_jsxs(Frame, { title: t.title, footer: t.footer, children: [_jsx(Text, { color: "white", bold: true, children: t.prompt }), _jsx(Box, { marginTop: 1, children: _jsx(Menu, { items: items, selectedIndex: idx }) }), saved && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: t.saved }) }))] }));
41
+ }
42
+ //# sourceMappingURL=language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language.js","sourceRoot":"","sources":["../../../src/ui/screens/language.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAiB,MAAM,kBAAkB,CAAC;AAI9D,MAAM,SAAS,GAGX;IACF,EAAE,EAAE;QACF,KAAK,EAAE,+CAA+C;QACtD,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,yDAAyD;QAChE,MAAM,EAAE,iCAAiC;KAC1C;IACD,EAAE,EAAE;QACF,KAAK,EAAE,0CAA0C;QACjD,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,yDAAyD;QAChE,MAAM,EAAE,oCAAoC;KAC7C;CACF,CAAC;AAOF,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAqB;IAC1E,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAyB;QAClC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;QACjC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;KAClC,CAAC;IACF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAS,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1C,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;aACjE,IAAI,GAAG,CAAC,SAAS;YAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;aACzD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,KAAK,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,aACrC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBACrB,CAAC,CAAC,MAAM,GACJ,EACP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,GAAI,GACtC,EACL,KAAK,IAAI,CACR,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,CAAC,CAAC,KAAK,GAAQ,GAChC,CACP,IACK,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CommonProps } from './types.js';
2
+ export type MenuAction = 'register' | 'permissions' | 'multiAgent' | 'extension' | 'doctor' | 'updates' | 'freePort' | 'language' | 'welcome' | 'about' | 'repo' | 'quit';
3
+ interface MainMenuProps extends CommonProps {
4
+ onSelect: (action: MenuAction) => void;
5
+ onSwapLang: () => void;
6
+ onQuit: () => void;
7
+ }
8
+ export declare function MainMenu({ language, onSelect, onSwapLang, onQuit }: MainMenuProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { useState } from 'react';
4
+ import { Frame, Menu } from '../components.js';
5
+ const MENU_I18N = {
6
+ en: {
7
+ title: 'browser-link — setup',
8
+ prompt: 'Pick an action',
9
+ footer: '↑↓ navigate · ↵ select · l language · q quit',
10
+ options: {
11
+ register: 'Register browser-link with an MCP client',
12
+ permissions: 'Permissions — pick which MCP tools to expose',
13
+ multiAgent: 'Multi-agent — let multiple MCP clients share one bridge',
14
+ extension: 'Show Chrome extension install steps',
15
+ doctor: 'Run doctor (diagnose current setup)',
16
+ updates: 'Check for updates on npm',
17
+ freePort: 'Free port — stop a stuck browser-link holding 17529',
18
+ language: 'Language — switch between English and Español',
19
+ welcome: 'Show the welcome screen',
20
+ about: 'About / Help — what is this and how it works',
21
+ repo: 'Open the GitHub repository',
22
+ quit: 'Quit',
23
+ },
24
+ },
25
+ es: {
26
+ title: 'browser-link — configuración',
27
+ prompt: 'Elegí una acción',
28
+ footer: '↑↓ moverse · ↵ elegir · l idioma · q salir',
29
+ options: {
30
+ register: 'Registrar browser-link en un cliente MCP',
31
+ permissions: 'Permisos — elegí qué tools del MCP se exponen',
32
+ multiAgent: 'Multi-agente — varios clientes MCP comparten el mismo puente',
33
+ extension: 'Ver pasos para instalar la extensión de Chrome',
34
+ doctor: 'Diagnóstico (estado actual de la instalación)',
35
+ updates: 'Buscar actualizaciones en npm',
36
+ freePort: 'Liberar puerto — matar el browser-link colgado en 17529',
37
+ language: 'Idioma — cambiar entre English y Español',
38
+ welcome: 'Mostrar la pantalla de bienvenida',
39
+ about: 'Información / ayuda — qué es esto y cómo funciona',
40
+ repo: 'Abrir el repositorio en GitHub',
41
+ quit: 'Salir',
42
+ },
43
+ },
44
+ };
45
+ export function MainMenu({ language, onSelect, onSwapLang, onQuit }) {
46
+ const t = MENU_I18N[language];
47
+ const items = [
48
+ 'register',
49
+ 'permissions',
50
+ 'multiAgent',
51
+ 'extension',
52
+ 'doctor',
53
+ 'updates',
54
+ 'freePort',
55
+ 'language',
56
+ 'welcome',
57
+ 'about',
58
+ 'repo',
59
+ 'quit',
60
+ ].map((a) => ({ value: a, label: t.options[a] }));
61
+ const [idx, setIdx] = useState(0);
62
+ useInput((input, key) => {
63
+ if (key.upArrow)
64
+ setIdx((i) => (i - 1 + items.length) % items.length);
65
+ else if (key.downArrow)
66
+ setIdx((i) => (i + 1) % items.length);
67
+ else if (key.return) {
68
+ const v = items[idx].value;
69
+ if (v === 'quit')
70
+ onQuit();
71
+ else
72
+ onSelect(v);
73
+ }
74
+ else if (input === 'q' || key.escape)
75
+ onQuit();
76
+ else if (input === 'l')
77
+ onSwapLang();
78
+ });
79
+ return (_jsxs(Frame, { title: t.title, footer: t.footer, children: [_jsx(Text, { color: "white", bold: true, children: t.prompt }), _jsx(Box, { marginTop: 1, children: _jsx(Menu, { items: items, selectedIndex: idx }) })] }));
80
+ }
81
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/ui/screens/menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CommonProps } from './types.js';
2
+ interface MultiAgentViewProps extends CommonProps {
3
+ onBack: () => void;
4
+ }
5
+ export declare function MultiAgentView({ language, onBack }: MultiAgentViewProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};