@mhome/app-facade-protocol 1.59.0 → 1.60.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.
@@ -781,75 +781,6 @@
781
781
  ]
782
782
  }
783
783
  },
784
- {
785
- "name": "device-cli-full-list-keeps-details",
786
- "target": "/app/device/list",
787
- "data": {
788
- "devices": [
789
- {
790
- "entityId": "d1",
791
- "name": "Lamp",
792
- "active": false,
793
- "roomId": "r1",
794
- "roomName": "Living room",
795
- "capabilities": [
796
- "state.onOff",
797
- "command.onOff"
798
- ],
799
- "group": false,
800
- "integration": "demo.device",
801
- "connectId": "connection-1",
802
- "manufacturerId": "demo",
803
- "manufacturerName": "Example maker",
804
- "online": false,
805
- "availabilityStatus": "unavailable",
806
- "twinTags": [
807
- "light"
808
- ],
809
- "states": [
810
- {
811
- "capabilityId": "state.onOff",
812
- "value": "off"
813
- }
814
- ],
815
- "memberIds": []
816
- }
817
- ]
818
- },
819
- "status": "success",
820
- "essential": {
821
- "devices": [
822
- {
823
- "entityId": "d1",
824
- "name": "Lamp",
825
- "active": false,
826
- "roomId": "r1",
827
- "roomName": "Living room",
828
- "capabilities": [
829
- "state.onOff",
830
- "command.onOff"
831
- ],
832
- "group": false,
833
- "integration": "demo.device",
834
- "connectId": "connection-1",
835
- "manufacturerId": "demo",
836
- "manufacturerName": "Example maker",
837
- "online": false,
838
- "availabilityStatus": "unavailable",
839
- "twinTags": [
840
- "light"
841
- ],
842
- "states": [
843
- {
844
- "capabilityId": "state.onOff",
845
- "value": "off"
846
- }
847
- ],
848
- "memberIds": []
849
- }
850
- ]
851
- }
852
- },
853
784
  {
854
785
  "name": "device-history-preserves-evidence",
855
786
  "target": "/app/device/history/list",
@@ -1074,5 +1005,1142 @@
1074
1005
  "essential": {
1075
1006
  "status": "notApplicable"
1076
1007
  }
1008
+ },
1009
+ {
1010
+ "name": "space-preference-update",
1011
+ "target": "/app/scope/preference/update",
1012
+ "data": {
1013
+ "action": "Updated",
1014
+ "scopeId": "space-demo",
1015
+ "updatedFields": [
1016
+ "temperatureUnit"
1017
+ ],
1018
+ "preferences": {
1019
+ "temperatureUnit": "F",
1020
+ "dateFormat": "yyyy-MM-dd",
1021
+ "timeFormat": "HH:mm",
1022
+ "lengthUnit": "metric",
1023
+ "weightUnit": "metric",
1024
+ "language": "en"
1025
+ }
1026
+ },
1027
+ "status": "success",
1028
+ "essential": {
1029
+ "action": "Updated",
1030
+ "scopeId": "space-demo",
1031
+ "updatedFields": [
1032
+ "temperatureUnit"
1033
+ ],
1034
+ "preferences": {
1035
+ "temperatureUnit": "F"
1036
+ }
1037
+ }
1038
+ },
1039
+ {
1040
+ "name": "space-preference-empty-keys",
1041
+ "target": "/app/scope/preference/update",
1042
+ "data": {
1043
+ "updatedFields": [],
1044
+ "preferences": {
1045
+ "temperatureUnit": "F",
1046
+ "dateFormat": "yyyy-MM-dd",
1047
+ "timeFormat": "HH:mm",
1048
+ "lengthUnit": "metric",
1049
+ "weightUnit": "metric",
1050
+ "language": "en"
1051
+ }
1052
+ },
1053
+ "status": "success",
1054
+ "essential": {
1055
+ "updatedFields": [],
1056
+ "preferences": {}
1057
+ }
1058
+ },
1059
+ {
1060
+ "name": "space-preference-no-key-list",
1061
+ "target": "/app/scope/preference/update",
1062
+ "data": {
1063
+ "preferences": {
1064
+ "temperatureUnit": "F",
1065
+ "dateFormat": "yyyy-MM-dd",
1066
+ "timeFormat": "HH:mm",
1067
+ "lengthUnit": "metric",
1068
+ "weightUnit": "metric",
1069
+ "language": "en"
1070
+ }
1071
+ },
1072
+ "status": "success",
1073
+ "essential": {
1074
+ "preferences": {
1075
+ "temperatureUnit": "F",
1076
+ "dateFormat": "yyyy-MM-dd",
1077
+ "timeFormat": "HH:mm",
1078
+ "lengthUnit": "metric",
1079
+ "weightUnit": "metric",
1080
+ "language": "en"
1081
+ }
1082
+ }
1083
+ },
1084
+ {
1085
+ "name": "space-preference-invalid-key-list",
1086
+ "target": "/app/scope/preference/update",
1087
+ "data": {
1088
+ "updatedFields": [
1089
+ null
1090
+ ],
1091
+ "preferences": {
1092
+ "temperatureUnit": "F",
1093
+ "dateFormat": "yyyy-MM-dd",
1094
+ "timeFormat": "HH:mm",
1095
+ "lengthUnit": "metric",
1096
+ "weightUnit": "metric",
1097
+ "language": "en"
1098
+ }
1099
+ },
1100
+ "status": "success",
1101
+ "essential": {
1102
+ "updatedFields": [
1103
+ null
1104
+ ],
1105
+ "preferences": {
1106
+ "temperatureUnit": "F",
1107
+ "dateFormat": "yyyy-MM-dd",
1108
+ "timeFormat": "HH:mm",
1109
+ "lengthUnit": "metric",
1110
+ "weightUnit": "metric",
1111
+ "language": "en"
1112
+ }
1113
+ }
1114
+ },
1115
+ {
1116
+ "name": "space-location-update",
1117
+ "target": "/app/scope/location/update",
1118
+ "data": {
1119
+ "action": "Updated",
1120
+ "scopeId": "space-demo",
1121
+ "locationId": "l:office",
1122
+ "name": "Office",
1123
+ "address": "Example address",
1124
+ "timezone": "Asia/Shanghai",
1125
+ "countryCode": "CN",
1126
+ "latitude": 31.2,
1127
+ "longitude": 121.4,
1128
+ "home": false,
1129
+ "updatedFields": [
1130
+ "name"
1131
+ ],
1132
+ "previousName": "Work",
1133
+ "previousAddress": "Example address"
1134
+ },
1135
+ "status": "success",
1136
+ "essential": {
1137
+ "action": "Updated",
1138
+ "scopeId": "space-demo",
1139
+ "locationId": "l:office",
1140
+ "name": "Office",
1141
+ "address": "Example address",
1142
+ "timezone": "Asia/Shanghai",
1143
+ "countryCode": "CN",
1144
+ "latitude": 31.2,
1145
+ "longitude": 121.4,
1146
+ "home": false,
1147
+ "updatedFields": [
1148
+ "name"
1149
+ ]
1150
+ }
1151
+ },
1152
+ {
1153
+ "name": "space-list",
1154
+ "target": "/app/scope/list",
1155
+ "data": {
1156
+ "spaces": [
1157
+ {
1158
+ "scopeId": "space-demo",
1159
+ "name": "Home",
1160
+ "mode": "local",
1161
+ "agentMode": "cloud",
1162
+ "lifecycleState": "ACTIVE"
1163
+ }
1164
+ ]
1165
+ },
1166
+ "status": "success",
1167
+ "essential": {
1168
+ "spaces": [
1169
+ {
1170
+ "scopeId": "space-demo",
1171
+ "name": "Home",
1172
+ "mode": "local",
1173
+ "agentMode": "cloud",
1174
+ "lifecycleState": "ACTIVE"
1175
+ }
1176
+ ]
1177
+ }
1178
+ },
1179
+ {
1180
+ "name": "space-current",
1181
+ "target": "/app/scope/detail/get",
1182
+ "data": {
1183
+ "space": {
1184
+ "scopeId": "space-demo",
1185
+ "name": "Home",
1186
+ "mode": "local",
1187
+ "agentMode": "cloud",
1188
+ "lifecycleState": "ACTIVE"
1189
+ },
1190
+ "locations": [
1191
+ {
1192
+ "scopeId": "space-demo",
1193
+ "locationId": "l:office",
1194
+ "name": "Office",
1195
+ "address": "Example address",
1196
+ "timezone": "Asia/Shanghai",
1197
+ "countryCode": "CN",
1198
+ "latitude": 31.2,
1199
+ "longitude": 121.4,
1200
+ "altitude": 0.0
1201
+ }
1202
+ ]
1203
+ },
1204
+ "status": "success",
1205
+ "essential": {
1206
+ "space": {
1207
+ "scopeId": "space-demo",
1208
+ "name": "Home",
1209
+ "mode": "local",
1210
+ "agentMode": "cloud",
1211
+ "lifecycleState": "ACTIVE"
1212
+ },
1213
+ "locations": [
1214
+ {
1215
+ "scopeId": "space-demo",
1216
+ "locationId": "l:office",
1217
+ "name": "Office",
1218
+ "address": "Example address",
1219
+ "timezone": "Asia/Shanghai",
1220
+ "countryCode": "CN",
1221
+ "latitude": 31.2,
1222
+ "longitude": 121.4,
1223
+ "altitude": 0.0
1224
+ }
1225
+ ]
1226
+ }
1227
+ },
1228
+ {
1229
+ "name": "space-invite-outcomes",
1230
+ "target": "/app/scope/member/invite",
1231
+ "data": {
1232
+ "action": "Invited",
1233
+ "scopeId": "space-demo",
1234
+ "requested": [
1235
+ "new@example.com",
1236
+ "pending@example.com",
1237
+ "member@example.com",
1238
+ "invalid@example.com"
1239
+ ],
1240
+ "invited": [
1241
+ "new@example.com"
1242
+ ],
1243
+ "alreadyPending": [
1244
+ "pending@example.com"
1245
+ ],
1246
+ "alreadyMembers": [
1247
+ "member@example.com"
1248
+ ],
1249
+ "failed": [
1250
+ "invalid@example.com"
1251
+ ]
1252
+ },
1253
+ "status": "success",
1254
+ "essential": {
1255
+ "action": "Invited",
1256
+ "scopeId": "space-demo",
1257
+ "requested": [
1258
+ "new@example.com",
1259
+ "pending@example.com",
1260
+ "member@example.com",
1261
+ "invalid@example.com"
1262
+ ],
1263
+ "invited": [
1264
+ "new@example.com"
1265
+ ],
1266
+ "alreadyPending": [
1267
+ "pending@example.com"
1268
+ ],
1269
+ "alreadyMembers": [
1270
+ "member@example.com"
1271
+ ],
1272
+ "failed": [
1273
+ "invalid@example.com"
1274
+ ]
1275
+ }
1276
+ },
1277
+ {
1278
+ "name": "hub-unconfigured",
1279
+ "target": "/app/hub/get",
1280
+ "data": {
1281
+ "scopeId": "space-demo",
1282
+ "configured": false,
1283
+ "hub": null,
1284
+ "operation": null,
1285
+ "revocation": null
1286
+ },
1287
+ "status": "success",
1288
+ "essential": {
1289
+ "scopeId": "space-demo",
1290
+ "configured": false,
1291
+ "hub": null,
1292
+ "operation": null,
1293
+ "revocation": null
1294
+ }
1295
+ },
1296
+ {
1297
+ "name": "hub-runtime",
1298
+ "target": "/app/hub/status",
1299
+ "data": {
1300
+ "run": 7,
1301
+ "phase": "running",
1302
+ "betaMode": false
1303
+ },
1304
+ "status": "success",
1305
+ "essential": {
1306
+ "run": 7,
1307
+ "phase": "running",
1308
+ "betaMode": false
1309
+ }
1310
+ },
1311
+ {
1312
+ "name": "pod-directory-unknown",
1313
+ "target": "/app/pod/list",
1314
+ "data": {
1315
+ "scopeId": "space-demo",
1316
+ "observedAtMs": 1800000000000,
1317
+ "pods": [
1318
+ {
1319
+ "registrationId": "pod-demo",
1320
+ "clientMode": "user",
1321
+ "registered": true,
1322
+ "name": "Desk",
1323
+ "deviceId": "device-demo",
1324
+ "model": "Pod",
1325
+ "platform": "esp32",
1326
+ "firmwareVersion": "1.0.0",
1327
+ "issuedAt": 1800000000000,
1328
+ "activatedAt": 1800000001000,
1329
+ "connection": {
1330
+ "scopeId": null,
1331
+ "state": "unknown",
1332
+ "source": "unavailable"
1333
+ }
1334
+ }
1335
+ ],
1336
+ "sourceErrors": {
1337
+ "space": "Hub unavailable"
1338
+ }
1339
+ },
1340
+ "status": "success",
1341
+ "essential": {
1342
+ "scopeId": "space-demo",
1343
+ "observedAtMs": 1800000000000,
1344
+ "pods": [
1345
+ {
1346
+ "registrationId": "pod-demo",
1347
+ "clientMode": "user",
1348
+ "registered": true,
1349
+ "name": "Desk",
1350
+ "deviceId": "device-demo",
1351
+ "model": "Pod",
1352
+ "platform": "esp32",
1353
+ "firmwareVersion": "1.0.0",
1354
+ "issuedAt": 1800000000000,
1355
+ "activatedAt": 1800000001000,
1356
+ "connection": {
1357
+ "scopeId": null,
1358
+ "state": "unknown",
1359
+ "source": "unavailable"
1360
+ }
1361
+ }
1362
+ ],
1363
+ "sourceErrors": {
1364
+ "space": "Hub unavailable"
1365
+ }
1366
+ }
1367
+ },
1368
+ {
1369
+ "name": "pod-rename",
1370
+ "target": "/app/pod/rename",
1371
+ "data": {
1372
+ "registrationId": "pod-demo",
1373
+ "name": "Desk"
1374
+ },
1375
+ "status": "success",
1376
+ "essential": {
1377
+ "registrationId": "pod-demo",
1378
+ "name": "Desk"
1379
+ }
1380
+ },
1381
+ {
1382
+ "name": "messaging-link-code",
1383
+ "target": "/app/messaging/link/code/create",
1384
+ "data": {
1385
+ "challenge": {
1386
+ "code": "DEMO123",
1387
+ "command": "/link DEMO123",
1388
+ "expiresAtMs": 1800000300000,
1389
+ "challengeId": "challenge-demo"
1390
+ }
1391
+ },
1392
+ "status": "success",
1393
+ "essential": {
1394
+ "challenge": {
1395
+ "code": "DEMO123",
1396
+ "command": "/link DEMO123",
1397
+ "expiresAtMs": 1800000300000,
1398
+ "challengeId": "challenge-demo"
1399
+ }
1400
+ }
1401
+ },
1402
+ {
1403
+ "name": "messaging-provider-account",
1404
+ "target": "/app/messaging/provider-account/list",
1405
+ "data": {
1406
+ "accounts": [
1407
+ {
1408
+ "provider": "telegram",
1409
+ "placement": "cloud",
1410
+ "accountId": "bot-demo",
1411
+ "ownership": "system",
1412
+ "displayName": "Example bot",
1413
+ "enabled": true,
1414
+ "status": "active",
1415
+ "statusMessage": null,
1416
+ "providerData": {
1417
+ "botUsername": "ExampleBot"
1418
+ }
1419
+ }
1420
+ ]
1421
+ },
1422
+ "status": "success",
1423
+ "essential": {
1424
+ "accounts": [
1425
+ {
1426
+ "provider": "telegram",
1427
+ "placement": "cloud",
1428
+ "accountId": "bot-demo",
1429
+ "ownership": "system",
1430
+ "displayName": "Example bot",
1431
+ "enabled": true,
1432
+ "status": "active",
1433
+ "statusMessage": null,
1434
+ "providerData": {
1435
+ "botUsername": "ExampleBot"
1436
+ }
1437
+ }
1438
+ ]
1439
+ }
1440
+ },
1441
+ {
1442
+ "name": "host-service-install",
1443
+ "target": "/app/host/service/install",
1444
+ "data": {
1445
+ "operationId": "operation-demo",
1446
+ "hostId": "host-demo",
1447
+ "state": "succeeded",
1448
+ "phase": "completed",
1449
+ "updatedAtMs": 1800000000000,
1450
+ "error": null,
1451
+ "result": {
1452
+ "changed": true,
1453
+ "warnings": [
1454
+ "Restart required"
1455
+ ],
1456
+ "backgroundServices": [],
1457
+ "plan": {
1458
+ "target": "macos-arm64",
1459
+ "catalogs": {
1460
+ "platform": {
1461
+ "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1462
+ "version": "20261027-01"
1463
+ }
1464
+ },
1465
+ "warnings": [],
1466
+ "components": [
1467
+ {
1468
+ "component": "node-camera",
1469
+ "action": "install",
1470
+ "fromVersion": null,
1471
+ "toVersion": "1.0.0",
1472
+ "asset": {
1473
+ "url": "https://example.invalid/camera.tar.gz",
1474
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1475
+ "size": 1024
1476
+ },
1477
+ "releaseManifest": {
1478
+ "files": []
1479
+ },
1480
+ "nodeMetadata": {
1481
+ "artifact": {}
1482
+ },
1483
+ "compatibility": {
1484
+ "coreProtocol": 1
1485
+ }
1486
+ }
1487
+ ]
1488
+ }
1489
+ }
1490
+ },
1491
+ "status": "success",
1492
+ "essential": {
1493
+ "operationId": "operation-demo",
1494
+ "hostId": "host-demo",
1495
+ "state": "succeeded",
1496
+ "phase": "completed",
1497
+ "updatedAtMs": 1800000000000,
1498
+ "error": null,
1499
+ "result": {
1500
+ "changed": true,
1501
+ "warnings": [
1502
+ "Restart required"
1503
+ ],
1504
+ "backgroundServices": [],
1505
+ "plan": {
1506
+ "target": "macos-arm64",
1507
+ "warnings": [],
1508
+ "components": [
1509
+ {
1510
+ "component": "node-camera",
1511
+ "action": "install",
1512
+ "fromVersion": null,
1513
+ "toVersion": "1.0.0",
1514
+ "compatibility": {
1515
+ "coreProtocol": 1
1516
+ }
1517
+ }
1518
+ ]
1519
+ }
1520
+ }
1521
+ }
1522
+ },
1523
+ {
1524
+ "name": "host-service-queued",
1525
+ "target": "/app/host/service/install",
1526
+ "data": {
1527
+ "operationId": "operation-demo",
1528
+ "hostId": "host-demo",
1529
+ "state": "queued",
1530
+ "phase": "queued",
1531
+ "updatedAtMs": 1800000000000,
1532
+ "error": null,
1533
+ "result": null
1534
+ },
1535
+ "status": "success",
1536
+ "essential": {
1537
+ "operationId": "operation-demo",
1538
+ "hostId": "host-demo",
1539
+ "state": "queued",
1540
+ "phase": "queued",
1541
+ "updatedAtMs": 1800000000000,
1542
+ "error": null,
1543
+ "result": null
1544
+ }
1545
+ },
1546
+ {
1547
+ "name": "host-service-failed-state",
1548
+ "target": "/app/host/service/restart",
1549
+ "data": {
1550
+ "operationId": "operation-demo",
1551
+ "hostId": "host-demo",
1552
+ "state": "failed",
1553
+ "phase": "interrupted",
1554
+ "updatedAtMs": 1800000000000,
1555
+ "error": "Host operation interrupted",
1556
+ "result": null
1557
+ },
1558
+ "status": "success",
1559
+ "essential": {
1560
+ "operationId": "operation-demo",
1561
+ "hostId": "host-demo",
1562
+ "state": "failed",
1563
+ "phase": "interrupted",
1564
+ "updatedAtMs": 1800000000000,
1565
+ "error": "Host operation interrupted",
1566
+ "result": null
1567
+ }
1568
+ },
1569
+ {
1570
+ "name": "host-directory",
1571
+ "target": "/app/host/list",
1572
+ "data": {
1573
+ "hosts": [
1574
+ {
1575
+ "hostId": "host-demo",
1576
+ "env": "prod",
1577
+ "registered": true,
1578
+ "reachable": true,
1579
+ "detail": {
1580
+ "status": "ok",
1581
+ "stale": false,
1582
+ "data": {
1583
+ "hostId": "host-demo",
1584
+ "installationSupported": true,
1585
+ "components": [
1586
+ {
1587
+ "id": "node-camera",
1588
+ "serviceId": "camera",
1589
+ "installed": true,
1590
+ "installedVersion": "1.0.0",
1591
+ "enabled": null,
1592
+ "controlError": "Control unavailable",
1593
+ "toggleSupported": true,
1594
+ "catalogLoading": false,
1595
+ "catalogError": null,
1596
+ "availableVersion": "1.0.0",
1597
+ "downloadSizeBytes": 1024,
1598
+ "supported": true,
1599
+ "selectable": true,
1600
+ "structurallyValid": false,
1601
+ "reason": "Repair required"
1602
+ }
1603
+ ],
1604
+ "runtime": {
1605
+ "runtimeRoot": "/example/runtime",
1606
+ "ready": false,
1607
+ "setupRequired": false,
1608
+ "repairRequired": true,
1609
+ "components": [
1610
+ {
1611
+ "id": "node-camera",
1612
+ "payloadFilesValid": false,
1613
+ "installed": true,
1614
+ "version": "1.0.0",
1615
+ "versionDirectoryValid": true,
1616
+ "payloadMarkerValid": true,
1617
+ "currentLinkValid": true,
1618
+ "stableEntrypointValid": true,
1619
+ "structurallyValid": false
1620
+ }
1621
+ ],
1622
+ "repairReasons": [
1623
+ {
1624
+ "code": "payloadFilesMissing",
1625
+ "component": "node-camera"
1626
+ }
1627
+ ],
1628
+ "backgroundServices": []
1629
+ },
1630
+ "operations": [
1631
+ {
1632
+ "operationId": "operation-demo",
1633
+ "hostId": "host-demo",
1634
+ "state": "succeeded",
1635
+ "phase": "completed",
1636
+ "updatedAtMs": 1800000000000,
1637
+ "error": null,
1638
+ "result": {
1639
+ "changed": true,
1640
+ "warnings": [
1641
+ "Restart required"
1642
+ ],
1643
+ "backgroundServices": [],
1644
+ "plan": {
1645
+ "target": "macos-arm64",
1646
+ "catalogs": {
1647
+ "platform": {
1648
+ "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1649
+ "version": "20261027-01"
1650
+ }
1651
+ },
1652
+ "warnings": [],
1653
+ "components": [
1654
+ {
1655
+ "component": "node-camera",
1656
+ "action": "install",
1657
+ "fromVersion": null,
1658
+ "toVersion": "1.0.0",
1659
+ "asset": {
1660
+ "url": "https://example.invalid/camera.tar.gz",
1661
+ "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
1662
+ "size": 1024
1663
+ },
1664
+ "releaseManifest": {
1665
+ "files": []
1666
+ },
1667
+ "nodeMetadata": {
1668
+ "artifact": {}
1669
+ },
1670
+ "compatibility": {
1671
+ "coreProtocol": 1
1672
+ }
1673
+ }
1674
+ ]
1675
+ }
1676
+ }
1677
+ }
1678
+ ],
1679
+ "protocolVersion": 1,
1680
+ "platform": "macos-arm64",
1681
+ "managementMode": "desktop",
1682
+ "unsupportedReason": null,
1683
+ "catalogError": null,
1684
+ "catalogLoading": false,
1685
+ "pluginCatalogError": null,
1686
+ "pluginCatalogLoading": false,
1687
+ "runtimeError": null
1688
+ }
1689
+ }
1690
+ },
1691
+ {
1692
+ "hostId": "host-offline",
1693
+ "env": "prod",
1694
+ "registered": true,
1695
+ "reachable": false,
1696
+ "detail": {
1697
+ "status": "unavailable",
1698
+ "data": null,
1699
+ "error": "notObserved",
1700
+ "stale": false
1701
+ }
1702
+ }
1703
+ ],
1704
+ "sourceErrors": {
1705
+ "discovery": "Unavailable"
1706
+ }
1707
+ },
1708
+ "status": "success",
1709
+ "essential": {
1710
+ "hosts": [
1711
+ {
1712
+ "hostId": "host-demo",
1713
+ "env": "prod",
1714
+ "registered": true,
1715
+ "reachable": true,
1716
+ "detail": {
1717
+ "status": "ok",
1718
+ "stale": false,
1719
+ "data": {
1720
+ "hostId": "host-demo",
1721
+ "installationSupported": true,
1722
+ "components": [
1723
+ {
1724
+ "id": "node-camera",
1725
+ "serviceId": "camera",
1726
+ "installed": true,
1727
+ "installedVersion": "1.0.0",
1728
+ "enabled": null,
1729
+ "controlError": "Control unavailable",
1730
+ "toggleSupported": true,
1731
+ "catalogLoading": false,
1732
+ "catalogError": null,
1733
+ "availableVersion": "1.0.0",
1734
+ "downloadSizeBytes": 1024,
1735
+ "supported": true,
1736
+ "selectable": true,
1737
+ "structurallyValid": false,
1738
+ "reason": "Repair required"
1739
+ }
1740
+ ],
1741
+ "runtime": {
1742
+ "ready": false,
1743
+ "setupRequired": false,
1744
+ "repairRequired": true,
1745
+ "repairReasons": [
1746
+ {
1747
+ "code": "payloadFilesMissing",
1748
+ "component": "node-camera"
1749
+ }
1750
+ ],
1751
+ "backgroundServices": []
1752
+ },
1753
+ "operations": [
1754
+ {
1755
+ "operationId": "operation-demo",
1756
+ "hostId": "host-demo",
1757
+ "state": "succeeded",
1758
+ "phase": "completed",
1759
+ "updatedAtMs": 1800000000000,
1760
+ "error": null,
1761
+ "result": {
1762
+ "changed": true,
1763
+ "warnings": [
1764
+ "Restart required"
1765
+ ],
1766
+ "backgroundServices": [],
1767
+ "plan": {
1768
+ "target": "macos-arm64",
1769
+ "warnings": [],
1770
+ "components": [
1771
+ {
1772
+ "component": "node-camera",
1773
+ "action": "install",
1774
+ "fromVersion": null,
1775
+ "toVersion": "1.0.0",
1776
+ "compatibility": {
1777
+ "coreProtocol": 1
1778
+ }
1779
+ }
1780
+ ]
1781
+ }
1782
+ }
1783
+ }
1784
+ ],
1785
+ "protocolVersion": 1,
1786
+ "platform": "macos-arm64",
1787
+ "managementMode": "desktop",
1788
+ "unsupportedReason": null,
1789
+ "catalogError": null,
1790
+ "catalogLoading": false,
1791
+ "pluginCatalogError": null,
1792
+ "pluginCatalogLoading": false,
1793
+ "runtimeError": null
1794
+ }
1795
+ }
1796
+ },
1797
+ {
1798
+ "hostId": "host-offline",
1799
+ "env": "prod",
1800
+ "registered": true,
1801
+ "reachable": false,
1802
+ "detail": {
1803
+ "status": "unavailable",
1804
+ "data": null,
1805
+ "error": "notObserved",
1806
+ "stale": false
1807
+ }
1808
+ }
1809
+ ],
1810
+ "sourceErrors": {
1811
+ "discovery": "Unavailable"
1812
+ }
1813
+ }
1814
+ },
1815
+ {
1816
+ "name": "card-skin-release-detail",
1817
+ "target": "/app/card-skins/catalog/release/get",
1818
+ "data": {
1819
+ "id": "release-demo",
1820
+ "baseUrl": "https://example.invalid/skin/",
1821
+ "manifest": {
1822
+ "schemaVersion": 1,
1823
+ "packageId": "example.skin",
1824
+ "version": "1.0.0",
1825
+ "name": "Example Skin",
1826
+ "description": "Demo",
1827
+ "apiVersion": 1,
1828
+ "entry": "main.mjs",
1829
+ "files": [
1830
+ {
1831
+ "path": "main.mjs",
1832
+ "mediaType": "text/javascript",
1833
+ "sizeBytes": 1024,
1834
+ "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1835
+ }
1836
+ ],
1837
+ "renderers": [
1838
+ {
1839
+ "id": "switch",
1840
+ "name": "Switch",
1841
+ "description": "Demo switch",
1842
+ "supportedPatterns": [
1843
+ {
1844
+ "patternId": "switch",
1845
+ "contractId": "switch",
1846
+ "contractVersion": 1
1847
+ }
1848
+ ],
1849
+ "detail": {
1850
+ "mode": "builtin"
1851
+ },
1852
+ "configSchema": {
1853
+ "type": "object",
1854
+ "properties": {
1855
+ "color": {
1856
+ "type": "string",
1857
+ "default": "green"
1858
+ }
1859
+ }
1860
+ }
1861
+ }
1862
+ ]
1863
+ }
1864
+ },
1865
+ "status": "success",
1866
+ "essential": {
1867
+ "id": "release-demo",
1868
+ "manifest": {
1869
+ "schemaVersion": 1,
1870
+ "packageId": "example.skin",
1871
+ "version": "1.0.0",
1872
+ "name": "Example Skin",
1873
+ "description": "Demo",
1874
+ "apiVersion": 1,
1875
+ "renderers": [
1876
+ {
1877
+ "id": "switch",
1878
+ "name": "Switch",
1879
+ "description": "Demo switch",
1880
+ "supportedPatterns": [
1881
+ {
1882
+ "patternId": "switch",
1883
+ "contractId": "switch",
1884
+ "contractVersion": 1
1885
+ }
1886
+ ],
1887
+ "detail": {
1888
+ "mode": "builtin"
1889
+ },
1890
+ "configSchema": {
1891
+ "type": "object",
1892
+ "properties": {
1893
+ "color": {
1894
+ "type": "string",
1895
+ "default": "green"
1896
+ }
1897
+ }
1898
+ }
1899
+ }
1900
+ ]
1901
+ }
1902
+ }
1903
+ },
1904
+ {
1905
+ "name": "card-skin-release-list",
1906
+ "target": "/app/card-skins/catalog/release/list",
1907
+ "data": {
1908
+ "releases": [
1909
+ {
1910
+ "id": "release-demo",
1911
+ "baseUrl": "https://example.invalid/skin/",
1912
+ "manifest": {
1913
+ "schemaVersion": 1,
1914
+ "packageId": "example.skin",
1915
+ "version": "1.0.0",
1916
+ "name": "Example Skin",
1917
+ "description": "Demo",
1918
+ "apiVersion": 1,
1919
+ "entry": "main.mjs",
1920
+ "files": [
1921
+ {
1922
+ "path": "main.mjs",
1923
+ "mediaType": "text/javascript",
1924
+ "sizeBytes": 1024,
1925
+ "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1926
+ }
1927
+ ],
1928
+ "renderers": [
1929
+ {
1930
+ "id": "switch",
1931
+ "name": "Switch",
1932
+ "description": "Demo switch",
1933
+ "supportedPatterns": [
1934
+ {
1935
+ "patternId": "switch",
1936
+ "contractId": "switch",
1937
+ "contractVersion": 1
1938
+ }
1939
+ ],
1940
+ "detail": {
1941
+ "mode": "builtin"
1942
+ },
1943
+ "configSchema": {
1944
+ "type": "object",
1945
+ "properties": {
1946
+ "color": {
1947
+ "type": "string",
1948
+ "default": "green"
1949
+ }
1950
+ }
1951
+ }
1952
+ }
1953
+ ]
1954
+ }
1955
+ }
1956
+ ]
1957
+ },
1958
+ "status": "success",
1959
+ "essential": {
1960
+ "releases": [
1961
+ {
1962
+ "id": "release-demo",
1963
+ "manifest": {
1964
+ "schemaVersion": 1,
1965
+ "packageId": "example.skin",
1966
+ "version": "1.0.0",
1967
+ "name": "Example Skin",
1968
+ "description": "Demo",
1969
+ "apiVersion": 1,
1970
+ "renderers": [
1971
+ {
1972
+ "id": "switch",
1973
+ "name": "Switch",
1974
+ "description": "Demo switch",
1975
+ "supportedPatterns": [
1976
+ {
1977
+ "patternId": "switch",
1978
+ "contractId": "switch",
1979
+ "contractVersion": 1
1980
+ }
1981
+ ],
1982
+ "detail": {
1983
+ "mode": "builtin"
1984
+ }
1985
+ }
1986
+ ]
1987
+ }
1988
+ }
1989
+ ]
1990
+ }
1991
+ },
1992
+ {
1993
+ "name": "card-skin-selection",
1994
+ "target": "/app/card-skins/selection/get",
1995
+ "data": {
1996
+ "revision": "revision-demo",
1997
+ "selection": {
1998
+ "installations": [
1999
+ {
2000
+ "id": "installation-demo",
2001
+ "spaceId": "space-demo",
2002
+ "releaseId": "release-demo"
2003
+ }
2004
+ ],
2005
+ "overrides": [
2006
+ {
2007
+ "spaceId": "space-demo",
2008
+ "patternId": "switch",
2009
+ "installationId": "installation-demo",
2010
+ "rendererId": "switch",
2011
+ "config": {
2012
+ "color": "red"
2013
+ }
2014
+ }
2015
+ ],
2016
+ "releases": [
2017
+ {
2018
+ "id": "release-demo",
2019
+ "baseUrl": "https://example.invalid/skin/",
2020
+ "manifest": {
2021
+ "schemaVersion": 1,
2022
+ "packageId": "example.skin",
2023
+ "version": "1.0.0",
2024
+ "name": "Example Skin",
2025
+ "description": "Demo",
2026
+ "apiVersion": 1,
2027
+ "entry": "main.mjs",
2028
+ "files": [
2029
+ {
2030
+ "path": "main.mjs",
2031
+ "mediaType": "text/javascript",
2032
+ "sizeBytes": 1024,
2033
+ "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2034
+ }
2035
+ ],
2036
+ "renderers": [
2037
+ {
2038
+ "id": "switch",
2039
+ "name": "Switch",
2040
+ "description": "Demo switch",
2041
+ "supportedPatterns": [
2042
+ {
2043
+ "patternId": "switch",
2044
+ "contractId": "switch",
2045
+ "contractVersion": 1
2046
+ }
2047
+ ],
2048
+ "detail": {
2049
+ "mode": "builtin"
2050
+ },
2051
+ "configSchema": {
2052
+ "type": "object",
2053
+ "properties": {
2054
+ "color": {
2055
+ "type": "string",
2056
+ "default": "green"
2057
+ }
2058
+ }
2059
+ }
2060
+ }
2061
+ ]
2062
+ }
2063
+ }
2064
+ ]
2065
+ }
2066
+ },
2067
+ "status": "success",
2068
+ "essential": {
2069
+ "revision": "revision-demo",
2070
+ "selection": {
2071
+ "installations": [
2072
+ {
2073
+ "id": "installation-demo",
2074
+ "spaceId": "space-demo",
2075
+ "releaseId": "release-demo"
2076
+ }
2077
+ ],
2078
+ "overrides": [
2079
+ {
2080
+ "spaceId": "space-demo",
2081
+ "patternId": "switch",
2082
+ "installationId": "installation-demo",
2083
+ "rendererId": "switch",
2084
+ "config": {
2085
+ "color": "red"
2086
+ }
2087
+ }
2088
+ ],
2089
+ "releases": [
2090
+ {
2091
+ "id": "release-demo",
2092
+ "manifest": {
2093
+ "schemaVersion": 1,
2094
+ "packageId": "example.skin",
2095
+ "version": "1.0.0",
2096
+ "name": "Example Skin",
2097
+ "description": "Demo",
2098
+ "apiVersion": 1,
2099
+ "renderers": [
2100
+ {
2101
+ "id": "switch",
2102
+ "name": "Switch",
2103
+ "description": "Demo switch",
2104
+ "supportedPatterns": [
2105
+ {
2106
+ "patternId": "switch",
2107
+ "contractId": "switch",
2108
+ "contractVersion": 1
2109
+ }
2110
+ ],
2111
+ "detail": {
2112
+ "mode": "builtin"
2113
+ }
2114
+ }
2115
+ ]
2116
+ }
2117
+ }
2118
+ ]
2119
+ }
2120
+ }
2121
+ },
2122
+ {
2123
+ "name": "card-skin-empty-ack",
2124
+ "target": "/app/card-skins/install",
2125
+ "data": {},
2126
+ "status": "success",
2127
+ "essential": {}
2128
+ },
2129
+ {
2130
+ "name": "internal-profile",
2131
+ "target": "/app/user/profile/get",
2132
+ "data": {
2133
+ "name": "Example user",
2134
+ "email": "user@example.com",
2135
+ "avatarUrl": null,
2136
+ "avatarExpiresAtMs": null
2137
+ },
2138
+ "status": "success",
2139
+ "essential": {
2140
+ "name": "Example user",
2141
+ "email": "user@example.com",
2142
+ "avatarUrl": null,
2143
+ "avatarExpiresAtMs": null
2144
+ }
1077
2145
  }
1078
2146
  ]