@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.
- package/dist/agent-instructions/content.js +42 -27
- package/dist/agent-instructions/content.js.map +1 -1
- package/dist/agent-instructions/file-ops.js +7 -2
- package/dist/agent-instructions/file-ops.js.map +1 -1
- 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/doctor.js +30 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/update-check.d.ts +25 -0
- package/dist/commands/update-check.js +108 -0
- package/dist/commands/update-check.js.map +1 -0
- 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/map/tools.d.ts +1 -5
- package/dist/map/tools.js +45 -0
- package/dist/map/tools.js.map +1 -1
- package/dist/server.js +42 -36
- package/dist/server.js.map +1 -1
- package/dist/tools/browser-definitions.d.ts +6 -0
- package/dist/tools/browser-definitions.js +150 -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/server-instructions.d.ts +16 -2
- package/dist/tools/server-instructions.js +87 -68
- package/dist/tools/server-instructions.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/tools/types.d.ts +26 -1
- package/dist/ui/app.js +40 -5
- 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/hooks/use-update-check.d.ts +16 -0
- package/dist/ui/hooks/use-update-check.js +48 -0
- package/dist/ui/hooks/use-update-check.js.map +1 -0
- 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.d.ts +7 -1
- package/dist/ui/screens/agent-instructions.js +62 -46
- 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.d.ts +10 -1
- package/dist/ui/screens/menu.js +118 -30
- 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
|
@@ -1,44 +1,74 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } 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 { COLORS, GLYPHS } from '../tokens.js';
|
|
6
|
+
import { FooterKeys, MenuRow, SectionHead } from '../primitives/index.js';
|
|
5
7
|
import { I18N_WELCOME } from '../../commands/welcome.js';
|
|
8
|
+
import { VERSION } from '../../version.js';
|
|
6
9
|
export function WelcomeScreen({ language, hideDismiss, onAccept, onDismiss, onSwapLang, onQuit, }) {
|
|
7
10
|
const t = I18N_WELCOME[language];
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
const [expanded, setExpanded] = useState(false);
|
|
12
|
+
/* Hotkeys here are stable across languages — `c` for the primary
|
|
13
|
+
* action ("continue"), `d` for dismiss, `l` for language, `q` for
|
|
14
|
+
* quit. Picking them from the EN labels would drift between locales,
|
|
15
|
+
* so we hard-code them. */
|
|
16
|
+
const rows = [{ value: 'accept', hotkey: 'c', label: t.options.accept }];
|
|
11
17
|
if (!hideDismiss)
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
rows.push({ value: 'dismiss', hotkey: 'd', label: t.options.dismiss });
|
|
19
|
+
rows.push({ value: 'swap', hotkey: 'l', label: t.options.swap }, { value: 'quit', hotkey: 'q', label: t.options.quit });
|
|
14
20
|
const [idx, setIdx] = useState(0);
|
|
21
|
+
const fire = (action) => {
|
|
22
|
+
if (action === 'accept')
|
|
23
|
+
onAccept();
|
|
24
|
+
else if (action === 'dismiss')
|
|
25
|
+
onDismiss();
|
|
26
|
+
else if (action === 'swap')
|
|
27
|
+
onSwapLang();
|
|
28
|
+
else
|
|
29
|
+
onQuit();
|
|
30
|
+
};
|
|
15
31
|
useInput((input, key) => {
|
|
16
32
|
if (key.upArrow)
|
|
17
|
-
setIdx((i) => (i - 1 +
|
|
33
|
+
setIdx((i) => (i - 1 + rows.length) % rows.length);
|
|
18
34
|
else if (key.downArrow)
|
|
19
|
-
setIdx((i) => (i + 1) %
|
|
20
|
-
else if (key.return)
|
|
21
|
-
|
|
22
|
-
if (v === 'accept')
|
|
23
|
-
onAccept();
|
|
24
|
-
else if (v === 'dismiss')
|
|
25
|
-
onDismiss();
|
|
26
|
-
else if (v === 'swap')
|
|
27
|
-
onSwapLang();
|
|
28
|
-
else
|
|
29
|
-
onQuit();
|
|
30
|
-
}
|
|
35
|
+
setIdx((i) => (i + 1) % rows.length);
|
|
36
|
+
else if (key.return)
|
|
37
|
+
fire(rows[idx].value);
|
|
31
38
|
else if (input === 'q' || key.escape)
|
|
32
39
|
onQuit();
|
|
33
40
|
else if (input === 'l')
|
|
34
41
|
onSwapLang();
|
|
42
|
+
else if (input === 'i' || input === 'I')
|
|
43
|
+
setExpanded((v) => !v);
|
|
44
|
+
else {
|
|
45
|
+
// Hotkey lookup — pressing the bracketed letter fires the row.
|
|
46
|
+
const target = rows.find((r) => r.hotkey === input.toLowerCase());
|
|
47
|
+
if (target)
|
|
48
|
+
fire(target.value);
|
|
49
|
+
}
|
|
35
50
|
});
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
:
|
|
39
|
-
|
|
51
|
+
const fk = t.footerKeys;
|
|
52
|
+
const footerItems = [
|
|
53
|
+
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: fk.navigate },
|
|
54
|
+
{ k: GLYPHS.enter, label: fk.select },
|
|
55
|
+
{ k: 'i', label: expanded ? fk.hide : fk.info },
|
|
56
|
+
{ k: 'l', label: fk.lang },
|
|
57
|
+
{ k: 'q', label: fk.quit },
|
|
58
|
+
];
|
|
59
|
+
return (_jsxs(Frame, { title: t.title, badge: _jsxs(Text, { color: COLORS.muted, dimColor: true, children: ["v", VERSION] }), footer: _jsx(FooterKeys, { items: footerItems }), children: [_jsx(Wordmark, {}), expanded ? (_jsx(ExpandedBody, { t: t })) : (_jsx(CompactBody, { about: t.shortAbout, warningTitle: t.warningTitle, warning: t.shortWarning })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "white", bold: true, children: t.prompt }) }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: rows.map((row, i) => (_jsx(MenuRow, { selected: i === idx, hotkey: row.hotkey, label: row.label }, row.value))) }), !expanded && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: COLORS.muted, italic: true, children: t.detailHint }) }))] }));
|
|
60
|
+
}
|
|
61
|
+
function CompactBody({ about, warningTitle, warning }) {
|
|
62
|
+
return (_jsxs(_Fragment, { children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { children: about }) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: COLORS.warn, bold: true, children: [GLYPHS.warn, " ", warningTitle] }) }), _jsx(Text, { children: warning })] }));
|
|
63
|
+
}
|
|
64
|
+
function ExpandedBody({ t }) {
|
|
65
|
+
return (_jsxs(_Fragment, { children: [_jsx(SectionHead, { children: t.aboutTitle }), _jsx(Text, { children: t.about }), _jsx(SectionHead, { children: t.capabilitiesTitle }), _jsx(Text, { children: t.capabilities }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: COLORS.warn, bold: true, children: [GLYPHS.warn, " ", t.warningTitle] }) }), _jsx(Text, { children: t.warning }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: COLORS.muted, italic: true, children: t.responsibility }), _jsx(Text, { color: COLORS.muted, italic: true, children: t.extensionNote })] })] }));
|
|
40
66
|
}
|
|
41
|
-
|
|
42
|
-
|
|
67
|
+
/* Logo A — typeset wordmark, single line. See system.jsx → LogoCard,
|
|
68
|
+
* option A. `·` is the magenta hairline between "browser" and "link";
|
|
69
|
+
* we render it in muted gray here because magenta is the Branded mood
|
|
70
|
+
* primary and would clash with the Pragmatic palette. */
|
|
71
|
+
function Wordmark() {
|
|
72
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: COLORS.primary, bold: true, children: "browser" }), _jsxs(Text, { color: COLORS.muted, children: [" ", GLYPHS.dot, " "] }), _jsx(Text, { color: COLORS.primary, bold: true, children: "link" }), _jsx(Text, { color: COLORS.muted, dimColor: true, children: ` v${VERSION}` })] }));
|
|
43
73
|
}
|
|
44
74
|
//# sourceMappingURL=welcome.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../../src/ui/screens/welcome.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":"welcome.js","sourceRoot":"","sources":["../../../src/ui/screens/welcome.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const COLORS: {
|
|
2
|
+
readonly primary: "cyan";
|
|
3
|
+
readonly success: "green";
|
|
4
|
+
readonly warn: "yellow";
|
|
5
|
+
readonly error: "red";
|
|
6
|
+
readonly info: "blue";
|
|
7
|
+
readonly muted: "gray";
|
|
8
|
+
readonly focus: "cyan";
|
|
9
|
+
readonly heading: "cyan";
|
|
10
|
+
};
|
|
11
|
+
export type ColorRole = keyof typeof COLORS;
|
|
12
|
+
export declare const GLYPHS: {
|
|
13
|
+
readonly cursor: "❯";
|
|
14
|
+
readonly success: "✓";
|
|
15
|
+
readonly error: "✗";
|
|
16
|
+
readonly warn: "⚠";
|
|
17
|
+
readonly info: "ℹ";
|
|
18
|
+
readonly dot: "·";
|
|
19
|
+
readonly arrow: "→";
|
|
20
|
+
readonly up: "↑";
|
|
21
|
+
readonly down: "↓";
|
|
22
|
+
readonly enter: "↵";
|
|
23
|
+
readonly esc: "⎋";
|
|
24
|
+
readonly space: "␣";
|
|
25
|
+
readonly badgeOk: "✓ installed";
|
|
26
|
+
readonly badgeWarn: "⚠ outdated";
|
|
27
|
+
readonly badgeOff: "· not installed";
|
|
28
|
+
readonly badgeFail: "✗ failed";
|
|
29
|
+
readonly badgeNoFile: "· no file yet";
|
|
30
|
+
};
|
|
31
|
+
export type GlyphKey = keyof typeof GLYPHS;
|
|
32
|
+
export declare const SPACE: {
|
|
33
|
+
readonly none: 0;
|
|
34
|
+
readonly gap: 1;
|
|
35
|
+
readonly block: 2;
|
|
36
|
+
};
|
|
37
|
+
export type SpaceKey = keyof typeof SPACE;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* Design tokens — the Pragmatic mood (Mood A) of the v0.9.0 visual refactor.
|
|
2
|
+
*
|
|
3
|
+
* Ink accepts ANSI color names directly via the `color` prop on <Text>,
|
|
4
|
+
* so this module is a thin semantic-role → ANSI-name mapping, not a
|
|
5
|
+
* hex-to-color translator. The full design source lives at
|
|
6
|
+
* `~/browser-link/browser-link/tokens.jsx` (Mood A · Pragmatic).
|
|
7
|
+
*
|
|
8
|
+
* `dimColor` on Ink's <Text> handles the "muted" role; we still expose
|
|
9
|
+
* `muted: 'gray'` so consumers reading from COLORS get a sensible fallback
|
|
10
|
+
* when they want the muted *color* (e.g. a separator dot) and not the
|
|
11
|
+
* dim *effect* (which is applied via the dimColor prop instead).
|
|
12
|
+
*/
|
|
13
|
+
export const COLORS = {
|
|
14
|
+
primary: 'cyan',
|
|
15
|
+
success: 'green',
|
|
16
|
+
warn: 'yellow',
|
|
17
|
+
error: 'red',
|
|
18
|
+
info: 'blue',
|
|
19
|
+
muted: 'gray',
|
|
20
|
+
focus: 'cyan',
|
|
21
|
+
heading: 'cyan',
|
|
22
|
+
};
|
|
23
|
+
/* Glyph set A — Shapes. Chosen for max cross-terminal compatibility:
|
|
24
|
+
* every glyph below renders cleanly on cmd.exe-equivalent terminals
|
|
25
|
+
* (Windows Terminal, iTerm2, modern xterms). The corresponding
|
|
26
|
+
* design source is `tokens.jsx` → GLYPHS.shapes. */
|
|
27
|
+
export const GLYPHS = {
|
|
28
|
+
cursor: '❯',
|
|
29
|
+
success: '✓',
|
|
30
|
+
error: '✗',
|
|
31
|
+
warn: '⚠',
|
|
32
|
+
info: 'ℹ',
|
|
33
|
+
dot: '·',
|
|
34
|
+
arrow: '→',
|
|
35
|
+
up: '↑',
|
|
36
|
+
down: '↓',
|
|
37
|
+
enter: '↵',
|
|
38
|
+
esc: '⎋',
|
|
39
|
+
space: '␣',
|
|
40
|
+
/* Status badges — glyph + space + label. Kept here so the same string
|
|
41
|
+
* is reused across screens (Agent Instructions, Client Picker, Doctor). */
|
|
42
|
+
badgeOk: '✓ installed',
|
|
43
|
+
badgeWarn: '⚠ outdated',
|
|
44
|
+
badgeOff: '· not installed',
|
|
45
|
+
badgeFail: '✗ failed',
|
|
46
|
+
/* Agent-instructions specific — used when the target .md file does
|
|
47
|
+
* not exist yet (install will create it). */
|
|
48
|
+
badgeNoFile: '· no file yet',
|
|
49
|
+
};
|
|
50
|
+
/* Spacing scale — three levels only, mapped directly to Ink margin props.
|
|
51
|
+
* See `~/browser-link/browser-link/tokens.jsx` → SPACE and `system.jsx` →
|
|
52
|
+
* SpacingCard for the per-level usage spec. Don't introduce a fourth value. */
|
|
53
|
+
export const SPACE = {
|
|
54
|
+
none: 0,
|
|
55
|
+
gap: 1,
|
|
56
|
+
block: 2,
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/ui/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;CACP,CAAC;AAIX;;;oDAGoD;AACpD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;IACV,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;IACV;+EAC2E;IAC3E,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,YAAY;IACvB,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,UAAU;IACrB;iDAC6C;IAC7C,WAAW,EAAE,eAAe;CACpB,CAAC;AAIX;;+EAE+E;AAC/E,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;CACA,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobshimo/browser-link",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "MCP server that bridges Claude Code, OpenCode, GitHub Copilot CLI and other MCP clients to a Chrome tab. Per-tool permissions, multi-agent mode (multiple MCP clients sharing one bridge), persistent UI map across sessions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|