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