@jobshimo/browser-link 0.41.0 → 0.43.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/README.md +28 -4
- package/dist/activity/db.js +18 -0
- package/dist/activity/db.js.map +1 -1
- package/dist/activity/extract.d.ts +18 -2
- package/dist/activity/extract.js +122 -1
- package/dist/activity/extract.js.map +1 -1
- package/dist/activity/queries.d.ts +1 -1
- package/dist/activity/queries.js +20 -4
- package/dist/activity/queries.js.map +1 -1
- package/dist/activity/summary.d.ts +54 -0
- package/dist/activity/summary.js +95 -0
- package/dist/activity/summary.js.map +1 -0
- package/dist/activity/types.d.ts +30 -0
- package/dist/activity/types.js +31 -1
- package/dist/activity/types.js.map +1 -1
- package/dist/admin/actions.d.ts +57 -0
- package/dist/admin/actions.js +163 -0
- package/dist/admin/actions.js.map +1 -0
- package/dist/admin/descriptor.d.ts +65 -0
- package/dist/admin/descriptor.js +205 -0
- package/dist/admin/descriptor.js.map +1 -0
- package/dist/admin/i18n.d.ts +90 -0
- package/dist/admin/i18n.js +203 -0
- package/dist/admin/i18n.js.map +1 -0
- package/dist/admin/primary.d.ts +21 -0
- package/dist/admin/primary.js +56 -0
- package/dist/admin/primary.js.map +1 -0
- package/dist/admin/sources.d.ts +22 -0
- package/dist/admin/sources.js +82 -0
- package/dist/admin/sources.js.map +1 -0
- package/dist/bridge/ws-bridge.d.ts +38 -1
- package/dist/bridge/ws-bridge.js +114 -0
- package/dist/bridge/ws-bridge.js.map +1 -1
- package/dist/cli.js +18 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/activity.d.ts +5 -0
- package/dist/commands/activity.js +92 -1
- package/dist/commands/activity.js.map +1 -1
- package/dist/commands/config.d.ts +14 -0
- package/dist/commands/config.js +48 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.js.map +1 -1
- package/dist/extension/admin-view.d.ts +95 -0
- package/dist/extension/admin-view.js +164 -0
- package/dist/extension/admin-view.js.map +1 -0
- package/dist/extension/background.js +76 -0
- package/dist/extension/background.js.map +1 -1
- package/dist/extension/manifest.json +1 -1
- package/dist/extension/popup.html +113 -0
- package/dist/extension/popup.js +206 -0
- package/dist/extension/popup.js.map +1 -1
- package/dist/manual/topics.js +2 -2
- package/dist/manual/topics.js.map +1 -1
- package/dist/map/db.js +26 -0
- package/dist/map/db.js.map +1 -1
- package/dist/map/learning.d.ts +81 -0
- package/dist/map/learning.js +244 -0
- package/dist/map/learning.js.map +1 -0
- package/dist/map/queries.d.ts +45 -0
- package/dist/map/queries.js +108 -5
- package/dist/map/queries.js.map +1 -1
- package/dist/map/tools.js +2 -1
- package/dist/map/tools.js.map +1 -1
- package/dist/messages.d.ts +86 -2
- package/dist/server.js +23 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/browser-definitions.js +15 -1
- package/dist/tools/browser-definitions.js.map +1 -1
- package/dist/tools/browser-dispatch.d.ts +10 -0
- package/dist/tools/browser-dispatch.js +88 -18
- package/dist/tools/browser-dispatch.js.map +1 -1
- package/dist/ui/app.d.ts +4 -1
- package/dist/ui/app.js +55 -42
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/screens/index.d.ts +1 -0
- package/dist/ui/screens/index.js +1 -0
- package/dist/ui/screens/index.js.map +1 -1
- package/dist/ui/screens/menu.d.ts +11 -1
- package/dist/ui/screens/menu.js +12 -4
- package/dist/ui/screens/menu.js.map +1 -1
- package/dist/ui/screens/status.d.ts +19 -0
- package/dist/ui/screens/status.js +67 -0
- package/dist/ui/screens/status.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
1
2
|
import { type UpdateCheckState } from '../hooks/use-update-check.js';
|
|
2
3
|
import type { CommonProps } from './types.js';
|
|
3
4
|
export type MenuAction = 'register' | 'instructions' | 'permissions' | 'multiAgent' | 'extension' | 'doctor' | 'updates' | 'freePort' | 'language' | 'welcome' | 'about' | 'repo' | 'quit';
|
|
@@ -13,6 +14,15 @@ interface MainMenuProps extends CommonProps {
|
|
|
13
14
|
* value to assert the update banner renders only when isNewer is true.
|
|
14
15
|
* In production this is undefined and the menu calls the real hook. */
|
|
15
16
|
updateState?: UpdateCheckState;
|
|
17
|
+
/** Status view (S4) only: replaces the frame title. */
|
|
18
|
+
title?: string;
|
|
19
|
+
/** Status view only: rendered above the banners and the menu rows. */
|
|
20
|
+
header?: ReactNode;
|
|
21
|
+
/** Status view only: Tab opens the full menu; the footer names it. */
|
|
22
|
+
onOpenMenu?: {
|
|
23
|
+
run: () => void;
|
|
24
|
+
label: string;
|
|
25
|
+
};
|
|
16
26
|
}
|
|
17
|
-
export declare function MainMenu({ language, onSelect, onSwapLang, onQuit, outdatedClientNames, updateState, }: MainMenuProps): import("react").JSX.Element;
|
|
27
|
+
export declare function MainMenu({ language, onSelect, onSwapLang, onQuit, outdatedClientNames, updateState, title, header, onOpenMenu, }: MainMenuProps): import("react").JSX.Element;
|
|
18
28
|
export {};
|
package/dist/ui/screens/menu.js
CHANGED
|
@@ -107,18 +107,23 @@ const MENU_I18N = {
|
|
|
107
107
|
footerQuit: 'salir',
|
|
108
108
|
},
|
|
109
109
|
};
|
|
110
|
+
/** With an injected `updateState` (tests, the status view) the menu skips
|
|
111
|
+
* its own registry check; a constant keeps the hook's effect stable. */
|
|
112
|
+
const SKIP_UPDATE_CHECK = {
|
|
113
|
+
runCheck: () => Promise.reject(new Error('injected')),
|
|
114
|
+
};
|
|
110
115
|
function defaultOutdatedClientNames() {
|
|
111
116
|
return statusAll()
|
|
112
117
|
.filter((r) => r.state.kind === 'installed-outdated')
|
|
113
118
|
.map((r) => r.displayName);
|
|
114
119
|
}
|
|
115
|
-
export function MainMenu({ language, onSelect, onSwapLang, onQuit, outdatedClientNames = defaultOutdatedClientNames, updateState, }) {
|
|
120
|
+
export function MainMenu({ language, onSelect, onSwapLang, onQuit, outdatedClientNames = defaultOutdatedClientNames, updateState, title, header, onOpenMenu, }) {
|
|
116
121
|
const t = MENU_I18N[language];
|
|
117
122
|
/* The real hook drives a 6-hourly background check; tests inject a fixed
|
|
118
123
|
* `updateState` instead. We call the hook unconditionally so the React
|
|
119
124
|
* rules-of-hooks are satisfied (no conditional invocation), then ignore
|
|
120
125
|
* its result when the prop override is present. */
|
|
121
|
-
const hookState = useBackgroundUpdateCheck();
|
|
126
|
+
const hookState = useBackgroundUpdateCheck(updateState ? SKIP_UPDATE_CHECK : undefined);
|
|
122
127
|
const effectiveUpdate = updateState ?? hookState;
|
|
123
128
|
const [idx, setIdx] = useState(0);
|
|
124
129
|
const [outdated, setOutdated] = useState(() => outdatedClientNames());
|
|
@@ -138,6 +143,8 @@ export function MainMenu({ language, onSelect, onSwapLang, onQuit, outdatedClien
|
|
|
138
143
|
setIdx((i) => (i + 1) % MENU_SPEC.length);
|
|
139
144
|
else if (key.return)
|
|
140
145
|
handleAction(MENU_SPEC[idx].value);
|
|
146
|
+
else if (key.tab && onOpenMenu)
|
|
147
|
+
onOpenMenu.run();
|
|
141
148
|
else if (input === 'q' || key.escape)
|
|
142
149
|
onQuit();
|
|
143
150
|
else if (input === 'l')
|
|
@@ -158,13 +165,14 @@ export function MainMenu({ language, onSelect, onSwapLang, onQuit, outdatedClien
|
|
|
158
165
|
{ id: 'diagnose', head: t.groupDiagnose },
|
|
159
166
|
{ id: 'reference', head: t.groupReference },
|
|
160
167
|
];
|
|
161
|
-
return (_jsxs(Frame, { title: t.title, badge: _jsxs(Text, { color: COLORS.muted, dimColor: true, children: ["v", VERSION] }), footer: _jsx(FooterKeys, { items: [
|
|
168
|
+
return (_jsxs(Frame, { title: title ?? t.title, badge: _jsxs(Text, { color: COLORS.muted, dimColor: true, children: ["v", VERSION] }), footer: _jsx(FooterKeys, { items: [
|
|
162
169
|
{ k: `${GLYPHS.up}${GLYPHS.down}`, label: t.footerNavigate },
|
|
163
170
|
{ k: GLYPHS.enter, label: t.footerSelect },
|
|
164
171
|
{ k: 'a-z', label: t.footerHotkey },
|
|
172
|
+
...(onOpenMenu ? [{ k: 'tab', label: onOpenMenu.label }] : []),
|
|
165
173
|
{ k: 'l', label: t.footerLang },
|
|
166
174
|
{ k: 'q', label: t.footerQuit },
|
|
167
|
-
] }), children: [outdated.length > 0 && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: COLORS.warn, children: t.outdatedBanner(outdated.join(', ')) }) })), effectiveUpdate.isNewer && effectiveUpdate.latest !== null && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: COLORS.primary, children: t.updateBanner(effectiveUpdate.latest) }) })), _jsxs(Box, { children: [_jsx(Text, { color: "white", bold: true, children: t.prompt }), _jsxs(Text, { color: COLORS.muted, dimColor: true, italic: true, children: [' ', GLYPHS.dot, " ", t.promptHint] })] }), groups.map((g) => (_jsxs(Box, { flexDirection: "column", children: [_jsx(SectionHead, { children: g.head }), MENU_SPEC.filter((m) => m.group === g.id).map((spec) => {
|
|
175
|
+
] }), children: [header, outdated.length > 0 && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: COLORS.warn, children: t.outdatedBanner(outdated.join(', ')) }) })), effectiveUpdate.isNewer && effectiveUpdate.latest !== null && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: COLORS.primary, children: t.updateBanner(effectiveUpdate.latest) }) })), _jsxs(Box, { children: [_jsx(Text, { color: "white", bold: true, children: t.prompt }), _jsxs(Text, { color: COLORS.muted, dimColor: true, italic: true, children: [' ', GLYPHS.dot, " ", t.promptHint] })] }), groups.map((g) => (_jsxs(Box, { flexDirection: "column", children: [_jsx(SectionHead, { children: g.head }), MENU_SPEC.filter((m) => m.group === g.id).map((spec) => {
|
|
168
176
|
const globalIndex = MENU_SPEC.indexOf(spec);
|
|
169
177
|
return (_jsx(MenuRow, { selected: globalIndex === idx, hotkey: spec.hotkey, label: t.options[spec.value], hint: t.hints[spec.value] }, spec.value));
|
|
170
178
|
})] }, g.id)))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/ui/screens/menu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/ui/screens/menu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAyB,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAwC3C;;;;;;GAMG;AACH,MAAM,SAAS,GAAkB;IAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IAClD,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IACtD,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IACrD,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IACpD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;IACnD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;IACpD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;IACrD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;IACvD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;IACtD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;IACrD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;IACnD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;IAClD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;CACnD,CAAC;AAyBF,MAAM,SAAS,GAA+B;IAC5C,EAAE,EAAE;QACF,KAAK,EAAE,sBAAsB;QAC7B,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,4BAA4B;QACxC,UAAU,EAAE,OAAO;QACnB,aAAa,EAAE,UAAU;QACzB,cAAc,EAAE,WAAW;QAC3B,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAC1B,oCAAoC,OAAO,oCAAoC;QACjF,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CACvB,MAAM,MAAM,mEAAmE;QACjF,OAAO,EAAE;YACP,QAAQ,EAAE,0CAA0C;YACpD,YAAY,EACV,mFAAmF;YACrF,WAAW,EAAE,8CAA8C;YAC3D,UAAU,EAAE,yDAAyD;YACrE,SAAS,EAAE,qCAAqC;YAChD,MAAM,EAAE,qCAAqC;YAC7C,OAAO,EAAE,0BAA0B;YACnC,QAAQ,EAAE,qDAAqD;YAC/D,QAAQ,EAAE,+CAA+C;YACzD,OAAO,EAAE,yBAAyB;YAClC,KAAK,EAAE,8CAA8C;YACrD,IAAI,EAAE,4BAA4B;YAClC,IAAI,EAAE,MAAM;SACb;QACD,KAAK,EAAE;YACL,YAAY,EAAE,6BAA6B;YAC3C,WAAW,EAAE,iCAAiC;YAC9C,UAAU,EAAE,kCAAkC;YAC9C,MAAM,EAAE,4BAA4B;YACpC,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,SAAS;SACpB;QACD,cAAc,EAAE,UAAU;QAC1B,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,MAAM;KACnB;IACD,EAAE,EAAE;QACF,KAAK,EAAE,8BAA8B;QACrC,MAAM,EAAE,kBAAkB;QAC1B,UAAU,EAAE,mCAAmC;QAC/C,UAAU,EAAE,OAAO;QACnB,aAAa,EAAE,aAAa;QAC5B,cAAc,EAAE,YAAY;QAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAC1B,8CAA8C,OAAO,gCAAgC;QACvF,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CACvB,MAAM,MAAM,sEAAsE;QACpF,OAAO,EAAE;YACP,QAAQ,EAAE,0CAA0C;YACpD,YAAY,EACV,oGAAoG;YACtG,WAAW,EAAE,+CAA+C;YAC5D,UAAU,EAAE,8DAA8D;YAC1E,SAAS,EAAE,gDAAgD;YAC3D,MAAM,EAAE,+CAA+C;YACvD,OAAO,EAAE,+BAA+B;YACxC,QAAQ,EAAE,yDAAyD;YACnE,QAAQ,EAAE,0CAA0C;YACpD,OAAO,EAAE,mCAAmC;YAC5C,KAAK,EAAE,mDAAmD;YAC1D,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,OAAO;SACd;QACD,KAAK,EAAE;YACL,YAAY,EAAE,yBAAyB;YACvC,WAAW,EAAE,6BAA6B;YAC1C,UAAU,EAAE,mCAAmC;YAC/C,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,wBAAwB;YAClC,QAAQ,EAAE,SAAS;SACpB;QACD,cAAc,EAAE,SAAS;QACzB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,OAAO;KACpB;CACF,CAAC;AAsBF;wEACwE;AACxE,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,GAA8B,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;CACjF,CAAC;AAEF,SAAS,0BAA0B;IACjC,OAAO,SAAS,EAAE;SACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,mBAAmB,GAAG,0BAA0B,EAChD,WAAW,EACX,KAAK,EACL,MAAM,EACN,UAAU,GACI;IACd,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE9B;;;uDAGmD;IACnD,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxF,MAAM,eAAe,GAAG,WAAW,IAAI,SAAS,CAAC;IAEjD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEhF,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAQ,EAAE;QAC/C,IAAI,KAAK,KAAK,MAAM;YAAE,MAAM,EAAE,CAAC;;YAC1B,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;aACzE,IAAI,GAAG,CAAC,SAAS;YAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;aAC7D,IAAI,GAAG,CAAC,MAAM;YAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;aACnD,IAAI,GAAG,CAAC,GAAG,IAAI,UAAU;YAAE,UAAU,CAAC,GAAG,EAAE,CAAC;aAC5C,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM;YAAE,MAAM,EAAE,CAAC;aAC1C,IAAI,KAAK,KAAK,GAAG;YAAE,UAAU,EAAE,CAAC;aAChC,CAAC;YACJ;;;iFAGqE;YACrE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;YACvE,IAAI,MAAM;gBAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAsC;QAChD,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE;QACnC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE;QACzC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE;KAC5C,CAAC;IAEF,OAAO,CACL,MAAC,KAAK,IACJ,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,KAAK,EACvB,KAAK,EACH,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,wBAC/B,OAAO,IACJ,EAET,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,cAAc,EAAE;gBAC5D,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE;gBAC1C,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE;gBACnC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE;gBAC/B,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE;aAChC,GACD,aAGH,MAAM,EACN,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YAAG,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAQ,GACpE,CACP,EACA,eAAe,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,KAAK,IAAI,IAAI,CAC7D,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,GAAQ,GACxE,CACP,EACD,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBACrB,CAAC,CAAC,MAAM,GACJ,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,QAAC,MAAM,mBACvC,IAAI,EACJ,MAAM,CAAC,GAAG,OAAG,CAAC,CAAC,UAAU,IACrB,IACH,EAEL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,MAAC,GAAG,IAAY,aAAa,EAAC,QAAQ,aACpC,KAAC,WAAW,cAAE,CAAC,CAAC,IAAI,GAAe,EAClC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBACtD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC5C,OAAO,CACL,KAAC,OAAO,IAEN,QAAQ,EAAE,WAAW,KAAK,GAAG,EAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAC5B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAJpB,IAAI,CAAC,KAAK,CAKf,CACH,CAAC;oBACJ,CAAC,CAAC,KAbM,CAAC,CAAC,EAAE,CAcR,CACP,CAAC,IACI,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type AdminInput } from '../../admin/descriptor.js';
|
|
2
|
+
import { type UpdateCheckState } from '../hooks/use-update-check.js';
|
|
3
|
+
import { type MenuAction } from './menu.js';
|
|
4
|
+
import type { CommonProps } from './types.js';
|
|
5
|
+
/** The console's facts: the primary's `/version`, the local config and files. */
|
|
6
|
+
export declare function loadLocalAdminInput(): Promise<AdminInput>;
|
|
7
|
+
interface StatusViewProps extends CommonProps {
|
|
8
|
+
onSelect: (action: MenuAction) => void;
|
|
9
|
+
onOpenMenu: () => void;
|
|
10
|
+
onSwapLang: () => void;
|
|
11
|
+
onQuit: () => void;
|
|
12
|
+
/** Test seam: production reads the real machine. */
|
|
13
|
+
loadInput?: () => Promise<AdminInput>;
|
|
14
|
+
/** Test seams forwarded to the menu rows. */
|
|
15
|
+
outdatedClientNames?: () => string[];
|
|
16
|
+
updateState?: UpdateCheckState;
|
|
17
|
+
}
|
|
18
|
+
export declare function StatusView({ language, onSelect, onOpenMenu, onSwapLang, onQuit, loadInput, outdatedClientNames, updateState, }: StatusViewProps): import("react").JSX.Element;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { COLORS } from '../tokens.js';
|
|
5
|
+
import { SectionHead } from '../primitives/index.js';
|
|
6
|
+
import { buildAdminState } from '../../admin/descriptor.js';
|
|
7
|
+
import { gatherAdminInput, probeRunningServer } from '../../admin/sources.js';
|
|
8
|
+
import { useBackgroundUpdateCheck } from '../hooks/use-update-check.js';
|
|
9
|
+
import { MainMenu } from './menu.js';
|
|
10
|
+
/* Status view (S4) — the console's first screen. The top block is the
|
|
11
|
+
* `status` section of the admin descriptor (`admin/descriptor.ts`), the
|
|
12
|
+
* same source the popup's Admin section renders, built here out of
|
|
13
|
+
* process: the running primary answers `/version` or the rows say it is
|
|
14
|
+
* not running, and the tab count stays with the primary. Below it are the
|
|
15
|
+
* existing menu rows with their hotkeys (it is `MainMenu` with a header),
|
|
16
|
+
* so every screen is still one key away; Tab opens the full menu. */
|
|
17
|
+
const STATUS_I18N = {
|
|
18
|
+
en: { title: 'browser-link — status', loading: 'Reading status…', menu: 'menu' },
|
|
19
|
+
es: { title: 'browser-link — estado', loading: 'Leyendo el estado…', menu: 'menú' },
|
|
20
|
+
};
|
|
21
|
+
/** The console's facts: the primary's `/version`, the local config and files. */
|
|
22
|
+
export function loadLocalAdminInput() {
|
|
23
|
+
return gatherAdminInput({ server: probeRunningServer });
|
|
24
|
+
}
|
|
25
|
+
function display(value) {
|
|
26
|
+
if (value === null || value === undefined)
|
|
27
|
+
return '—';
|
|
28
|
+
return String(value);
|
|
29
|
+
}
|
|
30
|
+
function StatusRows({ items, heading }) {
|
|
31
|
+
const width = Math.max(...items.map((i) => i.label.length), 0) + 2;
|
|
32
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(SectionHead, { children: heading.toUpperCase() }), items.map((item) => (_jsxs(Box, { children: [_jsx(Text, { color: COLORS.muted, children: ` ${item.label.padEnd(width)}` }), _jsx(Text, { children: display(item.value) }), item.hint !== undefined && (_jsx(Text, { color: COLORS.muted, dimColor: true, children: ` ${item.hint}` }))] }, item.id)))] }));
|
|
33
|
+
}
|
|
34
|
+
export function StatusView({ language, onSelect, onOpenMenu, onSwapLang, onQuit, loadInput = loadLocalAdminInput, outdatedClientNames, updateState, }) {
|
|
35
|
+
const t = STATUS_I18N[language];
|
|
36
|
+
// One update check for both the status row and the menu's banner; an
|
|
37
|
+
// injected state replaces the network call entirely.
|
|
38
|
+
const injected = useMemo(() => (updateState ? { runCheck: () => Promise.resolve(updateState) } : undefined), [updateState]);
|
|
39
|
+
const hookState = useBackgroundUpdateCheck(injected);
|
|
40
|
+
const update = updateState ?? hookState;
|
|
41
|
+
const [input, setInput] = useState(null);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
let cancelled = false;
|
|
44
|
+
loadInput()
|
|
45
|
+
.then((next) => {
|
|
46
|
+
if (!cancelled)
|
|
47
|
+
setInput(next);
|
|
48
|
+
})
|
|
49
|
+
.catch(() => {
|
|
50
|
+
/* the rows stay on "reading"; the menu below still works */
|
|
51
|
+
});
|
|
52
|
+
return () => {
|
|
53
|
+
cancelled = true;
|
|
54
|
+
};
|
|
55
|
+
}, [loadInput]);
|
|
56
|
+
// The console's language wins over the config's: `l` swaps it live.
|
|
57
|
+
const section = input
|
|
58
|
+
? buildAdminState({
|
|
59
|
+
...input,
|
|
60
|
+
config: { ...input.config, language },
|
|
61
|
+
update: update.latest === null ? input.update : update,
|
|
62
|
+
}).sections.find((s) => s.id === 'status')
|
|
63
|
+
: undefined;
|
|
64
|
+
const header = section ? (_jsx(StatusRows, { items: section.items, heading: section.title })) : (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: COLORS.muted, dimColor: true, children: t.loading }) }));
|
|
65
|
+
return (_jsx(MainMenu, { language: language, onSelect: onSelect, onSwapLang: onSwapLang, onQuit: onQuit, outdatedClientNames: outdatedClientNames, updateState: update, title: t.title, header: header, onOpenMenu: { run: onOpenMenu, label: t.menu } }));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/ui/screens/status.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobshimo/browser-link",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.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",
|