@jobshimo/browser-link 0.8.5 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bridge/events.d.ts +3 -0
- package/dist/bridge/events.js +8 -0
- package/dist/bridge/events.js.map +1 -1
- package/dist/commands/welcome.d.ts +15 -0
- package/dist/commands/welcome.js +44 -2
- package/dist/commands/welcome.js.map +1 -1
- package/dist/extension/background.js +37 -1
- package/dist/extension/background.js.map +1 -1
- package/dist/extension/manifest.json +1 -1
- package/dist/extension/popup.d.ts +2 -1
- package/dist/extension/popup.html +128 -50
- package/dist/extension/popup.js +22 -3
- package/dist/extension/popup.js.map +1 -1
- package/dist/server.js +42 -36
- package/dist/server.js.map +1 -1
- package/dist/tools/browser-definitions.js +16 -0
- package/dist/tools/browser-definitions.js.map +1 -1
- package/dist/tools/browser-dispatch.d.ts +8 -14
- package/dist/tools/browser-dispatch.js +10 -0
- package/dist/tools/browser-dispatch.js.map +1 -1
- package/dist/tools/tab-claims.d.ts +5 -1
- package/dist/tools/tab-claims.js +17 -0
- package/dist/tools/tab-claims.js.map +1 -1
- package/dist/ui/app.js +27 -2
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/components.d.ts +15 -3
- package/dist/ui/components.js +34 -14
- package/dist/ui/components.js.map +1 -1
- package/dist/ui/primitives/badge.d.ts +11 -0
- package/dist/ui/primitives/badge.js +35 -0
- package/dist/ui/primitives/badge.js.map +1 -0
- package/dist/ui/primitives/check-row.d.ts +11 -0
- package/dist/ui/primitives/check-row.js +10 -0
- package/dist/ui/primitives/check-row.js.map +1 -0
- package/dist/ui/primitives/footer-keys.d.ts +12 -0
- package/dist/ui/primitives/footer-keys.js +11 -0
- package/dist/ui/primitives/footer-keys.js.map +1 -0
- package/dist/ui/primitives/index.d.ts +8 -0
- package/dist/ui/primitives/index.js +13 -0
- package/dist/ui/primitives/index.js.map +1 -0
- package/dist/ui/primitives/inline-spinner.d.ts +7 -0
- package/dist/ui/primitives/inline-spinner.js +23 -0
- package/dist/ui/primitives/inline-spinner.js.map +1 -0
- package/dist/ui/primitives/key-cap.d.ts +6 -0
- package/dist/ui/primitives/key-cap.js +6 -0
- package/dist/ui/primitives/key-cap.js.map +1 -0
- package/dist/ui/primitives/menu-row.d.ts +17 -0
- package/dist/ui/primitives/menu-row.js +8 -0
- package/dist/ui/primitives/menu-row.js.map +1 -0
- package/dist/ui/primitives/section-head.d.ts +11 -0
- package/dist/ui/primitives/section-head.js +7 -0
- package/dist/ui/primitives/section-head.js.map +1 -0
- package/dist/ui/primitives/status-bar.d.ts +13 -0
- package/dist/ui/primitives/status-bar.js +17 -0
- package/dist/ui/primitives/status-bar.js.map +1 -0
- package/dist/ui/screens/about.js +13 -4
- package/dist/ui/screens/about.js.map +1 -1
- package/dist/ui/screens/agent-instructions.js +53 -47
- package/dist/ui/screens/agent-instructions.js.map +1 -1
- package/dist/ui/screens/client-picker.js +64 -16
- package/dist/ui/screens/client-picker.js.map +1 -1
- package/dist/ui/screens/doctor.js +20 -7
- package/dist/ui/screens/doctor.js.map +1 -1
- package/dist/ui/screens/empty-clients.d.ts +8 -0
- package/dist/ui/screens/empty-clients.js +57 -0
- package/dist/ui/screens/empty-clients.js.map +1 -0
- package/dist/ui/screens/extension.js +25 -8
- package/dist/ui/screens/extension.js.map +1 -1
- package/dist/ui/screens/free-port.js +48 -33
- package/dist/ui/screens/free-port.js.map +1 -1
- package/dist/ui/screens/index.d.ts +2 -0
- package/dist/ui/screens/index.js +2 -0
- package/dist/ui/screens/index.js.map +1 -1
- package/dist/ui/screens/install-result.js +29 -6
- package/dist/ui/screens/install-result.js.map +1 -1
- package/dist/ui/screens/language.js +39 -18
- package/dist/ui/screens/language.js.map +1 -1
- package/dist/ui/screens/menu.js +99 -43
- package/dist/ui/screens/menu.js.map +1 -1
- package/dist/ui/screens/multi-agent.js +24 -18
- package/dist/ui/screens/multi-agent.js.map +1 -1
- package/dist/ui/screens/permissions.js +145 -33
- package/dist/ui/screens/permissions.js.map +1 -1
- package/dist/ui/screens/port-collision.d.ts +18 -0
- package/dist/ui/screens/port-collision.js +95 -0
- package/dist/ui/screens/port-collision.js.map +1 -0
- package/dist/ui/screens/updates.js +44 -21
- package/dist/ui/screens/updates.js.map +1 -1
- package/dist/ui/screens/welcome.js +56 -26
- package/dist/ui/screens/welcome.js.map +1 -1
- package/dist/ui/tokens.d.ts +37 -0
- package/dist/ui/tokens.js +58 -0
- package/dist/ui/tokens.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-bar.js","sourceRoot":"","sources":["../../../src/ui/primitives/status-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAyBtC,SAAS,UAAU,CAAC,KAAkB;IACpC,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAClD,IAAI,KAAK,KAAK,gBAAgB;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAkB;IACjD,OAAO,CACL,KAAC,GAAG,cACD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,OAAO,CACL,KAAC,GAAG,IAAiB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAC5C,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,CAAC,IAAI,GAAQ,EAC7B,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,yBAAY,EACrC,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,YAAG,IAAI,CAAC,KAAK,GAAQ,IACnD,IALC,IAAI,CAAC,IAAI,CAMb,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
package/dist/ui/screens/about.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { Frame } from '../components.js';
|
|
4
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
5
|
+
import { FooterKeys, SectionHead } from '../primitives/index.js';
|
|
4
6
|
import { I18N_ABOUT } from '../../commands/about.js';
|
|
5
7
|
export function AboutView({ language, onBack }) {
|
|
6
8
|
const t = I18N_ABOUT[language];
|
|
@@ -8,10 +10,17 @@ export function AboutView({ language, onBack }) {
|
|
|
8
10
|
if (key.return || key.escape)
|
|
9
11
|
onBack();
|
|
10
12
|
});
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
+
const footerItems = [
|
|
14
|
+
{ k: GLYPHS.enter, label: language === 'es' ? 'volver al menú' : 'back to menu' },
|
|
15
|
+
{ k: 'Esc', label: language === 'es' ? 'volver' : 'back' },
|
|
16
|
+
];
|
|
17
|
+
return (_jsxs(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: footerItems }), children: [_jsx(AboutSection, { title: t.whatTitle, body: t.what, first: true }), _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 }), _jsx(AboutSection, { title: t.authorTitle, body: t.author })] }));
|
|
13
18
|
}
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
/* `first=true` for the top section so we don't double-pad against the
|
|
20
|
+
* Frame's own marginBottom on the title row. SectionHead applies
|
|
21
|
+
* marginTop=1 unconditionally — for the very first section that becomes
|
|
22
|
+
* a no-op since the Frame already left a row of whitespace. */
|
|
23
|
+
function AboutSection({ title, body, first = false, }) {
|
|
24
|
+
return (_jsxs(Box, { flexDirection: "column", children: [first ? (_jsx(Text, { color: COLORS.heading, bold: true, children: title })) : (_jsx(SectionHead, { children: title })), _jsx(Text, { children: body })] }));
|
|
16
25
|
}
|
|
17
26
|
//# sourceMappingURL=about.js.map
|
|
@@ -1 +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;
|
|
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,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUrD,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,WAAW,GAAG;QAClB,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,EAAE;QACjF,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE;KAC3D,CAAC;IACF,OAAO,CACL,MAAC,KAAK,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAC,UAAU,IAAC,KAAK,EAAE,WAAW,GAAI,aAC/D,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,SAAG,EACxD,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,EAClD,KAAC,YAAY,IAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,GAAI,IAChD,CACT,CAAC;AACJ,CAAC;AAED;;;+DAG+D;AAC/D,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,IAAI,EACJ,KAAK,GAAG,KAAK,GAKd;IACC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,kBAC9B,KAAK,GACD,CACR,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,cAAE,KAAK,GAAe,CACnC,EACD,KAAC,IAAI,cAAE,IAAI,GAAQ,IACf,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import { Frame } from '../components.js';
|
|
5
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
6
|
+
import { Badge, FooterKeys, KeyCap } from '../primitives/index.js';
|
|
5
7
|
import { INSTRUCTIONS_INSTALLERS, } from '../../agent-instructions/index.js';
|
|
6
8
|
import { describeState, displayNameColumnWidth, installInstructionsFor, statusAll, uninstallInstructionsFor, } from '../../commands/instructions.js';
|
|
7
9
|
const I18N = {
|
|
@@ -13,19 +15,23 @@ const I18N = {
|
|
|
13
15
|
'project CLAUDE.md required. The block lists triggers ("user reports a UI',
|
|
14
16
|
'bug → call browser.snapshot first") and is rewritten in place on update.',
|
|
15
17
|
].join('\n'),
|
|
16
|
-
installPrompt: 'Pick a client to install / refresh the block.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
installPrompt: 'Pick a client to install / refresh the block.',
|
|
19
|
+
installPromptHint: 'to uninstall.',
|
|
20
|
+
installed: 'installed',
|
|
21
|
+
outdated: 'outdated',
|
|
22
|
+
notInstalled: 'not installed',
|
|
23
|
+
noFile: 'no file yet',
|
|
24
|
+
corrupt: 'corrupt (multiple blocks)',
|
|
22
25
|
legacySuffix: 'legacy',
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
doneInstall: 'Done. Restart your MCP client to pick up the new instructions.',
|
|
27
|
+
doneUninstall: 'Removed. The rest of the file was left untouched.',
|
|
28
|
+
failInstall: 'Install failed.',
|
|
29
|
+
failUninstall: 'Uninstall failed.',
|
|
30
|
+
refreshHint: 'On install: the block is refreshed in place if it already exists. The rest of the file is left untouched.',
|
|
31
|
+
footerNav: 'navigate',
|
|
32
|
+
footerInstall: 'install / refresh',
|
|
33
|
+
footerUninstall: 'uninstall',
|
|
34
|
+
footerBack: 'back',
|
|
29
35
|
},
|
|
30
36
|
es: {
|
|
31
37
|
title: 'Instrucciones del agente — browser-link en los .md globales de cada cliente',
|
|
@@ -36,49 +42,47 @@ const I18N = {
|
|
|
36
42
|
'("el usuario reporta un bug de UI → llamá a browser.snapshot primero") y',
|
|
37
43
|
'se rescribe in place al actualizar.',
|
|
38
44
|
].join('\n'),
|
|
39
|
-
installPrompt: 'Elegí un cliente para instalar / refrescar el bloque.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
installPrompt: 'Elegí un cliente para instalar / refrescar el bloque.',
|
|
46
|
+
installPromptHint: 'para desinstalar.',
|
|
47
|
+
installed: 'instalado',
|
|
48
|
+
outdated: 'desactualizado',
|
|
49
|
+
notInstalled: 'no instalado',
|
|
50
|
+
noFile: 'sin archivo todavía',
|
|
51
|
+
corrupt: 'corrupto (múltiples bloques)',
|
|
45
52
|
legacySuffix: 'legacy',
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
doneInstall: 'Listo. Reiniciá tu cliente MCP para tomar las nuevas instrucciones.',
|
|
54
|
+
doneUninstall: 'Quitado. El resto del archivo quedó intacto.',
|
|
55
|
+
failInstall: 'Falló la instalación.',
|
|
56
|
+
failUninstall: 'Falló la desinstalación.',
|
|
57
|
+
refreshHint: 'En instalar: si el bloque ya existe, se reescribe en su lugar. El resto del archivo queda intacto.',
|
|
58
|
+
footerNav: 'moverse',
|
|
59
|
+
footerInstall: 'instalar / refrescar',
|
|
60
|
+
footerUninstall: 'desinstalar',
|
|
61
|
+
footerBack: 'volver',
|
|
52
62
|
},
|
|
53
63
|
};
|
|
54
64
|
function statusBadge(state, t) {
|
|
55
65
|
switch (state.kind) {
|
|
56
|
-
case 'installed':
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
|
|
64
|
-
color: 'yellow',
|
|
65
|
-
};
|
|
66
|
+
case 'installed': {
|
|
67
|
+
const versionSuffix = state.version === null ? t.legacySuffix : `v${state.version}`;
|
|
68
|
+
return { kind: 'ok', label: `${t.installed} (${versionSuffix})` };
|
|
69
|
+
}
|
|
70
|
+
case 'installed-outdated': {
|
|
71
|
+
const versionSuffix = state.version === null ? t.legacySuffix : `v${state.version}`;
|
|
72
|
+
return { kind: 'warn', label: `${t.outdated} (${versionSuffix})` };
|
|
73
|
+
}
|
|
66
74
|
case 'not-installed':
|
|
67
|
-
return { label: t.notInstalled
|
|
75
|
+
return { kind: 'off', label: t.notInstalled };
|
|
68
76
|
case 'no-file':
|
|
69
|
-
return {
|
|
77
|
+
return { kind: 'noFile', label: t.noFile };
|
|
70
78
|
case 'corrupt':
|
|
71
|
-
return { label: t.corrupt
|
|
79
|
+
return { kind: 'warn', label: t.corrupt };
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
82
|
export function AgentInstructionsView({ language, onBack, initialCursorClient, }) {
|
|
75
83
|
const t = I18N[language];
|
|
76
84
|
const [reports, setReports] = useState(() => statusAll());
|
|
77
85
|
const items = useMemo(() => INSTRUCTIONS_INSTALLERS, []);
|
|
78
|
-
// If the caller asked us to focus a specific client, place the cursor on
|
|
79
|
-
// it; otherwise default to the first row. The lookup is done once on
|
|
80
|
-
// mount because the prop is the user's deliberate landing instruction —
|
|
81
|
-
// we should not pull the cursor away from where they navigated to next.
|
|
82
86
|
const initialIndex = useMemo(() => {
|
|
83
87
|
if (!initialCursorClient)
|
|
84
88
|
return 0;
|
|
@@ -87,13 +91,10 @@ export function AgentInstructionsView({ language, onBack, initialCursorClient, }
|
|
|
87
91
|
}, [initialCursorClient, items]);
|
|
88
92
|
const [cursor, setCursor] = useState(initialIndex);
|
|
89
93
|
const [lastAction, setLastAction] = useState(null);
|
|
90
|
-
// Refresh status when we come back from an install/uninstall round-trip.
|
|
91
94
|
useEffect(() => {
|
|
92
95
|
if (lastAction)
|
|
93
96
|
setReports(statusAll());
|
|
94
97
|
}, [lastAction]);
|
|
95
|
-
// Column width is driven by the longest displayName so adding a fourth
|
|
96
|
-
// client never requires hand-tuning a magic padEnd value in two places.
|
|
97
98
|
const nameColumnWidth = useMemo(() => displayNameColumnWidth(items.map((i) => i.displayName)), [items]);
|
|
98
99
|
const runAction = (client, action) => {
|
|
99
100
|
const report = action === 'install' ? installInstructionsFor(client) : uninstallInstructionsFor(client);
|
|
@@ -111,11 +112,16 @@ export function AgentInstructionsView({ language, onBack, initialCursorClient, }
|
|
|
111
112
|
else if (key.escape || input === 'q')
|
|
112
113
|
onBack();
|
|
113
114
|
});
|
|
114
|
-
return (_jsxs(Frame, { title: t.title, footer:
|
|
115
|
+
return (_jsxs(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
116
|
+
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: t.footerNav },
|
|
117
|
+
{ k: GLYPHS.enter, label: t.footerInstall },
|
|
118
|
+
{ k: 'u', label: t.footerUninstall },
|
|
119
|
+
{ k: 'Esc', label: t.footerBack },
|
|
120
|
+
] }), children: [_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsx(Text, { children: t.intro }) }), _jsxs(Box, { children: [_jsx(Text, { color: "white", bold: true, children: t.installPrompt }), _jsxs(Text, { color: COLORS.muted, dimColor: true, italic: true, children: [' ', "Press", ' '] }), _jsx(KeyCap, { label: "u" }), _jsxs(Text, { color: COLORS.muted, dimColor: true, italic: true, children: [' ', t.installPromptHint] })] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: items.map((inst, i) => {
|
|
115
121
|
const r = reports[i];
|
|
116
122
|
const badge = statusBadge(r.state, t);
|
|
117
123
|
const isCursor = i === cursor;
|
|
118
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: isCursor ?
|
|
119
|
-
}) }), lastAction && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: lastAction.report.ok ? (_jsxs(_Fragment, { children: [
|
|
124
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: isCursor ? COLORS.focus : COLORS.muted, children: isCursor ? `${GLYPHS.cursor} ` : ' ' }), _jsx(Text, { color: isCursor ? 'white' : COLORS.muted, bold: isCursor, children: inst.displayName.padEnd(nameColumnWidth) }), _jsx(Text, { children: " " }), _jsx(Badge, { kind: badge.kind, label: badge.label })] }), _jsx(Box, { marginLeft: 4, children: _jsx(Text, { color: COLORS.muted, dimColor: true, children: r.filePath }) })] }, inst.id));
|
|
125
|
+
}) }), lastAction && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: lastAction.report.ok ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: COLORS.success, children: [GLYPHS.success, " ", lastAction.kind === 'install' ? t.doneInstall : t.doneUninstall] }), lastAction.report.message !== undefined && lastAction.report.message !== '' && (_jsx(Text, { color: COLORS.muted, dimColor: true, children: lastAction.report.message }))] })) : (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: COLORS.error, children: [GLYPHS.error, " ", lastAction.kind === 'install' ? t.failInstall : t.failUninstall] }), lastAction.report.message !== undefined && lastAction.report.message !== '' && (_jsx(Box, { children: _jsx(Text, { color: COLORS.error, wrap: "wrap", children: lastAction.report.message }) }))] })) })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: COLORS.muted, italic: true, dimColor: true, children: [t.refreshHint, " ", describeState(reports[cursor]?.state ?? { kind: 'no-file' }, language)] }) })] }));
|
|
120
126
|
}
|
|
121
127
|
//# sourceMappingURL=agent-instructions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../../src/ui/screens/agent-instructions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../../src/ui/screens/agent-instructions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AAEnF,OAAO,EACL,uBAAuB,GAGxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,SAAS,EACT,wBAAwB,GAEzB,MAAM,gCAAgC,CAAC;AAoCxC,MAAM,IAAI,GAA4C;IACpD,EAAE,EAAE;QACF,KAAK,EAAE,uEAAuE;QAC9E,KAAK,EAAE;YACL,wEAAwE;YACxE,wEAAwE;YACxE,0EAA0E;YAC1E,0EAA0E;SAC3E,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,+CAA+C;QAC9D,iBAAiB,EAAE,eAAe;QAClC,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,2BAA2B;QACpC,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,gEAAgE;QAC7E,aAAa,EAAE,mDAAmD;QAClE,WAAW,EAAE,iBAAiB;QAC9B,aAAa,EAAE,mBAAmB;QAClC,WAAW,EACT,2GAA2G;QAC7G,SAAS,EAAE,UAAU;QACrB,aAAa,EAAE,mBAAmB;QAClC,eAAe,EAAE,WAAW;QAC5B,UAAU,EAAE,MAAM;KACnB;IACD,EAAE,EAAE;QACF,KAAK,EAAE,6EAA6E;QACpF,KAAK,EAAE;YACL,0EAA0E;YAC1E,4EAA4E;YAC5E,sEAAsE;YACtE,0EAA0E;YAC1E,qCAAqC;SACtC,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,aAAa,EAAE,uDAAuD;QACtE,iBAAiB,EAAE,mBAAmB;QACtC,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,gBAAgB;QAC1B,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,qBAAqB;QAC7B,OAAO,EAAE,8BAA8B;QACvC,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,qEAAqE;QAClF,aAAa,EAAE,8CAA8C;QAC7D,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,0BAA0B;QACzC,WAAW,EACT,oGAAoG;QACtG,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,sBAAsB;QACrC,eAAe,EAAE,aAAa;QAC9B,UAAU,EAAE,QAAQ;KACrB;CACF,CAAC;AAgBF,SAAS,WAAW,CAAC,KAAwB,EAAE,CAAwB;IACrE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACpF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,SAAS,KAAK,aAAa,GAAG,EAAE,CAAC;QACpE,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACpF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,aAAa,GAAG,EAAE,CAAC;QACrE,CAAC;QACD,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QAChD,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAID,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,EACR,MAAM,EACN,mBAAmB,GACQ;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,mBAAmB;YAAE,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,mBAAmB,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAa,IAAI,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU;YAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAC7D,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,MAAgB,EAAE,MAA+B,EAAQ,EAAE;QAC5E,MAAM,MAAM,GACV,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3F,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,OAAO;YAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;aACpE,IAAI,GAAG,CAAC,SAAS;YAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;aAC5D,IAAI,GAAG,CAAC,MAAM;YAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;aACvD,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;YAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;aAC7E,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG;YAAE,MAAM,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,KAAK,IACJ,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,MAAM,EACJ,KAAC,UAAU,IACT,KAAK,EAAE;gBACL,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;gBACvD,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE;gBAC3C,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,eAAe,EAAE;gBACpC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE;aAClC,GACD,aAGJ,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YACzC,KAAC,IAAI,cAAE,CAAC,CAAC,KAAK,GAAQ,GAClB,EACN,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBACrB,CAAC,CAAC,aAAa,GACX,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,QAAC,MAAM,mBACvC,IAAI,WAAO,GAAG,IACV,EACP,KAAC,MAAM,IAAC,KAAK,EAAC,GAAG,GAAG,EACpB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,QAAC,MAAM,mBACvC,GAAG,EACH,CAAC,CAAC,iBAAiB,IACf,IACH,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;oBACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,CAAC,KAAK,MAAM,CAAC;oBAC9B,OAAO,CACL,MAAC,GAAG,IAAe,aAAa,EAAC,QAAQ,aACvC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,YAChD,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GACjC,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,YAC3D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,GACpC,EACP,KAAC,IAAI,oBAAS,EACd,KAAC,KAAK,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,IAC3C,EACN,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,kBAChC,CAAC,CAAC,QAAQ,GACN,GACH,KAfE,IAAI,CAAC,EAAE,CAgBX,CACP,CAAC;gBACJ,CAAC,CAAC,GACE,EACL,UAAU,IAAI,CACb,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CACtB,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,aACxB,MAAM,CAAC,OAAO,OAAG,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAC5E,EACN,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,IAAI,CAC9E,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,kBAChC,UAAU,CAAC,MAAM,CAAC,OAAO,GACrB,CACR,IACA,CACJ,CAAC,CAAC,CAAC,CACF,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACtB,MAAM,CAAC,KAAK,OAAG,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAC1E,EACN,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,IAAI,CAC9E,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAC,MAAM,YACnC,UAAU,CAAC,MAAM,CAAC,OAAO,GACrB,GACH,CACP,IACG,CACP,GACG,CACP,EACD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,QAAC,QAAQ,mBACvC,CAAC,CAAC,WAAW,OAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,IAClF,GACH,IACA,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -1,43 +1,91 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import { Frame
|
|
4
|
+
import { Frame } from '../components.js';
|
|
5
|
+
import { GLYPHS } from '../tokens.js';
|
|
6
|
+
import { Badge, FooterKeys, MenuRow } from '../primitives/index.js';
|
|
5
7
|
import { INSTALLERS } from '../../installers/index.js';
|
|
6
8
|
const PICKER_I18N = {
|
|
7
9
|
en: {
|
|
8
10
|
title: 'Register browser-link in…',
|
|
9
11
|
prompt: 'Which MCP client?',
|
|
10
|
-
|
|
12
|
+
refreshHint: 'Re-running install on a registered client refreshes the entry in place.',
|
|
13
|
+
footerNav: 'navigate',
|
|
14
|
+
footerRegister: 'register',
|
|
15
|
+
footerBack: 'back',
|
|
16
|
+
registered: 'registered',
|
|
17
|
+
notRegistered: 'not registered',
|
|
18
|
+
notDetected: 'not detected',
|
|
11
19
|
},
|
|
12
20
|
es: {
|
|
13
21
|
title: 'Registrar browser-link en…',
|
|
14
22
|
prompt: '¿Qué cliente MCP?',
|
|
15
|
-
|
|
23
|
+
refreshHint: 'Volver a correr el install en un cliente registrado refresca la entrada en el lugar.',
|
|
24
|
+
footerNav: 'moverse',
|
|
25
|
+
footerRegister: 'registrar',
|
|
26
|
+
footerBack: 'volver',
|
|
27
|
+
registered: 'registrado',
|
|
28
|
+
notRegistered: 'no registrado',
|
|
29
|
+
notDetected: 'no detectado',
|
|
16
30
|
},
|
|
17
31
|
};
|
|
32
|
+
/* Hotkeys: lowercase initial of the client id, stable across languages.
|
|
33
|
+
* `claude` → c, `opencode` → o, `copilot` → p (Copilot starts with 'c'
|
|
34
|
+
* too — fall back to the second-most-distinctive letter, 'p' from
|
|
35
|
+
* "Copilot"). */
|
|
36
|
+
const HOTKEY_BY_CLIENT = {
|
|
37
|
+
claude: 'c',
|
|
38
|
+
opencode: 'o',
|
|
39
|
+
copilot: 'p',
|
|
40
|
+
};
|
|
18
41
|
export function ClientPicker({ language, onPick, onBack }) {
|
|
19
42
|
const t = PICKER_I18N[language];
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const s = STATUS[language];
|
|
25
|
-
const items = INSTALLERS.map((inst) => {
|
|
43
|
+
const [idx, setIdx] = useState(0);
|
|
44
|
+
/* Build the row payload once per render — calling detect() inside
|
|
45
|
+
* the JSX leaks a stat() into every row's diff path. */
|
|
46
|
+
const rows = INSTALLERS.map((inst) => {
|
|
26
47
|
const d = inst.detect();
|
|
27
|
-
|
|
28
|
-
|
|
48
|
+
let kind;
|
|
49
|
+
let label;
|
|
50
|
+
if (!d.installed) {
|
|
51
|
+
kind = 'off';
|
|
52
|
+
label = t.notDetected;
|
|
53
|
+
}
|
|
54
|
+
else if (d.registered) {
|
|
55
|
+
kind = 'ok';
|
|
56
|
+
label = t.registered;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
kind = 'warn';
|
|
60
|
+
label = t.notRegistered;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
id: inst.id,
|
|
64
|
+
displayName: inst.displayName,
|
|
65
|
+
hotkey: HOTKEY_BY_CLIENT[inst.id],
|
|
66
|
+
badgeKind: kind,
|
|
67
|
+
badgeLabel: label,
|
|
68
|
+
};
|
|
29
69
|
});
|
|
30
|
-
const [idx, setIdx] = useState(0);
|
|
31
70
|
useInput((input, key) => {
|
|
32
71
|
if (key.upArrow)
|
|
33
|
-
setIdx((i) => (i - 1 +
|
|
72
|
+
setIdx((i) => (i - 1 + rows.length) % rows.length);
|
|
34
73
|
else if (key.downArrow)
|
|
35
|
-
setIdx((i) => (i + 1) %
|
|
74
|
+
setIdx((i) => (i + 1) % rows.length);
|
|
36
75
|
else if (key.return)
|
|
37
|
-
onPick(
|
|
76
|
+
onPick(rows[idx].id);
|
|
38
77
|
else if (input === 'q' || key.escape)
|
|
39
78
|
onBack();
|
|
79
|
+
else {
|
|
80
|
+
const target = rows.find((r) => r.hotkey === input.toLowerCase());
|
|
81
|
+
if (target)
|
|
82
|
+
onPick(target.id);
|
|
83
|
+
}
|
|
40
84
|
});
|
|
41
|
-
return (_jsxs(Frame, { title: t.title, footer:
|
|
85
|
+
return (_jsxs(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
86
|
+
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: t.footerNav },
|
|
87
|
+
{ k: GLYPHS.enter, label: t.footerRegister },
|
|
88
|
+
{ k: 'Esc', label: t.footerBack },
|
|
89
|
+
] }), children: [_jsx(Text, { color: "white", bold: true, children: t.prompt }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: rows.map((row, i) => (_jsx(MenuRow, { selected: i === idx, hotkey: row.hotkey, label: row.displayName, badge: _jsx(Badge, { kind: row.badgeKind, label: row.badgeLabel }) }, row.id))) }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { italic: true, dimColor: true, children: t.refreshHint }) })] }));
|
|
42
90
|
}
|
|
43
91
|
//# sourceMappingURL=client-picker.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"client-picker.js","sourceRoot":"","sources":["../../../src/ui/screens/client-picker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,30 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Text, useInput } from 'ink';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
4
|
import { Frame } from '../components.js';
|
|
5
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
6
|
+
import { FooterKeys, InlineSpinner } from '../primitives/index.js';
|
|
5
7
|
import { runDoctor, formatDoctor } from '../../commands/doctor.js';
|
|
8
|
+
/* Doctor — runs `runDoctor()` and dumps the formatted output.
|
|
9
|
+
*
|
|
10
|
+
* v0.9.0: replace the plain "Diagnosing…" string with an inline spinner
|
|
11
|
+
* so the long-running check feels alive, and adopt the FooterKeys strip
|
|
12
|
+
* for the keybindings. The formatted output itself comes from
|
|
13
|
+
* `formatDoctor()` which is a pre-styled plain string — we render it
|
|
14
|
+
* as-is so the existing tests keep passing.
|
|
15
|
+
*/
|
|
6
16
|
const DOCTOR_I18N = {
|
|
7
17
|
en: {
|
|
8
18
|
title: 'Doctor — diagnose current setup',
|
|
9
19
|
loading: 'Diagnosing…',
|
|
10
|
-
|
|
11
|
-
|
|
20
|
+
refreshLabel: 'refresh',
|
|
21
|
+
backLabel: 'back to menu',
|
|
12
22
|
},
|
|
13
23
|
es: {
|
|
14
24
|
title: 'Diagnóstico — estado actual de la instalación',
|
|
15
25
|
loading: 'Diagnosticando…',
|
|
16
|
-
|
|
17
|
-
|
|
26
|
+
refreshLabel: 'refrescar',
|
|
27
|
+
backLabel: 'volver al menú',
|
|
18
28
|
},
|
|
19
29
|
};
|
|
20
30
|
export function DoctorView({ language, onBack }) {
|
|
@@ -38,6 +48,9 @@ export function DoctorView({ language, onBack }) {
|
|
|
38
48
|
else if (input === 'r')
|
|
39
49
|
setRefreshKey((k) => k + 1);
|
|
40
50
|
});
|
|
41
|
-
return (_jsx(Frame, { title: t.title, footer:
|
|
51
|
+
return (_jsx(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
52
|
+
{ k: 'r', label: t.refreshLabel },
|
|
53
|
+
{ k: GLYPHS.enter, label: t.backLabel },
|
|
54
|
+
] }), children: output === null ? (_jsxs(Box, { children: [_jsx(InlineSpinner, {}), _jsx(Text, { color: COLORS.muted, children: ` ${t.loading}` })] })) : (_jsx(Text, { children: output })) }));
|
|
42
55
|
}
|
|
43
56
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/ui/screens/doctor.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGnE;;;;;;;GAOG;AACH,MAAM,WAAW,GAGb;IACF,EAAE,EAAE;QACF,KAAK,EAAE,iCAAiC;QACxC,OAAO,EAAE,aAAa;QACtB,YAAY,EAAE,SAAS;QACvB,SAAS,EAAE,cAAc;KAC1B;IACD,EAAE,EAAE;QACF,KAAK,EAAE,+CAA+C;QACtD,OAAO,EAAE,iBAAiB;QAC1B,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE,gBAAgB;KAC5B;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,IACJ,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,MAAM,EACJ,KAAC,UAAU,IACT,KAAK,EAAE;gBACL,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE;gBACjC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;aACxC,GACD,YAGH,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CACjB,MAAC,GAAG,eACF,KAAC,aAAa,KAAG,EACjB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,IAAI,CAAC,CAAC,OAAO,EAAE,GAAQ,IAC/C,CACP,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,MAAM,GAAQ,CACtB,GACK,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CommonProps } from './types.js';
|
|
2
|
+
interface EmptyClientsViewProps extends CommonProps {
|
|
3
|
+
onRescan: () => void;
|
|
4
|
+
onOpenRepo: () => void;
|
|
5
|
+
onBack: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function EmptyClientsView({ language, onRescan, onOpenRepo, onBack, }: EmptyClientsViewProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
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 { COLORS, GLYPHS } from '../tokens.js';
|
|
5
|
+
import { FooterKeys, SectionHead } from '../primitives/index.js';
|
|
6
|
+
/* Empty clients — the "no MCP clients detected" state shown when
|
|
7
|
+
* register would otherwise have rendered an unusable picker.
|
|
8
|
+
*
|
|
9
|
+
* Design source: states.jsx → StateEmpty.
|
|
10
|
+
*
|
|
11
|
+
* Triggered when none of the supported MCP installers' `detect().installed`
|
|
12
|
+
* returns true. The screen tells the user which clients are supported
|
|
13
|
+
* and where to install them, then offers rescan / back as the only
|
|
14
|
+
* forward actions.
|
|
15
|
+
*/
|
|
16
|
+
const EMPTY_I18N = {
|
|
17
|
+
en: {
|
|
18
|
+
title: 'Register browser-link in…',
|
|
19
|
+
headline: 'No MCP clients detected on this machine.',
|
|
20
|
+
sub: 'Install one of the supported clients, then re-run browser-link.',
|
|
21
|
+
supportedHeader: 'Supported clients',
|
|
22
|
+
rescan: 'rescan',
|
|
23
|
+
openRepo: 'open repo',
|
|
24
|
+
back: 'back',
|
|
25
|
+
},
|
|
26
|
+
es: {
|
|
27
|
+
title: 'Registrar browser-link en…',
|
|
28
|
+
headline: 'No se detectó ningún cliente MCP en esta máquina.',
|
|
29
|
+
sub: 'Instalá alguno de los clientes soportados y volvé a correr browser-link.',
|
|
30
|
+
supportedHeader: 'Clientes soportados',
|
|
31
|
+
rescan: 'reescanear',
|
|
32
|
+
openRepo: 'abrir repo',
|
|
33
|
+
back: 'volver',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
const SUPPORTED = [
|
|
37
|
+
{ name: 'Claude Code', where: 'claude.ai/code' },
|
|
38
|
+
{ name: 'OpenCode', where: 'opencode.ai' },
|
|
39
|
+
{ name: 'GitHub Copilot CLI', where: 'gh extension install github/gh-copilot' },
|
|
40
|
+
];
|
|
41
|
+
export function EmptyClientsView({ language, onRescan, onOpenRepo, onBack, }) {
|
|
42
|
+
const t = EMPTY_I18N[language];
|
|
43
|
+
useInput((input, key) => {
|
|
44
|
+
if (input === 'r')
|
|
45
|
+
onRescan();
|
|
46
|
+
else if (input === 'g')
|
|
47
|
+
onOpenRepo();
|
|
48
|
+
else if (key.escape || key.return || input === 'q')
|
|
49
|
+
onBack();
|
|
50
|
+
});
|
|
51
|
+
return (_jsxs(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
52
|
+
{ k: 'r', label: t.rescan },
|
|
53
|
+
{ k: 'g', label: t.openRepo },
|
|
54
|
+
{ k: 'Esc', label: t.back },
|
|
55
|
+
] }), children: [_jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { color: COLORS.muted, children: `${GLYPHS.dot} ${GLYPHS.dot} ${GLYPHS.dot}` }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "white", bold: true, children: t.headline }) }), _jsx(Text, { color: COLORS.muted, dimColor: true, children: t.sub }), _jsx(SectionHead, { children: t.supportedHeader }), SUPPORTED.map((c) => (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { children: [_jsx(Text, { color: "white", children: `${GLYPHS.dot} ${c.name}` }), _jsx(Text, { color: COLORS.muted, children: ' ' }), _jsx(Text, { color: COLORS.primary, children: c.where })] }) }, c.name)))] }));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=empty-clients.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty-clients.js","sourceRoot":"","sources":["../../../src/ui/screens/empty-clients.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,37 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { Frame } from '../components.js';
|
|
4
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
5
|
+
import { FooterKeys, SectionHead } from '../primitives/index.js';
|
|
4
6
|
import { getExtensionInfo } from '../../commands/extension.js';
|
|
7
|
+
/* Chrome extension — install steps. v0.9.0 layout:
|
|
8
|
+
* - "Extension assets are at" → path in cyan, indented.
|
|
9
|
+
* - "Steps" header, then the existing numbered-line steps split into
|
|
10
|
+
* row-per-step rendering with cyan-bold ordinals.
|
|
11
|
+
* - Trailing italic dim note about activation, footer via FooterKeys.
|
|
12
|
+
*
|
|
13
|
+
* The actual step text is generated by `getExtensionInfo().hints` (which
|
|
14
|
+
* is already a numbered, multi-line string) — we keep that text intact
|
|
15
|
+
* and only restyle the surrounding chrome.
|
|
16
|
+
*/
|
|
5
17
|
const EXT_I18N = {
|
|
6
18
|
en: {
|
|
7
19
|
title: 'Chrome extension — install steps',
|
|
8
|
-
pathLabel: 'Extension assets are at
|
|
9
|
-
stepsLabel: '
|
|
20
|
+
pathLabel: 'Extension assets are at',
|
|
21
|
+
stepsLabel: 'Steps',
|
|
10
22
|
afterLoading: 'After loading, open the extension popup on any tab and click "Conectar" to bridge it.',
|
|
11
23
|
notFound: 'Extension assets not found. Run `npm run build:extension` (dev) or reinstall the package.',
|
|
12
|
-
|
|
24
|
+
footerBack: 'back to menu',
|
|
25
|
+
footerBackKey: 'back',
|
|
13
26
|
},
|
|
14
27
|
es: {
|
|
15
28
|
title: 'Extensión de Chrome — pasos de instalación',
|
|
16
|
-
pathLabel: 'Los assets de la extensión están en
|
|
17
|
-
stepsLabel: 'Pasos
|
|
29
|
+
pathLabel: 'Los assets de la extensión están en',
|
|
30
|
+
stepsLabel: 'Pasos',
|
|
18
31
|
afterLoading: 'Después de cargarla, abrí el popup de la extensión en cualquier pestaña y hacé click en "Conectar" para puentearla.',
|
|
19
32
|
notFound: 'No se encontraron los assets. Corré `npm run build:extension` (dev) o reinstalá el paquete.',
|
|
20
|
-
|
|
33
|
+
footerBack: 'volver al menú',
|
|
34
|
+
footerBackKey: 'volver',
|
|
21
35
|
},
|
|
22
36
|
};
|
|
23
37
|
export function ExtensionView({ language, onBack }) {
|
|
@@ -27,6 +41,9 @@ export function ExtensionView({ language, onBack }) {
|
|
|
27
41
|
if (key.return || key.escape)
|
|
28
42
|
onBack();
|
|
29
43
|
});
|
|
30
|
-
return (_jsx(Frame, { title: t.title, footer:
|
|
44
|
+
return (_jsx(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
45
|
+
{ k: GLYPHS.enter, label: t.footerBack },
|
|
46
|
+
{ k: 'Esc', label: t.footerBackKey },
|
|
47
|
+
] }), children: info.path ? (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, children: t.pathLabel }), _jsx(Box, { paddingLeft: 2, children: _jsx(Text, { color: COLORS.primary, children: info.path }) }), _jsx(SectionHead, { children: t.stepsLabel }), _jsx(Text, { children: info.hints }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { italic: true, dimColor: true, children: t.afterLoading }) })] })) : (_jsx(Text, { color: COLORS.warn, children: t.notFound })) }));
|
|
31
48
|
}
|
|
32
49
|
//# sourceMappingURL=extension.js.map
|
|
@@ -1 +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;
|
|
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;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAWV;IACF,EAAE,EAAE;QACF,KAAK,EAAE,kCAAkC;QACzC,SAAS,EAAE,yBAAyB;QACpC,UAAU,EAAE,OAAO;QACnB,YAAY,EACV,uFAAuF;QACzF,QAAQ,EACN,2FAA2F;QAC7F,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,MAAM;KACtB;IACD,EAAE,EAAE;QACF,KAAK,EAAE,4CAA4C;QACnD,SAAS,EAAE,qCAAqC;QAChD,UAAU,EAAE,OAAO;QACnB,YAAY,EACV,qHAAqH;QACvH,QAAQ,EACN,6FAA6F;QAC/F,UAAU,EAAE,gBAAgB;QAC5B,aAAa,EAAE,QAAQ;KACxB;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;IAEH,OAAO,CACL,KAAC,KAAK,IACJ,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,MAAM,EACJ,KAAC,UAAU,IACT,KAAK,EAAE;gBACL,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE;gBACxC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE;aACrC,GACD,YAGH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACX,8BACE,KAAC,IAAI,IAAC,IAAI,kBAAE,CAAC,CAAC,SAAS,GAAQ,EAC/B,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,IAAI,CAAC,IAAI,GAAQ,GAC3C,EACN,KAAC,WAAW,cAAE,CAAC,CAAC,UAAU,GAAe,EACzC,KAAC,IAAI,cAAE,IAAI,CAAC,KAAK,GAAQ,EACzB,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,MAAM,QAAC,QAAQ,kBAClB,CAAC,CAAC,YAAY,GACV,GACH,IACL,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YAAG,CAAC,CAAC,QAAQ,GAAQ,CAC9C,GACK,CACT,CAAC;AACJ,CAAC"}
|