@mlola/browser-protocol 0.1.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -0
  3. package/dist/actions.d.ts +124 -0
  4. package/dist/actions.d.ts.map +1 -0
  5. package/dist/actions.js +155 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/budget.d.ts +57 -0
  8. package/dist/budget.d.ts.map +1 -0
  9. package/dist/budget.js +25 -0
  10. package/dist/budget.js.map +1 -0
  11. package/dist/capabilities.d.ts +31 -0
  12. package/dist/capabilities.d.ts.map +1 -0
  13. package/dist/capabilities.js +54 -0
  14. package/dist/capabilities.js.map +1 -0
  15. package/dist/decision.d.ts +188 -0
  16. package/dist/decision.d.ts.map +1 -0
  17. package/dist/decision.js +9 -0
  18. package/dist/decision.js.map +1 -0
  19. package/dist/errors.d.ts +40 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +104 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/events.d.ts +326 -0
  24. package/dist/events.d.ts.map +1 -0
  25. package/dist/events.js +75 -0
  26. package/dist/events.js.map +1 -0
  27. package/dist/human.d.ts +43 -0
  28. package/dist/human.d.ts.map +1 -0
  29. package/dist/human.js +10 -0
  30. package/dist/human.js.map +1 -0
  31. package/dist/ids.d.ts +34 -0
  32. package/dist/ids.d.ts.map +1 -0
  33. package/dist/ids.js +22 -0
  34. package/dist/ids.js.map +1 -0
  35. package/dist/index.d.ts +25 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +25 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/memory.d.ts +37 -0
  40. package/dist/memory.d.ts.map +1 -0
  41. package/dist/memory.js +54 -0
  42. package/dist/memory.js.map +1 -0
  43. package/dist/observation.d.ts +157 -0
  44. package/dist/observation.d.ts.map +1 -0
  45. package/dist/observation.js +45 -0
  46. package/dist/observation.js.map +1 -0
  47. package/dist/policy.d.ts +89 -0
  48. package/dist/policy.d.ts.map +1 -0
  49. package/dist/policy.js +138 -0
  50. package/dist/policy.js.map +1 -0
  51. package/dist/provenance.d.ts +27 -0
  52. package/dist/provenance.d.ts.map +1 -0
  53. package/dist/provenance.js +46 -0
  54. package/dist/provenance.js.map +1 -0
  55. package/dist/schemas.d.ts +449 -0
  56. package/dist/schemas.d.ts.map +1 -0
  57. package/dist/schemas.js +218 -0
  58. package/dist/schemas.js.map +1 -0
  59. package/dist/task.d.ts +94 -0
  60. package/dist/task.d.ts.map +1 -0
  61. package/dist/task.js +13 -0
  62. package/dist/task.js.map +1 -0
  63. package/dist/verification.d.ts +70 -0
  64. package/dist/verification.d.ts.map +1 -0
  65. package/dist/verification.js +24 -0
  66. package/dist/verification.js.map +1 -0
  67. package/package.json +52 -0
@@ -0,0 +1,449 @@
1
+ /**
2
+ * Zod schemas for every untrusted boundary: model responses, policy files,
3
+ * task files, daemon payloads. Runtime internals use plain TypeScript types;
4
+ * anything that crosses a trust boundary is parsed here before it is trusted.
5
+ */
6
+ import { z } from "zod";
7
+ export declare const jevChoiceQuestionSchema: z.ZodObject<{
8
+ type: z.ZodLiteral<"choice">;
9
+ instructions: z.ZodString;
10
+ criteria: z.ZodRecord<z.ZodString, z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export declare const jevRequestSchema: z.ZodObject<{
13
+ model: z.ZodString;
14
+ state: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>;
15
+ questions: z.ZodRecord<z.ZodString, z.ZodObject<{
16
+ type: z.ZodLiteral<"choice">;
17
+ instructions: z.ZodString;
18
+ criteria: z.ZodRecord<z.ZodString, z.ZodString>;
19
+ }, z.core.$strip>>;
20
+ }, z.core.$strip>;
21
+ export declare const jevChoiceAnswerSchema: z.ZodObject<{
22
+ type: z.ZodOptional<z.ZodLiteral<"choice">>;
23
+ choice: z.ZodString;
24
+ confidence: z.ZodOptional<z.ZodNumber>;
25
+ probabilities: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
26
+ }, z.core.$strip>;
27
+ export declare const jevResponseSchema: z.ZodObject<{
28
+ model: z.ZodOptional<z.ZodString>;
29
+ answers: z.ZodRecord<z.ZodString, z.ZodObject<{
30
+ type: z.ZodOptional<z.ZodLiteral<"choice">>;
31
+ choice: z.ZodString;
32
+ confidence: z.ZodOptional<z.ZodNumber>;
33
+ probabilities: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
34
+ }, z.core.$strip>>;
35
+ usage: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
36
+ }, z.core.$strip>;
37
+ export type JevRequest = z.infer<typeof jevRequestSchema>;
38
+ export type JevResponse = z.infer<typeof jevResponseSchema>;
39
+ export type JevChoiceAnswer = z.infer<typeof jevChoiceAnswerSchema>;
40
+ export declare const textModelResponseSchema: z.ZodObject<{
41
+ text: z.ZodString;
42
+ }, z.core.$strip>;
43
+ export declare const plannerModelResponseSchema: z.ZodObject<{
44
+ subgoals: z.ZodArray<z.ZodObject<{
45
+ description: z.ZodString;
46
+ hints: z.ZodOptional<z.ZodArray<z.ZodString>>;
47
+ }, z.core.$strip>>;
48
+ notes: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$strip>;
50
+ export declare const completionCriteriaSchema: z.ZodType<import("./verification.ts").CompletionCriteria>;
51
+ export declare const completionSpecSchema: z.ZodObject<{
52
+ criteria: z.ZodType<import("./verification.ts").CompletionCriteria, unknown, z.core.$ZodTypeInternals<import("./verification.ts").CompletionCriteria, unknown>>;
53
+ stableForMs: z.ZodOptional<z.ZodNumber>;
54
+ }, z.core.$strip>;
55
+ export declare const permissionModeSchema: z.ZodEnum<{
56
+ allow: "allow";
57
+ deny: "deny";
58
+ ask: "ask";
59
+ takeover: "takeover";
60
+ }>;
61
+ export declare const actionRiskSchema: z.ZodEnum<{
62
+ download: "download";
63
+ upload: "upload";
64
+ read: "read";
65
+ navigate: "navigate";
66
+ send_message: "send_message";
67
+ publish: "publish";
68
+ purchase: "purchase";
69
+ delete: "delete";
70
+ credential_change: "credential_change";
71
+ permission_change: "permission_change";
72
+ irreversible: "irreversible";
73
+ unknown: "unknown";
74
+ }>;
75
+ export declare const siteRuleSchema: z.ZodObject<{
76
+ pattern: z.ZodString;
77
+ risk: z.ZodEnum<{
78
+ download: "download";
79
+ upload: "upload";
80
+ read: "read";
81
+ navigate: "navigate";
82
+ send_message: "send_message";
83
+ publish: "publish";
84
+ purchase: "purchase";
85
+ delete: "delete";
86
+ credential_change: "credential_change";
87
+ permission_change: "permission_change";
88
+ irreversible: "irreversible";
89
+ unknown: "unknown";
90
+ }>;
91
+ mode: z.ZodEnum<{
92
+ allow: "allow";
93
+ deny: "deny";
94
+ ask: "ask";
95
+ takeover: "takeover";
96
+ }>;
97
+ note: z.ZodOptional<z.ZodString>;
98
+ }, z.core.$strip>;
99
+ export declare const policyFileSchema: z.ZodObject<{
100
+ defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
101
+ allow: "allow";
102
+ deny: "deny";
103
+ ask: "ask";
104
+ takeover: "takeover";
105
+ }>>>;
106
+ siteRules: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
+ pattern: z.ZodString;
108
+ risk: z.ZodEnum<{
109
+ download: "download";
110
+ upload: "upload";
111
+ read: "read";
112
+ navigate: "navigate";
113
+ send_message: "send_message";
114
+ publish: "publish";
115
+ purchase: "purchase";
116
+ delete: "delete";
117
+ credential_change: "credential_change";
118
+ permission_change: "permission_change";
119
+ irreversible: "irreversible";
120
+ unknown: "unknown";
121
+ }>;
122
+ mode: z.ZodEnum<{
123
+ allow: "allow";
124
+ deny: "deny";
125
+ ask: "ask";
126
+ takeover: "takeover";
127
+ }>;
128
+ note: z.ZodOptional<z.ZodString>;
129
+ }, z.core.$strip>>>;
130
+ borrowTabs: z.ZodOptional<z.ZodEnum<{
131
+ allow: "allow";
132
+ deny: "deny";
133
+ ask: "ask";
134
+ takeover: "takeover";
135
+ }>>;
136
+ useExistingProfile: z.ZodOptional<z.ZodEnum<{
137
+ allow: "allow";
138
+ deny: "deny";
139
+ ask: "ask";
140
+ takeover: "takeover";
141
+ }>>;
142
+ clipboard: z.ZodOptional<z.ZodEnum<{
143
+ allow: "allow";
144
+ deny: "deny";
145
+ ask: "ask";
146
+ takeover: "takeover";
147
+ }>>;
148
+ secretsRequireTakeover: z.ZodOptional<z.ZodBoolean>;
149
+ maxTypedLength: z.ZodOptional<z.ZodNumber>;
150
+ allowedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
151
+ blockedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
152
+ restrictNavigation: z.ZodOptional<z.ZodBoolean>;
153
+ }, z.core.$strip>;
154
+ export type PolicyFile = z.infer<typeof policyFileSchema>;
155
+ export declare const browserConfigFileSchema: z.ZodObject<{
156
+ backend: z.ZodOptional<z.ZodEnum<{
157
+ playwright: "playwright";
158
+ "chrome-extension": "chrome-extension";
159
+ mock: "mock";
160
+ }>>;
161
+ mode: z.ZodOptional<z.ZodEnum<{
162
+ managed: "managed";
163
+ cdp: "cdp";
164
+ }>>;
165
+ channel: z.ZodOptional<z.ZodString>;
166
+ executablePath: z.ZodOptional<z.ZodString>;
167
+ headless: z.ZodOptional<z.ZodBoolean>;
168
+ userDataDir: z.ZodOptional<z.ZodString>;
169
+ cdpUrl: z.ZodOptional<z.ZodString>;
170
+ viewport: z.ZodOptional<z.ZodObject<{
171
+ width: z.ZodNumber;
172
+ height: z.ZodNumber;
173
+ }, z.core.$strip>>;
174
+ downloadsDir: z.ZodOptional<z.ZodString>;
175
+ acceptDownloads: z.ZodOptional<z.ZodBoolean>;
176
+ actionTimeoutMs: z.ZodOptional<z.ZodNumber>;
177
+ settleMs: z.ZodOptional<z.ZodNumber>;
178
+ slowMoMs: z.ZodOptional<z.ZodNumber>;
179
+ locale: z.ZodOptional<z.ZodString>;
180
+ timezone: z.ZodOptional<z.ZodString>;
181
+ }, z.core.$strip>;
182
+ export declare const budgetsFileSchema: z.ZodObject<{
183
+ maxSteps: z.ZodOptional<z.ZodNumber>;
184
+ maxDecisionCalls: z.ZodOptional<z.ZodNumber>;
185
+ maxPlannerCalls: z.ZodOptional<z.ZodNumber>;
186
+ maxTextCalls: z.ZodOptional<z.ZodNumber>;
187
+ maxVisionCalls: z.ZodOptional<z.ZodNumber>;
188
+ maxCostUsd: z.ZodOptional<z.ZodNumber>;
189
+ maxDurationMs: z.ZodOptional<z.ZodNumber>;
190
+ maxRecoveryAttemptsPerStep: z.ZodOptional<z.ZodNumber>;
191
+ maxRecoveryAttemptsTotal: z.ZodOptional<z.ZodNumber>;
192
+ maxConsecutiveNoProgress: z.ZodOptional<z.ZodNumber>;
193
+ maxHumanHelpRequests: z.ZodOptional<z.ZodNumber>;
194
+ }, z.core.$strip>;
195
+ export declare const taskFileSchema: z.ZodObject<{
196
+ goal: z.ZodString;
197
+ startUrl: z.ZodOptional<z.ZodString>;
198
+ successCriteria: z.ZodOptional<z.ZodObject<{
199
+ criteria: z.ZodType<import("./verification.ts").CompletionCriteria, unknown, z.core.$ZodTypeInternals<import("./verification.ts").CompletionCriteria, unknown>>;
200
+ stableForMs: z.ZodOptional<z.ZodNumber>;
201
+ }, z.core.$strip>>;
202
+ stopBefore: z.ZodOptional<z.ZodArray<z.ZodString>>;
203
+ budgets: z.ZodOptional<z.ZodObject<{
204
+ maxSteps: z.ZodOptional<z.ZodNumber>;
205
+ maxDecisionCalls: z.ZodOptional<z.ZodNumber>;
206
+ maxPlannerCalls: z.ZodOptional<z.ZodNumber>;
207
+ maxTextCalls: z.ZodOptional<z.ZodNumber>;
208
+ maxVisionCalls: z.ZodOptional<z.ZodNumber>;
209
+ maxCostUsd: z.ZodOptional<z.ZodNumber>;
210
+ maxDurationMs: z.ZodOptional<z.ZodNumber>;
211
+ maxRecoveryAttemptsPerStep: z.ZodOptional<z.ZodNumber>;
212
+ maxRecoveryAttemptsTotal: z.ZodOptional<z.ZodNumber>;
213
+ maxConsecutiveNoProgress: z.ZodOptional<z.ZodNumber>;
214
+ maxHumanHelpRequests: z.ZodOptional<z.ZodNumber>;
215
+ }, z.core.$strip>>;
216
+ browser: z.ZodOptional<z.ZodObject<{
217
+ backend: z.ZodOptional<z.ZodEnum<{
218
+ playwright: "playwright";
219
+ "chrome-extension": "chrome-extension";
220
+ mock: "mock";
221
+ }>>;
222
+ mode: z.ZodOptional<z.ZodEnum<{
223
+ managed: "managed";
224
+ cdp: "cdp";
225
+ }>>;
226
+ channel: z.ZodOptional<z.ZodString>;
227
+ executablePath: z.ZodOptional<z.ZodString>;
228
+ headless: z.ZodOptional<z.ZodBoolean>;
229
+ userDataDir: z.ZodOptional<z.ZodString>;
230
+ cdpUrl: z.ZodOptional<z.ZodString>;
231
+ viewport: z.ZodOptional<z.ZodObject<{
232
+ width: z.ZodNumber;
233
+ height: z.ZodNumber;
234
+ }, z.core.$strip>>;
235
+ downloadsDir: z.ZodOptional<z.ZodString>;
236
+ acceptDownloads: z.ZodOptional<z.ZodBoolean>;
237
+ actionTimeoutMs: z.ZodOptional<z.ZodNumber>;
238
+ settleMs: z.ZodOptional<z.ZodNumber>;
239
+ slowMoMs: z.ZodOptional<z.ZodNumber>;
240
+ locale: z.ZodOptional<z.ZodString>;
241
+ timezone: z.ZodOptional<z.ZodString>;
242
+ }, z.core.$strip>>;
243
+ policy: z.ZodOptional<z.ZodObject<{
244
+ defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
245
+ allow: "allow";
246
+ deny: "deny";
247
+ ask: "ask";
248
+ takeover: "takeover";
249
+ }>>>;
250
+ siteRules: z.ZodOptional<z.ZodArray<z.ZodObject<{
251
+ pattern: z.ZodString;
252
+ risk: z.ZodEnum<{
253
+ download: "download";
254
+ upload: "upload";
255
+ read: "read";
256
+ navigate: "navigate";
257
+ send_message: "send_message";
258
+ publish: "publish";
259
+ purchase: "purchase";
260
+ delete: "delete";
261
+ credential_change: "credential_change";
262
+ permission_change: "permission_change";
263
+ irreversible: "irreversible";
264
+ unknown: "unknown";
265
+ }>;
266
+ mode: z.ZodEnum<{
267
+ allow: "allow";
268
+ deny: "deny";
269
+ ask: "ask";
270
+ takeover: "takeover";
271
+ }>;
272
+ note: z.ZodOptional<z.ZodString>;
273
+ }, z.core.$strip>>>;
274
+ borrowTabs: z.ZodOptional<z.ZodEnum<{
275
+ allow: "allow";
276
+ deny: "deny";
277
+ ask: "ask";
278
+ takeover: "takeover";
279
+ }>>;
280
+ useExistingProfile: z.ZodOptional<z.ZodEnum<{
281
+ allow: "allow";
282
+ deny: "deny";
283
+ ask: "ask";
284
+ takeover: "takeover";
285
+ }>>;
286
+ clipboard: z.ZodOptional<z.ZodEnum<{
287
+ allow: "allow";
288
+ deny: "deny";
289
+ ask: "ask";
290
+ takeover: "takeover";
291
+ }>>;
292
+ secretsRequireTakeover: z.ZodOptional<z.ZodBoolean>;
293
+ maxTypedLength: z.ZodOptional<z.ZodNumber>;
294
+ allowedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
295
+ blockedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
296
+ restrictNavigation: z.ZodOptional<z.ZodBoolean>;
297
+ }, z.core.$strip>>;
298
+ screenshot: z.ZodOptional<z.ZodEnum<{
299
+ off: "off";
300
+ "on-failure": "on-failure";
301
+ always: "always";
302
+ }>>;
303
+ providers: z.ZodOptional<z.ZodObject<{
304
+ decision: z.ZodOptional<z.ZodString>;
305
+ text: z.ZodOptional<z.ZodString>;
306
+ planner: z.ZodOptional<z.ZodString>;
307
+ vision: z.ZodOptional<z.ZodString>;
308
+ }, z.core.$strip>>;
309
+ forcePlanner: z.ZodOptional<z.ZodBoolean>;
310
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
311
+ }, z.core.$strip>;
312
+ export type TaskFile = z.infer<typeof taskFileSchema>;
313
+ export declare const createRunRequestSchema: z.ZodObject<{
314
+ goal: z.ZodString;
315
+ startUrl: z.ZodOptional<z.ZodString>;
316
+ successCriteria: z.ZodOptional<z.ZodObject<{
317
+ criteria: z.ZodType<import("./verification.ts").CompletionCriteria, unknown, z.core.$ZodTypeInternals<import("./verification.ts").CompletionCriteria, unknown>>;
318
+ stableForMs: z.ZodOptional<z.ZodNumber>;
319
+ }, z.core.$strip>>;
320
+ stopBefore: z.ZodOptional<z.ZodArray<z.ZodString>>;
321
+ browser: z.ZodOptional<z.ZodObject<{
322
+ backend: z.ZodOptional<z.ZodEnum<{
323
+ playwright: "playwright";
324
+ "chrome-extension": "chrome-extension";
325
+ mock: "mock";
326
+ }>>;
327
+ mode: z.ZodOptional<z.ZodEnum<{
328
+ managed: "managed";
329
+ cdp: "cdp";
330
+ }>>;
331
+ channel: z.ZodOptional<z.ZodString>;
332
+ executablePath: z.ZodOptional<z.ZodString>;
333
+ headless: z.ZodOptional<z.ZodBoolean>;
334
+ userDataDir: z.ZodOptional<z.ZodString>;
335
+ cdpUrl: z.ZodOptional<z.ZodString>;
336
+ viewport: z.ZodOptional<z.ZodObject<{
337
+ width: z.ZodNumber;
338
+ height: z.ZodNumber;
339
+ }, z.core.$strip>>;
340
+ downloadsDir: z.ZodOptional<z.ZodString>;
341
+ acceptDownloads: z.ZodOptional<z.ZodBoolean>;
342
+ actionTimeoutMs: z.ZodOptional<z.ZodNumber>;
343
+ settleMs: z.ZodOptional<z.ZodNumber>;
344
+ slowMoMs: z.ZodOptional<z.ZodNumber>;
345
+ locale: z.ZodOptional<z.ZodString>;
346
+ timezone: z.ZodOptional<z.ZodString>;
347
+ }, z.core.$strip>>;
348
+ policy: z.ZodOptional<z.ZodObject<{
349
+ defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
350
+ allow: "allow";
351
+ deny: "deny";
352
+ ask: "ask";
353
+ takeover: "takeover";
354
+ }>>>;
355
+ siteRules: z.ZodOptional<z.ZodArray<z.ZodObject<{
356
+ pattern: z.ZodString;
357
+ risk: z.ZodEnum<{
358
+ download: "download";
359
+ upload: "upload";
360
+ read: "read";
361
+ navigate: "navigate";
362
+ send_message: "send_message";
363
+ publish: "publish";
364
+ purchase: "purchase";
365
+ delete: "delete";
366
+ credential_change: "credential_change";
367
+ permission_change: "permission_change";
368
+ irreversible: "irreversible";
369
+ unknown: "unknown";
370
+ }>;
371
+ mode: z.ZodEnum<{
372
+ allow: "allow";
373
+ deny: "deny";
374
+ ask: "ask";
375
+ takeover: "takeover";
376
+ }>;
377
+ note: z.ZodOptional<z.ZodString>;
378
+ }, z.core.$strip>>>;
379
+ borrowTabs: z.ZodOptional<z.ZodEnum<{
380
+ allow: "allow";
381
+ deny: "deny";
382
+ ask: "ask";
383
+ takeover: "takeover";
384
+ }>>;
385
+ useExistingProfile: z.ZodOptional<z.ZodEnum<{
386
+ allow: "allow";
387
+ deny: "deny";
388
+ ask: "ask";
389
+ takeover: "takeover";
390
+ }>>;
391
+ clipboard: z.ZodOptional<z.ZodEnum<{
392
+ allow: "allow";
393
+ deny: "deny";
394
+ ask: "ask";
395
+ takeover: "takeover";
396
+ }>>;
397
+ secretsRequireTakeover: z.ZodOptional<z.ZodBoolean>;
398
+ maxTypedLength: z.ZodOptional<z.ZodNumber>;
399
+ allowedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
400
+ blockedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
401
+ restrictNavigation: z.ZodOptional<z.ZodBoolean>;
402
+ }, z.core.$strip>>;
403
+ budgets: z.ZodOptional<z.ZodObject<{
404
+ maxSteps: z.ZodOptional<z.ZodNumber>;
405
+ maxDecisionCalls: z.ZodOptional<z.ZodNumber>;
406
+ maxPlannerCalls: z.ZodOptional<z.ZodNumber>;
407
+ maxTextCalls: z.ZodOptional<z.ZodNumber>;
408
+ maxVisionCalls: z.ZodOptional<z.ZodNumber>;
409
+ maxCostUsd: z.ZodOptional<z.ZodNumber>;
410
+ maxDurationMs: z.ZodOptional<z.ZodNumber>;
411
+ maxRecoveryAttemptsPerStep: z.ZodOptional<z.ZodNumber>;
412
+ maxRecoveryAttemptsTotal: z.ZodOptional<z.ZodNumber>;
413
+ maxConsecutiveNoProgress: z.ZodOptional<z.ZodNumber>;
414
+ maxHumanHelpRequests: z.ZodOptional<z.ZodNumber>;
415
+ }, z.core.$strip>>;
416
+ screenshot: z.ZodOptional<z.ZodEnum<{
417
+ off: "off";
418
+ "on-failure": "on-failure";
419
+ always: "always";
420
+ }>>;
421
+ providers: z.ZodOptional<z.ZodObject<{
422
+ decision: z.ZodOptional<z.ZodString>;
423
+ text: z.ZodOptional<z.ZodString>;
424
+ planner: z.ZodOptional<z.ZodString>;
425
+ }, z.core.$strip>>;
426
+ detached: z.ZodOptional<z.ZodBoolean>;
427
+ }, z.core.$strip>;
428
+ export type CreateRunRequest = z.infer<typeof createRunRequestSchema>;
429
+ export declare const helpResolutionSchema: z.ZodObject<{
430
+ resolution: z.ZodEnum<{
431
+ takeover: "takeover";
432
+ completed: "completed";
433
+ cancelled: "cancelled";
434
+ }>;
435
+ note: z.ZodOptional<z.ZodString>;
436
+ }, z.core.$strip>;
437
+ export type HelpResolution = z.infer<typeof helpResolutionSchema>;
438
+ export declare const approvalResolutionSchema: z.ZodObject<{
439
+ resolution: z.ZodEnum<{
440
+ takeover: "takeover";
441
+ approved: "approved";
442
+ denied: "denied";
443
+ }>;
444
+ note: z.ZodOptional<z.ZodString>;
445
+ }, z.core.$strip>;
446
+ export type ApprovalResolutionPayload = z.infer<typeof approvalResolutionSchema>;
447
+ export declare const formatZodError: (error: z.ZodError, label?: string) => string;
448
+ export declare const parseOrThrow: <T>(schema: z.ZodType<T>, value: unknown, label?: string) => T;
449
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;iBAI3B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;iBAI5B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAIH,eAAO,MAAM,0BAA0B;;;;;;iBAWrC,CAAC;AAIH,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,mBAAmB,EAAE,kBAAkB,CAuB9F,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAIH,eAAO,MAAM,oBAAoB;;;;;EAA+C,CAAC;AAEjF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;EAa3B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBzB,CAAC;AAEL,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBlC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAY5B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAItD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,oBAAoB;;;;;;;iBAG/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB;;;;;;;iBAGnC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAIjF,eAAO,MAAM,cAAc,GAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,cAAiB,KAAG,MAIrD,CAAC;AAElB,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,OAAO,EAAE,QAAQ,MAAM,KAAG,CAItF,CAAC"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Zod schemas for every untrusted boundary: model responses, policy files,
3
+ * task files, daemon payloads. Runtime internals use plain TypeScript types;
4
+ * anything that crosses a trust boundary is parsed here before it is trusted.
5
+ */
6
+ import { z } from "zod";
7
+ const ACTION_RISKS = [
8
+ "read",
9
+ "navigate",
10
+ "download",
11
+ "upload",
12
+ "send_message",
13
+ "publish",
14
+ "purchase",
15
+ "delete",
16
+ "credential_change",
17
+ "permission_change",
18
+ "irreversible",
19
+ "unknown",
20
+ ];
21
+ /* ─────────────────────────── Fast-path (Jev) contract ─────────────────────── */
22
+ export const jevChoiceQuestionSchema = z.object({
23
+ type: z.literal("choice"),
24
+ instructions: z.string().min(1),
25
+ criteria: z.record(z.string(), z.string()),
26
+ });
27
+ export const jevRequestSchema = z.object({
28
+ model: z.string().min(1),
29
+ state: z.union([z.string(), z.record(z.string(), z.unknown())]),
30
+ questions: z.record(z.string(), jevChoiceQuestionSchema),
31
+ });
32
+ export const jevChoiceAnswerSchema = z.object({
33
+ type: z.literal("choice").optional(),
34
+ choice: z.string().min(1),
35
+ confidence: z.number().optional(),
36
+ probabilities: z.record(z.string(), z.number()).optional(),
37
+ });
38
+ export const jevResponseSchema = z.object({
39
+ model: z.string().optional(),
40
+ answers: z.record(z.string(), jevChoiceAnswerSchema),
41
+ usage: z.record(z.string(), z.number()).optional(),
42
+ });
43
+ /* ───────────────────────────── Text helper contract ───────────────────────── */
44
+ export const textModelResponseSchema = z.object({
45
+ text: z.string(),
46
+ });
47
+ /* ──────────────────────────── Planner contract ────────────────────────────── */
48
+ export const plannerModelResponseSchema = z.object({
49
+ subgoals: z
50
+ .array(z.object({
51
+ description: z.string().min(1),
52
+ hints: z.array(z.string()).optional(),
53
+ }))
54
+ .min(1)
55
+ .max(12),
56
+ notes: z.string().optional(),
57
+ });
58
+ /* ────────────────────────────── Completion spec ───────────────────────────── */
59
+ export const completionCriteriaSchema = z.lazy(() => z.union([
60
+ z.object({ kind: z.literal("url_contains"), value: z.string() }),
61
+ z.object({ kind: z.literal("url_matches"), pattern: z.string() }),
62
+ z.object({ kind: z.literal("title_contains"), value: z.string() }),
63
+ z.object({
64
+ kind: z.literal("element_visible"),
65
+ label: z.string(),
66
+ role: z.string().optional(),
67
+ }),
68
+ z.object({ kind: z.literal("text_visible"), text: z.string() }),
69
+ z.object({
70
+ kind: z.literal("artifact"),
71
+ documentType: z.string().optional(),
72
+ namePattern: z.string().optional(),
73
+ minCount: z.number().int().positive().optional(),
74
+ }),
75
+ z.object({ kind: z.literal("download_completed") }),
76
+ z.object({ kind: z.literal("manual"), description: z.string() }),
77
+ z.object({ kind: z.literal("all"), of: z.array(completionCriteriaSchema).min(1) }),
78
+ z.object({ kind: z.literal("any"), of: z.array(completionCriteriaSchema).min(1) }),
79
+ z.object({ kind: z.literal("not"), of: completionCriteriaSchema }),
80
+ ]));
81
+ export const completionSpecSchema = z.object({
82
+ criteria: completionCriteriaSchema,
83
+ stableForMs: z.number().int().nonnegative().optional(),
84
+ });
85
+ /* ──────────────────────────── Policy file on disk ─────────────────────────── */
86
+ export const permissionModeSchema = z.enum(["allow", "deny", "ask", "takeover"]);
87
+ export const actionRiskSchema = z.enum([
88
+ "read",
89
+ "navigate",
90
+ "download",
91
+ "upload",
92
+ "send_message",
93
+ "publish",
94
+ "purchase",
95
+ "delete",
96
+ "credential_change",
97
+ "permission_change",
98
+ "irreversible",
99
+ "unknown",
100
+ ]);
101
+ export const siteRuleSchema = z.object({
102
+ pattern: z.string().min(1),
103
+ risk: actionRiskSchema,
104
+ mode: permissionModeSchema,
105
+ note: z.string().optional(),
106
+ });
107
+ export const policyFileSchema = z
108
+ .object({
109
+ defaults: z.record(z.string(), permissionModeSchema).optional(),
110
+ siteRules: z.array(siteRuleSchema).optional(),
111
+ borrowTabs: permissionModeSchema.optional(),
112
+ useExistingProfile: permissionModeSchema.optional(),
113
+ clipboard: permissionModeSchema.optional(),
114
+ secretsRequireTakeover: z.boolean().optional(),
115
+ maxTypedLength: z.number().int().positive().optional(),
116
+ allowedOrigins: z.array(z.string()).optional(),
117
+ blockedOrigins: z.array(z.string()).optional(),
118
+ restrictNavigation: z.boolean().optional(),
119
+ })
120
+ .superRefine((value, ctx) => {
121
+ for (const key of Object.keys(value.defaults ?? {})) {
122
+ if (!ACTION_RISKS.includes(key)) {
123
+ ctx.addIssue({ code: "custom", message: `unknown risk "${key}" in defaults`, path: ["defaults", key] });
124
+ }
125
+ }
126
+ });
127
+ /* ─────────────────────────────── Task file ────────────────────────────────── */
128
+ export const browserConfigFileSchema = z.object({
129
+ backend: z.enum(["playwright", "chrome-extension", "mock"]).optional(),
130
+ mode: z.enum(["managed", "cdp"]).optional(),
131
+ channel: z.string().optional(),
132
+ executablePath: z.string().optional(),
133
+ headless: z.boolean().optional(),
134
+ userDataDir: z.string().optional(),
135
+ cdpUrl: z.string().optional(),
136
+ viewport: z
137
+ .object({ width: z.number().int().positive(), height: z.number().int().positive() })
138
+ .optional(),
139
+ downloadsDir: z.string().optional(),
140
+ acceptDownloads: z.boolean().optional(),
141
+ actionTimeoutMs: z.number().int().positive().optional(),
142
+ settleMs: z.number().int().nonnegative().optional(),
143
+ slowMoMs: z.number().nonnegative().optional(),
144
+ locale: z.string().optional(),
145
+ timezone: z.string().optional(),
146
+ });
147
+ export const budgetsFileSchema = z.object({
148
+ maxSteps: z.number().int().positive().optional(),
149
+ maxDecisionCalls: z.number().int().positive().optional(),
150
+ maxPlannerCalls: z.number().int().nonnegative().optional(),
151
+ maxTextCalls: z.number().int().nonnegative().optional(),
152
+ maxVisionCalls: z.number().int().nonnegative().optional(),
153
+ maxCostUsd: z.number().nonnegative().optional(),
154
+ maxDurationMs: z.number().int().positive().optional(),
155
+ maxRecoveryAttemptsPerStep: z.number().int().nonnegative().optional(),
156
+ maxRecoveryAttemptsTotal: z.number().int().nonnegative().optional(),
157
+ maxConsecutiveNoProgress: z.number().int().positive().optional(),
158
+ maxHumanHelpRequests: z.number().int().nonnegative().optional(),
159
+ });
160
+ export const taskFileSchema = z.object({
161
+ goal: z.string().min(1),
162
+ startUrl: z.string().optional(),
163
+ successCriteria: completionSpecSchema.optional(),
164
+ stopBefore: z.array(z.string()).optional(),
165
+ budgets: budgetsFileSchema.optional(),
166
+ browser: browserConfigFileSchema.optional(),
167
+ policy: policyFileSchema.optional(),
168
+ screenshot: z.enum(["off", "on-failure", "always"]).optional(),
169
+ providers: z
170
+ .object({
171
+ decision: z.string().optional(),
172
+ text: z.string().optional(),
173
+ planner: z.string().optional(),
174
+ vision: z.string().optional(),
175
+ })
176
+ .optional(),
177
+ forcePlanner: z.boolean().optional(),
178
+ metadata: z.record(z.string(), z.unknown()).optional(),
179
+ });
180
+ /* ───────────────────────────── Daemon API shapes ──────────────────────────── */
181
+ export const createRunRequestSchema = z.object({
182
+ goal: z.string().min(1),
183
+ startUrl: z.string().optional(),
184
+ successCriteria: completionSpecSchema.optional(),
185
+ stopBefore: z.array(z.string()).optional(),
186
+ browser: browserConfigFileSchema.optional(),
187
+ policy: policyFileSchema.optional(),
188
+ budgets: budgetsFileSchema.optional(),
189
+ screenshot: z.enum(["off", "on-failure", "always"]).optional(),
190
+ providers: z
191
+ .object({
192
+ decision: z.string().optional(),
193
+ text: z.string().optional(),
194
+ planner: z.string().optional(),
195
+ })
196
+ .optional(),
197
+ detached: z.boolean().optional(),
198
+ });
199
+ export const helpResolutionSchema = z.object({
200
+ resolution: z.enum(["completed", "cancelled", "takeover"]),
201
+ note: z.string().optional(),
202
+ });
203
+ export const approvalResolutionSchema = z.object({
204
+ resolution: z.enum(["approved", "denied", "takeover"]),
205
+ note: z.string().optional(),
206
+ });
207
+ /* ─────────────────────────────── helpers ──────────────────────────────────── */
208
+ export const formatZodError = (error, label = "payload") => `${label}: ${error.issues
209
+ .slice(0, 6)
210
+ .map((i) => `${i.path.length > 0 ? i.path.join(".") : "(root)"}: ${i.message}`)
211
+ .join("; ")}`;
212
+ export const parseOrThrow = (schema, value, label) => {
213
+ const parsed = schema.safeParse(value);
214
+ if (!parsed.success)
215
+ throw new Error(formatZodError(parsed.error, label));
216
+ return parsed.data;
217
+ };
218
+ //# sourceMappingURL=schemas.js.map