@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
|
@@ -4,22 +4,42 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>browser-link</title>
|
|
6
6
|
<style>
|
|
7
|
+
/* v0.9.0 popup — faithful to Claude Design's Bridge variant.
|
|
8
|
+
*
|
|
9
|
+
* Slate-blue palette (refined from the bright-cyan blues of the
|
|
10
|
+
* previous popup), cleaner SVG mark (viewBox 64, stroke 5), per-
|
|
11
|
+
* state coloured ring on the status card, capitalised "loopback
|
|
12
|
+
* only" sub-line. Visual refresh only — the popup ↔ background
|
|
13
|
+
* message protocol is unchanged. */
|
|
7
14
|
:root {
|
|
8
|
-
--brand-from: #
|
|
9
|
-
--brand-to: #
|
|
15
|
+
--brand-from: #5b8def;
|
|
16
|
+
--brand-to: #2a5fd6;
|
|
17
|
+
--brand-ring: rgba(29, 78, 216, 0.32);
|
|
18
|
+
|
|
10
19
|
--bg: #ffffff;
|
|
11
20
|
--bg-soft: #f8fafc;
|
|
12
21
|
--border: #e2e8f0;
|
|
22
|
+
|
|
13
23
|
--text: #0f172a;
|
|
14
24
|
--text-muted: #64748b;
|
|
15
25
|
--text-faint: #94a3b8;
|
|
16
|
-
|
|
26
|
+
|
|
27
|
+
--idle-fg: #b45309;
|
|
28
|
+
--idle-soft: #fffbeb;
|
|
29
|
+
--idle-ring: rgba(245, 158, 11, 0.18);
|
|
30
|
+
|
|
31
|
+
--connecting-fg: #1d4ed8;
|
|
32
|
+
--connecting-soft: #eff6ff;
|
|
33
|
+
--connecting-ring: rgba(29, 78, 216, 0.18);
|
|
34
|
+
|
|
35
|
+
--connected-fg: #047857;
|
|
17
36
|
--connected-soft: #ecfdf5;
|
|
18
37
|
--connected-ring: rgba(16, 185, 129, 0.18);
|
|
19
|
-
|
|
20
|
-
--
|
|
21
|
-
--error: #ef4444;
|
|
38
|
+
|
|
39
|
+
--error-fg: #b91c1c;
|
|
22
40
|
--error-soft: #fef2f2;
|
|
41
|
+
--error-ring: rgba(239, 68, 68, 0.18);
|
|
42
|
+
|
|
23
43
|
--shadow: 0 1px 0 rgba(15, 23, 42, 0.04), 0 8px 24px rgba(15, 23, 42, 0.06);
|
|
24
44
|
}
|
|
25
45
|
|
|
@@ -31,7 +51,14 @@
|
|
|
31
51
|
body {
|
|
32
52
|
margin: 0;
|
|
33
53
|
padding: 0;
|
|
34
|
-
font-family:
|
|
54
|
+
font-family:
|
|
55
|
+
ui-sans-serif,
|
|
56
|
+
-apple-system,
|
|
57
|
+
BlinkMacSystemFont,
|
|
58
|
+
'Inter',
|
|
59
|
+
'Segoe UI',
|
|
60
|
+
system-ui,
|
|
61
|
+
sans-serif;
|
|
35
62
|
font-size: 13px;
|
|
36
63
|
color: var(--text);
|
|
37
64
|
background: var(--bg);
|
|
@@ -41,29 +68,29 @@
|
|
|
41
68
|
body {
|
|
42
69
|
width: 320px;
|
|
43
70
|
background:
|
|
44
|
-
radial-gradient(circle at top right, rgba(
|
|
45
|
-
radial-gradient(circle at top left, rgba(
|
|
71
|
+
radial-gradient(circle at top right, rgba(91, 141, 239, 0.08), transparent 55%),
|
|
72
|
+
radial-gradient(circle at top left, rgba(42, 95, 214, 0.05), transparent 50%), var(--bg);
|
|
46
73
|
}
|
|
47
74
|
|
|
48
75
|
.shell {
|
|
49
|
-
padding:
|
|
76
|
+
padding: 14px 14px 12px;
|
|
50
77
|
}
|
|
51
78
|
|
|
52
79
|
header {
|
|
53
80
|
display: flex;
|
|
54
81
|
align-items: center;
|
|
55
82
|
gap: 10px;
|
|
56
|
-
margin-bottom:
|
|
83
|
+
margin-bottom: 12px;
|
|
57
84
|
}
|
|
58
85
|
|
|
59
86
|
.mark {
|
|
60
87
|
width: 28px;
|
|
61
88
|
height: 28px;
|
|
62
89
|
border-radius: 8px;
|
|
63
|
-
background: linear-gradient(
|
|
90
|
+
background: linear-gradient(160deg, var(--brand-from) 0%, var(--brand-to) 100%);
|
|
64
91
|
box-shadow:
|
|
65
|
-
0 1px 0 rgba(255, 255, 255, 0.
|
|
66
|
-
0 6px 14px
|
|
92
|
+
0 1px 0 rgba(255, 255, 255, 0.5) inset,
|
|
93
|
+
0 6px 14px var(--brand-ring);
|
|
67
94
|
display: flex;
|
|
68
95
|
align-items: center;
|
|
69
96
|
justify-content: center;
|
|
@@ -78,7 +105,7 @@
|
|
|
78
105
|
.title {
|
|
79
106
|
display: flex;
|
|
80
107
|
flex-direction: column;
|
|
81
|
-
line-height: 1.
|
|
108
|
+
line-height: 1.15;
|
|
82
109
|
}
|
|
83
110
|
|
|
84
111
|
.title strong {
|
|
@@ -90,7 +117,7 @@
|
|
|
90
117
|
.title span {
|
|
91
118
|
font-size: 11px;
|
|
92
119
|
color: var(--text-faint);
|
|
93
|
-
margin-top:
|
|
120
|
+
margin-top: 1px;
|
|
94
121
|
}
|
|
95
122
|
|
|
96
123
|
.card {
|
|
@@ -99,13 +126,16 @@
|
|
|
99
126
|
border-radius: 10px;
|
|
100
127
|
padding: 12px 14px;
|
|
101
128
|
box-shadow: var(--shadow);
|
|
129
|
+
transition:
|
|
130
|
+
background 0.18s ease,
|
|
131
|
+
border-color 0.18s ease;
|
|
102
132
|
}
|
|
103
133
|
|
|
104
134
|
.status-row {
|
|
105
135
|
display: flex;
|
|
106
136
|
align-items: center;
|
|
107
137
|
gap: 8px;
|
|
108
|
-
font-weight:
|
|
138
|
+
font-weight: 600;
|
|
109
139
|
font-size: 12.5px;
|
|
110
140
|
}
|
|
111
141
|
|
|
@@ -118,30 +148,56 @@
|
|
|
118
148
|
position: relative;
|
|
119
149
|
}
|
|
120
150
|
|
|
151
|
+
/* Per-state palette — background tints the card softly, the dot
|
|
152
|
+
* and the label match the state hue, and the connected state pulses
|
|
153
|
+
* a halo so the user spots it from across the screen. */
|
|
154
|
+
.card[data-state='idle'] {
|
|
155
|
+
background: var(--idle-soft);
|
|
156
|
+
border-color: var(--idle-ring);
|
|
157
|
+
}
|
|
158
|
+
.card[data-state='idle'] .dot {
|
|
159
|
+
background: var(--idle-fg);
|
|
160
|
+
}
|
|
161
|
+
.card[data-state='idle'] .status-label {
|
|
162
|
+
color: var(--idle-fg);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.card[data-state='connecting'] {
|
|
166
|
+
background: var(--connecting-soft);
|
|
167
|
+
border-color: var(--connecting-ring);
|
|
168
|
+
}
|
|
169
|
+
.card[data-state='connecting'] .dot {
|
|
170
|
+
background: var(--connecting-fg);
|
|
171
|
+
}
|
|
172
|
+
.card[data-state='connecting'] .status-label {
|
|
173
|
+
color: var(--connecting-fg);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.card[data-state='connected'] {
|
|
177
|
+
background: var(--connected-soft);
|
|
178
|
+
border-color: var(--connected-ring);
|
|
179
|
+
}
|
|
121
180
|
.card[data-state='connected'] .dot {
|
|
122
|
-
background: var(--connected);
|
|
181
|
+
background: var(--connected-fg);
|
|
123
182
|
box-shadow: 0 0 0 0 var(--connected-ring);
|
|
124
183
|
animation: pulse 1.8s ease-in-out infinite;
|
|
125
184
|
}
|
|
126
|
-
|
|
127
185
|
.card[data-state='connected'] .status-label {
|
|
128
|
-
color: var(--connected);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.card[data-state='idle'] .dot {
|
|
132
|
-
background: var(--idle);
|
|
186
|
+
color: var(--connected-fg);
|
|
133
187
|
}
|
|
134
188
|
|
|
135
|
-
.card[data-state='
|
|
136
|
-
|
|
189
|
+
.card[data-state='error'],
|
|
190
|
+
.card[data-state='portCollision'] {
|
|
191
|
+
background: var(--error-soft);
|
|
192
|
+
border-color: var(--error-ring);
|
|
137
193
|
}
|
|
138
|
-
|
|
139
|
-
.card[data-state='
|
|
140
|
-
background: var(--error);
|
|
194
|
+
.card[data-state='error'] .dot,
|
|
195
|
+
.card[data-state='portCollision'] .dot {
|
|
196
|
+
background: var(--error-fg);
|
|
141
197
|
}
|
|
142
|
-
|
|
143
|
-
.card[data-state='
|
|
144
|
-
color: var(--error);
|
|
198
|
+
.card[data-state='error'] .status-label,
|
|
199
|
+
.card[data-state='portCollision'] .status-label {
|
|
200
|
+
color: var(--error-fg);
|
|
145
201
|
}
|
|
146
202
|
|
|
147
203
|
@keyframes pulse {
|
|
@@ -158,11 +214,12 @@
|
|
|
158
214
|
|
|
159
215
|
.tab-id {
|
|
160
216
|
margin-left: auto;
|
|
161
|
-
font-family:
|
|
217
|
+
font-family:
|
|
218
|
+
'JetBrains Mono', 'SF Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;
|
|
162
219
|
font-size: 11px;
|
|
163
220
|
padding: 2px 7px;
|
|
164
221
|
border-radius: 5px;
|
|
165
|
-
background: rgba(15, 23, 42, 0.
|
|
222
|
+
background: rgba(15, 23, 42, 0.06);
|
|
166
223
|
color: var(--text-muted);
|
|
167
224
|
font-weight: 500;
|
|
168
225
|
letter-spacing: 0.01em;
|
|
@@ -171,8 +228,9 @@
|
|
|
171
228
|
.url {
|
|
172
229
|
margin-top: 10px;
|
|
173
230
|
padding-top: 10px;
|
|
174
|
-
border-top: 1px solid
|
|
175
|
-
font-family:
|
|
231
|
+
border-top: 1px solid rgba(15, 23, 42, 0.06);
|
|
232
|
+
font-family:
|
|
233
|
+
'JetBrains Mono', 'SF Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;
|
|
176
234
|
font-size: 11px;
|
|
177
235
|
color: var(--text-muted);
|
|
178
236
|
word-break: break-all;
|
|
@@ -185,6 +243,25 @@
|
|
|
185
243
|
-webkit-box-orient: vertical;
|
|
186
244
|
}
|
|
187
245
|
|
|
246
|
+
/* Explanation slot — shown for portCollision, hidden otherwise.
|
|
247
|
+
* popup.ts toggles `.explanation` content + visibility. */
|
|
248
|
+
.explanation {
|
|
249
|
+
margin-top: 10px;
|
|
250
|
+
padding-top: 10px;
|
|
251
|
+
border-top: 1px solid rgba(15, 23, 42, 0.06);
|
|
252
|
+
font-size: 12px;
|
|
253
|
+
color: var(--text-muted);
|
|
254
|
+
line-height: 1.45;
|
|
255
|
+
}
|
|
256
|
+
.explanation code {
|
|
257
|
+
font-family:
|
|
258
|
+
'JetBrains Mono', 'SF Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;
|
|
259
|
+
font-size: 11px;
|
|
260
|
+
background: rgba(15, 23, 42, 0.06);
|
|
261
|
+
padding: 0 4px;
|
|
262
|
+
border-radius: 3px;
|
|
263
|
+
}
|
|
264
|
+
|
|
188
265
|
button {
|
|
189
266
|
margin-top: 12px;
|
|
190
267
|
width: 100%;
|
|
@@ -207,9 +284,9 @@
|
|
|
207
284
|
}
|
|
208
285
|
|
|
209
286
|
button.primary {
|
|
210
|
-
background: linear-gradient(
|
|
287
|
+
background: linear-gradient(160deg, var(--brand-from) 0%, var(--brand-to) 100%);
|
|
211
288
|
color: #ffffff;
|
|
212
|
-
box-shadow: 0 6px 14px
|
|
289
|
+
box-shadow: 0 6px 14px var(--brand-ring);
|
|
213
290
|
}
|
|
214
291
|
|
|
215
292
|
button.primary:hover:not(:disabled) {
|
|
@@ -218,8 +295,8 @@
|
|
|
218
295
|
|
|
219
296
|
button.danger {
|
|
220
297
|
background: #ffffff;
|
|
221
|
-
color: var(--error);
|
|
222
|
-
|
|
298
|
+
color: var(--error-fg);
|
|
299
|
+
box-shadow: inset 0 0 0 1px var(--error-fg);
|
|
223
300
|
}
|
|
224
301
|
|
|
225
302
|
button.danger:hover:not(:disabled) {
|
|
@@ -232,12 +309,13 @@
|
|
|
232
309
|
}
|
|
233
310
|
|
|
234
311
|
.footer {
|
|
235
|
-
margin-top:
|
|
312
|
+
margin-top: 10px;
|
|
236
313
|
font-size: 10.5px;
|
|
237
314
|
color: var(--text-faint);
|
|
238
315
|
text-align: center;
|
|
239
|
-
letter-spacing: 0.
|
|
316
|
+
letter-spacing: 0.06em;
|
|
240
317
|
text-transform: uppercase;
|
|
318
|
+
font-weight: 500;
|
|
241
319
|
}
|
|
242
320
|
</style>
|
|
243
321
|
</head>
|
|
@@ -246,21 +324,20 @@
|
|
|
246
324
|
<header>
|
|
247
325
|
<div class="mark" aria-hidden="true">
|
|
248
326
|
<svg
|
|
249
|
-
viewBox="0 0
|
|
327
|
+
viewBox="0 0 64 64"
|
|
250
328
|
fill="none"
|
|
251
329
|
stroke="currentColor"
|
|
252
|
-
stroke-width="
|
|
330
|
+
stroke-width="5"
|
|
253
331
|
stroke-linecap="round"
|
|
254
|
-
stroke-linejoin="round"
|
|
255
332
|
>
|
|
256
|
-
<path d="
|
|
257
|
-
<path d="
|
|
258
|
-
<line x1="
|
|
333
|
+
<path d="M22 22 L14 22 A10 10 0 0 0 14 42 L22 42" />
|
|
334
|
+
<path d="M42 22 L50 22 A10 10 0 0 1 50 42 L42 42" />
|
|
335
|
+
<line x1="20" y1="32" x2="44" y2="32" />
|
|
259
336
|
</svg>
|
|
260
337
|
</div>
|
|
261
338
|
<div class="title">
|
|
262
339
|
<strong>browser-link</strong>
|
|
263
|
-
<span>MCP bridge
|
|
340
|
+
<span>MCP bridge · per-tab manual</span>
|
|
264
341
|
</div>
|
|
265
342
|
</header>
|
|
266
343
|
|
|
@@ -271,11 +348,12 @@
|
|
|
271
348
|
<span id="tab-id" class="tab-id" hidden></span>
|
|
272
349
|
</div>
|
|
273
350
|
<div id="url" class="url"></div>
|
|
351
|
+
<div id="explanation" class="explanation" hidden></div>
|
|
274
352
|
</div>
|
|
275
353
|
|
|
276
354
|
<button id="action" class="primary" disabled>…</button>
|
|
277
355
|
|
|
278
|
-
<div class="footer">manual · per-tab · loopback</div>
|
|
356
|
+
<div class="footer">manual · per-tab · loopback only</div>
|
|
279
357
|
</div>
|
|
280
358
|
|
|
281
359
|
<script type="module" src="popup.js"></script>
|
package/dist/extension/popup.js
CHANGED
|
@@ -34,6 +34,19 @@ function setStatus(state, label, tabId) {
|
|
|
34
34
|
tabIdEl.textContent = '';
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
// Optional explanation row, shown under the URL on portCollision (and
|
|
38
|
+
// reserved for any future state that wants to teach the user what to do
|
|
39
|
+
// next inside the popup). Pass null to hide.
|
|
40
|
+
function setExplanation(html) {
|
|
41
|
+
const el = $('explanation');
|
|
42
|
+
if (html === null) {
|
|
43
|
+
el.hidden = true;
|
|
44
|
+
el.innerHTML = '';
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
el.hidden = false;
|
|
48
|
+
el.innerHTML = html;
|
|
49
|
+
}
|
|
37
50
|
function setAction(label, variant, disabled = false) {
|
|
38
51
|
const btn = $('action');
|
|
39
52
|
btn.textContent = label;
|
|
@@ -47,31 +60,37 @@ async function refresh() {
|
|
|
47
60
|
setStatus('error', 'No active tab');
|
|
48
61
|
setAction('Open a tab first', 'primary', true);
|
|
49
62
|
urlEl.textContent = '';
|
|
63
|
+
setExplanation(null);
|
|
50
64
|
return;
|
|
51
65
|
}
|
|
52
66
|
urlEl.textContent = tab.url ?? '';
|
|
67
|
+
setExplanation(null);
|
|
53
68
|
const status = await send({
|
|
54
69
|
action: 'status',
|
|
55
70
|
tabId: tab.id,
|
|
56
71
|
});
|
|
57
72
|
if (status.connected) {
|
|
58
73
|
setStatus('connected', 'Connected', status.serverTabId);
|
|
59
|
-
setAction('Disconnect', 'danger');
|
|
74
|
+
setAction('Disconnect this tab', 'danger');
|
|
60
75
|
}
|
|
61
76
|
else {
|
|
62
77
|
setStatus('idle', 'Not connected');
|
|
63
|
-
setAction('Connect', 'primary');
|
|
78
|
+
setAction('Connect this tab', 'primary');
|
|
64
79
|
}
|
|
65
80
|
}
|
|
66
81
|
async function onAction() {
|
|
67
82
|
const tab = await getCurrentTab();
|
|
68
83
|
if (!tab?.id)
|
|
69
84
|
return;
|
|
70
|
-
setAction('Working…', 'primary', true);
|
|
71
85
|
const status = await send({
|
|
72
86
|
action: 'status',
|
|
73
87
|
tabId: tab.id,
|
|
74
88
|
});
|
|
89
|
+
// Transient "connecting" state — the card flips to the blue palette so
|
|
90
|
+
// the user sees something is happening even if the round-trip to the
|
|
91
|
+
// server takes a beat.
|
|
92
|
+
setStatus('connecting', status.connected ? 'Disconnecting…' : 'Connecting…');
|
|
93
|
+
setAction(status.connected ? 'Disconnecting…' : 'Connecting…', 'primary', true);
|
|
75
94
|
if (status.connected) {
|
|
76
95
|
await send({ action: 'disconnect', tabId: tab.id });
|
|
77
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popup.js","sourceRoot":"","sources":["../src/popup.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"popup.js","sourceRoot":"","sources":["../src/popup.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -26,41 +26,6 @@ function buildListTabs(tabs) {
|
|
|
26
26
|
title: t.title,
|
|
27
27
|
}));
|
|
28
28
|
}
|
|
29
|
-
/**
|
|
30
|
-
* When the MCP client (Claude / OpenCode / Copilot) closes the stdio pipe,
|
|
31
|
-
* the OS does NOT reliably deliver SIGTERM to this child — especially on
|
|
32
|
-
* Windows, where signal forwarding from parent to child is best-effort.
|
|
33
|
-
* Without this guard the server stays alive holding port 17529, and the
|
|
34
|
-
* next client crashes with EADDRINUSE.
|
|
35
|
-
*
|
|
36
|
-
* Listening on `end`/`close` of stdin covers both roles (primary and proxy)
|
|
37
|
-
* because both depend on the parent's stdio remaining open. The handler is
|
|
38
|
-
* installed at the very top of runServer() so it's active during any
|
|
39
|
-
* pre-bind awaits as well.
|
|
40
|
-
*/
|
|
41
|
-
function installParentDeathGuard() {
|
|
42
|
-
let exiting = false;
|
|
43
|
-
const onParentGone = () => {
|
|
44
|
-
if (exiting)
|
|
45
|
-
return;
|
|
46
|
-
exiting = true;
|
|
47
|
-
try {
|
|
48
|
-
closeDb();
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
// Best effort during shutdown — the OS reclaims the handle on exit.
|
|
52
|
-
}
|
|
53
|
-
process.exit(0);
|
|
54
|
-
};
|
|
55
|
-
process.stdin.once('end', onParentGone);
|
|
56
|
-
process.stdin.once('close', onParentGone);
|
|
57
|
-
// Some Node versions on Windows surface parent-closed-stdio as an EPIPE
|
|
58
|
-
// on stdout writes. Don't crash the process for that — exit cleanly.
|
|
59
|
-
process.stdout.on('error', (err) => {
|
|
60
|
-
if (err.code === 'EPIPE')
|
|
61
|
-
onParentGone();
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
29
|
/**
|
|
65
30
|
* Entry point used by the MCP client over stdio. Decides whether THIS
|
|
66
31
|
* process becomes the primary (binds 17529, runs the WS bridge + MCP
|
|
@@ -69,7 +34,13 @@ function installParentDeathGuard() {
|
|
|
69
34
|
* forwards MCP stdio frames to the primary over IPC.
|
|
70
35
|
*/
|
|
71
36
|
export async function runServer() {
|
|
72
|
-
|
|
37
|
+
// The bridge stays alive when the MCP client closes its stdio. The
|
|
38
|
+
// connected Chrome tabs keep talking to the WS bridge until the user
|
|
39
|
+
// explicitly disconnects them from the extension popup, or the WS
|
|
40
|
+
// hits its inactivity TTL on the client side. If a zombie ever holds
|
|
41
|
+
// 17529 after a crash, `runPrimary` falls back to proxy mode (when
|
|
42
|
+
// multi-agent is on) or surfaces a clean EADDRINUSE error pointing
|
|
43
|
+
// the user at `browser-link stop`.
|
|
73
44
|
const cfg = loadConfig();
|
|
74
45
|
try {
|
|
75
46
|
await runPrimary(cfg);
|
|
@@ -148,6 +119,41 @@ async function runPrimary(cfg) {
|
|
|
148
119
|
callBrowserTool: buildCallBrowserTool(tabs, pendingRequests),
|
|
149
120
|
recentEvents: (opts) => events.recent(opts),
|
|
150
121
|
tabClaims,
|
|
122
|
+
resetBridge: () => {
|
|
123
|
+
// Close every WS to the extension first so the client side flips to
|
|
124
|
+
// "Not connected" before we drop the local state. Best-effort: a tab
|
|
125
|
+
// whose socket already died just no-ops.
|
|
126
|
+
const droppedTabs = tabs.size;
|
|
127
|
+
for (const session of tabs.values()) {
|
|
128
|
+
try {
|
|
129
|
+
session.ws.close();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
/* socket already gone */
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
tabs.clear();
|
|
136
|
+
// Reject every pending tool request so the caller does not hang.
|
|
137
|
+
for (const pending of pendingRequests.values()) {
|
|
138
|
+
clearTimeout(pending.timeout);
|
|
139
|
+
pending.reject(new Error('browser.reset: bridge state was wiped'));
|
|
140
|
+
}
|
|
141
|
+
pendingRequests.clear();
|
|
142
|
+
const releasedClaims = tabClaims.releaseAll().length;
|
|
143
|
+
const clearedEvents = events.clear();
|
|
144
|
+
// First event of the fresh state — keeps `browser.events` honest.
|
|
145
|
+
events.add('primary-elected', {
|
|
146
|
+
pid: process.pid,
|
|
147
|
+
multiAgent: cfg.multiAgent === true,
|
|
148
|
+
reason: 'reset',
|
|
149
|
+
});
|
|
150
|
+
log(`browser.reset: dropped ${droppedTabs} tab(s), released ${releasedClaims} claim(s), cleared ${clearedEvents} event(s).`);
|
|
151
|
+
return {
|
|
152
|
+
dropped_tabs: droppedTabs,
|
|
153
|
+
released_claims: releasedClaims,
|
|
154
|
+
cleared_events: clearedEvents,
|
|
155
|
+
};
|
|
156
|
+
},
|
|
151
157
|
};
|
|
152
158
|
// The primary's own MCP client (Claude/Copilot/OpenCode connecting via stdio
|
|
153
159
|
// directly to THIS process) always uses this caller identity. Proxies that
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EACL,OAAO,EACP,OAAO,EACP,WAAW,EACX,eAAe,EACf,aAAa,GAGd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAE5B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAA6B,EAC7B,eAA4C;IAE5C,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAE,EAAE,CAC7D,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B;IAClD,OAAO,GAAG,EAAE,CACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,KAAK;QACf,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;AACR,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -310,5 +310,21 @@ export const BROWSER_TOOL_DEFINITIONS = [
|
|
|
310
310
|
],
|
|
311
311
|
},
|
|
312
312
|
},
|
|
313
|
+
{
|
|
314
|
+
name: 'browser.reset',
|
|
315
|
+
description: 'Soft-reset the bridge state. Drops every connected tab session, releases every claim, and clears the in-memory event log — but does NOT kill the MCP server itself. The user has to re-press Connect in the extension popup for each tab they want back. Use this when the bridge state looks inconsistent (stale tab_ids that browser.events does not explain, tab.click that hangs, claims you cannot release through normal means) and you are sure a clean slate is the right move.',
|
|
316
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
317
|
+
doc: {
|
|
318
|
+
purpose: 'Soft-reset the bridge: drop tab sessions + claims + event log, keep the MCP server alive.',
|
|
319
|
+
when_to_use: [
|
|
320
|
+
'Bridge state looks inconsistent (stale tab_ids, hung action tools, claims you cannot release).',
|
|
321
|
+
'You explicitly want to start the bridge state from scratch without killing the MCP server.',
|
|
322
|
+
],
|
|
323
|
+
gotchas: [
|
|
324
|
+
'This drops every tab the user had connected — they will need to re-press Connect in the extension popup for each one.',
|
|
325
|
+
'Use sparingly. Most "tab not connected" cases resolve via browser.events showing a tab-renamed entry, not via reset.',
|
|
326
|
+
],
|
|
327
|
+
},
|
|
328
|
+
},
|
|
313
329
|
];
|
|
314
330
|
//# sourceMappingURL=browser-definitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-definitions.js","sourceRoot":"","sources":["../../src/tools/browser-definitions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-definitions.js","sourceRoot":"","sources":["../../src/tools/browser-definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dispatcher for browser.* tools. Mirrors the shape of the map dispatcher
|
|
3
|
-
* (`handleMapTool` / `isMapTool`) so both families look the same from
|
|
4
|
-
* runServer().
|
|
5
|
-
*
|
|
6
|
-
* The handlers do not own state: they receive a `BrowserToolDeps` object
|
|
7
|
-
* with the live tab map, the call function, and the claim registry. This
|
|
8
|
-
* makes the dispatcher unit-testable with a fake `callBrowserTool` and a
|
|
9
|
-
* fresh `TabClaimRegistry`.
|
|
10
|
-
*
|
|
11
|
-
* Each invocation also receives an `AgentCaller` so claim/ownership
|
|
12
|
-
* decisions can be made per request. The bridge layers (primary's stdio
|
|
13
|
-
* handler + IPC server) are responsible for supplying it.
|
|
14
|
-
*/
|
|
15
1
|
import type { BridgeEvent } from '../bridge/events.js';
|
|
16
2
|
import { type AgentCaller, type TabClaimRegistry } from './tab-claims.js';
|
|
17
3
|
export interface TabSnapshot {
|
|
@@ -48,6 +34,14 @@ export interface BrowserToolDeps {
|
|
|
48
34
|
* absent the dispatcher behaves as before (no enforcement, list_tabs
|
|
49
35
|
* returns claimed_by:null for every tab). */
|
|
50
36
|
tabClaims?: TabClaimRegistry;
|
|
37
|
+
/** Soft-reset entry point for `browser.reset`. Drops every connected tab
|
|
38
|
+
* session, releases every claim, clears the event log — without killing
|
|
39
|
+
* the MCP server. Optional so unit tests can omit it. */
|
|
40
|
+
resetBridge?(): {
|
|
41
|
+
dropped_tabs: number;
|
|
42
|
+
released_claims: number;
|
|
43
|
+
cleared_events: number;
|
|
44
|
+
};
|
|
51
45
|
}
|
|
52
46
|
export declare function isBrowserTool(name: string): boolean;
|
|
53
47
|
/**
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
function handleReset(deps) {
|
|
2
|
+
if (!deps.resetBridge) {
|
|
3
|
+
return { ok: false, reason: 'reset-not-supported' };
|
|
4
|
+
}
|
|
5
|
+
const result = deps.resetBridge();
|
|
6
|
+
return { ok: true, ...result };
|
|
7
|
+
}
|
|
1
8
|
/**
|
|
2
9
|
* Dispatcher for browser.* tools. Mirrors the shape of the map dispatcher
|
|
3
10
|
* (`handleMapTool` / `isMapTool`) so both families look the same from
|
|
@@ -33,6 +40,7 @@ const BROWSER_TOOL_NAMES = [
|
|
|
33
40
|
'browser.type',
|
|
34
41
|
'browser.evaluate',
|
|
35
42
|
'browser.events',
|
|
43
|
+
'browser.reset',
|
|
36
44
|
];
|
|
37
45
|
const BROWSER_TOOL_NAME_SET = new Set(BROWSER_TOOL_NAMES);
|
|
38
46
|
export function isBrowserTool(name) {
|
|
@@ -180,6 +188,8 @@ export async function handleBrowserTool(name, args, deps, caller) {
|
|
|
180
188
|
}
|
|
181
189
|
case 'browser.events':
|
|
182
190
|
return handleEvents(args, deps);
|
|
191
|
+
case 'browser.reset':
|
|
192
|
+
return handleReset(deps);
|
|
183
193
|
default: {
|
|
184
194
|
// The earlier `isBrowserTool(name)` check makes this branch unreachable
|
|
185
195
|
// for any value within `BrowserToolName`. The exhaustive cast surfaces a
|