@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
|
@@ -2,6 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { useMemo, useState } from 'react';
|
|
4
4
|
import { Frame } from '../components.js';
|
|
5
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
6
|
+
import { CheckRow, FooterKeys, SectionHead } from '../primitives/index.js';
|
|
5
7
|
import { loadConfig, saveConfig } from '../../config.js';
|
|
6
8
|
const MULTI_AGENT_I18N = {
|
|
7
9
|
en: {
|
|
@@ -19,7 +21,8 @@ const MULTI_AGENT_I18N = {
|
|
|
19
21
|
'persistent UI map.',
|
|
20
22
|
].join('\n'),
|
|
21
23
|
multiToggle: 'Enable multi-agent mode',
|
|
22
|
-
reelectHeader: 'Auto-reelect on primary close
|
|
24
|
+
reelectHeader: 'Auto-reelect on primary close',
|
|
25
|
+
reelectAdvanced: '(advanced)',
|
|
23
26
|
reelectBody: [
|
|
24
27
|
'When the primary client closes, secondary clients lose the bridge.',
|
|
25
28
|
'With auto-reelect ON, one of them takes over the primary role',
|
|
@@ -29,9 +32,13 @@ const MULTI_AGENT_I18N = {
|
|
|
29
32
|
reelectToggle: 'Auto-reelect when primary closes',
|
|
30
33
|
reelectDisabled: '(enable multi-agent first)',
|
|
31
34
|
unsaved: '* Unsaved changes — press s to save',
|
|
32
|
-
saved: '
|
|
35
|
+
saved: 'Saved.',
|
|
33
36
|
restart: 'Restart every MCP client for these changes to take effect.',
|
|
34
|
-
|
|
37
|
+
primaryBadge: ' PRIMARY ',
|
|
38
|
+
footerNav: 'navigate',
|
|
39
|
+
footerToggle: 'toggle',
|
|
40
|
+
footerSave: 'save',
|
|
41
|
+
footerBack: 'back',
|
|
35
42
|
},
|
|
36
43
|
es: {
|
|
37
44
|
title: 'Multi-agente — varios clientes MCP comparten el mismo puente',
|
|
@@ -48,7 +55,8 @@ const MULTI_AGENT_I18N = {
|
|
|
48
55
|
'y el mismo mapa persistente.',
|
|
49
56
|
].join('\n'),
|
|
50
57
|
multiToggle: 'Activar modo multi-agente',
|
|
51
|
-
reelectHeader: 'Re-elección automática al cerrar el primary
|
|
58
|
+
reelectHeader: 'Re-elección automática al cerrar el primary',
|
|
59
|
+
reelectAdvanced: '(avanzado)',
|
|
52
60
|
reelectBody: [
|
|
53
61
|
'Cuando el cliente primary cierra, los secundarios pierden el',
|
|
54
62
|
'puente. Con re-elección automática activada, uno de ellos toma el',
|
|
@@ -59,9 +67,13 @@ const MULTI_AGENT_I18N = {
|
|
|
59
67
|
reelectToggle: 'Re-elegir automáticamente al cerrar el primary',
|
|
60
68
|
reelectDisabled: '(activá primero multi-agente)',
|
|
61
69
|
unsaved: '* Cambios sin guardar — apretá s para guardar',
|
|
62
|
-
saved: '
|
|
70
|
+
saved: 'Guardado.',
|
|
63
71
|
restart: 'Reiniciá cada cliente MCP para que los cambios tengan efecto.',
|
|
64
|
-
|
|
72
|
+
primaryBadge: ' PRIMARY ',
|
|
73
|
+
footerNav: 'moverse',
|
|
74
|
+
footerToggle: 'cambiar',
|
|
75
|
+
footerSave: 'guardar',
|
|
76
|
+
footerBack: 'volver',
|
|
65
77
|
},
|
|
66
78
|
};
|
|
67
79
|
export function MultiAgentView({ language, onBack }) {
|
|
@@ -72,7 +84,6 @@ export function MultiAgentView({ language, onBack }) {
|
|
|
72
84
|
const [multi, setMulti] = useState(savedMulti);
|
|
73
85
|
const [reelect, setReelect] = useState(savedReelect);
|
|
74
86
|
const [justSaved, setJustSaved] = useState(false);
|
|
75
|
-
// Only the two toggles are navigable.
|
|
76
87
|
const [cursor, setCursor] = useState('multi');
|
|
77
88
|
const move = (dir) => {
|
|
78
89
|
setCursor((c) => {
|
|
@@ -85,15 +96,12 @@ export function MultiAgentView({ language, onBack }) {
|
|
|
85
96
|
if (cursor === 'multi') {
|
|
86
97
|
setMulti((m) => {
|
|
87
98
|
const next = !m;
|
|
88
|
-
// Turning multi off also clears the working reelect state, matching
|
|
89
|
-
// the config normalisation rule (autoReelect implies multiAgent).
|
|
90
99
|
if (!next)
|
|
91
100
|
setReelect(false);
|
|
92
101
|
return next;
|
|
93
102
|
});
|
|
94
103
|
}
|
|
95
104
|
else {
|
|
96
|
-
// Auto-reelect can only be turned on when multi is on.
|
|
97
105
|
if (!multi)
|
|
98
106
|
return;
|
|
99
107
|
setReelect((r) => !r);
|
|
@@ -119,13 +127,11 @@ export function MultiAgentView({ language, onBack }) {
|
|
|
119
127
|
onBack();
|
|
120
128
|
});
|
|
121
129
|
const unsaved = multi !== savedMulti || reelect !== savedReelect;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const reelectBox = checkbox(multi ? reelect : false, !multi);
|
|
129
|
-
return (_jsxs(Frame, { title: t.title, footer: t.footer, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: t.multiHeader }), _jsx(Text, { children: t.multiBody })] }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: cursor === 'multi' ? 'cyan' : 'gray', children: cursor === 'multi' ? '❯ ' : ' ' }), _jsxs(Text, { color: multiBox.color, children: [multiBox.mark, " "] }), _jsx(Text, { color: cursor === 'multi' ? 'white' : 'gray', bold: cursor === 'multi', children: t.multiToggle })] }), _jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: t.reelectHeader }), _jsx(Text, { children: t.reelectBody })] }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: cursor === 'reelect' ? 'cyan' : 'gray', children: cursor === 'reelect' ? '❯ ' : ' ' }), _jsxs(Text, { color: reelectBox.color, children: [reelectBox.mark, " "] }), _jsxs(Text, { color: !multi ? 'gray' : cursor === 'reelect' ? 'white' : 'gray', bold: cursor === 'reelect' && multi, children: [t.reelectToggle, !multi && (_jsxs(Text, { color: "gray", dimColor: true, children: [' ', t.reelectDisabled] }))] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [unsaved ? (_jsx(Text, { color: "yellow", children: t.unsaved })) : justSaved ? (_jsx(Text, { color: "green", children: t.saved })) : null, _jsx(Text, { color: "gray", italic: true, children: t.restart })] })] }));
|
|
130
|
+
return (_jsxs(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
131
|
+
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: t.footerNav },
|
|
132
|
+
{ k: 'Sp', label: t.footerToggle },
|
|
133
|
+
{ k: 's', label: t.footerSave },
|
|
134
|
+
{ k: 'Esc', label: t.footerBack },
|
|
135
|
+
] }), children: [_jsxs(Box, { children: [_jsx(Text, { color: COLORS.heading, bold: true, children: t.multiHeader }), savedMulti && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { inverse: true, bold: true, color: COLORS.primary, children: t.primaryBadge }) }))] }), _jsx(Text, { children: t.multiBody }), _jsx(Box, { marginTop: 1, children: _jsx(CheckRow, { selected: cursor === 'multi', on: multi, label: t.multiToggle }) }), _jsx(SectionHead, { hint: t.reelectAdvanced, children: t.reelectHeader }), _jsx(Text, { children: t.reelectBody }), _jsx(Box, { marginTop: 1, children: _jsx(CheckRow, { selected: cursor === 'reelect', on: multi ? reelect : false, dimmed: !multi, label: t.reelectToggle, hint: !multi ? t.reelectDisabled : undefined }) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [unsaved ? (_jsx(Text, { color: COLORS.warn, children: t.unsaved })) : justSaved ? (_jsxs(Text, { color: COLORS.success, children: [GLYPHS.success, " ", t.saved] })) : null, _jsx(Text, { color: COLORS.muted, italic: true, children: t.restart })] })] }));
|
|
130
136
|
}
|
|
131
137
|
//# sourceMappingURL=multi-agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-agent.js","sourceRoot":"","sources":["../../../src/ui/screens/multi-agent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"multi-agent.js","sourceRoot":"","sources":["../../../src/ui/screens/multi-agent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,32 +2,63 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { useMemo, useState } from 'react';
|
|
4
4
|
import { Frame } from '../components.js';
|
|
5
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
6
|
+
import { CheckRow, FooterKeys, KeyCap, SectionHead } from '../primitives/index.js';
|
|
5
7
|
import { loadConfig, saveConfig } from '../../config.js';
|
|
6
8
|
import { PRESETS, TOOL_CATALOGUE, sanitizeDisabledTools, } from '../../permissions.js';
|
|
9
|
+
/* Permissions — pick which MCP tools to expose.
|
|
10
|
+
*
|
|
11
|
+
* v0.9.0 layout (screens2.jsx → ScreenPermissions):
|
|
12
|
+
* - Presets as a horizontal pill row at top. The currently-cursor'd
|
|
13
|
+
* preset is rendered inverse (the "selected" pill); Enter applies it.
|
|
14
|
+
* - Tools grouped by family (Browser bridge, Persistent UI map). Each
|
|
15
|
+
* family head shows a `N / total enabled` hint.
|
|
16
|
+
* - Sticky bottom save bar when dirty — shows pending change count,
|
|
17
|
+
* `s save · d discard` keycaps, and an italic note that changes
|
|
18
|
+
* take effect on the next tool call.
|
|
19
|
+
*
|
|
20
|
+
* The change-count tracking and discard action are new — discard rolls
|
|
21
|
+
* the working `disabled` back to `savedDisabled`. Save and the existing
|
|
22
|
+
* logic stay unchanged.
|
|
23
|
+
*/
|
|
7
24
|
const PERM_I18N = {
|
|
8
25
|
en: {
|
|
9
26
|
title: 'Permissions — pick which MCP tools to expose',
|
|
10
|
-
intro: 'Apply a preset
|
|
27
|
+
intro: 'Apply a preset or toggle individual tools.',
|
|
11
28
|
presetsHeader: 'Presets',
|
|
12
29
|
bridgeHeader: 'Browser bridge',
|
|
13
30
|
mapHeader: 'Persistent UI map',
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
31
|
+
enabled: 'enabled',
|
|
32
|
+
unsavedSingle: 'Unsaved: 1 change since save',
|
|
33
|
+
unsavedMany: (n) => `Unsaved: ${n} changes since save`,
|
|
34
|
+
saved: 'Saved.',
|
|
35
|
+
restart: 'changes apply on the next tool call — no MCP client restart needed',
|
|
36
|
+
footerNav: 'navigate',
|
|
37
|
+
footerToggle: 'toggle',
|
|
38
|
+
footerApply: 'apply preset',
|
|
39
|
+
footerSave: 'save',
|
|
40
|
+
footerBack: 'back',
|
|
41
|
+
saveLabel: 'save',
|
|
42
|
+
discardLabel: 'discard',
|
|
19
43
|
},
|
|
20
44
|
es: {
|
|
21
45
|
title: 'Permisos — elegí qué tools del MCP se exponen',
|
|
22
|
-
intro: 'Aplicá un preset
|
|
46
|
+
intro: 'Aplicá un preset o cambiá tools individuales.',
|
|
23
47
|
presetsHeader: 'Presets',
|
|
24
48
|
bridgeHeader: 'Bridge del browser',
|
|
25
49
|
mapHeader: 'Mapa persistente',
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
50
|
+
enabled: 'activos',
|
|
51
|
+
unsavedSingle: '* 1 cambio sin guardar',
|
|
52
|
+
unsavedMany: (n) => `* ${n} cambios sin guardar`,
|
|
53
|
+
saved: 'Guardado.',
|
|
54
|
+
restart: 'los cambios tienen efecto en la próxima llamada — no hace falta reiniciar el cliente MCP',
|
|
55
|
+
footerNav: 'moverse',
|
|
56
|
+
footerToggle: 'cambiar',
|
|
57
|
+
footerApply: 'aplicar preset',
|
|
58
|
+
footerSave: 'guardar',
|
|
59
|
+
footerBack: 'volver',
|
|
60
|
+
saveLabel: 'guardar',
|
|
61
|
+
discardLabel: 'descartar',
|
|
31
62
|
},
|
|
32
63
|
};
|
|
33
64
|
function setsDiffer(a, b) {
|
|
@@ -38,12 +69,25 @@ function setsDiffer(a, b) {
|
|
|
38
69
|
return true;
|
|
39
70
|
return false;
|
|
40
71
|
}
|
|
72
|
+
function diffSize(a, b) {
|
|
73
|
+
let n = 0;
|
|
74
|
+
for (const x of a)
|
|
75
|
+
if (!b.has(x))
|
|
76
|
+
n += 1;
|
|
77
|
+
for (const x of b)
|
|
78
|
+
if (!a.has(x))
|
|
79
|
+
n += 1;
|
|
80
|
+
return n;
|
|
81
|
+
}
|
|
41
82
|
export function PermissionsView({ language, onBack }) {
|
|
42
83
|
const t = PERM_I18N[language];
|
|
84
|
+
/* Row order:
|
|
85
|
+
* 1 preset row (horizontal pills, single navigable row)
|
|
86
|
+
* 1 bridge header, then bridge tools
|
|
87
|
+
* 1 map header, then map tools
|
|
88
|
+
*/
|
|
43
89
|
const rows = useMemo(() => {
|
|
44
|
-
const r = [];
|
|
45
|
-
for (const preset of PRESETS)
|
|
46
|
-
r.push({ kind: 'preset', preset });
|
|
90
|
+
const r = [{ kind: 'preset' }];
|
|
47
91
|
r.push({ kind: 'header', family: 'bridge' });
|
|
48
92
|
for (const tool of TOOL_CATALOGUE) {
|
|
49
93
|
if (tool.family === 'bridge')
|
|
@@ -61,6 +105,7 @@ export function PermissionsView({ language, onBack }) {
|
|
|
61
105
|
const [disabled, setDisabled] = useState(initial);
|
|
62
106
|
const firstNonHeader = rows.findIndex((r) => r.kind !== 'header');
|
|
63
107
|
const [cursor, setCursor] = useState(firstNonHeader);
|
|
108
|
+
const [presetCursor, setPresetCursor] = useState(0);
|
|
64
109
|
const [justSaved, setJustSaved] = useState(false);
|
|
65
110
|
const move = (dir) => {
|
|
66
111
|
setCursor((idx) => {
|
|
@@ -73,6 +118,12 @@ export function PermissionsView({ language, onBack }) {
|
|
|
73
118
|
return idx;
|
|
74
119
|
});
|
|
75
120
|
};
|
|
121
|
+
/* When the cursor is on a preset row, left/right arrows move between
|
|
122
|
+
* pills instead of bumping to the next row. We compute that adjacency
|
|
123
|
+
* here so the handler stays linear. */
|
|
124
|
+
const movePreset = (dir) => {
|
|
125
|
+
setPresetCursor((i) => (i + dir + PRESETS.length) % PRESETS.length);
|
|
126
|
+
};
|
|
76
127
|
const toggleTool = (name) => {
|
|
77
128
|
setDisabled((prev) => {
|
|
78
129
|
const next = new Set(prev);
|
|
@@ -94,11 +145,23 @@ export function PermissionsView({ language, onBack }) {
|
|
|
94
145
|
setSavedDisabled(new Set(list));
|
|
95
146
|
setJustSaved(true);
|
|
96
147
|
};
|
|
148
|
+
const discard = () => {
|
|
149
|
+
setDisabled(new Set(savedDisabled));
|
|
150
|
+
setJustSaved(false);
|
|
151
|
+
};
|
|
97
152
|
useInput((input, key) => {
|
|
98
153
|
if (key.upArrow)
|
|
99
154
|
move(-1);
|
|
100
155
|
else if (key.downArrow)
|
|
101
156
|
move(1);
|
|
157
|
+
else if (key.leftArrow) {
|
|
158
|
+
if (rows[cursor].kind === 'preset')
|
|
159
|
+
movePreset(-1);
|
|
160
|
+
}
|
|
161
|
+
else if (key.rightArrow) {
|
|
162
|
+
if (rows[cursor].kind === 'preset')
|
|
163
|
+
movePreset(1);
|
|
164
|
+
}
|
|
102
165
|
else if (input === ' ') {
|
|
103
166
|
const row = rows[cursor];
|
|
104
167
|
if (row.kind === 'tool')
|
|
@@ -107,29 +170,78 @@ export function PermissionsView({ language, onBack }) {
|
|
|
107
170
|
else if (key.return) {
|
|
108
171
|
const row = rows[cursor];
|
|
109
172
|
if (row.kind === 'preset')
|
|
110
|
-
applyPreset(
|
|
173
|
+
applyPreset(PRESETS[presetCursor]);
|
|
111
174
|
}
|
|
112
|
-
else if (input === 's' || input === 'S')
|
|
175
|
+
else if (input === 's' || input === 'S')
|
|
113
176
|
save();
|
|
114
|
-
|
|
177
|
+
else if (input === 'd' || input === 'D')
|
|
178
|
+
discard();
|
|
115
179
|
else if (input === 'q' || key.escape)
|
|
116
180
|
onBack();
|
|
117
181
|
});
|
|
118
182
|
const unsaved = setsDiffer(disabled, savedDisabled);
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
183
|
+
const changeCount = diffSize(disabled, savedDisabled);
|
|
184
|
+
/* Per-family "N / total enabled" hint for the SectionHead. We compute
|
|
185
|
+
* once per render so each family row reads from a single source. */
|
|
186
|
+
const familyCounts = useMemo(() => {
|
|
187
|
+
let bridgeTotal = 0;
|
|
188
|
+
let bridgeEnabled = 0;
|
|
189
|
+
let mapTotal = 0;
|
|
190
|
+
let mapEnabled = 0;
|
|
191
|
+
for (const tool of TOOL_CATALOGUE) {
|
|
192
|
+
if (tool.family === 'bridge') {
|
|
193
|
+
bridgeTotal += 1;
|
|
194
|
+
if (!disabled.has(tool.name))
|
|
195
|
+
bridgeEnabled += 1;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
mapTotal += 1;
|
|
199
|
+
if (!disabled.has(tool.name))
|
|
200
|
+
mapEnabled += 1;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return { bridgeTotal, bridgeEnabled, mapTotal, mapEnabled };
|
|
204
|
+
}, [disabled]);
|
|
205
|
+
return (_jsxs(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: [
|
|
206
|
+
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: t.footerNav },
|
|
207
|
+
{ k: 'Sp', label: t.footerToggle },
|
|
208
|
+
{ k: GLYPHS.enter, label: t.footerApply },
|
|
209
|
+
{ k: 's', label: t.footerSave },
|
|
210
|
+
{ k: 'Esc', label: t.footerBack },
|
|
211
|
+
] }), children: [_jsx(Text, { children: t.intro }), _jsx(SectionHead, { children: t.presetsHeader }), _jsx(PresetPills, { presets: PRESETS, activeIndex: presetCursor, cursorOnPresetRow: rows[cursor].kind === 'preset' }), _jsx(SectionHead, { hint: `${familyCounts.bridgeEnabled} / ${familyCounts.bridgeTotal} ${t.enabled}`, children: t.bridgeHeader }), rows.map((row, i) => {
|
|
212
|
+
if (row.kind !== 'tool' || row.tool.family !== 'bridge')
|
|
213
|
+
return null;
|
|
214
|
+
return (_jsx(CheckRow, { selected: i === cursor, on: !disabled.has(row.tool.name), label: row.tool.name, hint: row.tool.summary }, `bridge-${row.tool.name}`));
|
|
215
|
+
}), _jsx(SectionHead, { hint: `${familyCounts.mapEnabled} / ${familyCounts.mapTotal} ${t.enabled}`, children: t.mapHeader }), rows.map((row, i) => {
|
|
216
|
+
if (row.kind !== 'tool' || row.tool.family !== 'map')
|
|
217
|
+
return null;
|
|
218
|
+
return (_jsx(CheckRow, { selected: i === cursor, on: !disabled.has(row.tool.name), label: row.tool.name, hint: row.tool.summary }, `map-${row.tool.name}`));
|
|
219
|
+
}), _jsx(Box, { marginTop: 1, flexDirection: "column", children: unsaved ? (_jsx(SaveBar, { count: changeCount, unsavedLabel: changeCount === 1 ? t.unsavedSingle : t.unsavedMany(changeCount), saveLabel: t.saveLabel, discardLabel: t.discardLabel, restart: t.restart })) : justSaved ? (_jsxs(Text, { color: COLORS.success, children: [GLYPHS.success, " ", t.saved] })) : null })] }));
|
|
220
|
+
}
|
|
221
|
+
/* Horizontal preset pills. The currently-cursored preset is inverted;
|
|
222
|
+
* the rest render in muted gray. We do NOT render a vertical cursor
|
|
223
|
+
* here — the cursor IS the inverted pill. The screen's main cursor only
|
|
224
|
+
* lands on the preset row as a whole; left/right move between pills. */
|
|
225
|
+
function PresetPills({ presets, activeIndex, cursorOnPresetRow, }) {
|
|
226
|
+
/* When the cursor is on the preset row, the active pill renders
|
|
227
|
+
* inverse + bold (it's the focus target). When the cursor is somewhere
|
|
228
|
+
* else, no pill is inverted — we still highlight the most-recently
|
|
229
|
+
* selected pill in cyan so the user remembers which preset is "set". */
|
|
230
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: cursorOnPresetRow ? COLORS.focus : COLORS.muted, children: cursorOnPresetRow ? `${GLYPHS.cursor} ` : ' ' }), presets.map((preset, i) => {
|
|
231
|
+
const isActive = i === activeIndex;
|
|
232
|
+
const last = i === presets.length - 1;
|
|
233
|
+
if (isActive && cursorOnPresetRow) {
|
|
234
|
+
return (_jsxs(Box, { children: [_jsx(Text, { inverse: true, bold: true, children: ` ${preset.label} ` }), !last && _jsx(Text, { color: COLORS.muted, children: ' ' })] }, preset.id));
|
|
235
|
+
}
|
|
236
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: isActive ? COLORS.primary : COLORS.muted, children: [" ", preset.label, " "] }), !last && _jsx(Text, { color: COLORS.muted, children: ' ' })] }, preset.id));
|
|
237
|
+
})] }));
|
|
238
|
+
}
|
|
239
|
+
/* Sticky-feeling save bar — a one-row inverted strip plus keycaps for
|
|
240
|
+
* save / discard plus an italic dim suffix explaining the effect. Lives
|
|
241
|
+
* inline under the catalogue (Ink doesn't have a true fixed-position
|
|
242
|
+
* primitive, but the visual weight of the inverse strip reads as
|
|
243
|
+
* "actionable" against the calmer rows above). */
|
|
244
|
+
function SaveBar({ count: _count, unsavedLabel, saveLabel, discardLabel, restart, }) {
|
|
245
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: COLORS.warn, children: unsavedLabel }), _jsxs(Box, { marginTop: 1, children: [_jsx(KeyCap, { label: "s" }), _jsxs(Text, { color: COLORS.muted, children: [" ", saveLabel] }), _jsx(Text, { color: COLORS.muted, dimColor: true, children: ` ${GLYPHS.dot} ` }), _jsx(KeyCap, { label: "d" }), _jsxs(Text, { color: COLORS.muted, children: [" ", discardLabel] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: COLORS.muted, italic: true, dimColor: true, children: restart }) })] }));
|
|
134
246
|
}
|
|
135
247
|
//# sourceMappingURL=permissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/ui/screens/permissions.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/ui/screens/permissions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CommonProps } from './types.js';
|
|
2
|
+
interface PortCollisionInfo {
|
|
3
|
+
/** PID currently holding 127.0.0.1:17529. null when the lookup failed
|
|
4
|
+
* (we still show the screen — the headline still applies). */
|
|
5
|
+
pid: number | null;
|
|
6
|
+
/** Best-effort image or command line of the holder. null when we
|
|
7
|
+
* couldn't extract it. */
|
|
8
|
+
cmdline: string | null;
|
|
9
|
+
}
|
|
10
|
+
interface PortCollisionViewProps extends CommonProps {
|
|
11
|
+
info: PortCollisionInfo;
|
|
12
|
+
onKill?: () => void;
|
|
13
|
+
onMultiAgent?: () => void;
|
|
14
|
+
onRetry?: () => void;
|
|
15
|
+
onQuit: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function PortCollisionView({ language, info, onKill, onMultiAgent, onRetry, onQuit, }: PortCollisionViewProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export type { PortCollisionInfo };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Frame } from '../components.js';
|
|
5
|
+
import { COLORS, GLYPHS } from '../tokens.js';
|
|
6
|
+
import { FooterKeys, MenuRow, SectionHead } from '../primitives/index.js';
|
|
7
|
+
const PORT_I18N = {
|
|
8
|
+
en: {
|
|
9
|
+
title: 'Port 17529 is already in use',
|
|
10
|
+
body1: 'browser-link could not bind 127.0.0.1:17529.',
|
|
11
|
+
body2: "Another process is already holding it — usually a previous instance that didn't shut down cleanly.",
|
|
12
|
+
processHeader: 'Process holding the port',
|
|
13
|
+
fixHeader: 'Fix paths',
|
|
14
|
+
kill: 'Kill the stuck process',
|
|
15
|
+
killHint: 'safe — only node processes',
|
|
16
|
+
multi: 'Switch to multi-agent mode',
|
|
17
|
+
multiHint: 'run alongside, proxy to the holder',
|
|
18
|
+
retry: 'Retry — check again',
|
|
19
|
+
quit: 'Quit',
|
|
20
|
+
why1: 'Why this happens: an MCP client crash leaves the bridge orphaned.',
|
|
21
|
+
why2: 'Multi-agent mode prevents this by allowing parallel clients.',
|
|
22
|
+
footerNav: 'navigate',
|
|
23
|
+
footerSelect: 'select',
|
|
24
|
+
footerQuit: 'quit',
|
|
25
|
+
},
|
|
26
|
+
es: {
|
|
27
|
+
title: 'El puerto 17529 ya está en uso',
|
|
28
|
+
body1: 'browser-link no pudo bindear 127.0.0.1:17529.',
|
|
29
|
+
body2: 'Otro proceso lo tiene tomado — normalmente una instancia anterior que no cerró bien.',
|
|
30
|
+
processHeader: 'Proceso que tiene el puerto',
|
|
31
|
+
fixHeader: 'Cómo arreglarlo',
|
|
32
|
+
kill: 'Matar el proceso colgado',
|
|
33
|
+
killHint: 'seguro — sólo procesos node',
|
|
34
|
+
multi: 'Pasar a modo multi-agente',
|
|
35
|
+
multiHint: 'corré en paralelo, hacé proxy al que lo tiene',
|
|
36
|
+
retry: 'Reintentar — chequear de nuevo',
|
|
37
|
+
quit: 'Salir',
|
|
38
|
+
why1: 'Por qué pasa: un crash de un cliente MCP deja el puente huérfano.',
|
|
39
|
+
why2: 'Multi-agente evita esto permitiendo clientes en paralelo.',
|
|
40
|
+
footerNav: 'moverse',
|
|
41
|
+
footerSelect: 'elegir',
|
|
42
|
+
footerQuit: 'salir',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export function PortCollisionView({ language, info, onKill, onMultiAgent, onRetry, onQuit, }) {
|
|
46
|
+
const t = PORT_I18N[language];
|
|
47
|
+
const rows = [
|
|
48
|
+
{ value: 'kill', hotkey: 'k', label: t.kill, hint: t.killHint, enabled: onKill !== undefined },
|
|
49
|
+
{
|
|
50
|
+
value: 'multi',
|
|
51
|
+
hotkey: 'm',
|
|
52
|
+
label: t.multi,
|
|
53
|
+
hint: t.multiHint,
|
|
54
|
+
enabled: onMultiAgent !== undefined,
|
|
55
|
+
},
|
|
56
|
+
{ value: 'retry', hotkey: 'r', label: t.retry, enabled: onRetry !== undefined },
|
|
57
|
+
{ value: 'quit', hotkey: 'q', label: t.quit, enabled: true },
|
|
58
|
+
];
|
|
59
|
+
const [idx, setIdx] = useState(0);
|
|
60
|
+
const fire = (value) => {
|
|
61
|
+
if (value === 'kill')
|
|
62
|
+
onKill?.();
|
|
63
|
+
else if (value === 'multi')
|
|
64
|
+
onMultiAgent?.();
|
|
65
|
+
else if (value === 'retry')
|
|
66
|
+
onRetry?.();
|
|
67
|
+
else
|
|
68
|
+
onQuit();
|
|
69
|
+
};
|
|
70
|
+
useInput((input, key) => {
|
|
71
|
+
if (key.upArrow)
|
|
72
|
+
setIdx((i) => (i - 1 + rows.length) % rows.length);
|
|
73
|
+
else if (key.downArrow)
|
|
74
|
+
setIdx((i) => (i + 1) % rows.length);
|
|
75
|
+
else if (key.return) {
|
|
76
|
+
const row = rows[idx];
|
|
77
|
+
if (row.enabled)
|
|
78
|
+
fire(row.value);
|
|
79
|
+
}
|
|
80
|
+
else if (input === 'q' || key.escape)
|
|
81
|
+
onQuit();
|
|
82
|
+
else {
|
|
83
|
+
const target = rows.find((r) => r.hotkey === input.toLowerCase() && r.enabled);
|
|
84
|
+
if (target)
|
|
85
|
+
fire(target.value);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
const titleNode = (_jsxs(Text, { children: [_jsx(Text, { color: COLORS.error, bold: true, children: GLYPHS.error }), _jsx(Text, { children: ' ' }), _jsx(Text, { color: COLORS.heading, bold: true, children: t.title })] }));
|
|
89
|
+
return (_jsxs(Frame, { title: titleNode, borderColor: COLORS.error, footer: _jsx(FooterKeys, { items: [
|
|
90
|
+
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: t.footerNav },
|
|
91
|
+
{ k: GLYPHS.enter, label: t.footerSelect },
|
|
92
|
+
{ k: 'q', label: t.footerQuit },
|
|
93
|
+
] }), children: [_jsx(Text, { children: t.body1 }), _jsx(Text, { children: t.body2 }), _jsx(SectionHead, { children: t.processHeader }), _jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { children: [_jsx(Text, { children: "PID " }), _jsx(Text, { bold: true, children: info.pid ?? 'unknown' }), info.cmdline !== null && (_jsxs(_Fragment, { children: [_jsx(Text, { color: COLORS.muted, children: ` ${GLYPHS.dot} ` }), _jsx(Text, { color: COLORS.primary, children: info.cmdline })] }))] }) }), _jsx(SectionHead, { children: t.fixHeader }), _jsx(Box, { flexDirection: "column", children: rows.map((row, i) => (_jsx(Box, { children: row.enabled ? (_jsx(MenuRow, { selected: i === idx, hotkey: row.hotkey, label: row.label, hint: row.hint })) : (_jsxs(Box, { children: [_jsx(Text, { color: COLORS.muted, children: " " }), _jsx(Text, { color: COLORS.muted, children: "[" }), _jsx(Text, { color: COLORS.muted, children: row.hotkey }), _jsx(Text, { color: COLORS.muted, children: "] " }), _jsx(Text, { color: COLORS.muted, dimColor: true, children: row.label }), row.hint !== undefined && (_jsxs(Text, { color: COLORS.muted, dimColor: true, children: [' ', row.hint] }))] })) }, row.value))) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: COLORS.muted, italic: true, dimColor: true, children: t.why1 }), _jsx(Text, { color: COLORS.muted, italic: true, dimColor: true, children: t.why2 })] })] }));
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=port-collision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-collision.js","sourceRoot":"","sources":["../../../src/ui/screens/port-collision.tsx"],"names":[],"mappings":"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"}
|