@deeeed/metamask-harness 0.17.5 → 0.19.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 +1059 -0
- package/README.md +91 -140
- package/adapters/core/inject.sh +1 -6
- package/adapters/extension/console-tail.mjs +55 -24
- package/adapters/extension/ensure-browser.sh +6 -1
- package/adapters/extension/inject.mjs +7 -13
- package/adapters/extension/launch-browser.cjs +7 -1
- package/adapters/extension/launch-webpack.cjs +83 -0
- package/adapters/extension/launch.sh +8 -11
- package/adapters/extension/lib/chrome-args.cjs +8 -1
- package/adapters/extension/lib/macos-focus.cjs +32 -0
- package/adapters/extension/live.sh +12 -21
- package/adapters/extension/reattach.sh +1 -0
- package/adapters/extension/seed-fixture.sh +4 -12
- package/adapters/extension/sidepanel-toggle.sh +4 -1
- package/adapters/extension/stamp-runtime-title.cjs +58 -0
- package/adapters/extension/start-watch.sh +17 -4
- package/adapters/extension/stop-viewers.sh +1 -1
- package/adapters/extension/sync-webpack-dist.cjs +107 -0
- package/adapters/extension/verify.sh +2 -2
- package/adapters/manifest.json +53 -37
- package/adapters/mobile/bridge-runtime/cdp-bridge.cjs +16 -0
- package/adapters/mobile/bridge-runtime/console-forwarder.cjs +1 -1
- package/adapters/mobile/bridge-runtime/lib/match-bridge-target.cjs +3 -1
- package/adapters/mobile/bridge-runtime/lib/target-discovery.cjs +2 -3
- package/adapters/mobile/cleanup.sh +16 -176
- package/adapters/mobile/inject.sh +91 -671
- package/adapters/mobile/launch-console-forwarder.cjs +39 -0
- package/adapters/mobile/open-device.sh +45 -7
- package/adapters/mobile/start-console-forwarder.sh +70 -0
- package/adapters/mobile/start-metro.sh +0 -41
- package/adapters/mobile/verify.sh +34 -83
- package/adapters/mobile/wait-for-bridge.sh +22 -8
- package/adapters/shared/harness-source-fingerprint.mjs +14 -12
- package/adapters/shared/resolve-slot-ports-core.mjs +17 -6
- package/adapters/shared/resolve-slot-ports.sh +17 -5
- package/adapters/shared/update-check-worker.mjs +43 -0
- package/bin/mm-harness +21 -2
- package/dist/adapters/core/surface.js +4 -1
- package/dist/adapters/extension/console-capture.js +95 -0
- package/dist/adapters/extension/product-config.js +110 -0
- package/dist/adapters/extension/runtime-decision.js +20 -2
- package/dist/adapters/extension/surface.js +22 -3
- package/dist/adapters/harness-freshness.js +49 -0
- package/dist/adapters/mobile/perps-env.js +43 -3
- package/dist/adapters/mobile/prepare.js +39 -7
- package/dist/adapters/mobile/surface.js +5 -2
- package/dist/adapters/resolve-slot-ports.js +2 -2
- package/dist/adapters/slot-ports.js +13 -16
- package/dist/adapters.js +56 -16
- package/dist/checkout-lock.js +27 -2
- package/dist/cli-color.js +19 -0
- package/dist/cli-commands.js +1 -1
- package/dist/cli.js +7 -18
- package/dist/command-contract.js +462 -0
- package/dist/command-journal.js +263 -0
- package/dist/commands/call.js +252 -57
- package/dist/commands/check.js +10 -4
- package/dist/commands/completion-candidates.js +17 -22
- package/dist/commands/device-target.js +27 -12
- package/dist/commands/doctor.js +106 -25
- package/dist/commands/fixtures.js +142 -35
- package/dist/commands/last.js +60 -0
- package/dist/commands/launch/extension.js +40 -17
- package/dist/commands/launch/index.js +207 -63
- package/dist/commands/launch/mobile.js +2 -0
- package/dist/commands/list-executables.js +187 -29
- package/dist/commands/logs.js +8 -6
- package/dist/commands/manifest.js +286 -35
- package/dist/commands/parse-args.js +68 -4
- package/dist/commands/provision.js +10 -4
- package/dist/commands/run-engine.js +772 -264
- package/dist/commands/run-report.js +12 -3
- package/dist/commands/run.js +378 -85
- package/dist/commands/shared.js +76 -4
- package/dist/commands/status-probe.js +4 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/stop.js +7 -2
- package/dist/commands/update.js +16 -28
- package/dist/completions-cache.js +1 -1
- package/dist/doctor.js +57 -10
- package/dist/harness.js +47 -137
- package/dist/heal-bounds.js +7 -2
- package/dist/json-stream.js +57 -0
- package/dist/live-adapter-contract.js +138 -32
- package/dist/manifest.js +161 -1
- package/dist/mm-harness-cli.js +146 -73
- package/dist/paths.js +2 -5
- package/dist/recipe-security.js +178 -0
- package/dist/run-diagnostics.js +261 -0
- package/dist/run-recording.js +1 -1
- package/dist/runner.js +140 -9
- package/docs/CONTRIBUTING.md +136 -0
- package/docs/QA.md +184 -0
- package/docs/RECIPES.md +122 -0
- package/docs/SECURITY.md +88 -0
- package/library/README.md +7 -3
- package/library/actions/core/perps/_controller.mjs +43 -56
- package/library/actions/core/perps/assert_orders.mjs +6 -7
- package/library/actions/core/perps/assert_positions.mjs +6 -7
- 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/core/perps/read_account.mjs +2 -2
- package/library/actions/core/perps/read_orders.mjs +2 -1
- package/library/actions/core/perps/read_positions.mjs +2 -1
- package/library/actions/core/wallet/list_accounts.mjs +95 -0
- 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 +43 -14
- package/library/actions/extension/platform/cdp.mjs +1 -0
- package/library/actions/extension/wallet/list_accounts.mjs +41 -0
- 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 +40 -12
- package/library/actions/mobile/wallet/list_accounts.mjs +37 -0
- package/library/library.json +1 -1
- package/library/manifests/core.action-manifest.json +1214 -396
- package/library/manifests/extension.action-manifest.json +1635 -728
- package/library/manifests/mobile.action-manifest.json +1740 -727
- 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 -398
- package/library/recipes/runner/action-validation.mobile.recipe.json +316 -402
- package/library/recipes/runner/smoke.core.recipe.json +25 -0
- 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 +40 -0
- package/library/recipes/wallet/smoke.mobile.recipe.json +40 -0
- package/package.json +12 -5
- package/scripts/completions.sh +8 -11
- package/scripts/validate-human-outcomes.mjs +169 -0
- package/adapters/mobile/overlay/app/dev-tools/AgenticService/AgentStepHud.tsx.patch +0 -185
- package/adapters/mobile/overlay/app/dev-tools/AgenticService/AgenticService.ts.patch +0 -1662
- package/adapters/mobile/overlay/compat/README.md +0 -28
- package/adapters/mobile/overlay/compat/rn81-message-event-source.patch +0 -42
- package/adapters/shared/resolve-farmslot-ports-core.mjs +0 -3
- package/adapters/shared/resolve-farmslot-ports.mjs +0 -5
- package/adapters/shared/resolve-farmslot-ports.sh +0 -7
- package/dist/adapters/extension/harness-freshness.js +0 -39
- package/dist/commands/flows.js +0 -62
- package/docs/ADAPTER-SURFACE.md +0 -119
- package/docs/CHEATSHEET.md +0 -61
- package/docs/CLI-SPEC.md +0 -1098
- package/docs/CODE-MAP.md +0 -62
- package/docs/DEBUG-HANDOVER.md +0 -36
- package/docs/MENTAL-MODEL.md +0 -295
- package/docs/UX-PRINCIPLES.md +0 -64
- package/docs/architecture.md +0 -398
- package/docs/live-adapter-contract.md +0 -188
- package/docs/package-boundaries.md +0 -47
- package/docs/perps-flow-catalog.md +0 -235
- package/docs/recipe-libraries.md +0 -301
- package/docs/runtime-file-conventions.md +0 -36
- 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",
|
|
@@ -35,7 +36,28 @@
|
|
|
35
36
|
"intent": "Run a shell command from the project root"
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
|
-
]
|
|
39
|
+
],
|
|
40
|
+
"schema": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"properties": {
|
|
43
|
+
"cmd": {
|
|
44
|
+
"type": "string"
|
|
45
|
+
},
|
|
46
|
+
"command": {
|
|
47
|
+
"type": "string"
|
|
48
|
+
},
|
|
49
|
+
"cwd": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
},
|
|
52
|
+
"timeout_ms": {
|
|
53
|
+
"type": "number"
|
|
54
|
+
},
|
|
55
|
+
"allow_failure": {
|
|
56
|
+
"type": "boolean"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"additionalProperties": false
|
|
60
|
+
}
|
|
39
61
|
},
|
|
40
62
|
"wait": {
|
|
41
63
|
"description": "Base wait action.",
|
|
@@ -47,7 +69,44 @@
|
|
|
47
69
|
"intent": "Base wait action"
|
|
48
70
|
}
|
|
49
71
|
}
|
|
50
|
-
]
|
|
72
|
+
],
|
|
73
|
+
"schema": {
|
|
74
|
+
"type": "object",
|
|
75
|
+
"properties": {
|
|
76
|
+
"duration_ms": {
|
|
77
|
+
"type": "integer"
|
|
78
|
+
},
|
|
79
|
+
"ms": {
|
|
80
|
+
"type": "integer"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"additionalProperties": false
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"switch": {
|
|
87
|
+
"description": "Choose a graph branch when one resolved string equals another.",
|
|
88
|
+
"examples": [
|
|
89
|
+
{
|
|
90
|
+
"node": {
|
|
91
|
+
"action": "switch",
|
|
92
|
+
"value": "{{params.mode}}",
|
|
93
|
+
"equals": "background_resume",
|
|
94
|
+
"cases": { "match": "background" },
|
|
95
|
+
"default": "warm",
|
|
96
|
+
"intent": "Choose the requested lifecycle preparation path"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"schema": {
|
|
101
|
+
"type": "object",
|
|
102
|
+
"properties": {
|
|
103
|
+
"value": { "type": "string" },
|
|
104
|
+
"equals": { "type": "string" }
|
|
105
|
+
},
|
|
106
|
+
"required": ["value", "equals"],
|
|
107
|
+
"additionalProperties": false
|
|
108
|
+
},
|
|
109
|
+
"result_cases": ["match"]
|
|
51
110
|
},
|
|
52
111
|
"watch_logs": {
|
|
53
112
|
"description": "Base log assertion/capture action.",
|
|
@@ -59,7 +118,29 @@
|
|
|
59
118
|
"intent": "Base log assertion/capture action"
|
|
60
119
|
}
|
|
61
120
|
}
|
|
62
|
-
]
|
|
121
|
+
],
|
|
122
|
+
"schema": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"properties": {
|
|
125
|
+
"path": {
|
|
126
|
+
"type": "string"
|
|
127
|
+
},
|
|
128
|
+
"contains": {
|
|
129
|
+
"type": "string"
|
|
130
|
+
},
|
|
131
|
+
"scope": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"enum": [
|
|
134
|
+
"run",
|
|
135
|
+
"file"
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"required": [
|
|
140
|
+
"path"
|
|
141
|
+
],
|
|
142
|
+
"additionalProperties": false
|
|
143
|
+
}
|
|
63
144
|
},
|
|
64
145
|
"index_artifacts": {
|
|
65
146
|
"description": "Index extra recipe-authored artifacts that already exist on disk. Do not use after ui.screenshot; screenshots are registered by the runner.",
|
|
@@ -78,7 +159,55 @@
|
|
|
78
159
|
"intent": "Register a pre-existing report artifact"
|
|
79
160
|
}
|
|
80
161
|
}
|
|
81
|
-
]
|
|
162
|
+
],
|
|
163
|
+
"schema": {
|
|
164
|
+
"type": "object",
|
|
165
|
+
"properties": {
|
|
166
|
+
"artifacts": {
|
|
167
|
+
"type": "array",
|
|
168
|
+
"items": {
|
|
169
|
+
"type": [
|
|
170
|
+
"string",
|
|
171
|
+
"object"
|
|
172
|
+
],
|
|
173
|
+
"properties": {
|
|
174
|
+
"path": {
|
|
175
|
+
"type": "string"
|
|
176
|
+
},
|
|
177
|
+
"type": {
|
|
178
|
+
"type": "string"
|
|
179
|
+
},
|
|
180
|
+
"label": {
|
|
181
|
+
"type": "string"
|
|
182
|
+
},
|
|
183
|
+
"nodeId": {
|
|
184
|
+
"type": "string"
|
|
185
|
+
},
|
|
186
|
+
"mimeType": {
|
|
187
|
+
"type": "string"
|
|
188
|
+
},
|
|
189
|
+
"category": {
|
|
190
|
+
"type": "string"
|
|
191
|
+
},
|
|
192
|
+
"proofTarget": {
|
|
193
|
+
"type": "string"
|
|
194
|
+
},
|
|
195
|
+
"covers": {
|
|
196
|
+
"type": "array",
|
|
197
|
+
"items": {
|
|
198
|
+
"type": "string"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
"additionalProperties": false
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"required": [
|
|
207
|
+
"artifacts"
|
|
208
|
+
],
|
|
209
|
+
"additionalProperties": false
|
|
210
|
+
}
|
|
82
211
|
},
|
|
83
212
|
"end": {
|
|
84
213
|
"description": "Base terminal action.",
|
|
@@ -102,30 +231,37 @@
|
|
|
102
231
|
"home",
|
|
103
232
|
"perps",
|
|
104
233
|
"perps-market"
|
|
105
|
-
]
|
|
106
|
-
"description": "Small stable page aliases; use raw route/hash when you need a route outside this list."
|
|
234
|
+
]
|
|
107
235
|
},
|
|
108
236
|
"market": {
|
|
109
|
-
"type": "string"
|
|
110
|
-
"description": "Market symbol for page=perps-market, e.g. ETH."
|
|
237
|
+
"type": "string"
|
|
111
238
|
},
|
|
112
239
|
"symbol": {
|
|
113
|
-
"type": "string"
|
|
114
|
-
|
|
240
|
+
"type": "string"
|
|
241
|
+
},
|
|
242
|
+
"url": {
|
|
243
|
+
"type": "string"
|
|
244
|
+
},
|
|
245
|
+
"hash": {
|
|
246
|
+
"type": "string"
|
|
247
|
+
},
|
|
248
|
+
"path": {
|
|
249
|
+
"type": "string"
|
|
115
250
|
},
|
|
116
251
|
"route": {
|
|
117
|
-
"type": "string"
|
|
118
|
-
"description": "Raw React Navigation route."
|
|
252
|
+
"type": "string"
|
|
119
253
|
},
|
|
120
254
|
"screen": {
|
|
121
|
-
"type": "string"
|
|
122
|
-
"description": "Alias for route."
|
|
255
|
+
"type": "string"
|
|
123
256
|
},
|
|
124
257
|
"params": {
|
|
125
|
-
"type": "object"
|
|
126
|
-
|
|
258
|
+
"type": "object"
|
|
259
|
+
},
|
|
260
|
+
"timeout_ms": {
|
|
261
|
+
"type": "number"
|
|
127
262
|
}
|
|
128
|
-
}
|
|
263
|
+
},
|
|
264
|
+
"additionalProperties": false
|
|
129
265
|
},
|
|
130
266
|
"examples": [
|
|
131
267
|
{
|
|
@@ -156,13 +292,49 @@
|
|
|
156
292
|
]
|
|
157
293
|
},
|
|
158
294
|
"ui.press": {
|
|
159
|
-
"description": "Press
|
|
295
|
+
"description": "Press a React Native component by exact testID/test_id, selector identifier, or contained visible text.",
|
|
296
|
+
"schema": {
|
|
297
|
+
"type": "object",
|
|
298
|
+
"properties": {
|
|
299
|
+
"selector": {
|
|
300
|
+
"type": "string"
|
|
301
|
+
},
|
|
302
|
+
"test_id": {
|
|
303
|
+
"type": "string"
|
|
304
|
+
},
|
|
305
|
+
"testID": {
|
|
306
|
+
"type": "string"
|
|
307
|
+
},
|
|
308
|
+
"text": {
|
|
309
|
+
"type": "string"
|
|
310
|
+
},
|
|
311
|
+
"label": {
|
|
312
|
+
"type": "string"
|
|
313
|
+
},
|
|
314
|
+
"timeout_ms": {
|
|
315
|
+
"type": "number"
|
|
316
|
+
},
|
|
317
|
+
"settle": {
|
|
318
|
+
"type": "boolean"
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
"additionalProperties": false
|
|
322
|
+
},
|
|
160
323
|
"examples": [
|
|
161
324
|
{
|
|
325
|
+
"description": "Press by stable React Native testID",
|
|
326
|
+
"node": {
|
|
327
|
+
"action": "ui.press",
|
|
328
|
+
"test_id": "perps-tab",
|
|
329
|
+
"intent": "Open Perps through its stable testID"
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"description": "Press a component that is reachable only by visible text",
|
|
162
334
|
"node": {
|
|
163
335
|
"action": "ui.press",
|
|
164
|
-
"
|
|
165
|
-
"intent": "Press
|
|
336
|
+
"text": "Ethereum",
|
|
337
|
+
"intent": "Press the component containing the visible Ethereum label"
|
|
166
338
|
}
|
|
167
339
|
}
|
|
168
340
|
]
|
|
@@ -187,23 +359,94 @@
|
|
|
187
359
|
}
|
|
188
360
|
}
|
|
189
361
|
],
|
|
190
|
-
"proof_effect": "E2E validation must include a passing ui-scroll-into-view trace event with output.intoView=true."
|
|
362
|
+
"proof_effect": "E2E validation must include a passing ui-scroll-into-view trace event with output.intoView=true.",
|
|
363
|
+
"schema": {
|
|
364
|
+
"type": "object",
|
|
365
|
+
"properties": {
|
|
366
|
+
"selector": {
|
|
367
|
+
"type": "string"
|
|
368
|
+
},
|
|
369
|
+
"test_id": {
|
|
370
|
+
"type": "string"
|
|
371
|
+
},
|
|
372
|
+
"testID": {
|
|
373
|
+
"type": "string"
|
|
374
|
+
},
|
|
375
|
+
"delta_x": {
|
|
376
|
+
"type": "number"
|
|
377
|
+
},
|
|
378
|
+
"delta_y": {
|
|
379
|
+
"type": "number"
|
|
380
|
+
},
|
|
381
|
+
"deltaX": {
|
|
382
|
+
"type": "number"
|
|
383
|
+
},
|
|
384
|
+
"deltaY": {
|
|
385
|
+
"type": "number"
|
|
386
|
+
},
|
|
387
|
+
"offset": {
|
|
388
|
+
"type": "number"
|
|
389
|
+
},
|
|
390
|
+
"scroll_into_view": {
|
|
391
|
+
"type": "boolean"
|
|
392
|
+
},
|
|
393
|
+
"into_view": {
|
|
394
|
+
"type": "boolean"
|
|
395
|
+
},
|
|
396
|
+
"animated": {
|
|
397
|
+
"type": "boolean"
|
|
398
|
+
},
|
|
399
|
+
"timeout_ms": {
|
|
400
|
+
"type": "number"
|
|
401
|
+
},
|
|
402
|
+
"settle": {
|
|
403
|
+
"type": "boolean"
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
"additionalProperties": false
|
|
407
|
+
}
|
|
191
408
|
},
|
|
192
409
|
"ui.wait_for": {
|
|
193
410
|
"description": "Wait for a mounted React Native testID/test_id. Optional text validates text returned by that testID; text alone is not supported on Mobile.",
|
|
194
411
|
"schema": {
|
|
195
412
|
"type": "object",
|
|
196
413
|
"properties": {
|
|
197
|
-
"
|
|
198
|
-
|
|
199
|
-
|
|
414
|
+
"selector": {
|
|
415
|
+
"type": "string"
|
|
416
|
+
},
|
|
417
|
+
"test_id": {
|
|
418
|
+
"type": "string"
|
|
419
|
+
},
|
|
420
|
+
"testID": {
|
|
421
|
+
"type": "string"
|
|
422
|
+
},
|
|
423
|
+
"text": {
|
|
424
|
+
"type": "string"
|
|
425
|
+
},
|
|
426
|
+
"text_match": {
|
|
427
|
+
"type": "string"
|
|
428
|
+
},
|
|
429
|
+
"textMatch": {
|
|
430
|
+
"type": "string"
|
|
431
|
+
},
|
|
200
432
|
"expected": {
|
|
201
433
|
"type": "string",
|
|
202
|
-
"enum": [
|
|
434
|
+
"enum": [
|
|
435
|
+
"present",
|
|
436
|
+
"visible",
|
|
437
|
+
"absent",
|
|
438
|
+
"hidden",
|
|
439
|
+
"not_present"
|
|
440
|
+
]
|
|
441
|
+
},
|
|
442
|
+
"visible": {
|
|
443
|
+
"type": "boolean"
|
|
203
444
|
},
|
|
204
|
-
"timeout_ms": {
|
|
445
|
+
"timeout_ms": {
|
|
446
|
+
"type": "number"
|
|
447
|
+
}
|
|
205
448
|
},
|
|
206
|
-
"
|
|
449
|
+
"additionalProperties": false
|
|
207
450
|
},
|
|
208
451
|
"examples": [
|
|
209
452
|
{
|
|
@@ -211,7 +454,7 @@
|
|
|
211
454
|
"action": "ui.wait_for",
|
|
212
455
|
"test_id": "perps-home-heading",
|
|
213
456
|
"expected": "present",
|
|
214
|
-
|
|
457
|
+
"intent": "Confirm the requested mobile content is visible"
|
|
215
458
|
}
|
|
216
459
|
},
|
|
217
460
|
{
|
|
@@ -219,7 +462,7 @@
|
|
|
219
462
|
"action": "ui.wait_for",
|
|
220
463
|
"test_id": "conditional-banner",
|
|
221
464
|
"expected": "absent",
|
|
222
|
-
|
|
465
|
+
"intent": "Confirm the conditional mobile content is absent"
|
|
223
466
|
}
|
|
224
467
|
}
|
|
225
468
|
]
|
|
@@ -234,7 +477,25 @@
|
|
|
234
477
|
"intent": "Capture visual evidence after a wait/assert step"
|
|
235
478
|
}
|
|
236
479
|
}
|
|
237
|
-
]
|
|
480
|
+
],
|
|
481
|
+
"schema": {
|
|
482
|
+
"type": "object",
|
|
483
|
+
"properties": {
|
|
484
|
+
"path": {
|
|
485
|
+
"type": "string"
|
|
486
|
+
},
|
|
487
|
+
"label": {
|
|
488
|
+
"type": "string"
|
|
489
|
+
},
|
|
490
|
+
"category": {
|
|
491
|
+
"type": "string"
|
|
492
|
+
},
|
|
493
|
+
"timeout_ms": {
|
|
494
|
+
"type": "number"
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
"additionalProperties": false
|
|
498
|
+
}
|
|
238
499
|
},
|
|
239
500
|
"app.lifecycle": {
|
|
240
501
|
"description": "Drive outer mobile app lifecycle for deterministic performance start states without rebuilding: foreground/launch, background, terminate, or restart the installed app.",
|
|
@@ -247,7 +508,101 @@
|
|
|
247
508
|
"intent": "Send the selected Android device to the launcher before a warm-resume measurement"
|
|
248
509
|
}
|
|
249
510
|
}
|
|
250
|
-
]
|
|
511
|
+
],
|
|
512
|
+
"schema": {
|
|
513
|
+
"type": "object",
|
|
514
|
+
"properties": {
|
|
515
|
+
"command": {
|
|
516
|
+
"type": "string",
|
|
517
|
+
"enum": [
|
|
518
|
+
"launch",
|
|
519
|
+
"foreground",
|
|
520
|
+
"background",
|
|
521
|
+
"terminate",
|
|
522
|
+
"restart"
|
|
523
|
+
]
|
|
524
|
+
},
|
|
525
|
+
"event": {
|
|
526
|
+
"type": "string",
|
|
527
|
+
"enum": [
|
|
528
|
+
"launch",
|
|
529
|
+
"foreground",
|
|
530
|
+
"background",
|
|
531
|
+
"terminate",
|
|
532
|
+
"restart"
|
|
533
|
+
]
|
|
534
|
+
},
|
|
535
|
+
"state": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"enum": [
|
|
538
|
+
"launch",
|
|
539
|
+
"foreground",
|
|
540
|
+
"background",
|
|
541
|
+
"terminate",
|
|
542
|
+
"restart"
|
|
543
|
+
]
|
|
544
|
+
},
|
|
545
|
+
"settle_ms": {
|
|
546
|
+
"type": "integer"
|
|
547
|
+
},
|
|
548
|
+
"timeout_ms": {
|
|
549
|
+
"type": "integer"
|
|
550
|
+
},
|
|
551
|
+
"platform": {
|
|
552
|
+
"type": "string",
|
|
553
|
+
"enum": [
|
|
554
|
+
"ios",
|
|
555
|
+
"android"
|
|
556
|
+
]
|
|
557
|
+
},
|
|
558
|
+
"watcher_port": {
|
|
559
|
+
"type": "number"
|
|
560
|
+
},
|
|
561
|
+
"metro_port": {
|
|
562
|
+
"type": "number"
|
|
563
|
+
},
|
|
564
|
+
"launch_url": {
|
|
565
|
+
"type": "string"
|
|
566
|
+
},
|
|
567
|
+
"launchUrl": {
|
|
568
|
+
"type": "string"
|
|
569
|
+
},
|
|
570
|
+
"url": {
|
|
571
|
+
"type": "string"
|
|
572
|
+
},
|
|
573
|
+
"adb_serial": {
|
|
574
|
+
"type": "string"
|
|
575
|
+
},
|
|
576
|
+
"android_device": {
|
|
577
|
+
"type": "string"
|
|
578
|
+
},
|
|
579
|
+
"device": {
|
|
580
|
+
"type": "string"
|
|
581
|
+
},
|
|
582
|
+
"package_id": {
|
|
583
|
+
"type": "string"
|
|
584
|
+
},
|
|
585
|
+
"packageName": {
|
|
586
|
+
"type": "string"
|
|
587
|
+
},
|
|
588
|
+
"app_id": {
|
|
589
|
+
"type": "string"
|
|
590
|
+
},
|
|
591
|
+
"simulator": {
|
|
592
|
+
"type": "string"
|
|
593
|
+
},
|
|
594
|
+
"ios_simulator": {
|
|
595
|
+
"type": "string"
|
|
596
|
+
},
|
|
597
|
+
"bundle_id": {
|
|
598
|
+
"type": "string"
|
|
599
|
+
},
|
|
600
|
+
"bundleId": {
|
|
601
|
+
"type": "string"
|
|
602
|
+
}
|
|
603
|
+
},
|
|
604
|
+
"additionalProperties": false
|
|
605
|
+
}
|
|
251
606
|
},
|
|
252
607
|
"assert_file": {
|
|
253
608
|
"description": "Assert that a project file exists and optionally contains text.",
|
|
@@ -260,7 +615,22 @@
|
|
|
260
615
|
"intent": "Assert that a project file exists and optionally contains text"
|
|
261
616
|
}
|
|
262
617
|
}
|
|
263
|
-
]
|
|
618
|
+
],
|
|
619
|
+
"schema": {
|
|
620
|
+
"type": "object",
|
|
621
|
+
"properties": {
|
|
622
|
+
"path": {
|
|
623
|
+
"type": "string"
|
|
624
|
+
},
|
|
625
|
+
"contains": {
|
|
626
|
+
"type": "string"
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
"required": [
|
|
630
|
+
"path"
|
|
631
|
+
],
|
|
632
|
+
"additionalProperties": false
|
|
633
|
+
}
|
|
264
634
|
},
|
|
265
635
|
"assert_json": {
|
|
266
636
|
"description": "Assert a JSON file value with a JSONPath-style selector.",
|
|
@@ -277,7 +647,69 @@
|
|
|
277
647
|
"intent": "Assert a JSON file value with a JSONPath-style selector"
|
|
278
648
|
}
|
|
279
649
|
}
|
|
280
|
-
]
|
|
650
|
+
],
|
|
651
|
+
"schema": {
|
|
652
|
+
"type": "object",
|
|
653
|
+
"properties": {
|
|
654
|
+
"path": {
|
|
655
|
+
"type": "string"
|
|
656
|
+
},
|
|
657
|
+
"assert": {
|
|
658
|
+
"type": "object",
|
|
659
|
+
"properties": {
|
|
660
|
+
"path": {
|
|
661
|
+
"type": "string"
|
|
662
|
+
},
|
|
663
|
+
"operator": {
|
|
664
|
+
"type": "string"
|
|
665
|
+
},
|
|
666
|
+
"value": {
|
|
667
|
+
"type": [
|
|
668
|
+
"string",
|
|
669
|
+
"number",
|
|
670
|
+
"integer",
|
|
671
|
+
"boolean",
|
|
672
|
+
"object",
|
|
673
|
+
"array"
|
|
674
|
+
],
|
|
675
|
+
"items": {
|
|
676
|
+
"type": [
|
|
677
|
+
"string",
|
|
678
|
+
"number",
|
|
679
|
+
"integer",
|
|
680
|
+
"boolean",
|
|
681
|
+
"object"
|
|
682
|
+
]
|
|
683
|
+
}
|
|
684
|
+
},
|
|
685
|
+
"all": {
|
|
686
|
+
"type": "array",
|
|
687
|
+
"items": {
|
|
688
|
+
"type": "object"
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
"any": {
|
|
692
|
+
"type": "array",
|
|
693
|
+
"items": {
|
|
694
|
+
"type": "object"
|
|
695
|
+
}
|
|
696
|
+
},
|
|
697
|
+
"none": {
|
|
698
|
+
"type": "array",
|
|
699
|
+
"items": {
|
|
700
|
+
"type": "object"
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
},
|
|
704
|
+
"additionalProperties": false
|
|
705
|
+
}
|
|
706
|
+
},
|
|
707
|
+
"required": [
|
|
708
|
+
"path",
|
|
709
|
+
"assert"
|
|
710
|
+
],
|
|
711
|
+
"additionalProperties": false
|
|
712
|
+
}
|
|
281
713
|
},
|
|
282
714
|
"assert_exit_code": {
|
|
283
715
|
"description": "Assert the exit code captured from a command node output.",
|
|
@@ -290,7 +722,22 @@
|
|
|
290
722
|
"intent": "Assert the exit code captured from a command node output"
|
|
291
723
|
}
|
|
292
724
|
}
|
|
293
|
-
]
|
|
725
|
+
],
|
|
726
|
+
"schema": {
|
|
727
|
+
"type": "object",
|
|
728
|
+
"properties": {
|
|
729
|
+
"source": {
|
|
730
|
+
"type": "string"
|
|
731
|
+
},
|
|
732
|
+
"node": {
|
|
733
|
+
"type": "string"
|
|
734
|
+
},
|
|
735
|
+
"expected": {
|
|
736
|
+
"type": "number"
|
|
737
|
+
}
|
|
738
|
+
},
|
|
739
|
+
"additionalProperties": false
|
|
740
|
+
}
|
|
294
741
|
},
|
|
295
742
|
"assert_output": {
|
|
296
743
|
"description": "Assert stdout or stderr captured from a command node output.",
|
|
@@ -304,10 +751,80 @@
|
|
|
304
751
|
"intent": "Assert stdout or stderr captured from a command node output"
|
|
305
752
|
}
|
|
306
753
|
}
|
|
307
|
-
]
|
|
754
|
+
],
|
|
755
|
+
"schema": {
|
|
756
|
+
"type": "object",
|
|
757
|
+
"properties": {
|
|
758
|
+
"source": {
|
|
759
|
+
"type": "string"
|
|
760
|
+
},
|
|
761
|
+
"node": {
|
|
762
|
+
"type": "string"
|
|
763
|
+
},
|
|
764
|
+
"stream": {
|
|
765
|
+
"type": "string"
|
|
766
|
+
},
|
|
767
|
+
"contains": {
|
|
768
|
+
"type": "string"
|
|
769
|
+
},
|
|
770
|
+
"match": {
|
|
771
|
+
"type": "string"
|
|
772
|
+
},
|
|
773
|
+
"assert": {
|
|
774
|
+
"type": "object",
|
|
775
|
+
"properties": {
|
|
776
|
+
"path": {
|
|
777
|
+
"type": "string"
|
|
778
|
+
},
|
|
779
|
+
"operator": {
|
|
780
|
+
"type": "string"
|
|
781
|
+
},
|
|
782
|
+
"value": {
|
|
783
|
+
"type": [
|
|
784
|
+
"string",
|
|
785
|
+
"number",
|
|
786
|
+
"integer",
|
|
787
|
+
"boolean",
|
|
788
|
+
"object",
|
|
789
|
+
"array"
|
|
790
|
+
],
|
|
791
|
+
"items": {
|
|
792
|
+
"type": [
|
|
793
|
+
"string",
|
|
794
|
+
"number",
|
|
795
|
+
"integer",
|
|
796
|
+
"boolean",
|
|
797
|
+
"object"
|
|
798
|
+
]
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
"all": {
|
|
802
|
+
"type": "array",
|
|
803
|
+
"items": {
|
|
804
|
+
"type": "object"
|
|
805
|
+
}
|
|
806
|
+
},
|
|
807
|
+
"any": {
|
|
808
|
+
"type": "array",
|
|
809
|
+
"items": {
|
|
810
|
+
"type": "object"
|
|
811
|
+
}
|
|
812
|
+
},
|
|
813
|
+
"none": {
|
|
814
|
+
"type": "array",
|
|
815
|
+
"items": {
|
|
816
|
+
"type": "object"
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
"additionalProperties": false
|
|
821
|
+
}
|
|
822
|
+
},
|
|
823
|
+
"additionalProperties": false
|
|
824
|
+
}
|
|
308
825
|
},
|
|
309
826
|
"app.hud": {
|
|
310
|
-
"description": "Display minimal human-readable recipe progress. The intent must explain the current agent goal; debug metadata and
|
|
827
|
+
"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.",
|
|
311
828
|
"examples": [
|
|
312
829
|
{
|
|
313
830
|
"description": "Default one-intent progress HUD",
|
|
@@ -326,6 +843,12 @@
|
|
|
326
843
|
"schema": {
|
|
327
844
|
"type": "object",
|
|
328
845
|
"properties": {
|
|
846
|
+
"clear": {
|
|
847
|
+
"type": "boolean"
|
|
848
|
+
},
|
|
849
|
+
"title": {
|
|
850
|
+
"type": "string"
|
|
851
|
+
},
|
|
329
852
|
"status": {
|
|
330
853
|
"type": "string",
|
|
331
854
|
"enum": [
|
|
@@ -334,442 +857,176 @@
|
|
|
334
857
|
"fail"
|
|
335
858
|
]
|
|
336
859
|
},
|
|
337
|
-
"
|
|
860
|
+
"node_id": {
|
|
338
861
|
"type": "string"
|
|
339
862
|
},
|
|
340
|
-
"
|
|
341
|
-
"type": "object",
|
|
342
|
-
"properties": {
|
|
343
|
-
"current": {
|
|
344
|
-
"type": "number"
|
|
345
|
-
},
|
|
346
|
-
"total": {
|
|
347
|
-
"type": "number"
|
|
348
|
-
}
|
|
349
|
-
},
|
|
350
|
-
"required": [
|
|
351
|
-
"current",
|
|
352
|
-
"total"
|
|
353
|
-
]
|
|
354
|
-
},
|
|
355
|
-
"detail": {
|
|
863
|
+
"nodeId": {
|
|
356
864
|
"type": "string"
|
|
357
865
|
},
|
|
358
|
-
"
|
|
359
|
-
"type": "string"
|
|
360
|
-
},
|
|
361
|
-
"display": {
|
|
362
|
-
"type": "object",
|
|
363
|
-
"properties": {
|
|
364
|
-
"showDetail": {
|
|
365
|
-
"type": "boolean"
|
|
366
|
-
},
|
|
367
|
-
"showDebug": {
|
|
368
|
-
"type": "boolean"
|
|
369
|
-
},
|
|
370
|
-
"showTitle": {
|
|
371
|
-
"type": "boolean"
|
|
372
|
-
},
|
|
373
|
-
"layout": {
|
|
374
|
-
"type": "string"
|
|
375
|
-
},
|
|
376
|
-
"position": {
|
|
377
|
-
"type": "string"
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
},
|
|
381
|
-
"clear": {
|
|
382
|
-
"type": "boolean"
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
},
|
|
387
|
-
"ui.set_input": {
|
|
388
|
-
"description": "Set text on a React Native TextInput by testID through the app control bridge.",
|
|
389
|
-
"schema": {
|
|
390
|
-
"type": "object",
|
|
391
|
-
"properties": {
|
|
392
|
-
"test_id": {
|
|
866
|
+
"phase": {
|
|
393
867
|
"type": "string"
|
|
394
868
|
},
|
|
395
|
-
"
|
|
869
|
+
"action_name": {
|
|
396
870
|
"type": "string"
|
|
397
871
|
},
|
|
398
|
-
"
|
|
872
|
+
"recipe_action": {
|
|
399
873
|
"type": "string"
|
|
400
874
|
},
|
|
401
875
|
"text": {
|
|
402
876
|
"type": "string"
|
|
403
877
|
},
|
|
404
|
-
"
|
|
405
|
-
"type": "string"
|
|
406
|
-
}
|
|
407
|
-
},
|
|
408
|
-
"additionalProperties": true
|
|
409
|
-
},
|
|
410
|
-
"examples": [
|
|
411
|
-
{
|
|
412
|
-
"node": {
|
|
413
|
-
"action": "ui.set_input",
|
|
414
|
-
"test_id": "network-selector-network-search-input",
|
|
415
|
-
"value": "Sepolia",
|
|
416
|
-
"intent": "Set text on a React Native TextInput by testID through the app control bridge"
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
]
|
|
420
|
-
},
|
|
421
|
-
"ui.key_press": {
|
|
422
|
-
"description": "Send a trusted keyboard press to the currently focused UI element through the UI transport.",
|
|
423
|
-
"schema": {
|
|
424
|
-
"type": "object",
|
|
425
|
-
"properties": {
|
|
426
|
-
"key": {
|
|
878
|
+
"detail": {
|
|
427
879
|
"type": "string"
|
|
428
880
|
},
|
|
429
|
-
"
|
|
881
|
+
"error": {
|
|
430
882
|
"type": "string"
|
|
883
|
+
},
|
|
884
|
+
"display": {
|
|
885
|
+
"type": "object"
|
|
886
|
+
},
|
|
887
|
+
"progress": {
|
|
888
|
+
"type": "object"
|
|
431
889
|
}
|
|
432
|
-
},
|
|
433
|
-
"
|
|
434
|
-
|
|
435
|
-
],
|
|
436
|
-
"additionalProperties": true
|
|
437
|
-
},
|
|
438
|
-
"examples": [
|
|
439
|
-
{
|
|
440
|
-
"node": {
|
|
441
|
-
"action": "ui.key_press",
|
|
442
|
-
"key": "Enter",
|
|
443
|
-
"intent": "Send a trusted Enter key press to the focused UI element"
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
]
|
|
447
|
-
},
|
|
448
|
-
"app.status": {
|
|
449
|
-
"description": "Report the adapter's static status — platform, project root, resolved checkout shape, and headless compatibility mode (no live route or account).",
|
|
450
|
-
"examples": [
|
|
451
|
-
{
|
|
452
|
-
"node": {
|
|
453
|
-
"action": "app.status",
|
|
454
|
-
"intent": "Report the resolved checkout status"
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
]
|
|
458
|
-
},
|
|
459
|
-
"cdp.target": {
|
|
460
|
-
"description": "Probe the platform debug transport — Chrome CDP for extension, the React Native debug bridge for mobile — and report whether it is reachable.",
|
|
461
|
-
"examples": [
|
|
462
|
-
{
|
|
463
|
-
"node": {
|
|
464
|
-
"action": "cdp.target",
|
|
465
|
-
"require_reachable": true,
|
|
466
|
-
"intent": "Confirm the mobile React Native debug bridge is reachable"
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
]
|
|
470
|
-
},
|
|
471
|
-
"metamask.wallet.fixture_status": {
|
|
472
|
-
"description": "Report the on-disk wallet fixture status (accounts and password presence) without launching or mutating the app.",
|
|
473
|
-
"examples": [
|
|
474
|
-
{
|
|
475
|
-
"description": "Minimal node",
|
|
476
|
-
"node": {
|
|
477
|
-
"action": "metamask.wallet.fixture_status",
|
|
478
|
-
"intent": "Check wallet fixture status"
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
]
|
|
482
|
-
},
|
|
483
|
-
"metamask.wallet.setup": {
|
|
484
|
-
"description": "Import the wallet fixture accounts and password so the app starts from a known signed-in state.",
|
|
485
|
-
"examples": [
|
|
486
|
-
{
|
|
487
|
-
"description": "Minimal node",
|
|
488
|
-
"node": {
|
|
489
|
-
"action": "metamask.wallet.setup",
|
|
490
|
-
"intent": "Prepare the wallet fixture for recipe execution"
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
]
|
|
494
|
-
},
|
|
495
|
-
"metamask.wallet.ensure_unlocked": {
|
|
496
|
-
"description": "Unlock the wallet with the fixture password when it is currently locked.",
|
|
497
|
-
"examples": [
|
|
498
|
-
{
|
|
499
|
-
"description": "Minimal node",
|
|
500
|
-
"node": {
|
|
501
|
-
"action": "metamask.wallet.ensure_unlocked",
|
|
502
|
-
"intent": "Ensure the wallet is unlocked before proof steps"
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
]
|
|
506
|
-
},
|
|
507
|
-
"metamask.wallet.select_account": {
|
|
508
|
-
"description": "Select a wallet account by address, id, or display name.",
|
|
509
|
-
"examples": [
|
|
510
|
-
{
|
|
511
|
-
"description": "Select by deterministic fixture address",
|
|
512
|
-
"node": {
|
|
513
|
-
"action": "metamask.wallet.select_account",
|
|
514
|
-
"address": "0x8dc623e964475d4d669da601fd15ea9125469003",
|
|
515
|
-
"intent": "Select the requested wallet account"
|
|
516
|
-
}
|
|
517
|
-
},
|
|
518
|
-
{
|
|
519
|
-
"description": "Select by fixture display name",
|
|
520
|
-
"node": {
|
|
521
|
-
"action": "metamask.wallet.select_account",
|
|
522
|
-
"name": "dev1",
|
|
523
|
-
"intent": "Select the requested wallet account"
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
]
|
|
527
|
-
},
|
|
528
|
-
"metamask.wallet.read_state": {
|
|
529
|
-
"description": "Read the redacted wallet state (selected account, route, and device) from the running app.",
|
|
530
|
-
"examples": [
|
|
531
|
-
{
|
|
532
|
-
"description": "Minimal node",
|
|
533
|
-
"node": {
|
|
534
|
-
"action": "metamask.wallet.read_state",
|
|
535
|
-
"intent": "Read wallet state needed for the proof"
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
]
|
|
539
|
-
},
|
|
540
|
-
"metamask.perps.read_positions": {
|
|
541
|
-
"description": "Read live Perps positions and return the selected subset.",
|
|
542
|
-
"examples": [
|
|
543
|
-
{
|
|
544
|
-
"description": "Read selected live state",
|
|
545
|
-
"node": {
|
|
546
|
-
"action": "metamask.perps.read_positions",
|
|
547
|
-
"market": "BTC",
|
|
548
|
-
"intent": "Read Perps positions needed for the proof"
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
]
|
|
552
|
-
},
|
|
553
|
-
"metamask.perps.read_orders": {
|
|
554
|
-
"description": "Read live Perps open orders and return the selected subset.",
|
|
555
|
-
"examples": [
|
|
556
|
-
{
|
|
557
|
-
"description": "Read selected live state",
|
|
558
|
-
"node": {
|
|
559
|
-
"action": "metamask.perps.read_orders",
|
|
560
|
-
"market": "BTC",
|
|
561
|
-
"intent": "Read Perps open orders needed for the proof"
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
]
|
|
565
|
-
},
|
|
566
|
-
"metamask.perps.close_positions": {
|
|
567
|
-
"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.",
|
|
568
|
-
"examples": [
|
|
569
|
-
{
|
|
570
|
-
"description": "Close every open position",
|
|
571
|
-
"node": {
|
|
572
|
-
"action": "metamask.perps.close_positions",
|
|
573
|
-
"mode": "all",
|
|
574
|
-
"intent": "Close selected Perps positions before continuing",
|
|
575
|
-
"network": "testnet"
|
|
576
|
-
}
|
|
577
|
-
},
|
|
578
|
-
{
|
|
579
|
-
"description": "Close selected BTC/ETH positions",
|
|
580
|
-
"node": {
|
|
581
|
-
"action": "metamask.perps.close_positions",
|
|
582
|
-
"markets": [
|
|
583
|
-
"BTC",
|
|
584
|
-
"ETH"
|
|
585
|
-
],
|
|
586
|
-
"intent": "Close selected Perps positions before continuing",
|
|
587
|
-
"network": "testnet"
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
]
|
|
591
|
-
},
|
|
592
|
-
"metamask.perps.close_orders": {
|
|
593
|
-
"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.",
|
|
594
|
-
"examples": [
|
|
595
|
-
{
|
|
596
|
-
"description": "Cancel every open order",
|
|
597
|
-
"node": {
|
|
598
|
-
"action": "metamask.perps.close_orders",
|
|
599
|
-
"mode": "all",
|
|
600
|
-
"intent": "Cancel selected Perps orders before continuing",
|
|
601
|
-
"network": "testnet"
|
|
602
|
-
}
|
|
603
|
-
},
|
|
604
|
-
{
|
|
605
|
-
"description": "Cancel BTC orders only",
|
|
606
|
-
"node": {
|
|
607
|
-
"action": "metamask.perps.close_orders",
|
|
608
|
-
"market": "BTC",
|
|
609
|
-
"intent": "Cancel selected Perps orders before continuing",
|
|
610
|
-
"network": "testnet"
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
]
|
|
614
|
-
},
|
|
615
|
-
"metamask.perps.place_order": {
|
|
616
|
-
"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.",
|
|
617
|
-
"examples": [
|
|
618
|
-
{
|
|
619
|
-
"description": "Place BTC market order",
|
|
620
|
-
"node": {
|
|
621
|
-
"action": "metamask.perps.place_order",
|
|
622
|
-
"market": "BTC",
|
|
623
|
-
"side": "long",
|
|
624
|
-
"notional": "10",
|
|
625
|
-
"leverage": 2,
|
|
626
|
-
"intent": "Place the requested Perps order",
|
|
627
|
-
"network": "testnet"
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
]
|
|
631
|
-
},
|
|
632
|
-
"metamask.perps.assert_positions": {
|
|
633
|
-
"description": "Assert selected live Perps positions are present or absent.",
|
|
634
|
-
"examples": [
|
|
635
|
-
{
|
|
636
|
-
"description": "Assert BTC position is open",
|
|
637
|
-
"node": {
|
|
638
|
-
"action": "metamask.perps.assert_positions",
|
|
639
|
-
"state": "open",
|
|
640
|
-
"market": "BTC",
|
|
641
|
-
"intent": "Assert the expected Perps position state"
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
]
|
|
890
|
+
},
|
|
891
|
+
"additionalProperties": false
|
|
892
|
+
}
|
|
645
893
|
},
|
|
646
|
-
"
|
|
647
|
-
"description": "
|
|
894
|
+
"ui.set_input": {
|
|
895
|
+
"description": "Set text on a React Native TextInput by testID through the app control bridge.",
|
|
896
|
+
"schema": {
|
|
897
|
+
"type": "object",
|
|
898
|
+
"properties": {
|
|
899
|
+
"selector": {
|
|
900
|
+
"type": "string"
|
|
901
|
+
},
|
|
902
|
+
"test_id": {
|
|
903
|
+
"type": "string"
|
|
904
|
+
},
|
|
905
|
+
"testID": {
|
|
906
|
+
"type": "string"
|
|
907
|
+
},
|
|
908
|
+
"value": {
|
|
909
|
+
"type": "string"
|
|
910
|
+
},
|
|
911
|
+
"text": {
|
|
912
|
+
"type": "string"
|
|
913
|
+
},
|
|
914
|
+
"timeout_ms": {
|
|
915
|
+
"type": "number"
|
|
916
|
+
},
|
|
917
|
+
"settle": {
|
|
918
|
+
"type": "boolean"
|
|
919
|
+
}
|
|
920
|
+
},
|
|
921
|
+
"additionalProperties": false
|
|
922
|
+
},
|
|
648
923
|
"examples": [
|
|
649
924
|
{
|
|
650
|
-
"description": "Assert no BTC open orders",
|
|
651
925
|
"node": {
|
|
652
|
-
"action": "
|
|
653
|
-
"
|
|
654
|
-
"
|
|
655
|
-
"intent": "
|
|
926
|
+
"action": "ui.set_input",
|
|
927
|
+
"test_id": "network-selector-network-search-input",
|
|
928
|
+
"value": "Sepolia",
|
|
929
|
+
"intent": "Set text on a React Native TextInput by testID through the app control bridge"
|
|
656
930
|
}
|
|
657
931
|
}
|
|
658
932
|
]
|
|
659
933
|
},
|
|
660
|
-
"
|
|
661
|
-
"description": "
|
|
662
|
-
"
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
"
|
|
666
|
-
"
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
"
|
|
670
|
-
|
|
934
|
+
"ui.key_press": {
|
|
935
|
+
"description": "Send a trusted keyboard press to the currently focused UI element through the UI transport.",
|
|
936
|
+
"schema": {
|
|
937
|
+
"type": "object",
|
|
938
|
+
"properties": {
|
|
939
|
+
"key": {
|
|
940
|
+
"type": "string"
|
|
941
|
+
},
|
|
942
|
+
"timeout_ms": {
|
|
943
|
+
"type": "number"
|
|
944
|
+
},
|
|
945
|
+
"settle": {
|
|
946
|
+
"type": "boolean"
|
|
671
947
|
}
|
|
672
948
|
},
|
|
949
|
+
"required": [
|
|
950
|
+
"key"
|
|
951
|
+
],
|
|
952
|
+
"additionalProperties": false
|
|
953
|
+
},
|
|
954
|
+
"examples": [
|
|
673
955
|
{
|
|
674
|
-
"description": "Ensure any existing positions are closed",
|
|
675
956
|
"node": {
|
|
676
|
-
"action": "
|
|
677
|
-
"
|
|
678
|
-
"
|
|
679
|
-
"intent": "Converge Perps positions to the requested state",
|
|
680
|
-
"network": "testnet"
|
|
957
|
+
"action": "ui.key_press",
|
|
958
|
+
"key": "Enter",
|
|
959
|
+
"intent": "Send a trusted Enter key press to the focused UI element"
|
|
681
960
|
}
|
|
682
961
|
}
|
|
683
962
|
]
|
|
684
963
|
},
|
|
685
|
-
"
|
|
686
|
-
"description": "
|
|
964
|
+
"app.status": {
|
|
965
|
+
"description": "Report the adapter's static status — platform, project root, resolved checkout shape, and headless compatibility mode (no live route or account).",
|
|
687
966
|
"examples": [
|
|
688
967
|
{
|
|
689
|
-
"description": "Ensure no open orders before proof window",
|
|
690
968
|
"node": {
|
|
691
|
-
"action": "
|
|
692
|
-
"
|
|
693
|
-
"mode": "all",
|
|
694
|
-
"intent": "Converge Perps orders to the requested state",
|
|
695
|
-
"network": "testnet"
|
|
969
|
+
"action": "app.status",
|
|
970
|
+
"intent": "Report the resolved checkout status"
|
|
696
971
|
}
|
|
697
972
|
}
|
|
698
|
-
]
|
|
973
|
+
],
|
|
974
|
+
"schema": {
|
|
975
|
+
"type": "object",
|
|
976
|
+
"properties": {},
|
|
977
|
+
"additionalProperties": false
|
|
978
|
+
}
|
|
699
979
|
},
|
|
700
|
-
"
|
|
701
|
-
"description": "
|
|
980
|
+
"cdp.target": {
|
|
981
|
+
"description": "Probe the platform debug transport — Chrome CDP for extension, the React Native debug bridge for mobile — and report whether it is reachable.",
|
|
702
982
|
"examples": [
|
|
703
983
|
{
|
|
704
|
-
"description": "Clean BTC testnet market state",
|
|
705
|
-
"node": {
|
|
706
|
-
"action": "metamask.perps.start_state",
|
|
707
|
-
"profile": "clean_market_testnet",
|
|
708
|
-
"market": "BTC",
|
|
709
|
-
"positions": {
|
|
710
|
-
"state": "none"
|
|
711
|
-
},
|
|
712
|
-
"orders": {
|
|
713
|
-
"state": "none"
|
|
714
|
-
},
|
|
715
|
-
"intent": "Prepare the Perps start state for the proof",
|
|
716
|
-
"network": "testnet"
|
|
717
|
-
}
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
"description": "Start with an open ETH long position",
|
|
721
984
|
"node": {
|
|
722
|
-
"action": "
|
|
723
|
-
"
|
|
724
|
-
"
|
|
725
|
-
"side": "long",
|
|
726
|
-
"positions": {
|
|
727
|
-
"state": "open",
|
|
728
|
-
"notional": "10",
|
|
729
|
-
"leverage": 2
|
|
730
|
-
},
|
|
731
|
-
"intent": "Prepare the Perps start state for the proof",
|
|
732
|
-
"network": "testnet"
|
|
985
|
+
"action": "cdp.target",
|
|
986
|
+
"require_reachable": true,
|
|
987
|
+
"intent": "Confirm the mobile React Native debug bridge is reachable"
|
|
733
988
|
}
|
|
734
989
|
}
|
|
735
|
-
]
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
"
|
|
743
|
-
"
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
"
|
|
990
|
+
],
|
|
991
|
+
"schema": {
|
|
992
|
+
"type": "object",
|
|
993
|
+
"properties": {
|
|
994
|
+
"cdp_port": {
|
|
995
|
+
"type": "number"
|
|
996
|
+
},
|
|
997
|
+
"metro_port": {
|
|
998
|
+
"type": "number"
|
|
999
|
+
},
|
|
1000
|
+
"watcher_port": {
|
|
1001
|
+
"type": "number"
|
|
1002
|
+
},
|
|
1003
|
+
"probe_timeout_ms": {
|
|
1004
|
+
"type": "number"
|
|
1005
|
+
},
|
|
1006
|
+
"cdp_timeout_ms": {
|
|
1007
|
+
"type": "number"
|
|
1008
|
+
},
|
|
1009
|
+
"timeout_ms": {
|
|
1010
|
+
"type": "number"
|
|
1011
|
+
},
|
|
1012
|
+
"require_reachable": {
|
|
1013
|
+
"type": "boolean"
|
|
1014
|
+
},
|
|
1015
|
+
"required": {
|
|
1016
|
+
"type": "boolean"
|
|
753
1017
|
}
|
|
754
1018
|
},
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
"node": {
|
|
758
|
-
"action": "metamask.perps.teardown_state",
|
|
759
|
-
"market": "BTC",
|
|
760
|
-
"intent": "Restore Perps state after the proof"
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
]
|
|
1019
|
+
"additionalProperties": false
|
|
1020
|
+
}
|
|
764
1021
|
},
|
|
765
1022
|
"call": {
|
|
766
|
-
"description": "Invoke a named
|
|
1023
|
+
"description": "Invoke a named recipe by ref and run its steps inline.",
|
|
767
1024
|
"examples": [
|
|
768
1025
|
{
|
|
769
1026
|
"node": {
|
|
770
1027
|
"action": "call",
|
|
771
1028
|
"ref": "mydev.open_perps_setup",
|
|
772
|
-
"intent": "Run a personal Perps setup
|
|
1029
|
+
"intent": "Run a personal Perps setup recipe"
|
|
773
1030
|
}
|
|
774
1031
|
}
|
|
775
1032
|
]
|
|
@@ -782,14 +1039,8 @@
|
|
|
782
1039
|
"description": "Report the on-disk wallet fixture status (accounts and password presence) without launching or mutating the app.",
|
|
783
1040
|
"schema": {
|
|
784
1041
|
"type": "object",
|
|
785
|
-
"properties": {
|
|
786
|
-
|
|
787
|
-
"const": "metamask.wallet.fixture_status"
|
|
788
|
-
}
|
|
789
|
-
},
|
|
790
|
-
"required": [
|
|
791
|
-
"action"
|
|
792
|
-
]
|
|
1042
|
+
"properties": {},
|
|
1043
|
+
"additionalProperties": false
|
|
793
1044
|
},
|
|
794
1045
|
"examples": [
|
|
795
1046
|
{
|
|
@@ -801,7 +1052,8 @@
|
|
|
801
1052
|
}
|
|
802
1053
|
],
|
|
803
1054
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
804
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1055
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1056
|
+
"execution_capabilities": []
|
|
805
1057
|
},
|
|
806
1058
|
{
|
|
807
1059
|
"name": "metamask.wallet.setup",
|
|
@@ -809,14 +1061,8 @@
|
|
|
809
1061
|
"description": "Import the wallet fixture accounts and password so the app starts from a known signed-in state.",
|
|
810
1062
|
"schema": {
|
|
811
1063
|
"type": "object",
|
|
812
|
-
"properties": {
|
|
813
|
-
|
|
814
|
-
"const": "metamask.wallet.setup"
|
|
815
|
-
}
|
|
816
|
-
},
|
|
817
|
-
"required": [
|
|
818
|
-
"action"
|
|
819
|
-
]
|
|
1064
|
+
"properties": {},
|
|
1065
|
+
"additionalProperties": false
|
|
820
1066
|
},
|
|
821
1067
|
"examples": [
|
|
822
1068
|
{
|
|
@@ -828,7 +1074,10 @@
|
|
|
828
1074
|
}
|
|
829
1075
|
],
|
|
830
1076
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
831
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1077
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1078
|
+
"execution_capabilities": [
|
|
1079
|
+
"app-mutation"
|
|
1080
|
+
]
|
|
832
1081
|
},
|
|
833
1082
|
{
|
|
834
1083
|
"name": "metamask.wallet.ensure_unlocked",
|
|
@@ -837,13 +1086,14 @@
|
|
|
837
1086
|
"schema": {
|
|
838
1087
|
"type": "object",
|
|
839
1088
|
"properties": {
|
|
840
|
-
"
|
|
841
|
-
"
|
|
1089
|
+
"target_timeout_ms": {
|
|
1090
|
+
"type": "number"
|
|
1091
|
+
},
|
|
1092
|
+
"unlock_timeout_ms": {
|
|
1093
|
+
"type": "number"
|
|
842
1094
|
}
|
|
843
1095
|
},
|
|
844
|
-
"
|
|
845
|
-
"action"
|
|
846
|
-
]
|
|
1096
|
+
"additionalProperties": false
|
|
847
1097
|
},
|
|
848
1098
|
"examples": [
|
|
849
1099
|
{
|
|
@@ -855,7 +1105,10 @@
|
|
|
855
1105
|
}
|
|
856
1106
|
],
|
|
857
1107
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
858
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1108
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1109
|
+
"execution_capabilities": [
|
|
1110
|
+
"app-mutation"
|
|
1111
|
+
]
|
|
859
1112
|
},
|
|
860
1113
|
{
|
|
861
1114
|
"name": "metamask.wallet.select_account",
|
|
@@ -864,9 +1117,6 @@
|
|
|
864
1117
|
"schema": {
|
|
865
1118
|
"type": "object",
|
|
866
1119
|
"properties": {
|
|
867
|
-
"action": {
|
|
868
|
-
"const": "metamask.wallet.select_account"
|
|
869
|
-
},
|
|
870
1120
|
"address": {
|
|
871
1121
|
"type": "string",
|
|
872
1122
|
"description": "EVM address of the account to select."
|
|
@@ -880,26 +1130,7 @@
|
|
|
880
1130
|
"description": "Display name of the account to select."
|
|
881
1131
|
}
|
|
882
1132
|
},
|
|
883
|
-
"
|
|
884
|
-
"action"
|
|
885
|
-
],
|
|
886
|
-
"anyOf": [
|
|
887
|
-
{
|
|
888
|
-
"required": [
|
|
889
|
-
"address"
|
|
890
|
-
]
|
|
891
|
-
},
|
|
892
|
-
{
|
|
893
|
-
"required": [
|
|
894
|
-
"id"
|
|
895
|
-
]
|
|
896
|
-
},
|
|
897
|
-
{
|
|
898
|
-
"required": [
|
|
899
|
-
"name"
|
|
900
|
-
]
|
|
901
|
-
}
|
|
902
|
-
]
|
|
1133
|
+
"additionalProperties": false
|
|
903
1134
|
},
|
|
904
1135
|
"examples": [
|
|
905
1136
|
{
|
|
@@ -920,22 +1151,53 @@
|
|
|
920
1151
|
}
|
|
921
1152
|
],
|
|
922
1153
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
923
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1154
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1155
|
+
"execution_capabilities": [
|
|
1156
|
+
"app-mutation"
|
|
1157
|
+
]
|
|
924
1158
|
},
|
|
925
1159
|
{
|
|
926
|
-
"name": "metamask.wallet.
|
|
1160
|
+
"name": "metamask.wallet.list_accounts",
|
|
927
1161
|
"owner": "metamask",
|
|
928
|
-
"description": "
|
|
1162
|
+
"description": "List redacted wallet accounts and identify the selected account without mutating the app.",
|
|
929
1163
|
"schema": {
|
|
930
1164
|
"type": "object",
|
|
931
1165
|
"properties": {
|
|
932
|
-
"
|
|
933
|
-
"
|
|
1166
|
+
"scope": {
|
|
1167
|
+
"type": "string",
|
|
1168
|
+
"default": "named",
|
|
1169
|
+
"enum": [
|
|
1170
|
+
"selected",
|
|
1171
|
+
"named",
|
|
1172
|
+
"evm",
|
|
1173
|
+
"all"
|
|
1174
|
+
],
|
|
1175
|
+
"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."
|
|
934
1176
|
}
|
|
935
1177
|
},
|
|
936
|
-
"
|
|
937
|
-
|
|
938
|
-
|
|
1178
|
+
"additionalProperties": false
|
|
1179
|
+
},
|
|
1180
|
+
"examples": [
|
|
1181
|
+
{
|
|
1182
|
+
"description": "List wallet accounts",
|
|
1183
|
+
"node": {
|
|
1184
|
+
"action": "metamask.wallet.list_accounts",
|
|
1185
|
+
"intent": "Discover the available wallet accounts"
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
],
|
|
1189
|
+
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1190
|
+
"safety_notes": "Read-only account metadata; must never expose keys, mnemonics, vault data, or credentials.",
|
|
1191
|
+
"execution_capabilities": []
|
|
1192
|
+
},
|
|
1193
|
+
{
|
|
1194
|
+
"name": "metamask.wallet.read_state",
|
|
1195
|
+
"owner": "metamask",
|
|
1196
|
+
"description": "Read the redacted wallet state (selected account, route, and device) from the running app.",
|
|
1197
|
+
"schema": {
|
|
1198
|
+
"type": "object",
|
|
1199
|
+
"properties": {},
|
|
1200
|
+
"additionalProperties": false
|
|
939
1201
|
},
|
|
940
1202
|
"examples": [
|
|
941
1203
|
{
|
|
@@ -947,18 +1209,16 @@
|
|
|
947
1209
|
}
|
|
948
1210
|
],
|
|
949
1211
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
950
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1212
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1213
|
+
"execution_capabilities": []
|
|
951
1214
|
},
|
|
952
1215
|
{
|
|
953
1216
|
"name": "metamask.perps.read_positions",
|
|
954
1217
|
"owner": "metamask",
|
|
955
|
-
"description": "mobile Read live Perps positions
|
|
1218
|
+
"description": "mobile Read live Perps positions; without a selector, return all live positions.",
|
|
956
1219
|
"schema": {
|
|
957
1220
|
"type": "object",
|
|
958
1221
|
"properties": {
|
|
959
|
-
"action": {
|
|
960
|
-
"const": "metamask.perps.read_positions"
|
|
961
|
-
},
|
|
962
1222
|
"market": {
|
|
963
1223
|
"type": "string",
|
|
964
1224
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -991,7 +1251,41 @@
|
|
|
991
1251
|
},
|
|
992
1252
|
"selector": {
|
|
993
1253
|
"type": "object",
|
|
994
|
-
"
|
|
1254
|
+
"properties": {
|
|
1255
|
+
"mode": {
|
|
1256
|
+
"type": "string",
|
|
1257
|
+
"enum": [
|
|
1258
|
+
"matching",
|
|
1259
|
+
"all"
|
|
1260
|
+
]
|
|
1261
|
+
},
|
|
1262
|
+
"market": {
|
|
1263
|
+
"type": "string"
|
|
1264
|
+
},
|
|
1265
|
+
"symbol": {
|
|
1266
|
+
"type": "string"
|
|
1267
|
+
},
|
|
1268
|
+
"markets": {
|
|
1269
|
+
"type": "array",
|
|
1270
|
+
"items": {
|
|
1271
|
+
"type": "string"
|
|
1272
|
+
}
|
|
1273
|
+
},
|
|
1274
|
+
"symbols": {
|
|
1275
|
+
"type": "array",
|
|
1276
|
+
"items": {
|
|
1277
|
+
"type": "string"
|
|
1278
|
+
}
|
|
1279
|
+
},
|
|
1280
|
+
"side": {
|
|
1281
|
+
"type": "string",
|
|
1282
|
+
"enum": [
|
|
1283
|
+
"long",
|
|
1284
|
+
"short"
|
|
1285
|
+
]
|
|
1286
|
+
}
|
|
1287
|
+
},
|
|
1288
|
+
"additionalProperties": false
|
|
995
1289
|
},
|
|
996
1290
|
"side": {
|
|
997
1291
|
"type": "string",
|
|
@@ -1005,9 +1299,7 @@
|
|
|
1005
1299
|
"type": "number"
|
|
1006
1300
|
}
|
|
1007
1301
|
},
|
|
1008
|
-
"
|
|
1009
|
-
"action"
|
|
1010
|
-
]
|
|
1302
|
+
"additionalProperties": false
|
|
1011
1303
|
},
|
|
1012
1304
|
"examples": [
|
|
1013
1305
|
{
|
|
@@ -1020,18 +1312,16 @@
|
|
|
1020
1312
|
}
|
|
1021
1313
|
],
|
|
1022
1314
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1023
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1315
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1316
|
+
"execution_capabilities": []
|
|
1024
1317
|
},
|
|
1025
1318
|
{
|
|
1026
1319
|
"name": "metamask.perps.read_orders",
|
|
1027
1320
|
"owner": "metamask",
|
|
1028
|
-
"description": "mobile Read live Perps open orders
|
|
1321
|
+
"description": "mobile Read live Perps open orders; without a selector, return all live orders.",
|
|
1029
1322
|
"schema": {
|
|
1030
1323
|
"type": "object",
|
|
1031
1324
|
"properties": {
|
|
1032
|
-
"action": {
|
|
1033
|
-
"const": "metamask.perps.read_orders"
|
|
1034
|
-
},
|
|
1035
1325
|
"market": {
|
|
1036
1326
|
"type": "string",
|
|
1037
1327
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1064,7 +1354,41 @@
|
|
|
1064
1354
|
},
|
|
1065
1355
|
"selector": {
|
|
1066
1356
|
"type": "object",
|
|
1067
|
-
"
|
|
1357
|
+
"properties": {
|
|
1358
|
+
"mode": {
|
|
1359
|
+
"type": "string",
|
|
1360
|
+
"enum": [
|
|
1361
|
+
"matching",
|
|
1362
|
+
"all"
|
|
1363
|
+
]
|
|
1364
|
+
},
|
|
1365
|
+
"market": {
|
|
1366
|
+
"type": "string"
|
|
1367
|
+
},
|
|
1368
|
+
"symbol": {
|
|
1369
|
+
"type": "string"
|
|
1370
|
+
},
|
|
1371
|
+
"markets": {
|
|
1372
|
+
"type": "array",
|
|
1373
|
+
"items": {
|
|
1374
|
+
"type": "string"
|
|
1375
|
+
}
|
|
1376
|
+
},
|
|
1377
|
+
"symbols": {
|
|
1378
|
+
"type": "array",
|
|
1379
|
+
"items": {
|
|
1380
|
+
"type": "string"
|
|
1381
|
+
}
|
|
1382
|
+
},
|
|
1383
|
+
"side": {
|
|
1384
|
+
"type": "string",
|
|
1385
|
+
"enum": [
|
|
1386
|
+
"long",
|
|
1387
|
+
"short"
|
|
1388
|
+
]
|
|
1389
|
+
}
|
|
1390
|
+
},
|
|
1391
|
+
"additionalProperties": false
|
|
1068
1392
|
},
|
|
1069
1393
|
"side": {
|
|
1070
1394
|
"type": "string",
|
|
@@ -1078,9 +1402,7 @@
|
|
|
1078
1402
|
"type": "number"
|
|
1079
1403
|
}
|
|
1080
1404
|
},
|
|
1081
|
-
"
|
|
1082
|
-
"action"
|
|
1083
|
-
]
|
|
1405
|
+
"additionalProperties": false
|
|
1084
1406
|
},
|
|
1085
1407
|
"examples": [
|
|
1086
1408
|
{
|
|
@@ -1093,7 +1415,8 @@
|
|
|
1093
1415
|
}
|
|
1094
1416
|
],
|
|
1095
1417
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1096
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1418
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1419
|
+
"execution_capabilities": []
|
|
1097
1420
|
},
|
|
1098
1421
|
{
|
|
1099
1422
|
"name": "metamask.perps.close_positions",
|
|
@@ -1102,9 +1425,6 @@
|
|
|
1102
1425
|
"schema": {
|
|
1103
1426
|
"type": "object",
|
|
1104
1427
|
"properties": {
|
|
1105
|
-
"action": {
|
|
1106
|
-
"const": "metamask.perps.close_positions"
|
|
1107
|
-
},
|
|
1108
1428
|
"market": {
|
|
1109
1429
|
"type": "string",
|
|
1110
1430
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1137,7 +1457,41 @@
|
|
|
1137
1457
|
},
|
|
1138
1458
|
"selector": {
|
|
1139
1459
|
"type": "object",
|
|
1140
|
-
"
|
|
1460
|
+
"properties": {
|
|
1461
|
+
"mode": {
|
|
1462
|
+
"type": "string",
|
|
1463
|
+
"enum": [
|
|
1464
|
+
"matching",
|
|
1465
|
+
"all"
|
|
1466
|
+
]
|
|
1467
|
+
},
|
|
1468
|
+
"market": {
|
|
1469
|
+
"type": "string"
|
|
1470
|
+
},
|
|
1471
|
+
"symbol": {
|
|
1472
|
+
"type": "string"
|
|
1473
|
+
},
|
|
1474
|
+
"markets": {
|
|
1475
|
+
"type": "array",
|
|
1476
|
+
"items": {
|
|
1477
|
+
"type": "string"
|
|
1478
|
+
}
|
|
1479
|
+
},
|
|
1480
|
+
"symbols": {
|
|
1481
|
+
"type": "array",
|
|
1482
|
+
"items": {
|
|
1483
|
+
"type": "string"
|
|
1484
|
+
}
|
|
1485
|
+
},
|
|
1486
|
+
"side": {
|
|
1487
|
+
"type": "string",
|
|
1488
|
+
"enum": [
|
|
1489
|
+
"long",
|
|
1490
|
+
"short"
|
|
1491
|
+
]
|
|
1492
|
+
}
|
|
1493
|
+
},
|
|
1494
|
+
"additionalProperties": false
|
|
1141
1495
|
},
|
|
1142
1496
|
"side": {
|
|
1143
1497
|
"type": "string",
|
|
@@ -1151,9 +1505,7 @@
|
|
|
1151
1505
|
"type": "number"
|
|
1152
1506
|
}
|
|
1153
1507
|
},
|
|
1154
|
-
"
|
|
1155
|
-
"action"
|
|
1156
|
-
]
|
|
1508
|
+
"additionalProperties": false
|
|
1157
1509
|
},
|
|
1158
1510
|
"examples": [
|
|
1159
1511
|
{
|
|
@@ -1161,8 +1513,7 @@
|
|
|
1161
1513
|
"node": {
|
|
1162
1514
|
"action": "metamask.perps.close_positions",
|
|
1163
1515
|
"mode": "all",
|
|
1164
|
-
"intent": "Close selected Perps positions before continuing"
|
|
1165
|
-
"network": "testnet"
|
|
1516
|
+
"intent": "Close selected Perps positions before continuing"
|
|
1166
1517
|
}
|
|
1167
1518
|
},
|
|
1168
1519
|
{
|
|
@@ -1173,13 +1524,16 @@
|
|
|
1173
1524
|
"BTC",
|
|
1174
1525
|
"ETH"
|
|
1175
1526
|
],
|
|
1176
|
-
"intent": "Close selected Perps positions before continuing"
|
|
1177
|
-
"network": "testnet"
|
|
1527
|
+
"intent": "Close selected Perps positions before continuing"
|
|
1178
1528
|
}
|
|
1179
1529
|
}
|
|
1180
1530
|
],
|
|
1181
1531
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1182
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1532
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1533
|
+
"execution_capabilities": [
|
|
1534
|
+
"app-mutation",
|
|
1535
|
+
"external-mutation"
|
|
1536
|
+
]
|
|
1183
1537
|
},
|
|
1184
1538
|
{
|
|
1185
1539
|
"name": "metamask.perps.close_orders",
|
|
@@ -1188,9 +1542,6 @@
|
|
|
1188
1542
|
"schema": {
|
|
1189
1543
|
"type": "object",
|
|
1190
1544
|
"properties": {
|
|
1191
|
-
"action": {
|
|
1192
|
-
"const": "metamask.perps.close_orders"
|
|
1193
|
-
},
|
|
1194
1545
|
"market": {
|
|
1195
1546
|
"type": "string",
|
|
1196
1547
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1223,7 +1574,41 @@
|
|
|
1223
1574
|
},
|
|
1224
1575
|
"selector": {
|
|
1225
1576
|
"type": "object",
|
|
1226
|
-
"
|
|
1577
|
+
"properties": {
|
|
1578
|
+
"mode": {
|
|
1579
|
+
"type": "string",
|
|
1580
|
+
"enum": [
|
|
1581
|
+
"matching",
|
|
1582
|
+
"all"
|
|
1583
|
+
]
|
|
1584
|
+
},
|
|
1585
|
+
"market": {
|
|
1586
|
+
"type": "string"
|
|
1587
|
+
},
|
|
1588
|
+
"symbol": {
|
|
1589
|
+
"type": "string"
|
|
1590
|
+
},
|
|
1591
|
+
"markets": {
|
|
1592
|
+
"type": "array",
|
|
1593
|
+
"items": {
|
|
1594
|
+
"type": "string"
|
|
1595
|
+
}
|
|
1596
|
+
},
|
|
1597
|
+
"symbols": {
|
|
1598
|
+
"type": "array",
|
|
1599
|
+
"items": {
|
|
1600
|
+
"type": "string"
|
|
1601
|
+
}
|
|
1602
|
+
},
|
|
1603
|
+
"side": {
|
|
1604
|
+
"type": "string",
|
|
1605
|
+
"enum": [
|
|
1606
|
+
"long",
|
|
1607
|
+
"short"
|
|
1608
|
+
]
|
|
1609
|
+
}
|
|
1610
|
+
},
|
|
1611
|
+
"additionalProperties": false
|
|
1227
1612
|
},
|
|
1228
1613
|
"side": {
|
|
1229
1614
|
"type": "string",
|
|
@@ -1237,9 +1622,7 @@
|
|
|
1237
1622
|
"type": "number"
|
|
1238
1623
|
}
|
|
1239
1624
|
},
|
|
1240
|
-
"
|
|
1241
|
-
"action"
|
|
1242
|
-
]
|
|
1625
|
+
"additionalProperties": false
|
|
1243
1626
|
},
|
|
1244
1627
|
"examples": [
|
|
1245
1628
|
{
|
|
@@ -1247,8 +1630,7 @@
|
|
|
1247
1630
|
"node": {
|
|
1248
1631
|
"action": "metamask.perps.close_orders",
|
|
1249
1632
|
"mode": "all",
|
|
1250
|
-
"intent": "Cancel selected Perps orders before continuing"
|
|
1251
|
-
"network": "testnet"
|
|
1633
|
+
"intent": "Cancel selected Perps orders before continuing"
|
|
1252
1634
|
}
|
|
1253
1635
|
},
|
|
1254
1636
|
{
|
|
@@ -1256,13 +1638,16 @@
|
|
|
1256
1638
|
"node": {
|
|
1257
1639
|
"action": "metamask.perps.close_orders",
|
|
1258
1640
|
"market": "BTC",
|
|
1259
|
-
"intent": "Cancel selected Perps orders before continuing"
|
|
1260
|
-
"network": "testnet"
|
|
1641
|
+
"intent": "Cancel selected Perps orders before continuing"
|
|
1261
1642
|
}
|
|
1262
1643
|
}
|
|
1263
1644
|
],
|
|
1264
1645
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1265
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1646
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1647
|
+
"execution_capabilities": [
|
|
1648
|
+
"app-mutation",
|
|
1649
|
+
"external-mutation"
|
|
1650
|
+
]
|
|
1266
1651
|
},
|
|
1267
1652
|
{
|
|
1268
1653
|
"name": "metamask.perps.place_order",
|
|
@@ -1271,9 +1656,6 @@
|
|
|
1271
1656
|
"schema": {
|
|
1272
1657
|
"type": "object",
|
|
1273
1658
|
"properties": {
|
|
1274
|
-
"action": {
|
|
1275
|
-
"const": "metamask.perps.place_order"
|
|
1276
|
-
},
|
|
1277
1659
|
"market": {
|
|
1278
1660
|
"type": "string",
|
|
1279
1661
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1306,7 +1688,41 @@
|
|
|
1306
1688
|
},
|
|
1307
1689
|
"selector": {
|
|
1308
1690
|
"type": "object",
|
|
1309
|
-
"
|
|
1691
|
+
"properties": {
|
|
1692
|
+
"mode": {
|
|
1693
|
+
"type": "string",
|
|
1694
|
+
"enum": [
|
|
1695
|
+
"matching",
|
|
1696
|
+
"all"
|
|
1697
|
+
]
|
|
1698
|
+
},
|
|
1699
|
+
"market": {
|
|
1700
|
+
"type": "string"
|
|
1701
|
+
},
|
|
1702
|
+
"symbol": {
|
|
1703
|
+
"type": "string"
|
|
1704
|
+
},
|
|
1705
|
+
"markets": {
|
|
1706
|
+
"type": "array",
|
|
1707
|
+
"items": {
|
|
1708
|
+
"type": "string"
|
|
1709
|
+
}
|
|
1710
|
+
},
|
|
1711
|
+
"symbols": {
|
|
1712
|
+
"type": "array",
|
|
1713
|
+
"items": {
|
|
1714
|
+
"type": "string"
|
|
1715
|
+
}
|
|
1716
|
+
},
|
|
1717
|
+
"side": {
|
|
1718
|
+
"type": "string",
|
|
1719
|
+
"enum": [
|
|
1720
|
+
"long",
|
|
1721
|
+
"short"
|
|
1722
|
+
]
|
|
1723
|
+
}
|
|
1724
|
+
},
|
|
1725
|
+
"additionalProperties": false
|
|
1310
1726
|
},
|
|
1311
1727
|
"side": {
|
|
1312
1728
|
"type": "string",
|
|
@@ -1332,12 +1748,11 @@
|
|
|
1332
1748
|
"description": "Base asset size when supported."
|
|
1333
1749
|
},
|
|
1334
1750
|
"leverage": {
|
|
1335
|
-
"type": "number"
|
|
1751
|
+
"type": "number",
|
|
1752
|
+
"default": 3
|
|
1336
1753
|
}
|
|
1337
1754
|
},
|
|
1338
|
-
"
|
|
1339
|
-
"action"
|
|
1340
|
-
]
|
|
1755
|
+
"additionalProperties": false
|
|
1341
1756
|
},
|
|
1342
1757
|
"examples": [
|
|
1343
1758
|
{
|
|
@@ -1348,24 +1763,24 @@
|
|
|
1348
1763
|
"side": "long",
|
|
1349
1764
|
"notional": "10",
|
|
1350
1765
|
"leverage": 2,
|
|
1351
|
-
"intent": "Place the requested Perps order"
|
|
1352
|
-
"network": "testnet"
|
|
1766
|
+
"intent": "Place the requested Perps order"
|
|
1353
1767
|
}
|
|
1354
1768
|
}
|
|
1355
1769
|
],
|
|
1356
1770
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1357
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1771
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1772
|
+
"execution_capabilities": [
|
|
1773
|
+
"app-mutation",
|
|
1774
|
+
"external-mutation"
|
|
1775
|
+
]
|
|
1358
1776
|
},
|
|
1359
1777
|
{
|
|
1360
1778
|
"name": "metamask.perps.assert_positions",
|
|
1361
1779
|
"owner": "metamask",
|
|
1362
|
-
"description": "mobile Assert
|
|
1780
|
+
"description": "mobile Assert live Perps positions are present or absent for an explicit market selection or mode=all.",
|
|
1363
1781
|
"schema": {
|
|
1364
1782
|
"type": "object",
|
|
1365
1783
|
"properties": {
|
|
1366
|
-
"action": {
|
|
1367
|
-
"const": "metamask.perps.assert_positions"
|
|
1368
|
-
},
|
|
1369
1784
|
"market": {
|
|
1370
1785
|
"type": "string",
|
|
1371
1786
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1398,7 +1813,41 @@
|
|
|
1398
1813
|
},
|
|
1399
1814
|
"selector": {
|
|
1400
1815
|
"type": "object",
|
|
1401
|
-
"
|
|
1816
|
+
"properties": {
|
|
1817
|
+
"mode": {
|
|
1818
|
+
"type": "string",
|
|
1819
|
+
"enum": [
|
|
1820
|
+
"matching",
|
|
1821
|
+
"all"
|
|
1822
|
+
]
|
|
1823
|
+
},
|
|
1824
|
+
"market": {
|
|
1825
|
+
"type": "string"
|
|
1826
|
+
},
|
|
1827
|
+
"symbol": {
|
|
1828
|
+
"type": "string"
|
|
1829
|
+
},
|
|
1830
|
+
"markets": {
|
|
1831
|
+
"type": "array",
|
|
1832
|
+
"items": {
|
|
1833
|
+
"type": "string"
|
|
1834
|
+
}
|
|
1835
|
+
},
|
|
1836
|
+
"symbols": {
|
|
1837
|
+
"type": "array",
|
|
1838
|
+
"items": {
|
|
1839
|
+
"type": "string"
|
|
1840
|
+
}
|
|
1841
|
+
},
|
|
1842
|
+
"side": {
|
|
1843
|
+
"type": "string",
|
|
1844
|
+
"enum": [
|
|
1845
|
+
"long",
|
|
1846
|
+
"short"
|
|
1847
|
+
]
|
|
1848
|
+
}
|
|
1849
|
+
},
|
|
1850
|
+
"additionalProperties": false
|
|
1402
1851
|
},
|
|
1403
1852
|
"side": {
|
|
1404
1853
|
"type": "string",
|
|
@@ -1424,8 +1873,9 @@
|
|
|
1424
1873
|
}
|
|
1425
1874
|
},
|
|
1426
1875
|
"required": [
|
|
1427
|
-
"
|
|
1428
|
-
]
|
|
1876
|
+
"state"
|
|
1877
|
+
],
|
|
1878
|
+
"additionalProperties": false
|
|
1429
1879
|
},
|
|
1430
1880
|
"examples": [
|
|
1431
1881
|
{
|
|
@@ -1439,18 +1889,16 @@
|
|
|
1439
1889
|
}
|
|
1440
1890
|
],
|
|
1441
1891
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1442
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1892
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
1893
|
+
"execution_capabilities": []
|
|
1443
1894
|
},
|
|
1444
1895
|
{
|
|
1445
1896
|
"name": "metamask.perps.assert_orders",
|
|
1446
1897
|
"owner": "metamask",
|
|
1447
|
-
"description": "mobile Assert
|
|
1898
|
+
"description": "mobile Assert live Perps open orders are present or absent for an explicit market selection or mode=all.",
|
|
1448
1899
|
"schema": {
|
|
1449
1900
|
"type": "object",
|
|
1450
1901
|
"properties": {
|
|
1451
|
-
"action": {
|
|
1452
|
-
"const": "metamask.perps.assert_orders"
|
|
1453
|
-
},
|
|
1454
1902
|
"market": {
|
|
1455
1903
|
"type": "string",
|
|
1456
1904
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1483,7 +1931,41 @@
|
|
|
1483
1931
|
},
|
|
1484
1932
|
"selector": {
|
|
1485
1933
|
"type": "object",
|
|
1486
|
-
"
|
|
1934
|
+
"properties": {
|
|
1935
|
+
"mode": {
|
|
1936
|
+
"type": "string",
|
|
1937
|
+
"enum": [
|
|
1938
|
+
"matching",
|
|
1939
|
+
"all"
|
|
1940
|
+
]
|
|
1941
|
+
},
|
|
1942
|
+
"market": {
|
|
1943
|
+
"type": "string"
|
|
1944
|
+
},
|
|
1945
|
+
"symbol": {
|
|
1946
|
+
"type": "string"
|
|
1947
|
+
},
|
|
1948
|
+
"markets": {
|
|
1949
|
+
"type": "array",
|
|
1950
|
+
"items": {
|
|
1951
|
+
"type": "string"
|
|
1952
|
+
}
|
|
1953
|
+
},
|
|
1954
|
+
"symbols": {
|
|
1955
|
+
"type": "array",
|
|
1956
|
+
"items": {
|
|
1957
|
+
"type": "string"
|
|
1958
|
+
}
|
|
1959
|
+
},
|
|
1960
|
+
"side": {
|
|
1961
|
+
"type": "string",
|
|
1962
|
+
"enum": [
|
|
1963
|
+
"long",
|
|
1964
|
+
"short"
|
|
1965
|
+
]
|
|
1966
|
+
}
|
|
1967
|
+
},
|
|
1968
|
+
"additionalProperties": false
|
|
1487
1969
|
},
|
|
1488
1970
|
"side": {
|
|
1489
1971
|
"type": "string",
|
|
@@ -1509,8 +1991,9 @@
|
|
|
1509
1991
|
}
|
|
1510
1992
|
},
|
|
1511
1993
|
"required": [
|
|
1512
|
-
"
|
|
1513
|
-
]
|
|
1994
|
+
"state"
|
|
1995
|
+
],
|
|
1996
|
+
"additionalProperties": false
|
|
1514
1997
|
},
|
|
1515
1998
|
"examples": [
|
|
1516
1999
|
{
|
|
@@ -1524,7 +2007,8 @@
|
|
|
1524
2007
|
}
|
|
1525
2008
|
],
|
|
1526
2009
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1527
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
2010
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
2011
|
+
"execution_capabilities": []
|
|
1528
2012
|
},
|
|
1529
2013
|
{
|
|
1530
2014
|
"name": "metamask.perps.ensure_positions",
|
|
@@ -1533,9 +2017,6 @@
|
|
|
1533
2017
|
"schema": {
|
|
1534
2018
|
"type": "object",
|
|
1535
2019
|
"properties": {
|
|
1536
|
-
"action": {
|
|
1537
|
-
"const": "metamask.perps.ensure_positions"
|
|
1538
|
-
},
|
|
1539
2020
|
"market": {
|
|
1540
2021
|
"type": "string",
|
|
1541
2022
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1568,7 +2049,41 @@
|
|
|
1568
2049
|
},
|
|
1569
2050
|
"selector": {
|
|
1570
2051
|
"type": "object",
|
|
1571
|
-
"
|
|
2052
|
+
"properties": {
|
|
2053
|
+
"mode": {
|
|
2054
|
+
"type": "string",
|
|
2055
|
+
"enum": [
|
|
2056
|
+
"matching",
|
|
2057
|
+
"all"
|
|
2058
|
+
]
|
|
2059
|
+
},
|
|
2060
|
+
"market": {
|
|
2061
|
+
"type": "string"
|
|
2062
|
+
},
|
|
2063
|
+
"symbol": {
|
|
2064
|
+
"type": "string"
|
|
2065
|
+
},
|
|
2066
|
+
"markets": {
|
|
2067
|
+
"type": "array",
|
|
2068
|
+
"items": {
|
|
2069
|
+
"type": "string"
|
|
2070
|
+
}
|
|
2071
|
+
},
|
|
2072
|
+
"symbols": {
|
|
2073
|
+
"type": "array",
|
|
2074
|
+
"items": {
|
|
2075
|
+
"type": "string"
|
|
2076
|
+
}
|
|
2077
|
+
},
|
|
2078
|
+
"side": {
|
|
2079
|
+
"type": "string",
|
|
2080
|
+
"enum": [
|
|
2081
|
+
"long",
|
|
2082
|
+
"short"
|
|
2083
|
+
]
|
|
2084
|
+
}
|
|
2085
|
+
},
|
|
2086
|
+
"additionalProperties": false
|
|
1572
2087
|
},
|
|
1573
2088
|
"side": {
|
|
1574
2089
|
"type": "string",
|
|
@@ -1594,8 +2109,9 @@
|
|
|
1594
2109
|
}
|
|
1595
2110
|
},
|
|
1596
2111
|
"required": [
|
|
1597
|
-
"
|
|
1598
|
-
]
|
|
2112
|
+
"state"
|
|
2113
|
+
],
|
|
2114
|
+
"additionalProperties": false
|
|
1599
2115
|
},
|
|
1600
2116
|
"examples": [
|
|
1601
2117
|
{
|
|
@@ -1604,8 +2120,7 @@
|
|
|
1604
2120
|
"action": "metamask.perps.ensure_positions",
|
|
1605
2121
|
"state": "none",
|
|
1606
2122
|
"market": "BTC",
|
|
1607
|
-
"intent": "Converge Perps positions to the requested state"
|
|
1608
|
-
"network": "testnet"
|
|
2123
|
+
"intent": "Converge Perps positions to the requested state"
|
|
1609
2124
|
}
|
|
1610
2125
|
},
|
|
1611
2126
|
{
|
|
@@ -1614,13 +2129,16 @@
|
|
|
1614
2129
|
"action": "metamask.perps.ensure_positions",
|
|
1615
2130
|
"state": "none",
|
|
1616
2131
|
"mode": "all",
|
|
1617
|
-
"intent": "Converge Perps positions to the requested state"
|
|
1618
|
-
"network": "testnet"
|
|
2132
|
+
"intent": "Converge Perps positions to the requested state"
|
|
1619
2133
|
}
|
|
1620
2134
|
}
|
|
1621
2135
|
],
|
|
1622
2136
|
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1623
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
2137
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
2138
|
+
"execution_capabilities": [
|
|
2139
|
+
"app-mutation",
|
|
2140
|
+
"external-mutation"
|
|
2141
|
+
]
|
|
1624
2142
|
},
|
|
1625
2143
|
{
|
|
1626
2144
|
"name": "metamask.perps.ensure_orders",
|
|
@@ -1629,9 +2147,6 @@
|
|
|
1629
2147
|
"schema": {
|
|
1630
2148
|
"type": "object",
|
|
1631
2149
|
"properties": {
|
|
1632
|
-
"action": {
|
|
1633
|
-
"const": "metamask.perps.ensure_orders"
|
|
1634
|
-
},
|
|
1635
2150
|
"market": {
|
|
1636
2151
|
"type": "string",
|
|
1637
2152
|
"description": "Single market symbol, e.g. BTC or ETH. Alias: symbol."
|
|
@@ -1662,141 +2177,411 @@
|
|
|
1662
2177
|
],
|
|
1663
2178
|
"description": "matching selects requested symbols; all selects every live item returned by the product."
|
|
1664
2179
|
},
|
|
1665
|
-
"selector": {
|
|
2180
|
+
"selector": {
|
|
2181
|
+
"type": "object",
|
|
2182
|
+
"properties": {
|
|
2183
|
+
"mode": {
|
|
2184
|
+
"type": "string",
|
|
2185
|
+
"enum": [
|
|
2186
|
+
"matching",
|
|
2187
|
+
"all"
|
|
2188
|
+
]
|
|
2189
|
+
},
|
|
2190
|
+
"market": {
|
|
2191
|
+
"type": "string"
|
|
2192
|
+
},
|
|
2193
|
+
"symbol": {
|
|
2194
|
+
"type": "string"
|
|
2195
|
+
},
|
|
2196
|
+
"markets": {
|
|
2197
|
+
"type": "array",
|
|
2198
|
+
"items": {
|
|
2199
|
+
"type": "string"
|
|
2200
|
+
}
|
|
2201
|
+
},
|
|
2202
|
+
"symbols": {
|
|
2203
|
+
"type": "array",
|
|
2204
|
+
"items": {
|
|
2205
|
+
"type": "string"
|
|
2206
|
+
}
|
|
2207
|
+
},
|
|
2208
|
+
"side": {
|
|
2209
|
+
"type": "string",
|
|
2210
|
+
"enum": [
|
|
2211
|
+
"long",
|
|
2212
|
+
"short"
|
|
2213
|
+
]
|
|
2214
|
+
}
|
|
2215
|
+
},
|
|
2216
|
+
"additionalProperties": false
|
|
2217
|
+
},
|
|
2218
|
+
"side": {
|
|
2219
|
+
"type": "string",
|
|
2220
|
+
"enum": [
|
|
2221
|
+
"long",
|
|
2222
|
+
"short"
|
|
2223
|
+
],
|
|
2224
|
+
"description": "Optional position/order side filter."
|
|
2225
|
+
},
|
|
2226
|
+
"timeout_ms": {
|
|
2227
|
+
"type": "number"
|
|
2228
|
+
},
|
|
2229
|
+
"state": {
|
|
2230
|
+
"type": "string",
|
|
2231
|
+
"enum": [
|
|
2232
|
+
"none",
|
|
2233
|
+
"absent",
|
|
2234
|
+
"closed",
|
|
2235
|
+
"open",
|
|
2236
|
+
"present"
|
|
2237
|
+
],
|
|
2238
|
+
"description": "Desired/expected selected collection state."
|
|
2239
|
+
}
|
|
2240
|
+
},
|
|
2241
|
+
"required": [
|
|
2242
|
+
"state"
|
|
2243
|
+
],
|
|
2244
|
+
"additionalProperties": false
|
|
2245
|
+
},
|
|
2246
|
+
"examples": [
|
|
2247
|
+
{
|
|
2248
|
+
"description": "Ensure no open orders before proof window",
|
|
2249
|
+
"node": {
|
|
2250
|
+
"action": "metamask.perps.ensure_orders",
|
|
2251
|
+
"state": "none",
|
|
2252
|
+
"mode": "all",
|
|
2253
|
+
"intent": "Converge Perps orders to the requested state"
|
|
2254
|
+
}
|
|
2255
|
+
}
|
|
2256
|
+
],
|
|
2257
|
+
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
2258
|
+
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof.",
|
|
2259
|
+
"execution_capabilities": [
|
|
2260
|
+
"app-mutation",
|
|
2261
|
+
"external-mutation"
|
|
2262
|
+
]
|
|
2263
|
+
},
|
|
2264
|
+
{
|
|
2265
|
+
"name": "metamask.perps.start_state",
|
|
2266
|
+
"owner": "metamask",
|
|
2267
|
+
"description": "mobile Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Recommended configurable Perps start state that first restores the fixture-backed unlocked wallet, then composes reusable domain operations before the proof window.",
|
|
2268
|
+
"schema": {
|
|
2269
|
+
"type": "object",
|
|
2270
|
+
"properties": {
|
|
2271
|
+
"profile": {
|
|
2272
|
+
"type": "string",
|
|
2273
|
+
"description": "Optional profile such as clean_market_testnet, open_position_testnet, open_order_testnet, or provider_mainnet_readonly."
|
|
2274
|
+
},
|
|
2275
|
+
"account": {
|
|
2276
|
+
"type": "string"
|
|
2277
|
+
},
|
|
2278
|
+
"provider": {
|
|
2279
|
+
"type": "string",
|
|
2280
|
+
"description": "Requested Perps provider, e.g. hyperliquid."
|
|
2281
|
+
},
|
|
2282
|
+
"network": {
|
|
2283
|
+
"type": "string",
|
|
2284
|
+
"enum": [
|
|
2285
|
+
"testnet",
|
|
2286
|
+
"mainnet"
|
|
2287
|
+
]
|
|
2288
|
+
},
|
|
2289
|
+
"market": {
|
|
2290
|
+
"type": "string"
|
|
2291
|
+
},
|
|
2292
|
+
"symbol": {
|
|
2293
|
+
"type": "string"
|
|
2294
|
+
},
|
|
2295
|
+
"markets": {
|
|
2296
|
+
"type": "array",
|
|
2297
|
+
"items": {
|
|
2298
|
+
"type": "string"
|
|
2299
|
+
}
|
|
2300
|
+
},
|
|
2301
|
+
"symbols": {
|
|
2302
|
+
"type": "array",
|
|
2303
|
+
"items": {
|
|
2304
|
+
"type": "string"
|
|
2305
|
+
}
|
|
2306
|
+
},
|
|
2307
|
+
"page": {
|
|
2308
|
+
"description": "Initial Perps page target; omit it to use the profile or market default.",
|
|
2309
|
+
"type": "string",
|
|
2310
|
+
"enum": [
|
|
2311
|
+
"home",
|
|
2312
|
+
"perps",
|
|
2313
|
+
"perps_home",
|
|
2314
|
+
"market",
|
|
2315
|
+
"market_details"
|
|
2316
|
+
]
|
|
2317
|
+
},
|
|
2318
|
+
"positions": {
|
|
2319
|
+
"type": [
|
|
2320
|
+
"object",
|
|
2321
|
+
"boolean"
|
|
2322
|
+
],
|
|
2323
|
+
"properties": {
|
|
2324
|
+
"mode": {
|
|
2325
|
+
"type": "string",
|
|
2326
|
+
"enum": [
|
|
2327
|
+
"matching",
|
|
2328
|
+
"all"
|
|
2329
|
+
]
|
|
2330
|
+
},
|
|
2331
|
+
"market": {
|
|
2332
|
+
"type": "string"
|
|
2333
|
+
},
|
|
2334
|
+
"symbol": {
|
|
2335
|
+
"type": "string"
|
|
2336
|
+
},
|
|
2337
|
+
"markets": {
|
|
2338
|
+
"type": "array",
|
|
2339
|
+
"items": {
|
|
2340
|
+
"type": "string"
|
|
2341
|
+
}
|
|
2342
|
+
},
|
|
2343
|
+
"symbols": {
|
|
2344
|
+
"type": "array",
|
|
2345
|
+
"items": {
|
|
2346
|
+
"type": "string"
|
|
2347
|
+
}
|
|
2348
|
+
},
|
|
2349
|
+
"side": {
|
|
2350
|
+
"type": "string",
|
|
2351
|
+
"enum": [
|
|
2352
|
+
"long",
|
|
2353
|
+
"short"
|
|
2354
|
+
]
|
|
2355
|
+
},
|
|
2356
|
+
"state": {
|
|
2357
|
+
"type": "string",
|
|
2358
|
+
"enum": [
|
|
2359
|
+
"none",
|
|
2360
|
+
"closed",
|
|
2361
|
+
"absent",
|
|
2362
|
+
"open",
|
|
2363
|
+
"present"
|
|
2364
|
+
]
|
|
2365
|
+
},
|
|
2366
|
+
"amount": {
|
|
2367
|
+
"type": [
|
|
2368
|
+
"string",
|
|
2369
|
+
"number"
|
|
2370
|
+
]
|
|
2371
|
+
},
|
|
2372
|
+
"notional": {
|
|
2373
|
+
"type": [
|
|
2374
|
+
"string",
|
|
2375
|
+
"number"
|
|
2376
|
+
]
|
|
2377
|
+
},
|
|
2378
|
+
"size": {
|
|
2379
|
+
"type": [
|
|
2380
|
+
"string",
|
|
2381
|
+
"number"
|
|
2382
|
+
]
|
|
2383
|
+
},
|
|
2384
|
+
"leverage": {
|
|
2385
|
+
"type": "number"
|
|
2386
|
+
},
|
|
2387
|
+
"order_type": {
|
|
2388
|
+
"type": "string"
|
|
2389
|
+
},
|
|
2390
|
+
"orderType": {
|
|
2391
|
+
"type": "string"
|
|
2392
|
+
},
|
|
2393
|
+
"limit_price": {
|
|
2394
|
+
"type": "number"
|
|
2395
|
+
},
|
|
2396
|
+
"limitPrice": {
|
|
2397
|
+
"type": "number"
|
|
2398
|
+
},
|
|
2399
|
+
"offset_pct": {
|
|
2400
|
+
"type": "number"
|
|
2401
|
+
},
|
|
2402
|
+
"offsetPct": {
|
|
2403
|
+
"type": "number"
|
|
2404
|
+
},
|
|
2405
|
+
"current_price": {
|
|
2406
|
+
"type": "number"
|
|
2407
|
+
},
|
|
2408
|
+
"currentPrice": {
|
|
2409
|
+
"type": "number"
|
|
2410
|
+
},
|
|
2411
|
+
"max_slippage_bps": {
|
|
2412
|
+
"type": "number"
|
|
2413
|
+
},
|
|
2414
|
+
"maxSlippageBps": {
|
|
2415
|
+
"type": "number"
|
|
2416
|
+
},
|
|
2417
|
+
"close_attempts": {
|
|
2418
|
+
"type": "integer"
|
|
2419
|
+
},
|
|
2420
|
+
"close_retry_delay_ms": {
|
|
2421
|
+
"type": "integer"
|
|
2422
|
+
},
|
|
2423
|
+
"timeout_ms": {
|
|
2424
|
+
"type": "number"
|
|
2425
|
+
}
|
|
2426
|
+
},
|
|
2427
|
+
"additionalProperties": false
|
|
2428
|
+
},
|
|
2429
|
+
"orders": {
|
|
2430
|
+
"type": [
|
|
2431
|
+
"object",
|
|
2432
|
+
"boolean"
|
|
2433
|
+
],
|
|
2434
|
+
"properties": {
|
|
2435
|
+
"mode": {
|
|
2436
|
+
"type": "string",
|
|
2437
|
+
"enum": [
|
|
2438
|
+
"matching",
|
|
2439
|
+
"all"
|
|
2440
|
+
]
|
|
2441
|
+
},
|
|
2442
|
+
"market": {
|
|
2443
|
+
"type": "string"
|
|
2444
|
+
},
|
|
2445
|
+
"symbol": {
|
|
2446
|
+
"type": "string"
|
|
2447
|
+
},
|
|
2448
|
+
"markets": {
|
|
2449
|
+
"type": "array",
|
|
2450
|
+
"items": {
|
|
2451
|
+
"type": "string"
|
|
2452
|
+
}
|
|
2453
|
+
},
|
|
2454
|
+
"symbols": {
|
|
2455
|
+
"type": "array",
|
|
2456
|
+
"items": {
|
|
2457
|
+
"type": "string"
|
|
2458
|
+
}
|
|
2459
|
+
},
|
|
2460
|
+
"side": {
|
|
2461
|
+
"type": "string",
|
|
2462
|
+
"enum": [
|
|
2463
|
+
"long",
|
|
2464
|
+
"short"
|
|
2465
|
+
]
|
|
2466
|
+
},
|
|
2467
|
+
"state": {
|
|
2468
|
+
"type": "string",
|
|
2469
|
+
"enum": [
|
|
2470
|
+
"none",
|
|
2471
|
+
"closed",
|
|
2472
|
+
"absent",
|
|
2473
|
+
"open",
|
|
2474
|
+
"present"
|
|
2475
|
+
]
|
|
2476
|
+
},
|
|
2477
|
+
"amount": {
|
|
2478
|
+
"type": [
|
|
2479
|
+
"string",
|
|
2480
|
+
"number"
|
|
2481
|
+
]
|
|
2482
|
+
},
|
|
2483
|
+
"notional": {
|
|
2484
|
+
"type": [
|
|
2485
|
+
"string",
|
|
2486
|
+
"number"
|
|
2487
|
+
]
|
|
2488
|
+
},
|
|
2489
|
+
"size": {
|
|
2490
|
+
"type": [
|
|
2491
|
+
"string",
|
|
2492
|
+
"number"
|
|
2493
|
+
]
|
|
2494
|
+
},
|
|
2495
|
+
"leverage": {
|
|
2496
|
+
"type": "number"
|
|
2497
|
+
},
|
|
2498
|
+
"order_type": {
|
|
2499
|
+
"type": "string"
|
|
2500
|
+
},
|
|
2501
|
+
"orderType": {
|
|
2502
|
+
"type": "string"
|
|
2503
|
+
},
|
|
2504
|
+
"limit_price": {
|
|
2505
|
+
"type": "number"
|
|
2506
|
+
},
|
|
2507
|
+
"limitPrice": {
|
|
2508
|
+
"type": "number"
|
|
2509
|
+
},
|
|
2510
|
+
"offset_pct": {
|
|
2511
|
+
"type": "number"
|
|
2512
|
+
},
|
|
2513
|
+
"offsetPct": {
|
|
2514
|
+
"type": "number"
|
|
2515
|
+
},
|
|
2516
|
+
"current_price": {
|
|
2517
|
+
"type": "number"
|
|
2518
|
+
},
|
|
2519
|
+
"currentPrice": {
|
|
2520
|
+
"type": "number"
|
|
2521
|
+
},
|
|
2522
|
+
"max_slippage_bps": {
|
|
2523
|
+
"type": "number"
|
|
2524
|
+
},
|
|
2525
|
+
"maxSlippageBps": {
|
|
2526
|
+
"type": "number"
|
|
2527
|
+
},
|
|
2528
|
+
"close_attempts": {
|
|
2529
|
+
"type": "integer"
|
|
2530
|
+
},
|
|
2531
|
+
"close_retry_delay_ms": {
|
|
2532
|
+
"type": "integer"
|
|
2533
|
+
},
|
|
2534
|
+
"timeout_ms": {
|
|
2535
|
+
"type": "number"
|
|
2536
|
+
}
|
|
2537
|
+
},
|
|
2538
|
+
"additionalProperties": false
|
|
2539
|
+
},
|
|
2540
|
+
"hud": {
|
|
1666
2541
|
"type": "object",
|
|
1667
|
-
"
|
|
1668
|
-
|
|
1669
|
-
"side": {
|
|
1670
|
-
"type": "string",
|
|
1671
|
-
"enum": [
|
|
1672
|
-
"long",
|
|
1673
|
-
"short"
|
|
1674
|
-
],
|
|
1675
|
-
"description": "Optional position/order side filter."
|
|
2542
|
+
"properties": {},
|
|
2543
|
+
"additionalProperties": false
|
|
1676
2544
|
},
|
|
1677
2545
|
"timeout_ms": {
|
|
1678
2546
|
"type": "number"
|
|
1679
2547
|
},
|
|
1680
|
-
"
|
|
1681
|
-
"type": "string",
|
|
1682
|
-
"enum": [
|
|
1683
|
-
"none",
|
|
1684
|
-
"absent",
|
|
1685
|
-
"closed",
|
|
1686
|
-
"open",
|
|
1687
|
-
"present"
|
|
1688
|
-
],
|
|
1689
|
-
"description": "Desired/expected selected collection state."
|
|
1690
|
-
}
|
|
1691
|
-
},
|
|
1692
|
-
"required": [
|
|
1693
|
-
"action"
|
|
1694
|
-
]
|
|
1695
|
-
},
|
|
1696
|
-
"examples": [
|
|
1697
|
-
{
|
|
1698
|
-
"description": "Ensure no open orders before proof window",
|
|
1699
|
-
"node": {
|
|
1700
|
-
"action": "metamask.perps.ensure_orders",
|
|
1701
|
-
"state": "none",
|
|
1702
|
-
"mode": "all",
|
|
1703
|
-
"intent": "Converge Perps orders to the requested state",
|
|
1704
|
-
"network": "testnet"
|
|
1705
|
-
}
|
|
1706
|
-
}
|
|
1707
|
-
],
|
|
1708
|
-
"proof_effect": "E2E validation must record this action in trace.json; live-proof actions include liveAdapter/proofPath or target runtime output.",
|
|
1709
|
-
"safety_notes": "Must not inject mid-recipe UI/app state to fabricate proof."
|
|
1710
|
-
},
|
|
1711
|
-
{
|
|
1712
|
-
"name": "metamask.perps.start_state",
|
|
1713
|
-
"owner": "metamask",
|
|
1714
|
-
"description": "mobile Default to testnet for Perps mutations; mainnet is read-only unless explicitly requested. Recommended configurable Perps start state that first restores the fixture-backed unlocked wallet, then composes reusable domain operations before the proof window.",
|
|
1715
|
-
"schema": {
|
|
1716
|
-
"type": "object",
|
|
1717
|
-
"properties": {
|
|
1718
|
-
"action": {
|
|
1719
|
-
"const": "metamask.perps.start_state"
|
|
1720
|
-
},
|
|
1721
|
-
"profile": {
|
|
1722
|
-
"type": "string",
|
|
1723
|
-
"description": "Optional profile such as clean_market_testnet, open_position_testnet, open_order_testnet, or provider_mainnet_readonly."
|
|
1724
|
-
},
|
|
1725
|
-
"account": {
|
|
1726
|
-
"type": "string"
|
|
1727
|
-
},
|
|
1728
|
-
"provider": {
|
|
1729
|
-
"type": "string",
|
|
1730
|
-
"description": "Requested Perps provider, e.g. hyperliquid."
|
|
1731
|
-
},
|
|
1732
|
-
"network": {
|
|
2548
|
+
"side": {
|
|
1733
2549
|
"type": "string",
|
|
1734
2550
|
"enum": [
|
|
1735
|
-
"
|
|
1736
|
-
"
|
|
2551
|
+
"long",
|
|
2552
|
+
"short"
|
|
1737
2553
|
]
|
|
1738
2554
|
},
|
|
1739
|
-
"
|
|
1740
|
-
"type": "string"
|
|
1741
|
-
},
|
|
1742
|
-
"symbol": {
|
|
2555
|
+
"account_name": {
|
|
1743
2556
|
"type": "string"
|
|
1744
2557
|
},
|
|
1745
|
-
"
|
|
1746
|
-
"type": "
|
|
1747
|
-
"items": {
|
|
1748
|
-
"type": "string"
|
|
1749
|
-
}
|
|
1750
|
-
},
|
|
1751
|
-
"symbols": {
|
|
1752
|
-
"type": "array",
|
|
1753
|
-
"items": {
|
|
1754
|
-
"type": "string"
|
|
1755
|
-
}
|
|
1756
|
-
},
|
|
1757
|
-
"page": {
|
|
1758
|
-
"oneOf": [
|
|
1759
|
-
{
|
|
1760
|
-
"type": "string"
|
|
1761
|
-
},
|
|
1762
|
-
{
|
|
1763
|
-
"const": false
|
|
1764
|
-
}
|
|
1765
|
-
],
|
|
1766
|
-
"description": "Final page target; false skips navigation for teardown."
|
|
2558
|
+
"readyToTrade": {
|
|
2559
|
+
"type": "boolean"
|
|
1767
2560
|
},
|
|
1768
|
-
"
|
|
1769
|
-
"
|
|
1770
|
-
|
|
1771
|
-
|
|
2561
|
+
"balance": {
|
|
2562
|
+
"type": "object",
|
|
2563
|
+
"properties": {
|
|
2564
|
+
"minWithdrawableUsd": {
|
|
2565
|
+
"type": "number"
|
|
1772
2566
|
},
|
|
1773
|
-
{
|
|
1774
|
-
"
|
|
1775
|
-
}
|
|
1776
|
-
],
|
|
1777
|
-
"description": "Desired position baseline or false to skip."
|
|
1778
|
-
},
|
|
1779
|
-
"orders": {
|
|
1780
|
-
"oneOf": [
|
|
1781
|
-
{
|
|
1782
|
-
"type": "object"
|
|
2567
|
+
"minUsd": {
|
|
2568
|
+
"type": "number"
|
|
1783
2569
|
},
|
|
1784
|
-
{
|
|
1785
|
-
"
|
|
2570
|
+
"minSpendableUsd": {
|
|
2571
|
+
"type": "number"
|
|
1786
2572
|
}
|
|
1787
|
-
|
|
1788
|
-
"
|
|
1789
|
-
},
|
|
1790
|
-
"hud": {
|
|
1791
|
-
"type": "object"
|
|
2573
|
+
},
|
|
2574
|
+
"additionalProperties": false
|
|
1792
2575
|
},
|
|
1793
|
-
"
|
|
1794
|
-
"type": "
|
|
2576
|
+
"mode": {
|
|
2577
|
+
"type": "string",
|
|
2578
|
+
"enum": [
|
|
2579
|
+
"matching",
|
|
2580
|
+
"all"
|
|
2581
|
+
]
|
|
1795
2582
|
}
|
|
1796
2583
|
},
|
|
1797
|
-
"
|
|
1798
|
-
"action"
|
|
1799
|
-
]
|
|
2584
|
+
"additionalProperties": false
|
|
1800
2585
|
},
|
|
1801
2586
|
"examples": [
|
|
1802
2587
|
{
|
|
@@ -1833,7 +2618,11 @@
|
|
|
1833
2618
|
}
|
|
1834
2619
|
],
|
|
1835
2620
|
"proof_effect": "Runs in setup/teardown phase and must be visible in trace.json; proof videos can keep this as trace-only setup.",
|
|
1836
|
-
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof."
|
|
2621
|
+
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof.",
|
|
2622
|
+
"execution_capabilities": [
|
|
2623
|
+
"app-mutation",
|
|
2624
|
+
"external-mutation"
|
|
2625
|
+
]
|
|
1837
2626
|
},
|
|
1838
2627
|
{
|
|
1839
2628
|
"name": "metamask.perps.teardown_state",
|
|
@@ -1842,9 +2631,6 @@
|
|
|
1842
2631
|
"schema": {
|
|
1843
2632
|
"type": "object",
|
|
1844
2633
|
"properties": {
|
|
1845
|
-
"action": {
|
|
1846
|
-
"const": "metamask.perps.teardown_state"
|
|
1847
|
-
},
|
|
1848
2634
|
"profile": {
|
|
1849
2635
|
"type": "string",
|
|
1850
2636
|
"description": "Optional profile such as clean_market_testnet, open_position_testnet, open_order_testnet, or provider_mainnet_readonly."
|
|
@@ -1882,48 +2668,287 @@
|
|
|
1882
2668
|
}
|
|
1883
2669
|
},
|
|
1884
2670
|
"page": {
|
|
1885
|
-
"
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
{
|
|
1890
|
-
"const": false
|
|
1891
|
-
}
|
|
2671
|
+
"description": "Final page target; false skips navigation for teardown.",
|
|
2672
|
+
"type": [
|
|
2673
|
+
"string",
|
|
2674
|
+
"boolean"
|
|
1892
2675
|
],
|
|
1893
|
-
"
|
|
2676
|
+
"enum": [
|
|
2677
|
+
"home",
|
|
2678
|
+
"perps",
|
|
2679
|
+
"perps_home",
|
|
2680
|
+
"market",
|
|
2681
|
+
"market_details",
|
|
2682
|
+
false
|
|
2683
|
+
]
|
|
1894
2684
|
},
|
|
1895
2685
|
"positions": {
|
|
1896
|
-
"
|
|
1897
|
-
|
|
1898
|
-
|
|
2686
|
+
"type": [
|
|
2687
|
+
"object",
|
|
2688
|
+
"boolean"
|
|
2689
|
+
],
|
|
2690
|
+
"properties": {
|
|
2691
|
+
"mode": {
|
|
2692
|
+
"type": "string",
|
|
2693
|
+
"enum": [
|
|
2694
|
+
"matching",
|
|
2695
|
+
"all"
|
|
2696
|
+
]
|
|
1899
2697
|
},
|
|
1900
|
-
{
|
|
1901
|
-
"
|
|
2698
|
+
"market": {
|
|
2699
|
+
"type": "string"
|
|
2700
|
+
},
|
|
2701
|
+
"symbol": {
|
|
2702
|
+
"type": "string"
|
|
2703
|
+
},
|
|
2704
|
+
"markets": {
|
|
2705
|
+
"type": "array",
|
|
2706
|
+
"items": {
|
|
2707
|
+
"type": "string"
|
|
2708
|
+
}
|
|
2709
|
+
},
|
|
2710
|
+
"symbols": {
|
|
2711
|
+
"type": "array",
|
|
2712
|
+
"items": {
|
|
2713
|
+
"type": "string"
|
|
2714
|
+
}
|
|
2715
|
+
},
|
|
2716
|
+
"side": {
|
|
2717
|
+
"type": "string",
|
|
2718
|
+
"enum": [
|
|
2719
|
+
"long",
|
|
2720
|
+
"short"
|
|
2721
|
+
]
|
|
2722
|
+
},
|
|
2723
|
+
"state": {
|
|
2724
|
+
"type": "string",
|
|
2725
|
+
"enum": [
|
|
2726
|
+
"none",
|
|
2727
|
+
"closed",
|
|
2728
|
+
"absent",
|
|
2729
|
+
"open",
|
|
2730
|
+
"present"
|
|
2731
|
+
]
|
|
2732
|
+
},
|
|
2733
|
+
"amount": {
|
|
2734
|
+
"type": [
|
|
2735
|
+
"string",
|
|
2736
|
+
"number"
|
|
2737
|
+
]
|
|
2738
|
+
},
|
|
2739
|
+
"notional": {
|
|
2740
|
+
"type": [
|
|
2741
|
+
"string",
|
|
2742
|
+
"number"
|
|
2743
|
+
]
|
|
2744
|
+
},
|
|
2745
|
+
"size": {
|
|
2746
|
+
"type": [
|
|
2747
|
+
"string",
|
|
2748
|
+
"number"
|
|
2749
|
+
]
|
|
2750
|
+
},
|
|
2751
|
+
"leverage": {
|
|
2752
|
+
"type": "number"
|
|
2753
|
+
},
|
|
2754
|
+
"order_type": {
|
|
2755
|
+
"type": "string"
|
|
2756
|
+
},
|
|
2757
|
+
"orderType": {
|
|
2758
|
+
"type": "string"
|
|
2759
|
+
},
|
|
2760
|
+
"limit_price": {
|
|
2761
|
+
"type": "number"
|
|
2762
|
+
},
|
|
2763
|
+
"limitPrice": {
|
|
2764
|
+
"type": "number"
|
|
2765
|
+
},
|
|
2766
|
+
"offset_pct": {
|
|
2767
|
+
"type": "number"
|
|
2768
|
+
},
|
|
2769
|
+
"offsetPct": {
|
|
2770
|
+
"type": "number"
|
|
2771
|
+
},
|
|
2772
|
+
"current_price": {
|
|
2773
|
+
"type": "number"
|
|
2774
|
+
},
|
|
2775
|
+
"currentPrice": {
|
|
2776
|
+
"type": "number"
|
|
2777
|
+
},
|
|
2778
|
+
"max_slippage_bps": {
|
|
2779
|
+
"type": "number"
|
|
2780
|
+
},
|
|
2781
|
+
"maxSlippageBps": {
|
|
2782
|
+
"type": "number"
|
|
2783
|
+
},
|
|
2784
|
+
"close_attempts": {
|
|
2785
|
+
"type": "integer"
|
|
2786
|
+
},
|
|
2787
|
+
"close_retry_delay_ms": {
|
|
2788
|
+
"type": "integer"
|
|
2789
|
+
},
|
|
2790
|
+
"timeout_ms": {
|
|
2791
|
+
"type": "number"
|
|
1902
2792
|
}
|
|
1903
|
-
|
|
1904
|
-
"
|
|
2793
|
+
},
|
|
2794
|
+
"additionalProperties": false
|
|
1905
2795
|
},
|
|
1906
2796
|
"orders": {
|
|
1907
|
-
"
|
|
1908
|
-
|
|
1909
|
-
|
|
2797
|
+
"type": [
|
|
2798
|
+
"object",
|
|
2799
|
+
"boolean"
|
|
2800
|
+
],
|
|
2801
|
+
"properties": {
|
|
2802
|
+
"mode": {
|
|
2803
|
+
"type": "string",
|
|
2804
|
+
"enum": [
|
|
2805
|
+
"matching",
|
|
2806
|
+
"all"
|
|
2807
|
+
]
|
|
1910
2808
|
},
|
|
1911
|
-
{
|
|
1912
|
-
"
|
|
2809
|
+
"market": {
|
|
2810
|
+
"type": "string"
|
|
2811
|
+
},
|
|
2812
|
+
"symbol": {
|
|
2813
|
+
"type": "string"
|
|
2814
|
+
},
|
|
2815
|
+
"markets": {
|
|
2816
|
+
"type": "array",
|
|
2817
|
+
"items": {
|
|
2818
|
+
"type": "string"
|
|
2819
|
+
}
|
|
2820
|
+
},
|
|
2821
|
+
"symbols": {
|
|
2822
|
+
"type": "array",
|
|
2823
|
+
"items": {
|
|
2824
|
+
"type": "string"
|
|
2825
|
+
}
|
|
2826
|
+
},
|
|
2827
|
+
"side": {
|
|
2828
|
+
"type": "string",
|
|
2829
|
+
"enum": [
|
|
2830
|
+
"long",
|
|
2831
|
+
"short"
|
|
2832
|
+
]
|
|
2833
|
+
},
|
|
2834
|
+
"state": {
|
|
2835
|
+
"type": "string",
|
|
2836
|
+
"enum": [
|
|
2837
|
+
"none",
|
|
2838
|
+
"closed",
|
|
2839
|
+
"absent",
|
|
2840
|
+
"open",
|
|
2841
|
+
"present"
|
|
2842
|
+
]
|
|
2843
|
+
},
|
|
2844
|
+
"amount": {
|
|
2845
|
+
"type": [
|
|
2846
|
+
"string",
|
|
2847
|
+
"number"
|
|
2848
|
+
]
|
|
2849
|
+
},
|
|
2850
|
+
"notional": {
|
|
2851
|
+
"type": [
|
|
2852
|
+
"string",
|
|
2853
|
+
"number"
|
|
2854
|
+
]
|
|
2855
|
+
},
|
|
2856
|
+
"size": {
|
|
2857
|
+
"type": [
|
|
2858
|
+
"string",
|
|
2859
|
+
"number"
|
|
2860
|
+
]
|
|
2861
|
+
},
|
|
2862
|
+
"leverage": {
|
|
2863
|
+
"type": "number"
|
|
2864
|
+
},
|
|
2865
|
+
"order_type": {
|
|
2866
|
+
"type": "string"
|
|
2867
|
+
},
|
|
2868
|
+
"orderType": {
|
|
2869
|
+
"type": "string"
|
|
2870
|
+
},
|
|
2871
|
+
"limit_price": {
|
|
2872
|
+
"type": "number"
|
|
2873
|
+
},
|
|
2874
|
+
"limitPrice": {
|
|
2875
|
+
"type": "number"
|
|
2876
|
+
},
|
|
2877
|
+
"offset_pct": {
|
|
2878
|
+
"type": "number"
|
|
2879
|
+
},
|
|
2880
|
+
"offsetPct": {
|
|
2881
|
+
"type": "number"
|
|
2882
|
+
},
|
|
2883
|
+
"current_price": {
|
|
2884
|
+
"type": "number"
|
|
2885
|
+
},
|
|
2886
|
+
"currentPrice": {
|
|
2887
|
+
"type": "number"
|
|
2888
|
+
},
|
|
2889
|
+
"max_slippage_bps": {
|
|
2890
|
+
"type": "number"
|
|
2891
|
+
},
|
|
2892
|
+
"maxSlippageBps": {
|
|
2893
|
+
"type": "number"
|
|
2894
|
+
},
|
|
2895
|
+
"close_attempts": {
|
|
2896
|
+
"type": "integer"
|
|
2897
|
+
},
|
|
2898
|
+
"close_retry_delay_ms": {
|
|
2899
|
+
"type": "integer"
|
|
2900
|
+
},
|
|
2901
|
+
"timeout_ms": {
|
|
2902
|
+
"type": "number"
|
|
1913
2903
|
}
|
|
1914
|
-
|
|
1915
|
-
"
|
|
2904
|
+
},
|
|
2905
|
+
"additionalProperties": false
|
|
1916
2906
|
},
|
|
1917
2907
|
"hud": {
|
|
1918
|
-
"type": "object"
|
|
2908
|
+
"type": "object",
|
|
2909
|
+
"properties": {},
|
|
2910
|
+
"additionalProperties": false
|
|
1919
2911
|
},
|
|
1920
2912
|
"timeout_ms": {
|
|
1921
2913
|
"type": "number"
|
|
2914
|
+
},
|
|
2915
|
+
"side": {
|
|
2916
|
+
"type": "string",
|
|
2917
|
+
"enum": [
|
|
2918
|
+
"long",
|
|
2919
|
+
"short"
|
|
2920
|
+
]
|
|
2921
|
+
},
|
|
2922
|
+
"account_name": {
|
|
2923
|
+
"type": "string"
|
|
2924
|
+
},
|
|
2925
|
+
"readyToTrade": {
|
|
2926
|
+
"type": "boolean"
|
|
2927
|
+
},
|
|
2928
|
+
"balance": {
|
|
2929
|
+
"type": "object",
|
|
2930
|
+
"properties": {
|
|
2931
|
+
"minWithdrawableUsd": {
|
|
2932
|
+
"type": "number"
|
|
2933
|
+
},
|
|
2934
|
+
"minUsd": {
|
|
2935
|
+
"type": "number"
|
|
2936
|
+
},
|
|
2937
|
+
"minSpendableUsd": {
|
|
2938
|
+
"type": "number"
|
|
2939
|
+
}
|
|
2940
|
+
},
|
|
2941
|
+
"additionalProperties": false
|
|
2942
|
+
},
|
|
2943
|
+
"mode": {
|
|
2944
|
+
"type": "string",
|
|
2945
|
+
"enum": [
|
|
2946
|
+
"matching",
|
|
2947
|
+
"all"
|
|
2948
|
+
]
|
|
1922
2949
|
}
|
|
1923
2950
|
},
|
|
1924
|
-
"
|
|
1925
|
-
"action"
|
|
1926
|
-
]
|
|
2951
|
+
"additionalProperties": false
|
|
1927
2952
|
},
|
|
1928
2953
|
"examples": [
|
|
1929
2954
|
{
|
|
@@ -1951,23 +2976,11 @@
|
|
|
1951
2976
|
}
|
|
1952
2977
|
],
|
|
1953
2978
|
"proof_effect": "Runs in setup/teardown phase and must be visible in trace.json; proof videos can keep this as trace-only setup.",
|
|
1954
|
-
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof."
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
"name": "wallet.redacted_state",
|
|
1960
|
-
"description": "Redacted wallet state reported by metamask.wallet.read_state."
|
|
1961
|
-
},
|
|
1962
|
-
{
|
|
1963
|
-
"name": "perps.positions",
|
|
1964
|
-
"description": "Normalized Perps position state."
|
|
1965
|
-
}
|
|
1966
|
-
],
|
|
1967
|
-
"pre_conditions": [
|
|
1968
|
-
{
|
|
1969
|
-
"id": "no-mid-recipe-state-injection",
|
|
1970
|
-
"description": "Recipes must drive real supported UI/app/API paths for proof state."
|
|
2979
|
+
"safety_notes": "Composes supported app/API paths and must not mutate React/Redux/MobX/DOM/local storage to fabricate proof.",
|
|
2980
|
+
"execution_capabilities": [
|
|
2981
|
+
"app-mutation",
|
|
2982
|
+
"external-mutation"
|
|
2983
|
+
]
|
|
1971
2984
|
}
|
|
1972
2985
|
],
|
|
1973
2986
|
"native_bindings": [
|
|
@@ -2067,6 +3080,10 @@
|
|
|
2067
3080
|
"action": "metamask.wallet.select_account",
|
|
2068
3081
|
"implementation": "@metamask/recipe-runner/mobile/wallet"
|
|
2069
3082
|
},
|
|
3083
|
+
{
|
|
3084
|
+
"action": "metamask.wallet.list_accounts",
|
|
3085
|
+
"implementation": "@metamask/recipe-runner/mobile/wallet"
|
|
3086
|
+
},
|
|
2070
3087
|
{
|
|
2071
3088
|
"action": "metamask.wallet.read_state",
|
|
2072
3089
|
"implementation": "@metamask/recipe-runner/mobile/wallet"
|
|
@@ -2115,9 +3132,5 @@
|
|
|
2115
3132
|
"action": "metamask.perps.teardown_state",
|
|
2116
3133
|
"implementation": "@metamask/recipe-runner/mobile/perps-domain-dispatcher"
|
|
2117
3134
|
}
|
|
2118
|
-
]
|
|
2119
|
-
"capability_notes": [
|
|
2120
|
-
"Perps safety: default to testnet for setup and order/position mutations. Mainnet is read-only unless the user explicitly requests a mainnet mutation."
|
|
2121
|
-
],
|
|
2122
|
-
"action_profiles": []
|
|
3135
|
+
]
|
|
2123
3136
|
}
|