@mhome/app-facade-protocol 1.127.1 → 1.128.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/contract/space-presentation-v1.md +39 -4
- package/fixtures/presentation/cases.json +530 -27
- package/manifest/app-facade.v1.json +8 -1
- package/manifest/authorization.v1.json +2 -2
- package/manifest/host-provision-targets.v1.json +1 -1
- package/manifest/hub-targets.v1.json +2 -3
- package/manifest/pod-targets.v1.json +1 -1
- package/manifest/routing.v1.json +1 -2
- package/manifest/targets.v1.json +1 -1
- package/package.json +1 -1
- package/protocol.json +2 -1
- package/schema/space-member-changes.v1.schema.json +190 -0
package/README.md
CHANGED
|
@@ -39,15 +39,18 @@ conversion belongs at the Facade implementation boundary.
|
|
|
39
39
|
|
|
40
40
|
Agent Profile get/save use `content` for the complete document. LLM mode get/save
|
|
41
41
|
use `llmMode`; summary and default-provider metadata use that same field.
|
|
42
|
-
`control.
|
|
42
|
+
`control.responseDetail` selects response detail. Each LLM use case has one current model. The existing
|
|
43
43
|
`/app/agent/llm/summary` operation owns the combined LLM read used by UI and CLI.
|
|
44
44
|
See the Agent cases in the shared [presentation fixtures](fixtures/presentation/cases.json).
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
Business aggregation, multi-write orchestration and overall outcome settlement belong
|
|
47
|
+
behind a Facade. Clients may make independent reads needed by the caller and adapt
|
|
48
|
+
arguments, local files and terminal/UI input. They may drive defined prepare/commit,
|
|
49
|
+
interactive-session and asynchronous-operation protocols; the backend owns business
|
|
50
|
+
steps, transitions and final DTOs. Do not implement product business composites or
|
|
51
|
+
alternative DTOs in CLI, SDK or surface adapters. A UI view model may derive display
|
|
52
|
+
state after the SDK boundary. Backend composition does not imply a distributed
|
|
53
|
+
transaction or automatic rollback.
|
|
51
54
|
|
|
52
55
|
## Full values and Essential presentation
|
|
53
56
|
|
|
@@ -49,7 +49,42 @@ login and Hub authorization retain their independently owned wire DTOs.
|
|
|
49
49
|
|
|
50
50
|
Legacy `/scope/list`, `/scope/get`, `/scope/preference/get`, `/scope/agent/get`,
|
|
51
51
|
and `/scope/location/list` readers are retired, without fallback aliases. Native
|
|
52
|
-
UI membership refresh uses `/app/presentation/space/list
|
|
53
|
-
`/app/space/list`
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
UI membership refresh uses `/app/presentation/space/list`. CLI `space list` forwards
|
|
53
|
+
`/app/space/list` and its canonical `{spaces}` DTO with `spaceId`, `name`, `mode`,
|
|
54
|
+
`llmMode` and `lifecycleState`. It never expands per-Space context or adds local
|
|
55
|
+
active-Space state and Hub routes. Read selected details, members and preferences
|
|
56
|
+
through their own Facades. CLI selection uses `/app/client/space/focus`; it returns
|
|
57
|
+
`{focusedSpaceId}` and leaves membership validation/persistence to the receiving
|
|
58
|
+
Client and authoritative executor. `/focus` has no compatibility alias.
|
|
59
|
+
|
|
60
|
+
Space commands pass the caller's Full/Essential choice to the Facade. Prepare
|
|
61
|
+
previews remain fixed control objects. Whole-Space deletion drives the existing
|
|
62
|
+
asynchronous protocol using structured Full control reads, then returns the
|
|
63
|
+
unchanged `/app/space/delete/status` DTO in the requested detail. It does not
|
|
64
|
+
rewrite `action` or hide operation fields. A successful status read may describe
|
|
65
|
+
`DELETE_FAILED`; waiting for that failed operation still exits unsuccessfully.
|
|
66
|
+
|
|
67
|
+
## Space mutation outcomes
|
|
68
|
+
|
|
69
|
+
The backend settles member invite/remove outcomes before presentation. A request
|
|
70
|
+
with no failed items succeeds, including already-pending/already-member invitations
|
|
71
|
+
and removal of absent memberships. Fulfilled and failed items together return
|
|
72
|
+
`partial`; failure of every requested item returns `error` with the complete
|
|
73
|
+
per-item result in diagnostics. Full and Essential retain the same outcome.
|
|
74
|
+
Location writes with `NotCreated`, `NotUpdated` or `NotDeleted` return `error`,
|
|
75
|
+
with the original write result in diagnostics. Prepared previews describe planned
|
|
76
|
+
work and never prove effects. Reading a failed deletion operation remains a
|
|
77
|
+
successful read; accepting deletion never means erasure has completed.
|
|
78
|
+
|
|
79
|
+
`/app/space/member/update` accepts `{removeEmails?: string[], inviteEmails?: string[]}`
|
|
80
|
+
with at least one requested change. UI member editing and the human-operated CLI
|
|
81
|
+
share this business composite. The backend normalizes/resolves all inputs and
|
|
82
|
+
rejects an OWNER removal before any write. It then removes memberships and sends
|
|
83
|
+
invitations under one Space mutation lock; it does not promise rollback. The same
|
|
84
|
+
email cannot be removed and invited together. Its complete result is
|
|
85
|
+
`{action, spaceId, removal, invitation, problems}`; removal/invitation preserve
|
|
86
|
+
those individual operations' DTOs. If invitation execution becomes unconfirmed,
|
|
87
|
+
`invitation` is null and `problems` explains that membership must be inspected
|
|
88
|
+
before retrying. The backend settles the overall outcome. It supports direct and
|
|
89
|
+
prepared modes; previews perform no writes. This operation does not extend the
|
|
90
|
+
native Agent, MCP or external Skill boundary for member removal.
|
|
@@ -1147,8 +1147,8 @@
|
|
|
1147
1147
|
"spaceId": "space-demo",
|
|
1148
1148
|
"name": "Home",
|
|
1149
1149
|
"mode": "local",
|
|
1150
|
-
"
|
|
1151
|
-
"
|
|
1150
|
+
"lifecycleState": "ACTIVE",
|
|
1151
|
+
"llmMode": "cloud"
|
|
1152
1152
|
}
|
|
1153
1153
|
]
|
|
1154
1154
|
},
|
|
@@ -1159,8 +1159,8 @@
|
|
|
1159
1159
|
"spaceId": "space-demo",
|
|
1160
1160
|
"name": "Home",
|
|
1161
1161
|
"mode": "local",
|
|
1162
|
-
"
|
|
1163
|
-
"
|
|
1162
|
+
"lifecycleState": "ACTIVE",
|
|
1163
|
+
"llmMode": "cloud"
|
|
1164
1164
|
}
|
|
1165
1165
|
]
|
|
1166
1166
|
}
|
|
@@ -1173,8 +1173,8 @@
|
|
|
1173
1173
|
"spaceId": "space-demo",
|
|
1174
1174
|
"name": "Home",
|
|
1175
1175
|
"mode": "local",
|
|
1176
|
-
"
|
|
1177
|
-
"
|
|
1176
|
+
"lifecycleState": "ACTIVE",
|
|
1177
|
+
"llmMode": "cloud"
|
|
1178
1178
|
},
|
|
1179
1179
|
"locations": [
|
|
1180
1180
|
{
|
|
@@ -1196,8 +1196,8 @@
|
|
|
1196
1196
|
"spaceId": "space-demo",
|
|
1197
1197
|
"name": "Home",
|
|
1198
1198
|
"mode": "local",
|
|
1199
|
-
"
|
|
1200
|
-
"
|
|
1199
|
+
"lifecycleState": "ACTIVE",
|
|
1200
|
+
"llmMode": "cloud"
|
|
1201
1201
|
},
|
|
1202
1202
|
"locations": [
|
|
1203
1203
|
{
|
|
@@ -1239,7 +1239,7 @@
|
|
|
1239
1239
|
"invalid@example.com"
|
|
1240
1240
|
]
|
|
1241
1241
|
},
|
|
1242
|
-
"status": "
|
|
1242
|
+
"status": "partial",
|
|
1243
1243
|
"essential": {
|
|
1244
1244
|
"action": "Invited",
|
|
1245
1245
|
"spaceId": "space-demo",
|
|
@@ -2171,7 +2171,7 @@
|
|
|
2171
2171
|
"llmUseCases": [
|
|
2172
2172
|
{
|
|
2173
2173
|
"useCase": "chat",
|
|
2174
|
-
"displayName": "
|
|
2174
|
+
"displayName": "对话",
|
|
2175
2175
|
"description": null,
|
|
2176
2176
|
"ownerType": "system",
|
|
2177
2177
|
"ownerId": "agent",
|
|
@@ -2199,7 +2199,7 @@
|
|
|
2199
2199
|
"models": [
|
|
2200
2200
|
{
|
|
2201
2201
|
"id": "demo-chat",
|
|
2202
|
-
"displayName": "
|
|
2202
|
+
"displayName": "示例对话模型",
|
|
2203
2203
|
"modelType": "chat",
|
|
2204
2204
|
"available": true,
|
|
2205
2205
|
"deprecated": false,
|
|
@@ -2235,7 +2235,7 @@
|
|
|
2235
2235
|
"providers": [
|
|
2236
2236
|
{
|
|
2237
2237
|
"provider": "local_example",
|
|
2238
|
-
"displayName": "
|
|
2238
|
+
"displayName": "示例 Provider",
|
|
2239
2239
|
"runtime": "local",
|
|
2240
2240
|
"modelSource": "catalog",
|
|
2241
2241
|
"catalogProvider": "example",
|
|
@@ -2306,7 +2306,7 @@
|
|
|
2306
2306
|
"llmUseCases": [
|
|
2307
2307
|
{
|
|
2308
2308
|
"useCase": "chat",
|
|
2309
|
-
"displayName": "
|
|
2309
|
+
"displayName": "对话",
|
|
2310
2310
|
"configurable": true,
|
|
2311
2311
|
"active": true,
|
|
2312
2312
|
"requirements": {
|
|
@@ -2328,7 +2328,7 @@
|
|
|
2328
2328
|
"models": [
|
|
2329
2329
|
{
|
|
2330
2330
|
"id": "demo-chat",
|
|
2331
|
-
"displayName": "
|
|
2331
|
+
"displayName": "示例对话模型",
|
|
2332
2332
|
"modelType": "chat",
|
|
2333
2333
|
"available": true,
|
|
2334
2334
|
"deprecated": false,
|
|
@@ -2359,7 +2359,7 @@
|
|
|
2359
2359
|
"providers": [
|
|
2360
2360
|
{
|
|
2361
2361
|
"provider": "local_example",
|
|
2362
|
-
"displayName": "
|
|
2362
|
+
"displayName": "示例 Provider",
|
|
2363
2363
|
"runtime": "local",
|
|
2364
2364
|
"useCases": [
|
|
2365
2365
|
"chat"
|
|
@@ -2400,7 +2400,7 @@
|
|
|
2400
2400
|
"models": [
|
|
2401
2401
|
{
|
|
2402
2402
|
"id": "demo-chat",
|
|
2403
|
-
"displayName": "
|
|
2403
|
+
"displayName": "示例对话模型",
|
|
2404
2404
|
"modelType": "chat",
|
|
2405
2405
|
"available": true,
|
|
2406
2406
|
"deprecated": false,
|
|
@@ -2428,7 +2428,7 @@
|
|
|
2428
2428
|
"providers": [
|
|
2429
2429
|
{
|
|
2430
2430
|
"provider": "local_example",
|
|
2431
|
-
"displayName": "
|
|
2431
|
+
"displayName": "示例 Provider",
|
|
2432
2432
|
"runtime": "local",
|
|
2433
2433
|
"modelSource": "catalog",
|
|
2434
2434
|
"catalogProvider": "example",
|
|
@@ -2461,7 +2461,7 @@
|
|
|
2461
2461
|
"models": [
|
|
2462
2462
|
{
|
|
2463
2463
|
"id": "demo-chat",
|
|
2464
|
-
"displayName": "
|
|
2464
|
+
"displayName": "示例对话模型",
|
|
2465
2465
|
"modelType": "chat",
|
|
2466
2466
|
"available": true,
|
|
2467
2467
|
"deprecated": false,
|
|
@@ -2486,7 +2486,7 @@
|
|
|
2486
2486
|
"providers": [
|
|
2487
2487
|
{
|
|
2488
2488
|
"provider": "local_example",
|
|
2489
|
-
"displayName": "
|
|
2489
|
+
"displayName": "示例 Provider",
|
|
2490
2490
|
"runtime": "local",
|
|
2491
2491
|
"useCases": [
|
|
2492
2492
|
"chat"
|
|
@@ -2531,7 +2531,7 @@
|
|
|
2531
2531
|
"models": [
|
|
2532
2532
|
{
|
|
2533
2533
|
"id": "demo-chat",
|
|
2534
|
-
"displayName": "
|
|
2534
|
+
"displayName": "示例对话模型",
|
|
2535
2535
|
"modelType": "chat",
|
|
2536
2536
|
"available": true,
|
|
2537
2537
|
"deprecated": false,
|
|
@@ -2589,7 +2589,7 @@
|
|
|
2589
2589
|
"models": [
|
|
2590
2590
|
{
|
|
2591
2591
|
"id": "demo-chat",
|
|
2592
|
-
"displayName": "
|
|
2592
|
+
"displayName": "示例对话模型",
|
|
2593
2593
|
"modelType": "chat",
|
|
2594
2594
|
"available": true,
|
|
2595
2595
|
"deprecated": false,
|
|
@@ -2640,7 +2640,7 @@
|
|
|
2640
2640
|
"llmUseCases": [
|
|
2641
2641
|
{
|
|
2642
2642
|
"useCase": "chat",
|
|
2643
|
-
"displayName": "
|
|
2643
|
+
"displayName": "对话",
|
|
2644
2644
|
"description": null,
|
|
2645
2645
|
"ownerType": "system",
|
|
2646
2646
|
"ownerId": "agent",
|
|
@@ -2682,7 +2682,7 @@
|
|
|
2682
2682
|
"llmUseCases": [
|
|
2683
2683
|
{
|
|
2684
2684
|
"useCase": "chat",
|
|
2685
|
-
"displayName": "
|
|
2685
|
+
"displayName": "对话",
|
|
2686
2686
|
"configurable": true,
|
|
2687
2687
|
"active": true,
|
|
2688
2688
|
"requirements": {
|
|
@@ -2738,22 +2738,22 @@
|
|
|
2738
2738
|
"name": "agent-memory-text",
|
|
2739
2739
|
"target": "/app/agent/memory/get",
|
|
2740
2740
|
"data": {
|
|
2741
|
-
"content": "
|
|
2741
|
+
"content": "客厅空调设定为 26°C 前先征求用户同意。"
|
|
2742
2742
|
},
|
|
2743
2743
|
"status": "success",
|
|
2744
2744
|
"essential": {
|
|
2745
|
-
"content": "
|
|
2745
|
+
"content": "客厅空调设定为 26°C 前先征求用户同意。"
|
|
2746
2746
|
}
|
|
2747
2747
|
},
|
|
2748
2748
|
{
|
|
2749
2749
|
"name": "agent-identity-text",
|
|
2750
2750
|
"target": "/app/agent/identity/get",
|
|
2751
2751
|
"data": {
|
|
2752
|
-
"content": "
|
|
2752
|
+
"content": "使用中文,回答简洁。"
|
|
2753
2753
|
},
|
|
2754
2754
|
"status": "success",
|
|
2755
2755
|
"essential": {
|
|
2756
|
-
"content": "
|
|
2756
|
+
"content": "使用中文,回答简洁。"
|
|
2757
2757
|
}
|
|
2758
2758
|
},
|
|
2759
2759
|
{
|
|
@@ -4537,5 +4537,508 @@
|
|
|
4537
4537
|
"createdAt": "2024-11-03 14:30:00.123 +08:00 (Asia/Shanghai)"
|
|
4538
4538
|
}
|
|
4539
4539
|
}
|
|
4540
|
+
},
|
|
4541
|
+
{
|
|
4542
|
+
"name": "space-invite-all-failed",
|
|
4543
|
+
"target": "/app/space/member/invite",
|
|
4544
|
+
"data": {
|
|
4545
|
+
"action": "Unchanged",
|
|
4546
|
+
"spaceId": "space-demo",
|
|
4547
|
+
"requested": [
|
|
4548
|
+
"a@example.com"
|
|
4549
|
+
],
|
|
4550
|
+
"invited": [],
|
|
4551
|
+
"alreadyPending": [],
|
|
4552
|
+
"alreadyMembers": [],
|
|
4553
|
+
"failed": [
|
|
4554
|
+
"a@example.com"
|
|
4555
|
+
]
|
|
4556
|
+
},
|
|
4557
|
+
"status": "error",
|
|
4558
|
+
"code": "OPERATION_FAILED",
|
|
4559
|
+
"essential": {
|
|
4560
|
+
"status": "error",
|
|
4561
|
+
"error": {
|
|
4562
|
+
"code": "OPERATION_FAILED",
|
|
4563
|
+
"message": "No requested Space member operation succeeded",
|
|
4564
|
+
"details": {
|
|
4565
|
+
"action": "Unchanged",
|
|
4566
|
+
"spaceId": "space-demo",
|
|
4567
|
+
"requested": [
|
|
4568
|
+
"a@example.com"
|
|
4569
|
+
],
|
|
4570
|
+
"invited": [],
|
|
4571
|
+
"alreadyPending": [],
|
|
4572
|
+
"alreadyMembers": [],
|
|
4573
|
+
"failed": [
|
|
4574
|
+
"a@example.com"
|
|
4575
|
+
]
|
|
4576
|
+
}
|
|
4577
|
+
}
|
|
4578
|
+
}
|
|
4579
|
+
},
|
|
4580
|
+
{
|
|
4581
|
+
"name": "space-invite-alreadyPending",
|
|
4582
|
+
"target": "/app/space/member/invite",
|
|
4583
|
+
"data": {
|
|
4584
|
+
"action": "Unchanged",
|
|
4585
|
+
"spaceId": "space-demo",
|
|
4586
|
+
"requested": [
|
|
4587
|
+
"a@example.com"
|
|
4588
|
+
],
|
|
4589
|
+
"invited": [],
|
|
4590
|
+
"alreadyPending": [
|
|
4591
|
+
"a@example.com"
|
|
4592
|
+
],
|
|
4593
|
+
"alreadyMembers": [],
|
|
4594
|
+
"failed": []
|
|
4595
|
+
},
|
|
4596
|
+
"status": "success",
|
|
4597
|
+
"essential": {
|
|
4598
|
+
"action": "Unchanged",
|
|
4599
|
+
"spaceId": "space-demo",
|
|
4600
|
+
"requested": [
|
|
4601
|
+
"a@example.com"
|
|
4602
|
+
],
|
|
4603
|
+
"invited": [],
|
|
4604
|
+
"alreadyPending": [
|
|
4605
|
+
"a@example.com"
|
|
4606
|
+
],
|
|
4607
|
+
"alreadyMembers": [],
|
|
4608
|
+
"failed": []
|
|
4609
|
+
}
|
|
4610
|
+
},
|
|
4611
|
+
{
|
|
4612
|
+
"name": "space-invite-alreadyMembers",
|
|
4613
|
+
"target": "/app/space/member/invite",
|
|
4614
|
+
"data": {
|
|
4615
|
+
"action": "Unchanged",
|
|
4616
|
+
"spaceId": "space-demo",
|
|
4617
|
+
"requested": [
|
|
4618
|
+
"a@example.com"
|
|
4619
|
+
],
|
|
4620
|
+
"invited": [],
|
|
4621
|
+
"alreadyPending": [],
|
|
4622
|
+
"alreadyMembers": [
|
|
4623
|
+
"a@example.com"
|
|
4624
|
+
],
|
|
4625
|
+
"failed": []
|
|
4626
|
+
},
|
|
4627
|
+
"status": "success",
|
|
4628
|
+
"essential": {
|
|
4629
|
+
"action": "Unchanged",
|
|
4630
|
+
"spaceId": "space-demo",
|
|
4631
|
+
"requested": [
|
|
4632
|
+
"a@example.com"
|
|
4633
|
+
],
|
|
4634
|
+
"invited": [],
|
|
4635
|
+
"alreadyPending": [],
|
|
4636
|
+
"alreadyMembers": [
|
|
4637
|
+
"a@example.com"
|
|
4638
|
+
],
|
|
4639
|
+
"failed": []
|
|
4640
|
+
}
|
|
4641
|
+
},
|
|
4642
|
+
{
|
|
4643
|
+
"name": "space-remove-success",
|
|
4644
|
+
"target": "/app/space/member/remove",
|
|
4645
|
+
"data": {
|
|
4646
|
+
"action": "Removed",
|
|
4647
|
+
"spaceId": "space-demo",
|
|
4648
|
+
"requested": [
|
|
4649
|
+
"a@example.com"
|
|
4650
|
+
],
|
|
4651
|
+
"removed": [],
|
|
4652
|
+
"notMembership": [
|
|
4653
|
+
"a@example.com"
|
|
4654
|
+
],
|
|
4655
|
+
"failed": []
|
|
4656
|
+
},
|
|
4657
|
+
"status": "success",
|
|
4658
|
+
"essential": {
|
|
4659
|
+
"action": "Removed",
|
|
4660
|
+
"spaceId": "space-demo",
|
|
4661
|
+
"requested": [
|
|
4662
|
+
"a@example.com"
|
|
4663
|
+
],
|
|
4664
|
+
"removed": [],
|
|
4665
|
+
"notMembership": [
|
|
4666
|
+
"a@example.com"
|
|
4667
|
+
],
|
|
4668
|
+
"failed": []
|
|
4669
|
+
}
|
|
4670
|
+
},
|
|
4671
|
+
{
|
|
4672
|
+
"name": "space-remove-partial",
|
|
4673
|
+
"target": "/app/space/member/remove",
|
|
4674
|
+
"data": {
|
|
4675
|
+
"action": "Removed",
|
|
4676
|
+
"spaceId": "space-demo",
|
|
4677
|
+
"requested": [
|
|
4678
|
+
"a@example.com",
|
|
4679
|
+
"b@example.com"
|
|
4680
|
+
],
|
|
4681
|
+
"removed": [
|
|
4682
|
+
"a@example.com"
|
|
4683
|
+
],
|
|
4684
|
+
"notMembership": [],
|
|
4685
|
+
"failed": [
|
|
4686
|
+
"b@example.com"
|
|
4687
|
+
]
|
|
4688
|
+
},
|
|
4689
|
+
"status": "partial",
|
|
4690
|
+
"essential": {
|
|
4691
|
+
"action": "Removed",
|
|
4692
|
+
"spaceId": "space-demo",
|
|
4693
|
+
"requested": [
|
|
4694
|
+
"a@example.com",
|
|
4695
|
+
"b@example.com"
|
|
4696
|
+
],
|
|
4697
|
+
"removed": [
|
|
4698
|
+
"a@example.com"
|
|
4699
|
+
],
|
|
4700
|
+
"notMembership": [],
|
|
4701
|
+
"failed": [
|
|
4702
|
+
"b@example.com"
|
|
4703
|
+
]
|
|
4704
|
+
}
|
|
4705
|
+
},
|
|
4706
|
+
{
|
|
4707
|
+
"name": "space-remove-error",
|
|
4708
|
+
"target": "/app/space/member/remove",
|
|
4709
|
+
"data": {
|
|
4710
|
+
"action": "Removed",
|
|
4711
|
+
"spaceId": "space-demo",
|
|
4712
|
+
"requested": [
|
|
4713
|
+
"a@example.com"
|
|
4714
|
+
],
|
|
4715
|
+
"removed": [],
|
|
4716
|
+
"notMembership": [],
|
|
4717
|
+
"failed": [
|
|
4718
|
+
"a@example.com"
|
|
4719
|
+
]
|
|
4720
|
+
},
|
|
4721
|
+
"status": "error",
|
|
4722
|
+
"code": "OPERATION_FAILED",
|
|
4723
|
+
"essential": {
|
|
4724
|
+
"status": "error",
|
|
4725
|
+
"error": {
|
|
4726
|
+
"code": "OPERATION_FAILED",
|
|
4727
|
+
"message": "No requested Space member operation succeeded",
|
|
4728
|
+
"details": {
|
|
4729
|
+
"action": "Removed",
|
|
4730
|
+
"spaceId": "space-demo",
|
|
4731
|
+
"requested": [
|
|
4732
|
+
"a@example.com"
|
|
4733
|
+
],
|
|
4734
|
+
"removed": [],
|
|
4735
|
+
"notMembership": [],
|
|
4736
|
+
"failed": [
|
|
4737
|
+
"a@example.com"
|
|
4738
|
+
]
|
|
4739
|
+
}
|
|
4740
|
+
}
|
|
4741
|
+
}
|
|
4742
|
+
},
|
|
4743
|
+
{
|
|
4744
|
+
"name": "space-location-create-failed",
|
|
4745
|
+
"target": "/app/space/location/create",
|
|
4746
|
+
"data": {
|
|
4747
|
+
"action": "NotCreated",
|
|
4748
|
+
"spaceId": "space-demo",
|
|
4749
|
+
"locationId": "office",
|
|
4750
|
+
"name": "Office"
|
|
4751
|
+
},
|
|
4752
|
+
"status": "error",
|
|
4753
|
+
"code": "OPERATION_FAILED",
|
|
4754
|
+
"essential": {
|
|
4755
|
+
"status": "error",
|
|
4756
|
+
"error": {
|
|
4757
|
+
"code": "OPERATION_FAILED",
|
|
4758
|
+
"message": "The Space Location write did not succeed",
|
|
4759
|
+
"details": {
|
|
4760
|
+
"action": "NotCreated",
|
|
4761
|
+
"spaceId": "space-demo",
|
|
4762
|
+
"locationId": "office",
|
|
4763
|
+
"name": "Office"
|
|
4764
|
+
}
|
|
4765
|
+
}
|
|
4766
|
+
}
|
|
4767
|
+
},
|
|
4768
|
+
{
|
|
4769
|
+
"name": "space-location-update-failed",
|
|
4770
|
+
"target": "/app/space/location/update",
|
|
4771
|
+
"data": {
|
|
4772
|
+
"action": "NotUpdated",
|
|
4773
|
+
"spaceId": "space-demo",
|
|
4774
|
+
"locationId": "office",
|
|
4775
|
+
"name": "Office"
|
|
4776
|
+
},
|
|
4777
|
+
"status": "error",
|
|
4778
|
+
"code": "OPERATION_FAILED",
|
|
4779
|
+
"essential": {
|
|
4780
|
+
"status": "error",
|
|
4781
|
+
"error": {
|
|
4782
|
+
"code": "OPERATION_FAILED",
|
|
4783
|
+
"message": "The Space Location write did not succeed",
|
|
4784
|
+
"details": {
|
|
4785
|
+
"action": "NotUpdated",
|
|
4786
|
+
"spaceId": "space-demo",
|
|
4787
|
+
"locationId": "office",
|
|
4788
|
+
"name": "Office"
|
|
4789
|
+
}
|
|
4790
|
+
}
|
|
4791
|
+
}
|
|
4792
|
+
},
|
|
4793
|
+
{
|
|
4794
|
+
"name": "space-location-delete-failed",
|
|
4795
|
+
"target": "/app/space/location/delete",
|
|
4796
|
+
"data": {
|
|
4797
|
+
"action": "NotDeleted",
|
|
4798
|
+
"spaceId": "space-demo",
|
|
4799
|
+
"locationId": "office",
|
|
4800
|
+
"name": "Office",
|
|
4801
|
+
"deleted": false
|
|
4802
|
+
},
|
|
4803
|
+
"status": "error",
|
|
4804
|
+
"code": "OPERATION_FAILED",
|
|
4805
|
+
"essential": {
|
|
4806
|
+
"status": "error",
|
|
4807
|
+
"error": {
|
|
4808
|
+
"code": "OPERATION_FAILED",
|
|
4809
|
+
"message": "The Space Location write did not succeed",
|
|
4810
|
+
"details": {
|
|
4811
|
+
"action": "NotDeleted",
|
|
4812
|
+
"spaceId": "space-demo",
|
|
4813
|
+
"locationId": "office",
|
|
4814
|
+
"name": "Office",
|
|
4815
|
+
"deleted": false
|
|
4816
|
+
}
|
|
4817
|
+
}
|
|
4818
|
+
}
|
|
4819
|
+
},
|
|
4820
|
+
{
|
|
4821
|
+
"name": "space-delete-failed-operation-read",
|
|
4822
|
+
"target": "/app/space/delete/status",
|
|
4823
|
+
"data": {
|
|
4824
|
+
"accepted": true,
|
|
4825
|
+
"operationId": "operation-demo",
|
|
4826
|
+
"spaceId": "space-demo",
|
|
4827
|
+
"state": "DELETE_FAILED",
|
|
4828
|
+
"message": "Hub did not confirm erasure",
|
|
4829
|
+
"deleted": false
|
|
4830
|
+
},
|
|
4831
|
+
"status": "success",
|
|
4832
|
+
"essential": {
|
|
4833
|
+
"accepted": true,
|
|
4834
|
+
"operationId": "operation-demo",
|
|
4835
|
+
"spaceId": "space-demo",
|
|
4836
|
+
"state": "DELETE_FAILED",
|
|
4837
|
+
"message": "Hub did not confirm erasure",
|
|
4838
|
+
"deleted": false
|
|
4839
|
+
}
|
|
4840
|
+
},
|
|
4841
|
+
{
|
|
4842
|
+
"name": "space-member-changes-success",
|
|
4843
|
+
"target": "/app/space/member/update",
|
|
4844
|
+
"data": {
|
|
4845
|
+
"action": "Updated",
|
|
4846
|
+
"spaceId": "space-demo",
|
|
4847
|
+
"removal": {
|
|
4848
|
+
"action": "Removed",
|
|
4849
|
+
"spaceId": "space-demo",
|
|
4850
|
+
"requested": [
|
|
4851
|
+
"old@example.com"
|
|
4852
|
+
],
|
|
4853
|
+
"removed": [
|
|
4854
|
+
"old@example.com"
|
|
4855
|
+
],
|
|
4856
|
+
"notMembership": [],
|
|
4857
|
+
"failed": []
|
|
4858
|
+
},
|
|
4859
|
+
"invitation": {
|
|
4860
|
+
"action": "Invited",
|
|
4861
|
+
"spaceId": "space-demo",
|
|
4862
|
+
"requested": [
|
|
4863
|
+
"new@example.com"
|
|
4864
|
+
],
|
|
4865
|
+
"invited": [
|
|
4866
|
+
"new@example.com"
|
|
4867
|
+
],
|
|
4868
|
+
"alreadyPending": [],
|
|
4869
|
+
"alreadyMembers": [],
|
|
4870
|
+
"failed": []
|
|
4871
|
+
},
|
|
4872
|
+
"problems": []
|
|
4873
|
+
},
|
|
4874
|
+
"status": "success",
|
|
4875
|
+
"essential": {
|
|
4876
|
+
"action": "Updated",
|
|
4877
|
+
"spaceId": "space-demo",
|
|
4878
|
+
"removal": {
|
|
4879
|
+
"action": "Removed",
|
|
4880
|
+
"spaceId": "space-demo",
|
|
4881
|
+
"requested": [
|
|
4882
|
+
"old@example.com"
|
|
4883
|
+
],
|
|
4884
|
+
"removed": [
|
|
4885
|
+
"old@example.com"
|
|
4886
|
+
],
|
|
4887
|
+
"notMembership": [],
|
|
4888
|
+
"failed": []
|
|
4889
|
+
},
|
|
4890
|
+
"invitation": {
|
|
4891
|
+
"action": "Invited",
|
|
4892
|
+
"spaceId": "space-demo",
|
|
4893
|
+
"requested": [
|
|
4894
|
+
"new@example.com"
|
|
4895
|
+
],
|
|
4896
|
+
"invited": [
|
|
4897
|
+
"new@example.com"
|
|
4898
|
+
],
|
|
4899
|
+
"alreadyPending": [],
|
|
4900
|
+
"alreadyMembers": [],
|
|
4901
|
+
"failed": []
|
|
4902
|
+
},
|
|
4903
|
+
"problems": []
|
|
4904
|
+
}
|
|
4905
|
+
},
|
|
4906
|
+
{
|
|
4907
|
+
"name": "space-member-changes-partial",
|
|
4908
|
+
"target": "/app/space/member/update",
|
|
4909
|
+
"data": {
|
|
4910
|
+
"action": "Updated",
|
|
4911
|
+
"spaceId": "space-demo",
|
|
4912
|
+
"removal": {
|
|
4913
|
+
"action": "Removed",
|
|
4914
|
+
"spaceId": "space-demo",
|
|
4915
|
+
"requested": [
|
|
4916
|
+
"old@example.com"
|
|
4917
|
+
],
|
|
4918
|
+
"removed": [
|
|
4919
|
+
"old@example.com"
|
|
4920
|
+
],
|
|
4921
|
+
"notMembership": [],
|
|
4922
|
+
"failed": []
|
|
4923
|
+
},
|
|
4924
|
+
"invitation": {
|
|
4925
|
+
"action": "Invited",
|
|
4926
|
+
"spaceId": "space-demo",
|
|
4927
|
+
"requested": [
|
|
4928
|
+
"new@example.com"
|
|
4929
|
+
],
|
|
4930
|
+
"invited": [],
|
|
4931
|
+
"alreadyPending": [],
|
|
4932
|
+
"alreadyMembers": [],
|
|
4933
|
+
"failed": [
|
|
4934
|
+
"new@example.com"
|
|
4935
|
+
]
|
|
4936
|
+
},
|
|
4937
|
+
"problems": []
|
|
4938
|
+
},
|
|
4939
|
+
"status": "partial",
|
|
4940
|
+
"essential": {
|
|
4941
|
+
"action": "Updated",
|
|
4942
|
+
"spaceId": "space-demo",
|
|
4943
|
+
"removal": {
|
|
4944
|
+
"action": "Removed",
|
|
4945
|
+
"spaceId": "space-demo",
|
|
4946
|
+
"requested": [
|
|
4947
|
+
"old@example.com"
|
|
4948
|
+
],
|
|
4949
|
+
"removed": [
|
|
4950
|
+
"old@example.com"
|
|
4951
|
+
],
|
|
4952
|
+
"notMembership": [],
|
|
4953
|
+
"failed": []
|
|
4954
|
+
},
|
|
4955
|
+
"invitation": {
|
|
4956
|
+
"action": "Invited",
|
|
4957
|
+
"spaceId": "space-demo",
|
|
4958
|
+
"requested": [
|
|
4959
|
+
"new@example.com"
|
|
4960
|
+
],
|
|
4961
|
+
"invited": [],
|
|
4962
|
+
"alreadyPending": [],
|
|
4963
|
+
"alreadyMembers": [],
|
|
4964
|
+
"failed": [
|
|
4965
|
+
"new@example.com"
|
|
4966
|
+
]
|
|
4967
|
+
},
|
|
4968
|
+
"problems": []
|
|
4969
|
+
}
|
|
4970
|
+
},
|
|
4971
|
+
{
|
|
4972
|
+
"name": "space-member-changes-error",
|
|
4973
|
+
"target": "/app/space/member/update",
|
|
4974
|
+
"data": {
|
|
4975
|
+
"action": "Updated",
|
|
4976
|
+
"spaceId": "space-demo",
|
|
4977
|
+
"removal": {
|
|
4978
|
+
"action": "Removed",
|
|
4979
|
+
"spaceId": "space-demo",
|
|
4980
|
+
"requested": [
|
|
4981
|
+
"old@example.com"
|
|
4982
|
+
],
|
|
4983
|
+
"removed": [],
|
|
4984
|
+
"notMembership": [],
|
|
4985
|
+
"failed": [
|
|
4986
|
+
"old@example.com"
|
|
4987
|
+
]
|
|
4988
|
+
},
|
|
4989
|
+
"invitation": {
|
|
4990
|
+
"action": "Invited",
|
|
4991
|
+
"spaceId": "space-demo",
|
|
4992
|
+
"requested": [
|
|
4993
|
+
"new@example.com"
|
|
4994
|
+
],
|
|
4995
|
+
"invited": [],
|
|
4996
|
+
"alreadyPending": [],
|
|
4997
|
+
"alreadyMembers": [],
|
|
4998
|
+
"failed": [
|
|
4999
|
+
"new@example.com"
|
|
5000
|
+
]
|
|
5001
|
+
},
|
|
5002
|
+
"problems": []
|
|
5003
|
+
},
|
|
5004
|
+
"status": "error",
|
|
5005
|
+
"essential": {
|
|
5006
|
+
"status": "error",
|
|
5007
|
+
"error": {
|
|
5008
|
+
"code": "OPERATION_FAILED",
|
|
5009
|
+
"message": "Space member changes did not complete",
|
|
5010
|
+
"details": {
|
|
5011
|
+
"action": "Updated",
|
|
5012
|
+
"spaceId": "space-demo",
|
|
5013
|
+
"removal": {
|
|
5014
|
+
"action": "Removed",
|
|
5015
|
+
"spaceId": "space-demo",
|
|
5016
|
+
"requested": [
|
|
5017
|
+
"old@example.com"
|
|
5018
|
+
],
|
|
5019
|
+
"removed": [],
|
|
5020
|
+
"notMembership": [],
|
|
5021
|
+
"failed": [
|
|
5022
|
+
"old@example.com"
|
|
5023
|
+
]
|
|
5024
|
+
},
|
|
5025
|
+
"invitation": {
|
|
5026
|
+
"action": "Invited",
|
|
5027
|
+
"spaceId": "space-demo",
|
|
5028
|
+
"requested": [
|
|
5029
|
+
"new@example.com"
|
|
5030
|
+
],
|
|
5031
|
+
"invited": [],
|
|
5032
|
+
"alreadyPending": [],
|
|
5033
|
+
"alreadyMembers": [],
|
|
5034
|
+
"failed": [
|
|
5035
|
+
"new@example.com"
|
|
5036
|
+
]
|
|
5037
|
+
},
|
|
5038
|
+
"problems": []
|
|
5039
|
+
}
|
|
5040
|
+
}
|
|
5041
|
+
},
|
|
5042
|
+
"code": "OPERATION_FAILED"
|
|
4540
5043
|
}
|
|
4541
5044
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest": "mhome.app-facade.v1",
|
|
3
|
-
"contractVersion": "1.
|
|
3
|
+
"contractVersion": "1.128.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",
|
|
@@ -334,6 +334,13 @@
|
|
|
334
334
|
"/app/presentation/space/location/list"
|
|
335
335
|
]
|
|
336
336
|
},
|
|
337
|
+
"spaceMemberChanges": {
|
|
338
|
+
"contract": "contract/space-presentation-v1.md",
|
|
339
|
+
"schema": "schema/space-member-changes.v1.schema.json",
|
|
340
|
+
"requestTargets": [
|
|
341
|
+
"/app/space/member/update"
|
|
342
|
+
]
|
|
343
|
+
},
|
|
337
344
|
"spaceManagement": {
|
|
338
345
|
"contract": "contract/space-presentation-v1.md",
|
|
339
346
|
"requestTargets": [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"contractVersion": "1.
|
|
2
|
+
"contractVersion": "1.128.0",
|
|
3
3
|
"operations": {
|
|
4
4
|
"/app/agent/context/get": "spaceRead",
|
|
5
5
|
"/app/agent/credit/usage": "spaceRead",
|
|
@@ -118,7 +118,6 @@
|
|
|
118
118
|
"/app/host/permissions/get": "userRead",
|
|
119
119
|
"/app/host/service/install": "userWrite",
|
|
120
120
|
"/app/host/service/restart": "userWrite",
|
|
121
|
-
"/app/hub/cache/clear": "spaceManage",
|
|
122
121
|
"/app/hub/get": "spaceRead",
|
|
123
122
|
"/app/hub/remove": "spaceManage",
|
|
124
123
|
"/app/hub/restart": "spaceManage",
|
|
@@ -280,6 +279,7 @@
|
|
|
280
279
|
"/app/space/member/invite": "spaceManage",
|
|
281
280
|
"/app/space/member/list": "spaceManage",
|
|
282
281
|
"/app/space/member/remove": "spaceManage",
|
|
282
|
+
"/app/space/member/update": "spaceManage",
|
|
283
283
|
"/app/space/preference/get": "spaceRead",
|
|
284
284
|
"/app/space/preference/update": "userWrite",
|
|
285
285
|
"/app/space/rename": "spaceManage",
|
package/manifest/routing.v1.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest": "mhome.app-facade.routing.v1",
|
|
3
|
-
"contractVersion": "1.
|
|
3
|
+
"contractVersion": "1.128.0",
|
|
4
4
|
"targetPrefix": "/app/",
|
|
5
5
|
"default": {
|
|
6
6
|
"execution": "spaceMode"
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
"cloudTargets": [
|
|
17
17
|
"/app/agent/context/get",
|
|
18
18
|
"/app/agent/credit/usage",
|
|
19
|
-
"/app/hub/cache/clear",
|
|
20
19
|
"/app/hub/get",
|
|
21
20
|
"/app/hub/remove",
|
|
22
21
|
"/app/plugin/catalog/list",
|
package/manifest/targets.v1.json
CHANGED
package/package.json
CHANGED
package/protocol.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"protocol": "mhome.app-facade",
|
|
3
|
-
"contractVersion": "1.
|
|
3
|
+
"contractVersion": "1.128.0",
|
|
4
4
|
"manifest": "manifest/app-facade.v1.json",
|
|
5
5
|
"schemas": {
|
|
6
6
|
"storage": "schema/storage.v1.schema.json",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"hostAuthorization": "schema/host-authorization.v1.schema.json",
|
|
13
13
|
"hostAccess": "schema/host-access.v1.schema.json",
|
|
14
14
|
"agentLlm": "schema/agent-llm.v1.schema.json",
|
|
15
|
+
"spaceMemberChanges": "schema/space-member-changes.v1.schema.json",
|
|
15
16
|
"entityPresentation": "schema/entity-presentation.v1.schema.json",
|
|
16
17
|
"integrationPresentation": "schema/integration-presentation.v1.schema.json",
|
|
17
18
|
"capabilityDescriptor": "schema/capability-descriptor.v1.schema.json",
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schemas.meowlink.app/space-member-changes.v1.json",
|
|
4
|
+
"title": "Space member changes",
|
|
5
|
+
"definitions": {
|
|
6
|
+
"input": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"removeEmails": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "string"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"inviteEmails": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": {
|
|
19
|
+
"type": "string"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"anyOf": [
|
|
24
|
+
{
|
|
25
|
+
"required": [
|
|
26
|
+
"removeEmails"
|
|
27
|
+
],
|
|
28
|
+
"properties": {
|
|
29
|
+
"removeEmails": {
|
|
30
|
+
"minItems": 1
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"required": [
|
|
36
|
+
"inviteEmails"
|
|
37
|
+
],
|
|
38
|
+
"properties": {
|
|
39
|
+
"inviteEmails": {
|
|
40
|
+
"minItems": 1
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"output": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"required": [
|
|
49
|
+
"action",
|
|
50
|
+
"spaceId",
|
|
51
|
+
"removal",
|
|
52
|
+
"invitation",
|
|
53
|
+
"problems"
|
|
54
|
+
],
|
|
55
|
+
"properties": {
|
|
56
|
+
"action": {
|
|
57
|
+
"enum": [
|
|
58
|
+
"Updated",
|
|
59
|
+
"DryRun"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"spaceId": {
|
|
63
|
+
"type": "string"
|
|
64
|
+
},
|
|
65
|
+
"removal": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"required": [
|
|
68
|
+
"action",
|
|
69
|
+
"spaceId",
|
|
70
|
+
"requested",
|
|
71
|
+
"removed",
|
|
72
|
+
"notMembership",
|
|
73
|
+
"failed"
|
|
74
|
+
],
|
|
75
|
+
"properties": {
|
|
76
|
+
"action": {
|
|
77
|
+
"type": "string"
|
|
78
|
+
},
|
|
79
|
+
"spaceId": {
|
|
80
|
+
"type": "string"
|
|
81
|
+
},
|
|
82
|
+
"requested": {
|
|
83
|
+
"type": "array",
|
|
84
|
+
"items": {
|
|
85
|
+
"type": "string"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"removed": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"items": {
|
|
91
|
+
"type": "string"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"notMembership": {
|
|
95
|
+
"type": "array",
|
|
96
|
+
"items": {
|
|
97
|
+
"type": "string"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"failed": {
|
|
101
|
+
"type": "array",
|
|
102
|
+
"items": {
|
|
103
|
+
"type": "string"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"invitation": {
|
|
109
|
+
"anyOf": [
|
|
110
|
+
{
|
|
111
|
+
"type": "object",
|
|
112
|
+
"required": [
|
|
113
|
+
"action",
|
|
114
|
+
"spaceId",
|
|
115
|
+
"requested",
|
|
116
|
+
"invited",
|
|
117
|
+
"alreadyPending",
|
|
118
|
+
"alreadyMembers",
|
|
119
|
+
"failed"
|
|
120
|
+
],
|
|
121
|
+
"properties": {
|
|
122
|
+
"action": {
|
|
123
|
+
"type": "string"
|
|
124
|
+
},
|
|
125
|
+
"spaceId": {
|
|
126
|
+
"type": "string"
|
|
127
|
+
},
|
|
128
|
+
"requested": {
|
|
129
|
+
"type": "array",
|
|
130
|
+
"items": {
|
|
131
|
+
"type": "string"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"invited": {
|
|
135
|
+
"type": "array",
|
|
136
|
+
"items": {
|
|
137
|
+
"type": "string"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"alreadyPending": {
|
|
141
|
+
"type": "array",
|
|
142
|
+
"items": {
|
|
143
|
+
"type": "string"
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"alreadyMembers": {
|
|
147
|
+
"type": "array",
|
|
148
|
+
"items": {
|
|
149
|
+
"type": "string"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"failed": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"items": {
|
|
155
|
+
"type": "string"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"type": "null"
|
|
162
|
+
}
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
"problems": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"required": [
|
|
170
|
+
"step",
|
|
171
|
+
"code",
|
|
172
|
+
"message"
|
|
173
|
+
],
|
|
174
|
+
"properties": {
|
|
175
|
+
"step": {
|
|
176
|
+
"type": "string"
|
|
177
|
+
},
|
|
178
|
+
"code": {
|
|
179
|
+
"type": "string"
|
|
180
|
+
},
|
|
181
|
+
"message": {
|
|
182
|
+
"type": "string"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|