@deeeed/metamask-harness 0.81.0 → 0.82.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/adapters/manifest.json +51 -51
  3. package/adapters/{terminal → web-dapp}/cleanup.mjs +9 -9
  4. package/adapters/{terminal → web-dapp}/inject.mjs +14 -14
  5. package/adapters/{terminal → web-dapp}/launch.mjs +23 -24
  6. package/adapters/web-dapp/lib/blocked-hosts.mjs +24 -0
  7. package/adapters/{terminal → web-dapp}/lib/cdp-client.mjs +1 -1
  8. package/adapters/{terminal → web-dapp}/lib/display.mjs +1 -1
  9. package/adapters/{terminal → web-dapp}/lib/hud.mjs +1 -1
  10. package/adapters/web-dapp/lib/policy.mjs +79 -0
  11. package/adapters/{terminal → web-dapp}/lib/processes.mjs +8 -8
  12. package/adapters/{terminal → web-dapp}/lib/readiness.mjs +15 -25
  13. package/adapters/{terminal → web-dapp}/stop.mjs +5 -4
  14. package/adapters/{terminal → web-dapp}/verify.mjs +11 -15
  15. package/adapters/{terminal → web-dapp}/wallet-host.mjs +10 -11
  16. package/dist/adapters/extension/run.js +5 -28
  17. package/dist/adapters/plugin-surface.js +98 -0
  18. package/dist/adapters/surface.js +1 -1
  19. package/dist/adapters/{terminal → web-dapp}/actions.js +7 -7
  20. package/dist/adapters/web-dapp/console-capture.js +63 -0
  21. package/dist/adapters/web-dapp/doctor-checks.js +33 -0
  22. package/dist/adapters/{terminal → web-dapp}/launch.js +21 -22
  23. package/dist/adapters/web-dapp/overlay.js +21 -0
  24. package/dist/adapters/web-dapp/readiness.js +10 -0
  25. package/dist/adapters/{terminal → web-dapp}/run.js +15 -15
  26. package/dist/adapters/{terminal → web-dapp}/stop.js +5 -4
  27. package/dist/adapters/web-dapp/surface.js +149 -0
  28. package/dist/cli.js +3 -0
  29. package/dist/command-contract.js +29 -7
  30. package/dist/commands/check.js +5 -4
  31. package/dist/commands/doctor.js +19 -2
  32. package/dist/commands/farmslot-ready.js +1 -0
  33. package/dist/commands/help.js +1 -1
  34. package/dist/commands/launch/device.js +5 -5
  35. package/dist/commands/self-test.js +9 -5
  36. package/dist/engine.js +6 -16
  37. package/dist/manifest.js +48 -24
  38. package/dist/mm-harness-cli.js +17 -0
  39. package/dist/performance-observation.js +7 -13
  40. package/dist/runner.js +26 -7
  41. package/docs/cli-contract.md +5 -3
  42. package/library/actions/shared/console-collector.mjs +1 -1
  43. package/library/actions/{terminal → web-dapp}/app/assert_no_console_errors.mjs +4 -4
  44. package/library/actions/{terminal → web-dapp}/app/launch.mjs +7 -7
  45. package/library/actions/{terminal → web-dapp}/platform/hud.mjs +5 -5
  46. package/library/actions/{terminal → web-dapp}/platform/page.mjs +11 -11
  47. package/library/actions/{terminal → web-dapp}/platform/runtime.mjs +16 -12
  48. package/library/actions/web-dapp/ui/navigate.mjs +24 -0
  49. package/library/actions/web-dapp/wallet/_signature-log.mjs +32 -0
  50. package/library/actions/{terminal → web-dapp}/wallet/assert_signatures.mjs +4 -4
  51. package/library/actions/{terminal → web-dapp}/wallet/list_accounts.mjs +2 -2
  52. package/library/actions/{terminal → web-dapp}/wallet/read_signatures.mjs +6 -6
  53. package/library/manifests/{terminal.action-manifest.json → web-dapp.action-manifest.json} +18 -702
  54. package/package.json +5 -5
  55. package/adapters/terminal/lib/mainnet-guard.mjs +0 -186
  56. package/adapters/terminal/policy.mjs +0 -35
  57. package/dist/adapters/terminal/console-capture.js +0 -59
  58. package/dist/adapters/terminal/doctor-checks.js +0 -24
  59. package/dist/adapters/terminal/overlay.js +0 -25
  60. package/dist/adapters/terminal/readiness.js +0 -11
  61. package/dist/adapters/terminal/surface.js +0 -135
  62. package/library/actions/terminal/perps/_venue.mjs +0 -242
  63. package/library/actions/terminal/perps/assert_orders.mjs +0 -54
  64. package/library/actions/terminal/perps/assert_positions.mjs +0 -40
  65. package/library/actions/terminal/perps/read_orders.mjs +0 -26
  66. package/library/actions/terminal/perps/read_positions.mjs +0 -25
  67. package/library/actions/terminal/perps/read_snapshot.mjs +0 -40
  68. package/library/actions/terminal/perps/revoke_agent.mjs +0 -58
  69. package/library/actions/terminal/perps/teardown_state.mjs +0 -104
  70. package/library/actions/terminal/ui/navigate.mjs +0 -31
  71. package/library/actions/terminal/wallet/_signature-log.mjs +0 -56
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://farmslot.io/schemas/action-manifest-v1.schema.json",
3
3
  "actions": {
4
4
  "app.status": {
5
- "description": "Report the platform, checkout path and repository shape of the Web Terminal checkout.",
5
+ "description": "Report the platform, checkout path and repository shape of the app checkout.",
6
6
  "examples": [
7
7
  {
8
8
  "action": "app.status",
@@ -17,7 +17,7 @@
17
17
  }
18
18
  },
19
19
  "app.hud": {
20
- "description": "Display recipe progress in an overlay on the terminal app tab: recipe, step N/M, the current node intent and the last pass/fail. Never drawn in MetaMask's own pages; ignored by clicks and page text. --hud auto shows it only when the browser is headful.",
20
+ "description": "Display recipe progress in an overlay on the app tab: recipe, step N/M, the current node intent and the last pass/fail. Never drawn in MetaMask's own pages; ignored by clicks and page text. --hud auto shows it only when the browser is headful.",
21
21
  "examples": [
22
22
  {
23
23
  "action": "app.hud",
@@ -350,7 +350,7 @@
350
350
  }
351
351
  },
352
352
  "end": {
353
- "description": "Base terminal action.",
353
+ "description": "Base web-dapp action.",
354
354
  "examples": [
355
355
  {
356
356
  "action": "end",
@@ -425,7 +425,7 @@
425
425
  }
426
426
  },
427
427
  "metamask.app.launch": {
428
- "description": "Explicit lifecycle step: start or reuse the terminal slot browser with signer=extension (MetaMask extension with the fixture account imported) or signer=injected (strict test wallet), plus the wallet host that records wallet requests. fresh_profile forgets the stored agent key and dapp permission.",
428
+ "description": "Explicit lifecycle step: start or reuse the slot browser with signer=extension (MetaMask extension with the fixture account imported) or signer=injected (strict test wallet), plus the wallet host that records wallet requests. fresh_profile forgets the stored agent key and dapp permission.",
429
429
  "execution_capabilities": [
430
430
  "app-mutation"
431
431
  ],
@@ -469,7 +469,7 @@
469
469
  "mainnet"
470
470
  ],
471
471
  "default": "testnet",
472
- "description": "testnet requires the slot dev server to force Hyperliquid testnet; mainnet requires mainnet_confirmation."
472
+ "description": "testnet requires the slot dev server to force the venue's testnet; mainnet requires mainnet_confirmation."
473
473
  },
474
474
  "mainnet_confirmation": {
475
475
  "type": "string",
@@ -502,7 +502,7 @@
502
502
  ]
503
503
  },
504
504
  "metamask.app.assert_no_console_errors": {
505
- "description": "Fail when the terminal page logged an error or uncaught exception since the slot browser's launch that no recipe-library console allowlist (diagnostics/console-allowlist.json) marks as known third-party noise. Reads the slot console capture; the same classification feeds run diagnostics. Fails as unavailable unless the slot's own console collector runs on the browser's CDP port and, for each capture file a requested source reads, a control line logged in its target (the app page; MetaMask for the extension source) reaches that file. Allowlist entries are exact signatures (schemaVersion 3).",
505
+ "description": "Fail when the app page logged an error or uncaught exception since the slot browser's launch that no recipe-library console allowlist (diagnostics/console-allowlist.json) marks as known third-party noise. Reads the slot console capture; the same classification feeds run diagnostics. Fails as unavailable unless the slot's own console collector runs on the browser's CDP port and, for each capture file a requested source reads, a control line logged in its target (the app page; MetaMask for the extension source) reaches that file. Allowlist entries are exact signatures (schemaVersion 3).",
506
506
  "execution_capabilities": [
507
507
  "host-read-export"
508
508
  ],
@@ -519,7 +519,7 @@
519
519
  "browser"
520
520
  ]
521
521
  },
522
- "description": "Default [\"page\",\"browser\"]: the terminal tab's console and its browser log entries."
522
+ "description": "Default [\"page\",\"browser\"]: the app tab's console and its browser log entries."
523
523
  },
524
524
  "levels": {
525
525
  "type": "array",
@@ -554,691 +554,7 @@
554
554
  "examples": [
555
555
  {
556
556
  "action": "metamask.app.assert_no_console_errors",
557
- "intent": "Prove the terminal page logged no unexpected error during the journey",
558
- "next": "done"
559
- }
560
- ]
561
- },
562
- "metamask.perps.assert_orders": {
563
- "description": "Assert presence, absence, count and fields (limit/trigger price, trigger type, reduce-only, size) of the selected venue open orders, polling up to timeout_ms.",
564
- "execution_capabilities": [
565
- "host-read-export"
566
- ],
567
- "schema": {
568
- "type": "object",
569
- "properties": {
570
- "market": {
571
- "type": "string",
572
- "description": "Single market symbol, e.g. ETH. Alias: symbol."
573
- },
574
- "symbol": {
575
- "type": "string",
576
- "description": "Alias for market."
577
- },
578
- "markets": {
579
- "type": "array",
580
- "items": {
581
- "type": "string"
582
- }
583
- },
584
- "symbols": {
585
- "type": "array",
586
- "items": {
587
- "type": "string"
588
- }
589
- },
590
- "mode": {
591
- "type": "string",
592
- "enum": [
593
- "matching",
594
- "all"
595
- ],
596
- "description": "all selects every item; otherwise a market is required."
597
- },
598
- "side": {
599
- "type": "string",
600
- "enum": [
601
- "long",
602
- "short"
603
- ]
604
- },
605
- "order_kind": {
606
- "type": "string",
607
- "enum": [
608
- "limit",
609
- "trigger"
610
- ],
611
- "description": "Only plain limit orders, or only trigger (TP/SL) orders."
612
- },
613
- "trigger_kind": {
614
- "type": "string",
615
- "enum": [
616
- "take_profit",
617
- "stop_loss"
618
- ]
619
- },
620
- "only_trigger_orders": {
621
- "type": "boolean"
622
- },
623
- "order_ids": {
624
- "type": "array",
625
- "items": {
626
- "type": [
627
- "string",
628
- "number"
629
- ]
630
- },
631
- "description": "Restrict to these venue order ids."
632
- },
633
- "state": {
634
- "type": "string",
635
- "enum": [
636
- "none",
637
- "absent",
638
- "closed",
639
- "open",
640
- "present"
641
- ]
642
- },
643
- "account": {
644
- "type": "string",
645
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
646
- },
647
- "account_name": {
648
- "type": "string"
649
- },
650
- "network": {
651
- "type": "string",
652
- "enum": [
653
- "testnet",
654
- "mainnet"
655
- ],
656
- "default": "testnet",
657
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
658
- },
659
- "timeout_ms": {
660
- "type": "number"
661
- },
662
- "expect_count": {
663
- "type": [
664
- "string",
665
- "number"
666
- ],
667
- "description": "Exact number of matching items."
668
- },
669
- "expectCount": {
670
- "type": [
671
- "string",
672
- "number"
673
- ],
674
- "description": "Exact number of matching items."
675
- },
676
- "expect_limit_price": {
677
- "type": [
678
- "string",
679
- "number"
680
- ],
681
- "description": "Required limit price on every matching order."
682
- },
683
- "expect_trigger_price": {
684
- "type": [
685
- "string",
686
- "number"
687
- ]
688
- },
689
- "expect_trigger_order_type": {
690
- "type": "string",
691
- "enum": [
692
- "stop_market",
693
- "stop_limit",
694
- "take_profit_market",
695
- "take_profit_limit"
696
- ]
697
- },
698
- "expect_reduce_only": {
699
- "type": "boolean"
700
- },
701
- "expect_size": {
702
- "type": [
703
- "string",
704
- "number"
705
- ]
706
- },
707
- "price_tolerance_pct": {
708
- "type": "number",
709
- "description": "Relative tolerance for price expectations (tick rounding); default exact."
710
- }
711
- },
712
- "required": [
713
- "state"
714
- ],
715
- "additionalProperties": false
716
- },
717
- "examples": [
718
- {
719
- "action": "metamask.perps.assert_orders",
720
- "market": "ETH",
721
- "state": "open",
722
- "expect_limit_price": "2000",
723
- "intent": "Prove one resting ETH limit order at the placed price.",
724
- "next": "done"
725
- }
726
- ]
727
- },
728
- "metamask.perps.assert_positions": {
729
- "description": "Assert presence, absence or exact count of the selected venue positions, polling up to timeout_ms.",
730
- "execution_capabilities": [
731
- "host-read-export"
732
- ],
733
- "schema": {
734
- "type": "object",
735
- "properties": {
736
- "market": {
737
- "type": "string",
738
- "description": "Single market symbol, e.g. ETH. Alias: symbol."
739
- },
740
- "symbol": {
741
- "type": "string",
742
- "description": "Alias for market."
743
- },
744
- "markets": {
745
- "type": "array",
746
- "items": {
747
- "type": "string"
748
- }
749
- },
750
- "symbols": {
751
- "type": "array",
752
- "items": {
753
- "type": "string"
754
- }
755
- },
756
- "mode": {
757
- "type": "string",
758
- "enum": [
759
- "matching",
760
- "all"
761
- ],
762
- "description": "all selects every item; otherwise a market is required."
763
- },
764
- "side": {
765
- "type": "string",
766
- "enum": [
767
- "long",
768
- "short"
769
- ]
770
- },
771
- "state": {
772
- "type": "string",
773
- "enum": [
774
- "none",
775
- "absent",
776
- "closed",
777
- "open",
778
- "present"
779
- ]
780
- },
781
- "account": {
782
- "type": "string",
783
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
784
- },
785
- "account_name": {
786
- "type": "string"
787
- },
788
- "network": {
789
- "type": "string",
790
- "enum": [
791
- "testnet",
792
- "mainnet"
793
- ],
794
- "default": "testnet",
795
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
796
- },
797
- "timeout_ms": {
798
- "type": "number"
799
- },
800
- "expect_count": {
801
- "type": [
802
- "string",
803
- "number"
804
- ],
805
- "description": "Exact number of matching items."
806
- },
807
- "expectCount": {
808
- "type": [
809
- "string",
810
- "number"
811
- ],
812
- "description": "Exact number of matching items."
813
- }
814
- },
815
- "required": [
816
- "state"
817
- ],
818
- "additionalProperties": false
819
- },
820
- "examples": [
821
- {
822
- "action": "metamask.perps.assert_positions",
823
- "market": "ETH",
824
- "state": "open",
825
- "timeout_ms": 30000,
826
- "intent": "Independently prove the venue holds the ETH position.",
827
- "next": "done"
828
- }
829
- ]
830
- },
831
- "metamask.perps.read_orders": {
832
- "description": "Read the fixture account Hyperliquid open orders for the selected markets from the venue info API (frontendOpenOrders).",
833
- "execution_capabilities": [
834
- "host-read-export"
835
- ],
836
- "schema": {
837
- "type": "object",
838
- "properties": {
839
- "market": {
840
- "type": "string",
841
- "description": "Single market symbol, e.g. ETH. Alias: symbol."
842
- },
843
- "symbol": {
844
- "type": "string",
845
- "description": "Alias for market."
846
- },
847
- "markets": {
848
- "type": "array",
849
- "items": {
850
- "type": "string"
851
- }
852
- },
853
- "symbols": {
854
- "type": "array",
855
- "items": {
856
- "type": "string"
857
- }
858
- },
859
- "mode": {
860
- "type": "string",
861
- "enum": [
862
- "matching",
863
- "all"
864
- ],
865
- "description": "all selects every item; otherwise a market is required."
866
- },
867
- "side": {
868
- "type": "string",
869
- "enum": [
870
- "long",
871
- "short"
872
- ]
873
- },
874
- "order_kind": {
875
- "type": "string",
876
- "enum": [
877
- "limit",
878
- "trigger"
879
- ],
880
- "description": "Only plain limit orders, or only trigger (TP/SL) orders."
881
- },
882
- "trigger_kind": {
883
- "type": "string",
884
- "enum": [
885
- "take_profit",
886
- "stop_loss"
887
- ]
888
- },
889
- "only_trigger_orders": {
890
- "type": "boolean"
891
- },
892
- "order_ids": {
893
- "type": "array",
894
- "items": {
895
- "type": [
896
- "string",
897
- "number"
898
- ]
899
- },
900
- "description": "Restrict to these venue order ids."
901
- },
902
- "account": {
903
- "type": "string",
904
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
905
- },
906
- "account_name": {
907
- "type": "string"
908
- },
909
- "network": {
910
- "type": "string",
911
- "enum": [
912
- "testnet",
913
- "mainnet"
914
- ],
915
- "default": "testnet",
916
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
917
- }
918
- },
919
- "additionalProperties": false
920
- },
921
- "examples": [
922
- {
923
- "action": "metamask.perps.read_orders",
924
- "market": "ETH",
925
- "intent": "Read the open ETH orders of the fixture account.",
926
- "next": "done"
927
- }
928
- ]
929
- },
930
- "metamask.perps.read_positions": {
931
- "description": "Read the fixture account Hyperliquid positions for the selected markets from the venue info API (clearinghouseState).",
932
- "execution_capabilities": [
933
- "host-read-export"
934
- ],
935
- "schema": {
936
- "type": "object",
937
- "properties": {
938
- "market": {
939
- "type": "string",
940
- "description": "Single market symbol, e.g. ETH. Alias: symbol."
941
- },
942
- "symbol": {
943
- "type": "string",
944
- "description": "Alias for market."
945
- },
946
- "markets": {
947
- "type": "array",
948
- "items": {
949
- "type": "string"
950
- }
951
- },
952
- "symbols": {
953
- "type": "array",
954
- "items": {
955
- "type": "string"
956
- }
957
- },
958
- "mode": {
959
- "type": "string",
960
- "enum": [
961
- "matching",
962
- "all"
963
- ],
964
- "description": "all selects every item; otherwise a market is required."
965
- },
966
- "side": {
967
- "type": "string",
968
- "enum": [
969
- "long",
970
- "short"
971
- ]
972
- },
973
- "account": {
974
- "type": "string",
975
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
976
- },
977
- "account_name": {
978
- "type": "string"
979
- },
980
- "network": {
981
- "type": "string",
982
- "enum": [
983
- "testnet",
984
- "mainnet"
985
- ],
986
- "default": "testnet",
987
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
988
- }
989
- },
990
- "additionalProperties": false
991
- },
992
- "examples": [
993
- {
994
- "action": "metamask.perps.read_positions",
995
- "market": "ETH",
996
- "intent": "Read the ETH position held by the fixture account.",
997
- "next": "done"
998
- }
999
- ]
1000
- },
1001
- "metamask.perps.read_snapshot": {
1002
- "description": "Snapshot venue positions, open orders, approved agents and balances for the fixture account, optionally scoped to markets, for before/after comparison.",
1003
- "execution_capabilities": [
1004
- "host-read-export"
1005
- ],
1006
- "schema": {
1007
- "type": "object",
1008
- "properties": {
1009
- "market": {
1010
- "type": "string",
1011
- "description": "Single market symbol, e.g. ETH. Alias: symbol."
1012
- },
1013
- "symbol": {
1014
- "type": "string",
1015
- "description": "Alias for market."
1016
- },
1017
- "markets": {
1018
- "type": "array",
1019
- "items": {
1020
- "type": "string"
1021
- }
1022
- },
1023
- "symbols": {
1024
- "type": "array",
1025
- "items": {
1026
- "type": "string"
1027
- }
1028
- },
1029
- "mode": {
1030
- "type": "string",
1031
- "enum": [
1032
- "matching",
1033
- "all"
1034
- ],
1035
- "description": "all selects every item; otherwise a market is required."
1036
- },
1037
- "side": {
1038
- "type": "string",
1039
- "enum": [
1040
- "long",
1041
- "short"
1042
- ]
1043
- },
1044
- "account": {
1045
- "type": "string",
1046
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
1047
- },
1048
- "account_name": {
1049
- "type": "string"
1050
- },
1051
- "network": {
1052
- "type": "string",
1053
- "enum": [
1054
- "testnet",
1055
- "mainnet"
1056
- ],
1057
- "default": "testnet",
1058
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
1059
- }
1060
- },
1061
- "additionalProperties": false
1062
- },
1063
- "examples": [
1064
- {
1065
- "action": "metamask.perps.read_snapshot",
1066
- "market": "ETH",
1067
- "intent": "Record the ETH venue state before the journey.",
1068
- "next": "done"
1069
- }
1070
- ]
1071
- },
1072
- "metamask.perps.revoke_agent": {
1073
- "description": "Lifecycle step (testnet; mainnet only with mainnet_confirmation=REAL_FUNDS): revoke the Web Terminal Hyperliquid agent(s) (mm-terminal*) of the fixture account outside the UI (approveAgent to the zero address, user-signed in Node) and assert none remains, so the next UI write must request a fresh ApproveAgent.",
1074
- "execution_capabilities": [
1075
- "app-mutation",
1076
- "external-mutation"
1077
- ],
1078
- "schema": {
1079
- "type": "object",
1080
- "properties": {
1081
- "account": {
1082
- "type": "string",
1083
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
1084
- },
1085
- "account_name": {
1086
- "type": "string"
1087
- },
1088
- "network": {
1089
- "type": "string",
1090
- "enum": [
1091
- "testnet",
1092
- "mainnet"
1093
- ],
1094
- "default": "testnet",
1095
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
1096
- },
1097
- "agent_name": {
1098
- "type": "string",
1099
- "default": "mm-terminal"
1100
- },
1101
- "timeout_ms": {
1102
- "type": "number"
1103
- },
1104
- "mainnet_confirmation": {
1105
- "type": "string",
1106
- "enum": [
1107
- "REAL_FUNDS"
1108
- ],
1109
- "description": "Required with network=mainnet: confirms a real-funds mutation."
1110
- }
1111
- },
1112
- "additionalProperties": false
1113
- },
1114
- "examples": [
1115
- {
1116
- "action": "metamask.perps.revoke_agent",
1117
- "network": "testnet",
1118
- "intent": "Revoke the terminal agent so the next order needs re-approval.",
1119
- "next": "done"
1120
- }
1121
- ]
1122
- },
1123
- "metamask.perps.teardown_state": {
1124
- "description": "Testnet cleanup of one reserved market: cancel its open orders (or only order_ids) and close its position with a reduce-only IOC order signed in Node by the fixture account, then assert none remain. Refuses mode=all; mainnet only with mainnet_confirmation=REAL_FUNDS. Never passes through the browser wallet.",
1125
- "execution_capabilities": [
1126
- "app-mutation",
1127
- "external-mutation"
1128
- ],
1129
- "schema": {
1130
- "type": "object",
1131
- "properties": {
1132
- "market": {
1133
- "type": "string",
1134
- "description": "Single market symbol, e.g. ETH. Alias: symbol."
1135
- },
1136
- "symbol": {
1137
- "type": "string",
1138
- "description": "Alias for market."
1139
- },
1140
- "markets": {
1141
- "type": "array",
1142
- "items": {
1143
- "type": "string"
1144
- }
1145
- },
1146
- "symbols": {
1147
- "type": "array",
1148
- "items": {
1149
- "type": "string"
1150
- }
1151
- },
1152
- "side": {
1153
- "type": "string",
1154
- "enum": [
1155
- "long",
1156
- "short"
1157
- ]
1158
- },
1159
- "order_ids": {
1160
- "type": "array",
1161
- "items": {
1162
- "type": [
1163
- "string",
1164
- "number"
1165
- ]
1166
- },
1167
- "description": "Restrict to these venue order ids."
1168
- },
1169
- "positions": {
1170
- "type": "object",
1171
- "properties": {
1172
- "state": {
1173
- "type": "string",
1174
- "enum": [
1175
- "none",
1176
- "absent",
1177
- "closed",
1178
- "open",
1179
- "present"
1180
- ]
1181
- }
1182
- },
1183
- "additionalProperties": false
1184
- },
1185
- "orders": {
1186
- "type": "object",
1187
- "properties": {
1188
- "state": {
1189
- "type": "string",
1190
- "enum": [
1191
- "none",
1192
- "absent",
1193
- "closed",
1194
- "open",
1195
- "present"
1196
- ]
1197
- }
1198
- },
1199
- "additionalProperties": false
1200
- },
1201
- "account": {
1202
- "type": "string",
1203
- "description": "Wallet fixture account name (default: the running browser account, else dev1) or an EVM address for read-only use."
1204
- },
1205
- "account_name": {
1206
- "type": "string"
1207
- },
1208
- "network": {
1209
- "type": "string",
1210
- "enum": [
1211
- "testnet",
1212
- "mainnet"
1213
- ],
1214
- "default": "testnet",
1215
- "description": "Hyperliquid network read from the public info API. Mutating actions refuse mainnet."
1216
- },
1217
- "timeout_ms": {
1218
- "type": "number"
1219
- },
1220
- "mainnet_confirmation": {
1221
- "type": "string",
1222
- "enum": [
1223
- "REAL_FUNDS"
1224
- ],
1225
- "description": "Required with network=mainnet: confirms a real-funds mutation."
1226
- }
1227
- },
1228
- "additionalProperties": false
1229
- },
1230
- "examples": [
1231
- {
1232
- "action": "metamask.perps.teardown_state",
1233
- "market": "ETH",
1234
- "positions": {
1235
- "state": "none"
1236
- },
1237
- "orders": {
1238
- "state": "none"
1239
- },
1240
- "network": "testnet",
1241
- "intent": "Restore the reserved ETH market to flat after success or failure.",
557
+ "intent": "Prove the app page logged no unexpected error during the journey",
1242
558
  "next": "done"
1243
559
  }
1244
560
  ]
@@ -1403,7 +719,7 @@
1403
719
  "wallet"
1404
720
  ],
1405
721
  "default": "app",
1406
- "description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
722
+ "description": "app (default): the app tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1407
723
  },
1408
724
  "wallet_timeout_ms": {
1409
725
  "type": "number",
@@ -1425,7 +741,7 @@
1425
741
  ]
1426
742
  },
1427
743
  "ui.navigate": {
1428
- "description": "Navigate the terminal tab to a product page (order/<MARKET>, portfolio, home) or an explicit app path on the slot dev server and wait for the document.",
744
+ "description": "Navigate the app tab to an explicit app path, or a product page the venue names (the Terminal's order/<MARKET>, portfolio, home), on the slot dev server and wait for the document.",
1429
745
  "schema": {
1430
746
  "type": "object",
1431
747
  "properties": {
@@ -1470,7 +786,7 @@
1470
786
  ]
1471
787
  },
1472
788
  "ui.press": {
1473
- "description": "Press/tap/click a UI target on the terminal tab or the MetaMask wallet surface.",
789
+ "description": "Press/tap/click a UI target on the app tab or the MetaMask wallet surface.",
1474
790
  "examples": [
1475
791
  {
1476
792
  "action": "ui.press",
@@ -1510,7 +826,7 @@
1510
826
  "wallet"
1511
827
  ],
1512
828
  "default": "app",
1513
- "description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
829
+ "description": "app (default): the app tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1514
830
  },
1515
831
  "wallet_timeout_ms": {
1516
832
  "type": "number",
@@ -1552,7 +868,7 @@
1552
868
  "wallet"
1553
869
  ],
1554
870
  "default": "app",
1555
- "description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
871
+ "description": "app (default): the app tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1556
872
  },
1557
873
  "wallet_timeout_ms": {
1558
874
  "type": "number",
@@ -1628,7 +944,7 @@
1628
944
  "wallet"
1629
945
  ],
1630
946
  "default": "app",
1631
- "description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
947
+ "description": "app (default): the app tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1632
948
  },
1633
949
  "wallet_timeout_ms": {
1634
950
  "type": "number",
@@ -1639,7 +955,7 @@
1639
955
  }
1640
956
  },
1641
957
  "ui.set_input": {
1642
- "description": "Set text on the terminal tab or the MetaMask wallet surface.",
958
+ "description": "Set text on the app tab or the MetaMask wallet surface.",
1643
959
  "schema": {
1644
960
  "type": "object",
1645
961
  "properties": {
@@ -1675,7 +991,7 @@
1675
991
  "wallet"
1676
992
  ],
1677
993
  "default": "app",
1678
- "description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
994
+ "description": "app (default): the app tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1679
995
  },
1680
996
  "wallet_timeout_ms": {
1681
997
  "type": "number",
@@ -1695,7 +1011,7 @@
1695
1011
  ]
1696
1012
  },
1697
1013
  "ui.wait_for": {
1698
- "description": "Wait for a UI condition on the terminal tab or the MetaMask wallet surface.",
1014
+ "description": "Wait for a UI condition on the app tab or the MetaMask wallet surface.",
1699
1015
  "schema": {
1700
1016
  "type": "object",
1701
1017
  "properties": {
@@ -1733,7 +1049,7 @@
1733
1049
  "wallet"
1734
1050
  ],
1735
1051
  "default": "app",
1736
- "description": "app (default): the Web Terminal tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1052
+ "description": "app (default): the app tab. wallet: the MetaMask side panel / notification showing the pending dapp request (signer=extension only)."
1737
1053
  },
1738
1054
  "wallet_timeout_ms": {
1739
1055
  "type": "number",