@xnng/browser-relay 1.6.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 (79) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +445 -0
  3. package/docs/README.zh-CN.md +421 -0
  4. package/docs/benchmarks/browser-gaps-codex-ax.json +418 -0
  5. package/docs/benchmarks/browser-gaps-relay-after.json +655 -0
  6. package/docs/benchmarks/browser-gaps-relay-baseline.json +679 -0
  7. package/docs/benchmarks/browser-readiness-cost.json +106 -0
  8. package/docs/benchmarks/browser-runtime-balanced-headed.json +412 -0
  9. package/docs/benchmarks/browser-runtime-balanced-rtt50.json +412 -0
  10. package/docs/benchmarks/browser-runtime-balanced.json +412 -0
  11. package/docs/benchmarks/browser-runtime-rtt50.json +194 -0
  12. package/docs/benchmarks/browser-runtime.json +254 -0
  13. package/docs/benchmarks/browser-use-parity.json +54 -0
  14. package/docs/benchmarks/codex-extension-audit.json +131 -0
  15. package/docs/benchmarks/codex-native-protocol.md +69 -0
  16. package/docs/benchmarks/codex-native-replay.js +116 -0
  17. package/docs/benchmarks/codex-native-status.json +81 -0
  18. package/docs/benchmarks/codex-native.json +1003 -0
  19. package/docs/benchmarks/extension-sessions.png +0 -0
  20. package/docs/benchmarks/extension-tasks.png +0 -0
  21. package/docs/benchmarks/iframe-routing-regression.json +37 -0
  22. package/docs/browser-use-comparison.md +331 -0
  23. package/docs/browser-use-gap-audit.md +141 -0
  24. package/docs/browser-use-parity.md +105 -0
  25. package/docs/demo/intranet.html +103 -0
  26. package/docs/releases/v1.5.0.md +59 -0
  27. package/docs/releases/v1.5.1.md +16 -0
  28. package/docs/releases/v1.5.2.md +42 -0
  29. package/docs/releases/v1.5.3.md +33 -0
  30. package/docs/releases/v1.5.4.md +42 -0
  31. package/docs/releases/v1.6.0.md +16 -0
  32. package/docs/remote-control-hub.md +523 -0
  33. package/extension/activity.js +328 -0
  34. package/extension/automation.js +1839 -0
  35. package/extension/background.js +1854 -0
  36. package/extension/i18n.js +149 -0
  37. package/extension/icons/icon128.png +0 -0
  38. package/extension/icons/icon16.png +0 -0
  39. package/extension/icons/icon32.png +0 -0
  40. package/extension/icons/icon48.png +0 -0
  41. package/extension/manifest.json +47 -0
  42. package/extension/observations.js +109 -0
  43. package/extension/options.html +289 -0
  44. package/extension/options.js +269 -0
  45. package/extension/popup.html +74 -0
  46. package/extension/popup.js +105 -0
  47. package/extension/protocol.js +45 -0
  48. package/extension/remote-auth.js +18 -0
  49. package/extension/sessions.js +134 -0
  50. package/extension/snapshot.js +161 -0
  51. package/extension/task-groups.js +108 -0
  52. package/extension/tasks.js +186 -0
  53. package/extension/wait.js +89 -0
  54. package/hub/README.md +42 -0
  55. package/hub/package-lock.json +1544 -0
  56. package/hub/package.json +13 -0
  57. package/hub/src/rpc.js +41 -0
  58. package/hub/src/worker.js +322 -0
  59. package/hub/wrangler.example.toml +19 -0
  60. package/package.json +83 -0
  61. package/server/cdp-bridge.js +200 -0
  62. package/server/cli.js +1798 -0
  63. package/server/hub-server.js +258 -0
  64. package/server/install.js +250 -0
  65. package/server/mcp-server.js +504 -0
  66. package/server/npx-runner.js +96 -0
  67. package/server/relay-server.js +1356 -0
  68. package/server/remote-protocol.js +76 -0
  69. package/server/runtime-worker.js +166 -0
  70. package/server/script-runtime.js +189 -0
  71. package/server/sdk.js +307 -0
  72. package/server/service-state.js +103 -0
  73. package/server/snapshot.js +161 -0
  74. package/server/uninstall.js +61 -0
  75. package/server/windows-service-entry.js +58 -0
  76. package/server/windows-service.js +360 -0
  77. package/skills/browser-relay/SKILL.md +192 -0
  78. package/skills/browser-relay/references/legacy-api.md +163 -0
  79. package/skills/browser-relay/references/runtime.md +240 -0
@@ -0,0 +1,106 @@
1
+ {
2
+ "measuredAt": "2026-09-09T06:39:24.890Z",
3
+ "scope": "Relay only. Already-ready Add row control; action and final observation timed, setup and independent outcome assertion excluded. Measures opt-in stability waiting overhead, not a model comparison.",
4
+ "browser": "153.0.8010.12",
5
+ "viewport": {
6
+ "width": 1466,
7
+ "height": 925
8
+ },
9
+ "headless": false,
10
+ "summary": {
11
+ "0": {
12
+ "runs": 7,
13
+ "elapsedMs": 36.9
14
+ },
15
+ "2000": {
16
+ "runs": 7,
17
+ "elapsedMs": 85.2
18
+ }
19
+ },
20
+ "samples": [
21
+ {
22
+ "iteration": 0,
23
+ "readinessTimeoutMs": 0,
24
+ "elapsedMs": 89.2,
25
+ "success": true
26
+ },
27
+ {
28
+ "iteration": 0,
29
+ "readinessTimeoutMs": 2000,
30
+ "elapsedMs": 91.3,
31
+ "success": true
32
+ },
33
+ {
34
+ "iteration": 1,
35
+ "readinessTimeoutMs": 2000,
36
+ "elapsedMs": 88.3,
37
+ "success": true
38
+ },
39
+ {
40
+ "iteration": 1,
41
+ "readinessTimeoutMs": 0,
42
+ "elapsedMs": 36.9,
43
+ "success": true
44
+ },
45
+ {
46
+ "iteration": 2,
47
+ "readinessTimeoutMs": 0,
48
+ "elapsedMs": 43.7,
49
+ "success": true
50
+ },
51
+ {
52
+ "iteration": 2,
53
+ "readinessTimeoutMs": 2000,
54
+ "elapsedMs": 84.4,
55
+ "success": true
56
+ },
57
+ {
58
+ "iteration": 3,
59
+ "readinessTimeoutMs": 2000,
60
+ "elapsedMs": 85,
61
+ "success": true
62
+ },
63
+ {
64
+ "iteration": 3,
65
+ "readinessTimeoutMs": 0,
66
+ "elapsedMs": 38,
67
+ "success": true
68
+ },
69
+ {
70
+ "iteration": 4,
71
+ "readinessTimeoutMs": 0,
72
+ "elapsedMs": 33,
73
+ "success": true
74
+ },
75
+ {
76
+ "iteration": 4,
77
+ "readinessTimeoutMs": 2000,
78
+ "elapsedMs": 89.2,
79
+ "success": true
80
+ },
81
+ {
82
+ "iteration": 5,
83
+ "readinessTimeoutMs": 2000,
84
+ "elapsedMs": 85.2,
85
+ "success": true
86
+ },
87
+ {
88
+ "iteration": 5,
89
+ "readinessTimeoutMs": 0,
90
+ "elapsedMs": 32.4,
91
+ "success": true
92
+ },
93
+ {
94
+ "iteration": 6,
95
+ "readinessTimeoutMs": 0,
96
+ "elapsedMs": 32.6,
97
+ "success": true
98
+ },
99
+ {
100
+ "iteration": 6,
101
+ "readinessTimeoutMs": 2000,
102
+ "elapsedMs": 81.4,
103
+ "success": true
104
+ }
105
+ ]
106
+ }
@@ -0,0 +1,412 @@
1
+ {
2
+ "measuredAt": "2026-09-09T05:51:09.000Z",
3
+ "suite": "balanced",
4
+ "executionOrder": "rotating",
5
+ "injectedExtensionRttMs": 0,
6
+ "platform": "darwin",
7
+ "node": "v22.23.1",
8
+ "chromium": "153.0.8010.12",
9
+ "headless": false,
10
+ "viewport": {
11
+ "width": 1466,
12
+ "height": 925
13
+ },
14
+ "task": "Search invoice / owner Alice / active only; await visible result",
15
+ "scope": "Deterministic browser/tool execution; no model inference or token accounting. Playwright over Relay is not Codex Browser Use.",
16
+ "summary": {
17
+ "legacy": {
18
+ "runs": 8,
19
+ "successes": 8,
20
+ "elapsedMs": 265.25,
21
+ "httpCalls": 10,
22
+ "extensionRoundTrips": 39,
23
+ "responseBytes": 3521.5,
24
+ "snapshotBytes": 2301
25
+ },
26
+ "legacy-minimal": {
27
+ "runs": 8,
28
+ "successes": 8,
29
+ "elapsedMs": 262.95,
30
+ "httpCalls": 7,
31
+ "extensionRoundTrips": 30,
32
+ "responseBytes": 1670,
33
+ "snapshotBytes": 926
34
+ },
35
+ "actions": {
36
+ "runs": 8,
37
+ "successes": 8,
38
+ "elapsedMs": 258.4,
39
+ "httpCalls": 2,
40
+ "extensionRoundTrips": 2,
41
+ "responseBytes": 3922,
42
+ "snapshotBytes": 2202
43
+ },
44
+ "playwright-cdp": {
45
+ "runs": 8,
46
+ "successes": 8,
47
+ "elapsedMs": 264.5,
48
+ "httpCalls": 0,
49
+ "extensionRoundTrips": 73,
50
+ "responseBytes": null,
51
+ "snapshotBytes": 1425
52
+ }
53
+ },
54
+ "delta": {
55
+ "fullSnapshotBytes": 1880,
56
+ "changedSnapshotBytes": 160
57
+ },
58
+ "samples": [
59
+ {
60
+ "variant": "legacy",
61
+ "iteration": 0,
62
+ "position": 0,
63
+ "success": true,
64
+ "elapsedMs": 267.6,
65
+ "httpCalls": 10,
66
+ "extensionRoundTrips": 39,
67
+ "responseBytes": 3517,
68
+ "snapshotBytes": 2301
69
+ },
70
+ {
71
+ "variant": "legacy-minimal",
72
+ "iteration": 0,
73
+ "position": 1,
74
+ "success": true,
75
+ "elapsedMs": 253.9,
76
+ "httpCalls": 7,
77
+ "extensionRoundTrips": 30,
78
+ "responseBytes": 1669,
79
+ "snapshotBytes": 926
80
+ },
81
+ {
82
+ "variant": "actions",
83
+ "iteration": 0,
84
+ "position": 2,
85
+ "success": true,
86
+ "elapsedMs": 285.1,
87
+ "httpCalls": 2,
88
+ "extensionRoundTrips": 2,
89
+ "responseBytes": 3922,
90
+ "snapshotBytes": 2202
91
+ },
92
+ {
93
+ "variant": "playwright-cdp",
94
+ "iteration": 0,
95
+ "position": 3,
96
+ "success": true,
97
+ "elapsedMs": 272.8,
98
+ "httpCalls": 0,
99
+ "extensionRoundTrips": 73,
100
+ "responseBytes": null,
101
+ "snapshotBytes": 1425
102
+ },
103
+ {
104
+ "variant": "legacy-minimal",
105
+ "iteration": 1,
106
+ "position": 0,
107
+ "success": true,
108
+ "elapsedMs": 250,
109
+ "httpCalls": 7,
110
+ "extensionRoundTrips": 30,
111
+ "responseBytes": 1673,
112
+ "snapshotBytes": 926
113
+ },
114
+ {
115
+ "variant": "actions",
116
+ "iteration": 1,
117
+ "position": 1,
118
+ "success": true,
119
+ "elapsedMs": 244.1,
120
+ "httpCalls": 2,
121
+ "extensionRoundTrips": 2,
122
+ "responseBytes": 3922,
123
+ "snapshotBytes": 2202
124
+ },
125
+ {
126
+ "variant": "playwright-cdp",
127
+ "iteration": 1,
128
+ "position": 2,
129
+ "success": true,
130
+ "elapsedMs": 278.5,
131
+ "httpCalls": 0,
132
+ "extensionRoundTrips": 73,
133
+ "responseBytes": null,
134
+ "snapshotBytes": 1425
135
+ },
136
+ {
137
+ "variant": "legacy",
138
+ "iteration": 1,
139
+ "position": 3,
140
+ "success": true,
141
+ "elapsedMs": 267.8,
142
+ "httpCalls": 10,
143
+ "extensionRoundTrips": 39,
144
+ "responseBytes": 3517,
145
+ "snapshotBytes": 2301
146
+ },
147
+ {
148
+ "variant": "actions",
149
+ "iteration": 2,
150
+ "position": 0,
151
+ "success": true,
152
+ "elapsedMs": 245.1,
153
+ "httpCalls": 2,
154
+ "extensionRoundTrips": 2,
155
+ "responseBytes": 3922,
156
+ "snapshotBytes": 2202
157
+ },
158
+ {
159
+ "variant": "playwright-cdp",
160
+ "iteration": 2,
161
+ "position": 1,
162
+ "success": true,
163
+ "elapsedMs": 246.1,
164
+ "httpCalls": 0,
165
+ "extensionRoundTrips": 73,
166
+ "responseBytes": null,
167
+ "snapshotBytes": 1425
168
+ },
169
+ {
170
+ "variant": "legacy",
171
+ "iteration": 2,
172
+ "position": 2,
173
+ "success": true,
174
+ "elapsedMs": 292.1,
175
+ "httpCalls": 10,
176
+ "extensionRoundTrips": 39,
177
+ "responseBytes": 3537,
178
+ "snapshotBytes": 2301
179
+ },
180
+ {
181
+ "variant": "legacy-minimal",
182
+ "iteration": 2,
183
+ "position": 3,
184
+ "success": true,
185
+ "elapsedMs": 268.3,
186
+ "httpCalls": 7,
187
+ "extensionRoundTrips": 30,
188
+ "responseBytes": 1670,
189
+ "snapshotBytes": 926
190
+ },
191
+ {
192
+ "variant": "playwright-cdp",
193
+ "iteration": 3,
194
+ "position": 0,
195
+ "success": true,
196
+ "elapsedMs": 266.8,
197
+ "httpCalls": 0,
198
+ "extensionRoundTrips": 73,
199
+ "responseBytes": null,
200
+ "snapshotBytes": 1425
201
+ },
202
+ {
203
+ "variant": "legacy",
204
+ "iteration": 3,
205
+ "position": 1,
206
+ "success": true,
207
+ "elapsedMs": 260.4,
208
+ "httpCalls": 10,
209
+ "extensionRoundTrips": 39,
210
+ "responseBytes": 3517,
211
+ "snapshotBytes": 2301
212
+ },
213
+ {
214
+ "variant": "legacy-minimal",
215
+ "iteration": 3,
216
+ "position": 2,
217
+ "success": true,
218
+ "elapsedMs": 258.7,
219
+ "httpCalls": 7,
220
+ "extensionRoundTrips": 30,
221
+ "responseBytes": 1670,
222
+ "snapshotBytes": 926
223
+ },
224
+ {
225
+ "variant": "actions",
226
+ "iteration": 3,
227
+ "position": 3,
228
+ "success": true,
229
+ "elapsedMs": 252.2,
230
+ "httpCalls": 2,
231
+ "extensionRoundTrips": 2,
232
+ "responseBytes": 3921,
233
+ "snapshotBytes": 2202
234
+ },
235
+ {
236
+ "variant": "legacy",
237
+ "iteration": 4,
238
+ "position": 0,
239
+ "success": true,
240
+ "elapsedMs": 431.9,
241
+ "httpCalls": 10,
242
+ "extensionRoundTrips": 39,
243
+ "responseBytes": 3522,
244
+ "snapshotBytes": 2301
245
+ },
246
+ {
247
+ "variant": "legacy-minimal",
248
+ "iteration": 4,
249
+ "position": 1,
250
+ "success": true,
251
+ "elapsedMs": 248.8,
252
+ "httpCalls": 7,
253
+ "extensionRoundTrips": 30,
254
+ "responseBytes": 1665,
255
+ "snapshotBytes": 926
256
+ },
257
+ {
258
+ "variant": "actions",
259
+ "iteration": 4,
260
+ "position": 2,
261
+ "success": true,
262
+ "elapsedMs": 271.9,
263
+ "httpCalls": 2,
264
+ "extensionRoundTrips": 2,
265
+ "responseBytes": 3917,
266
+ "snapshotBytes": 2202
267
+ },
268
+ {
269
+ "variant": "playwright-cdp",
270
+ "iteration": 4,
271
+ "position": 3,
272
+ "success": true,
273
+ "elapsedMs": 265.9,
274
+ "httpCalls": 0,
275
+ "extensionRoundTrips": 73,
276
+ "responseBytes": null,
277
+ "snapshotBytes": 1425
278
+ },
279
+ {
280
+ "variant": "legacy-minimal",
281
+ "iteration": 5,
282
+ "position": 0,
283
+ "success": true,
284
+ "elapsedMs": 287.2,
285
+ "httpCalls": 7,
286
+ "extensionRoundTrips": 30,
287
+ "responseBytes": 1669,
288
+ "snapshotBytes": 926
289
+ },
290
+ {
291
+ "variant": "actions",
292
+ "iteration": 5,
293
+ "position": 1,
294
+ "success": true,
295
+ "elapsedMs": 258.8,
296
+ "httpCalls": 2,
297
+ "extensionRoundTrips": 2,
298
+ "responseBytes": 3923,
299
+ "snapshotBytes": 2202
300
+ },
301
+ {
302
+ "variant": "playwright-cdp",
303
+ "iteration": 5,
304
+ "position": 2,
305
+ "success": true,
306
+ "elapsedMs": 263.1,
307
+ "httpCalls": 0,
308
+ "extensionRoundTrips": 73,
309
+ "responseBytes": null,
310
+ "snapshotBytes": 1425
311
+ },
312
+ {
313
+ "variant": "legacy",
314
+ "iteration": 5,
315
+ "position": 3,
316
+ "success": true,
317
+ "elapsedMs": 262.9,
318
+ "httpCalls": 10,
319
+ "extensionRoundTrips": 39,
320
+ "responseBytes": 3521,
321
+ "snapshotBytes": 2301
322
+ },
323
+ {
324
+ "variant": "actions",
325
+ "iteration": 6,
326
+ "position": 0,
327
+ "success": true,
328
+ "elapsedMs": 258,
329
+ "httpCalls": 2,
330
+ "extensionRoundTrips": 2,
331
+ "responseBytes": 3923,
332
+ "snapshotBytes": 2202
333
+ },
334
+ {
335
+ "variant": "playwright-cdp",
336
+ "iteration": 6,
337
+ "position": 1,
338
+ "success": true,
339
+ "elapsedMs": 256.9,
340
+ "httpCalls": 0,
341
+ "extensionRoundTrips": 73,
342
+ "responseBytes": null,
343
+ "snapshotBytes": 1425
344
+ },
345
+ {
346
+ "variant": "legacy",
347
+ "iteration": 6,
348
+ "position": 2,
349
+ "success": true,
350
+ "elapsedMs": 260.5,
351
+ "httpCalls": 10,
352
+ "extensionRoundTrips": 39,
353
+ "responseBytes": 3533,
354
+ "snapshotBytes": 2301
355
+ },
356
+ {
357
+ "variant": "legacy-minimal",
358
+ "iteration": 6,
359
+ "position": 3,
360
+ "success": true,
361
+ "elapsedMs": 269.6,
362
+ "httpCalls": 7,
363
+ "extensionRoundTrips": 30,
364
+ "responseBytes": 1670,
365
+ "snapshotBytes": 926
366
+ },
367
+ {
368
+ "variant": "playwright-cdp",
369
+ "iteration": 7,
370
+ "position": 0,
371
+ "success": true,
372
+ "elapsedMs": 244,
373
+ "httpCalls": 0,
374
+ "extensionRoundTrips": 73,
375
+ "responseBytes": null,
376
+ "snapshotBytes": 1425
377
+ },
378
+ {
379
+ "variant": "legacy",
380
+ "iteration": 7,
381
+ "position": 1,
382
+ "success": true,
383
+ "elapsedMs": 260.5,
384
+ "httpCalls": 10,
385
+ "extensionRoundTrips": 39,
386
+ "responseBytes": 3537,
387
+ "snapshotBytes": 2301
388
+ },
389
+ {
390
+ "variant": "legacy-minimal",
391
+ "iteration": 7,
392
+ "position": 2,
393
+ "success": true,
394
+ "elapsedMs": 267.2,
395
+ "httpCalls": 7,
396
+ "extensionRoundTrips": 30,
397
+ "responseBytes": 1670,
398
+ "snapshotBytes": 926
399
+ },
400
+ {
401
+ "variant": "actions",
402
+ "iteration": 7,
403
+ "position": 3,
404
+ "success": true,
405
+ "elapsedMs": 271.7,
406
+ "httpCalls": 2,
407
+ "extensionRoundTrips": 2,
408
+ "responseBytes": 3921,
409
+ "snapshotBytes": 2202
410
+ }
411
+ ]
412
+ }