@deeeed/metamask-harness 0.70.0 → 0.71.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.
- package/CHANGELOG.md +28 -0
- package/README.md +16 -9
- package/adapters/extension/console-tail.mjs +38 -6
- package/adapters/extension/launch-browser.cjs +16 -4
- package/adapters/manifest.json +128 -0
- package/adapters/shared/browser-cdp.cjs +21 -7
- package/adapters/shared/browser-resolver.cjs +22 -11
- package/adapters/terminal/cleanup.mjs +68 -0
- package/adapters/terminal/inject.mjs +74 -0
- package/adapters/terminal/launch.mjs +628 -0
- package/adapters/terminal/lib/cdp-client.mjs +84 -0
- package/adapters/terminal/lib/display.mjs +115 -0
- package/adapters/terminal/lib/hud.mjs +148 -0
- package/adapters/terminal/lib/mainnet-guard.mjs +177 -0
- package/adapters/terminal/lib/origin.mjs +30 -0
- package/adapters/terminal/lib/page-script.mjs +246 -0
- package/adapters/terminal/lib/processes.mjs +187 -0
- package/adapters/terminal/lib/readiness.mjs +274 -0
- package/adapters/terminal/lib/strict-wallet.mjs +138 -0
- package/adapters/terminal/stop.mjs +37 -0
- package/adapters/terminal/verify.mjs +48 -0
- package/adapters/terminal/wallet-host.mjs +703 -0
- package/dist/adapters/console-capture.js +122 -0
- package/dist/adapters/extension/console-capture.js +22 -85
- package/dist/adapters/surface.js +3 -1
- package/dist/adapters/terminal/console-capture.js +46 -0
- package/dist/adapters/terminal/stop.js +19 -0
- package/dist/adapters/terminal/surface.js +104 -0
- package/dist/adapters.js +27 -4
- package/dist/cli.js +2 -2
- package/dist/command-contract.js +12 -4
- package/dist/commands/check.js +1 -1
- package/dist/commands/config.js +1 -1
- package/dist/commands/doctor.js +24 -1
- package/dist/commands/domain.js +1 -1
- package/dist/commands/farmslot-ready.js +2 -0
- package/dist/commands/help.js +2 -2
- package/dist/commands/launch/index.js +97 -2
- package/dist/commands/manifest.js +3 -3
- package/dist/commands/recipe-advice.js +1 -1
- package/dist/commands/review.js +1 -1
- package/dist/commands/run-engine.js +1 -1
- package/dist/commands/shared.js +1 -1
- package/dist/doctor.js +4 -1
- package/dist/harness.js +17 -11
- package/dist/manifest.js +5 -0
- package/dist/mm-harness-cli.js +34 -20
- package/dist/paths.js +2 -2
- package/dist/recipe-security.js +12 -3
- package/dist/review/knowledge.js +1 -1
- package/dist/run-diagnostics.js +150 -33
- package/dist/runner.js +1 -1
- package/dist/runtime-context.js +3 -3
- package/docs/CONTRIBUTING.md +1 -1
- package/library/actions/extension/platform/cdp.mjs +35 -10
- package/library/actions/shared/console-allowlist-add.mjs +137 -0
- package/library/actions/shared/console-collector.mjs +230 -0
- package/library/actions/shared/console-findings.mjs +511 -0
- package/library/actions/terminal/app/assert_no_console_errors.mjs +119 -0
- package/library/actions/terminal/app/launch.mjs +45 -0
- package/library/actions/terminal/perps/_venue.mjs +242 -0
- package/library/actions/terminal/perps/assert_orders.mjs +54 -0
- package/library/actions/terminal/perps/assert_positions.mjs +40 -0
- package/library/actions/terminal/perps/read_orders.mjs +26 -0
- package/library/actions/terminal/perps/read_positions.mjs +25 -0
- package/library/actions/terminal/perps/read_snapshot.mjs +40 -0
- package/library/actions/terminal/perps/revoke_agent.mjs +58 -0
- package/library/actions/terminal/perps/teardown_state.mjs +104 -0
- package/library/actions/terminal/platform/hud.mjs +71 -0
- package/library/actions/terminal/platform/page.mjs +247 -0
- package/library/actions/terminal/platform/runtime.mjs +200 -0
- package/library/actions/terminal/ui/navigate.mjs +31 -0
- package/library/actions/terminal/wallet/_signature-log.mjs +177 -0
- package/library/actions/terminal/wallet/assert_signatures.mjs +43 -0
- package/library/actions/terminal/wallet/list_accounts.mjs +27 -0
- package/library/actions/terminal/wallet/read_signatures.mjs +37 -0
- package/library/manifests/terminal.action-manifest.json +1786 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1786 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://farmslot.io/schemas/action-manifest-v1.schema.json",
|
|
3
|
+
"actions": {
|
|
4
|
+
"app.status": {
|
|
5
|
+
"description": "Report the platform, checkout path and repository shape of the Web Terminal checkout.",
|
|
6
|
+
"examples": [
|
|
7
|
+
{
|
|
8
|
+
"action": "app.status",
|
|
9
|
+
"intent": "Record the resolved application state before continuing.",
|
|
10
|
+
"next": "done"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"schema": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {},
|
|
16
|
+
"additionalProperties": false
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"app.hud": {
|
|
20
|
+
"description": "Display recipe progress in an overlay on the terminal app tab: recipe, step N/M, the current node intent and the last pass/fail. Never drawn in MetaMask's own pages; ignored by clicks and page text. --hud auto shows it only when the browser is headful.",
|
|
21
|
+
"examples": [
|
|
22
|
+
{
|
|
23
|
+
"action": "app.hud",
|
|
24
|
+
"status": "running",
|
|
25
|
+
"intent": "Show the current goal to the supervising human.",
|
|
26
|
+
"progress": {
|
|
27
|
+
"current": 12,
|
|
28
|
+
"total": 19
|
|
29
|
+
},
|
|
30
|
+
"next": "done"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"schema": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"properties": {
|
|
36
|
+
"clear": {
|
|
37
|
+
"type": "boolean"
|
|
38
|
+
},
|
|
39
|
+
"title": {
|
|
40
|
+
"type": "string"
|
|
41
|
+
},
|
|
42
|
+
"status": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"enum": [
|
|
45
|
+
"running",
|
|
46
|
+
"pass",
|
|
47
|
+
"fail"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"node_id": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"nodeId": {
|
|
54
|
+
"type": "string"
|
|
55
|
+
},
|
|
56
|
+
"phase": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
},
|
|
59
|
+
"action_name": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
},
|
|
62
|
+
"recipe_action": {
|
|
63
|
+
"type": "string"
|
|
64
|
+
},
|
|
65
|
+
"text": {
|
|
66
|
+
"type": "string"
|
|
67
|
+
},
|
|
68
|
+
"detail": {
|
|
69
|
+
"type": "string"
|
|
70
|
+
},
|
|
71
|
+
"error": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"display": {
|
|
75
|
+
"type": "object"
|
|
76
|
+
},
|
|
77
|
+
"progress": {
|
|
78
|
+
"type": "object"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"additionalProperties": false
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"assert_exit_code": {
|
|
85
|
+
"description": "Assert the exit code captured from a command node output.",
|
|
86
|
+
"examples": [
|
|
87
|
+
{
|
|
88
|
+
"action": "assert_exit_code",
|
|
89
|
+
"source": "run-tests",
|
|
90
|
+
"expected": 0,
|
|
91
|
+
"intent": "Confirm the project command completed with the expected result.",
|
|
92
|
+
"next": "done"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"schema": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"properties": {
|
|
98
|
+
"source": {
|
|
99
|
+
"type": "string"
|
|
100
|
+
},
|
|
101
|
+
"node": {
|
|
102
|
+
"type": "string"
|
|
103
|
+
},
|
|
104
|
+
"expected": {
|
|
105
|
+
"type": "number"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"additionalProperties": false
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"assert_file": {
|
|
112
|
+
"description": "Assert that a project file exists and optionally contains text.",
|
|
113
|
+
"examples": [
|
|
114
|
+
{
|
|
115
|
+
"action": "assert_file",
|
|
116
|
+
"path": "reports/result.txt",
|
|
117
|
+
"contains": "ok",
|
|
118
|
+
"intent": "Confirm the requested project file state.",
|
|
119
|
+
"next": "done"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"schema": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"properties": {
|
|
125
|
+
"path": {
|
|
126
|
+
"type": "string"
|
|
127
|
+
},
|
|
128
|
+
"contains": {
|
|
129
|
+
"type": "string"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"required": [
|
|
133
|
+
"path"
|
|
134
|
+
],
|
|
135
|
+
"additionalProperties": false
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"assert_json": {
|
|
139
|
+
"description": "Assert a JSON file value with a JSONPath-style selector.",
|
|
140
|
+
"examples": [
|
|
141
|
+
{
|
|
142
|
+
"action": "assert_json",
|
|
143
|
+
"path": "reports/result.json",
|
|
144
|
+
"assert": {
|
|
145
|
+
"path": "$.status",
|
|
146
|
+
"operator": "eq",
|
|
147
|
+
"value": "ok"
|
|
148
|
+
},
|
|
149
|
+
"intent": "Confirm the recorded data satisfies the requested condition.",
|
|
150
|
+
"next": "done"
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
"schema": {
|
|
154
|
+
"type": "object",
|
|
155
|
+
"properties": {
|
|
156
|
+
"path": {
|
|
157
|
+
"type": "string"
|
|
158
|
+
},
|
|
159
|
+
"assert": {
|
|
160
|
+
"type": "object",
|
|
161
|
+
"properties": {
|
|
162
|
+
"path": {
|
|
163
|
+
"type": "string"
|
|
164
|
+
},
|
|
165
|
+
"operator": {
|
|
166
|
+
"type": "string"
|
|
167
|
+
},
|
|
168
|
+
"value": {
|
|
169
|
+
"type": [
|
|
170
|
+
"string",
|
|
171
|
+
"number",
|
|
172
|
+
"integer",
|
|
173
|
+
"boolean",
|
|
174
|
+
"object",
|
|
175
|
+
"array"
|
|
176
|
+
],
|
|
177
|
+
"items": {
|
|
178
|
+
"type": [
|
|
179
|
+
"string",
|
|
180
|
+
"number",
|
|
181
|
+
"integer",
|
|
182
|
+
"boolean",
|
|
183
|
+
"object"
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"all": {
|
|
188
|
+
"type": "array",
|
|
189
|
+
"items": {
|
|
190
|
+
"type": "object"
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"any": {
|
|
194
|
+
"type": "array",
|
|
195
|
+
"items": {
|
|
196
|
+
"type": "object"
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"none": {
|
|
200
|
+
"type": "array",
|
|
201
|
+
"items": {
|
|
202
|
+
"type": "object"
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"additionalProperties": false
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"required": [
|
|
210
|
+
"path",
|
|
211
|
+
"assert"
|
|
212
|
+
],
|
|
213
|
+
"additionalProperties": false
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"assert_output": {
|
|
217
|
+
"description": "Assert a previous node's stdout/stderr with contains or match, or compare a structured output field using assert.path and an operator such as eq or length_eq.",
|
|
218
|
+
"examples": [
|
|
219
|
+
{
|
|
220
|
+
"action": "assert_output",
|
|
221
|
+
"source": "run-tests",
|
|
222
|
+
"stream": "stdout",
|
|
223
|
+
"contains": "PASS",
|
|
224
|
+
"intent": "Confirm the recorded output satisfies the requested condition.",
|
|
225
|
+
"next": "done"
|
|
226
|
+
}
|
|
227
|
+
],
|
|
228
|
+
"schema": {
|
|
229
|
+
"type": "object",
|
|
230
|
+
"properties": {
|
|
231
|
+
"source": {
|
|
232
|
+
"type": "string"
|
|
233
|
+
},
|
|
234
|
+
"node": {
|
|
235
|
+
"type": "string"
|
|
236
|
+
},
|
|
237
|
+
"stream": {
|
|
238
|
+
"type": "string"
|
|
239
|
+
},
|
|
240
|
+
"contains": {
|
|
241
|
+
"type": "string"
|
|
242
|
+
},
|
|
243
|
+
"match": {
|
|
244
|
+
"type": "string"
|
|
245
|
+
},
|
|
246
|
+
"assert": {
|
|
247
|
+
"type": "object",
|
|
248
|
+
"properties": {
|
|
249
|
+
"path": {
|
|
250
|
+
"type": "string"
|
|
251
|
+
},
|
|
252
|
+
"operator": {
|
|
253
|
+
"type": "string"
|
|
254
|
+
},
|
|
255
|
+
"value": {
|
|
256
|
+
"type": [
|
|
257
|
+
"string",
|
|
258
|
+
"number",
|
|
259
|
+
"integer",
|
|
260
|
+
"boolean",
|
|
261
|
+
"object",
|
|
262
|
+
"array"
|
|
263
|
+
],
|
|
264
|
+
"items": {
|
|
265
|
+
"type": [
|
|
266
|
+
"string",
|
|
267
|
+
"number",
|
|
268
|
+
"integer",
|
|
269
|
+
"boolean",
|
|
270
|
+
"object"
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"all": {
|
|
275
|
+
"type": "array",
|
|
276
|
+
"items": {
|
|
277
|
+
"type": "object"
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"any": {
|
|
281
|
+
"type": "array",
|
|
282
|
+
"items": {
|
|
283
|
+
"type": "object"
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
"none": {
|
|
287
|
+
"type": "array",
|
|
288
|
+
"items": {
|
|
289
|
+
"type": "object"
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
"additionalProperties": false
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
"additionalProperties": false
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
"call": {
|
|
300
|
+
"description": "Invoke a named recipe by ref and run its steps inline.",
|
|
301
|
+
"examples": [
|
|
302
|
+
{
|
|
303
|
+
"action": "call",
|
|
304
|
+
"ref": "shared/setup",
|
|
305
|
+
"intent": "Run a shared recipe",
|
|
306
|
+
"next": "done"
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
},
|
|
310
|
+
"cdp.target": {
|
|
311
|
+
"description": "Probe the slot browser Chrome CDP endpoint and report whether it is reachable.",
|
|
312
|
+
"examples": [
|
|
313
|
+
{
|
|
314
|
+
"action": "cdp.target",
|
|
315
|
+
"cdp_port": 9323,
|
|
316
|
+
"required": true,
|
|
317
|
+
"intent": "Confirm the requested application target is available.",
|
|
318
|
+
"next": "done"
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
"schema": {
|
|
322
|
+
"type": "object",
|
|
323
|
+
"properties": {
|
|
324
|
+
"cdp_port": {
|
|
325
|
+
"type": "number"
|
|
326
|
+
},
|
|
327
|
+
"metro_port": {
|
|
328
|
+
"type": "number"
|
|
329
|
+
},
|
|
330
|
+
"watcher_port": {
|
|
331
|
+
"type": "number"
|
|
332
|
+
},
|
|
333
|
+
"probe_timeout_ms": {
|
|
334
|
+
"type": "number"
|
|
335
|
+
},
|
|
336
|
+
"cdp_timeout_ms": {
|
|
337
|
+
"type": "number"
|
|
338
|
+
},
|
|
339
|
+
"timeout_ms": {
|
|
340
|
+
"type": "number"
|
|
341
|
+
},
|
|
342
|
+
"require_reachable": {
|
|
343
|
+
"type": "boolean"
|
|
344
|
+
},
|
|
345
|
+
"required": {
|
|
346
|
+
"type": "boolean"
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
"additionalProperties": false
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
"end": {
|
|
353
|
+
"description": "Base terminal action.",
|
|
354
|
+
"examples": [
|
|
355
|
+
{
|
|
356
|
+
"action": "end",
|
|
357
|
+
"status": "pass"
|
|
358
|
+
}
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
"index_artifacts": {
|
|
362
|
+
"description": "Index extra recipe-authored artifacts that already exist on disk.",
|
|
363
|
+
"examples": [
|
|
364
|
+
{
|
|
365
|
+
"action": "index_artifacts",
|
|
366
|
+
"artifacts": [
|
|
367
|
+
{
|
|
368
|
+
"path": "reports/result.json",
|
|
369
|
+
"type": "report",
|
|
370
|
+
"category": "validation",
|
|
371
|
+
"label": "Validation report"
|
|
372
|
+
}
|
|
373
|
+
],
|
|
374
|
+
"intent": "Preserve generated evidence in the review package.",
|
|
375
|
+
"next": "done"
|
|
376
|
+
}
|
|
377
|
+
],
|
|
378
|
+
"schema": {
|
|
379
|
+
"type": "object",
|
|
380
|
+
"properties": {
|
|
381
|
+
"artifacts": {
|
|
382
|
+
"type": "array",
|
|
383
|
+
"items": {
|
|
384
|
+
"type": [
|
|
385
|
+
"string",
|
|
386
|
+
"object"
|
|
387
|
+
],
|
|
388
|
+
"properties": {
|
|
389
|
+
"path": {
|
|
390
|
+
"type": "string"
|
|
391
|
+
},
|
|
392
|
+
"type": {
|
|
393
|
+
"type": "string"
|
|
394
|
+
},
|
|
395
|
+
"label": {
|
|
396
|
+
"type": "string"
|
|
397
|
+
},
|
|
398
|
+
"nodeId": {
|
|
399
|
+
"type": "string"
|
|
400
|
+
},
|
|
401
|
+
"mimeType": {
|
|
402
|
+
"type": "string"
|
|
403
|
+
},
|
|
404
|
+
"category": {
|
|
405
|
+
"type": "string"
|
|
406
|
+
},
|
|
407
|
+
"proofTarget": {
|
|
408
|
+
"type": "string"
|
|
409
|
+
},
|
|
410
|
+
"covers": {
|
|
411
|
+
"type": "array",
|
|
412
|
+
"items": {
|
|
413
|
+
"type": "string"
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
"additionalProperties": false
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
"required": [
|
|
422
|
+
"artifacts"
|
|
423
|
+
],
|
|
424
|
+
"additionalProperties": false
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
"metamask.app.launch": {
|
|
428
|
+
"description": "Explicit lifecycle step: start or reuse the terminal slot browser with signer=extension (MetaMask extension with the fixture account imported) or signer=injected (strict test wallet), plus the wallet host that records wallet requests. fresh_profile forgets the stored agent key and dapp permission.",
|
|
429
|
+
"execution_capabilities": [
|
|
430
|
+
"app-mutation"
|
|
431
|
+
],
|
|
432
|
+
"schema": {
|
|
433
|
+
"type": "object",
|
|
434
|
+
"properties": {
|
|
435
|
+
"signer": {
|
|
436
|
+
"type": "string",
|
|
437
|
+
"enum": [
|
|
438
|
+
"extension",
|
|
439
|
+
"injected"
|
|
440
|
+
],
|
|
441
|
+
"default": "extension"
|
|
442
|
+
},
|
|
443
|
+
"account": {
|
|
444
|
+
"type": "string",
|
|
445
|
+
"default": "dev1"
|
|
446
|
+
},
|
|
447
|
+
"account_name": {
|
|
448
|
+
"type": "string"
|
|
449
|
+
},
|
|
450
|
+
"fresh_profile": {
|
|
451
|
+
"type": "boolean"
|
|
452
|
+
},
|
|
453
|
+
"headless": {
|
|
454
|
+
"type": "boolean",
|
|
455
|
+
"description": "true starts the browser headless; false forces a visible window. Default: env TERMINAL_HEADLESS, else headful."
|
|
456
|
+
},
|
|
457
|
+
"headful": {
|
|
458
|
+
"type": "boolean",
|
|
459
|
+
"description": "Older spelling of headless: false."
|
|
460
|
+
},
|
|
461
|
+
"slow_mo_ms": {
|
|
462
|
+
"type": "number",
|
|
463
|
+
"description": "Delay before each UI action in ms. Default: env TERMINAL_SLOW_MO, else 0."
|
|
464
|
+
},
|
|
465
|
+
"network": {
|
|
466
|
+
"type": "string",
|
|
467
|
+
"enum": [
|
|
468
|
+
"testnet",
|
|
469
|
+
"mainnet"
|
|
470
|
+
],
|
|
471
|
+
"default": "testnet",
|
|
472
|
+
"description": "testnet requires the slot dev server to force Hyperliquid testnet; mainnet requires mainnet_confirmation."
|
|
473
|
+
},
|
|
474
|
+
"mainnet_confirmation": {
|
|
475
|
+
"type": "string",
|
|
476
|
+
"description": "REAL_FUNDS to launch against a mainnet dev server."
|
|
477
|
+
},
|
|
478
|
+
"start_chain": {
|
|
479
|
+
"type": "number",
|
|
480
|
+
"description": "injected mode: the wallet active chain (default 42161)."
|
|
481
|
+
},
|
|
482
|
+
"cdp_port": {
|
|
483
|
+
"type": "number"
|
|
484
|
+
},
|
|
485
|
+
"app_port": {
|
|
486
|
+
"type": "number"
|
|
487
|
+
},
|
|
488
|
+
"timeout_ms": {
|
|
489
|
+
"type": "number"
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
"additionalProperties": false
|
|
493
|
+
},
|
|
494
|
+
"examples": [
|
|
495
|
+
{
|
|
496
|
+
"action": "metamask.app.launch",
|
|
497
|
+
"signer": "extension",
|
|
498
|
+
"account": "dev1",
|
|
499
|
+
"intent": "Start the slot browser with MetaMask and the dev1 fixture account.",
|
|
500
|
+
"next": "done"
|
|
501
|
+
}
|
|
502
|
+
]
|
|
503
|
+
},
|
|
504
|
+
"metamask.app.assert_no_console_errors": {
|
|
505
|
+
"description": "Fail when the terminal page logged an error or uncaught exception since the slot browser's launch that no recipe-library console allowlist (diagnostics/console-allowlist.json) marks as known third-party noise. Reads the slot console capture; the same classification feeds run diagnostics. Fails as unavailable unless the slot's own console collector runs on the browser's CDP port and, for each capture file a requested source reads, a control line logged in its target (the app page; MetaMask for the extension source) reaches that file. Allowlist entries are exact signatures (schemaVersion 3).",
|
|
506
|
+
"execution_capabilities": [
|
|
507
|
+
"host-read-export"
|
|
508
|
+
],
|
|
509
|
+
"schema": {
|
|
510
|
+
"type": "object",
|
|
511
|
+
"properties": {
|
|
512
|
+
"sources": {
|
|
513
|
+
"type": "array",
|
|
514
|
+
"items": {
|
|
515
|
+
"type": "string",
|
|
516
|
+
"enum": [
|
|
517
|
+
"page",
|
|
518
|
+
"extension",
|
|
519
|
+
"browser"
|
|
520
|
+
]
|
|
521
|
+
},
|
|
522
|
+
"description": "Default [\"page\",\"browser\"]: the terminal tab's console and its browser log entries."
|
|
523
|
+
},
|
|
524
|
+
"levels": {
|
|
525
|
+
"type": "array",
|
|
526
|
+
"items": {
|
|
527
|
+
"type": "string",
|
|
528
|
+
"enum": [
|
|
529
|
+
"warning",
|
|
530
|
+
"error",
|
|
531
|
+
"exception"
|
|
532
|
+
]
|
|
533
|
+
},
|
|
534
|
+
"description": "Default [\"error\",\"exception\"]."
|
|
535
|
+
},
|
|
536
|
+
"since": {
|
|
537
|
+
"type": "string",
|
|
538
|
+
"enum": [
|
|
539
|
+
"launch",
|
|
540
|
+
"start-of-log"
|
|
541
|
+
],
|
|
542
|
+
"default": "launch"
|
|
543
|
+
},
|
|
544
|
+
"allowlist_root": {
|
|
545
|
+
"type": "string",
|
|
546
|
+
"description": "An extra directory holding diagnostics/console-allowlist.json."
|
|
547
|
+
},
|
|
548
|
+
"timeout_ms": {
|
|
549
|
+
"type": "number"
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"additionalProperties": false
|
|
553
|
+
},
|
|
554
|
+
"examples": [
|
|
555
|
+
{
|
|
556
|
+
"action": "metamask.app.assert_no_console_errors",
|
|
557
|
+
"intent": "Prove the terminal page logged no unexpected error during the journey",
|
|
558
|
+
"next": "done"
|
|
559
|
+
}
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
"metamask.perps.assert_orders": {
|
|
563
|
+
"description": "Assert presence, absence, count and fields (limit/trigger price, trigger type, reduce-only, size) of the selected venue open orders, polling up to timeout_ms.",
|
|
564
|
+
"execution_capabilities": [
|
|
565
|
+
"host-read-export"
|
|
566
|
+
],
|
|
567
|
+
"schema": {
|
|
568
|
+
"type": "object",
|
|
569
|
+
"properties": {
|
|
570
|
+
"market": {
|
|
571
|
+
"type": "string",
|
|
572
|
+
"description": "Single market symbol, e.g. ETH. Alias: symbol."
|
|
573
|
+
},
|
|
574
|
+
"symbol": {
|
|
575
|
+
"type": "string",
|
|
576
|
+
"description": "Alias for market."
|
|
577
|
+
},
|
|
578
|
+
"markets": {
|
|
579
|
+
"type": "array",
|
|
580
|
+
"items": {
|
|
581
|
+
"type": "string"
|
|
582
|
+
}
|
|
583
|
+
},
|
|
584
|
+
"symbols": {
|
|
585
|
+
"type": "array",
|
|
586
|
+
"items": {
|
|
587
|
+
"type": "string"
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
"mode": {
|
|
591
|
+
"type": "string",
|
|
592
|
+
"enum": [
|
|
593
|
+
"matching",
|
|
594
|
+
"all"
|
|
595
|
+
],
|
|
596
|
+
"description": "all selects every item; otherwise a market is required."
|
|
597
|
+
},
|
|
598
|
+
"side": {
|
|
599
|
+
"type": "string",
|
|
600
|
+
"enum": [
|
|
601
|
+
"long",
|
|
602
|
+
"short"
|
|
603
|
+
]
|
|
604
|
+
},
|
|
605
|
+
"order_kind": {
|
|
606
|
+
"type": "string",
|
|
607
|
+
"enum": [
|
|
608
|
+
"limit",
|
|
609
|
+
"trigger"
|
|
610
|
+
],
|
|
611
|
+
"description": "Only plain limit orders, or only trigger (TP/SL) orders."
|
|
612
|
+
},
|
|
613
|
+
"trigger_kind": {
|
|
614
|
+
"type": "string",
|
|
615
|
+
"enum": [
|
|
616
|
+
"take_profit",
|
|
617
|
+
"stop_loss"
|
|
618
|
+
]
|
|
619
|
+
},
|
|
620
|
+
"only_trigger_orders": {
|
|
621
|
+
"type": "boolean"
|
|
622
|
+
},
|
|
623
|
+
"order_ids": {
|
|
624
|
+
"type": "array",
|
|
625
|
+
"items": {
|
|
626
|
+
"type": [
|
|
627
|
+
"string",
|
|
628
|
+
"number"
|
|
629
|
+
]
|
|
630
|
+
},
|
|
631
|
+
"description": "Restrict to these venue order ids."
|
|
632
|
+
},
|
|
633
|
+
"state": {
|
|
634
|
+
"type": "string",
|
|
635
|
+
"enum": [
|
|
636
|
+
"none",
|
|
637
|
+
"absent",
|
|
638
|
+
"closed",
|
|
639
|
+
"open",
|
|
640
|
+
"present"
|
|
641
|
+
]
|
|
642
|
+
},
|
|
643
|
+
"account": {
|
|
644
|
+
"type": "string",
|
|
645
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
646
|
+
},
|
|
647
|
+
"account_name": {
|
|
648
|
+
"type": "string"
|
|
649
|
+
},
|
|
650
|
+
"network": {
|
|
651
|
+
"type": "string",
|
|
652
|
+
"enum": [
|
|
653
|
+
"testnet",
|
|
654
|
+
"mainnet"
|
|
655
|
+
],
|
|
656
|
+
"default": "testnet",
|
|
657
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
658
|
+
},
|
|
659
|
+
"timeout_ms": {
|
|
660
|
+
"type": "number"
|
|
661
|
+
},
|
|
662
|
+
"expect_count": {
|
|
663
|
+
"type": [
|
|
664
|
+
"string",
|
|
665
|
+
"number"
|
|
666
|
+
],
|
|
667
|
+
"description": "Exact number of matching items."
|
|
668
|
+
},
|
|
669
|
+
"expectCount": {
|
|
670
|
+
"type": [
|
|
671
|
+
"string",
|
|
672
|
+
"number"
|
|
673
|
+
],
|
|
674
|
+
"description": "Exact number of matching items."
|
|
675
|
+
},
|
|
676
|
+
"expect_limit_price": {
|
|
677
|
+
"type": [
|
|
678
|
+
"string",
|
|
679
|
+
"number"
|
|
680
|
+
],
|
|
681
|
+
"description": "Required limit price on every matching order."
|
|
682
|
+
},
|
|
683
|
+
"expect_trigger_price": {
|
|
684
|
+
"type": [
|
|
685
|
+
"string",
|
|
686
|
+
"number"
|
|
687
|
+
]
|
|
688
|
+
},
|
|
689
|
+
"expect_trigger_order_type": {
|
|
690
|
+
"type": "string",
|
|
691
|
+
"enum": [
|
|
692
|
+
"stop_market",
|
|
693
|
+
"stop_limit",
|
|
694
|
+
"take_profit_market",
|
|
695
|
+
"take_profit_limit"
|
|
696
|
+
]
|
|
697
|
+
},
|
|
698
|
+
"expect_reduce_only": {
|
|
699
|
+
"type": "boolean"
|
|
700
|
+
},
|
|
701
|
+
"expect_size": {
|
|
702
|
+
"type": [
|
|
703
|
+
"string",
|
|
704
|
+
"number"
|
|
705
|
+
]
|
|
706
|
+
},
|
|
707
|
+
"price_tolerance_pct": {
|
|
708
|
+
"type": "number",
|
|
709
|
+
"description": "Relative tolerance for price expectations (tick rounding); default exact."
|
|
710
|
+
}
|
|
711
|
+
},
|
|
712
|
+
"required": [
|
|
713
|
+
"state"
|
|
714
|
+
],
|
|
715
|
+
"additionalProperties": false
|
|
716
|
+
},
|
|
717
|
+
"examples": [
|
|
718
|
+
{
|
|
719
|
+
"action": "metamask.perps.assert_orders",
|
|
720
|
+
"market": "ETH",
|
|
721
|
+
"state": "open",
|
|
722
|
+
"expect_limit_price": "2000",
|
|
723
|
+
"intent": "Prove one resting ETH limit order at the placed price.",
|
|
724
|
+
"next": "done"
|
|
725
|
+
}
|
|
726
|
+
]
|
|
727
|
+
},
|
|
728
|
+
"metamask.perps.assert_positions": {
|
|
729
|
+
"description": "Assert presence, absence or exact count of the selected venue positions, polling up to timeout_ms.",
|
|
730
|
+
"execution_capabilities": [
|
|
731
|
+
"host-read-export"
|
|
732
|
+
],
|
|
733
|
+
"schema": {
|
|
734
|
+
"type": "object",
|
|
735
|
+
"properties": {
|
|
736
|
+
"market": {
|
|
737
|
+
"type": "string",
|
|
738
|
+
"description": "Single market symbol, e.g. ETH. Alias: symbol."
|
|
739
|
+
},
|
|
740
|
+
"symbol": {
|
|
741
|
+
"type": "string",
|
|
742
|
+
"description": "Alias for market."
|
|
743
|
+
},
|
|
744
|
+
"markets": {
|
|
745
|
+
"type": "array",
|
|
746
|
+
"items": {
|
|
747
|
+
"type": "string"
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
"symbols": {
|
|
751
|
+
"type": "array",
|
|
752
|
+
"items": {
|
|
753
|
+
"type": "string"
|
|
754
|
+
}
|
|
755
|
+
},
|
|
756
|
+
"mode": {
|
|
757
|
+
"type": "string",
|
|
758
|
+
"enum": [
|
|
759
|
+
"matching",
|
|
760
|
+
"all"
|
|
761
|
+
],
|
|
762
|
+
"description": "all selects every item; otherwise a market is required."
|
|
763
|
+
},
|
|
764
|
+
"side": {
|
|
765
|
+
"type": "string",
|
|
766
|
+
"enum": [
|
|
767
|
+
"long",
|
|
768
|
+
"short"
|
|
769
|
+
]
|
|
770
|
+
},
|
|
771
|
+
"state": {
|
|
772
|
+
"type": "string",
|
|
773
|
+
"enum": [
|
|
774
|
+
"none",
|
|
775
|
+
"absent",
|
|
776
|
+
"closed",
|
|
777
|
+
"open",
|
|
778
|
+
"present"
|
|
779
|
+
]
|
|
780
|
+
},
|
|
781
|
+
"account": {
|
|
782
|
+
"type": "string",
|
|
783
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
784
|
+
},
|
|
785
|
+
"account_name": {
|
|
786
|
+
"type": "string"
|
|
787
|
+
},
|
|
788
|
+
"network": {
|
|
789
|
+
"type": "string",
|
|
790
|
+
"enum": [
|
|
791
|
+
"testnet",
|
|
792
|
+
"mainnet"
|
|
793
|
+
],
|
|
794
|
+
"default": "testnet",
|
|
795
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
796
|
+
},
|
|
797
|
+
"timeout_ms": {
|
|
798
|
+
"type": "number"
|
|
799
|
+
},
|
|
800
|
+
"expect_count": {
|
|
801
|
+
"type": [
|
|
802
|
+
"string",
|
|
803
|
+
"number"
|
|
804
|
+
],
|
|
805
|
+
"description": "Exact number of matching items."
|
|
806
|
+
},
|
|
807
|
+
"expectCount": {
|
|
808
|
+
"type": [
|
|
809
|
+
"string",
|
|
810
|
+
"number"
|
|
811
|
+
],
|
|
812
|
+
"description": "Exact number of matching items."
|
|
813
|
+
}
|
|
814
|
+
},
|
|
815
|
+
"required": [
|
|
816
|
+
"state"
|
|
817
|
+
],
|
|
818
|
+
"additionalProperties": false
|
|
819
|
+
},
|
|
820
|
+
"examples": [
|
|
821
|
+
{
|
|
822
|
+
"action": "metamask.perps.assert_positions",
|
|
823
|
+
"market": "ETH",
|
|
824
|
+
"state": "open",
|
|
825
|
+
"timeout_ms": 30000,
|
|
826
|
+
"intent": "Independently prove the venue holds the ETH position.",
|
|
827
|
+
"next": "done"
|
|
828
|
+
}
|
|
829
|
+
]
|
|
830
|
+
},
|
|
831
|
+
"metamask.perps.read_orders": {
|
|
832
|
+
"description": "Read the fixture account Hyperliquid open orders for the selected markets from the venue info API (frontendOpenOrders).",
|
|
833
|
+
"execution_capabilities": [
|
|
834
|
+
"host-read-export"
|
|
835
|
+
],
|
|
836
|
+
"schema": {
|
|
837
|
+
"type": "object",
|
|
838
|
+
"properties": {
|
|
839
|
+
"market": {
|
|
840
|
+
"type": "string",
|
|
841
|
+
"description": "Single market symbol, e.g. ETH. Alias: symbol."
|
|
842
|
+
},
|
|
843
|
+
"symbol": {
|
|
844
|
+
"type": "string",
|
|
845
|
+
"description": "Alias for market."
|
|
846
|
+
},
|
|
847
|
+
"markets": {
|
|
848
|
+
"type": "array",
|
|
849
|
+
"items": {
|
|
850
|
+
"type": "string"
|
|
851
|
+
}
|
|
852
|
+
},
|
|
853
|
+
"symbols": {
|
|
854
|
+
"type": "array",
|
|
855
|
+
"items": {
|
|
856
|
+
"type": "string"
|
|
857
|
+
}
|
|
858
|
+
},
|
|
859
|
+
"mode": {
|
|
860
|
+
"type": "string",
|
|
861
|
+
"enum": [
|
|
862
|
+
"matching",
|
|
863
|
+
"all"
|
|
864
|
+
],
|
|
865
|
+
"description": "all selects every item; otherwise a market is required."
|
|
866
|
+
},
|
|
867
|
+
"side": {
|
|
868
|
+
"type": "string",
|
|
869
|
+
"enum": [
|
|
870
|
+
"long",
|
|
871
|
+
"short"
|
|
872
|
+
]
|
|
873
|
+
},
|
|
874
|
+
"order_kind": {
|
|
875
|
+
"type": "string",
|
|
876
|
+
"enum": [
|
|
877
|
+
"limit",
|
|
878
|
+
"trigger"
|
|
879
|
+
],
|
|
880
|
+
"description": "Only plain limit orders, or only trigger (TP/SL) orders."
|
|
881
|
+
},
|
|
882
|
+
"trigger_kind": {
|
|
883
|
+
"type": "string",
|
|
884
|
+
"enum": [
|
|
885
|
+
"take_profit",
|
|
886
|
+
"stop_loss"
|
|
887
|
+
]
|
|
888
|
+
},
|
|
889
|
+
"only_trigger_orders": {
|
|
890
|
+
"type": "boolean"
|
|
891
|
+
},
|
|
892
|
+
"order_ids": {
|
|
893
|
+
"type": "array",
|
|
894
|
+
"items": {
|
|
895
|
+
"type": [
|
|
896
|
+
"string",
|
|
897
|
+
"number"
|
|
898
|
+
]
|
|
899
|
+
},
|
|
900
|
+
"description": "Restrict to these venue order ids."
|
|
901
|
+
},
|
|
902
|
+
"account": {
|
|
903
|
+
"type": "string",
|
|
904
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
905
|
+
},
|
|
906
|
+
"account_name": {
|
|
907
|
+
"type": "string"
|
|
908
|
+
},
|
|
909
|
+
"network": {
|
|
910
|
+
"type": "string",
|
|
911
|
+
"enum": [
|
|
912
|
+
"testnet",
|
|
913
|
+
"mainnet"
|
|
914
|
+
],
|
|
915
|
+
"default": "testnet",
|
|
916
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
"additionalProperties": false
|
|
920
|
+
},
|
|
921
|
+
"examples": [
|
|
922
|
+
{
|
|
923
|
+
"action": "metamask.perps.read_orders",
|
|
924
|
+
"market": "ETH",
|
|
925
|
+
"intent": "Read the open ETH orders of the fixture account.",
|
|
926
|
+
"next": "done"
|
|
927
|
+
}
|
|
928
|
+
]
|
|
929
|
+
},
|
|
930
|
+
"metamask.perps.read_positions": {
|
|
931
|
+
"description": "Read the fixture account Hyperliquid positions for the selected markets from the venue info API (clearinghouseState).",
|
|
932
|
+
"execution_capabilities": [
|
|
933
|
+
"host-read-export"
|
|
934
|
+
],
|
|
935
|
+
"schema": {
|
|
936
|
+
"type": "object",
|
|
937
|
+
"properties": {
|
|
938
|
+
"market": {
|
|
939
|
+
"type": "string",
|
|
940
|
+
"description": "Single market symbol, e.g. ETH. Alias: symbol."
|
|
941
|
+
},
|
|
942
|
+
"symbol": {
|
|
943
|
+
"type": "string",
|
|
944
|
+
"description": "Alias for market."
|
|
945
|
+
},
|
|
946
|
+
"markets": {
|
|
947
|
+
"type": "array",
|
|
948
|
+
"items": {
|
|
949
|
+
"type": "string"
|
|
950
|
+
}
|
|
951
|
+
},
|
|
952
|
+
"symbols": {
|
|
953
|
+
"type": "array",
|
|
954
|
+
"items": {
|
|
955
|
+
"type": "string"
|
|
956
|
+
}
|
|
957
|
+
},
|
|
958
|
+
"mode": {
|
|
959
|
+
"type": "string",
|
|
960
|
+
"enum": [
|
|
961
|
+
"matching",
|
|
962
|
+
"all"
|
|
963
|
+
],
|
|
964
|
+
"description": "all selects every item; otherwise a market is required."
|
|
965
|
+
},
|
|
966
|
+
"side": {
|
|
967
|
+
"type": "string",
|
|
968
|
+
"enum": [
|
|
969
|
+
"long",
|
|
970
|
+
"short"
|
|
971
|
+
]
|
|
972
|
+
},
|
|
973
|
+
"account": {
|
|
974
|
+
"type": "string",
|
|
975
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
976
|
+
},
|
|
977
|
+
"account_name": {
|
|
978
|
+
"type": "string"
|
|
979
|
+
},
|
|
980
|
+
"network": {
|
|
981
|
+
"type": "string",
|
|
982
|
+
"enum": [
|
|
983
|
+
"testnet",
|
|
984
|
+
"mainnet"
|
|
985
|
+
],
|
|
986
|
+
"default": "testnet",
|
|
987
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
988
|
+
}
|
|
989
|
+
},
|
|
990
|
+
"additionalProperties": false
|
|
991
|
+
},
|
|
992
|
+
"examples": [
|
|
993
|
+
{
|
|
994
|
+
"action": "metamask.perps.read_positions",
|
|
995
|
+
"market": "ETH",
|
|
996
|
+
"intent": "Read the ETH position held by the fixture account.",
|
|
997
|
+
"next": "done"
|
|
998
|
+
}
|
|
999
|
+
]
|
|
1000
|
+
},
|
|
1001
|
+
"metamask.perps.read_snapshot": {
|
|
1002
|
+
"description": "Snapshot venue positions, open orders, approved agents and balances for the fixture account, optionally scoped to markets, for before/after comparison.",
|
|
1003
|
+
"execution_capabilities": [
|
|
1004
|
+
"host-read-export"
|
|
1005
|
+
],
|
|
1006
|
+
"schema": {
|
|
1007
|
+
"type": "object",
|
|
1008
|
+
"properties": {
|
|
1009
|
+
"market": {
|
|
1010
|
+
"type": "string",
|
|
1011
|
+
"description": "Single market symbol, e.g. ETH. Alias: symbol."
|
|
1012
|
+
},
|
|
1013
|
+
"symbol": {
|
|
1014
|
+
"type": "string",
|
|
1015
|
+
"description": "Alias for market."
|
|
1016
|
+
},
|
|
1017
|
+
"markets": {
|
|
1018
|
+
"type": "array",
|
|
1019
|
+
"items": {
|
|
1020
|
+
"type": "string"
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
"symbols": {
|
|
1024
|
+
"type": "array",
|
|
1025
|
+
"items": {
|
|
1026
|
+
"type": "string"
|
|
1027
|
+
}
|
|
1028
|
+
},
|
|
1029
|
+
"mode": {
|
|
1030
|
+
"type": "string",
|
|
1031
|
+
"enum": [
|
|
1032
|
+
"matching",
|
|
1033
|
+
"all"
|
|
1034
|
+
],
|
|
1035
|
+
"description": "all selects every item; otherwise a market is required."
|
|
1036
|
+
},
|
|
1037
|
+
"side": {
|
|
1038
|
+
"type": "string",
|
|
1039
|
+
"enum": [
|
|
1040
|
+
"long",
|
|
1041
|
+
"short"
|
|
1042
|
+
]
|
|
1043
|
+
},
|
|
1044
|
+
"account": {
|
|
1045
|
+
"type": "string",
|
|
1046
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
1047
|
+
},
|
|
1048
|
+
"account_name": {
|
|
1049
|
+
"type": "string"
|
|
1050
|
+
},
|
|
1051
|
+
"network": {
|
|
1052
|
+
"type": "string",
|
|
1053
|
+
"enum": [
|
|
1054
|
+
"testnet",
|
|
1055
|
+
"mainnet"
|
|
1056
|
+
],
|
|
1057
|
+
"default": "testnet",
|
|
1058
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
1059
|
+
}
|
|
1060
|
+
},
|
|
1061
|
+
"additionalProperties": false
|
|
1062
|
+
},
|
|
1063
|
+
"examples": [
|
|
1064
|
+
{
|
|
1065
|
+
"action": "metamask.perps.read_snapshot",
|
|
1066
|
+
"market": "ETH",
|
|
1067
|
+
"intent": "Record the ETH venue state before the journey.",
|
|
1068
|
+
"next": "done"
|
|
1069
|
+
}
|
|
1070
|
+
]
|
|
1071
|
+
},
|
|
1072
|
+
"metamask.perps.revoke_agent": {
|
|
1073
|
+
"description": "Lifecycle step (testnet; mainnet only with mainnet_confirmation=REAL_FUNDS): revoke the Web Terminal Hyperliquid agent(s) (mm-terminal*) of the fixture account outside the UI (approveAgent to the zero address, user-signed in Node) and assert none remains, so the next UI write must request a fresh ApproveAgent.",
|
|
1074
|
+
"execution_capabilities": [
|
|
1075
|
+
"app-mutation",
|
|
1076
|
+
"external-mutation"
|
|
1077
|
+
],
|
|
1078
|
+
"schema": {
|
|
1079
|
+
"type": "object",
|
|
1080
|
+
"properties": {
|
|
1081
|
+
"account": {
|
|
1082
|
+
"type": "string",
|
|
1083
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
1084
|
+
},
|
|
1085
|
+
"account_name": {
|
|
1086
|
+
"type": "string"
|
|
1087
|
+
},
|
|
1088
|
+
"network": {
|
|
1089
|
+
"type": "string",
|
|
1090
|
+
"enum": [
|
|
1091
|
+
"testnet",
|
|
1092
|
+
"mainnet"
|
|
1093
|
+
],
|
|
1094
|
+
"default": "testnet",
|
|
1095
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
1096
|
+
},
|
|
1097
|
+
"agent_name": {
|
|
1098
|
+
"type": "string",
|
|
1099
|
+
"default": "mm-terminal"
|
|
1100
|
+
},
|
|
1101
|
+
"timeout_ms": {
|
|
1102
|
+
"type": "number"
|
|
1103
|
+
},
|
|
1104
|
+
"mainnet_confirmation": {
|
|
1105
|
+
"type": "string",
|
|
1106
|
+
"enum": [
|
|
1107
|
+
"REAL_FUNDS"
|
|
1108
|
+
],
|
|
1109
|
+
"description": "Required with network=mainnet: confirms a real-funds mutation."
|
|
1110
|
+
}
|
|
1111
|
+
},
|
|
1112
|
+
"additionalProperties": false
|
|
1113
|
+
},
|
|
1114
|
+
"examples": [
|
|
1115
|
+
{
|
|
1116
|
+
"action": "metamask.perps.revoke_agent",
|
|
1117
|
+
"network": "testnet",
|
|
1118
|
+
"intent": "Revoke the terminal agent so the next order needs re-approval.",
|
|
1119
|
+
"next": "done"
|
|
1120
|
+
}
|
|
1121
|
+
]
|
|
1122
|
+
},
|
|
1123
|
+
"metamask.perps.teardown_state": {
|
|
1124
|
+
"description": "Testnet cleanup of one reserved market: cancel its open orders (or only order_ids) and close its position with a reduce-only IOC order signed in Node by the fixture account, then assert none remain. Refuses mode=all; mainnet only with mainnet_confirmation=REAL_FUNDS. Never passes through the browser wallet.",
|
|
1125
|
+
"execution_capabilities": [
|
|
1126
|
+
"app-mutation",
|
|
1127
|
+
"external-mutation"
|
|
1128
|
+
],
|
|
1129
|
+
"schema": {
|
|
1130
|
+
"type": "object",
|
|
1131
|
+
"properties": {
|
|
1132
|
+
"market": {
|
|
1133
|
+
"type": "string",
|
|
1134
|
+
"description": "Single market symbol, e.g. ETH. Alias: symbol."
|
|
1135
|
+
},
|
|
1136
|
+
"symbol": {
|
|
1137
|
+
"type": "string",
|
|
1138
|
+
"description": "Alias for market."
|
|
1139
|
+
},
|
|
1140
|
+
"markets": {
|
|
1141
|
+
"type": "array",
|
|
1142
|
+
"items": {
|
|
1143
|
+
"type": "string"
|
|
1144
|
+
}
|
|
1145
|
+
},
|
|
1146
|
+
"symbols": {
|
|
1147
|
+
"type": "array",
|
|
1148
|
+
"items": {
|
|
1149
|
+
"type": "string"
|
|
1150
|
+
}
|
|
1151
|
+
},
|
|
1152
|
+
"side": {
|
|
1153
|
+
"type": "string",
|
|
1154
|
+
"enum": [
|
|
1155
|
+
"long",
|
|
1156
|
+
"short"
|
|
1157
|
+
]
|
|
1158
|
+
},
|
|
1159
|
+
"order_ids": {
|
|
1160
|
+
"type": "array",
|
|
1161
|
+
"items": {
|
|
1162
|
+
"type": [
|
|
1163
|
+
"string",
|
|
1164
|
+
"number"
|
|
1165
|
+
]
|
|
1166
|
+
},
|
|
1167
|
+
"description": "Restrict to these venue order ids."
|
|
1168
|
+
},
|
|
1169
|
+
"positions": {
|
|
1170
|
+
"type": "object",
|
|
1171
|
+
"properties": {
|
|
1172
|
+
"state": {
|
|
1173
|
+
"type": "string",
|
|
1174
|
+
"enum": [
|
|
1175
|
+
"none",
|
|
1176
|
+
"absent",
|
|
1177
|
+
"closed",
|
|
1178
|
+
"open",
|
|
1179
|
+
"present"
|
|
1180
|
+
]
|
|
1181
|
+
}
|
|
1182
|
+
},
|
|
1183
|
+
"additionalProperties": false
|
|
1184
|
+
},
|
|
1185
|
+
"orders": {
|
|
1186
|
+
"type": "object",
|
|
1187
|
+
"properties": {
|
|
1188
|
+
"state": {
|
|
1189
|
+
"type": "string",
|
|
1190
|
+
"enum": [
|
|
1191
|
+
"none",
|
|
1192
|
+
"absent",
|
|
1193
|
+
"closed",
|
|
1194
|
+
"open",
|
|
1195
|
+
"present"
|
|
1196
|
+
]
|
|
1197
|
+
}
|
|
1198
|
+
},
|
|
1199
|
+
"additionalProperties": false
|
|
1200
|
+
},
|
|
1201
|
+
"account": {
|
|
1202
|
+
"type": "string",
|
|
1203
|
+
"description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
|
|
1204
|
+
},
|
|
1205
|
+
"account_name": {
|
|
1206
|
+
"type": "string"
|
|
1207
|
+
},
|
|
1208
|
+
"network": {
|
|
1209
|
+
"type": "string",
|
|
1210
|
+
"enum": [
|
|
1211
|
+
"testnet",
|
|
1212
|
+
"mainnet"
|
|
1213
|
+
],
|
|
1214
|
+
"default": "testnet",
|
|
1215
|
+
"description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
|
|
1216
|
+
},
|
|
1217
|
+
"timeout_ms": {
|
|
1218
|
+
"type": "number"
|
|
1219
|
+
},
|
|
1220
|
+
"mainnet_confirmation": {
|
|
1221
|
+
"type": "string",
|
|
1222
|
+
"enum": [
|
|
1223
|
+
"REAL_FUNDS"
|
|
1224
|
+
],
|
|
1225
|
+
"description": "Required with network=mainnet: confirms a real-funds mutation."
|
|
1226
|
+
}
|
|
1227
|
+
},
|
|
1228
|
+
"additionalProperties": false
|
|
1229
|
+
},
|
|
1230
|
+
"examples": [
|
|
1231
|
+
{
|
|
1232
|
+
"action": "metamask.perps.teardown_state",
|
|
1233
|
+
"market": "ETH",
|
|
1234
|
+
"positions": {
|
|
1235
|
+
"state": "none"
|
|
1236
|
+
},
|
|
1237
|
+
"orders": {
|
|
1238
|
+
"state": "none"
|
|
1239
|
+
},
|
|
1240
|
+
"network": "testnet",
|
|
1241
|
+
"intent": "Restore the reserved ETH market to flat after success or failure.",
|
|
1242
|
+
"next": "done"
|
|
1243
|
+
}
|
|
1244
|
+
]
|
|
1245
|
+
},
|
|
1246
|
+
"metamask.wallet.assert_signatures": {
|
|
1247
|
+
"description": "Assert the wallet request window: allowed EIP-712 primary types, exact signed counts per type, zero L1 (Agent / chainId 1337) payloads by default, domain chain = active chain, method counts and confirmations shown. The window is retained as evidence either way.",
|
|
1248
|
+
"execution_capabilities": [
|
|
1249
|
+
"host-read-export"
|
|
1250
|
+
],
|
|
1251
|
+
"schema": {
|
|
1252
|
+
"type": "object",
|
|
1253
|
+
"properties": {
|
|
1254
|
+
"allowed_primary_types": {
|
|
1255
|
+
"type": "array",
|
|
1256
|
+
"items": {
|
|
1257
|
+
"type": "string"
|
|
1258
|
+
}
|
|
1259
|
+
},
|
|
1260
|
+
"counts": {
|
|
1261
|
+
"type": "object",
|
|
1262
|
+
"description": "Exact signed count per primary type, e.g. {\"ApproveAgent\": 1}."
|
|
1263
|
+
},
|
|
1264
|
+
"request_counts": {
|
|
1265
|
+
"type": "object"
|
|
1266
|
+
},
|
|
1267
|
+
"methods": {
|
|
1268
|
+
"type": "object",
|
|
1269
|
+
"description": "Exact request count per RPC method."
|
|
1270
|
+
},
|
|
1271
|
+
"max_l1_requests": {
|
|
1272
|
+
"type": "number",
|
|
1273
|
+
"default": 0
|
|
1274
|
+
},
|
|
1275
|
+
"max_typed_data_requests": {
|
|
1276
|
+
"type": "number"
|
|
1277
|
+
},
|
|
1278
|
+
"max_rejected": {
|
|
1279
|
+
"type": "number"
|
|
1280
|
+
},
|
|
1281
|
+
"expect_confirmations": {
|
|
1282
|
+
"type": "number",
|
|
1283
|
+
"description": "Exact confirmations MetaMask showed (signer=extension)."
|
|
1284
|
+
},
|
|
1285
|
+
"require_active_chain": {
|
|
1286
|
+
"type": "boolean"
|
|
1287
|
+
},
|
|
1288
|
+
"timeout_ms": {
|
|
1289
|
+
"type": "number"
|
|
1290
|
+
}
|
|
1291
|
+
},
|
|
1292
|
+
"additionalProperties": false
|
|
1293
|
+
},
|
|
1294
|
+
"examples": [
|
|
1295
|
+
{
|
|
1296
|
+
"action": "metamask.wallet.assert_signatures",
|
|
1297
|
+
"allowed_primary_types": [
|
|
1298
|
+
"ApproveAgent",
|
|
1299
|
+
"ApproveBuilderFee"
|
|
1300
|
+
],
|
|
1301
|
+
"counts": {
|
|
1302
|
+
"ApproveAgent": 1
|
|
1303
|
+
},
|
|
1304
|
+
"max_l1_requests": 0,
|
|
1305
|
+
"intent": "Prove the main wallet only approved the agent once.",
|
|
1306
|
+
"next": "done"
|
|
1307
|
+
}
|
|
1308
|
+
]
|
|
1309
|
+
},
|
|
1310
|
+
"metamask.wallet.list_accounts": {
|
|
1311
|
+
"description": "List the wallet fixture account names and addresses available to the slot browser, marking the one in use. Addresses only.",
|
|
1312
|
+
"execution_capabilities": [
|
|
1313
|
+
"host-read-export"
|
|
1314
|
+
],
|
|
1315
|
+
"schema": {
|
|
1316
|
+
"type": "object",
|
|
1317
|
+
"properties": {},
|
|
1318
|
+
"additionalProperties": false
|
|
1319
|
+
},
|
|
1320
|
+
"examples": [
|
|
1321
|
+
{
|
|
1322
|
+
"action": "metamask.wallet.list_accounts",
|
|
1323
|
+
"intent": "Show which fixture account the slot browser signs as.",
|
|
1324
|
+
"next": "done"
|
|
1325
|
+
}
|
|
1326
|
+
]
|
|
1327
|
+
},
|
|
1328
|
+
"metamask.wallet.read_signatures": {
|
|
1329
|
+
"description": "Read the wallet request log (what the app asked the main wallet: method, EIP-712 primary type, domain/active chain, outcome; confirmations MetaMask showed) since the last reset, retained as evidence. reset=true starts a new window.",
|
|
1330
|
+
"execution_capabilities": [
|
|
1331
|
+
"host-read-export"
|
|
1332
|
+
],
|
|
1333
|
+
"schema": {
|
|
1334
|
+
"type": "object",
|
|
1335
|
+
"properties": {
|
|
1336
|
+
"reset": {
|
|
1337
|
+
"type": "boolean"
|
|
1338
|
+
}
|
|
1339
|
+
},
|
|
1340
|
+
"additionalProperties": false
|
|
1341
|
+
},
|
|
1342
|
+
"examples": [
|
|
1343
|
+
{
|
|
1344
|
+
"action": "metamask.wallet.read_signatures",
|
|
1345
|
+
"reset": true,
|
|
1346
|
+
"intent": "Start the signature window for this journey.",
|
|
1347
|
+
"next": "done"
|
|
1348
|
+
}
|
|
1349
|
+
]
|
|
1350
|
+
},
|
|
1351
|
+
"switch": {
|
|
1352
|
+
"description": "Choose a graph branch when one resolved string equals another.",
|
|
1353
|
+
"examples": [
|
|
1354
|
+
{
|
|
1355
|
+
"action": "switch",
|
|
1356
|
+
"value": "{{params.mode}}",
|
|
1357
|
+
"equals": "background_resume",
|
|
1358
|
+
"cases": {
|
|
1359
|
+
"match": "background"
|
|
1360
|
+
},
|
|
1361
|
+
"default": "warm",
|
|
1362
|
+
"intent": "Choose the graph path matching the observed state."
|
|
1363
|
+
}
|
|
1364
|
+
],
|
|
1365
|
+
"schema": {
|
|
1366
|
+
"type": "object",
|
|
1367
|
+
"properties": {
|
|
1368
|
+
"value": {
|
|
1369
|
+
"type": "string"
|
|
1370
|
+
},
|
|
1371
|
+
"equals": {
|
|
1372
|
+
"type": "string"
|
|
1373
|
+
}
|
|
1374
|
+
},
|
|
1375
|
+
"required": [
|
|
1376
|
+
"value",
|
|
1377
|
+
"equals"
|
|
1378
|
+
],
|
|
1379
|
+
"additionalProperties": false
|
|
1380
|
+
},
|
|
1381
|
+
"result_cases": [
|
|
1382
|
+
"match"
|
|
1383
|
+
]
|
|
1384
|
+
},
|
|
1385
|
+
"ui.key_press": {
|
|
1386
|
+
"description": "Send a trusted keyboard press to the currently focused UI element through the UI transport.",
|
|
1387
|
+
"schema": {
|
|
1388
|
+
"type": "object",
|
|
1389
|
+
"properties": {
|
|
1390
|
+
"key": {
|
|
1391
|
+
"type": "string"
|
|
1392
|
+
},
|
|
1393
|
+
"timeout_ms": {
|
|
1394
|
+
"type": "number"
|
|
1395
|
+
},
|
|
1396
|
+
"settle": {
|
|
1397
|
+
"type": "boolean"
|
|
1398
|
+
},
|
|
1399
|
+
"surface": {
|
|
1400
|
+
"type": "string",
|
|
1401
|
+
"enum": [
|
|
1402
|
+
"app",
|
|
1403
|
+
"wallet"
|
|
1404
|
+
],
|
|
1405
|
+
"default": "app",
|
|
1406
|
+
"description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
|
|
1407
|
+
},
|
|
1408
|
+
"wallet_timeout_ms": {
|
|
1409
|
+
"type": "number",
|
|
1410
|
+
"description": "surface=wallet: how long to wait for MetaMask to show the request."
|
|
1411
|
+
}
|
|
1412
|
+
},
|
|
1413
|
+
"required": [
|
|
1414
|
+
"key"
|
|
1415
|
+
],
|
|
1416
|
+
"additionalProperties": false
|
|
1417
|
+
},
|
|
1418
|
+
"examples": [
|
|
1419
|
+
{
|
|
1420
|
+
"action": "ui.key_press",
|
|
1421
|
+
"key": "Enter",
|
|
1422
|
+
"intent": "Continue the requested keyboard interaction.",
|
|
1423
|
+
"next": "done"
|
|
1424
|
+
}
|
|
1425
|
+
]
|
|
1426
|
+
},
|
|
1427
|
+
"ui.navigate": {
|
|
1428
|
+
"description": "Navigate the terminal tab to a product page (order/<MARKET>, portfolio, home) or an explicit app path on the slot dev server and wait for the document.",
|
|
1429
|
+
"schema": {
|
|
1430
|
+
"type": "object",
|
|
1431
|
+
"properties": {
|
|
1432
|
+
"page": {
|
|
1433
|
+
"type": "string",
|
|
1434
|
+
"enum": [
|
|
1435
|
+
"order",
|
|
1436
|
+
"market",
|
|
1437
|
+
"portfolio",
|
|
1438
|
+
"home"
|
|
1439
|
+
]
|
|
1440
|
+
},
|
|
1441
|
+
"market": {
|
|
1442
|
+
"type": "string",
|
|
1443
|
+
"description": "Market symbol for page=order, e.g. ETH."
|
|
1444
|
+
},
|
|
1445
|
+
"symbol": {
|
|
1446
|
+
"type": "string",
|
|
1447
|
+
"description": "Alias for market."
|
|
1448
|
+
},
|
|
1449
|
+
"path": {
|
|
1450
|
+
"type": "string",
|
|
1451
|
+
"description": "Explicit app path starting with /."
|
|
1452
|
+
},
|
|
1453
|
+
"settle_ms": {
|
|
1454
|
+
"type": "number"
|
|
1455
|
+
},
|
|
1456
|
+
"timeout_ms": {
|
|
1457
|
+
"type": "number"
|
|
1458
|
+
}
|
|
1459
|
+
},
|
|
1460
|
+
"additionalProperties": false
|
|
1461
|
+
},
|
|
1462
|
+
"examples": [
|
|
1463
|
+
{
|
|
1464
|
+
"action": "ui.navigate",
|
|
1465
|
+
"page": "order",
|
|
1466
|
+
"market": "ETH",
|
|
1467
|
+
"intent": "Open the ETH order page on the slot dev server.",
|
|
1468
|
+
"next": "done"
|
|
1469
|
+
}
|
|
1470
|
+
]
|
|
1471
|
+
},
|
|
1472
|
+
"ui.press": {
|
|
1473
|
+
"description": "Press/tap/click a UI target on the terminal tab or the MetaMask wallet surface.",
|
|
1474
|
+
"examples": [
|
|
1475
|
+
{
|
|
1476
|
+
"action": "ui.press",
|
|
1477
|
+
"intent": "Activate the requested visible control.",
|
|
1478
|
+
"text": "Perps",
|
|
1479
|
+
"next": "done"
|
|
1480
|
+
}
|
|
1481
|
+
],
|
|
1482
|
+
"schema": {
|
|
1483
|
+
"type": "object",
|
|
1484
|
+
"properties": {
|
|
1485
|
+
"selector": {
|
|
1486
|
+
"type": "string"
|
|
1487
|
+
},
|
|
1488
|
+
"test_id": {
|
|
1489
|
+
"type": "string"
|
|
1490
|
+
},
|
|
1491
|
+
"testID": {
|
|
1492
|
+
"type": "string"
|
|
1493
|
+
},
|
|
1494
|
+
"text": {
|
|
1495
|
+
"type": "string"
|
|
1496
|
+
},
|
|
1497
|
+
"label": {
|
|
1498
|
+
"type": "string"
|
|
1499
|
+
},
|
|
1500
|
+
"timeout_ms": {
|
|
1501
|
+
"type": "number"
|
|
1502
|
+
},
|
|
1503
|
+
"settle": {
|
|
1504
|
+
"type": "boolean"
|
|
1505
|
+
},
|
|
1506
|
+
"surface": {
|
|
1507
|
+
"type": "string",
|
|
1508
|
+
"enum": [
|
|
1509
|
+
"app",
|
|
1510
|
+
"wallet"
|
|
1511
|
+
],
|
|
1512
|
+
"default": "app",
|
|
1513
|
+
"description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
|
|
1514
|
+
},
|
|
1515
|
+
"wallet_timeout_ms": {
|
|
1516
|
+
"type": "number",
|
|
1517
|
+
"description": "surface=wallet: how long to wait for MetaMask to show the request."
|
|
1518
|
+
}
|
|
1519
|
+
},
|
|
1520
|
+
"additionalProperties": false
|
|
1521
|
+
}
|
|
1522
|
+
},
|
|
1523
|
+
"ui.screenshot": {
|
|
1524
|
+
"description": "Capture the current native browser window on macOS, with bounded Chrome viewport capture as fallback. A native window can include a separate side panel or a tab other than the driven page. For report evidence of the driven document, use ui.capture_surface. Always inspect the resulting PNG and artifact metadata; failed real capture does not produce a reconstructed DOM image.",
|
|
1525
|
+
"examples": [
|
|
1526
|
+
{
|
|
1527
|
+
"action": "ui.screenshot",
|
|
1528
|
+
"path": "screenshots/example.png",
|
|
1529
|
+
"intent": "Preserve the visible application state as review evidence.",
|
|
1530
|
+
"next": "done"
|
|
1531
|
+
}
|
|
1532
|
+
],
|
|
1533
|
+
"schema": {
|
|
1534
|
+
"type": "object",
|
|
1535
|
+
"properties": {
|
|
1536
|
+
"path": {
|
|
1537
|
+
"type": "string"
|
|
1538
|
+
},
|
|
1539
|
+
"label": {
|
|
1540
|
+
"type": "string"
|
|
1541
|
+
},
|
|
1542
|
+
"category": {
|
|
1543
|
+
"type": "string"
|
|
1544
|
+
},
|
|
1545
|
+
"timeout_ms": {
|
|
1546
|
+
"type": "number"
|
|
1547
|
+
},
|
|
1548
|
+
"surface": {
|
|
1549
|
+
"type": "string",
|
|
1550
|
+
"enum": [
|
|
1551
|
+
"app",
|
|
1552
|
+
"wallet"
|
|
1553
|
+
],
|
|
1554
|
+
"default": "app",
|
|
1555
|
+
"description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
|
|
1556
|
+
},
|
|
1557
|
+
"wallet_timeout_ms": {
|
|
1558
|
+
"type": "number",
|
|
1559
|
+
"description": "surface=wallet: how long to wait for MetaMask to show the request."
|
|
1560
|
+
}
|
|
1561
|
+
},
|
|
1562
|
+
"additionalProperties": false
|
|
1563
|
+
}
|
|
1564
|
+
},
|
|
1565
|
+
"ui.scroll": {
|
|
1566
|
+
"description": "Scroll through the UI through the Farmslot base platform adapter. Supports deltas and scroll_into_view for selector/test-id proof positioning.",
|
|
1567
|
+
"examples": [
|
|
1568
|
+
{
|
|
1569
|
+
"action": "ui.scroll",
|
|
1570
|
+
"delta_y": 300,
|
|
1571
|
+
"intent": "Expose the requested content for visible review.",
|
|
1572
|
+
"next": "done"
|
|
1573
|
+
},
|
|
1574
|
+
{
|
|
1575
|
+
"action": "ui.scroll",
|
|
1576
|
+
"selector": "[data-testid=\"example\"]",
|
|
1577
|
+
"scroll_into_view": true,
|
|
1578
|
+
"intent": "Expose the requested content for visible review.",
|
|
1579
|
+
"next": "done"
|
|
1580
|
+
}
|
|
1581
|
+
],
|
|
1582
|
+
"schema": {
|
|
1583
|
+
"type": "object",
|
|
1584
|
+
"properties": {
|
|
1585
|
+
"selector": {
|
|
1586
|
+
"type": "string"
|
|
1587
|
+
},
|
|
1588
|
+
"test_id": {
|
|
1589
|
+
"type": "string"
|
|
1590
|
+
},
|
|
1591
|
+
"testID": {
|
|
1592
|
+
"type": "string"
|
|
1593
|
+
},
|
|
1594
|
+
"delta_x": {
|
|
1595
|
+
"type": "number"
|
|
1596
|
+
},
|
|
1597
|
+
"delta_y": {
|
|
1598
|
+
"type": "number"
|
|
1599
|
+
},
|
|
1600
|
+
"deltaX": {
|
|
1601
|
+
"type": "number"
|
|
1602
|
+
},
|
|
1603
|
+
"deltaY": {
|
|
1604
|
+
"type": "number"
|
|
1605
|
+
},
|
|
1606
|
+
"offset": {
|
|
1607
|
+
"type": "number"
|
|
1608
|
+
},
|
|
1609
|
+
"scroll_into_view": {
|
|
1610
|
+
"type": "boolean"
|
|
1611
|
+
},
|
|
1612
|
+
"into_view": {
|
|
1613
|
+
"type": "boolean"
|
|
1614
|
+
},
|
|
1615
|
+
"animated": {
|
|
1616
|
+
"type": "boolean"
|
|
1617
|
+
},
|
|
1618
|
+
"timeout_ms": {
|
|
1619
|
+
"type": "number"
|
|
1620
|
+
},
|
|
1621
|
+
"settle": {
|
|
1622
|
+
"type": "boolean"
|
|
1623
|
+
},
|
|
1624
|
+
"surface": {
|
|
1625
|
+
"type": "string",
|
|
1626
|
+
"enum": [
|
|
1627
|
+
"app",
|
|
1628
|
+
"wallet"
|
|
1629
|
+
],
|
|
1630
|
+
"default": "app",
|
|
1631
|
+
"description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
|
|
1632
|
+
},
|
|
1633
|
+
"wallet_timeout_ms": {
|
|
1634
|
+
"type": "number",
|
|
1635
|
+
"description": "surface=wallet: how long to wait for MetaMask to show the request."
|
|
1636
|
+
}
|
|
1637
|
+
},
|
|
1638
|
+
"additionalProperties": false
|
|
1639
|
+
}
|
|
1640
|
+
},
|
|
1641
|
+
"ui.set_input": {
|
|
1642
|
+
"description": "Set text on the terminal tab or the MetaMask wallet surface.",
|
|
1643
|
+
"schema": {
|
|
1644
|
+
"type": "object",
|
|
1645
|
+
"properties": {
|
|
1646
|
+
"selector": {
|
|
1647
|
+
"type": "string"
|
|
1648
|
+
},
|
|
1649
|
+
"test_id": {
|
|
1650
|
+
"type": "string"
|
|
1651
|
+
},
|
|
1652
|
+
"testID": {
|
|
1653
|
+
"type": "string"
|
|
1654
|
+
},
|
|
1655
|
+
"value": {
|
|
1656
|
+
"type": [
|
|
1657
|
+
"string",
|
|
1658
|
+
"number"
|
|
1659
|
+
],
|
|
1660
|
+
"description": "Text or a typed numeric recipe parameter; numbers are entered as their decimal text. Use an empty string to clear the field."
|
|
1661
|
+
},
|
|
1662
|
+
"text": {
|
|
1663
|
+
"type": "string"
|
|
1664
|
+
},
|
|
1665
|
+
"timeout_ms": {
|
|
1666
|
+
"type": "number"
|
|
1667
|
+
},
|
|
1668
|
+
"settle": {
|
|
1669
|
+
"type": "boolean"
|
|
1670
|
+
},
|
|
1671
|
+
"surface": {
|
|
1672
|
+
"type": "string",
|
|
1673
|
+
"enum": [
|
|
1674
|
+
"app",
|
|
1675
|
+
"wallet"
|
|
1676
|
+
],
|
|
1677
|
+
"default": "app",
|
|
1678
|
+
"description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
|
|
1679
|
+
},
|
|
1680
|
+
"wallet_timeout_ms": {
|
|
1681
|
+
"type": "number",
|
|
1682
|
+
"description": "surface=wallet: how long to wait for MetaMask to show the request."
|
|
1683
|
+
}
|
|
1684
|
+
},
|
|
1685
|
+
"additionalProperties": false
|
|
1686
|
+
},
|
|
1687
|
+
"examples": [
|
|
1688
|
+
{
|
|
1689
|
+
"action": "ui.set_input",
|
|
1690
|
+
"selector": "[data-testid=multichain-account-list-search] input",
|
|
1691
|
+
"value": "Account",
|
|
1692
|
+
"intent": "Provide the requested value in the visible form.",
|
|
1693
|
+
"next": "done"
|
|
1694
|
+
}
|
|
1695
|
+
]
|
|
1696
|
+
},
|
|
1697
|
+
"ui.wait_for": {
|
|
1698
|
+
"description": "Wait for a UI condition on the terminal tab or the MetaMask wallet surface.",
|
|
1699
|
+
"schema": {
|
|
1700
|
+
"type": "object",
|
|
1701
|
+
"properties": {
|
|
1702
|
+
"selector": {
|
|
1703
|
+
"type": "string"
|
|
1704
|
+
},
|
|
1705
|
+
"test_id": {
|
|
1706
|
+
"type": "string"
|
|
1707
|
+
},
|
|
1708
|
+
"testID": {
|
|
1709
|
+
"type": "string"
|
|
1710
|
+
},
|
|
1711
|
+
"text": {
|
|
1712
|
+
"type": "string"
|
|
1713
|
+
},
|
|
1714
|
+
"text_match": {
|
|
1715
|
+
"type": "string"
|
|
1716
|
+
},
|
|
1717
|
+
"textMatch": {
|
|
1718
|
+
"type": "string"
|
|
1719
|
+
},
|
|
1720
|
+
"expected": {
|
|
1721
|
+
"type": "string"
|
|
1722
|
+
},
|
|
1723
|
+
"visible": {
|
|
1724
|
+
"type": "boolean"
|
|
1725
|
+
},
|
|
1726
|
+
"timeout_ms": {
|
|
1727
|
+
"type": "number"
|
|
1728
|
+
},
|
|
1729
|
+
"surface": {
|
|
1730
|
+
"type": "string",
|
|
1731
|
+
"enum": [
|
|
1732
|
+
"app",
|
|
1733
|
+
"wallet"
|
|
1734
|
+
],
|
|
1735
|
+
"default": "app",
|
|
1736
|
+
"description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
|
|
1737
|
+
},
|
|
1738
|
+
"wallet_timeout_ms": {
|
|
1739
|
+
"type": "number",
|
|
1740
|
+
"description": "surface=wallet: how long to wait for MetaMask to show the request."
|
|
1741
|
+
}
|
|
1742
|
+
},
|
|
1743
|
+
"additionalProperties": false
|
|
1744
|
+
},
|
|
1745
|
+
"examples": [
|
|
1746
|
+
{
|
|
1747
|
+
"action": "ui.wait_for",
|
|
1748
|
+
"text": "Perps",
|
|
1749
|
+
"intent": "Confirm the requested application state is visible.",
|
|
1750
|
+
"next": "done"
|
|
1751
|
+
},
|
|
1752
|
+
{
|
|
1753
|
+
"action": "ui.wait_for",
|
|
1754
|
+
"selector": "[data-testid=example]",
|
|
1755
|
+
"visible": false,
|
|
1756
|
+
"timeout_ms": 2000,
|
|
1757
|
+
"intent": "Confirm the requested application state is visible.",
|
|
1758
|
+
"next": "done"
|
|
1759
|
+
}
|
|
1760
|
+
]
|
|
1761
|
+
},
|
|
1762
|
+
"wait": {
|
|
1763
|
+
"description": "Base wait action.",
|
|
1764
|
+
"examples": [
|
|
1765
|
+
{
|
|
1766
|
+
"action": "wait",
|
|
1767
|
+
"duration_ms": 1,
|
|
1768
|
+
"intent": "Allow the requested asynchronous state to settle.",
|
|
1769
|
+
"next": "done"
|
|
1770
|
+
}
|
|
1771
|
+
],
|
|
1772
|
+
"schema": {
|
|
1773
|
+
"type": "object",
|
|
1774
|
+
"properties": {
|
|
1775
|
+
"duration_ms": {
|
|
1776
|
+
"type": "integer"
|
|
1777
|
+
},
|
|
1778
|
+
"ms": {
|
|
1779
|
+
"type": "integer"
|
|
1780
|
+
}
|
|
1781
|
+
},
|
|
1782
|
+
"additionalProperties": false
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1786
|
+
}
|