@deeeed/metamask-harness 0.18.0 → 0.19.1
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 +200 -0
- package/README.md +4 -7
- package/adapters/core/inject.sh +1 -6
- package/adapters/extension/inject.mjs +1 -4
- package/adapters/extension/verify.sh +1 -1
- package/adapters/mobile/bridge-runtime/cdp-bridge.cjs +33 -0
- package/adapters/mobile/inject.sh +5 -4
- package/adapters/mobile/verify.sh +15 -19
- package/adapters/shared/harness-source-fingerprint.mjs +14 -12
- package/dist/adapters/harness-freshness.js +49 -0
- package/dist/adapters.js +6 -1
- package/dist/cli.js +0 -4
- package/dist/command-contract.js +51 -40
- package/dist/command-journal.js +50 -12
- package/dist/commands/call.js +95 -20
- package/dist/commands/check.js +1 -1
- package/dist/commands/completion-candidates.js +7 -19
- package/dist/commands/fixtures.js +50 -1
- package/dist/commands/last.js +9 -1
- package/dist/commands/launch/extension.js +2 -2
- package/dist/commands/launch/mobile.js +2 -0
- package/dist/commands/list-executables.js +56 -20
- package/dist/commands/manifest.js +28 -12
- package/dist/commands/parse-args.js +55 -3
- package/dist/commands/provision.js +0 -1
- package/dist/commands/run-engine.js +514 -336
- package/dist/commands/run.js +25 -37
- package/dist/commands/shared.js +1 -1
- package/dist/heal-bounds.js +5 -0
- package/dist/live-adapter-contract.js +15 -2
- package/dist/mm-harness-cli.js +22 -30
- package/dist/run-diagnostics.js +1 -1
- package/dist/run-recording.js +1 -1
- package/dist/runner.js +24 -2
- package/docs/CONTRIBUTING.md +2 -3
- package/docs/QA.md +0 -1
- package/docs/RECIPES.md +67 -91
- package/library/README.md +5 -5
- package/library/actions/core/perps/_controller.mjs +33 -1
- package/library/actions/core/perps/assert_orders.mjs +22 -12
- package/library/actions/core/perps/assert_positions.mjs +22 -12
- package/library/actions/core/perps/close_orders.mjs +2 -0
- package/library/actions/core/perps/close_positions.mjs +2 -0
- package/library/actions/core/perps/ensure_orders.mjs +4 -2
- package/library/actions/core/perps/ensure_positions.mjs +4 -2
- package/library/actions/core/perps/place_order.mjs +7 -3
- package/library/actions/extension/perps/assert_orders.mjs +2 -1
- package/library/actions/extension/perps/assert_positions.mjs +2 -1
- package/library/actions/extension/perps/perps.mjs +151 -30
- package/library/actions/mobile/perps/assert_orders.mjs +2 -1
- package/library/actions/mobile/perps/assert_positions.mjs +2 -1
- package/library/actions/mobile/perps/perps.mjs +148 -22
- package/library/library.json +1 -1
- package/library/manifests/core.action-manifest.json +1204 -411
- package/library/manifests/extension.action-manifest.json +1536 -656
- package/library/manifests/mobile.action-manifest.json +1728 -758
- package/library/recipes/app/lifecycle.android-smoke.mobile.recipe.json +63 -81
- package/library/recipes/perps/clean-market-testnet.core.recipe.json +44 -0
- package/library/recipes/perps/clean-market-testnet.recipe.json +49 -0
- package/library/recipes/perps/lifecycle.recipe.json +136 -180
- package/library/recipes/perps/order-lifecycle.core.recipe.json +71 -67
- package/library/recipes/perps/performance.background-resume.mobile.recipe.json +51 -67
- package/library/recipes/perps/performance.cold-start.mobile.recipe.json +51 -67
- package/library/recipes/perps/performance.mobile.recipe.json +37 -51
- package/library/recipes/perps/performance.warm-start.mobile.recipe.json +44 -59
- package/library/recipes/perps/read-markets.core.recipe.json +29 -31
- package/library/recipes/perps/smoke.core.recipe.json +29 -32
- package/library/recipes/perps/smoke.extension.recipe.json +41 -44
- package/library/recipes/perps/smoke.mobile.recipe.json +42 -44
- package/library/recipes/perps/trading-lifecycle.core.recipe.json +69 -65
- package/library/recipes/runner/action-validation.extension.recipe.json +312 -405
- package/library/recipes/runner/action-validation.mobile.recipe.json +316 -409
- package/library/recipes/runner/smoke.core.recipe.json +18 -20
- package/library/recipes/runner/smoke.extension.recipe.json +23 -24
- package/library/recipes/runner/smoke.mobile.recipe.json +23 -24
- package/library/recipes/wallet/smoke.extension.recipe.json +33 -35
- package/library/recipes/wallet/smoke.mobile.recipe.json +33 -35
- package/package.json +3 -3
- package/scripts/completions.sh +1 -4
- package/dist/adapters/extension/harness-freshness.js +0 -39
- package/dist/commands/flows.js +0 -91
- package/library/flows/perps.flows.json +0 -64
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"index_artifacts",
|
|
13
13
|
"end",
|
|
14
14
|
"call",
|
|
15
|
+
"switch",
|
|
15
16
|
"ui.navigate",
|
|
16
17
|
"ui.press",
|
|
17
18
|
"ui.key_press",
|
|
@@ -34,7 +35,28 @@
|
|
|
34
35
|
"intent": "Run a shell command from the project root"
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
|
-
]
|
|
38
|
+
],
|
|
39
|
+
"schema": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"properties": {
|
|
42
|
+
"cmd": {
|
|
43
|
+
"type": "string"
|
|
44
|
+
},
|
|
45
|
+
"command": {
|
|
46
|
+
"type": "string"
|
|
47
|
+
},
|
|
48
|
+
"cwd": {
|
|
49
|
+
"type": "string"
|
|
50
|
+
},
|
|
51
|
+
"timeout_ms": {
|
|
52
|
+
"type": "number"
|
|
53
|
+
},
|
|
54
|
+
"allow_failure": {
|
|
55
|
+
"type": "boolean"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"additionalProperties": false
|
|
59
|
+
}
|
|
38
60
|
},
|
|
39
61
|
"wait": {
|
|
40
62
|
"description": "Base wait action.",
|
|
@@ -46,7 +68,44 @@
|
|
|
46
68
|
"intent": "Base wait action"
|
|
47
69
|
}
|
|
48
70
|
}
|
|
49
|
-
]
|
|
71
|
+
],
|
|
72
|
+
"schema": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"properties": {
|
|
75
|
+
"duration_ms": {
|
|
76
|
+
"type": "integer"
|
|
77
|
+
},
|
|
78
|
+
"ms": {
|
|
79
|
+
"type": "integer"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"additionalProperties": false
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"switch": {
|
|
86
|
+
"description": "Choose a graph branch when one resolved string equals another.",
|
|
87
|
+
"examples": [
|
|
88
|
+
{
|
|
89
|
+
"node": {
|
|
90
|
+
"action": "switch",
|
|
91
|
+
"value": "{{params.mode}}",
|
|
92
|
+
"equals": "background_resume",
|
|
93
|
+
"cases": { "match": "background" },
|
|
94
|
+
"default": "warm",
|
|
95
|
+
"intent": "Choose the requested lifecycle preparation path"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"schema": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"properties": {
|
|
102
|
+
"value": { "type": "string" },
|
|
103
|
+
"equals": { "type": "string" }
|
|
104
|
+
},
|
|
105
|
+
"required": ["value", "equals"],
|
|
106
|
+
"additionalProperties": false
|
|
107
|
+
},
|
|
108
|
+
"result_cases": ["match"]
|
|
50
109
|
},
|
|
51
110
|
"watch_logs": {
|
|
52
111
|
"description": "Base log assertion/capture action.",
|
|
@@ -58,7 +117,29 @@
|
|
|
58
117
|
"intent": "Base log assertion/capture action"
|
|
59
118
|
}
|
|
60
119
|
}
|
|
61
|
-
]
|
|
120
|
+
],
|
|
121
|
+
"schema": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"properties": {
|
|
124
|
+
"path": {
|
|
125
|
+
"type": "string"
|
|
126
|
+
},
|
|
127
|
+
"contains": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
},
|
|
130
|
+
"scope": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"enum": [
|
|
133
|
+
"run",
|
|
134
|
+
"file"
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"required": [
|
|
139
|
+
"path"
|
|
140
|
+
],
|
|
141
|
+
"additionalProperties": false
|
|
142
|
+
}
|
|
62
143
|
},
|
|
63
144
|
"index_artifacts": {
|
|
64
145
|
"description": "Index extra recipe-authored artifacts that already exist on disk. Do not use after ui.screenshot; screenshots are registered by the runner.",
|
|
@@ -77,7 +158,55 @@
|
|
|
77
158
|
"intent": "Register a pre-existing report artifact"
|
|
78
159
|
}
|
|
79
160
|
}
|
|
80
|
-
]
|
|
161
|
+
],
|
|
162
|
+
"schema": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"properties": {
|
|
165
|
+
"artifacts": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": {
|
|
168
|
+
"type": [
|
|
169
|
+
"string",
|
|
170
|
+
"object"
|
|
171
|
+
],
|
|
172
|
+
"properties": {
|
|
173
|
+
"path": {
|
|
174
|
+
"type": "string"
|
|
175
|
+
},
|
|
176
|
+
"type": {
|
|
177
|
+
"type": "string"
|
|
178
|
+
},
|
|
179
|
+
"label": {
|
|
180
|
+
"type": "string"
|
|
181
|
+
},
|
|
182
|
+
"nodeId": {
|
|
183
|
+
"type": "string"
|
|
184
|
+
},
|
|
185
|
+
"mimeType": {
|
|
186
|
+
"type": "string"
|
|
187
|
+
},
|
|
188
|
+
"category": {
|
|
189
|
+
"type": "string"
|
|
190
|
+
},
|
|
191
|
+
"proofTarget": {
|
|
192
|
+
"type": "string"
|
|
193
|
+
},
|
|
194
|
+
"covers": {
|
|
195
|
+
"type": "array",
|
|
196
|
+
"items": {
|
|
197
|
+
"type": "string"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"additionalProperties": false
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"required": [
|
|
206
|
+
"artifacts"
|
|
207
|
+
],
|
|
208
|
+
"additionalProperties": false
|
|
209
|
+
}
|
|
81
210
|
},
|
|
82
211
|
"end": {
|
|
83
212
|
"description": "Base terminal action.",
|
|
@@ -101,30 +230,37 @@
|
|
|
101
230
|
"home",
|
|
102
231
|
"perps",
|
|
103
232
|
"perps-market"
|
|
104
|
-
]
|
|
105
|
-
"description": "Small stable page aliases; use raw route/hash when you need a route outside this list."
|
|
233
|
+
]
|
|
106
234
|
},
|
|
107
235
|
"market": {
|
|
108
|
-
"type": "string"
|
|
109
|
-
"description": "Market symbol for page=perps-market, e.g. ETH."
|
|
236
|
+
"type": "string"
|
|
110
237
|
},
|
|
111
238
|
"symbol": {
|
|
112
|
-
"type": "string"
|
|
113
|
-
"description": "Alias for market."
|
|
239
|
+
"type": "string"
|
|
114
240
|
},
|
|
115
241
|
"url": {
|
|
116
|
-
"type": "string"
|
|
117
|
-
"description": "Raw extension URL."
|
|
242
|
+
"type": "string"
|
|
118
243
|
},
|
|
119
244
|
"hash": {
|
|
120
|
-
"type": "string"
|
|
121
|
-
"description": "Raw extension hash, e.g. #/perps-home."
|
|
245
|
+
"type": "string"
|
|
122
246
|
},
|
|
123
247
|
"path": {
|
|
124
|
-
"type": "string"
|
|
125
|
-
|
|
248
|
+
"type": "string"
|
|
249
|
+
},
|
|
250
|
+
"route": {
|
|
251
|
+
"type": "string"
|
|
252
|
+
},
|
|
253
|
+
"screen": {
|
|
254
|
+
"type": "string"
|
|
255
|
+
},
|
|
256
|
+
"params": {
|
|
257
|
+
"type": "object"
|
|
258
|
+
},
|
|
259
|
+
"timeout_ms": {
|
|
260
|
+
"type": "number"
|
|
126
261
|
}
|
|
127
|
-
}
|
|
262
|
+
},
|
|
263
|
+
"additionalProperties": false
|
|
128
264
|
},
|
|
129
265
|
"examples": [
|
|
130
266
|
{
|
|
@@ -160,11 +296,38 @@
|
|
|
160
296
|
{
|
|
161
297
|
"node": {
|
|
162
298
|
"action": "ui.press",
|
|
163
|
-
"
|
|
164
|
-
"
|
|
299
|
+
"intent": "Press/tap/click a UI target through the platform adapter",
|
|
300
|
+
"text": "Perps"
|
|
165
301
|
}
|
|
166
302
|
}
|
|
167
|
-
]
|
|
303
|
+
],
|
|
304
|
+
"schema": {
|
|
305
|
+
"type": "object",
|
|
306
|
+
"properties": {
|
|
307
|
+
"selector": {
|
|
308
|
+
"type": "string"
|
|
309
|
+
},
|
|
310
|
+
"test_id": {
|
|
311
|
+
"type": "string"
|
|
312
|
+
},
|
|
313
|
+
"testID": {
|
|
314
|
+
"type": "string"
|
|
315
|
+
},
|
|
316
|
+
"text": {
|
|
317
|
+
"type": "string"
|
|
318
|
+
},
|
|
319
|
+
"label": {
|
|
320
|
+
"type": "string"
|
|
321
|
+
},
|
|
322
|
+
"timeout_ms": {
|
|
323
|
+
"type": "number"
|
|
324
|
+
},
|
|
325
|
+
"settle": {
|
|
326
|
+
"type": "boolean"
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
"additionalProperties": false
|
|
330
|
+
}
|
|
168
331
|
},
|
|
169
332
|
"ui.scroll": {
|
|
170
333
|
"description": "Scroll through the UI through the Farmslot base platform adapter. Supports deltas and scroll_into_view for selector/test-id proof positioning.",
|
|
@@ -186,27 +349,87 @@
|
|
|
186
349
|
}
|
|
187
350
|
}
|
|
188
351
|
],
|
|
189
|
-
"proof_effect": "E2E validation must include a passing ui-scroll-into-view trace event with output.intoView=true."
|
|
352
|
+
"proof_effect": "E2E validation must include a passing ui-scroll-into-view trace event with output.intoView=true.",
|
|
353
|
+
"schema": {
|
|
354
|
+
"type": "object",
|
|
355
|
+
"properties": {
|
|
356
|
+
"selector": {
|
|
357
|
+
"type": "string"
|
|
358
|
+
},
|
|
359
|
+
"test_id": {
|
|
360
|
+
"type": "string"
|
|
361
|
+
},
|
|
362
|
+
"testID": {
|
|
363
|
+
"type": "string"
|
|
364
|
+
},
|
|
365
|
+
"delta_x": {
|
|
366
|
+
"type": "number"
|
|
367
|
+
},
|
|
368
|
+
"delta_y": {
|
|
369
|
+
"type": "number"
|
|
370
|
+
},
|
|
371
|
+
"deltaX": {
|
|
372
|
+
"type": "number"
|
|
373
|
+
},
|
|
374
|
+
"deltaY": {
|
|
375
|
+
"type": "number"
|
|
376
|
+
},
|
|
377
|
+
"offset": {
|
|
378
|
+
"type": "number"
|
|
379
|
+
},
|
|
380
|
+
"scroll_into_view": {
|
|
381
|
+
"type": "boolean"
|
|
382
|
+
},
|
|
383
|
+
"into_view": {
|
|
384
|
+
"type": "boolean"
|
|
385
|
+
},
|
|
386
|
+
"animated": {
|
|
387
|
+
"type": "boolean"
|
|
388
|
+
},
|
|
389
|
+
"timeout_ms": {
|
|
390
|
+
"type": "number"
|
|
391
|
+
},
|
|
392
|
+
"settle": {
|
|
393
|
+
"type": "boolean"
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
"additionalProperties": false
|
|
397
|
+
}
|
|
190
398
|
},
|
|
191
399
|
"ui.wait_for": {
|
|
192
400
|
"description": "Wait for a UI condition through the Extension CDP adapter.",
|
|
193
401
|
"schema": {
|
|
194
402
|
"type": "object",
|
|
195
403
|
"properties": {
|
|
196
|
-
"
|
|
197
|
-
|
|
198
|
-
|
|
404
|
+
"selector": {
|
|
405
|
+
"type": "string"
|
|
406
|
+
},
|
|
407
|
+
"test_id": {
|
|
408
|
+
"type": "string"
|
|
409
|
+
},
|
|
410
|
+
"testID": {
|
|
411
|
+
"type": "string"
|
|
412
|
+
},
|
|
413
|
+
"text": {
|
|
414
|
+
"type": "string"
|
|
415
|
+
},
|
|
416
|
+
"text_match": {
|
|
417
|
+
"type": "string"
|
|
418
|
+
},
|
|
419
|
+
"textMatch": {
|
|
420
|
+
"type": "string"
|
|
421
|
+
},
|
|
199
422
|
"expected": {
|
|
200
|
-
"type": "string"
|
|
201
|
-
"enum": ["present", "absent", "visible", "hidden", "not_present"]
|
|
423
|
+
"type": "string"
|
|
202
424
|
},
|
|
203
425
|
"visible": {
|
|
204
|
-
"type": "boolean"
|
|
205
|
-
"description": "Convenience alias: true means expected=visible; false means expected=absent."
|
|
426
|
+
"type": "boolean"
|
|
206
427
|
},
|
|
207
|
-
"timeout_ms": {
|
|
428
|
+
"timeout_ms": {
|
|
429
|
+
"type": "number"
|
|
430
|
+
}
|
|
208
431
|
},
|
|
209
|
-
"
|
|
432
|
+
"additionalProperties": false
|
|
210
433
|
},
|
|
211
434
|
"examples": [
|
|
212
435
|
{
|
|
@@ -237,7 +460,25 @@
|
|
|
237
460
|
"intent": "Capture visual evidence after a wait/assert step"
|
|
238
461
|
}
|
|
239
462
|
}
|
|
240
|
-
]
|
|
463
|
+
],
|
|
464
|
+
"schema": {
|
|
465
|
+
"type": "object",
|
|
466
|
+
"properties": {
|
|
467
|
+
"path": {
|
|
468
|
+
"type": "string"
|
|
469
|
+
},
|
|
470
|
+
"label": {
|
|
471
|
+
"type": "string"
|
|
472
|
+
},
|
|
473
|
+
"category": {
|
|
474
|
+
"type": "string"
|
|
475
|
+
},
|
|
476
|
+
"timeout_ms": {
|
|
477
|
+
"type": "number"
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
"additionalProperties": false
|
|
481
|
+
}
|
|
241
482
|
},
|
|
242
483
|
"assert_file": {
|
|
243
484
|
"description": "Assert that a project file exists and optionally contains text.",
|
|
@@ -250,7 +491,22 @@
|
|
|
250
491
|
"intent": "Assert that a project file exists and optionally contains text"
|
|
251
492
|
}
|
|
252
493
|
}
|
|
253
|
-
]
|
|
494
|
+
],
|
|
495
|
+
"schema": {
|
|
496
|
+
"type": "object",
|
|
497
|
+
"properties": {
|
|
498
|
+
"path": {
|
|
499
|
+
"type": "string"
|
|
500
|
+
},
|
|
501
|
+
"contains": {
|
|
502
|
+
"type": "string"
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
"required": [
|
|
506
|
+
"path"
|
|
507
|
+
],
|
|
508
|
+
"additionalProperties": false
|
|
509
|
+
}
|
|
254
510
|
},
|
|
255
511
|
"assert_json": {
|
|
256
512
|
"description": "Assert a JSON file value with a JSONPath-style selector.",
|
|
@@ -267,7 +523,69 @@
|
|
|
267
523
|
"intent": "Assert a JSON file value with a JSONPath-style selector"
|
|
268
524
|
}
|
|
269
525
|
}
|
|
270
|
-
]
|
|
526
|
+
],
|
|
527
|
+
"schema": {
|
|
528
|
+
"type": "object",
|
|
529
|
+
"properties": {
|
|
530
|
+
"path": {
|
|
531
|
+
"type": "string"
|
|
532
|
+
},
|
|
533
|
+
"assert": {
|
|
534
|
+
"type": "object",
|
|
535
|
+
"properties": {
|
|
536
|
+
"path": {
|
|
537
|
+
"type": "string"
|
|
538
|
+
},
|
|
539
|
+
"operator": {
|
|
540
|
+
"type": "string"
|
|
541
|
+
},
|
|
542
|
+
"value": {
|
|
543
|
+
"type": [
|
|
544
|
+
"string",
|
|
545
|
+
"number",
|
|
546
|
+
"integer",
|
|
547
|
+
"boolean",
|
|
548
|
+
"object",
|
|
549
|
+
"array"
|
|
550
|
+
],
|
|
551
|
+
"items": {
|
|
552
|
+
"type": [
|
|
553
|
+
"string",
|
|
554
|
+
"number",
|
|
555
|
+
"integer",
|
|
556
|
+
"boolean",
|
|
557
|
+
"object"
|
|
558
|
+
]
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
"all": {
|
|
562
|
+
"type": "array",
|
|
563
|
+
"items": {
|
|
564
|
+
"type": "object"
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
"any": {
|
|
568
|
+
"type": "array",
|
|
569
|
+
"items": {
|
|
570
|
+
"type": "object"
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
"none": {
|
|
574
|
+
"type": "array",
|
|
575
|
+
"items": {
|
|
576
|
+
"type": "object"
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
},
|
|
580
|
+
"additionalProperties": false
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
"required": [
|
|
584
|
+
"path",
|
|
585
|
+
"assert"
|
|
586
|
+
],
|
|
587
|
+
"additionalProperties": false
|
|
588
|
+
}
|
|
271
589
|
},
|
|
272
590
|
"assert_exit_code": {
|
|
273
591
|
"description": "Assert the exit code captured from a command node output.",
|
|
@@ -280,7 +598,22 @@
|
|
|
280
598
|
"intent": "Assert the exit code captured from a command node output"
|
|
281
599
|
}
|
|
282
600
|
}
|
|
283
|
-
]
|
|
601
|
+
],
|
|
602
|
+
"schema": {
|
|
603
|
+
"type": "object",
|
|
604
|
+
"properties": {
|
|
605
|
+
"source": {
|
|
606
|
+
"type": "string"
|
|
607
|
+
},
|
|
608
|
+
"node": {
|
|
609
|
+
"type": "string"
|
|
610
|
+
},
|
|
611
|
+
"expected": {
|
|
612
|
+
"type": "number"
|
|
613
|
+
}
|
|
614
|
+
},
|
|
615
|
+
"additionalProperties": false
|
|
616
|
+
}
|
|
284
617
|
},
|
|
285
618
|
"assert_output": {
|
|
286
619
|
"description": "Assert stdout or stderr captured from a command node output.",
|
|
@@ -294,17 +627,87 @@
|
|
|
294
627
|
"intent": "Assert stdout or stderr captured from a command node output"
|
|
295
628
|
}
|
|
296
629
|
}
|
|
297
|
-
]
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
"node": {
|
|
305
|
-
"
|
|
306
|
-
|
|
307
|
-
|
|
630
|
+
],
|
|
631
|
+
"schema": {
|
|
632
|
+
"type": "object",
|
|
633
|
+
"properties": {
|
|
634
|
+
"source": {
|
|
635
|
+
"type": "string"
|
|
636
|
+
},
|
|
637
|
+
"node": {
|
|
638
|
+
"type": "string"
|
|
639
|
+
},
|
|
640
|
+
"stream": {
|
|
641
|
+
"type": "string"
|
|
642
|
+
},
|
|
643
|
+
"contains": {
|
|
644
|
+
"type": "string"
|
|
645
|
+
},
|
|
646
|
+
"match": {
|
|
647
|
+
"type": "string"
|
|
648
|
+
},
|
|
649
|
+
"assert": {
|
|
650
|
+
"type": "object",
|
|
651
|
+
"properties": {
|
|
652
|
+
"path": {
|
|
653
|
+
"type": "string"
|
|
654
|
+
},
|
|
655
|
+
"operator": {
|
|
656
|
+
"type": "string"
|
|
657
|
+
},
|
|
658
|
+
"value": {
|
|
659
|
+
"type": [
|
|
660
|
+
"string",
|
|
661
|
+
"number",
|
|
662
|
+
"integer",
|
|
663
|
+
"boolean",
|
|
664
|
+
"object",
|
|
665
|
+
"array"
|
|
666
|
+
],
|
|
667
|
+
"items": {
|
|
668
|
+
"type": [
|
|
669
|
+
"string",
|
|
670
|
+
"number",
|
|
671
|
+
"integer",
|
|
672
|
+
"boolean",
|
|
673
|
+
"object"
|
|
674
|
+
]
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
"all": {
|
|
678
|
+
"type": "array",
|
|
679
|
+
"items": {
|
|
680
|
+
"type": "object"
|
|
681
|
+
}
|
|
682
|
+
},
|
|
683
|
+
"any": {
|
|
684
|
+
"type": "array",
|
|
685
|
+
"items": {
|
|
686
|
+
"type": "object"
|
|
687
|
+
}
|
|
688
|
+
},
|
|
689
|
+
"none": {
|
|
690
|
+
"type": "array",
|
|
691
|
+
"items": {
|
|
692
|
+
"type": "object"
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
"additionalProperties": false
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"additionalProperties": false
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
"app.hud": {
|
|
703
|
+
"description": "Display minimal human-readable recipe progress. The intent must explain the current agent goal; debug metadata and grouping labels are hidden unless explicitly opted in.",
|
|
704
|
+
"examples": [
|
|
705
|
+
{
|
|
706
|
+
"description": "Default one-intent progress HUD",
|
|
707
|
+
"node": {
|
|
708
|
+
"action": "app.hud",
|
|
709
|
+
"status": "running",
|
|
710
|
+
"intent": "Open a small ETH long position",
|
|
308
711
|
"progress": {
|
|
309
712
|
"current": 12,
|
|
310
713
|
"total": 19
|
|
@@ -316,6 +719,12 @@
|
|
|
316
719
|
"schema": {
|
|
317
720
|
"type": "object",
|
|
318
721
|
"properties": {
|
|
722
|
+
"clear": {
|
|
723
|
+
"type": "boolean"
|
|
724
|
+
},
|
|
725
|
+
"title": {
|
|
726
|
+
"type": "string"
|
|
727
|
+
},
|
|
319
728
|
"status": {
|
|
320
729
|
"type": "string",
|
|
321
730
|
"enum": [
|
|
@@ -324,23 +733,23 @@
|
|
|
324
733
|
"fail"
|
|
325
734
|
]
|
|
326
735
|
},
|
|
327
|
-
"
|
|
736
|
+
"node_id": {
|
|
328
737
|
"type": "string"
|
|
329
738
|
},
|
|
330
|
-
"
|
|
331
|
-
"type": "
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
"
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
739
|
+
"nodeId": {
|
|
740
|
+
"type": "string"
|
|
741
|
+
},
|
|
742
|
+
"phase": {
|
|
743
|
+
"type": "string"
|
|
744
|
+
},
|
|
745
|
+
"action_name": {
|
|
746
|
+
"type": "string"
|
|
747
|
+
},
|
|
748
|
+
"recipe_action": {
|
|
749
|
+
"type": "string"
|
|
750
|
+
},
|
|
751
|
+
"text": {
|
|
752
|
+
"type": "string"
|
|
344
753
|
},
|
|
345
754
|
"detail": {
|
|
346
755
|
"type": "string"
|
|
@@ -349,29 +758,13 @@
|
|
|
349
758
|
"type": "string"
|
|
350
759
|
},
|
|
351
760
|
"display": {
|
|
352
|
-
"type": "object"
|
|
353
|
-
"properties": {
|
|
354
|
-
"showDetail": {
|
|
355
|
-
"type": "boolean"
|
|
356
|
-
},
|
|
357
|
-
"showDebug": {
|
|
358
|
-
"type": "boolean"
|
|
359
|
-
},
|
|
360
|
-
"showTitle": {
|
|
361
|
-
"type": "boolean"
|
|
362
|
-
},
|
|
363
|
-
"layout": {
|
|
364
|
-
"type": "string"
|
|
365
|
-
},
|
|
366
|
-
"position": {
|
|
367
|
-
"type": "string"
|
|
368
|
-
}
|
|
369
|
-
}
|
|
761
|
+
"type": "object"
|
|
370
762
|
},
|
|
371
|
-
"
|
|
372
|
-
"type": "
|
|
763
|
+
"progress": {
|
|
764
|
+
"type": "object"
|
|
373
765
|
}
|
|
374
|
-
}
|
|
766
|
+
},
|
|
767
|
+
"additionalProperties": false
|
|
375
768
|
}
|
|
376
769
|
},
|
|
377
770
|
"ui.set_input": {
|
|
@@ -385,17 +778,27 @@
|
|
|
385
778
|
"test_id": {
|
|
386
779
|
"type": "string"
|
|
387
780
|
},
|
|
388
|
-
"
|
|
781
|
+
"testID": {
|
|
389
782
|
"type": "string"
|
|
390
783
|
},
|
|
784
|
+
"value": {
|
|
785
|
+
"type": [
|
|
786
|
+
"string",
|
|
787
|
+
"number"
|
|
788
|
+
],
|
|
789
|
+
"description": "Text or a typed numeric recipe parameter; numbers are entered as their decimal text."
|
|
790
|
+
},
|
|
391
791
|
"text": {
|
|
392
792
|
"type": "string"
|
|
393
793
|
},
|
|
394
|
-
"
|
|
395
|
-
"type": "
|
|
794
|
+
"timeout_ms": {
|
|
795
|
+
"type": "number"
|
|
796
|
+
},
|
|
797
|
+
"settle": {
|
|
798
|
+
"type": "boolean"
|
|
396
799
|
}
|
|
397
800
|
},
|
|
398
|
-
"additionalProperties":
|
|
801
|
+
"additionalProperties": false
|
|
399
802
|
},
|
|
400
803
|
"examples": [
|
|
401
804
|
{
|
|
@@ -406,373 +809,105 @@
|
|
|
406
809
|
"intent": "Set text on an extension DOM input through the CDP UI transport"
|
|
407
810
|
}
|
|
408
811
|
}
|
|
409
|
-
]
|
|
410
|
-
},
|
|
411
|
-
"ui.key_press": {
|
|
412
|
-
"description": "Send a trusted keyboard press to the currently focused UI element through the UI transport.",
|
|
413
|
-
"schema": {
|
|
414
|
-
"type": "object",
|
|
415
|
-
"properties": {
|
|
416
|
-
"key": {
|
|
417
|
-
"type": "string"
|
|
418
|
-
},
|
|
419
|
-
"
|
|
420
|
-
"type": "
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
"key"
|
|
425
|
-
],
|
|
426
|
-
"additionalProperties": true
|
|
427
|
-
},
|
|
428
|
-
"examples": [
|
|
429
|
-
{
|
|
430
|
-
"node": {
|
|
431
|
-
"action": "ui.key_press",
|
|
432
|
-
"key": "Enter",
|
|
433
|
-
"intent": "Send a trusted Enter key press to the focused UI element"
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
]
|
|
437
|
-
},
|
|
438
|
-
"app.status": {
|
|
439
|
-
"description": "Report the adapter's static status — platform, project root, resolved checkout shape, and headless compatibility mode (no live route or account).",
|
|
440
|
-
"examples": [
|
|
441
|
-
{
|
|
442
|
-
"node": {
|
|
443
|
-
"action": "app.status",
|
|
444
|
-
"intent": "Report the resolved checkout status"
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
]
|
|
448
|
-
},
|
|
449
|
-
"cdp.target": {
|
|
450
|
-
"description": "Probe the platform debug transport — Chrome CDP for extension, the React Native debug bridge for mobile — and report whether it is reachable.",
|
|
451
|
-
"examples": [
|
|
452
|
-
{
|
|
453
|
-
"node": {
|
|
454
|
-
"action": "cdp.target",
|
|
455
|
-
"cdp_port": 9323,
|
|
456
|
-
"required": true,
|
|
457
|
-
"intent": "Confirm the extension CDP endpoint is reachable"
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
]
|
|
461
|
-
},
|
|
462
|
-
"metamask.wallet.fixture_status": {
|
|
463
|
-
"description": "Report the on-disk wallet fixture status (accounts and password presence) without launching or mutating the app.",
|
|
464
|
-
"examples": [
|
|
465
|
-
{
|
|
466
|
-
"description": "Minimal node",
|
|
467
|
-
"node": {
|
|
468
|
-
"action": "metamask.wallet.fixture_status",
|
|
469
|
-
"intent": "Check wallet fixture status"
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
]
|
|
473
|
-
},
|
|
474
|
-
"metamask.wallet.setup": {
|
|
475
|
-
"description": "Import the wallet fixture accounts and password so the app starts from a known signed-in state.",
|
|
476
|
-
"examples": [
|
|
477
|
-
{
|
|
478
|
-
"description": "Minimal node",
|
|
479
|
-
"node": {
|
|
480
|
-
"action": "metamask.wallet.setup",
|
|
481
|
-
"intent": "Prepare the wallet fixture for recipe execution"
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
]
|
|
485
|
-
},
|
|
486
|
-
"metamask.wallet.ensure_unlocked": {
|
|
487
|
-
"description": "Unlock the wallet with the fixture password when it is currently locked.",
|
|
488
|
-
"examples": [
|
|
489
|
-
{
|
|
490
|
-
"description": "Minimal node",
|
|
491
|
-
"node": {
|
|
492
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
493
|
-
"intent": "Ensure the wallet is unlocked before proof steps"
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
]
|
|
497
|
-
},
|
|
498
|
-
"metamask.wallet.select_account": {
|
|
499
|
-
"description": "Select a wallet account by address, id, or display name.",
|
|
500
|
-
"examples": [
|
|
501
|
-
{
|
|
502
|
-
"description": "Select by deterministic fixture address",
|
|
503
|
-
"node": {
|
|
504
|
-
"action": "metamask.wallet.select_account",
|
|
505
|
-
"address": "0x8dc623e964475d4d669da601fd15ea9125469003",
|
|
506
|
-
"intent": "Select the requested wallet account"
|
|
507
|
-
}
|
|
508
|
-
},
|
|
509
|
-
{
|
|
510
|
-
"description": "Select by fixture display name",
|
|
511
|
-
"node": {
|
|
512
|
-
"action": "metamask.wallet.select_account",
|
|
513
|
-
"name": "dev1",
|
|
514
|
-
"intent": "Select the requested wallet account"
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
]
|
|
518
|
-
},
|
|
519
|
-
"metamask.wallet.list_accounts": {
|
|
520
|
-
"description": "List redacted wallet accounts and identify the selected account without mutating the app.",
|
|
521
|
-
"examples": [
|
|
522
|
-
{
|
|
523
|
-
"description": "List wallet accounts",
|
|
524
|
-
"node": {
|
|
525
|
-
"action": "metamask.wallet.list_accounts",
|
|
526
|
-
"intent": "Discover the available wallet accounts"
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
]
|
|
530
|
-
},
|
|
531
|
-
"metamask.wallet.read_state": {
|
|
532
|
-
"description": "Read the redacted wallet state (selected account, route, and device) from the running app.",
|
|
533
|
-
"examples": [
|
|
534
|
-
{
|
|
535
|
-
"description": "Minimal node",
|
|
536
|
-
"node": {
|
|
537
|
-
"action": "metamask.wallet.read_state",
|
|
538
|
-
"intent": "Read wallet state needed for the proof"
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
]
|
|
542
|
-
},
|
|
543
|
-
"metamask.perps.read_positions": {
|
|
544
|
-
"description": "Read live Perps positions and return the selected subset.",
|
|
545
|
-
"examples": [
|
|
546
|
-
{
|
|
547
|
-
"description": "Read selected live state",
|
|
548
|
-
"node": {
|
|
549
|
-
"action": "metamask.perps.read_positions",
|
|
550
|
-
"market": "BTC",
|
|
551
|
-
"intent": "Read Perps positions needed for the proof"
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
]
|
|
555
|
-
},
|
|
556
|
-
"metamask.perps.read_orders": {
|
|
557
|
-
"description": "Read live Perps open orders and return the selected subset.",
|
|
558
|
-
"examples": [
|
|
559
|
-
{
|
|
560
|
-
"description": "Read selected live state",
|
|
561
|
-
"node": {
|
|
562
|
-
"action": "metamask.perps.read_orders",
|
|
563
|
-
"market": "BTC",
|
|
564
|
-
"intent": "Read Perps open orders needed for the proof"
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
]
|
|
568
|
-
},
|
|
569
|
-
"metamask.perps.close_positions": {
|
|
570
|
-
"description": "Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Close selected live Perps positions. Use selector/mode params to close matching symbols or all positions. The network field in examples is an authoring convention: only start_state/teardown_state enforce the network (ensureNetwork); the mutation handlers themselves do not read it.",
|
|
571
|
-
"examples": [
|
|
572
|
-
{
|
|
573
|
-
"description": "Close every open position",
|
|
574
|
-
"node": {
|
|
575
|
-
"action": "metamask.perps.close_positions",
|
|
576
|
-
"mode": "all",
|
|
577
|
-
"intent": "Close selected Perps positions before continuing",
|
|
578
|
-
"network": "testnet"
|
|
579
|
-
}
|
|
580
|
-
},
|
|
581
|
-
{
|
|
582
|
-
"description": "Close selected BTC/ETH positions",
|
|
583
|
-
"node": {
|
|
584
|
-
"action": "metamask.perps.close_positions",
|
|
585
|
-
"markets": [
|
|
586
|
-
"BTC",
|
|
587
|
-
"ETH"
|
|
588
|
-
],
|
|
589
|
-
"intent": "Close selected Perps positions before continuing",
|
|
590
|
-
"network": "testnet"
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
]
|
|
594
|
-
},
|
|
595
|
-
"metamask.perps.close_orders": {
|
|
596
|
-
"description": "Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Cancel selected live Perps open orders. Use selector/mode params to cancel matching symbols or all orders. The network field in examples is an authoring convention: only start_state/teardown_state enforce the network (ensureNetwork); the mutation handlers themselves do not read it.",
|
|
597
|
-
"examples": [
|
|
598
|
-
{
|
|
599
|
-
"description": "Cancel every open order",
|
|
600
|
-
"node": {
|
|
601
|
-
"action": "metamask.perps.close_orders",
|
|
602
|
-
"mode": "all",
|
|
603
|
-
"intent": "Cancel selected Perps orders before continuing",
|
|
604
|
-
"network": "testnet"
|
|
605
|
-
}
|
|
606
|
-
},
|
|
607
|
-
{
|
|
608
|
-
"description": "Cancel BTC orders only",
|
|
609
|
-
"node": {
|
|
610
|
-
"action": "metamask.perps.close_orders",
|
|
611
|
-
"market": "BTC",
|
|
612
|
-
"intent": "Cancel selected Perps orders before continuing",
|
|
613
|
-
"network": "testnet"
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
]
|
|
617
|
-
},
|
|
618
|
-
"metamask.perps.place_order": {
|
|
619
|
-
"description": "Place a Perps order through a supported app/API path. Default to testnet; mainnet order placement requires an explicit user request. The network field in examples is an authoring convention: only start_state/teardown_state enforce the network (ensureNetwork); the mutation handlers themselves do not read it.",
|
|
620
|
-
"examples": [
|
|
621
|
-
{
|
|
622
|
-
"description": "Place BTC market order",
|
|
623
|
-
"node": {
|
|
624
|
-
"action": "metamask.perps.place_order",
|
|
625
|
-
"market": "BTC",
|
|
626
|
-
"side": "long",
|
|
627
|
-
"notional": "10",
|
|
628
|
-
"leverage": 2,
|
|
629
|
-
"intent": "Place the requested Perps order",
|
|
630
|
-
"network": "testnet"
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
]
|
|
634
|
-
},
|
|
635
|
-
"metamask.perps.assert_positions": {
|
|
636
|
-
"description": "Assert selected live Perps positions are present or absent.",
|
|
637
|
-
"examples": [
|
|
638
|
-
{
|
|
639
|
-
"description": "Assert BTC position is open",
|
|
640
|
-
"node": {
|
|
641
|
-
"action": "metamask.perps.assert_positions",
|
|
642
|
-
"state": "open",
|
|
643
|
-
"market": "BTC",
|
|
644
|
-
"intent": "Assert the expected Perps position state"
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
]
|
|
648
|
-
},
|
|
649
|
-
"metamask.perps.assert_orders": {
|
|
650
|
-
"description": "Assert selected live Perps open orders are present or absent.",
|
|
651
|
-
"examples": [
|
|
652
|
-
{
|
|
653
|
-
"description": "Assert no BTC open orders",
|
|
654
|
-
"node": {
|
|
655
|
-
"action": "metamask.perps.assert_orders",
|
|
656
|
-
"state": "none",
|
|
657
|
-
"market": "BTC",
|
|
658
|
-
"intent": "Assert the expected Perps open order state"
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
]
|
|
662
|
-
},
|
|
663
|
-
"metamask.perps.ensure_positions": {
|
|
664
|
-
"description": "Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Higher-level wrapper that reads selected positions, closes or places when needed, then asserts final position state. The network field in examples is an authoring convention: only start_state/teardown_state enforce the network (ensureNetwork); the mutation handlers themselves do not read it.",
|
|
665
|
-
"examples": [
|
|
666
|
-
{
|
|
667
|
-
"description": "Ensure no BTC position before proof window",
|
|
668
|
-
"node": {
|
|
669
|
-
"action": "metamask.perps.ensure_positions",
|
|
670
|
-
"state": "none",
|
|
671
|
-
"market": "BTC",
|
|
672
|
-
"intent": "Converge Perps positions to the requested state",
|
|
673
|
-
"network": "testnet"
|
|
674
|
-
}
|
|
675
|
-
},
|
|
676
|
-
{
|
|
677
|
-
"description": "Ensure any existing positions are closed",
|
|
678
|
-
"node": {
|
|
679
|
-
"action": "metamask.perps.ensure_positions",
|
|
680
|
-
"state": "none",
|
|
681
|
-
"mode": "all",
|
|
682
|
-
"intent": "Converge Perps positions to the requested state",
|
|
683
|
-
"network": "testnet"
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
]
|
|
687
|
-
},
|
|
688
|
-
"metamask.perps.ensure_orders": {
|
|
689
|
-
"description": "Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Higher-level wrapper that reads selected orders, cancels when needed, then asserts final order state. The network field in examples is an authoring convention: only start_state/teardown_state enforce the network (ensureNetwork); the mutation handlers themselves do not read it.",
|
|
690
|
-
"examples": [
|
|
691
|
-
{
|
|
692
|
-
"description": "Ensure no open orders before proof window",
|
|
693
|
-
"node": {
|
|
694
|
-
"action": "metamask.perps.ensure_orders",
|
|
695
|
-
"state": "none",
|
|
696
|
-
"mode": "all",
|
|
697
|
-
"intent": "Converge Perps orders to the requested state",
|
|
698
|
-
"network": "testnet"
|
|
699
|
-
}
|
|
700
|
-
}
|
|
701
|
-
]
|
|
702
|
-
},
|
|
703
|
-
"metamask.perps.start_state": {
|
|
704
|
-
"description": "Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Recommended configurable Perps start state that composes reusable domain operations before the proof window.",
|
|
705
|
-
"examples": [
|
|
706
|
-
{
|
|
707
|
-
"description": "Clean BTC testnet market state",
|
|
708
|
-
"node": {
|
|
709
|
-
"action": "metamask.perps.start_state",
|
|
710
|
-
"profile": "clean_market_testnet",
|
|
711
|
-
"market": "BTC",
|
|
712
|
-
"positions": {
|
|
713
|
-
"state": "none"
|
|
714
|
-
},
|
|
715
|
-
"orders": {
|
|
716
|
-
"state": "none"
|
|
717
|
-
},
|
|
718
|
-
"intent": "Prepare the Perps start state for the proof",
|
|
719
|
-
"network": "testnet"
|
|
812
|
+
]
|
|
813
|
+
},
|
|
814
|
+
"ui.key_press": {
|
|
815
|
+
"description": "Send a trusted keyboard press to the currently focused UI element through the UI transport.",
|
|
816
|
+
"schema": {
|
|
817
|
+
"type": "object",
|
|
818
|
+
"properties": {
|
|
819
|
+
"key": {
|
|
820
|
+
"type": "string"
|
|
821
|
+
},
|
|
822
|
+
"timeout_ms": {
|
|
823
|
+
"type": "number"
|
|
824
|
+
},
|
|
825
|
+
"settle": {
|
|
826
|
+
"type": "boolean"
|
|
720
827
|
}
|
|
721
828
|
},
|
|
829
|
+
"required": [
|
|
830
|
+
"key"
|
|
831
|
+
],
|
|
832
|
+
"additionalProperties": false
|
|
833
|
+
},
|
|
834
|
+
"examples": [
|
|
722
835
|
{
|
|
723
|
-
"description": "Start with an open ETH long position",
|
|
724
836
|
"node": {
|
|
725
|
-
"action": "
|
|
726
|
-
"
|
|
727
|
-
"
|
|
728
|
-
"side": "long",
|
|
729
|
-
"positions": {
|
|
730
|
-
"state": "open",
|
|
731
|
-
"notional": "10",
|
|
732
|
-
"leverage": 2
|
|
733
|
-
},
|
|
734
|
-
"intent": "Prepare the Perps start state for the proof",
|
|
735
|
-
"network": "testnet"
|
|
837
|
+
"action": "ui.key_press",
|
|
838
|
+
"key": "Enter",
|
|
839
|
+
"intent": "Send a trusted Enter key press to the focused UI element"
|
|
736
840
|
}
|
|
737
841
|
}
|
|
738
842
|
]
|
|
739
843
|
},
|
|
740
|
-
"
|
|
741
|
-
"description": "
|
|
844
|
+
"app.status": {
|
|
845
|
+
"description": "Report the adapter's static status — platform, project root, resolved checkout shape, and headless compatibility mode (no live route or account).",
|
|
742
846
|
"examples": [
|
|
743
847
|
{
|
|
744
|
-
"description": "Return BTC test account to clean state",
|
|
745
848
|
"node": {
|
|
746
|
-
"action": "
|
|
747
|
-
"
|
|
748
|
-
"positions": {
|
|
749
|
-
"state": "none"
|
|
750
|
-
},
|
|
751
|
-
"orders": {
|
|
752
|
-
"state": "none"
|
|
753
|
-
},
|
|
754
|
-
"page": "home",
|
|
755
|
-
"intent": "Restore Perps state after the proof"
|
|
849
|
+
"action": "app.status",
|
|
850
|
+
"intent": "Report the resolved checkout status"
|
|
756
851
|
}
|
|
757
|
-
}
|
|
852
|
+
}
|
|
853
|
+
],
|
|
854
|
+
"schema": {
|
|
855
|
+
"type": "object",
|
|
856
|
+
"properties": {},
|
|
857
|
+
"additionalProperties": false
|
|
858
|
+
}
|
|
859
|
+
},
|
|
860
|
+
"cdp.target": {
|
|
861
|
+
"description": "Probe the platform debug transport — Chrome CDP for extension, the React Native debug bridge for mobile — and report whether it is reachable.",
|
|
862
|
+
"examples": [
|
|
758
863
|
{
|
|
759
|
-
"description": "Teardown only state created by selected market",
|
|
760
864
|
"node": {
|
|
761
|
-
"action": "
|
|
762
|
-
"
|
|
763
|
-
"
|
|
865
|
+
"action": "cdp.target",
|
|
866
|
+
"cdp_port": 9323,
|
|
867
|
+
"required": true,
|
|
868
|
+
"intent": "Confirm the extension CDP endpoint is reachable"
|
|
764
869
|
}
|
|
765
870
|
}
|
|
766
|
-
]
|
|
871
|
+
],
|
|
872
|
+
"schema": {
|
|
873
|
+
"type": "object",
|
|
874
|
+
"properties": {
|
|
875
|
+
"cdp_port": {
|
|
876
|
+
"type": "number"
|
|
877
|
+
},
|
|
878
|
+
"metro_port": {
|
|
879
|
+
"type": "number"
|
|
880
|
+
},
|
|
881
|
+
"watcher_port": {
|
|
882
|
+
"type": "number"
|
|
883
|
+
},
|
|
884
|
+
"probe_timeout_ms": {
|
|
885
|
+
"type": "number"
|
|
886
|
+
},
|
|
887
|
+
"cdp_timeout_ms": {
|
|
888
|
+
"type": "number"
|
|
889
|
+
},
|
|
890
|
+
"timeout_ms": {
|
|
891
|
+
"type": "number"
|
|
892
|
+
},
|
|
893
|
+
"require_reachable": {
|
|
894
|
+
"type": "boolean"
|
|
895
|
+
},
|
|
896
|
+
"required": {
|
|
897
|
+
"type": "boolean"
|
|
898
|
+
}
|
|
899
|
+
},
|
|
900
|
+
"additionalProperties": false
|
|
901
|
+
}
|
|
767
902
|
},
|
|
768
903
|
"call": {
|
|
769
|
-
"description": "Invoke a named
|
|
904
|
+
"description": "Invoke a named recipe by ref and run its steps inline.",
|
|
770
905
|
"examples": [
|
|
771
906
|
{
|
|
772
907
|
"node": {
|
|
773
908
|
"action": "call",
|
|
774
909
|
"ref": "mydev.open_perps_setup",
|
|
775
|
-
"intent": "Run a personal Perps setup
|
|
910
|
+
"intent": "Run a personal Perps setup recipe"
|
|
776
911
|
}
|
|
777
912
|
}
|
|
778
913
|
]
|
|
@@ -785,14 +920,8 @@
|
|
|
785
920
|
"description": "Report the on-disk wallet fixture status (accounts and password presence) without launching or mutating the app.",
|
|
786
921
|
"schema": {
|
|
787
922
|
"type": "object",
|
|
788
|
-
"properties": {
|
|
789
|
-
|
|
790
|
-
"const": "metamask.wallet.fixture_status"
|
|
791
|
-
}
|
|
792
|
-
},
|
|
793
|
-
"required": [
|
|
794
|
-
"action"
|
|
795
|
-
]
|
|
923
|
+
"properties": {},
|
|
924
|
+
"additionalProperties": false
|
|
796
925
|
},
|
|
797
926
|
"examples": [
|
|
798
927
|
{
|
|
@@ -804,7 +933,8 @@
|
|
|
804
933
|
}
|
|
805
934
|
],
|
|
806
935
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
807
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
936
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
937
|
+
"execution_capabilities": []
|
|
808
938
|
},
|
|
809
939
|
{
|
|
810
940
|
"name": "metamask.wallet.setup",
|
|
@@ -812,14 +942,8 @@
|
|
|
812
942
|
"description": "Import the wallet fixture accounts and password so the app starts from a known signed-in state.",
|
|
813
943
|
"schema": {
|
|
814
944
|
"type": "object",
|
|
815
|
-
"properties": {
|
|
816
|
-
|
|
817
|
-
"const": "metamask.wallet.setup"
|
|
818
|
-
}
|
|
819
|
-
},
|
|
820
|
-
"required": [
|
|
821
|
-
"action"
|
|
822
|
-
]
|
|
945
|
+
"properties": {},
|
|
946
|
+
"additionalProperties": false
|
|
823
947
|
},
|
|
824
948
|
"examples": [
|
|
825
949
|
{
|
|
@@ -831,7 +955,10 @@
|
|
|
831
955
|
}
|
|
832
956
|
],
|
|
833
957
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
834
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
958
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
959
|
+
"execution_capabilities": [
|
|
960
|
+
"app-mutation"
|
|
961
|
+
]
|
|
835
962
|
},
|
|
836
963
|
{
|
|
837
964
|
"name": "metamask.wallet.ensure_unlocked",
|
|
@@ -840,13 +967,11 @@
|
|
|
840
967
|
"schema": {
|
|
841
968
|
"type": "object",
|
|
842
969
|
"properties": {
|
|
843
|
-
"
|
|
844
|
-
"
|
|
970
|
+
"timeout_ms": {
|
|
971
|
+
"type": "number"
|
|
845
972
|
}
|
|
846
973
|
},
|
|
847
|
-
"
|
|
848
|
-
"action"
|
|
849
|
-
]
|
|
974
|
+
"additionalProperties": false
|
|
850
975
|
},
|
|
851
976
|
"examples": [
|
|
852
977
|
{
|
|
@@ -858,7 +983,10 @@
|
|
|
858
983
|
}
|
|
859
984
|
],
|
|
860
985
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
861
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
986
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
987
|
+
"execution_capabilities": [
|
|
988
|
+
"app-mutation"
|
|
989
|
+
]
|
|
862
990
|
},
|
|
863
991
|
{
|
|
864
992
|
"name": "metamask.wallet.select_account",
|
|
@@ -866,9 +994,6 @@
|
|
|
866
994
|
"schema": {
|
|
867
995
|
"type": "object",
|
|
868
996
|
"properties": {
|
|
869
|
-
"action": {
|
|
870
|
-
"const": "metamask.wallet.select_account"
|
|
871
|
-
},
|
|
872
997
|
"address": {
|
|
873
998
|
"type": "string",
|
|
874
999
|
"description": "EVM address of the account to select."
|
|
@@ -882,26 +1007,7 @@
|
|
|
882
1007
|
"description": "Display name of the account to select."
|
|
883
1008
|
}
|
|
884
1009
|
},
|
|
885
|
-
"
|
|
886
|
-
"action"
|
|
887
|
-
],
|
|
888
|
-
"anyOf": [
|
|
889
|
-
{
|
|
890
|
-
"required": [
|
|
891
|
-
"address"
|
|
892
|
-
]
|
|
893
|
-
},
|
|
894
|
-
{
|
|
895
|
-
"required": [
|
|
896
|
-
"id"
|
|
897
|
-
]
|
|
898
|
-
},
|
|
899
|
-
{
|
|
900
|
-
"required": [
|
|
901
|
-
"name"
|
|
902
|
-
]
|
|
903
|
-
}
|
|
904
|
-
]
|
|
1010
|
+
"additionalProperties": false
|
|
905
1011
|
},
|
|
906
1012
|
"examples": [
|
|
907
1013
|
{
|
|
@@ -921,7 +1027,10 @@
|
|
|
921
1027
|
}
|
|
922
1028
|
}
|
|
923
1029
|
],
|
|
924
|
-
"owner": "metamask"
|
|
1030
|
+
"owner": "metamask",
|
|
1031
|
+
"execution_capabilities": [
|
|
1032
|
+
"app-mutation"
|
|
1033
|
+
]
|
|
925
1034
|
},
|
|
926
1035
|
{
|
|
927
1036
|
"name": "metamask.wallet.list_accounts",
|
|
@@ -930,11 +1039,9 @@
|
|
|
930
1039
|
"schema": {
|
|
931
1040
|
"type": "object",
|
|
932
1041
|
"properties": {
|
|
933
|
-
"action": {
|
|
934
|
-
"const": "metamask.wallet.list_accounts"
|
|
935
|
-
},
|
|
936
1042
|
"scope": {
|
|
937
1043
|
"type": "string",
|
|
1044
|
+
"default": "named",
|
|
938
1045
|
"enum": [
|
|
939
1046
|
"selected",
|
|
940
1047
|
"named",
|
|
@@ -944,9 +1051,7 @@
|
|
|
944
1051
|
"description": "Account scope. Defaults to named human-visible accounts; use selected for the active account, evm for EVM accounts, or all for the full inventory."
|
|
945
1052
|
}
|
|
946
1053
|
},
|
|
947
|
-
"
|
|
948
|
-
"action"
|
|
949
|
-
]
|
|
1054
|
+
"additionalProperties": false
|
|
950
1055
|
},
|
|
951
1056
|
"examples": [
|
|
952
1057
|
{
|
|
@@ -958,7 +1063,8 @@
|
|
|
958
1063
|
}
|
|
959
1064
|
],
|
|
960
1065
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
961
|
-
"safety_notes": "Read-only account metadata; must never expose keys, mnemonics, vault data, or credentials."
|
|
1066
|
+
"safety_notes": "Read-only account metadata; must never expose keys, mnemonics, vault data, or credentials.",
|
|
1067
|
+
"execution_capabilities": []
|
|
962
1068
|
},
|
|
963
1069
|
{
|
|
964
1070
|
"name": "metamask.wallet.read_state",
|
|
@@ -966,14 +1072,8 @@
|
|
|
966
1072
|
"description": "Read the redacted wallet state (selected account, route, and device) from the running app.",
|
|
967
1073
|
"schema": {
|
|
968
1074
|
"type": "object",
|
|
969
|
-
"properties": {
|
|
970
|
-
|
|
971
|
-
"const": "metamask.wallet.read_state"
|
|
972
|
-
}
|
|
973
|
-
},
|
|
974
|
-
"required": [
|
|
975
|
-
"action"
|
|
976
|
-
]
|
|
1075
|
+
"properties": {},
|
|
1076
|
+
"additionalProperties": false
|
|
977
1077
|
},
|
|
978
1078
|
"examples": [
|
|
979
1079
|
{
|
|
@@ -985,18 +1085,16 @@
|
|
|
985
1085
|
}
|
|
986
1086
|
],
|
|
987
1087
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
988
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1088
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1089
|
+
"execution_capabilities": []
|
|
989
1090
|
},
|
|
990
1091
|
{
|
|
991
1092
|
"name": "metamask.perps.read_positions",
|
|
992
1093
|
"owner": "metamask",
|
|
993
|
-
"description": "extension Read live Perps positions
|
|
1094
|
+
"description": "extension Read live Perps positions; without a selector, return all live positions.",
|
|
994
1095
|
"schema": {
|
|
995
1096
|
"type": "object",
|
|
996
1097
|
"properties": {
|
|
997
|
-
"action": {
|
|
998
|
-
"const": "metamask.perps.read_positions"
|
|
999
|
-
},
|
|
1000
1098
|
"market": {
|
|
1001
1099
|
"type": "string",
|
|
1002
1100
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1029,7 +1127,41 @@
|
|
|
1029
1127
|
},
|
|
1030
1128
|
"selector": {
|
|
1031
1129
|
"type": "object",
|
|
1032
|
-
"
|
|
1130
|
+
"properties": {
|
|
1131
|
+
"mode": {
|
|
1132
|
+
"type": "string",
|
|
1133
|
+
"enum": [
|
|
1134
|
+
"matching",
|
|
1135
|
+
"all"
|
|
1136
|
+
]
|
|
1137
|
+
},
|
|
1138
|
+
"market": {
|
|
1139
|
+
"type": "string"
|
|
1140
|
+
},
|
|
1141
|
+
"symbol": {
|
|
1142
|
+
"type": "string"
|
|
1143
|
+
},
|
|
1144
|
+
"markets": {
|
|
1145
|
+
"type": "array",
|
|
1146
|
+
"items": {
|
|
1147
|
+
"type": "string"
|
|
1148
|
+
}
|
|
1149
|
+
},
|
|
1150
|
+
"symbols": {
|
|
1151
|
+
"type": "array",
|
|
1152
|
+
"items": {
|
|
1153
|
+
"type": "string"
|
|
1154
|
+
}
|
|
1155
|
+
},
|
|
1156
|
+
"side": {
|
|
1157
|
+
"type": "string",
|
|
1158
|
+
"enum": [
|
|
1159
|
+
"long",
|
|
1160
|
+
"short"
|
|
1161
|
+
]
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1164
|
+
"additionalProperties": false
|
|
1033
1165
|
},
|
|
1034
1166
|
"side": {
|
|
1035
1167
|
"type": "string",
|
|
@@ -1043,9 +1175,7 @@
|
|
|
1043
1175
|
"type": "number"
|
|
1044
1176
|
}
|
|
1045
1177
|
},
|
|
1046
|
-
"
|
|
1047
|
-
"action"
|
|
1048
|
-
]
|
|
1178
|
+
"additionalProperties": false
|
|
1049
1179
|
},
|
|
1050
1180
|
"examples": [
|
|
1051
1181
|
{
|
|
@@ -1058,18 +1188,16 @@
|
|
|
1058
1188
|
}
|
|
1059
1189
|
],
|
|
1060
1190
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1061
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1191
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1192
|
+
"execution_capabilities": []
|
|
1062
1193
|
},
|
|
1063
1194
|
{
|
|
1064
1195
|
"name": "metamask.perps.read_orders",
|
|
1065
1196
|
"owner": "metamask",
|
|
1066
|
-
"description": "extension Read live Perps open orders
|
|
1197
|
+
"description": "extension Read live Perps open orders; without a selector, return all live orders.",
|
|
1067
1198
|
"schema": {
|
|
1068
1199
|
"type": "object",
|
|
1069
1200
|
"properties": {
|
|
1070
|
-
"action": {
|
|
1071
|
-
"const": "metamask.perps.read_orders"
|
|
1072
|
-
},
|
|
1073
1201
|
"market": {
|
|
1074
1202
|
"type": "string",
|
|
1075
1203
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1102,7 +1230,41 @@
|
|
|
1102
1230
|
},
|
|
1103
1231
|
"selector": {
|
|
1104
1232
|
"type": "object",
|
|
1105
|
-
"
|
|
1233
|
+
"properties": {
|
|
1234
|
+
"mode": {
|
|
1235
|
+
"type": "string",
|
|
1236
|
+
"enum": [
|
|
1237
|
+
"matching",
|
|
1238
|
+
"all"
|
|
1239
|
+
]
|
|
1240
|
+
},
|
|
1241
|
+
"market": {
|
|
1242
|
+
"type": "string"
|
|
1243
|
+
},
|
|
1244
|
+
"symbol": {
|
|
1245
|
+
"type": "string"
|
|
1246
|
+
},
|
|
1247
|
+
"markets": {
|
|
1248
|
+
"type": "array",
|
|
1249
|
+
"items": {
|
|
1250
|
+
"type": "string"
|
|
1251
|
+
}
|
|
1252
|
+
},
|
|
1253
|
+
"symbols": {
|
|
1254
|
+
"type": "array",
|
|
1255
|
+
"items": {
|
|
1256
|
+
"type": "string"
|
|
1257
|
+
}
|
|
1258
|
+
},
|
|
1259
|
+
"side": {
|
|
1260
|
+
"type": "string",
|
|
1261
|
+
"enum": [
|
|
1262
|
+
"long",
|
|
1263
|
+
"short"
|
|
1264
|
+
]
|
|
1265
|
+
}
|
|
1266
|
+
},
|
|
1267
|
+
"additionalProperties": false
|
|
1106
1268
|
},
|
|
1107
1269
|
"side": {
|
|
1108
1270
|
"type": "string",
|
|
@@ -1116,9 +1278,7 @@
|
|
|
1116
1278
|
"type": "number"
|
|
1117
1279
|
}
|
|
1118
1280
|
},
|
|
1119
|
-
"
|
|
1120
|
-
"action"
|
|
1121
|
-
]
|
|
1281
|
+
"additionalProperties": false
|
|
1122
1282
|
},
|
|
1123
1283
|
"examples": [
|
|
1124
1284
|
{
|
|
@@ -1131,7 +1291,8 @@
|
|
|
1131
1291
|
}
|
|
1132
1292
|
],
|
|
1133
1293
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1134
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1294
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1295
|
+
"execution_capabilities": []
|
|
1135
1296
|
},
|
|
1136
1297
|
{
|
|
1137
1298
|
"name": "metamask.perps.close_positions",
|
|
@@ -1140,9 +1301,6 @@
|
|
|
1140
1301
|
"schema": {
|
|
1141
1302
|
"type": "object",
|
|
1142
1303
|
"properties": {
|
|
1143
|
-
"action": {
|
|
1144
|
-
"const": "metamask.perps.close_positions"
|
|
1145
|
-
},
|
|
1146
1304
|
"market": {
|
|
1147
1305
|
"type": "string",
|
|
1148
1306
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1175,7 +1333,41 @@
|
|
|
1175
1333
|
},
|
|
1176
1334
|
"selector": {
|
|
1177
1335
|
"type": "object",
|
|
1178
|
-
"
|
|
1336
|
+
"properties": {
|
|
1337
|
+
"mode": {
|
|
1338
|
+
"type": "string",
|
|
1339
|
+
"enum": [
|
|
1340
|
+
"matching",
|
|
1341
|
+
"all"
|
|
1342
|
+
]
|
|
1343
|
+
},
|
|
1344
|
+
"market": {
|
|
1345
|
+
"type": "string"
|
|
1346
|
+
},
|
|
1347
|
+
"symbol": {
|
|
1348
|
+
"type": "string"
|
|
1349
|
+
},
|
|
1350
|
+
"markets": {
|
|
1351
|
+
"type": "array",
|
|
1352
|
+
"items": {
|
|
1353
|
+
"type": "string"
|
|
1354
|
+
}
|
|
1355
|
+
},
|
|
1356
|
+
"symbols": {
|
|
1357
|
+
"type": "array",
|
|
1358
|
+
"items": {
|
|
1359
|
+
"type": "string"
|
|
1360
|
+
}
|
|
1361
|
+
},
|
|
1362
|
+
"side": {
|
|
1363
|
+
"type": "string",
|
|
1364
|
+
"enum": [
|
|
1365
|
+
"long",
|
|
1366
|
+
"short"
|
|
1367
|
+
]
|
|
1368
|
+
}
|
|
1369
|
+
},
|
|
1370
|
+
"additionalProperties": false
|
|
1179
1371
|
},
|
|
1180
1372
|
"side": {
|
|
1181
1373
|
"type": "string",
|
|
@@ -1189,9 +1381,7 @@
|
|
|
1189
1381
|
"type": "number"
|
|
1190
1382
|
}
|
|
1191
1383
|
},
|
|
1192
|
-
"
|
|
1193
|
-
"action"
|
|
1194
|
-
]
|
|
1384
|
+
"additionalProperties": false
|
|
1195
1385
|
},
|
|
1196
1386
|
"examples": [
|
|
1197
1387
|
{
|
|
@@ -1199,8 +1389,7 @@
|
|
|
1199
1389
|
"node": {
|
|
1200
1390
|
"action": "metamask.perps.close_positions",
|
|
1201
1391
|
"mode": "all",
|
|
1202
|
-
"intent": "Close selected Perps positions before continuing"
|
|
1203
|
-
"network": "testnet"
|
|
1392
|
+
"intent": "Close selected Perps positions before continuing"
|
|
1204
1393
|
}
|
|
1205
1394
|
},
|
|
1206
1395
|
{
|
|
@@ -1211,13 +1400,16 @@
|
|
|
1211
1400
|
"BTC",
|
|
1212
1401
|
"ETH"
|
|
1213
1402
|
],
|
|
1214
|
-
"intent": "Close selected Perps positions before continuing"
|
|
1215
|
-
"network": "testnet"
|
|
1403
|
+
"intent": "Close selected Perps positions before continuing"
|
|
1216
1404
|
}
|
|
1217
1405
|
}
|
|
1218
1406
|
],
|
|
1219
1407
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1220
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1408
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1409
|
+
"execution_capabilities": [
|
|
1410
|
+
"app-mutation",
|
|
1411
|
+
"external-mutation"
|
|
1412
|
+
]
|
|
1221
1413
|
},
|
|
1222
1414
|
{
|
|
1223
1415
|
"name": "metamask.perps.close_orders",
|
|
@@ -1226,9 +1418,6 @@
|
|
|
1226
1418
|
"schema": {
|
|
1227
1419
|
"type": "object",
|
|
1228
1420
|
"properties": {
|
|
1229
|
-
"action": {
|
|
1230
|
-
"const": "metamask.perps.close_orders"
|
|
1231
|
-
},
|
|
1232
1421
|
"market": {
|
|
1233
1422
|
"type": "string",
|
|
1234
1423
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1261,7 +1450,41 @@
|
|
|
1261
1450
|
},
|
|
1262
1451
|
"selector": {
|
|
1263
1452
|
"type": "object",
|
|
1264
|
-
"
|
|
1453
|
+
"properties": {
|
|
1454
|
+
"mode": {
|
|
1455
|
+
"type": "string",
|
|
1456
|
+
"enum": [
|
|
1457
|
+
"matching",
|
|
1458
|
+
"all"
|
|
1459
|
+
]
|
|
1460
|
+
},
|
|
1461
|
+
"market": {
|
|
1462
|
+
"type": "string"
|
|
1463
|
+
},
|
|
1464
|
+
"symbol": {
|
|
1465
|
+
"type": "string"
|
|
1466
|
+
},
|
|
1467
|
+
"markets": {
|
|
1468
|
+
"type": "array",
|
|
1469
|
+
"items": {
|
|
1470
|
+
"type": "string"
|
|
1471
|
+
}
|
|
1472
|
+
},
|
|
1473
|
+
"symbols": {
|
|
1474
|
+
"type": "array",
|
|
1475
|
+
"items": {
|
|
1476
|
+
"type": "string"
|
|
1477
|
+
}
|
|
1478
|
+
},
|
|
1479
|
+
"side": {
|
|
1480
|
+
"type": "string",
|
|
1481
|
+
"enum": [
|
|
1482
|
+
"long",
|
|
1483
|
+
"short"
|
|
1484
|
+
]
|
|
1485
|
+
}
|
|
1486
|
+
},
|
|
1487
|
+
"additionalProperties": false
|
|
1265
1488
|
},
|
|
1266
1489
|
"side": {
|
|
1267
1490
|
"type": "string",
|
|
@@ -1275,9 +1498,7 @@
|
|
|
1275
1498
|
"type": "number"
|
|
1276
1499
|
}
|
|
1277
1500
|
},
|
|
1278
|
-
"
|
|
1279
|
-
"action"
|
|
1280
|
-
]
|
|
1501
|
+
"additionalProperties": false
|
|
1281
1502
|
},
|
|
1282
1503
|
"examples": [
|
|
1283
1504
|
{
|
|
@@ -1285,8 +1506,7 @@
|
|
|
1285
1506
|
"node": {
|
|
1286
1507
|
"action": "metamask.perps.close_orders",
|
|
1287
1508
|
"mode": "all",
|
|
1288
|
-
"intent": "Cancel selected Perps orders before continuing"
|
|
1289
|
-
"network": "testnet"
|
|
1509
|
+
"intent": "Cancel selected Perps orders before continuing"
|
|
1290
1510
|
}
|
|
1291
1511
|
},
|
|
1292
1512
|
{
|
|
@@ -1294,13 +1514,16 @@
|
|
|
1294
1514
|
"node": {
|
|
1295
1515
|
"action": "metamask.perps.close_orders",
|
|
1296
1516
|
"market": "BTC",
|
|
1297
|
-
"intent": "Cancel selected Perps orders before continuing"
|
|
1298
|
-
"network": "testnet"
|
|
1517
|
+
"intent": "Cancel selected Perps orders before continuing"
|
|
1299
1518
|
}
|
|
1300
1519
|
}
|
|
1301
1520
|
],
|
|
1302
1521
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1303
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1522
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1523
|
+
"execution_capabilities": [
|
|
1524
|
+
"app-mutation",
|
|
1525
|
+
"external-mutation"
|
|
1526
|
+
]
|
|
1304
1527
|
},
|
|
1305
1528
|
{
|
|
1306
1529
|
"name": "metamask.perps.place_order",
|
|
@@ -1309,9 +1532,6 @@
|
|
|
1309
1532
|
"schema": {
|
|
1310
1533
|
"type": "object",
|
|
1311
1534
|
"properties": {
|
|
1312
|
-
"action": {
|
|
1313
|
-
"const": "metamask.perps.place_order"
|
|
1314
|
-
},
|
|
1315
1535
|
"market": {
|
|
1316
1536
|
"type": "string",
|
|
1317
1537
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1344,7 +1564,41 @@
|
|
|
1344
1564
|
},
|
|
1345
1565
|
"selector": {
|
|
1346
1566
|
"type": "object",
|
|
1347
|
-
"
|
|
1567
|
+
"properties": {
|
|
1568
|
+
"mode": {
|
|
1569
|
+
"type": "string",
|
|
1570
|
+
"enum": [
|
|
1571
|
+
"matching",
|
|
1572
|
+
"all"
|
|
1573
|
+
]
|
|
1574
|
+
},
|
|
1575
|
+
"market": {
|
|
1576
|
+
"type": "string"
|
|
1577
|
+
},
|
|
1578
|
+
"symbol": {
|
|
1579
|
+
"type": "string"
|
|
1580
|
+
},
|
|
1581
|
+
"markets": {
|
|
1582
|
+
"type": "array",
|
|
1583
|
+
"items": {
|
|
1584
|
+
"type": "string"
|
|
1585
|
+
}
|
|
1586
|
+
},
|
|
1587
|
+
"symbols": {
|
|
1588
|
+
"type": "array",
|
|
1589
|
+
"items": {
|
|
1590
|
+
"type": "string"
|
|
1591
|
+
}
|
|
1592
|
+
},
|
|
1593
|
+
"side": {
|
|
1594
|
+
"type": "string",
|
|
1595
|
+
"enum": [
|
|
1596
|
+
"long",
|
|
1597
|
+
"short"
|
|
1598
|
+
]
|
|
1599
|
+
}
|
|
1600
|
+
},
|
|
1601
|
+
"additionalProperties": false
|
|
1348
1602
|
},
|
|
1349
1603
|
"side": {
|
|
1350
1604
|
"type": "string",
|
|
@@ -1370,12 +1624,11 @@
|
|
|
1370
1624
|
"description": "Base asset size when supported."
|
|
1371
1625
|
},
|
|
1372
1626
|
"leverage": {
|
|
1373
|
-
"type": "number"
|
|
1627
|
+
"type": "number",
|
|
1628
|
+
"default": 3
|
|
1374
1629
|
}
|
|
1375
1630
|
},
|
|
1376
|
-
"
|
|
1377
|
-
"action"
|
|
1378
|
-
]
|
|
1631
|
+
"additionalProperties": false
|
|
1379
1632
|
},
|
|
1380
1633
|
"examples": [
|
|
1381
1634
|
{
|
|
@@ -1386,24 +1639,24 @@
|
|
|
1386
1639
|
"side": "long",
|
|
1387
1640
|
"notional": "10",
|
|
1388
1641
|
"leverage": 2,
|
|
1389
|
-
"intent": "Place the requested Perps order"
|
|
1390
|
-
"network": "testnet"
|
|
1642
|
+
"intent": "Place the requested Perps order"
|
|
1391
1643
|
}
|
|
1392
1644
|
}
|
|
1393
1645
|
],
|
|
1394
1646
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1395
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1647
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1648
|
+
"execution_capabilities": [
|
|
1649
|
+
"app-mutation",
|
|
1650
|
+
"external-mutation"
|
|
1651
|
+
]
|
|
1396
1652
|
},
|
|
1397
1653
|
{
|
|
1398
1654
|
"name": "metamask.perps.assert_positions",
|
|
1399
1655
|
"owner": "metamask",
|
|
1400
|
-
"description": "extension Assert
|
|
1656
|
+
"description": "extension Assert live Perps positions are present or absent for an explicit market selection or mode=all.",
|
|
1401
1657
|
"schema": {
|
|
1402
1658
|
"type": "object",
|
|
1403
1659
|
"properties": {
|
|
1404
|
-
"action": {
|
|
1405
|
-
"const": "metamask.perps.assert_positions"
|
|
1406
|
-
},
|
|
1407
1660
|
"market": {
|
|
1408
1661
|
"type": "string",
|
|
1409
1662
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1436,7 +1689,41 @@
|
|
|
1436
1689
|
},
|
|
1437
1690
|
"selector": {
|
|
1438
1691
|
"type": "object",
|
|
1439
|
-
"
|
|
1692
|
+
"properties": {
|
|
1693
|
+
"mode": {
|
|
1694
|
+
"type": "string",
|
|
1695
|
+
"enum": [
|
|
1696
|
+
"matching",
|
|
1697
|
+
"all"
|
|
1698
|
+
]
|
|
1699
|
+
},
|
|
1700
|
+
"market": {
|
|
1701
|
+
"type": "string"
|
|
1702
|
+
},
|
|
1703
|
+
"symbol": {
|
|
1704
|
+
"type": "string"
|
|
1705
|
+
},
|
|
1706
|
+
"markets": {
|
|
1707
|
+
"type": "array",
|
|
1708
|
+
"items": {
|
|
1709
|
+
"type": "string"
|
|
1710
|
+
}
|
|
1711
|
+
},
|
|
1712
|
+
"symbols": {
|
|
1713
|
+
"type": "array",
|
|
1714
|
+
"items": {
|
|
1715
|
+
"type": "string"
|
|
1716
|
+
}
|
|
1717
|
+
},
|
|
1718
|
+
"side": {
|
|
1719
|
+
"type": "string",
|
|
1720
|
+
"enum": [
|
|
1721
|
+
"long",
|
|
1722
|
+
"short"
|
|
1723
|
+
]
|
|
1724
|
+
}
|
|
1725
|
+
},
|
|
1726
|
+
"additionalProperties": false
|
|
1440
1727
|
},
|
|
1441
1728
|
"side": {
|
|
1442
1729
|
"type": "string",
|
|
@@ -1462,8 +1749,9 @@
|
|
|
1462
1749
|
}
|
|
1463
1750
|
},
|
|
1464
1751
|
"required": [
|
|
1465
|
-
"
|
|
1466
|
-
]
|
|
1752
|
+
"state"
|
|
1753
|
+
],
|
|
1754
|
+
"additionalProperties": false
|
|
1467
1755
|
},
|
|
1468
1756
|
"examples": [
|
|
1469
1757
|
{
|
|
@@ -1477,18 +1765,16 @@
|
|
|
1477
1765
|
}
|
|
1478
1766
|
],
|
|
1479
1767
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1480
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1768
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1769
|
+
"execution_capabilities": []
|
|
1481
1770
|
},
|
|
1482
1771
|
{
|
|
1483
1772
|
"name": "metamask.perps.assert_orders",
|
|
1484
1773
|
"owner": "metamask",
|
|
1485
|
-
"description": "extension Assert
|
|
1774
|
+
"description": "extension Assert live Perps open orders are present or absent for an explicit market selection or mode=all.",
|
|
1486
1775
|
"schema": {
|
|
1487
1776
|
"type": "object",
|
|
1488
1777
|
"properties": {
|
|
1489
|
-
"action": {
|
|
1490
|
-
"const": "metamask.perps.assert_orders"
|
|
1491
|
-
},
|
|
1492
1778
|
"market": {
|
|
1493
1779
|
"type": "string",
|
|
1494
1780
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1521,7 +1807,41 @@
|
|
|
1521
1807
|
},
|
|
1522
1808
|
"selector": {
|
|
1523
1809
|
"type": "object",
|
|
1524
|
-
"
|
|
1810
|
+
"properties": {
|
|
1811
|
+
"mode": {
|
|
1812
|
+
"type": "string",
|
|
1813
|
+
"enum": [
|
|
1814
|
+
"matching",
|
|
1815
|
+
"all"
|
|
1816
|
+
]
|
|
1817
|
+
},
|
|
1818
|
+
"market": {
|
|
1819
|
+
"type": "string"
|
|
1820
|
+
},
|
|
1821
|
+
"symbol": {
|
|
1822
|
+
"type": "string"
|
|
1823
|
+
},
|
|
1824
|
+
"markets": {
|
|
1825
|
+
"type": "array",
|
|
1826
|
+
"items": {
|
|
1827
|
+
"type": "string"
|
|
1828
|
+
}
|
|
1829
|
+
},
|
|
1830
|
+
"symbols": {
|
|
1831
|
+
"type": "array",
|
|
1832
|
+
"items": {
|
|
1833
|
+
"type": "string"
|
|
1834
|
+
}
|
|
1835
|
+
},
|
|
1836
|
+
"side": {
|
|
1837
|
+
"type": "string",
|
|
1838
|
+
"enum": [
|
|
1839
|
+
"long",
|
|
1840
|
+
"short"
|
|
1841
|
+
]
|
|
1842
|
+
}
|
|
1843
|
+
},
|
|
1844
|
+
"additionalProperties": false
|
|
1525
1845
|
},
|
|
1526
1846
|
"side": {
|
|
1527
1847
|
"type": "string",
|
|
@@ -1547,8 +1867,9 @@
|
|
|
1547
1867
|
}
|
|
1548
1868
|
},
|
|
1549
1869
|
"required": [
|
|
1550
|
-
"
|
|
1551
|
-
]
|
|
1870
|
+
"state"
|
|
1871
|
+
],
|
|
1872
|
+
"additionalProperties": false
|
|
1552
1873
|
},
|
|
1553
1874
|
"examples": [
|
|
1554
1875
|
{
|
|
@@ -1562,7 +1883,8 @@
|
|
|
1562
1883
|
}
|
|
1563
1884
|
],
|
|
1564
1885
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1565
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1886
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1887
|
+
"execution_capabilities": []
|
|
1566
1888
|
},
|
|
1567
1889
|
{
|
|
1568
1890
|
"name": "metamask.perps.ensure_positions",
|
|
@@ -1571,9 +1893,6 @@
|
|
|
1571
1893
|
"schema": {
|
|
1572
1894
|
"type": "object",
|
|
1573
1895
|
"properties": {
|
|
1574
|
-
"action": {
|
|
1575
|
-
"const": "metamask.perps.ensure_positions"
|
|
1576
|
-
},
|
|
1577
1896
|
"market": {
|
|
1578
1897
|
"type": "string",
|
|
1579
1898
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1606,7 +1925,41 @@
|
|
|
1606
1925
|
},
|
|
1607
1926
|
"selector": {
|
|
1608
1927
|
"type": "object",
|
|
1609
|
-
"
|
|
1928
|
+
"properties": {
|
|
1929
|
+
"mode": {
|
|
1930
|
+
"type": "string",
|
|
1931
|
+
"enum": [
|
|
1932
|
+
"matching",
|
|
1933
|
+
"all"
|
|
1934
|
+
]
|
|
1935
|
+
},
|
|
1936
|
+
"market": {
|
|
1937
|
+
"type": "string"
|
|
1938
|
+
},
|
|
1939
|
+
"symbol": {
|
|
1940
|
+
"type": "string"
|
|
1941
|
+
},
|
|
1942
|
+
"markets": {
|
|
1943
|
+
"type": "array",
|
|
1944
|
+
"items": {
|
|
1945
|
+
"type": "string"
|
|
1946
|
+
}
|
|
1947
|
+
},
|
|
1948
|
+
"symbols": {
|
|
1949
|
+
"type": "array",
|
|
1950
|
+
"items": {
|
|
1951
|
+
"type": "string"
|
|
1952
|
+
}
|
|
1953
|
+
},
|
|
1954
|
+
"side": {
|
|
1955
|
+
"type": "string",
|
|
1956
|
+
"enum": [
|
|
1957
|
+
"long",
|
|
1958
|
+
"short"
|
|
1959
|
+
]
|
|
1960
|
+
}
|
|
1961
|
+
},
|
|
1962
|
+
"additionalProperties": false
|
|
1610
1963
|
},
|
|
1611
1964
|
"side": {
|
|
1612
1965
|
"type": "string",
|
|
@@ -1632,8 +1985,9 @@
|
|
|
1632
1985
|
}
|
|
1633
1986
|
},
|
|
1634
1987
|
"required": [
|
|
1635
|
-
"
|
|
1636
|
-
]
|
|
1988
|
+
"state"
|
|
1989
|
+
],
|
|
1990
|
+
"additionalProperties": false
|
|
1637
1991
|
},
|
|
1638
1992
|
"examples": [
|
|
1639
1993
|
{
|
|
@@ -1642,8 +1996,7 @@
|
|
|
1642
1996
|
"action": "metamask.perps.ensure_positions",
|
|
1643
1997
|
"state": "none",
|
|
1644
1998
|
"market": "BTC",
|
|
1645
|
-
"intent": "Converge Perps positions to the requested state"
|
|
1646
|
-
"network": "testnet"
|
|
1999
|
+
"intent": "Converge Perps positions to the requested state"
|
|
1647
2000
|
}
|
|
1648
2001
|
},
|
|
1649
2002
|
{
|
|
@@ -1652,24 +2005,24 @@
|
|
|
1652
2005
|
"action": "metamask.perps.ensure_positions",
|
|
1653
2006
|
"state": "none",
|
|
1654
2007
|
"mode": "all",
|
|
1655
|
-
"intent": "Converge Perps positions to the requested state"
|
|
1656
|
-
"network": "testnet"
|
|
2008
|
+
"intent": "Converge Perps positions to the requested state"
|
|
1657
2009
|
}
|
|
1658
2010
|
}
|
|
1659
2011
|
],
|
|
1660
2012
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1661
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
2013
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
2014
|
+
"execution_capabilities": [
|
|
2015
|
+
"app-mutation",
|
|
2016
|
+
"external-mutation"
|
|
2017
|
+
]
|
|
1662
2018
|
},
|
|
1663
2019
|
{
|
|
1664
2020
|
"name": "metamask.perps.ensure_orders",
|
|
1665
2021
|
"owner": "metamask",
|
|
1666
|
-
"description": "extension
|
|
2022
|
+
"description": "extension Converge selected testnet orders to open or absent, then independently assert the final state. Creating an open state uses a resting limit order.",
|
|
1667
2023
|
"schema": {
|
|
1668
2024
|
"type": "object",
|
|
1669
2025
|
"properties": {
|
|
1670
|
-
"action": {
|
|
1671
|
-
"const": "metamask.perps.ensure_orders"
|
|
1672
|
-
},
|
|
1673
2026
|
"market": {
|
|
1674
2027
|
"type": "string",
|
|
1675
2028
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1702,7 +2055,41 @@
|
|
|
1702
2055
|
},
|
|
1703
2056
|
"selector": {
|
|
1704
2057
|
"type": "object",
|
|
1705
|
-
"
|
|
2058
|
+
"properties": {
|
|
2059
|
+
"mode": {
|
|
2060
|
+
"type": "string",
|
|
2061
|
+
"enum": [
|
|
2062
|
+
"matching",
|
|
2063
|
+
"all"
|
|
2064
|
+
]
|
|
2065
|
+
},
|
|
2066
|
+
"market": {
|
|
2067
|
+
"type": "string"
|
|
2068
|
+
},
|
|
2069
|
+
"symbol": {
|
|
2070
|
+
"type": "string"
|
|
2071
|
+
},
|
|
2072
|
+
"markets": {
|
|
2073
|
+
"type": "array",
|
|
2074
|
+
"items": {
|
|
2075
|
+
"type": "string"
|
|
2076
|
+
}
|
|
2077
|
+
},
|
|
2078
|
+
"symbols": {
|
|
2079
|
+
"type": "array",
|
|
2080
|
+
"items": {
|
|
2081
|
+
"type": "string"
|
|
2082
|
+
}
|
|
2083
|
+
},
|
|
2084
|
+
"side": {
|
|
2085
|
+
"type": "string",
|
|
2086
|
+
"enum": [
|
|
2087
|
+
"long",
|
|
2088
|
+
"short"
|
|
2089
|
+
]
|
|
2090
|
+
}
|
|
2091
|
+
},
|
|
2092
|
+
"additionalProperties": false
|
|
1706
2093
|
},
|
|
1707
2094
|
"side": {
|
|
1708
2095
|
"type": "string",
|
|
@@ -1715,6 +2102,16 @@
|
|
|
1715
2102
|
"timeout_ms": {
|
|
1716
2103
|
"type": "number"
|
|
1717
2104
|
},
|
|
2105
|
+
"notional": {
|
|
2106
|
+
"type": "number",
|
|
2107
|
+
"default": 10,
|
|
2108
|
+
"description": "Small testnet USD notional used only when creating a missing open order."
|
|
2109
|
+
},
|
|
2110
|
+
"leverage": {
|
|
2111
|
+
"type": "number",
|
|
2112
|
+
"default": 3,
|
|
2113
|
+
"description": "Testnet leverage used only when creating a missing open order."
|
|
2114
|
+
},
|
|
1718
2115
|
"state": {
|
|
1719
2116
|
"type": "string",
|
|
1720
2117
|
"enum": [
|
|
@@ -1728,8 +2125,9 @@
|
|
|
1728
2125
|
}
|
|
1729
2126
|
},
|
|
1730
2127
|
"required": [
|
|
1731
|
-
"
|
|
1732
|
-
]
|
|
2128
|
+
"state"
|
|
2129
|
+
],
|
|
2130
|
+
"additionalProperties": false
|
|
1733
2131
|
},
|
|
1734
2132
|
"examples": [
|
|
1735
2133
|
{
|
|
@@ -1738,13 +2136,28 @@
|
|
|
1738
2136
|
"action": "metamask.perps.ensure_orders",
|
|
1739
2137
|
"state": "none",
|
|
1740
2138
|
"mode": "all",
|
|
1741
|
-
"intent": "Converge Perps orders to the requested state"
|
|
1742
|
-
|
|
2139
|
+
"intent": "Converge Perps orders to the requested state"
|
|
2140
|
+
}
|
|
2141
|
+
},
|
|
2142
|
+
{
|
|
2143
|
+
"description": "Ensure one small resting ETH short order exists",
|
|
2144
|
+
"node": {
|
|
2145
|
+
"action": "metamask.perps.ensure_orders",
|
|
2146
|
+
"market": "ETH",
|
|
2147
|
+
"side": "short",
|
|
2148
|
+
"state": "open",
|
|
2149
|
+
"notional": 10,
|
|
2150
|
+
"leverage": 2,
|
|
2151
|
+
"intent": "Converge ETH open orders to one deterministic testnet precondition"
|
|
1743
2152
|
}
|
|
1744
2153
|
}
|
|
1745
2154
|
],
|
|
1746
2155
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1747
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
2156
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
2157
|
+
"execution_capabilities": [
|
|
2158
|
+
"app-mutation",
|
|
2159
|
+
"external-mutation"
|
|
2160
|
+
]
|
|
1748
2161
|
},
|
|
1749
2162
|
{
|
|
1750
2163
|
"name": "metamask.perps.start_state",
|
|
@@ -1753,9 +2166,6 @@
|
|
|
1753
2166
|
"schema": {
|
|
1754
2167
|
"type": "object",
|
|
1755
2168
|
"properties": {
|
|
1756
|
-
"action": {
|
|
1757
|
-
"const": "metamask.perps.start_state"
|
|
1758
|
-
},
|
|
1759
2169
|
"profile": {
|
|
1760
2170
|
"type": "string",
|
|
1761
2171
|
"description": "Optional profile such as clean_market_testnet, open_position_testnet, open_order_testnet, or provider_mainnet_readonly."
|
|
@@ -1794,40 +2204,284 @@
|
|
|
1794
2204
|
},
|
|
1795
2205
|
"page": {
|
|
1796
2206
|
"type": "string",
|
|
2207
|
+
"enum": [
|
|
2208
|
+
"home",
|
|
2209
|
+
"perps",
|
|
2210
|
+
"perps_home",
|
|
2211
|
+
"market",
|
|
2212
|
+
"market_details",
|
|
2213
|
+
"trade",
|
|
2214
|
+
"order"
|
|
2215
|
+
],
|
|
1797
2216
|
"description": "Initial Perps page target; omit it to use the profile or market default. Extension start_state always enters Perps before convergence."
|
|
1798
2217
|
},
|
|
1799
2218
|
"positions": {
|
|
1800
|
-
"
|
|
1801
|
-
|
|
1802
|
-
|
|
2219
|
+
"type": [
|
|
2220
|
+
"object",
|
|
2221
|
+
"boolean"
|
|
2222
|
+
],
|
|
2223
|
+
"properties": {
|
|
2224
|
+
"mode": {
|
|
2225
|
+
"type": "string",
|
|
2226
|
+
"enum": [
|
|
2227
|
+
"matching",
|
|
2228
|
+
"all"
|
|
2229
|
+
]
|
|
1803
2230
|
},
|
|
1804
|
-
{
|
|
1805
|
-
"
|
|
2231
|
+
"market": {
|
|
2232
|
+
"type": "string"
|
|
2233
|
+
},
|
|
2234
|
+
"symbol": {
|
|
2235
|
+
"type": "string"
|
|
2236
|
+
},
|
|
2237
|
+
"markets": {
|
|
2238
|
+
"type": "array",
|
|
2239
|
+
"items": {
|
|
2240
|
+
"type": "string"
|
|
2241
|
+
}
|
|
2242
|
+
},
|
|
2243
|
+
"symbols": {
|
|
2244
|
+
"type": "array",
|
|
2245
|
+
"items": {
|
|
2246
|
+
"type": "string"
|
|
2247
|
+
}
|
|
2248
|
+
},
|
|
2249
|
+
"side": {
|
|
2250
|
+
"type": "string",
|
|
2251
|
+
"enum": [
|
|
2252
|
+
"long",
|
|
2253
|
+
"short"
|
|
2254
|
+
]
|
|
2255
|
+
},
|
|
2256
|
+
"state": {
|
|
2257
|
+
"type": "string",
|
|
2258
|
+
"enum": [
|
|
2259
|
+
"none",
|
|
2260
|
+
"closed",
|
|
2261
|
+
"absent",
|
|
2262
|
+
"open",
|
|
2263
|
+
"present"
|
|
2264
|
+
]
|
|
2265
|
+
},
|
|
2266
|
+
"amount": {
|
|
2267
|
+
"type": [
|
|
2268
|
+
"string",
|
|
2269
|
+
"number"
|
|
2270
|
+
]
|
|
2271
|
+
},
|
|
2272
|
+
"notional": {
|
|
2273
|
+
"type": [
|
|
2274
|
+
"string",
|
|
2275
|
+
"number"
|
|
2276
|
+
]
|
|
2277
|
+
},
|
|
2278
|
+
"size": {
|
|
2279
|
+
"type": [
|
|
2280
|
+
"string",
|
|
2281
|
+
"number"
|
|
2282
|
+
]
|
|
2283
|
+
},
|
|
2284
|
+
"leverage": {
|
|
2285
|
+
"type": "number"
|
|
2286
|
+
},
|
|
2287
|
+
"order_type": {
|
|
2288
|
+
"type": "string"
|
|
2289
|
+
},
|
|
2290
|
+
"orderType": {
|
|
2291
|
+
"type": "string"
|
|
2292
|
+
},
|
|
2293
|
+
"limit_price": {
|
|
2294
|
+
"type": "number"
|
|
2295
|
+
},
|
|
2296
|
+
"limitPrice": {
|
|
2297
|
+
"type": "number"
|
|
2298
|
+
},
|
|
2299
|
+
"offset_pct": {
|
|
2300
|
+
"type": "number"
|
|
2301
|
+
},
|
|
2302
|
+
"offsetPct": {
|
|
2303
|
+
"type": "number"
|
|
2304
|
+
},
|
|
2305
|
+
"current_price": {
|
|
2306
|
+
"type": "number"
|
|
2307
|
+
},
|
|
2308
|
+
"currentPrice": {
|
|
2309
|
+
"type": "number"
|
|
2310
|
+
},
|
|
2311
|
+
"max_slippage_bps": {
|
|
2312
|
+
"type": "number"
|
|
2313
|
+
},
|
|
2314
|
+
"maxSlippageBps": {
|
|
2315
|
+
"type": "number"
|
|
2316
|
+
},
|
|
2317
|
+
"close_attempts": {
|
|
2318
|
+
"type": "integer"
|
|
2319
|
+
},
|
|
2320
|
+
"close_retry_delay_ms": {
|
|
2321
|
+
"type": "integer"
|
|
2322
|
+
},
|
|
2323
|
+
"timeout_ms": {
|
|
2324
|
+
"type": "number"
|
|
1806
2325
|
}
|
|
1807
|
-
|
|
1808
|
-
"
|
|
2326
|
+
},
|
|
2327
|
+
"additionalProperties": false
|
|
1809
2328
|
},
|
|
1810
2329
|
"orders": {
|
|
1811
|
-
"
|
|
1812
|
-
|
|
1813
|
-
|
|
2330
|
+
"type": [
|
|
2331
|
+
"object",
|
|
2332
|
+
"boolean"
|
|
2333
|
+
],
|
|
2334
|
+
"properties": {
|
|
2335
|
+
"mode": {
|
|
2336
|
+
"type": "string",
|
|
2337
|
+
"enum": [
|
|
2338
|
+
"matching",
|
|
2339
|
+
"all"
|
|
2340
|
+
]
|
|
1814
2341
|
},
|
|
1815
|
-
{
|
|
1816
|
-
"
|
|
2342
|
+
"market": {
|
|
2343
|
+
"type": "string"
|
|
2344
|
+
},
|
|
2345
|
+
"symbol": {
|
|
2346
|
+
"type": "string"
|
|
2347
|
+
},
|
|
2348
|
+
"markets": {
|
|
2349
|
+
"type": "array",
|
|
2350
|
+
"items": {
|
|
2351
|
+
"type": "string"
|
|
2352
|
+
}
|
|
2353
|
+
},
|
|
2354
|
+
"symbols": {
|
|
2355
|
+
"type": "array",
|
|
2356
|
+
"items": {
|
|
2357
|
+
"type": "string"
|
|
2358
|
+
}
|
|
2359
|
+
},
|
|
2360
|
+
"side": {
|
|
2361
|
+
"type": "string",
|
|
2362
|
+
"enum": [
|
|
2363
|
+
"long",
|
|
2364
|
+
"short"
|
|
2365
|
+
]
|
|
2366
|
+
},
|
|
2367
|
+
"state": {
|
|
2368
|
+
"type": "string",
|
|
2369
|
+
"enum": [
|
|
2370
|
+
"none",
|
|
2371
|
+
"closed",
|
|
2372
|
+
"absent",
|
|
2373
|
+
"open",
|
|
2374
|
+
"present"
|
|
2375
|
+
]
|
|
2376
|
+
},
|
|
2377
|
+
"amount": {
|
|
2378
|
+
"type": [
|
|
2379
|
+
"string",
|
|
2380
|
+
"number"
|
|
2381
|
+
]
|
|
2382
|
+
},
|
|
2383
|
+
"notional": {
|
|
2384
|
+
"type": [
|
|
2385
|
+
"string",
|
|
2386
|
+
"number"
|
|
2387
|
+
]
|
|
2388
|
+
},
|
|
2389
|
+
"size": {
|
|
2390
|
+
"type": [
|
|
2391
|
+
"string",
|
|
2392
|
+
"number"
|
|
2393
|
+
]
|
|
2394
|
+
},
|
|
2395
|
+
"leverage": {
|
|
2396
|
+
"type": "number"
|
|
2397
|
+
},
|
|
2398
|
+
"order_type": {
|
|
2399
|
+
"type": "string"
|
|
2400
|
+
},
|
|
2401
|
+
"orderType": {
|
|
2402
|
+
"type": "string"
|
|
2403
|
+
},
|
|
2404
|
+
"limit_price": {
|
|
2405
|
+
"type": "number"
|
|
2406
|
+
},
|
|
2407
|
+
"limitPrice": {
|
|
2408
|
+
"type": "number"
|
|
2409
|
+
},
|
|
2410
|
+
"offset_pct": {
|
|
2411
|
+
"type": "number"
|
|
2412
|
+
},
|
|
2413
|
+
"offsetPct": {
|
|
2414
|
+
"type": "number"
|
|
2415
|
+
},
|
|
2416
|
+
"current_price": {
|
|
2417
|
+
"type": "number"
|
|
2418
|
+
},
|
|
2419
|
+
"currentPrice": {
|
|
2420
|
+
"type": "number"
|
|
2421
|
+
},
|
|
2422
|
+
"max_slippage_bps": {
|
|
2423
|
+
"type": "number"
|
|
2424
|
+
},
|
|
2425
|
+
"maxSlippageBps": {
|
|
2426
|
+
"type": "number"
|
|
2427
|
+
},
|
|
2428
|
+
"close_attempts": {
|
|
2429
|
+
"type": "integer"
|
|
2430
|
+
},
|
|
2431
|
+
"close_retry_delay_ms": {
|
|
2432
|
+
"type": "integer"
|
|
2433
|
+
},
|
|
2434
|
+
"timeout_ms": {
|
|
2435
|
+
"type": "number"
|
|
1817
2436
|
}
|
|
1818
|
-
|
|
1819
|
-
"
|
|
2437
|
+
},
|
|
2438
|
+
"additionalProperties": false
|
|
1820
2439
|
},
|
|
1821
2440
|
"hud": {
|
|
1822
|
-
"type": "object"
|
|
2441
|
+
"type": "object",
|
|
2442
|
+
"properties": {},
|
|
2443
|
+
"additionalProperties": false
|
|
1823
2444
|
},
|
|
1824
2445
|
"timeout_ms": {
|
|
1825
2446
|
"type": "number"
|
|
2447
|
+
},
|
|
2448
|
+
"side": {
|
|
2449
|
+
"type": "string",
|
|
2450
|
+
"enum": [
|
|
2451
|
+
"long",
|
|
2452
|
+
"short"
|
|
2453
|
+
]
|
|
2454
|
+
},
|
|
2455
|
+
"account_name": {
|
|
2456
|
+
"type": "string"
|
|
2457
|
+
},
|
|
2458
|
+
"readyToTrade": {
|
|
2459
|
+
"type": "boolean"
|
|
2460
|
+
},
|
|
2461
|
+
"balance": {
|
|
2462
|
+
"type": "object",
|
|
2463
|
+
"properties": {
|
|
2464
|
+
"minWithdrawableUsd": {
|
|
2465
|
+
"type": "number"
|
|
2466
|
+
},
|
|
2467
|
+
"minUsd": {
|
|
2468
|
+
"type": "number"
|
|
2469
|
+
},
|
|
2470
|
+
"minSpendableUsd": {
|
|
2471
|
+
"type": "number"
|
|
2472
|
+
}
|
|
2473
|
+
},
|
|
2474
|
+
"additionalProperties": false
|
|
2475
|
+
},
|
|
2476
|
+
"mode": {
|
|
2477
|
+
"type": "string",
|
|
2478
|
+
"enum": [
|
|
2479
|
+
"matching",
|
|
2480
|
+
"all"
|
|
2481
|
+
]
|
|
1826
2482
|
}
|
|
1827
2483
|
},
|
|
1828
|
-
"
|
|
1829
|
-
"action"
|
|
1830
|
-
]
|
|
2484
|
+
"additionalProperties": false
|
|
1831
2485
|
},
|
|
1832
2486
|
"examples": [
|
|
1833
2487
|
{
|
|
@@ -1864,7 +2518,11 @@
|
|
|
1864
2518
|
}
|
|
1865
2519
|
],
|
|
1866
2520
|
"proof_effect": "Runs in setup/teardown phase and must be visible in trace.json; proof videos can keep this as trace-only setup.",
|
|
1867
|
-
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof."
|
|
2521
|
+
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof.",
|
|
2522
|
+
"execution_capabilities": [
|
|
2523
|
+
"app-mutation",
|
|
2524
|
+
"external-mutation"
|
|
2525
|
+
]
|
|
1868
2526
|
},
|
|
1869
2527
|
{
|
|
1870
2528
|
"name": "metamask.perps.teardown_state",
|
|
@@ -1873,9 +2531,6 @@
|
|
|
1873
2531
|
"schema": {
|
|
1874
2532
|
"type": "object",
|
|
1875
2533
|
"properties": {
|
|
1876
|
-
"action": {
|
|
1877
|
-
"const": "metamask.perps.teardown_state"
|
|
1878
|
-
},
|
|
1879
2534
|
"profile": {
|
|
1880
2535
|
"type": "string",
|
|
1881
2536
|
"description": "Optional profile such as clean_market_testnet, open_position_testnet, open_order_testnet, or provider_mainnet_readonly."
|
|
@@ -1913,48 +2568,289 @@
|
|
|
1913
2568
|
}
|
|
1914
2569
|
},
|
|
1915
2570
|
"page": {
|
|
1916
|
-
"
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
{
|
|
1921
|
-
"const": false
|
|
1922
|
-
}
|
|
2571
|
+
"description": "Final page target; false skips navigation for teardown.",
|
|
2572
|
+
"type": [
|
|
2573
|
+
"string",
|
|
2574
|
+
"boolean"
|
|
1923
2575
|
],
|
|
1924
|
-
"
|
|
2576
|
+
"enum": [
|
|
2577
|
+
"home",
|
|
2578
|
+
"perps",
|
|
2579
|
+
"perps_home",
|
|
2580
|
+
"market",
|
|
2581
|
+
"market_details",
|
|
2582
|
+
"trade",
|
|
2583
|
+
"order",
|
|
2584
|
+
false
|
|
2585
|
+
]
|
|
1925
2586
|
},
|
|
1926
2587
|
"positions": {
|
|
1927
|
-
"
|
|
1928
|
-
|
|
1929
|
-
|
|
2588
|
+
"type": [
|
|
2589
|
+
"object",
|
|
2590
|
+
"boolean"
|
|
2591
|
+
],
|
|
2592
|
+
"properties": {
|
|
2593
|
+
"mode": {
|
|
2594
|
+
"type": "string",
|
|
2595
|
+
"enum": [
|
|
2596
|
+
"matching",
|
|
2597
|
+
"all"
|
|
2598
|
+
]
|
|
1930
2599
|
},
|
|
1931
|
-
{
|
|
1932
|
-
"
|
|
2600
|
+
"market": {
|
|
2601
|
+
"type": "string"
|
|
2602
|
+
},
|
|
2603
|
+
"symbol": {
|
|
2604
|
+
"type": "string"
|
|
2605
|
+
},
|
|
2606
|
+
"markets": {
|
|
2607
|
+
"type": "array",
|
|
2608
|
+
"items": {
|
|
2609
|
+
"type": "string"
|
|
2610
|
+
}
|
|
2611
|
+
},
|
|
2612
|
+
"symbols": {
|
|
2613
|
+
"type": "array",
|
|
2614
|
+
"items": {
|
|
2615
|
+
"type": "string"
|
|
2616
|
+
}
|
|
2617
|
+
},
|
|
2618
|
+
"side": {
|
|
2619
|
+
"type": "string",
|
|
2620
|
+
"enum": [
|
|
2621
|
+
"long",
|
|
2622
|
+
"short"
|
|
2623
|
+
]
|
|
2624
|
+
},
|
|
2625
|
+
"state": {
|
|
2626
|
+
"type": "string",
|
|
2627
|
+
"enum": [
|
|
2628
|
+
"none",
|
|
2629
|
+
"closed",
|
|
2630
|
+
"absent",
|
|
2631
|
+
"open",
|
|
2632
|
+
"present"
|
|
2633
|
+
]
|
|
2634
|
+
},
|
|
2635
|
+
"amount": {
|
|
2636
|
+
"type": [
|
|
2637
|
+
"string",
|
|
2638
|
+
"number"
|
|
2639
|
+
]
|
|
2640
|
+
},
|
|
2641
|
+
"notional": {
|
|
2642
|
+
"type": [
|
|
2643
|
+
"string",
|
|
2644
|
+
"number"
|
|
2645
|
+
]
|
|
2646
|
+
},
|
|
2647
|
+
"size": {
|
|
2648
|
+
"type": [
|
|
2649
|
+
"string",
|
|
2650
|
+
"number"
|
|
2651
|
+
]
|
|
2652
|
+
},
|
|
2653
|
+
"leverage": {
|
|
2654
|
+
"type": "number"
|
|
2655
|
+
},
|
|
2656
|
+
"order_type": {
|
|
2657
|
+
"type": "string"
|
|
2658
|
+
},
|
|
2659
|
+
"orderType": {
|
|
2660
|
+
"type": "string"
|
|
2661
|
+
},
|
|
2662
|
+
"limit_price": {
|
|
2663
|
+
"type": "number"
|
|
2664
|
+
},
|
|
2665
|
+
"limitPrice": {
|
|
2666
|
+
"type": "number"
|
|
2667
|
+
},
|
|
2668
|
+
"offset_pct": {
|
|
2669
|
+
"type": "number"
|
|
2670
|
+
},
|
|
2671
|
+
"offsetPct": {
|
|
2672
|
+
"type": "number"
|
|
2673
|
+
},
|
|
2674
|
+
"current_price": {
|
|
2675
|
+
"type": "number"
|
|
2676
|
+
},
|
|
2677
|
+
"currentPrice": {
|
|
2678
|
+
"type": "number"
|
|
2679
|
+
},
|
|
2680
|
+
"max_slippage_bps": {
|
|
2681
|
+
"type": "number"
|
|
2682
|
+
},
|
|
2683
|
+
"maxSlippageBps": {
|
|
2684
|
+
"type": "number"
|
|
2685
|
+
},
|
|
2686
|
+
"close_attempts": {
|
|
2687
|
+
"type": "integer"
|
|
2688
|
+
},
|
|
2689
|
+
"close_retry_delay_ms": {
|
|
2690
|
+
"type": "integer"
|
|
2691
|
+
},
|
|
2692
|
+
"timeout_ms": {
|
|
2693
|
+
"type": "number"
|
|
1933
2694
|
}
|
|
1934
|
-
|
|
1935
|
-
"
|
|
2695
|
+
},
|
|
2696
|
+
"additionalProperties": false
|
|
1936
2697
|
},
|
|
1937
2698
|
"orders": {
|
|
1938
|
-
"
|
|
1939
|
-
|
|
1940
|
-
|
|
2699
|
+
"type": [
|
|
2700
|
+
"object",
|
|
2701
|
+
"boolean"
|
|
2702
|
+
],
|
|
2703
|
+
"properties": {
|
|
2704
|
+
"mode": {
|
|
2705
|
+
"type": "string",
|
|
2706
|
+
"enum": [
|
|
2707
|
+
"matching",
|
|
2708
|
+
"all"
|
|
2709
|
+
]
|
|
1941
2710
|
},
|
|
1942
|
-
{
|
|
1943
|
-
"
|
|
2711
|
+
"market": {
|
|
2712
|
+
"type": "string"
|
|
2713
|
+
},
|
|
2714
|
+
"symbol": {
|
|
2715
|
+
"type": "string"
|
|
2716
|
+
},
|
|
2717
|
+
"markets": {
|
|
2718
|
+
"type": "array",
|
|
2719
|
+
"items": {
|
|
2720
|
+
"type": "string"
|
|
2721
|
+
}
|
|
2722
|
+
},
|
|
2723
|
+
"symbols": {
|
|
2724
|
+
"type": "array",
|
|
2725
|
+
"items": {
|
|
2726
|
+
"type": "string"
|
|
2727
|
+
}
|
|
2728
|
+
},
|
|
2729
|
+
"side": {
|
|
2730
|
+
"type": "string",
|
|
2731
|
+
"enum": [
|
|
2732
|
+
"long",
|
|
2733
|
+
"short"
|
|
2734
|
+
]
|
|
2735
|
+
},
|
|
2736
|
+
"state": {
|
|
2737
|
+
"type": "string",
|
|
2738
|
+
"enum": [
|
|
2739
|
+
"none",
|
|
2740
|
+
"closed",
|
|
2741
|
+
"absent",
|
|
2742
|
+
"open",
|
|
2743
|
+
"present"
|
|
2744
|
+
]
|
|
2745
|
+
},
|
|
2746
|
+
"amount": {
|
|
2747
|
+
"type": [
|
|
2748
|
+
"string",
|
|
2749
|
+
"number"
|
|
2750
|
+
]
|
|
2751
|
+
},
|
|
2752
|
+
"notional": {
|
|
2753
|
+
"type": [
|
|
2754
|
+
"string",
|
|
2755
|
+
"number"
|
|
2756
|
+
]
|
|
2757
|
+
},
|
|
2758
|
+
"size": {
|
|
2759
|
+
"type": [
|
|
2760
|
+
"string",
|
|
2761
|
+
"number"
|
|
2762
|
+
]
|
|
2763
|
+
},
|
|
2764
|
+
"leverage": {
|
|
2765
|
+
"type": "number"
|
|
2766
|
+
},
|
|
2767
|
+
"order_type": {
|
|
2768
|
+
"type": "string"
|
|
2769
|
+
},
|
|
2770
|
+
"orderType": {
|
|
2771
|
+
"type": "string"
|
|
2772
|
+
},
|
|
2773
|
+
"limit_price": {
|
|
2774
|
+
"type": "number"
|
|
2775
|
+
},
|
|
2776
|
+
"limitPrice": {
|
|
2777
|
+
"type": "number"
|
|
2778
|
+
},
|
|
2779
|
+
"offset_pct": {
|
|
2780
|
+
"type": "number"
|
|
2781
|
+
},
|
|
2782
|
+
"offsetPct": {
|
|
2783
|
+
"type": "number"
|
|
2784
|
+
},
|
|
2785
|
+
"current_price": {
|
|
2786
|
+
"type": "number"
|
|
2787
|
+
},
|
|
2788
|
+
"currentPrice": {
|
|
2789
|
+
"type": "number"
|
|
2790
|
+
},
|
|
2791
|
+
"max_slippage_bps": {
|
|
2792
|
+
"type": "number"
|
|
2793
|
+
},
|
|
2794
|
+
"maxSlippageBps": {
|
|
2795
|
+
"type": "number"
|
|
2796
|
+
},
|
|
2797
|
+
"close_attempts": {
|
|
2798
|
+
"type": "integer"
|
|
2799
|
+
},
|
|
2800
|
+
"close_retry_delay_ms": {
|
|
2801
|
+
"type": "integer"
|
|
2802
|
+
},
|
|
2803
|
+
"timeout_ms": {
|
|
2804
|
+
"type": "number"
|
|
1944
2805
|
}
|
|
1945
|
-
|
|
1946
|
-
"
|
|
2806
|
+
},
|
|
2807
|
+
"additionalProperties": false
|
|
1947
2808
|
},
|
|
1948
2809
|
"hud": {
|
|
1949
|
-
"type": "object"
|
|
2810
|
+
"type": "object",
|
|
2811
|
+
"properties": {},
|
|
2812
|
+
"additionalProperties": false
|
|
1950
2813
|
},
|
|
1951
2814
|
"timeout_ms": {
|
|
1952
2815
|
"type": "number"
|
|
2816
|
+
},
|
|
2817
|
+
"side": {
|
|
2818
|
+
"type": "string",
|
|
2819
|
+
"enum": [
|
|
2820
|
+
"long",
|
|
2821
|
+
"short"
|
|
2822
|
+
]
|
|
2823
|
+
},
|
|
2824
|
+
"account_name": {
|
|
2825
|
+
"type": "string"
|
|
2826
|
+
},
|
|
2827
|
+
"readyToTrade": {
|
|
2828
|
+
"type": "boolean"
|
|
2829
|
+
},
|
|
2830
|
+
"balance": {
|
|
2831
|
+
"type": "object",
|
|
2832
|
+
"properties": {
|
|
2833
|
+
"minWithdrawableUsd": {
|
|
2834
|
+
"type": "number"
|
|
2835
|
+
},
|
|
2836
|
+
"minUsd": {
|
|
2837
|
+
"type": "number"
|
|
2838
|
+
},
|
|
2839
|
+
"minSpendableUsd": {
|
|
2840
|
+
"type": "number"
|
|
2841
|
+
}
|
|
2842
|
+
},
|
|
2843
|
+
"additionalProperties": false
|
|
2844
|
+
},
|
|
2845
|
+
"mode": {
|
|
2846
|
+
"type": "string",
|
|
2847
|
+
"enum": [
|
|
2848
|
+
"matching",
|
|
2849
|
+
"all"
|
|
2850
|
+
]
|
|
1953
2851
|
}
|
|
1954
2852
|
},
|
|
1955
|
-
"
|
|
1956
|
-
"action"
|
|
1957
|
-
]
|
|
2853
|
+
"additionalProperties": false
|
|
1958
2854
|
},
|
|
1959
2855
|
"examples": [
|
|
1960
2856
|
{
|
|
@@ -1982,23 +2878,11 @@
|
|
|
1982
2878
|
}
|
|
1983
2879
|
],
|
|
1984
2880
|
"proof_effect": "Runs in setup/teardown phase and must be visible in trace.json; proof videos can keep this as trace-only setup.",
|
|
1985
|
-
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof."
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
"name": "wallet.redacted_state",
|
|
1991
|
-
"description": "Redacted wallet state reported by metamask.wallet.read_state."
|
|
1992
|
-
},
|
|
1993
|
-
{
|
|
1994
|
-
"name": "perps.positions",
|
|
1995
|
-
"description": "Normalized Perps position state."
|
|
1996
|
-
}
|
|
1997
|
-
],
|
|
1998
|
-
"pre_conditions": [
|
|
1999
|
-
{
|
|
2000
|
-
"id": "no-mid-recipe-state-injection",
|
|
2001
|
-
"description": "Recipes must drive real supported UI/app/API paths for proof state."
|
|
2881
|
+
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof.",
|
|
2882
|
+
"execution_capabilities": [
|
|
2883
|
+
"app-mutation",
|
|
2884
|
+
"external-mutation"
|
|
2885
|
+
]
|
|
2002
2886
|
}
|
|
2003
2887
|
],
|
|
2004
2888
|
"native_bindings": [
|
|
@@ -2146,9 +3030,5 @@
|
|
|
2146
3030
|
"action": "metamask.perps.teardown_state",
|
|
2147
3031
|
"implementation": "@metamask/recipe-runner/extension/perps-domain-dispatcher"
|
|
2148
3032
|
}
|
|
2149
|
-
]
|
|
2150
|
-
"capability_notes": [
|
|
2151
|
-
"Perps safety: default to testnet for setup and order/position mutations. Mainnet is read-only unless the user explicitly requests a mainnet mutation."
|
|
2152
|
-
],
|
|
2153
|
-
"action_profiles": []
|
|
3033
|
+
]
|
|
2154
3034
|
}
|