@mhome/app-facade-protocol 1.115.0 → 1.117.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.
@@ -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}`;
@@ -124,3 +124,10 @@ values, Duration values and schedule wall-clock times are not inferred to be dat
124
124
  Widget resources use `displayName` as their only human-readable name. Display names
125
125
  may repeat; identity and references use Widget IDs. Configuration patches may omit
126
126
  `displayName` to preserve it. Essential and Full both retain this name.
127
+
128
+ Device definition list/detail rows may carry `parent`, a provider-local physical
129
+ device grouping key scoped by Space, Integration and Connection. It does not name
130
+ a Core Device Group or require a separate parent Entity. Optional `setupStatus`
131
+ (`pending`, `failed`, `ready`) describes initial provider admission independently
132
+ of user enablement and subsequent online/offline observations. Essential device
133
+ lists retain both fields.
@@ -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.115.0",
3
+ "contractVersion": "1.117.0",
4
4
  "callSchema": "schema/facade-call.v1.schema.json",
5
5
  "routing": "manifest/routing.v1.json",
6
6
  "routingSchema": "schema/routing.v1.schema.json",
@@ -1,5 +1,5 @@
1
1
  {
2
- "contractVersion": "1.115.0",
2
+ "contractVersion": "1.117.0",
3
3
  "operations": {
4
4
  "/app/agent/context/get": "spaceRead",
5
5
  "/app/agent/credit/usage": "spaceRead",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.host-provision.targets.v1",
3
- "contractVersion": "1.115.0",
3
+ "contractVersion": "1.117.0",
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.115.0",
3
+ "contractVersion": "1.117.0",
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.115.0",
3
+ "contractVersion": "1.117.0",
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.115.0",
3
+ "contractVersion": "1.117.0",
4
4
  "targetPrefix": "/app/",
5
5
  "default": {
6
6
  "execution": "scopeMode"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.messaging.targets.v1",
3
- "contractVersion": "1.115.0",
3
+ "contractVersion": "1.117.0",
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.115.0",
3
+ "version": "1.117.0",
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.115.0",
3
+ "contractVersion": "1.117.0",
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
  },