humanish 0.96.1 → 0.98.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 (193) hide show
  1. package/AGENTS.md +86 -79
  2. package/CONTRIBUTING.md +7 -2
  3. package/README.md +11 -2
  4. package/dist/actor-contract.d.ts +35 -1
  5. package/dist/actor-contract.js +38 -0
  6. package/dist/actor-contract.js.map +1 -1
  7. package/dist/adapter-extension.js +1 -0
  8. package/dist/adapter-extension.js.map +1 -1
  9. package/dist/automatic-analysis-config.d.ts +15 -5
  10. package/dist/automatic-analysis-config.js +25 -4
  11. package/dist/automatic-analysis-config.js.map +1 -1
  12. package/dist/automatic-study-analysis.js +4 -2
  13. package/dist/automatic-study-analysis.js.map +1 -1
  14. package/dist/browser-control-client.d.ts +14 -0
  15. package/dist/browser-control-client.js +134 -0
  16. package/dist/browser-control-client.js.map +1 -0
  17. package/dist/browser-control-dispatcher.d.ts +14 -0
  18. package/dist/browser-control-dispatcher.js +109 -0
  19. package/dist/browser-control-dispatcher.js.map +1 -0
  20. package/dist/browser-control-protocol.d.ts +371 -0
  21. package/dist/browser-control-protocol.js +155 -0
  22. package/dist/browser-control-protocol.js.map +1 -0
  23. package/dist/browser-control-transport.d.ts +24 -0
  24. package/dist/browser-control-transport.js +156 -0
  25. package/dist/browser-control-transport.js.map +1 -0
  26. package/dist/comms-lease-store.d.ts +1 -0
  27. package/dist/comms-lease-store.js +9 -3
  28. package/dist/comms-lease-store.js.map +1 -1
  29. package/dist/computer-use-actor.d.ts +2 -2
  30. package/dist/computer-use-actor.js +6 -1
  31. package/dist/computer-use-actor.js.map +1 -1
  32. package/dist/computer-use.d.ts +23 -1
  33. package/dist/computer-use.js +253 -70
  34. package/dist/computer-use.js.map +1 -1
  35. package/dist/cua-actor-lab.d.ts +24 -289
  36. package/dist/cua-actor-lab.js +203 -1983
  37. package/dist/cua-actor-lab.js.map +1 -1
  38. package/dist/cua-desktop-lane.d.ts +35 -0
  39. package/dist/cua-desktop-lane.js +13 -0
  40. package/dist/cua-desktop-lane.js.map +1 -0
  41. package/dist/cua-executor-error.d.ts +31 -0
  42. package/dist/cua-executor-error.js +48 -0
  43. package/dist/cua-executor-error.js.map +1 -0
  44. package/dist/cua-provider-error.d.ts +12 -0
  45. package/dist/cua-provider-error.js +28 -0
  46. package/dist/cua-provider-error.js.map +1 -0
  47. package/dist/desktop-session.d.ts +41 -0
  48. package/dist/desktop-session.js +46 -0
  49. package/dist/desktop-session.js.map +1 -0
  50. package/dist/doctor-lab.d.ts +8 -1
  51. package/dist/doctor-lab.js +40 -8
  52. package/dist/doctor-lab.js.map +1 -1
  53. package/dist/e2b-cua-desktop.d.ts +3 -0
  54. package/dist/e2b-cua-desktop.js +675 -0
  55. package/dist/e2b-cua-desktop.js.map +1 -0
  56. package/dist/e2b-cua-provisioning.d.ts +311 -0
  57. package/dist/e2b-cua-provisioning.js +1213 -0
  58. package/dist/e2b-cua-provisioning.js.map +1 -0
  59. package/dist/e2b-desktop-executor.d.ts +1 -24
  60. package/dist/e2b-desktop-executor.js +2 -127
  61. package/dist/e2b-desktop-executor.js.map +1 -1
  62. package/dist/e2b-desktop-session.d.ts +7 -0
  63. package/dist/e2b-desktop-session.js +29 -0
  64. package/dist/e2b-desktop-session.js.map +1 -0
  65. package/dist/e2b-terminal-lab.js +1 -0
  66. package/dist/e2b-terminal-lab.js.map +1 -1
  67. package/dist/frame-signature.d.ts +24 -0
  68. package/dist/frame-signature.js +128 -0
  69. package/dist/frame-signature.js.map +1 -0
  70. package/dist/guest-bootstrap.d.ts +43 -0
  71. package/dist/guest-bootstrap.js +240 -0
  72. package/dist/guest-bootstrap.js.map +1 -0
  73. package/dist/guest-browser-tools.d.ts +8 -0
  74. package/dist/guest-browser-tools.js +66 -0
  75. package/dist/guest-browser-tools.js.map +1 -0
  76. package/dist/guest-chromium-text.d.ts +27 -0
  77. package/dist/guest-chromium-text.js +281 -0
  78. package/dist/guest-chromium-text.js.map +1 -0
  79. package/dist/guest-desktop-executor.d.ts +22 -0
  80. package/dist/guest-desktop-executor.js +177 -0
  81. package/dist/guest-desktop-executor.js.map +1 -0
  82. package/dist/guest-desktop-native.d.ts +14 -0
  83. package/dist/guest-desktop-native.js +131 -0
  84. package/dist/guest-desktop-native.js.map +1 -0
  85. package/dist/guest-runtime-desktop.d.ts +35 -0
  86. package/dist/guest-runtime-desktop.js +231 -0
  87. package/dist/guest-runtime-desktop.js.map +1 -0
  88. package/dist/guest-runtime-main.d.ts +1 -0
  89. package/dist/guest-runtime-main.js +31 -0
  90. package/dist/guest-runtime-main.js.map +1 -0
  91. package/dist/guest-runtime-revision.d.ts +1 -0
  92. package/dist/guest-runtime-revision.js +3 -0
  93. package/dist/guest-runtime-revision.js.map +1 -0
  94. package/dist/guest-runtime.d.ts +25 -0
  95. package/dist/guest-runtime.js +96 -0
  96. package/dist/guest-runtime.js.map +1 -0
  97. package/dist/index.d.ts +1 -1
  98. package/dist/lab-config.js +10 -3
  99. package/dist/lab-config.js.map +1 -1
  100. package/dist/lab-engine.js +6 -0
  101. package/dist/lab-engine.js.map +1 -1
  102. package/dist/lab-summary.d.ts +5 -1
  103. package/dist/lab-summary.js +5 -0
  104. package/dist/lab-summary.js.map +1 -1
  105. package/dist/local-agent-cli.js +1 -1
  106. package/dist/local-agent-cli.js.map +1 -1
  107. package/dist/local-firecracker-desktop.d.ts +13 -0
  108. package/dist/local-firecracker-desktop.js +150 -0
  109. package/dist/local-firecracker-desktop.js.map +1 -0
  110. package/dist/local-firecracker-study.d.ts +9 -0
  111. package/dist/local-firecracker-study.js +93 -0
  112. package/dist/local-firecracker-study.js.map +1 -0
  113. package/dist/local-runtime-config.d.ts +6 -0
  114. package/dist/local-runtime-config.js +56 -0
  115. package/dist/local-runtime-config.js.map +1 -0
  116. package/dist/local-runtime-release.d.ts +3 -0
  117. package/dist/local-runtime-release.js +8 -0
  118. package/dist/local-runtime-release.js.map +1 -0
  119. package/dist/local-runtime.d.ts +25 -0
  120. package/dist/local-runtime.js +113 -0
  121. package/dist/local-runtime.js.map +1 -0
  122. package/dist/observer-app.html +4 -4
  123. package/dist/pricing.d.ts +22 -1
  124. package/dist/pricing.js +22 -0
  125. package/dist/pricing.js.map +1 -1
  126. package/dist/program.js +50 -9
  127. package/dist/program.js.map +1 -1
  128. package/dist/restricted-codex-analysis.d.ts +15 -0
  129. package/dist/restricted-codex-analysis.js +13 -0
  130. package/dist/restricted-codex-analysis.js.map +1 -0
  131. package/dist/restricted-codex-participant-policy.d.ts +39 -0
  132. package/dist/restricted-codex-participant-policy.js +69 -0
  133. package/dist/restricted-codex-participant-policy.js.map +1 -0
  134. package/dist/restricted-codex-participant-run.d.ts +20 -0
  135. package/dist/restricted-codex-participant-run.js +78 -0
  136. package/dist/restricted-codex-participant-run.js.map +1 -0
  137. package/dist/restricted-codex-participant.d.ts +14 -0
  138. package/dist/restricted-codex-participant.js +178 -0
  139. package/dist/restricted-codex-participant.js.map +1 -0
  140. package/dist/restricted-codex-policy.d.ts +56 -0
  141. package/dist/restricted-codex-policy.js +151 -0
  142. package/dist/restricted-codex-policy.js.map +1 -0
  143. package/dist/restricted-codex-session.d.ts +19 -0
  144. package/dist/restricted-codex-session.js +413 -0
  145. package/dist/restricted-codex-session.js.map +1 -0
  146. package/dist/restricted-codex-transport.d.ts +58 -0
  147. package/dist/restricted-codex-transport.js +233 -0
  148. package/dist/restricted-codex-transport.js.map +1 -0
  149. package/dist/run-detail.js +4 -2
  150. package/dist/run-detail.js.map +1 -1
  151. package/dist/run.d.ts +12 -5
  152. package/dist/run.js +17 -1
  153. package/dist/run.js.map +1 -1
  154. package/dist/shared-world-lab.js +2 -2
  155. package/dist/shared-world-lab.js.map +1 -1
  156. package/dist/study-analysis-codex-config.d.ts +11 -0
  157. package/dist/study-analysis-codex-config.js +34 -0
  158. package/dist/study-analysis-codex-config.js.map +1 -0
  159. package/dist/study-analysis-engine.d.ts +6 -3
  160. package/dist/study-analysis-engine.js +19 -10
  161. package/dist/study-analysis-engine.js.map +1 -1
  162. package/dist/study-analysis-job.d.ts +3 -2
  163. package/dist/study-analysis-job.js +1 -1
  164. package/dist/study-analysis-job.js.map +1 -1
  165. package/dist/study-analysis-provider.d.ts +4 -2
  166. package/dist/study-analysis-provider.js +1 -1
  167. package/dist/study-analysis-provider.js.map +1 -1
  168. package/dist/study-analysis-service.d.ts +3 -0
  169. package/dist/study-analysis-service.js +24 -6
  170. package/dist/study-analysis-service.js.map +1 -1
  171. package/dist/study-analysis-validation.d.ts +43 -19
  172. package/dist/study-analysis-validation.js +23 -10
  173. package/dist/study-analysis-validation.js.map +1 -1
  174. package/dist/study-analysis.d.ts +27 -2
  175. package/dist/study-costs.js +6 -0
  176. package/dist/study-costs.js.map +1 -1
  177. package/dist/tui-app.js +102 -102
  178. package/docs/architecture/browser-control.md +117 -0
  179. package/docs/architecture/desktop-sessions.md +80 -0
  180. package/docs/architecture/guest-desktop.md +87 -0
  181. package/docs/architecture/local-browser-runtime.md +100 -0
  182. package/docs/architecture/restricted-codex-analysis.md +91 -0
  183. package/docs/architecture/runtime-broker-core.md +30 -0
  184. package/docs/contracts/schemas.md +1 -1
  185. package/docs/contracts/study-analysis.md +44 -2
  186. package/docs/goals/current.md +25 -9
  187. package/docs/product/automatic-analysis.md +24 -3
  188. package/docs/product/open-source-install-experience.md +7 -0
  189. package/docs/ramp/README.md +30 -13
  190. package/docs/release/0.97.0-codex-account-analysis.md +45 -0
  191. package/docs/release/0.98.0-local-browser-studies.md +31 -0
  192. package/package.json +4 -2
  193. package/skills/humanish/SKILL.md +39 -0
@@ -0,0 +1,371 @@
1
+ import { z } from "zod";
2
+ import type { CuaAction, CuaObservation } from "./computer-use.js";
3
+ import { type CuaExecutorErrorCode } from "./cua-executor-error.js";
4
+ export declare const BROWSER_CONTROL_VERSION = 1;
5
+ export declare const BROWSER_CONTROL_LIMITS: Readonly<{
6
+ frameBytes: number;
7
+ pngBytes: number;
8
+ dimension: 4096;
9
+ pixels: 16000000;
10
+ textBytes: number;
11
+ chordKeys: 16;
12
+ keyCharacters: 64;
13
+ dragPoints: 1024;
14
+ waitMs: 30000;
15
+ requestTimeoutMs: 35000;
16
+ maxRequestTimeoutMs: 60000;
17
+ }>;
18
+ export interface BrowserControlIdentity {
19
+ generation: string;
20
+ challenge: string;
21
+ runtimeRevision: string;
22
+ }
23
+ export declare const browserControlActionSchema: z.ZodPipe<z.ZodDiscriminatedUnion<[z.ZodObject<{
24
+ button: z.ZodOptional<z.ZodEnum<{
25
+ left: "left";
26
+ right: "right";
27
+ middle: "middle";
28
+ }>>;
29
+ x: z.ZodNumber;
30
+ y: z.ZodNumber;
31
+ kind: z.ZodLiteral<"click">;
32
+ }, z.core.$strict>, z.ZodObject<{
33
+ x: z.ZodNumber;
34
+ y: z.ZodNumber;
35
+ kind: z.ZodLiteral<"double_click">;
36
+ }, z.core.$strict>, z.ZodObject<{
37
+ x: z.ZodNumber;
38
+ y: z.ZodNumber;
39
+ kind: z.ZodLiteral<"move">;
40
+ }, z.core.$strict>, z.ZodObject<{
41
+ dx: z.ZodNumber;
42
+ dy: z.ZodNumber;
43
+ x: z.ZodNumber;
44
+ y: z.ZodNumber;
45
+ kind: z.ZodLiteral<"scroll">;
46
+ }, z.core.$strict>, z.ZodObject<{
47
+ kind: z.ZodLiteral<"type">;
48
+ text: z.ZodString;
49
+ }, z.core.$strict>, z.ZodObject<{
50
+ kind: z.ZodLiteral<"keypress">;
51
+ keys: z.ZodArray<z.ZodString>;
52
+ }, z.core.$strict>, z.ZodObject<{
53
+ kind: z.ZodLiteral<"drag">;
54
+ path: z.ZodArray<z.ZodObject<{
55
+ x: z.ZodNumber;
56
+ y: z.ZodNumber;
57
+ }, z.core.$strict>>;
58
+ }, z.core.$strict>, z.ZodObject<{
59
+ kind: z.ZodLiteral<"wait">;
60
+ ms: z.ZodOptional<z.ZodNumber>;
61
+ }, z.core.$strict>, z.ZodObject<{
62
+ kind: z.ZodLiteral<"screenshot">;
63
+ }, z.core.$strict>], "kind">, z.ZodTransform<{
64
+ kind: "click";
65
+ x: number;
66
+ y: number;
67
+ button?: "left" | "right" | "middle";
68
+ } | {
69
+ kind: "double_click";
70
+ x: number;
71
+ y: number;
72
+ } | {
73
+ kind: "move";
74
+ x: number;
75
+ y: number;
76
+ } | {
77
+ kind: "scroll";
78
+ x: number;
79
+ y: number;
80
+ dx: number;
81
+ dy: number;
82
+ } | {
83
+ kind: "type";
84
+ text: string;
85
+ } | {
86
+ kind: "keypress";
87
+ keys: string[];
88
+ } | {
89
+ kind: "drag";
90
+ path: Array<{
91
+ x: number;
92
+ y: number;
93
+ }>;
94
+ } | {
95
+ kind: "wait";
96
+ ms?: number;
97
+ } | {
98
+ kind: "screenshot";
99
+ }, {
100
+ x: number;
101
+ y: number;
102
+ kind: "click";
103
+ button?: "left" | "right" | "middle" | undefined;
104
+ } | {
105
+ x: number;
106
+ y: number;
107
+ kind: "double_click";
108
+ } | {
109
+ x: number;
110
+ y: number;
111
+ kind: "move";
112
+ } | {
113
+ dx: number;
114
+ dy: number;
115
+ x: number;
116
+ y: number;
117
+ kind: "scroll";
118
+ } | {
119
+ kind: "type";
120
+ text: string;
121
+ } | {
122
+ kind: "keypress";
123
+ keys: string[];
124
+ } | {
125
+ kind: "drag";
126
+ path: {
127
+ x: number;
128
+ y: number;
129
+ }[];
130
+ } | {
131
+ kind: "wait";
132
+ ms?: number | undefined;
133
+ } | {
134
+ kind: "screenshot";
135
+ }>>;
136
+ declare const observationSchema: z.ZodObject<{
137
+ png: z.ZodString;
138
+ stateSignature: z.ZodString;
139
+ url: z.ZodOptional<z.ZodString>;
140
+ title: z.ZodOptional<z.ZodString>;
141
+ text: z.ZodOptional<z.ZodString>;
142
+ scrollY: z.ZodOptional<z.ZodNumber>;
143
+ }, z.core.$strict>;
144
+ type WireObservation = z.infer<typeof observationSchema>;
145
+ declare const requestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
146
+ type: z.ZodLiteral<"request">;
147
+ operation: z.ZodLiteral<"HELLO">;
148
+ version: z.ZodLiteral<1>;
149
+ identity: z.ZodObject<{
150
+ generation: z.ZodString;
151
+ challenge: z.ZodString;
152
+ runtimeRevision: z.ZodString;
153
+ }, z.core.$strict>;
154
+ seq: z.ZodNumber;
155
+ requestId: z.ZodString;
156
+ }, z.core.$strict>, z.ZodObject<{
157
+ type: z.ZodLiteral<"request">;
158
+ operation: z.ZodLiteral<"OBSERVE">;
159
+ version: z.ZodLiteral<1>;
160
+ identity: z.ZodObject<{
161
+ generation: z.ZodString;
162
+ challenge: z.ZodString;
163
+ runtimeRevision: z.ZodString;
164
+ }, z.core.$strict>;
165
+ seq: z.ZodNumber;
166
+ requestId: z.ZodString;
167
+ }, z.core.$strict>, z.ZodObject<{
168
+ type: z.ZodLiteral<"request">;
169
+ operation: z.ZodLiteral<"EXECUTE">;
170
+ actionId: z.ZodString;
171
+ action: z.ZodPipe<z.ZodDiscriminatedUnion<[z.ZodObject<{
172
+ button: z.ZodOptional<z.ZodEnum<{
173
+ left: "left";
174
+ right: "right";
175
+ middle: "middle";
176
+ }>>;
177
+ x: z.ZodNumber;
178
+ y: z.ZodNumber;
179
+ kind: z.ZodLiteral<"click">;
180
+ }, z.core.$strict>, z.ZodObject<{
181
+ x: z.ZodNumber;
182
+ y: z.ZodNumber;
183
+ kind: z.ZodLiteral<"double_click">;
184
+ }, z.core.$strict>, z.ZodObject<{
185
+ x: z.ZodNumber;
186
+ y: z.ZodNumber;
187
+ kind: z.ZodLiteral<"move">;
188
+ }, z.core.$strict>, z.ZodObject<{
189
+ dx: z.ZodNumber;
190
+ dy: z.ZodNumber;
191
+ x: z.ZodNumber;
192
+ y: z.ZodNumber;
193
+ kind: z.ZodLiteral<"scroll">;
194
+ }, z.core.$strict>, z.ZodObject<{
195
+ kind: z.ZodLiteral<"type">;
196
+ text: z.ZodString;
197
+ }, z.core.$strict>, z.ZodObject<{
198
+ kind: z.ZodLiteral<"keypress">;
199
+ keys: z.ZodArray<z.ZodString>;
200
+ }, z.core.$strict>, z.ZodObject<{
201
+ kind: z.ZodLiteral<"drag">;
202
+ path: z.ZodArray<z.ZodObject<{
203
+ x: z.ZodNumber;
204
+ y: z.ZodNumber;
205
+ }, z.core.$strict>>;
206
+ }, z.core.$strict>, z.ZodObject<{
207
+ kind: z.ZodLiteral<"wait">;
208
+ ms: z.ZodOptional<z.ZodNumber>;
209
+ }, z.core.$strict>, z.ZodObject<{
210
+ kind: z.ZodLiteral<"screenshot">;
211
+ }, z.core.$strict>], "kind">, z.ZodTransform<{
212
+ kind: "click";
213
+ x: number;
214
+ y: number;
215
+ button?: "left" | "right" | "middle";
216
+ } | {
217
+ kind: "double_click";
218
+ x: number;
219
+ y: number;
220
+ } | {
221
+ kind: "move";
222
+ x: number;
223
+ y: number;
224
+ } | {
225
+ kind: "scroll";
226
+ x: number;
227
+ y: number;
228
+ dx: number;
229
+ dy: number;
230
+ } | {
231
+ kind: "type";
232
+ text: string;
233
+ } | {
234
+ kind: "keypress";
235
+ keys: string[];
236
+ } | {
237
+ kind: "drag";
238
+ path: Array<{
239
+ x: number;
240
+ y: number;
241
+ }>;
242
+ } | {
243
+ kind: "wait";
244
+ ms?: number;
245
+ } | {
246
+ kind: "screenshot";
247
+ }, {
248
+ x: number;
249
+ y: number;
250
+ kind: "click";
251
+ button?: "left" | "right" | "middle" | undefined;
252
+ } | {
253
+ x: number;
254
+ y: number;
255
+ kind: "double_click";
256
+ } | {
257
+ x: number;
258
+ y: number;
259
+ kind: "move";
260
+ } | {
261
+ dx: number;
262
+ dy: number;
263
+ x: number;
264
+ y: number;
265
+ kind: "scroll";
266
+ } | {
267
+ kind: "type";
268
+ text: string;
269
+ } | {
270
+ kind: "keypress";
271
+ keys: string[];
272
+ } | {
273
+ kind: "drag";
274
+ path: {
275
+ x: number;
276
+ y: number;
277
+ }[];
278
+ } | {
279
+ kind: "wait";
280
+ ms?: number | undefined;
281
+ } | {
282
+ kind: "screenshot";
283
+ }>>;
284
+ version: z.ZodLiteral<1>;
285
+ identity: z.ZodObject<{
286
+ generation: z.ZodString;
287
+ challenge: z.ZodString;
288
+ runtimeRevision: z.ZodString;
289
+ }, z.core.$strict>;
290
+ seq: z.ZodNumber;
291
+ requestId: z.ZodString;
292
+ }, z.core.$strict>], "operation">;
293
+ declare const replySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
294
+ ok: z.ZodLiteral<true>;
295
+ observation: z.ZodOptional<z.ZodObject<{
296
+ png: z.ZodString;
297
+ stateSignature: z.ZodString;
298
+ url: z.ZodOptional<z.ZodString>;
299
+ title: z.ZodOptional<z.ZodString>;
300
+ text: z.ZodOptional<z.ZodString>;
301
+ scrollY: z.ZodOptional<z.ZodNumber>;
302
+ }, z.core.$strict>>;
303
+ type: z.ZodLiteral<"reply">;
304
+ operation: z.ZodEnum<{
305
+ HELLO: "HELLO";
306
+ OBSERVE: "OBSERVE";
307
+ EXECUTE: "EXECUTE";
308
+ }>;
309
+ actionId: z.ZodOptional<z.ZodString>;
310
+ version: z.ZodLiteral<1>;
311
+ identity: z.ZodObject<{
312
+ generation: z.ZodString;
313
+ challenge: z.ZodString;
314
+ runtimeRevision: z.ZodString;
315
+ }, z.core.$strict>;
316
+ seq: z.ZodNumber;
317
+ requestId: z.ZodString;
318
+ }, z.core.$strict>, z.ZodObject<{
319
+ ok: z.ZodLiteral<false>;
320
+ error: z.ZodObject<{
321
+ code: z.ZodEnum<{
322
+ invalid_response: "invalid_response";
323
+ cancelled: "cancelled";
324
+ executor_closed: "executor_closed";
325
+ executor_not_ready: "executor_not_ready";
326
+ executor_busy: "executor_busy";
327
+ invalid_request: "invalid_request";
328
+ protocol_mismatch: "protocol_mismatch";
329
+ session_revoked: "session_revoked";
330
+ transport_failed: "transport_failed";
331
+ deadline_exceeded: "deadline_exceeded";
332
+ action_rejected: "action_rejected";
333
+ execution_failed: "execution_failed";
334
+ }>;
335
+ disposition: z.ZodEnum<{
336
+ not_dispatched: "not_dispatched";
337
+ outcome_uncertain: "outcome_uncertain";
338
+ }>;
339
+ }, z.core.$strict>;
340
+ type: z.ZodLiteral<"reply">;
341
+ operation: z.ZodEnum<{
342
+ HELLO: "HELLO";
343
+ OBSERVE: "OBSERVE";
344
+ EXECUTE: "EXECUTE";
345
+ }>;
346
+ actionId: z.ZodOptional<z.ZodString>;
347
+ version: z.ZodLiteral<1>;
348
+ identity: z.ZodObject<{
349
+ generation: z.ZodString;
350
+ challenge: z.ZodString;
351
+ runtimeRevision: z.ZodString;
352
+ }, z.core.$strict>;
353
+ seq: z.ZodNumber;
354
+ requestId: z.ZodString;
355
+ }, z.core.$strict>], "ok">;
356
+ export type BrowserControlRequest = z.infer<typeof requestSchema>;
357
+ export type BrowserControlReply = z.infer<typeof replySchema>;
358
+ export declare function validateBrowserControlIdentity(value: unknown): BrowserControlIdentity;
359
+ export declare function sameBrowserControlIdentity(a: BrowserControlIdentity, b: BrowserControlIdentity): boolean;
360
+ export declare function parseBrowserControlRequest(value: unknown): BrowserControlRequest;
361
+ export declare function parseBrowserControlReply(value: unknown): BrowserControlReply;
362
+ export declare function validateBrowserControlAction(value: unknown): CuaAction;
363
+ /** Check dimensions before allocating decoder output; v1 accepts browser-style 8-bit, noninterlaced PNG. */
364
+ export declare function validateBrowserControlPng(bytes: Buffer): void;
365
+ export declare function encodeBrowserControlObservation(observation: CuaObservation): WireObservation;
366
+ export declare function decodeBrowserControlObservation(value: unknown): CuaObservation;
367
+ export declare function safeBrowserControlFailure(error: unknown, dispatched: boolean): {
368
+ code: CuaExecutorErrorCode;
369
+ disposition: "not_dispatched" | "outcome_uncertain";
370
+ };
371
+ export {};
@@ -0,0 +1,155 @@
1
+ import { PNG } from "pngjs";
2
+ import { z } from "zod";
3
+ import { CuaExecutorError, isCuaExecutorError } from "./cua-executor-error.js";
4
+ export const BROWSER_CONTROL_VERSION = 1;
5
+ export const BROWSER_CONTROL_LIMITS = Object.freeze({
6
+ frameBytes: 12 * 1024 * 1024, pngBytes: 8 * 1024 * 1024,
7
+ dimension: 4096, pixels: 16_000_000, textBytes: 64 * 1024,
8
+ chordKeys: 16, keyCharacters: 64, dragPoints: 1024, waitMs: 30_000,
9
+ requestTimeoutMs: 35_000, maxRequestTimeoutMs: 60_000
10
+ });
11
+ const token = z.string().min(1).max(128).regex(/^[A-Za-z0-9._-]+$/);
12
+ const identitySchema = z.strictObject({ generation: token, challenge: token, runtimeRevision: token });
13
+ const text = z.string().max(BROWSER_CONTROL_LIMITS.textBytes).refine(value => Buffer.byteLength(value) <= BROWSER_CONTROL_LIMITS.textBytes);
14
+ const coordinate = z.number().finite().min(-1_000_000).max(1_000_000);
15
+ const point = { x: coordinate, y: coordinate };
16
+ export const browserControlActionSchema = z.discriminatedUnion("kind", [
17
+ z.strictObject({ kind: z.literal("click"), ...point, button: z.enum(["left", "right", "middle"]).optional() }),
18
+ z.strictObject({ kind: z.literal("double_click"), ...point }),
19
+ z.strictObject({ kind: z.literal("move"), ...point }),
20
+ z.strictObject({ kind: z.literal("scroll"), ...point, dx: coordinate, dy: coordinate }),
21
+ z.strictObject({ kind: z.literal("type"), text }),
22
+ z.strictObject({ kind: z.literal("keypress"), keys: z.array(z.string().min(1).max(BROWSER_CONTROL_LIMITS.keyCharacters)).min(1).max(BROWSER_CONTROL_LIMITS.chordKeys) }),
23
+ z.strictObject({ kind: z.literal("drag"), path: z.array(z.strictObject(point)).min(1).max(BROWSER_CONTROL_LIMITS.dragPoints) }),
24
+ z.strictObject({ kind: z.literal("wait"), ms: z.number().finite().min(0).max(BROWSER_CONTROL_LIMITS.waitMs).optional() }),
25
+ z.strictObject({ kind: z.literal("screenshot") })
26
+ ]).transform((action) => {
27
+ if (action.kind === "click")
28
+ return { kind: action.kind, x: action.x, y: action.y, ...(action.button !== undefined ? { button: action.button } : {}) };
29
+ if (action.kind === "wait")
30
+ return { kind: action.kind, ...(action.ms !== undefined ? { ms: action.ms } : {}) };
31
+ return action;
32
+ });
33
+ const observationSchema = z.strictObject({
34
+ png: z.string().min(1).max(4 * Math.ceil(BROWSER_CONTROL_LIMITS.pngBytes / 3)).regex(/^[A-Za-z0-9+/]*={0,2}$/).refine(value => value.length % 4 === 0),
35
+ stateSignature: text, url: text.optional(), title: text.optional(), text: text.optional(), scrollY: coordinate.optional()
36
+ });
37
+ const common = {
38
+ version: z.literal(BROWSER_CONTROL_VERSION), identity: identitySchema,
39
+ seq: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER), requestId: token
40
+ };
41
+ const requestSchema = z.discriminatedUnion("operation", [
42
+ z.strictObject({ ...common, type: z.literal("request"), operation: z.literal("HELLO") }),
43
+ z.strictObject({ ...common, type: z.literal("request"), operation: z.literal("OBSERVE") }),
44
+ z.strictObject({ ...common, type: z.literal("request"), operation: z.literal("EXECUTE"), actionId: token, action: browserControlActionSchema })
45
+ ]);
46
+ const errorCode = z.enum(["executor_closed", "executor_not_ready", "executor_busy", "cancelled", "invalid_request", "invalid_response", "protocol_mismatch", "session_revoked", "transport_failed", "deadline_exceeded", "action_rejected", "execution_failed"]);
47
+ const replyBase = { ...common, type: z.literal("reply"), operation: z.enum(["HELLO", "OBSERVE", "EXECUTE"]), actionId: token.optional() };
48
+ const replySchema = z.discriminatedUnion("ok", [
49
+ z.strictObject({ ...replyBase, ok: z.literal(true), observation: observationSchema.optional() }),
50
+ z.strictObject({ ...replyBase, ok: z.literal(false), error: z.strictObject({ code: errorCode, disposition: z.enum(["not_dispatched", "outcome_uncertain"]) }) })
51
+ ]);
52
+ export function validateBrowserControlIdentity(value) {
53
+ const parsed = identitySchema.safeParse(value);
54
+ if (!parsed.success)
55
+ throw new CuaExecutorError("invalid_request", "not_dispatched");
56
+ return parsed.data;
57
+ }
58
+ export function sameBrowserControlIdentity(a, b) {
59
+ return a.generation === b.generation && a.challenge === b.challenge && a.runtimeRevision === b.runtimeRevision;
60
+ }
61
+ export function parseBrowserControlRequest(value) {
62
+ const parsed = requestSchema.safeParse(value);
63
+ if (!parsed.success)
64
+ throw new CuaExecutorError("invalid_request", "not_dispatched");
65
+ const request = parsed.data;
66
+ if (request.requestId !== `request-${request.seq}` || (request.operation === "EXECUTE" && request.actionId !== `action-${request.seq}`))
67
+ throw new CuaExecutorError("invalid_request", "not_dispatched");
68
+ return request;
69
+ }
70
+ export function parseBrowserControlReply(value) {
71
+ const parsed = replySchema.safeParse(value);
72
+ if (!parsed.success)
73
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
74
+ const reply = parsed.data;
75
+ if ((reply.operation === "EXECUTE") !== (reply.actionId !== undefined)
76
+ || (reply.ok && (reply.operation === "OBSERVE") !== (reply.observation !== undefined)))
77
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
78
+ return reply;
79
+ }
80
+ export function validateBrowserControlAction(value) {
81
+ const parsed = browserControlActionSchema.safeParse(value);
82
+ if (!parsed.success)
83
+ throw new CuaExecutorError("invalid_request", "not_dispatched");
84
+ return parsed.data;
85
+ }
86
+ /** Check dimensions before allocating decoder output; v1 accepts browser-style 8-bit, noninterlaced PNG. */
87
+ export function validateBrowserControlPng(bytes) {
88
+ const fail = () => { throw new CuaExecutorError("invalid_response", "outcome_uncertain"); };
89
+ if (bytes.length < 45 || bytes.length > BROWSER_CONTROL_LIMITS.pngBytes
90
+ || !bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))
91
+ || bytes.readUInt32BE(8) !== 13 || bytes.toString("ascii", 12, 16) !== "IHDR")
92
+ fail();
93
+ const width = bytes.readUInt32BE(16), height = bytes.readUInt32BE(20);
94
+ if (width === 0 || height === 0 || width > BROWSER_CONTROL_LIMITS.dimension || height > BROWSER_CONTROL_LIMITS.dimension
95
+ || width * height > BROWSER_CONTROL_LIMITS.pixels || bytes[24] !== 8 || ![0, 2, 3, 4, 6].includes(bytes[25])
96
+ || bytes[26] !== 0 || bytes[27] !== 0 || bytes[28] !== 0)
97
+ fail();
98
+ // Reject trailing bytes, malformed chunk lengths, duplicate IHDR and absent image data.
99
+ let offset = 8, sawData = false, sawEnd = false;
100
+ while (offset + 12 <= bytes.length) {
101
+ const length = bytes.readUInt32BE(offset), kind = bytes.toString("ascii", offset + 4, offset + 8);
102
+ if (length > bytes.length - offset - 12 || (kind === "IHDR" && offset !== 8))
103
+ fail();
104
+ if (kind === "IDAT")
105
+ sawData = true;
106
+ offset += 12 + length;
107
+ if (kind === "IEND") {
108
+ if (length !== 0 || offset !== bytes.length)
109
+ fail();
110
+ sawEnd = true;
111
+ break;
112
+ }
113
+ }
114
+ if (!sawData || !sawEnd)
115
+ fail();
116
+ try {
117
+ const decoded = PNG.sync.read(bytes, { checkCRC: true });
118
+ if (decoded.width !== width || decoded.height !== height)
119
+ fail();
120
+ }
121
+ catch {
122
+ fail();
123
+ }
124
+ }
125
+ export function encodeBrowserControlObservation(observation) {
126
+ // appState has no closed browser schema in v1. Refuse rather than silently drop it.
127
+ if (!observation || observation.appState !== undefined || !Buffer.isBuffer(observation.screenshot))
128
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
129
+ validateBrowserControlPng(observation.screenshot);
130
+ const parsed = observationSchema.safeParse({ png: observation.screenshot.toString("base64"), stateSignature: observation.stateSignature,
131
+ ...(observation.url !== undefined ? { url: observation.url } : {}), ...(observation.title !== undefined ? { title: observation.title } : {}),
132
+ ...(observation.text !== undefined ? { text: observation.text } : {}), ...(observation.scrollY !== undefined ? { scrollY: observation.scrollY } : {}) });
133
+ if (!parsed.success)
134
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
135
+ return parsed.data;
136
+ }
137
+ export function decodeBrowserControlObservation(value) {
138
+ const parsed = observationSchema.safeParse(value);
139
+ if (!parsed.success)
140
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
141
+ const { png, ...state } = parsed.data;
142
+ const screenshot = Buffer.from(png, "base64");
143
+ if (screenshot.toString("base64") !== png)
144
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
145
+ validateBrowserControlPng(screenshot);
146
+ return { screenshot, stateSignature: state.stateSignature,
147
+ ...(state.url !== undefined ? { url: state.url } : {}), ...(state.title !== undefined ? { title: state.title } : {}),
148
+ ...(state.text !== undefined ? { text: state.text } : {}), ...(state.scrollY !== undefined ? { scrollY: state.scrollY } : {}) };
149
+ }
150
+ export function safeBrowserControlFailure(error, dispatched) {
151
+ if (isCuaExecutorError(error))
152
+ return { code: error.code, disposition: error.disposition };
153
+ return { code: "action_rejected", disposition: dispatched ? "outcome_uncertain" : "not_dispatched" };
154
+ }
155
+ //# sourceMappingURL=browser-control-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-control-protocol.js","sourceRoot":"","sources":["../src/browser-control-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Duplex } from "node:stream";
2
+ import { type CuaExecutorErrorCode } from "./cua-executor-error.js";
3
+ /** Owned byte channel only. This module never discovers endpoints or reconnects. */
4
+ export declare class BrowserControlTransport {
5
+ private readonly stream;
6
+ private readonly onFrame;
7
+ private readonly onClose;
8
+ private header;
9
+ private headerUsed;
10
+ private payload;
11
+ private payloadUsed;
12
+ private ended;
13
+ private sending;
14
+ private pendingWrite;
15
+ private frameTimer;
16
+ private readonly decoder;
17
+ constructor(stream: Duplex, onFrame: (value: unknown) => void, onClose: (code: CuaExecutorErrorCode) => void);
18
+ get closed(): boolean;
19
+ private data;
20
+ private error;
21
+ private end;
22
+ send(value: unknown, beforeWrite?: () => void): Promise<void>;
23
+ close(code?: CuaExecutorErrorCode): void;
24
+ }