@mhome/app-facade-protocol 1.116.0 → 1.118.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.
@@ -0,0 +1,40 @@
1
+ # Published standard capability contracts
2
+
3
+ `/app/developer/contracts/list` and `/app/developer/contracts/export` are read-only
4
+ Hub operations. The authenticated caller needs Space read access to reach its
5
+ online Hub. The Hub requests the matching `/bridge/schema/contracts/*` operation
6
+ from Lion using its existing authenticated connection. Space identity authorizes
7
+ and routes the request; it never chooses contract content. There is no direct
8
+ Client-to-cloud implementation of these operations.
9
+
10
+ Lion selects the latest complete, unarchived official production packages and
11
+ their necessary dependencies, including `base`. Space Beta settings, installed
12
+ versions, personal staging and local Preview do not participate. A missing or
13
+ invalid requested dependency fails the operation. Unrelated catalog packages are
14
+ not loaded. Sources are checked again before returning a result; a publication
15
+ change causes a bounded retry, then an explicit temporary-unavailable error.
16
+
17
+ List input is exactly `{ "integrationId": "basic.device" }`. The result contains
18
+ `integrationId`, `sourceSnapshot` and `capabilities`, with each capability's `id`,
19
+ `method`, `abstract` flag and `description` from the resolved compiler graph.
20
+
21
+ Export input contains `selected` (1..64 unique fully-qualified command/state/event/
22
+ data IDs) and optional lowercase SHA-256 `ifNoneMatch`. Unknown fields are rejected.
23
+ The result is either `{ "kind": "ready", "document": <export> }` or
24
+ `{ "kind": "unchanged", "sha256": <digest> }`. These are business results inside
25
+ the ordinary Facade response. The compiler-owned document keeps the
26
+ `meow-capability-contracts` version 1 format: compiler identity, exact source
27
+ inventory/digests, input snapshot, explicit selections, resolved contracts and
28
+ referenced types, plus its canonical result digest. It preserves inheritance,
29
+ main entity routing fields, request/result semantics, constraints and data
30
+ discovery dependencies. It executes no provider code or live business queries.
31
+
32
+ `ifNoneMatch` is only a transfer optimization: Lion first checks current official
33
+ sources, and may reuse immutable content and compiled/exported results. Cached
34
+ data is never a freshness fallback when the cloud cannot be reached. A digest is
35
+ a content identity, not a publication signature or operation grant.
36
+
37
+ Each business result is limited to 512 KiB so the ordinary envelopes remain below
38
+ the Client's 2 MiB WebSocket message budget. Over-limit queries fail explicitly;
39
+ request fewer capabilities. Export does not install a package, activate a source,
40
+ change provider configuration, or return runtime credentials/household data.
@@ -10,13 +10,14 @@ hooks and share `fixtures/recording.conformance.json`. The Lion runtime definiti
10
10
  is a packaged mirror verified against this canonical manifest in joint-source tests.
11
11
 
12
12
  A call may carry optional `source: {kind, page?, cardId?}` beside `control` and
13
- `input`. Kinds are `ui`, `agent` (built-in Agent), `messaging`, `cli`, `skill`, `mcp`.
13
+ `input`. Kinds are `ui`, `agent` (built-in Agent), `messaging`, `cli`, `mcp`.
14
14
  Source hints never select authorization or actor. Trusted Agent/MCP ingress overrides
15
15
  hints; a canonical Messaging Agent surface keeps `messaging`, including through
16
16
  Cloud-to-Hub forwarding. Direct Messaging Dialog replies use the verified external sender
17
17
  and a Messaging-only forwarding binding; they create no Agent run and can only invoke
18
- `/app/dialog/reply` in direct mode. CLI defaults to `cli`; external Skills explicitly pass
19
- `meow --source skill`. UI sets `ui`. `appClientId` comes only from the verified
18
+ `/app/dialog/reply` in direct mode. CLI calls, including external Skills using the CLI,
19
+ are always attributed as `cli`; no caller-supplied CLI source option is needed.
20
+ UI sets `ui`. `appClientId` comes only from the verified
20
21
  Client identity, not connection routing IDs or an input hint.
21
22
 
22
23
  The runtime derives actor from verified initiation: User -> `{kind: user,userId}`;
@@ -640,5 +640,755 @@
640
640
  "widgetId": "new-c",
641
641
  "status": "success"
642
642
  }
643
+ },
644
+ {
645
+ "target": "/app/capability/invoke/json",
646
+ "input": {
647
+ "capabilityId": "basic.device.command.setBrightness",
648
+ "request": {
649
+ "device": "lamp",
650
+ "brightness": 0,
651
+ "transitionDuration": "0sec",
652
+ "internal": "private-request"
653
+ }
654
+ },
655
+ "outcome": {
656
+ "status": "success",
657
+ "data": {
658
+ "internal": "private-response"
659
+ }
660
+ },
661
+ "expected": {
662
+ "event": "device.command",
663
+ "capabilityId": "basic.device.command.setBrightness",
664
+ "parameters": {
665
+ "device": "lamp",
666
+ "brightness": 0,
667
+ "transitionDuration": "0sec"
668
+ },
669
+ "status": "success"
670
+ }
671
+ },
672
+ {
673
+ "target": "/app/capability/invoke/json",
674
+ "input": {
675
+ "capabilityId": "basic.device.command.setColorTemperature",
676
+ "request": {
677
+ "device": "lamp",
678
+ "colorTemperature": 2700,
679
+ "transitionDuration": "2sec",
680
+ "internal": "private-request"
681
+ }
682
+ },
683
+ "outcome": {
684
+ "status": "success",
685
+ "data": {
686
+ "internal": "private-response"
687
+ }
688
+ },
689
+ "expected": {
690
+ "event": "device.command",
691
+ "capabilityId": "basic.device.command.setColorTemperature",
692
+ "parameters": {
693
+ "device": "lamp",
694
+ "colorTemperature": 2700,
695
+ "transitionDuration": "2sec"
696
+ },
697
+ "status": "success"
698
+ }
699
+ },
700
+ {
701
+ "target": "/app/capability/invoke/json",
702
+ "input": {
703
+ "capabilityId": "basic.device.command.setColorRGB",
704
+ "request": {
705
+ "device": "lamp",
706
+ "hue": 0,
707
+ "saturation": 80,
708
+ "transitionDuration": "1sec",
709
+ "internal": "private-request"
710
+ }
711
+ },
712
+ "outcome": {
713
+ "status": "success",
714
+ "data": {
715
+ "internal": "private-response"
716
+ }
717
+ },
718
+ "expected": {
719
+ "event": "device.command",
720
+ "capabilityId": "basic.device.command.setColorRGB",
721
+ "parameters": {
722
+ "device": "lamp",
723
+ "hue": 0,
724
+ "saturation": 80,
725
+ "transitionDuration": "1sec"
726
+ },
727
+ "status": "success"
728
+ }
729
+ },
730
+ {
731
+ "target": "/app/capability/invoke/json",
732
+ "input": {
733
+ "capabilityId": "basic.device.command.setThermostatTemperature",
734
+ "request": {
735
+ "device": "thermostat",
736
+ "coolingSetpoint": "24C",
737
+ "heatingSetpoint": "20C",
738
+ "internal": "private-request"
739
+ }
740
+ },
741
+ "outcome": {
742
+ "status": "success",
743
+ "data": {
744
+ "internal": "private-response"
745
+ }
746
+ },
747
+ "expected": {
748
+ "event": "device.command",
749
+ "capabilityId": "basic.device.command.setThermostatTemperature",
750
+ "parameters": {
751
+ "device": "thermostat",
752
+ "coolingSetpoint": "24C",
753
+ "heatingSetpoint": "20C"
754
+ },
755
+ "status": "success"
756
+ }
757
+ },
758
+ {
759
+ "target": "/app/capability/invoke/json",
760
+ "input": {
761
+ "capabilityId": "basic.device.command.setThermostatMode",
762
+ "request": {
763
+ "device": "thermostat",
764
+ "hvacMode": "heat",
765
+ "internal": "private-request"
766
+ }
767
+ },
768
+ "outcome": {
769
+ "status": "success",
770
+ "data": {
771
+ "internal": "private-response"
772
+ }
773
+ },
774
+ "expected": {
775
+ "event": "device.command",
776
+ "capabilityId": "basic.device.command.setThermostatMode",
777
+ "parameters": {
778
+ "device": "thermostat",
779
+ "hvacMode": "heat"
780
+ },
781
+ "status": "success"
782
+ }
783
+ },
784
+ {
785
+ "target": "/app/capability/invoke/json",
786
+ "input": {
787
+ "capabilityId": "basic.device.command.setThermostatMode",
788
+ "request": {
789
+ "device": "thermostat",
790
+ "presetMode": "eco",
791
+ "internal": "private-request"
792
+ }
793
+ },
794
+ "outcome": {
795
+ "status": "success",
796
+ "data": {
797
+ "internal": "private-response"
798
+ }
799
+ },
800
+ "expected": {
801
+ "event": "device.command",
802
+ "capabilityId": "basic.device.command.setThermostatMode",
803
+ "parameters": {
804
+ "device": "thermostat",
805
+ "presetMode": "eco"
806
+ },
807
+ "status": "success"
808
+ }
809
+ },
810
+ {
811
+ "target": "/app/capability/invoke/json",
812
+ "input": {
813
+ "capabilityId": "basic.device.command.setFan",
814
+ "request": {
815
+ "device": "fan",
816
+ "mode": "auto",
817
+ "internal": "private-request"
818
+ }
819
+ },
820
+ "outcome": {
821
+ "status": "success",
822
+ "data": {
823
+ "internal": "private-response"
824
+ }
825
+ },
826
+ "expected": {
827
+ "event": "device.command",
828
+ "capabilityId": "basic.device.command.setFan",
829
+ "parameters": {
830
+ "device": "fan",
831
+ "mode": "auto"
832
+ },
833
+ "status": "success"
834
+ }
835
+ },
836
+ {
837
+ "target": "/app/capability/invoke/json",
838
+ "input": {
839
+ "capabilityId": "basic.device.command.setFan",
840
+ "request": {
841
+ "device": "fan",
842
+ "speed": 0,
843
+ "internal": "private-request"
844
+ }
845
+ },
846
+ "outcome": {
847
+ "status": "success",
848
+ "data": {
849
+ "internal": "private-response"
850
+ }
851
+ },
852
+ "expected": {
853
+ "event": "device.command",
854
+ "capabilityId": "basic.device.command.setFan",
855
+ "parameters": {
856
+ "device": "fan",
857
+ "speed": 0
858
+ },
859
+ "status": "success"
860
+ }
861
+ },
862
+ {
863
+ "target": "/app/capability/invoke/json",
864
+ "input": {
865
+ "capabilityId": "basic.device.command.coverOpenClose",
866
+ "request": {
867
+ "device": "curtain",
868
+ "command": "close",
869
+ "position": 0,
870
+ "transitionDuration": "3sec",
871
+ "internal": "private-request"
872
+ }
873
+ },
874
+ "outcome": {
875
+ "status": "success",
876
+ "data": {
877
+ "internal": "private-response"
878
+ }
879
+ },
880
+ "expected": {
881
+ "event": "device.command",
882
+ "capabilityId": "basic.device.command.coverOpenClose",
883
+ "parameters": {
884
+ "device": "curtain",
885
+ "command": "close",
886
+ "position": 0,
887
+ "transitionDuration": "3sec"
888
+ },
889
+ "status": "success"
890
+ }
891
+ },
892
+ {
893
+ "target": "/app/capability/invoke/json",
894
+ "input": {
895
+ "capabilityId": "basic.device.command.lockUnlock",
896
+ "request": {
897
+ "device": "front-door",
898
+ "command": "lock",
899
+ "internal": "private-request"
900
+ }
901
+ },
902
+ "outcome": {
903
+ "status": "success",
904
+ "data": {
905
+ "internal": "private-response"
906
+ }
907
+ },
908
+ "expected": {
909
+ "event": "device.command",
910
+ "capabilityId": "basic.device.command.lockUnlock",
911
+ "parameters": {
912
+ "device": "front-door",
913
+ "command": "lock"
914
+ },
915
+ "status": "success"
916
+ }
917
+ },
918
+ {
919
+ "target": "/app/capability/invoke/json",
920
+ "input": {
921
+ "capabilityId": "basic.device.command.playMedia",
922
+ "request": {
923
+ "device": "speaker",
924
+ "providerMediaContentId": "favorite:rain",
925
+ "internal": "private-request"
926
+ }
927
+ },
928
+ "outcome": {
929
+ "status": "success",
930
+ "data": {
931
+ "internal": "private-response"
932
+ }
933
+ },
934
+ "expected": {
935
+ "event": "device.command",
936
+ "capabilityId": "basic.device.command.playMedia",
937
+ "parameters": {
938
+ "device": "speaker",
939
+ "providerMediaContentId": "favorite:rain"
940
+ },
941
+ "status": "success"
942
+ }
943
+ },
944
+ {
945
+ "target": "/app/capability/invoke/json",
946
+ "input": {
947
+ "capabilityId": "basic.device.command.playMedia",
948
+ "request": {
949
+ "device": "speaker",
950
+ "mediaContent": {
951
+ "uri": "meow-artifact://v1/tenant/space/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/encoded"
952
+ },
953
+ "internal": "private-request"
954
+ }
955
+ },
956
+ "outcome": {
957
+ "status": "success",
958
+ "data": {
959
+ "internal": "private-response"
960
+ }
961
+ },
962
+ "expected": {
963
+ "event": "device.command",
964
+ "capabilityId": "basic.device.command.playMedia",
965
+ "parameters": {
966
+ "device": "speaker",
967
+ "mediaContent": {
968
+ "uri": "meow-artifact://v1/tenant/space/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/encoded"
969
+ }
970
+ },
971
+ "status": "success"
972
+ }
973
+ },
974
+ {
975
+ "target": "/app/capability/invoke/json",
976
+ "input": {
977
+ "capabilityId": "basic.device.command.controlMediaPlayback",
978
+ "request": {
979
+ "device": "speaker",
980
+ "command": "pause",
981
+ "internal": "private-request"
982
+ }
983
+ },
984
+ "outcome": {
985
+ "status": "success",
986
+ "data": {
987
+ "internal": "private-response"
988
+ }
989
+ },
990
+ "expected": {
991
+ "event": "device.command",
992
+ "capabilityId": "basic.device.command.controlMediaPlayback",
993
+ "parameters": {
994
+ "device": "speaker",
995
+ "command": "pause"
996
+ },
997
+ "status": "success"
998
+ }
999
+ },
1000
+ {
1001
+ "target": "/app/capability/invoke/json",
1002
+ "input": {
1003
+ "capabilityId": "basic.device.command.seekMediaPlayback",
1004
+ "request": {
1005
+ "device": "speaker",
1006
+ "position": 0,
1007
+ "internal": "private-request"
1008
+ }
1009
+ },
1010
+ "outcome": {
1011
+ "status": "success",
1012
+ "data": {
1013
+ "internal": "private-response"
1014
+ }
1015
+ },
1016
+ "expected": {
1017
+ "event": "device.command",
1018
+ "capabilityId": "basic.device.command.seekMediaPlayback",
1019
+ "parameters": {
1020
+ "device": "speaker",
1021
+ "position": 0
1022
+ },
1023
+ "status": "success"
1024
+ }
1025
+ },
1026
+ {
1027
+ "target": "/app/capability/invoke/json",
1028
+ "input": {
1029
+ "capabilityId": "basic.device.command.setAudioVolume",
1030
+ "request": {
1031
+ "device": "speaker",
1032
+ "volume": 0,
1033
+ "internal": "private-request"
1034
+ }
1035
+ },
1036
+ "outcome": {
1037
+ "status": "success",
1038
+ "data": {
1039
+ "internal": "private-response"
1040
+ }
1041
+ },
1042
+ "expected": {
1043
+ "event": "device.command",
1044
+ "capabilityId": "basic.device.command.setAudioVolume",
1045
+ "parameters": {
1046
+ "device": "speaker",
1047
+ "volume": 0
1048
+ },
1049
+ "status": "success"
1050
+ }
1051
+ },
1052
+ {
1053
+ "target": "/app/capability/invoke/json",
1054
+ "input": {
1055
+ "capabilityId": "basic.device.command.setAudioMute",
1056
+ "request": {
1057
+ "device": "speaker",
1058
+ "command": "unmute",
1059
+ "internal": "private-request"
1060
+ }
1061
+ },
1062
+ "outcome": {
1063
+ "status": "success",
1064
+ "data": {
1065
+ "internal": "private-response"
1066
+ }
1067
+ },
1068
+ "expected": {
1069
+ "event": "device.command",
1070
+ "capabilityId": "basic.device.command.setAudioMute",
1071
+ "parameters": {
1072
+ "device": "speaker",
1073
+ "command": "unmute"
1074
+ },
1075
+ "status": "success"
1076
+ }
1077
+ },
1078
+ {
1079
+ "target": "/app/capability/invoke/json",
1080
+ "input": {
1081
+ "capabilityId": "basic.device.command.broadcastAudio",
1082
+ "request": {
1083
+ "device": "speaker",
1084
+ "audio": {
1085
+ "uri": "meow-artifact://v1/tenant/space/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/encoded"
1086
+ },
1087
+ "volume": 25,
1088
+ "priority": "high",
1089
+ "internal": "private-request"
1090
+ }
1091
+ },
1092
+ "outcome": {
1093
+ "status": "success",
1094
+ "data": {
1095
+ "internal": "private-response"
1096
+ }
1097
+ },
1098
+ "expected": {
1099
+ "event": "device.command",
1100
+ "capabilityId": "basic.device.command.broadcastAudio",
1101
+ "parameters": {
1102
+ "device": "speaker",
1103
+ "audio": {
1104
+ "uri": "meow-artifact://v1/tenant/space/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/encoded"
1105
+ },
1106
+ "volume": 25,
1107
+ "priority": "high"
1108
+ },
1109
+ "status": "success"
1110
+ }
1111
+ },
1112
+ {
1113
+ "target": "/app/capability/invoke/json",
1114
+ "input": {
1115
+ "capabilityId": "basic.device.command.chime",
1116
+ "request": {
1117
+ "device": "doorbell",
1118
+ "command": "off",
1119
+ "internal": "private-request"
1120
+ }
1121
+ },
1122
+ "outcome": {
1123
+ "status": "success",
1124
+ "data": {
1125
+ "internal": "private-response"
1126
+ }
1127
+ },
1128
+ "expected": {
1129
+ "event": "device.command",
1130
+ "capabilityId": "basic.device.command.chime",
1131
+ "parameters": {
1132
+ "device": "doorbell",
1133
+ "command": "off"
1134
+ },
1135
+ "status": "success"
1136
+ }
1137
+ },
1138
+ {
1139
+ "target": "/app/capability/invoke/json",
1140
+ "input": {
1141
+ "capabilityId": "basic.device.command.dispensePetFood",
1142
+ "request": {
1143
+ "device": "feeder",
1144
+ "portions": 2,
1145
+ "internal": "private-request"
1146
+ }
1147
+ },
1148
+ "outcome": {
1149
+ "status": "success",
1150
+ "data": {
1151
+ "internal": "private-response"
1152
+ }
1153
+ },
1154
+ "expected": {
1155
+ "event": "device.command",
1156
+ "capabilityId": "basic.device.command.dispensePetFood",
1157
+ "parameters": {
1158
+ "device": "feeder",
1159
+ "portions": 2
1160
+ },
1161
+ "status": "success"
1162
+ }
1163
+ },
1164
+ {
1165
+ "target": "/app/capability/invoke/json",
1166
+ "input": {
1167
+ "capabilityId": "basic.device.command.dispensePetFood",
1168
+ "request": {
1169
+ "device": "feeder",
1170
+ "weight": "20g",
1171
+ "internal": "private-request"
1172
+ }
1173
+ },
1174
+ "outcome": {
1175
+ "status": "success",
1176
+ "data": {
1177
+ "internal": "private-response"
1178
+ }
1179
+ },
1180
+ "expected": {
1181
+ "event": "device.command",
1182
+ "capabilityId": "basic.device.command.dispensePetFood",
1183
+ "parameters": {
1184
+ "device": "feeder",
1185
+ "weight": "20g"
1186
+ },
1187
+ "status": "success"
1188
+ }
1189
+ },
1190
+ {
1191
+ "target": "/app/capability/invoke/json",
1192
+ "input": {
1193
+ "capabilityId": "basic.device.command.cameraPtz",
1194
+ "request": {
1195
+ "device": "camera",
1196
+ "command": "left",
1197
+ "speed": 50,
1198
+ "duration": "0sec",
1199
+ "internal": "private-request"
1200
+ }
1201
+ },
1202
+ "outcome": {
1203
+ "status": "success",
1204
+ "data": {
1205
+ "internal": "private-response"
1206
+ }
1207
+ },
1208
+ "expected": {
1209
+ "event": "device.command",
1210
+ "capabilityId": "basic.device.command.cameraPtz",
1211
+ "parameters": {
1212
+ "device": "camera",
1213
+ "command": "left",
1214
+ "speed": 50,
1215
+ "duration": "0sec"
1216
+ },
1217
+ "status": "success"
1218
+ }
1219
+ },
1220
+ {
1221
+ "target": "/app/capability/invoke/json",
1222
+ "input": {
1223
+ "capabilityId": "basic.device.command.cameraPtz",
1224
+ "request": {
1225
+ "device": "camera",
1226
+ "preset": "entryway",
1227
+ "internal": "private-request"
1228
+ }
1229
+ },
1230
+ "outcome": {
1231
+ "status": "success",
1232
+ "data": {
1233
+ "internal": "private-response"
1234
+ }
1235
+ },
1236
+ "expected": {
1237
+ "event": "device.command",
1238
+ "capabilityId": "basic.device.command.cameraPtz",
1239
+ "parameters": {
1240
+ "device": "camera",
1241
+ "preset": "entryway"
1242
+ },
1243
+ "status": "success"
1244
+ }
1245
+ },
1246
+ {
1247
+ "target": "/app/capability/invoke/json",
1248
+ "input": {
1249
+ "capabilityId": "basic.device.command.setCameraRecording",
1250
+ "request": {
1251
+ "device": "camera",
1252
+ "mode": "off",
1253
+ "internal": "private-request"
1254
+ }
1255
+ },
1256
+ "outcome": {
1257
+ "status": "success",
1258
+ "data": {
1259
+ "internal": "private-response"
1260
+ }
1261
+ },
1262
+ "expected": {
1263
+ "event": "device.command",
1264
+ "capabilityId": "basic.device.command.setCameraRecording",
1265
+ "parameters": {
1266
+ "device": "camera",
1267
+ "mode": "off"
1268
+ },
1269
+ "status": "success"
1270
+ }
1271
+ },
1272
+ {
1273
+ "target": "/app/capability/invoke/json",
1274
+ "input": {
1275
+ "capabilityId": "basic.device.command.setCameraSetting",
1276
+ "request": {
1277
+ "device": "camera",
1278
+ "monitoringMode": "record only",
1279
+ "internal": "private-request",
1280
+ "analysisDetail": "high",
1281
+ "watchStream": "internal-low",
1282
+ "recordingStream": "internal-high"
1283
+ }
1284
+ },
1285
+ "outcome": {
1286
+ "status": "success",
1287
+ "data": {
1288
+ "internal": "private-response"
1289
+ }
1290
+ },
1291
+ "expected": {
1292
+ "event": "device.command",
1293
+ "capabilityId": "basic.device.command.setCameraSetting",
1294
+ "parameters": {
1295
+ "device": "camera",
1296
+ "monitoringMode": "record only"
1297
+ },
1298
+ "status": "success"
1299
+ }
1300
+ },
1301
+ {
1302
+ "target": "/app/capability/invoke/json",
1303
+ "input": {
1304
+ "capabilityId": "basic.device.command.setCameraSetting",
1305
+ "request": {
1306
+ "device": "camera",
1307
+ "personRecognitionMode": "off",
1308
+ "internal": "private-request",
1309
+ "analysisDetail": "high",
1310
+ "watchStream": "internal-low",
1311
+ "recordingStream": "internal-high"
1312
+ }
1313
+ },
1314
+ "outcome": {
1315
+ "status": "success",
1316
+ "data": {
1317
+ "internal": "private-response"
1318
+ }
1319
+ },
1320
+ "expected": {
1321
+ "event": "device.command",
1322
+ "capabilityId": "basic.device.command.setCameraSetting",
1323
+ "parameters": {
1324
+ "device": "camera",
1325
+ "personRecognitionMode": "off"
1326
+ },
1327
+ "status": "success"
1328
+ }
1329
+ },
1330
+ {
1331
+ "target": "/app/capability/invoke/json",
1332
+ "input": {
1333
+ "capabilityId": "basic.device.command.startAudioRecording",
1334
+ "request": {
1335
+ "device": "microphone",
1336
+ "internal": "private-request"
1337
+ }
1338
+ },
1339
+ "outcome": {
1340
+ "status": "success",
1341
+ "data": {
1342
+ "internal": "private-response"
1343
+ }
1344
+ },
1345
+ "expected": {
1346
+ "event": "device.command",
1347
+ "capabilityId": "basic.device.command.startAudioRecording",
1348
+ "parameters": {
1349
+ "device": "microphone"
1350
+ },
1351
+ "status": "success"
1352
+ }
1353
+ },
1354
+ {
1355
+ "target": "/app/capability/invoke/json",
1356
+ "input": {
1357
+ "capabilityId": "basic.device.command.stopAudioRecording",
1358
+ "request": {
1359
+ "device": "microphone",
1360
+ "internal": "private-request"
1361
+ }
1362
+ },
1363
+ "outcome": {
1364
+ "status": "success",
1365
+ "data": {
1366
+ "internal": "private-response"
1367
+ }
1368
+ },
1369
+ "expected": {
1370
+ "event": "device.command",
1371
+ "capabilityId": "basic.device.command.stopAudioRecording",
1372
+ "parameters": {
1373
+ "device": "microphone"
1374
+ },
1375
+ "status": "success"
1376
+ }
1377
+ },
1378
+ {
1379
+ "target": "/app/capability/invoke/json",
1380
+ "input": {
1381
+ "capabilityId": "basic.device.command.setCameraSetting",
1382
+ "request": {
1383
+ "device": "camera",
1384
+ "analysisDetail": "high",
1385
+ "watchStream": "low",
1386
+ "recordingStream": "high"
1387
+ }
1388
+ },
1389
+ "outcome": {
1390
+ "status": "success"
1391
+ },
1392
+ "expected": null
643
1393
  }
644
1394
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.app-facade.v1",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "callSchema": "schema/facade-call.v1.schema.json",
5
5
  "routing": "manifest/routing.v1.json",
6
6
  "routingSchema": "schema/routing.v1.schema.json",
@@ -412,6 +412,19 @@
412
412
  "/app/billing/subscription/resume",
413
413
  "/app/billing/subscription/change"
414
414
  ]
415
+ },
416
+ "developerContracts": {
417
+ "contract": "contract/developer-contracts-v1.md",
418
+ "requestTargets": [
419
+ "/app/developer/contracts/list",
420
+ "/app/developer/contracts/export"
421
+ ],
422
+ "bridgeTargets": [
423
+ "/bridge/schema/contracts/list",
424
+ "/bridge/schema/contracts/export"
425
+ ],
426
+ "owner": "cloudStandardCatalog",
427
+ "transport": "authorizedHub"
415
428
  }
416
429
  },
417
430
  "authorization": "manifest/authorization.v1.json",
@@ -1,5 +1,5 @@
1
1
  {
2
- "contractVersion": "1.116.0",
2
+ "contractVersion": "1.118.1",
3
3
  "operations": {
4
4
  "/app/agent/context/get": "spaceRead",
5
5
  "/app/agent/credit/usage": "spaceRead",
@@ -48,6 +48,10 @@
48
48
  "/app/automation/verify": "spaceWrite",
49
49
  "/app/billing/credit/usage": "userRead",
50
50
  "/app/billing/payment/list": "userRead",
51
+ "/app/billing/subscription/cancel": "userWrite",
52
+ "/app/billing/subscription/change": "userWrite",
53
+ "/app/billing/subscription/checkout/create": "userWrite",
54
+ "/app/billing/subscription/resume": "userWrite",
51
55
  "/app/billing/summary/get": "userRead",
52
56
  "/app/capability/invoke": "spaceWrite",
53
57
  "/app/capability/invoke/json": "spaceWrite",
@@ -73,6 +77,8 @@
73
77
  "/app/dashboard/card/list": "spaceRead",
74
78
  "/app/dashboard/card/main-view/update": "spaceWrite",
75
79
  "/app/dashboard/card/move": "spaceWrite",
80
+ "/app/developer/contracts/export": "spaceRead",
81
+ "/app/developer/contracts/list": "spaceRead",
76
82
  "/app/device/activity/recent/list": "spaceRead",
77
83
  "/app/device/detail/get": "spaceRead",
78
84
  "/app/device/disable": "spaceWrite",
@@ -353,11 +359,7 @@
353
359
  "/pod/talk/request/get": "spaceRead",
354
360
  "/pod/talk/speech/prepare": "spaceWrite",
355
361
  "/pod/talk/turn/submit": "spaceWrite",
356
- "/pod/talk/view/get": "spaceRead",
357
- "/app/billing/subscription/checkout/create": "userWrite",
358
- "/app/billing/subscription/cancel": "userWrite",
359
- "/app/billing/subscription/resume": "userWrite",
360
- "/app/billing/subscription/change": "userWrite"
362
+ "/pod/talk/view/get": "spaceRead"
361
363
  },
362
364
  "nodePrefix": "/app/plugin/",
363
365
  "serviceOperations": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.host-provision.targets.v1",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "contract": "contract/host-provisioning-v1.md",
5
5
  "localTargets": [
6
6
  "/local/host/provision/start",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.hub.targets.v1",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "appTargets": [
5
5
  "/app/hub/get",
6
6
  "/app/hub/remove",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.pod.targets.v1",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "contract": "contract/pod-commissioning-v1.md",
5
5
  "localTargets": [
6
6
  "/local/pod/discovery/start",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.app-facade.routing.v1",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "targetPrefix": "/app/",
5
5
  "default": {
6
6
  "execution": "scopeMode"
@@ -90,7 +90,9 @@
90
90
  "/app/hub/restart",
91
91
  "/app/hub/status",
92
92
  "/app/integration/preview/apply",
93
- "/app/integration/preview/status"
93
+ "/app/integration/preview/status",
94
+ "/app/developer/contracts/list",
95
+ "/app/developer/contracts/export"
94
96
  ],
95
97
  "connectionTargets": [
96
98
  "/app/client/space/focus"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.messaging.targets.v1",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "requestTargets": [
5
5
  "/app/messaging/provider/list",
6
6
  "/app/messaging/provider-account/list",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhome/app-facade-protocol",
3
- "version": "1.116.0",
3
+ "version": "1.118.1",
4
4
  "description": "Build-time protocol artifacts for mhome.app-facade",
5
5
  "license": "MIT",
6
6
  "repository": {
package/protocol.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "protocol": "mhome.app-facade",
3
- "contractVersion": "1.116.0",
3
+ "contractVersion": "1.118.1",
4
4
  "manifest": "manifest/app-facade.v1.json",
5
5
  "schemas": {
6
6
  "storage": "schema/storage.v1.schema.json",
@@ -139,7 +139,6 @@
139
139
  "agent",
140
140
  "messaging",
141
141
  "cli",
142
- "skill",
143
142
  "mcp"
144
143
  ]
145
144
  },
@@ -84,7 +84,6 @@
84
84
  "agent",
85
85
  "messaging",
86
86
  "cli",
87
- "skill",
88
87
  "mcp"
89
88
  ]
90
89
  },