@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:21:23.376Z",
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": 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": 262.05,
21
+ "httpCalls": 10,
22
+ "extensionRoundTrips": 39,
23
+ "responseBytes": 3522,
24
+ "snapshotBytes": 2301
25
+ },
26
+ "legacy-minimal": {
27
+ "runs": 8,
28
+ "successes": 8,
29
+ "elapsedMs": 254.10000000000002,
30
+ "httpCalls": 7,
31
+ "extensionRoundTrips": 30,
32
+ "responseBytes": 1670,
33
+ "snapshotBytes": 926
34
+ },
35
+ "actions": {
36
+ "runs": 8,
37
+ "successes": 8,
38
+ "elapsedMs": 288.05,
39
+ "httpCalls": 2,
40
+ "extensionRoundTrips": 2,
41
+ "responseBytes": 3918.5,
42
+ "snapshotBytes": 2202
43
+ },
44
+ "playwright-cdp": {
45
+ "runs": 8,
46
+ "successes": 8,
47
+ "elapsedMs": 329.2,
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": 285.9,
65
+ "httpCalls": 10,
66
+ "extensionRoundTrips": 40,
67
+ "responseBytes": 3517,
68
+ "snapshotBytes": 2301
69
+ },
70
+ {
71
+ "variant": "legacy-minimal",
72
+ "iteration": 0,
73
+ "position": 1,
74
+ "success": true,
75
+ "elapsedMs": 252.4,
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": 276.4,
87
+ "httpCalls": 2,
88
+ "extensionRoundTrips": 2,
89
+ "responseBytes": 3919,
90
+ "snapshotBytes": 2202
91
+ },
92
+ {
93
+ "variant": "playwright-cdp",
94
+ "iteration": 0,
95
+ "position": 3,
96
+ "success": true,
97
+ "elapsedMs": 293.1,
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": 246.2,
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": 286,
120
+ "httpCalls": 2,
121
+ "extensionRoundTrips": 2,
122
+ "responseBytes": 3923,
123
+ "snapshotBytes": 2202
124
+ },
125
+ {
126
+ "variant": "playwright-cdp",
127
+ "iteration": 1,
128
+ "position": 2,
129
+ "success": true,
130
+ "elapsedMs": 324.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": 262.6,
142
+ "httpCalls": 10,
143
+ "extensionRoundTrips": 39,
144
+ "responseBytes": 3537,
145
+ "snapshotBytes": 2301
146
+ },
147
+ {
148
+ "variant": "actions",
149
+ "iteration": 2,
150
+ "position": 0,
151
+ "success": true,
152
+ "elapsedMs": 290.1,
153
+ "httpCalls": 2,
154
+ "extensionRoundTrips": 2,
155
+ "responseBytes": 3923,
156
+ "snapshotBytes": 2202
157
+ },
158
+ {
159
+ "variant": "playwright-cdp",
160
+ "iteration": 2,
161
+ "position": 1,
162
+ "success": true,
163
+ "elapsedMs": 328,
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": 269.8,
175
+ "httpCalls": 10,
176
+ "extensionRoundTrips": 39,
177
+ "responseBytes": 3517,
178
+ "snapshotBytes": 2301
179
+ },
180
+ {
181
+ "variant": "legacy-minimal",
182
+ "iteration": 2,
183
+ "position": 3,
184
+ "success": true,
185
+ "elapsedMs": 254.4,
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": 331.7,
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": 257.1,
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": 260.3,
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": 293.1,
230
+ "httpCalls": 2,
231
+ "extensionRoundTrips": 2,
232
+ "responseBytes": 3918,
233
+ "snapshotBytes": 2202
234
+ },
235
+ {
236
+ "variant": "legacy",
237
+ "iteration": 4,
238
+ "position": 0,
239
+ "success": true,
240
+ "elapsedMs": 261.5,
241
+ "httpCalls": 10,
242
+ "extensionRoundTrips": 39,
243
+ "responseBytes": 3537,
244
+ "snapshotBytes": 2301
245
+ },
246
+ {
247
+ "variant": "legacy-minimal",
248
+ "iteration": 4,
249
+ "position": 1,
250
+ "success": true,
251
+ "elapsedMs": 245.5,
252
+ "httpCalls": 7,
253
+ "extensionRoundTrips": 30,
254
+ "responseBytes": 1670,
255
+ "snapshotBytes": 926
256
+ },
257
+ {
258
+ "variant": "actions",
259
+ "iteration": 4,
260
+ "position": 2,
261
+ "success": true,
262
+ "elapsedMs": 292.1,
263
+ "httpCalls": 2,
264
+ "extensionRoundTrips": 2,
265
+ "responseBytes": 3918,
266
+ "snapshotBytes": 2202
267
+ },
268
+ {
269
+ "variant": "playwright-cdp",
270
+ "iteration": 4,
271
+ "position": 3,
272
+ "success": true,
273
+ "elapsedMs": 332.7,
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": 261.8,
285
+ "httpCalls": 7,
286
+ "extensionRoundTrips": 30,
287
+ "responseBytes": 1670,
288
+ "snapshotBytes": 926
289
+ },
290
+ {
291
+ "variant": "actions",
292
+ "iteration": 5,
293
+ "position": 1,
294
+ "success": true,
295
+ "elapsedMs": 291,
296
+ "httpCalls": 2,
297
+ "extensionRoundTrips": 2,
298
+ "responseBytes": 3918,
299
+ "snapshotBytes": 2202
300
+ },
301
+ {
302
+ "variant": "playwright-cdp",
303
+ "iteration": 5,
304
+ "position": 2,
305
+ "success": true,
306
+ "elapsedMs": 326.5,
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": 268.4,
318
+ "httpCalls": 10,
319
+ "extensionRoundTrips": 39,
320
+ "responseBytes": 3522,
321
+ "snapshotBytes": 2301
322
+ },
323
+ {
324
+ "variant": "actions",
325
+ "iteration": 6,
326
+ "position": 0,
327
+ "success": true,
328
+ "elapsedMs": 262.3,
329
+ "httpCalls": 2,
330
+ "extensionRoundTrips": 2,
331
+ "responseBytes": 3918,
332
+ "snapshotBytes": 2202
333
+ },
334
+ {
335
+ "variant": "playwright-cdp",
336
+ "iteration": 6,
337
+ "position": 1,
338
+ "success": true,
339
+ "elapsedMs": 330.4,
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": 3522,
354
+ "snapshotBytes": 2301
355
+ },
356
+ {
357
+ "variant": "legacy-minimal",
358
+ "iteration": 6,
359
+ "position": 3,
360
+ "success": true,
361
+ "elapsedMs": 260.1,
362
+ "httpCalls": 7,
363
+ "extensionRoundTrips": 30,
364
+ "responseBytes": 1665,
365
+ "snapshotBytes": 926
366
+ },
367
+ {
368
+ "variant": "playwright-cdp",
369
+ "iteration": 7,
370
+ "position": 0,
371
+ "success": true,
372
+ "elapsedMs": 330.5,
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": 257.9,
384
+ "httpCalls": 10,
385
+ "extensionRoundTrips": 39,
386
+ "responseBytes": 3522,
387
+ "snapshotBytes": 2301
388
+ },
389
+ {
390
+ "variant": "legacy-minimal",
391
+ "iteration": 7,
392
+ "position": 2,
393
+ "success": true,
394
+ "elapsedMs": 253.8,
395
+ "httpCalls": 7,
396
+ "extensionRoundTrips": 30,
397
+ "responseBytes": 1665,
398
+ "snapshotBytes": 926
399
+ },
400
+ {
401
+ "variant": "actions",
402
+ "iteration": 7,
403
+ "position": 3,
404
+ "success": true,
405
+ "elapsedMs": 269.4,
406
+ "httpCalls": 2,
407
+ "extensionRoundTrips": 2,
408
+ "responseBytes": 3926,
409
+ "snapshotBytes": 2202
410
+ }
411
+ ]
412
+ }
@@ -0,0 +1,194 @@
1
+ {
2
+ "measuredAt": "2026-09-08T11:15:47.299Z",
3
+ "injectedExtensionRttMs": 50,
4
+ "platform": "darwin",
5
+ "node": "v22.23.1",
6
+ "chromium": "153.0.8010.12",
7
+ "task": "Search invoice / owner Alice / active only; await visible result",
8
+ "scope": "Deterministic browser/tool execution; no model inference or token accounting. Playwright over Relay is not Codex Browser Use.",
9
+ "summary": {
10
+ "legacy": {
11
+ "runs": 5,
12
+ "successes": 5,
13
+ "elapsedMs": 2205.6,
14
+ "httpCalls": 10,
15
+ "extensionRoundTrips": 38,
16
+ "responseBytes": 3536,
17
+ "snapshotBytes": 2301
18
+ },
19
+ "actions": {
20
+ "runs": 5,
21
+ "successes": 5,
22
+ "elapsedMs": 403,
23
+ "httpCalls": 2,
24
+ "extensionRoundTrips": 2,
25
+ "responseBytes": 3924,
26
+ "snapshotBytes": 2202
27
+ },
28
+ "playwright-cdp": {
29
+ "runs": 5,
30
+ "successes": 5,
31
+ "elapsedMs": 2465.1,
32
+ "httpCalls": 0,
33
+ "extensionRoundTrips": 70,
34
+ "responseBytes": null,
35
+ "snapshotBytes": 1425
36
+ }
37
+ },
38
+ "delta": {
39
+ "fullSnapshotBytes": 1880,
40
+ "changedSnapshotBytes": 160
41
+ },
42
+ "samples": [
43
+ {
44
+ "variant": "legacy",
45
+ "iteration": 0,
46
+ "success": true,
47
+ "elapsedMs": 2218.2,
48
+ "httpCalls": 10,
49
+ "extensionRoundTrips": 39,
50
+ "responseBytes": 3540,
51
+ "snapshotBytes": 2301
52
+ },
53
+ {
54
+ "variant": "actions",
55
+ "iteration": 0,
56
+ "success": true,
57
+ "elapsedMs": 411.1,
58
+ "httpCalls": 2,
59
+ "extensionRoundTrips": 2,
60
+ "responseBytes": 3923,
61
+ "snapshotBytes": 2202
62
+ },
63
+ {
64
+ "variant": "playwright-cdp",
65
+ "iteration": 0,
66
+ "success": true,
67
+ "elapsedMs": 2422.6,
68
+ "httpCalls": 0,
69
+ "extensionRoundTrips": 70,
70
+ "responseBytes": null,
71
+ "snapshotBytes": 1425
72
+ },
73
+ {
74
+ "variant": "legacy",
75
+ "iteration": 1,
76
+ "success": true,
77
+ "elapsedMs": 2205.2,
78
+ "httpCalls": 10,
79
+ "extensionRoundTrips": 38,
80
+ "responseBytes": 3535,
81
+ "snapshotBytes": 2301
82
+ },
83
+ {
84
+ "variant": "actions",
85
+ "iteration": 1,
86
+ "success": true,
87
+ "elapsedMs": 385.3,
88
+ "httpCalls": 2,
89
+ "extensionRoundTrips": 2,
90
+ "responseBytes": 3926,
91
+ "snapshotBytes": 2202
92
+ },
93
+ {
94
+ "variant": "playwright-cdp",
95
+ "iteration": 1,
96
+ "success": true,
97
+ "elapsedMs": 2473.1,
98
+ "httpCalls": 0,
99
+ "extensionRoundTrips": 70,
100
+ "responseBytes": null,
101
+ "snapshotBytes": 1425
102
+ },
103
+ {
104
+ "variant": "legacy",
105
+ "iteration": 2,
106
+ "success": true,
107
+ "elapsedMs": 2205.6,
108
+ "httpCalls": 10,
109
+ "extensionRoundTrips": 38,
110
+ "responseBytes": 3536,
111
+ "snapshotBytes": 2301
112
+ },
113
+ {
114
+ "variant": "actions",
115
+ "iteration": 2,
116
+ "success": true,
117
+ "elapsedMs": 403,
118
+ "httpCalls": 2,
119
+ "extensionRoundTrips": 2,
120
+ "responseBytes": 3924,
121
+ "snapshotBytes": 2202
122
+ },
123
+ {
124
+ "variant": "playwright-cdp",
125
+ "iteration": 2,
126
+ "success": true,
127
+ "elapsedMs": 2470.5,
128
+ "httpCalls": 0,
129
+ "extensionRoundTrips": 70,
130
+ "responseBytes": null,
131
+ "snapshotBytes": 1425
132
+ },
133
+ {
134
+ "variant": "legacy",
135
+ "iteration": 3,
136
+ "success": true,
137
+ "elapsedMs": 2204.1,
138
+ "httpCalls": 10,
139
+ "extensionRoundTrips": 38,
140
+ "responseBytes": 3539,
141
+ "snapshotBytes": 2301
142
+ },
143
+ {
144
+ "variant": "actions",
145
+ "iteration": 3,
146
+ "success": true,
147
+ "elapsedMs": 410.4,
148
+ "httpCalls": 2,
149
+ "extensionRoundTrips": 2,
150
+ "responseBytes": 3922,
151
+ "snapshotBytes": 2202
152
+ },
153
+ {
154
+ "variant": "playwright-cdp",
155
+ "iteration": 3,
156
+ "success": true,
157
+ "elapsedMs": 2455.5,
158
+ "httpCalls": 0,
159
+ "extensionRoundTrips": 70,
160
+ "responseBytes": null,
161
+ "snapshotBytes": 1425
162
+ },
163
+ {
164
+ "variant": "legacy",
165
+ "iteration": 4,
166
+ "success": true,
167
+ "elapsedMs": 2209.3,
168
+ "httpCalls": 10,
169
+ "extensionRoundTrips": 38,
170
+ "responseBytes": 3535,
171
+ "snapshotBytes": 2301
172
+ },
173
+ {
174
+ "variant": "actions",
175
+ "iteration": 4,
176
+ "success": true,
177
+ "elapsedMs": 382.9,
178
+ "httpCalls": 2,
179
+ "extensionRoundTrips": 2,
180
+ "responseBytes": 3926,
181
+ "snapshotBytes": 2202
182
+ },
183
+ {
184
+ "variant": "playwright-cdp",
185
+ "iteration": 4,
186
+ "success": true,
187
+ "elapsedMs": 2465.1,
188
+ "httpCalls": 0,
189
+ "extensionRoundTrips": 70,
190
+ "responseBytes": null,
191
+ "snapshotBytes": 1425
192
+ }
193
+ ]
194
+ }