@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,412 @@
1
+ {
2
+ "measuredAt": "2026-09-08T19:22:22.038Z",
3
+ "suite": "balanced",
4
+ "executionOrder": "rotating",
5
+ "injectedExtensionRttMs": 50,
6
+ "platform": "darwin",
7
+ "node": "v22.23.1",
8
+ "chromium": "153.0.8010.12",
9
+ "headless": true,
10
+ "viewport": {
11
+ "width": 1280,
12
+ "height": 1000
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": 2210.6,
21
+ "httpCalls": 10,
22
+ "extensionRoundTrips": 38,
23
+ "responseBytes": 3535,
24
+ "snapshotBytes": 2301
25
+ },
26
+ "legacy-minimal": {
27
+ "runs": 8,
28
+ "successes": 8,
29
+ "elapsedMs": 1702.35,
30
+ "httpCalls": 7,
31
+ "extensionRoundTrips": 29,
32
+ "responseBytes": 1671.5,
33
+ "snapshotBytes": 926
34
+ },
35
+ "actions": {
36
+ "runs": 8,
37
+ "successes": 8,
38
+ "elapsedMs": 394.4,
39
+ "httpCalls": 2,
40
+ "extensionRoundTrips": 2,
41
+ "responseBytes": 3923.5,
42
+ "snapshotBytes": 2202
43
+ },
44
+ "playwright-cdp": {
45
+ "runs": 8,
46
+ "successes": 8,
47
+ "elapsedMs": 2466.8,
48
+ "httpCalls": 0,
49
+ "extensionRoundTrips": 70,
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": 2215.4,
65
+ "httpCalls": 10,
66
+ "extensionRoundTrips": 39,
67
+ "responseBytes": 3535,
68
+ "snapshotBytes": 2301
69
+ },
70
+ {
71
+ "variant": "legacy-minimal",
72
+ "iteration": 0,
73
+ "position": 1,
74
+ "success": true,
75
+ "elapsedMs": 1703.3,
76
+ "httpCalls": 7,
77
+ "extensionRoundTrips": 29,
78
+ "responseBytes": 1669,
79
+ "snapshotBytes": 926
80
+ },
81
+ {
82
+ "variant": "actions",
83
+ "iteration": 0,
84
+ "position": 2,
85
+ "success": true,
86
+ "elapsedMs": 401.5,
87
+ "httpCalls": 2,
88
+ "extensionRoundTrips": 2,
89
+ "responseBytes": 3929,
90
+ "snapshotBytes": 2202
91
+ },
92
+ {
93
+ "variant": "playwright-cdp",
94
+ "iteration": 0,
95
+ "position": 3,
96
+ "success": true,
97
+ "elapsedMs": 2433.5,
98
+ "httpCalls": 0,
99
+ "extensionRoundTrips": 70,
100
+ "responseBytes": null,
101
+ "snapshotBytes": 1425
102
+ },
103
+ {
104
+ "variant": "legacy-minimal",
105
+ "iteration": 1,
106
+ "position": 0,
107
+ "success": true,
108
+ "elapsedMs": 1699.6,
109
+ "httpCalls": 7,
110
+ "extensionRoundTrips": 29,
111
+ "responseBytes": 1669,
112
+ "snapshotBytes": 926
113
+ },
114
+ {
115
+ "variant": "actions",
116
+ "iteration": 1,
117
+ "position": 1,
118
+ "success": true,
119
+ "elapsedMs": 405.6,
120
+ "httpCalls": 2,
121
+ "extensionRoundTrips": 2,
122
+ "responseBytes": 3924,
123
+ "snapshotBytes": 2202
124
+ },
125
+ {
126
+ "variant": "playwright-cdp",
127
+ "iteration": 1,
128
+ "position": 2,
129
+ "success": true,
130
+ "elapsedMs": 2468.9,
131
+ "httpCalls": 0,
132
+ "extensionRoundTrips": 70,
133
+ "responseBytes": null,
134
+ "snapshotBytes": 1425
135
+ },
136
+ {
137
+ "variant": "legacy",
138
+ "iteration": 1,
139
+ "position": 3,
140
+ "success": true,
141
+ "elapsedMs": 2197,
142
+ "httpCalls": 10,
143
+ "extensionRoundTrips": 38,
144
+ "responseBytes": 3539,
145
+ "snapshotBytes": 2301
146
+ },
147
+ {
148
+ "variant": "actions",
149
+ "iteration": 2,
150
+ "position": 0,
151
+ "success": true,
152
+ "elapsedMs": 379,
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": 2484.7,
164
+ "httpCalls": 0,
165
+ "extensionRoundTrips": 70,
166
+ "responseBytes": null,
167
+ "snapshotBytes": 1425
168
+ },
169
+ {
170
+ "variant": "legacy",
171
+ "iteration": 2,
172
+ "position": 2,
173
+ "success": true,
174
+ "elapsedMs": 2198.7,
175
+ "httpCalls": 10,
176
+ "extensionRoundTrips": 38,
177
+ "responseBytes": 3535,
178
+ "snapshotBytes": 2301
179
+ },
180
+ {
181
+ "variant": "legacy-minimal",
182
+ "iteration": 2,
183
+ "position": 3,
184
+ "success": true,
185
+ "elapsedMs": 1700.8,
186
+ "httpCalls": 7,
187
+ "extensionRoundTrips": 29,
188
+ "responseBytes": 1674,
189
+ "snapshotBytes": 926
190
+ },
191
+ {
192
+ "variant": "playwright-cdp",
193
+ "iteration": 3,
194
+ "position": 0,
195
+ "success": true,
196
+ "elapsedMs": 2454.4,
197
+ "httpCalls": 0,
198
+ "extensionRoundTrips": 70,
199
+ "responseBytes": null,
200
+ "snapshotBytes": 1425
201
+ },
202
+ {
203
+ "variant": "legacy",
204
+ "iteration": 3,
205
+ "position": 1,
206
+ "success": true,
207
+ "elapsedMs": 2214.3,
208
+ "httpCalls": 10,
209
+ "extensionRoundTrips": 38,
210
+ "responseBytes": 3535,
211
+ "snapshotBytes": 2301
212
+ },
213
+ {
214
+ "variant": "legacy-minimal",
215
+ "iteration": 3,
216
+ "position": 2,
217
+ "success": true,
218
+ "elapsedMs": 1708.8,
219
+ "httpCalls": 7,
220
+ "extensionRoundTrips": 29,
221
+ "responseBytes": 1674,
222
+ "snapshotBytes": 926
223
+ },
224
+ {
225
+ "variant": "actions",
226
+ "iteration": 3,
227
+ "position": 3,
228
+ "success": true,
229
+ "elapsedMs": 389.2,
230
+ "httpCalls": 2,
231
+ "extensionRoundTrips": 2,
232
+ "responseBytes": 3923,
233
+ "snapshotBytes": 2202
234
+ },
235
+ {
236
+ "variant": "legacy",
237
+ "iteration": 4,
238
+ "position": 0,
239
+ "success": true,
240
+ "elapsedMs": 2223.9,
241
+ "httpCalls": 10,
242
+ "extensionRoundTrips": 38,
243
+ "responseBytes": 3535,
244
+ "snapshotBytes": 2301
245
+ },
246
+ {
247
+ "variant": "legacy-minimal",
248
+ "iteration": 4,
249
+ "position": 1,
250
+ "success": true,
251
+ "elapsedMs": 1696.5,
252
+ "httpCalls": 7,
253
+ "extensionRoundTrips": 29,
254
+ "responseBytes": 1674,
255
+ "snapshotBytes": 926
256
+ },
257
+ {
258
+ "variant": "actions",
259
+ "iteration": 4,
260
+ "position": 2,
261
+ "success": true,
262
+ "elapsedMs": 387.6,
263
+ "httpCalls": 2,
264
+ "extensionRoundTrips": 2,
265
+ "responseBytes": 3922,
266
+ "snapshotBytes": 2202
267
+ },
268
+ {
269
+ "variant": "playwright-cdp",
270
+ "iteration": 4,
271
+ "position": 3,
272
+ "success": true,
273
+ "elapsedMs": 2494.6,
274
+ "httpCalls": 0,
275
+ "extensionRoundTrips": 70,
276
+ "responseBytes": null,
277
+ "snapshotBytes": 1425
278
+ },
279
+ {
280
+ "variant": "legacy-minimal",
281
+ "iteration": 5,
282
+ "position": 0,
283
+ "success": true,
284
+ "elapsedMs": 1710.3,
285
+ "httpCalls": 7,
286
+ "extensionRoundTrips": 29,
287
+ "responseBytes": 1669,
288
+ "snapshotBytes": 926
289
+ },
290
+ {
291
+ "variant": "actions",
292
+ "iteration": 5,
293
+ "position": 1,
294
+ "success": true,
295
+ "elapsedMs": 398.7,
296
+ "httpCalls": 2,
297
+ "extensionRoundTrips": 2,
298
+ "responseBytes": 3929,
299
+ "snapshotBytes": 2202
300
+ },
301
+ {
302
+ "variant": "playwright-cdp",
303
+ "iteration": 5,
304
+ "position": 2,
305
+ "success": true,
306
+ "elapsedMs": 2482.2,
307
+ "httpCalls": 0,
308
+ "extensionRoundTrips": 70,
309
+ "responseBytes": null,
310
+ "snapshotBytes": 1425
311
+ },
312
+ {
313
+ "variant": "legacy",
314
+ "iteration": 5,
315
+ "position": 3,
316
+ "success": true,
317
+ "elapsedMs": 2199.9,
318
+ "httpCalls": 10,
319
+ "extensionRoundTrips": 38,
320
+ "responseBytes": 3540,
321
+ "snapshotBytes": 2301
322
+ },
323
+ {
324
+ "variant": "actions",
325
+ "iteration": 6,
326
+ "position": 0,
327
+ "success": true,
328
+ "elapsedMs": 390.1,
329
+ "httpCalls": 2,
330
+ "extensionRoundTrips": 2,
331
+ "responseBytes": 3922,
332
+ "snapshotBytes": 2202
333
+ },
334
+ {
335
+ "variant": "playwright-cdp",
336
+ "iteration": 6,
337
+ "position": 1,
338
+ "success": true,
339
+ "elapsedMs": 2456.4,
340
+ "httpCalls": 0,
341
+ "extensionRoundTrips": 70,
342
+ "responseBytes": null,
343
+ "snapshotBytes": 1425
344
+ },
345
+ {
346
+ "variant": "legacy",
347
+ "iteration": 6,
348
+ "position": 2,
349
+ "success": true,
350
+ "elapsedMs": 2214.2,
351
+ "httpCalls": 10,
352
+ "extensionRoundTrips": 38,
353
+ "responseBytes": 3535,
354
+ "snapshotBytes": 2301
355
+ },
356
+ {
357
+ "variant": "legacy-minimal",
358
+ "iteration": 6,
359
+ "position": 3,
360
+ "success": true,
361
+ "elapsedMs": 1701.4,
362
+ "httpCalls": 7,
363
+ "extensionRoundTrips": 29,
364
+ "responseBytes": 1674,
365
+ "snapshotBytes": 926
366
+ },
367
+ {
368
+ "variant": "playwright-cdp",
369
+ "iteration": 7,
370
+ "position": 0,
371
+ "success": true,
372
+ "elapsedMs": 2464.7,
373
+ "httpCalls": 0,
374
+ "extensionRoundTrips": 70,
375
+ "responseBytes": null,
376
+ "snapshotBytes": 1425
377
+ },
378
+ {
379
+ "variant": "legacy",
380
+ "iteration": 7,
381
+ "position": 1,
382
+ "success": true,
383
+ "elapsedMs": 2207,
384
+ "httpCalls": 10,
385
+ "extensionRoundTrips": 38,
386
+ "responseBytes": 3539,
387
+ "snapshotBytes": 2301
388
+ },
389
+ {
390
+ "variant": "legacy-minimal",
391
+ "iteration": 7,
392
+ "position": 2,
393
+ "success": true,
394
+ "elapsedMs": 1703.4,
395
+ "httpCalls": 7,
396
+ "extensionRoundTrips": 29,
397
+ "responseBytes": 1669,
398
+ "snapshotBytes": 926
399
+ },
400
+ {
401
+ "variant": "actions",
402
+ "iteration": 7,
403
+ "position": 3,
404
+ "success": true,
405
+ "elapsedMs": 402.9,
406
+ "httpCalls": 2,
407
+ "extensionRoundTrips": 2,
408
+ "responseBytes": 3924,
409
+ "snapshotBytes": 2202
410
+ }
411
+ ]
412
+ }