@jobshimo/browser-link 0.8.2 → 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.
Files changed (116) hide show
  1. package/dist/agent-instructions/content.js +42 -27
  2. package/dist/agent-instructions/content.js.map +1 -1
  3. package/dist/agent-instructions/file-ops.js +7 -2
  4. package/dist/agent-instructions/file-ops.js.map +1 -1
  5. package/dist/bridge/events.d.ts +3 -0
  6. package/dist/bridge/events.js +8 -0
  7. package/dist/bridge/events.js.map +1 -1
  8. package/dist/commands/doctor.js +30 -1
  9. package/dist/commands/doctor.js.map +1 -1
  10. package/dist/commands/update-check.d.ts +25 -0
  11. package/dist/commands/update-check.js +108 -0
  12. package/dist/commands/update-check.js.map +1 -0
  13. package/dist/commands/welcome.d.ts +15 -0
  14. package/dist/commands/welcome.js +44 -2
  15. package/dist/commands/welcome.js.map +1 -1
  16. package/dist/extension/background.js +37 -1
  17. package/dist/extension/background.js.map +1 -1
  18. package/dist/extension/manifest.json +1 -1
  19. package/dist/extension/popup.d.ts +2 -1
  20. package/dist/extension/popup.html +128 -50
  21. package/dist/extension/popup.js +22 -3
  22. package/dist/extension/popup.js.map +1 -1
  23. package/dist/map/tools.d.ts +1 -5
  24. package/dist/map/tools.js +45 -0
  25. package/dist/map/tools.js.map +1 -1
  26. package/dist/server.js +42 -36
  27. package/dist/server.js.map +1 -1
  28. package/dist/tools/browser-definitions.d.ts +6 -0
  29. package/dist/tools/browser-definitions.js +150 -0
  30. package/dist/tools/browser-definitions.js.map +1 -1
  31. package/dist/tools/browser-dispatch.d.ts +8 -14
  32. package/dist/tools/browser-dispatch.js +10 -0
  33. package/dist/tools/browser-dispatch.js.map +1 -1
  34. package/dist/tools/server-instructions.d.ts +16 -2
  35. package/dist/tools/server-instructions.js +87 -68
  36. package/dist/tools/server-instructions.js.map +1 -1
  37. package/dist/tools/tab-claims.d.ts +5 -1
  38. package/dist/tools/tab-claims.js +17 -0
  39. package/dist/tools/tab-claims.js.map +1 -1
  40. package/dist/tools/types.d.ts +26 -1
  41. package/dist/ui/app.js +40 -5
  42. package/dist/ui/app.js.map +1 -1
  43. package/dist/ui/components.d.ts +15 -3
  44. package/dist/ui/components.js +34 -14
  45. package/dist/ui/components.js.map +1 -1
  46. package/dist/ui/hooks/use-update-check.d.ts +16 -0
  47. package/dist/ui/hooks/use-update-check.js +48 -0
  48. package/dist/ui/hooks/use-update-check.js.map +1 -0
  49. package/dist/ui/primitives/badge.d.ts +11 -0
  50. package/dist/ui/primitives/badge.js +35 -0
  51. package/dist/ui/primitives/badge.js.map +1 -0
  52. package/dist/ui/primitives/check-row.d.ts +11 -0
  53. package/dist/ui/primitives/check-row.js +10 -0
  54. package/dist/ui/primitives/check-row.js.map +1 -0
  55. package/dist/ui/primitives/footer-keys.d.ts +12 -0
  56. package/dist/ui/primitives/footer-keys.js +11 -0
  57. package/dist/ui/primitives/footer-keys.js.map +1 -0
  58. package/dist/ui/primitives/index.d.ts +8 -0
  59. package/dist/ui/primitives/index.js +13 -0
  60. package/dist/ui/primitives/index.js.map +1 -0
  61. package/dist/ui/primitives/inline-spinner.d.ts +7 -0
  62. package/dist/ui/primitives/inline-spinner.js +23 -0
  63. package/dist/ui/primitives/inline-spinner.js.map +1 -0
  64. package/dist/ui/primitives/key-cap.d.ts +6 -0
  65. package/dist/ui/primitives/key-cap.js +6 -0
  66. package/dist/ui/primitives/key-cap.js.map +1 -0
  67. package/dist/ui/primitives/menu-row.d.ts +17 -0
  68. package/dist/ui/primitives/menu-row.js +8 -0
  69. package/dist/ui/primitives/menu-row.js.map +1 -0
  70. package/dist/ui/primitives/section-head.d.ts +11 -0
  71. package/dist/ui/primitives/section-head.js +7 -0
  72. package/dist/ui/primitives/section-head.js.map +1 -0
  73. package/dist/ui/primitives/status-bar.d.ts +13 -0
  74. package/dist/ui/primitives/status-bar.js +17 -0
  75. package/dist/ui/primitives/status-bar.js.map +1 -0
  76. package/dist/ui/screens/about.js +13 -4
  77. package/dist/ui/screens/about.js.map +1 -1
  78. package/dist/ui/screens/agent-instructions.d.ts +7 -1
  79. package/dist/ui/screens/agent-instructions.js +62 -46
  80. package/dist/ui/screens/agent-instructions.js.map +1 -1
  81. package/dist/ui/screens/client-picker.js +64 -16
  82. package/dist/ui/screens/client-picker.js.map +1 -1
  83. package/dist/ui/screens/doctor.js +20 -7
  84. package/dist/ui/screens/doctor.js.map +1 -1
  85. package/dist/ui/screens/empty-clients.d.ts +8 -0
  86. package/dist/ui/screens/empty-clients.js +57 -0
  87. package/dist/ui/screens/empty-clients.js.map +1 -0
  88. package/dist/ui/screens/extension.js +25 -8
  89. package/dist/ui/screens/extension.js.map +1 -1
  90. package/dist/ui/screens/free-port.js +48 -33
  91. package/dist/ui/screens/free-port.js.map +1 -1
  92. package/dist/ui/screens/index.d.ts +2 -0
  93. package/dist/ui/screens/index.js +2 -0
  94. package/dist/ui/screens/index.js.map +1 -1
  95. package/dist/ui/screens/install-result.js +29 -6
  96. package/dist/ui/screens/install-result.js.map +1 -1
  97. package/dist/ui/screens/language.js +39 -18
  98. package/dist/ui/screens/language.js.map +1 -1
  99. package/dist/ui/screens/menu.d.ts +10 -1
  100. package/dist/ui/screens/menu.js +118 -30
  101. package/dist/ui/screens/menu.js.map +1 -1
  102. package/dist/ui/screens/multi-agent.js +24 -18
  103. package/dist/ui/screens/multi-agent.js.map +1 -1
  104. package/dist/ui/screens/permissions.js +145 -33
  105. package/dist/ui/screens/permissions.js.map +1 -1
  106. package/dist/ui/screens/port-collision.d.ts +18 -0
  107. package/dist/ui/screens/port-collision.js +95 -0
  108. package/dist/ui/screens/port-collision.js.map +1 -0
  109. package/dist/ui/screens/updates.js +44 -21
  110. package/dist/ui/screens/updates.js.map +1 -1
  111. package/dist/ui/screens/welcome.js +56 -26
  112. package/dist/ui/screens/welcome.js.map +1 -1
  113. package/dist/ui/tokens.d.ts +37 -0
  114. package/dist/ui/tokens.js +58 -0
  115. package/dist/ui/tokens.js.map +1 -0
  116. package/package.json +1 -1
@@ -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 (↵) or toggle individual tools (Space). Press s to save.',
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
- applyPrefix: 'Apply: ',
15
- unsaved: '* Unsaved changes press s to save',
16
- saved: '✓ Saved.',
17
- restart: 'Changes take effect on the next tool call — no MCP client restart needed.',
18
- footer: '↑↓ navigate · Space toggle · apply preset · s save · Esc back',
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 (↵) o cambiá tools individuales (Espacio). Apretá s para guardar.',
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
- applyPrefix: 'Aplicar: ',
27
- unsaved: '* Cambios sin guardar — apretá s para guardar',
28
- saved: '✓ Guardado.',
29
- restart: 'Los cambios tienen efecto en la próxima llamada — no hace falta reiniciar el cliente MCP.',
30
- footer: '↑↓ moverse · Espacio cambiar · aplicar preset · s guardar · Esc volver',
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(row.preset);
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
- return (_jsxs(Frame, { title: t.title, footer: t.footer, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "white", children: t.intro }) }), _jsx(Box, { flexDirection: "column", children: rows.map((row, i) => {
120
- if (row.kind === 'header') {
121
- const label = row.family === 'bridge' ? t.bridgeHeader : t.mapHeader;
122
- return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "cyan", bold: true, children: [label, ":"] }) }, `h-${i}`));
123
- }
124
- const isCursor = i === cursor;
125
- const cursorMark = isCursor ? '❯' : ' ';
126
- if (row.kind === 'preset') {
127
- return (_jsxs(Box, { children: [_jsxs(Text, { color: isCursor ? 'cyan' : 'gray', children: [cursorMark, " "] }), _jsxs(Text, { color: isCursor ? 'white' : 'gray', bold: isCursor, children: [t.applyPrefix, row.preset.label] })] }, `p-${row.preset.id}`));
128
- }
129
- const isDisabled = disabled.has(row.tool.name);
130
- const checkbox = isDisabled ? '[ ]' : '[x]';
131
- const checkboxColor = isDisabled ? 'red' : 'green';
132
- return (_jsxs(Box, { children: [_jsxs(Text, { color: isCursor ? 'cyan' : 'gray', children: [cursorMark, " "] }), _jsxs(Text, { color: checkboxColor, children: [checkbox, " "] }), _jsx(Text, { color: isCursor ? 'white' : isDisabled ? 'gray' : 'white', bold: isCursor, children: row.tool.name.padEnd(28) }), _jsxs(Text, { color: "gray", dimColor: true, children: [' ', row.tool.summary] })] }, `t-${row.tool.name}`));
133
- }) }), _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 })] })] }));
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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"}
@@ -2,19 +2,29 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
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 { Badge, FooterKeys, InlineSpinner, KeyCap } from '../primitives/index.js';
5
7
  import { checkUpdates } from '../../commands/updates.js';
6
8
  import { runSelfUpdate, } from '../../commands/self-update.js';
7
9
  import { PACKAGE_NAME } from '../../version.js';
10
+ /* Updates screen. Same async lifecycle, redesigned chrome:
11
+ * - "Current version" / "Latest on npm" as two value rows with the
12
+ * latest tagged with a <Badge> when newer.
13
+ * - When `available`, the "Press u to update" line uses a keycap.
14
+ * - When running, an InlineSpinner sits next to the status message.
15
+ * - When done, the success row + restart hint stays.
16
+ */
8
17
  const UPDATES_I18N = {
9
18
  en: {
10
19
  title: 'Check for updates',
11
20
  checking: 'Checking the npm registry…',
12
21
  current: 'Current version',
13
22
  latest: 'Latest on npm ',
14
- upToDate: '✓ You are on the latest published version.',
15
- available: ' A newer version is available.',
23
+ newer: 'newer',
24
+ upToDate: 'You are on the latest published version.',
25
+ available: 'A newer version is available.',
16
26
  upgradeCmd: 'Or, to upgrade manually, run:',
17
- updateKeyHint: 'Press u to update now (stops any running primary, then installs).',
27
+ updateKeyHint: 'to update now (stops any running primary, then installs).',
18
28
  updateRunning: 'Updating…',
19
29
  error: 'Could not check the registry',
20
30
  footerIdle: 'r retry · ↵ / Esc back to menu',
@@ -22,16 +32,21 @@ const UPDATES_I18N = {
22
32
  footerUpdating: 'updating — please wait…',
23
33
  footerDone: '↵ / Esc back to menu — restart your MCP client to pick up the new version',
24
34
  footerFailed: 'r retry check · ↵ / Esc back to menu',
35
+ backLabel: 'back to menu',
36
+ retryLabel: 'retry',
37
+ updateLabel: 'update',
38
+ waitLabel: 'updating — please wait',
25
39
  },
26
40
  es: {
27
41
  title: 'Buscar actualizaciones',
28
42
  checking: 'Consultando el registry de npm…',
29
43
  current: 'Versión instalada',
30
44
  latest: 'Última en npm ',
31
- upToDate: ' Estás en la última versión publicada.',
32
- available: ' Hay una versión más nueva disponible.',
45
+ newer: 'más nueva',
46
+ upToDate: 'Estás en la última versión publicada.',
47
+ available: 'Hay una versión más nueva disponible.',
33
48
  upgradeCmd: 'O, para actualizar a mano, corré:',
34
- updateKeyHint: 'Tocá u para actualizar ahora (corta el primary en uso e instala).',
49
+ updateKeyHint: 'para actualizar ahora (corta el primary en uso e instala).',
35
50
  updateRunning: 'Actualizando…',
36
51
  error: 'No se pudo consultar el registry',
37
52
  footerIdle: 'r reintentar · ↵ / Esc volver al menú',
@@ -39,6 +54,10 @@ const UPDATES_I18N = {
39
54
  footerUpdating: 'actualizando — esperá…',
40
55
  footerDone: '↵ / Esc volver al menú — reiniciá tu cliente MCP para que tome la nueva versión',
41
56
  footerFailed: 'r reintentar el chequeo · ↵ / Esc volver al menú',
57
+ backLabel: 'volver al menú',
58
+ retryLabel: 'reintentar',
59
+ updateLabel: 'actualizar',
60
+ waitLabel: 'actualizando — esperá',
42
61
  },
43
62
  };
44
63
  export function UpdatesView({ language, onBack }) {
@@ -61,10 +80,6 @@ export function UpdatesView({ language, onBack }) {
61
80
  const isUpdating = update.kind === 'running';
62
81
  const canUpdate = info !== null && info.newer === true && info.latest !== null && !isUpdating;
63
82
  const startUpdate = () => {
64
- // Guard against the type-system view (info: UpdateInfo | null,
65
- // info.latest: string | null) — these are real runtime checks even
66
- // though `canUpdate` already implies both. Without them TS won't
67
- // narrow `info.latest` to `string` in the closure scope.
68
83
  if (info === null)
69
84
  return;
70
85
  const target = info.latest;
@@ -91,7 +106,7 @@ export function UpdatesView({ language, onBack }) {
91
106
  };
92
107
  useInput((input, key) => {
93
108
  if (isUpdating)
94
- return; // ignore keys while the install is in flight
109
+ return;
95
110
  if (key.return || key.escape)
96
111
  onBack();
97
112
  else if (input === 'r' && update.kind !== 'done')
@@ -99,15 +114,23 @@ export function UpdatesView({ language, onBack }) {
99
114
  else if (input === 'u')
100
115
  startUpdate();
101
116
  });
102
- const footer = update.kind === 'running'
103
- ? t.footerUpdating
104
- : update.kind === 'done'
105
- ? t.footerDone
106
- : update.kind === 'failed'
107
- ? t.footerFailed
108
- : canUpdate
109
- ? t.footerWithUpdate
110
- : t.footerIdle;
111
- return (_jsx(Frame, { title: t.title, footer: footer, children: info === null ? (_jsx(Text, { color: "gray", children: t.checking })) : info.error || info.latest === null ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { color: "white", children: [t.current, ": "] }), _jsx(Text, { bold: true, children: info.current })] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: [t.error, ": ", info.error ?? 'unknown error'] }) })] })) : (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { color: "white", children: [t.current, ": "] }), _jsx(Text, { bold: true, children: info.current })] }), _jsxs(Text, { children: [_jsxs(Text, { color: "white", children: [t.latest, ": "] }), _jsx(Text, { bold: true, color: info.newer ? 'yellow' : 'green', children: info.latest })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: info.newer ? 'yellow' : 'green', children: info.newer ? t.available : t.upToDate }) }), info.newer && update.kind === 'idle' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "cyan", children: t.updateKeyHint }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "gray", children: t.upgradeCmd }), _jsx(Text, { color: "cyan", children: `npm install -g ${PACKAGE_NAME}@latest` })] })] })), update.kind === 'running' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "cyan", children: t.updateRunning }), _jsx(Text, { color: "gray", children: update.message })] })), update.kind === 'done' && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: update.message }) })), update.kind === 'failed' && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: update.message }) }))] })) }));
117
+ const footerItems = (() => {
118
+ if (update.kind === 'running')
119
+ return [{ k: GLYPHS.dot, label: t.waitLabel }];
120
+ if (update.kind === 'done')
121
+ return [{ k: GLYPHS.enter, label: t.backLabel }];
122
+ if (canUpdate) {
123
+ return [
124
+ { k: 'u', label: t.updateLabel },
125
+ { k: 'r', label: t.retryLabel },
126
+ { k: GLYPHS.enter, label: t.backLabel },
127
+ ];
128
+ }
129
+ return [
130
+ { k: 'r', label: t.retryLabel },
131
+ { k: GLYPHS.enter, label: t.backLabel },
132
+ ];
133
+ })();
134
+ return (_jsx(Frame, { title: t.title, footer: _jsx(FooterKeys, { items: footerItems }), children: info === null ? (_jsxs(Box, { children: [_jsx(InlineSpinner, {}), _jsx(Text, { color: COLORS.muted, children: ` ${t.checking}` })] })) : info.error || info.latest === null ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { color: "white", children: [t.current, ": "] }), _jsx(Text, { bold: true, children: info.current })] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: COLORS.error, children: [t.error, ": ", info.error ?? 'unknown error'] }) })] })) : (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { color: "white", children: [t.current, ": "] }), _jsx(Text, { bold: true, children: info.current })] }), _jsxs(Box, { children: [_jsxs(Text, { color: "white", children: [t.latest, ": "] }), _jsx(Text, { bold: true, color: info.newer ? COLORS.warn : COLORS.success, children: info.latest }), info.newer && (_jsx(Box, { marginLeft: 2, children: _jsx(Badge, { kind: "warn", label: t.newer }) }))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: info.newer ? COLORS.warn : COLORS.success, children: info.newer ? `${GLYPHS.warn} ${t.available}` : `${GLYPHS.success} ${t.upToDate}` }) }), info.newer && update.kind === 'idle' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: COLORS.primary, children: "Press " }), _jsx(KeyCap, { label: "u" }), _jsxs(Text, { color: COLORS.primary, children: [" ", t.updateKeyHint] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: COLORS.muted, children: t.upgradeCmd }), _jsx(Text, { color: COLORS.primary, children: `npm install -g ${PACKAGE_NAME}@latest` })] })] })), update.kind === 'running' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(InlineSpinner, {}), _jsx(Text, { color: COLORS.primary, children: ` ${t.updateRunning}` })] }), _jsx(Text, { color: COLORS.muted, children: update.message })] })), update.kind === 'done' && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: COLORS.success, children: [GLYPHS.success, " ", update.message] }) })), update.kind === 'failed' && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: COLORS.error, children: [GLYPHS.error, " ", update.message] }) }))] })) }));
112
135
  }
113
136
  //# sourceMappingURL=updates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../../src/ui/screens/updates.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../../src/ui/screens/updates.tsx"],"names":[],"mappings":"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"}