@opensoha/contracts 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/COMPATIBILITY.md +13 -0
  2. package/README.md +6 -0
  3. package/auth/catalog_generated.go +17 -0
  4. package/auth/catalog_test.go +53 -0
  5. package/auth/permission-catalog.json +11097 -0
  6. package/auth/permission-catalog.schema.json +74 -0
  7. package/capabilities/cluster-capability-matrix.schema.json +30 -1
  8. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  9. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  10. package/examples/gateway-manifest/minimal.json +6 -6
  11. package/examples/openapi/agent-run-tool-call-request.json +1 -1
  12. package/examples/openapi/agent-tool-call-result-envelope.json +1 -1
  13. package/examples/openapi/gateway-manifest-envelope.json +4 -4
  14. package/examples/openapi/tool-invocation-request.json +1 -1
  15. package/examples/openapi/tool-invocation-result-envelope.json +1 -1
  16. package/examples/plugin-manifest/skill-pack.json +2 -2
  17. package/examples/skill-manifest/k8s-sre.json +2 -2
  18. package/examples/token-claims/service-account.json +1 -1
  19. package/fixtures/json-schema/cluster-capability-matrix/valid/runtime-parity.json +3 -0
  20. package/fixtures/json-schema/gateway-manifest/valid/minimal.json +4 -4
  21. package/fixtures/json-schema/permission-catalog/invalid/missing-action.json +18 -0
  22. package/fixtures/json-schema/permission-catalog/valid/minimal.json +19 -0
  23. package/fixtures/json-schema/skill-manifest/valid/minimal.json +2 -2
  24. package/fixtures/json-schema/token-claims/valid/service-account.json +1 -1
  25. package/fixtures/openapi/AIGatewayManifestEnvelope/valid/minimal.json +1 -1
  26. package/fixtures/openapi/AccessRoleInput/invalid/missing-permissions.json +4 -0
  27. package/fixtures/openapi/AccessRoleInput/valid/granular-vm-operator.json +10 -0
  28. package/fixtures/openapi/AgentInstallationEnvelope/invalid/missing-command.json +7 -0
  29. package/fixtures/openapi/AgentInstallationEnvelope/valid/minimal.json +8 -0
  30. package/fixtures/openapi/ApplicationInput/invalid/missing-key.json +4 -0
  31. package/fixtures/openapi/ApplicationInput/valid/minimal.json +5 -0
  32. package/fixtures/openapi/AuthorizationDecision/invalid/missing-reason.json +7 -0
  33. package/fixtures/openapi/AuthorizationDecision/valid/deny-vm-delete.json +16 -0
  34. package/fixtures/openapi/HelmReleaseImportRequest/invalid/empty-releases.json +10 -0
  35. package/fixtures/openapi/HelmReleaseImportRequest/valid/managed.json +14 -0
  36. package/fixtures/openapi/HelmReleaseImportResultEnvelope/invalid/missing-mode.json +20 -0
  37. package/fixtures/openapi/HelmReleaseImportResultEnvelope/valid/created.json +35 -0
  38. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/invalid/unknown-kind.json +14 -0
  39. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/valid/grouped.json +31 -0
  40. package/fixtures/openapi/KubernetesServiceImportRequest/invalid/unsupported-mode.json +15 -0
  41. package/fixtures/openapi/KubernetesServiceImportRequest/valid/managed.json +15 -0
  42. package/fixtures/openapi/KubernetesServiceImportRequest/valid/observe-only.json +15 -0
  43. package/fixtures/openapi/KubernetesServiceImportResultEnvelope/invalid/missing-mode.json +20 -0
  44. package/fixtures/openapi/KubernetesServiceImportResultEnvelope/valid/created.json +37 -0
  45. package/fixtures/openapi/MCPCapabilityListEnvelope/invalid/missing-scopes.json +1 -1
  46. package/fixtures/openapi/MCPCapabilityListEnvelope/valid/minimal.json +1 -1
  47. package/fixtures/openapi/ObservabilityDashboardImportResultEnvelope/invalid/missing-dashboard.json +7 -0
  48. package/fixtures/openapi/ObservabilityDashboardImportResultEnvelope/valid/imported.json +36 -0
  49. package/fixtures/openapi/ObservabilityGrafanaDashboardImportInput/invalid/missing-data-source.json +3 -0
  50. package/fixtures/openapi/ObservabilityGrafanaDashboardImportInput/invalid/missing-json.json +3 -0
  51. package/fixtures/openapi/ObservabilityGrafanaDashboardImportInput/valid/classic.json +4 -0
  52. package/fixtures/openapi/ObservabilityMetricDataSourceListEnvelope/invalid/missing-name.json +7 -0
  53. package/fixtures/openapi/ObservabilityMetricDataSourceListEnvelope/valid/list.json +8 -0
  54. package/fixtures/openapi/PermissionCatalogEnvelope/invalid/invalid-hash.json +8 -0
  55. package/fixtures/openapi/PermissionCatalogEnvelope/valid/minimal.json +22 -0
  56. package/fixtures/openapi/PersonalAccessTokenInput/invalid/extra-field.json +1 -1
  57. package/fixtures/openapi/PersonalAccessTokenInput/valid/create.json +1 -1
  58. package/fixtures/openapi/RegistryConnectionInput/invalid/missing-type.json +4 -0
  59. package/fixtures/openapi/RegistryConnectionInput/valid/harbor.json +9 -0
  60. package/fixtures/openapi/RegistryConnectionListEnvelope/invalid/exposed-secret.json +18 -0
  61. package/fixtures/openapi/RegistryConnectionListEnvelope/valid/configured.json +19 -0
  62. package/fixtures/openapi/SoftwarePackage/invalid/unsafe-software-package.json +15 -0
  63. package/fixtures/openapi/SoftwarePackage/valid/software-package.json +17 -0
  64. package/fixtures/openapi/SoftwarePackageURLImportRequest/invalid/software-package-url-import-request.json +9 -0
  65. package/fixtures/openapi/SoftwarePackageURLImportRequest/valid/software-package-url-import-request.json +12 -0
  66. package/fixtures/openapi/SoftwareStorage/invalid/software-storage.json +6 -0
  67. package/fixtures/openapi/SoftwareStorage/valid/software-storage.json +22 -0
  68. package/gen/go/sohaapi/client.go +1 -1
  69. package/gen/go/sohaapi/types.go +906 -3
  70. package/gen/ts/sohaapi/index.ts +1603 -71
  71. package/openapi/soha-api.json +2910 -3
  72. package/openapi/soha-api.yaml +1759 -165
  73. package/openapi/spec_generated.go +3 -3
  74. package/package.json +7 -3
@@ -57,6 +57,26 @@
57
57
  }
58
58
  },
59
59
  "parameters": {
60
+ "AccessRoleID": {
61
+ "in": "path",
62
+ "name": "accessRoleID",
63
+ "required": true,
64
+ "schema": {
65
+ "maxLength": 128,
66
+ "minLength": 1,
67
+ "type": "string"
68
+ }
69
+ },
70
+ "AgentInstallTicket": {
71
+ "in": "path",
72
+ "name": "installTicket",
73
+ "required": true,
74
+ "schema": {
75
+ "maxLength": 1024,
76
+ "minLength": 16,
77
+ "type": "string"
78
+ }
79
+ },
60
80
  "AgentProviderRolloutAction": {
61
81
  "in": "path",
62
82
  "name": "rolloutAction",
@@ -167,6 +187,15 @@
167
187
  "type": "string"
168
188
  }
169
189
  },
190
+ "ClusterIDQuery": {
191
+ "in": "query",
192
+ "name": "clusterId",
193
+ "required": true,
194
+ "schema": {
195
+ "minLength": 1,
196
+ "type": "string"
197
+ }
198
+ },
170
199
  "ComputeActionID": {
171
200
  "in": "path",
172
201
  "name": "action",
@@ -263,6 +292,26 @@
263
292
  "type": "string"
264
293
  }
265
294
  },
295
+ "DashboardID": {
296
+ "in": "path",
297
+ "name": "dashboardID",
298
+ "required": true,
299
+ "schema": {
300
+ "maxLength": 128,
301
+ "minLength": 1,
302
+ "type": "string"
303
+ }
304
+ },
305
+ "DashboardPanelID": {
306
+ "in": "path",
307
+ "name": "panelID",
308
+ "required": true,
309
+ "schema": {
310
+ "maxLength": 128,
311
+ "minLength": 1,
312
+ "type": "string"
313
+ }
314
+ },
266
315
  "DataSourceID": {
267
316
  "in": "path",
268
317
  "name": "dataSourceID",
@@ -604,6 +653,15 @@
604
653
  "type": "string"
605
654
  }
606
655
  },
656
+ "RegistryConnectionID": {
657
+ "in": "path",
658
+ "name": "connectionID",
659
+ "required": true,
660
+ "schema": {
661
+ "minLength": 1,
662
+ "type": "string"
663
+ }
664
+ },
607
665
  "RelayState": {
608
666
  "in": "query",
609
667
  "name": "RelayState",
@@ -733,6 +791,16 @@
733
791
  "type": "string"
734
792
  }
735
793
  },
794
+ "SoftwarePackageID": {
795
+ "in": "path",
796
+ "name": "packageID",
797
+ "required": true,
798
+ "schema": {
799
+ "maxLength": 128,
800
+ "minLength": 1,
801
+ "type": "string"
802
+ }
803
+ },
736
804
  "SohaCacheModeHeader": {
737
805
  "description": "Optional relay cache behavior hint.",
738
806
  "in": "header",
@@ -871,6 +939,175 @@
871
939
  }
872
940
  },
873
941
  "schemas": {
942
+ "AccessRole": {
943
+ "additionalProperties": false,
944
+ "properties": {
945
+ "capabilities": {
946
+ "deprecated": true,
947
+ "description": "Legacy role-global action aliases retained only for migration.",
948
+ "items": {
949
+ "minLength": 1,
950
+ "type": "string"
951
+ },
952
+ "type": "array",
953
+ "uniqueItems": true
954
+ },
955
+ "id": {
956
+ "minLength": 1,
957
+ "type": "string"
958
+ },
959
+ "name": {
960
+ "minLength": 1,
961
+ "type": "string"
962
+ },
963
+ "permissionKeys": {
964
+ "items": {
965
+ "minLength": 1,
966
+ "type": "string"
967
+ },
968
+ "type": "array",
969
+ "uniqueItems": true
970
+ },
971
+ "scope": {
972
+ "minLength": 1,
973
+ "type": "string"
974
+ },
975
+ "userCount": {
976
+ "minimum": 0,
977
+ "type": "integer"
978
+ }
979
+ },
980
+ "required": [
981
+ "id",
982
+ "name",
983
+ "scope",
984
+ "capabilities",
985
+ "permissionKeys",
986
+ "userCount"
987
+ ],
988
+ "type": "object"
989
+ },
990
+ "AccessRoleDeleteResult": {
991
+ "additionalProperties": false,
992
+ "properties": {
993
+ "status": {
994
+ "const": "ok",
995
+ "type": "string"
996
+ }
997
+ },
998
+ "required": [
999
+ "status"
1000
+ ],
1001
+ "type": "object"
1002
+ },
1003
+ "AccessRoleEnvelope": {
1004
+ "additionalProperties": false,
1005
+ "properties": {
1006
+ "data": {
1007
+ "$ref": "#/components/schemas/AccessRole"
1008
+ }
1009
+ },
1010
+ "required": [
1011
+ "data"
1012
+ ],
1013
+ "type": "object"
1014
+ },
1015
+ "AccessRoleInput": {
1016
+ "additionalProperties": false,
1017
+ "properties": {
1018
+ "capabilities": {
1019
+ "deprecated": true,
1020
+ "description": "Legacy role-global action aliases; new role editors must send an empty array.",
1021
+ "items": {
1022
+ "minLength": 1,
1023
+ "type": "string"
1024
+ },
1025
+ "type": "array",
1026
+ "uniqueItems": true
1027
+ },
1028
+ "id": {
1029
+ "minLength": 1,
1030
+ "type": "string"
1031
+ },
1032
+ "name": {
1033
+ "minLength": 1,
1034
+ "type": "string"
1035
+ },
1036
+ "permissionKeys": {
1037
+ "items": {
1038
+ "minLength": 1,
1039
+ "type": "string"
1040
+ },
1041
+ "type": "array",
1042
+ "uniqueItems": true
1043
+ },
1044
+ "scope": {
1045
+ "minLength": 1,
1046
+ "type": "string"
1047
+ }
1048
+ },
1049
+ "required": [
1050
+ "name",
1051
+ "scope",
1052
+ "permissionKeys"
1053
+ ],
1054
+ "type": "object"
1055
+ },
1056
+ "AccessRoleListEnvelope": {
1057
+ "additionalProperties": false,
1058
+ "properties": {
1059
+ "items": {
1060
+ "items": {
1061
+ "$ref": "#/components/schemas/AccessRole"
1062
+ },
1063
+ "type": "array"
1064
+ }
1065
+ },
1066
+ "required": [
1067
+ "items"
1068
+ ],
1069
+ "type": "object"
1070
+ },
1071
+ "AgentInstallation": {
1072
+ "additionalProperties": false,
1073
+ "properties": {
1074
+ "clusterId": {
1075
+ "minLength": 1,
1076
+ "type": "string"
1077
+ },
1078
+ "command": {
1079
+ "minLength": 1,
1080
+ "type": "string"
1081
+ },
1082
+ "expiresAt": {
1083
+ "format": "date-time",
1084
+ "type": "string"
1085
+ },
1086
+ "manifestUrl": {
1087
+ "format": "uri",
1088
+ "type": "string"
1089
+ }
1090
+ },
1091
+ "required": [
1092
+ "clusterId",
1093
+ "manifestUrl",
1094
+ "command",
1095
+ "expiresAt"
1096
+ ],
1097
+ "type": "object"
1098
+ },
1099
+ "AgentInstallationEnvelope": {
1100
+ "additionalProperties": false,
1101
+ "properties": {
1102
+ "data": {
1103
+ "$ref": "#/components/schemas/AgentInstallation"
1104
+ }
1105
+ },
1106
+ "required": [
1107
+ "data"
1108
+ ],
1109
+ "type": "object"
1110
+ },
874
1111
  "AgentProviderCatalog": {
875
1112
  "additionalProperties": false,
876
1113
  "properties": {
@@ -3802,6 +4039,11 @@
3802
4039
  "targetId": {
3803
4040
  "type": "string"
3804
4041
  },
4042
+ "valuesContent": {
4043
+ "description": "Complete Helm values YAML used when the selected target is a managed Helm release.",
4044
+ "maxLength": 1048576,
4045
+ "type": "string"
4046
+ },
3805
4047
  "variables": {
3806
4048
  "additionalProperties": true,
3807
4049
  "type": "object"
@@ -4190,8 +4432,6 @@
4190
4432
  "required": [
4191
4433
  "name",
4192
4434
  "key",
4193
- "group",
4194
- "language",
4195
4435
  "enabled"
4196
4436
  ],
4197
4437
  "type": "object"
@@ -5179,6 +5419,157 @@
5179
5419
  ],
5180
5420
  "type": "object"
5181
5421
  },
5422
+ "AuthorizationDecision": {
5423
+ "additionalProperties": false,
5424
+ "properties": {
5425
+ "action": {
5426
+ "minLength": 1,
5427
+ "type": "string"
5428
+ },
5429
+ "allowedActions": {
5430
+ "items": {
5431
+ "minLength": 1,
5432
+ "type": "string"
5433
+ },
5434
+ "type": "array",
5435
+ "uniqueItems": true
5436
+ },
5437
+ "effectiveScope": {
5438
+ "$ref": "#/components/schemas/AuthorizationEffectiveScope"
5439
+ },
5440
+ "permissionKey": {
5441
+ "minLength": 1,
5442
+ "type": "string"
5443
+ },
5444
+ "policyVersion": {
5445
+ "minLength": 1,
5446
+ "type": "string"
5447
+ },
5448
+ "reasonCode": {
5449
+ "minLength": 1,
5450
+ "type": "string"
5451
+ },
5452
+ "resource": {
5453
+ "$ref": "#/components/schemas/AuthorizationResource"
5454
+ },
5455
+ "status": {
5456
+ "$ref": "#/components/schemas/AuthorizationDecisionStatus"
5457
+ }
5458
+ },
5459
+ "required": [
5460
+ "status",
5461
+ "permissionKey",
5462
+ "action",
5463
+ "resource",
5464
+ "reasonCode",
5465
+ "policyVersion"
5466
+ ],
5467
+ "type": "object"
5468
+ },
5469
+ "AuthorizationDecisionStatus": {
5470
+ "enum": [
5471
+ "allow",
5472
+ "deny",
5473
+ "approval_required"
5474
+ ],
5475
+ "type": "string",
5476
+ "x-enum-varnames": [
5477
+ "AuthorizationDecisionStatusAllow",
5478
+ "AuthorizationDecisionStatusDeny",
5479
+ "AuthorizationDecisionStatusApprovalRequired"
5480
+ ]
5481
+ },
5482
+ "AuthorizationEffectiveScope": {
5483
+ "additionalProperties": false,
5484
+ "properties": {
5485
+ "clusterIds": {
5486
+ "items": {
5487
+ "type": "string"
5488
+ },
5489
+ "type": "array",
5490
+ "uniqueItems": true
5491
+ },
5492
+ "labelSelector": {
5493
+ "type": "string"
5494
+ },
5495
+ "namespaces": {
5496
+ "items": {
5497
+ "type": "string"
5498
+ },
5499
+ "type": "array",
5500
+ "uniqueItems": true
5501
+ },
5502
+ "projectIds": {
5503
+ "items": {
5504
+ "type": "string"
5505
+ },
5506
+ "type": "array",
5507
+ "uniqueItems": true
5508
+ },
5509
+ "resourceKinds": {
5510
+ "items": {
5511
+ "type": "string"
5512
+ },
5513
+ "type": "array",
5514
+ "uniqueItems": true
5515
+ },
5516
+ "tenantIds": {
5517
+ "items": {
5518
+ "type": "string"
5519
+ },
5520
+ "type": "array",
5521
+ "uniqueItems": true
5522
+ },
5523
+ "workspaceIds": {
5524
+ "items": {
5525
+ "type": "string"
5526
+ },
5527
+ "type": "array",
5528
+ "uniqueItems": true
5529
+ }
5530
+ },
5531
+ "type": "object"
5532
+ },
5533
+ "AuthorizationResource": {
5534
+ "additionalProperties": false,
5535
+ "properties": {
5536
+ "clusterId": {
5537
+ "type": "string"
5538
+ },
5539
+ "id": {
5540
+ "type": "string"
5541
+ },
5542
+ "labels": {
5543
+ "additionalProperties": {
5544
+ "type": "string"
5545
+ },
5546
+ "type": "object"
5547
+ },
5548
+ "namespace": {
5549
+ "type": "string"
5550
+ },
5551
+ "owner": {
5552
+ "type": "string"
5553
+ },
5554
+ "projectId": {
5555
+ "type": "string"
5556
+ },
5557
+ "tenantId": {
5558
+ "type": "string"
5559
+ },
5560
+ "type": {
5561
+ "minLength": 1,
5562
+ "type": "string"
5563
+ },
5564
+ "workspaceId": {
5565
+ "type": "string"
5566
+ }
5567
+ },
5568
+ "required": [
5569
+ "type"
5570
+ ],
5571
+ "type": "object"
5572
+ },
5182
5573
  "AuthProvider": {
5183
5574
  "additionalProperties": false,
5184
5575
  "properties": {
@@ -11212,6 +11603,181 @@
11212
11603
  ],
11213
11604
  "type": "object"
11214
11605
  },
11606
+ "HelmImportedService": {
11607
+ "additionalProperties": false,
11608
+ "properties": {
11609
+ "created": {
11610
+ "type": "boolean"
11611
+ },
11612
+ "id": {
11613
+ "type": "string"
11614
+ },
11615
+ "key": {
11616
+ "type": "string"
11617
+ },
11618
+ "name": {
11619
+ "type": "string"
11620
+ },
11621
+ "releaseName": {
11622
+ "type": "string"
11623
+ }
11624
+ },
11625
+ "required": [
11626
+ "id",
11627
+ "key",
11628
+ "name",
11629
+ "releaseName",
11630
+ "created"
11631
+ ],
11632
+ "type": "object"
11633
+ },
11634
+ "HelmImportedTarget": {
11635
+ "additionalProperties": false,
11636
+ "properties": {
11637
+ "created": {
11638
+ "type": "boolean"
11639
+ },
11640
+ "id": {
11641
+ "type": "string"
11642
+ },
11643
+ "releaseName": {
11644
+ "type": "string"
11645
+ }
11646
+ },
11647
+ "required": [
11648
+ "id",
11649
+ "releaseName",
11650
+ "created"
11651
+ ],
11652
+ "type": "object"
11653
+ },
11654
+ "HelmReleaseImportInput": {
11655
+ "additionalProperties": false,
11656
+ "properties": {
11657
+ "releaseName": {
11658
+ "minLength": 1,
11659
+ "type": "string"
11660
+ }
11661
+ },
11662
+ "required": [
11663
+ "releaseName"
11664
+ ],
11665
+ "type": "object"
11666
+ },
11667
+ "HelmReleaseImportRequest": {
11668
+ "additionalProperties": false,
11669
+ "properties": {
11670
+ "applicationKey": {
11671
+ "minLength": 1,
11672
+ "type": "string"
11673
+ },
11674
+ "applicationName": {
11675
+ "minLength": 1,
11676
+ "type": "string"
11677
+ },
11678
+ "clusterId": {
11679
+ "minLength": 1,
11680
+ "type": "string"
11681
+ },
11682
+ "environmentKey": {
11683
+ "minLength": 1,
11684
+ "type": "string"
11685
+ },
11686
+ "environmentName": {
11687
+ "minLength": 1,
11688
+ "type": "string"
11689
+ },
11690
+ "namespace": {
11691
+ "minLength": 1,
11692
+ "type": "string"
11693
+ },
11694
+ "ownershipMode": {
11695
+ "enum": [
11696
+ "observe_only",
11697
+ "managed"
11698
+ ],
11699
+ "type": "string"
11700
+ },
11701
+ "releases": {
11702
+ "items": {
11703
+ "$ref": "#/components/schemas/HelmReleaseImportInput"
11704
+ },
11705
+ "maxItems": 100,
11706
+ "minItems": 1,
11707
+ "type": "array",
11708
+ "uniqueItems": true
11709
+ }
11710
+ },
11711
+ "required": [
11712
+ "clusterId",
11713
+ "namespace",
11714
+ "applicationKey",
11715
+ "applicationName",
11716
+ "environmentKey",
11717
+ "environmentName",
11718
+ "ownershipMode",
11719
+ "releases"
11720
+ ],
11721
+ "type": "object"
11722
+ },
11723
+ "HelmReleaseImportResult": {
11724
+ "additionalProperties": false,
11725
+ "properties": {
11726
+ "application": {
11727
+ "$ref": "#/components/schemas/KubernetesImportEntityRef"
11728
+ },
11729
+ "applicationEnvironmentCreated": {
11730
+ "type": "boolean"
11731
+ },
11732
+ "applicationEnvironmentId": {
11733
+ "type": "string"
11734
+ },
11735
+ "environment": {
11736
+ "$ref": "#/components/schemas/KubernetesImportEntityRef"
11737
+ },
11738
+ "ownershipMode": {
11739
+ "enum": [
11740
+ "observe_only",
11741
+ "managed"
11742
+ ],
11743
+ "type": "string"
11744
+ },
11745
+ "services": {
11746
+ "items": {
11747
+ "$ref": "#/components/schemas/HelmImportedService"
11748
+ },
11749
+ "type": "array"
11750
+ },
11751
+ "targets": {
11752
+ "items": {
11753
+ "$ref": "#/components/schemas/HelmImportedTarget"
11754
+ },
11755
+ "type": "array"
11756
+ }
11757
+ },
11758
+ "required": [
11759
+ "application",
11760
+ "environment",
11761
+ "applicationEnvironmentId",
11762
+ "applicationEnvironmentCreated",
11763
+ "ownershipMode",
11764
+ "services",
11765
+ "targets"
11766
+ ],
11767
+ "type": "object"
11768
+ },
11769
+ "HelmReleaseImportResultEnvelope": {
11770
+ "additionalProperties": false,
11771
+ "properties": {
11772
+ "data": {
11773
+ "$ref": "#/components/schemas/HelmReleaseImportResult"
11774
+ }
11775
+ },
11776
+ "required": [
11777
+ "data"
11778
+ ],
11779
+ "type": "object"
11780
+ },
11215
11781
  "IdentityApplication": {
11216
11782
  "additionalProperties": false,
11217
11783
  "properties": {
@@ -13782,6 +14348,199 @@
13782
14348
  ],
13783
14349
  "type": "object"
13784
14350
  },
14351
+ "KubernetesImportCandidate": {
14352
+ "additionalProperties": false,
14353
+ "properties": {
14354
+ "clusterId": {
14355
+ "minLength": 1,
14356
+ "type": "string"
14357
+ },
14358
+ "containers": {
14359
+ "items": {
14360
+ "type": "string"
14361
+ },
14362
+ "type": "array",
14363
+ "uniqueItems": true
14364
+ },
14365
+ "desiredReplicas": {
14366
+ "minimum": 0,
14367
+ "type": "integer"
14368
+ },
14369
+ "labels": {
14370
+ "additionalProperties": {
14371
+ "type": "string"
14372
+ },
14373
+ "type": "object"
14374
+ },
14375
+ "namespace": {
14376
+ "minLength": 1,
14377
+ "type": "string"
14378
+ },
14379
+ "readyReplicas": {
14380
+ "minimum": 0,
14381
+ "type": "integer"
14382
+ },
14383
+ "relatedResources": {
14384
+ "items": {
14385
+ "$ref": "#/components/schemas/KubernetesRelatedResource"
14386
+ },
14387
+ "type": "array"
14388
+ },
14389
+ "workloadKind": {
14390
+ "enum": [
14391
+ "Deployment",
14392
+ "StatefulSet",
14393
+ "DaemonSet"
14394
+ ],
14395
+ "type": "string"
14396
+ },
14397
+ "workloadName": {
14398
+ "minLength": 1,
14399
+ "type": "string"
14400
+ }
14401
+ },
14402
+ "required": [
14403
+ "clusterId",
14404
+ "namespace",
14405
+ "workloadKind",
14406
+ "workloadName",
14407
+ "desiredReplicas",
14408
+ "readyReplicas",
14409
+ "relatedResources"
14410
+ ],
14411
+ "type": "object"
14412
+ },
14413
+ "KubernetesImportCandidateListEnvelope": {
14414
+ "additionalProperties": false,
14415
+ "properties": {
14416
+ "items": {
14417
+ "items": {
14418
+ "$ref": "#/components/schemas/KubernetesImportCandidate"
14419
+ },
14420
+ "type": "array"
14421
+ },
14422
+ "truncated": {
14423
+ "type": "boolean"
14424
+ }
14425
+ },
14426
+ "required": [
14427
+ "items",
14428
+ "truncated"
14429
+ ],
14430
+ "type": "object"
14431
+ },
14432
+ "KubernetesImportedService": {
14433
+ "additionalProperties": false,
14434
+ "properties": {
14435
+ "created": {
14436
+ "type": "boolean"
14437
+ },
14438
+ "id": {
14439
+ "type": "string"
14440
+ },
14441
+ "key": {
14442
+ "type": "string"
14443
+ },
14444
+ "name": {
14445
+ "type": "string"
14446
+ },
14447
+ "workloadKind": {
14448
+ "enum": [
14449
+ "Deployment",
14450
+ "StatefulSet",
14451
+ "DaemonSet"
14452
+ ],
14453
+ "type": "string"
14454
+ },
14455
+ "workloadName": {
14456
+ "type": "string"
14457
+ }
14458
+ },
14459
+ "required": [
14460
+ "id",
14461
+ "key",
14462
+ "name",
14463
+ "workloadKind",
14464
+ "workloadName",
14465
+ "created"
14466
+ ],
14467
+ "type": "object"
14468
+ },
14469
+ "KubernetesImportedTarget": {
14470
+ "additionalProperties": false,
14471
+ "properties": {
14472
+ "created": {
14473
+ "type": "boolean"
14474
+ },
14475
+ "id": {
14476
+ "type": "string"
14477
+ },
14478
+ "workloadKind": {
14479
+ "enum": [
14480
+ "Deployment",
14481
+ "StatefulSet",
14482
+ "DaemonSet"
14483
+ ],
14484
+ "type": "string"
14485
+ },
14486
+ "workloadName": {
14487
+ "type": "string"
14488
+ }
14489
+ },
14490
+ "required": [
14491
+ "id",
14492
+ "workloadKind",
14493
+ "workloadName",
14494
+ "created"
14495
+ ],
14496
+ "type": "object"
14497
+ },
14498
+ "KubernetesImportEntityRef": {
14499
+ "additionalProperties": false,
14500
+ "properties": {
14501
+ "created": {
14502
+ "type": "boolean"
14503
+ },
14504
+ "id": {
14505
+ "type": "string"
14506
+ },
14507
+ "key": {
14508
+ "type": "string"
14509
+ },
14510
+ "name": {
14511
+ "type": "string"
14512
+ }
14513
+ },
14514
+ "required": [
14515
+ "id",
14516
+ "key",
14517
+ "name",
14518
+ "created"
14519
+ ],
14520
+ "type": "object"
14521
+ },
14522
+ "KubernetesRelatedResource": {
14523
+ "additionalProperties": false,
14524
+ "properties": {
14525
+ "kind": {
14526
+ "enum": [
14527
+ "Service",
14528
+ "Ingress",
14529
+ "HorizontalPodAutoscaler"
14530
+ ],
14531
+ "type": "string"
14532
+ },
14533
+ "name": {
14534
+ "minLength": 1,
14535
+ "type": "string"
14536
+ }
14537
+ },
14538
+ "required": [
14539
+ "kind",
14540
+ "name"
14541
+ ],
14542
+ "type": "object"
14543
+ },
13785
14544
  "KubernetesResourceAction": {
13786
14545
  "enum": [
13787
14546
  "list",
@@ -14521,6 +15280,142 @@
14521
15280
  ],
14522
15281
  "type": "object"
14523
15282
  },
15283
+ "KubernetesServiceImportRequest": {
15284
+ "additionalProperties": false,
15285
+ "properties": {
15286
+ "applicationKey": {
15287
+ "minLength": 1,
15288
+ "type": "string"
15289
+ },
15290
+ "applicationName": {
15291
+ "minLength": 1,
15292
+ "type": "string"
15293
+ },
15294
+ "clusterId": {
15295
+ "minLength": 1,
15296
+ "type": "string"
15297
+ },
15298
+ "environmentKey": {
15299
+ "minLength": 1,
15300
+ "type": "string"
15301
+ },
15302
+ "environmentName": {
15303
+ "minLength": 1,
15304
+ "type": "string"
15305
+ },
15306
+ "namespace": {
15307
+ "minLength": 1,
15308
+ "type": "string"
15309
+ },
15310
+ "ownershipMode": {
15311
+ "enum": [
15312
+ "observe_only",
15313
+ "managed"
15314
+ ],
15315
+ "type": "string"
15316
+ },
15317
+ "workloads": {
15318
+ "items": {
15319
+ "$ref": "#/components/schemas/KubernetesWorkloadImportInput"
15320
+ },
15321
+ "maxItems": 100,
15322
+ "minItems": 1,
15323
+ "type": "array",
15324
+ "uniqueItems": true
15325
+ }
15326
+ },
15327
+ "required": [
15328
+ "clusterId",
15329
+ "namespace",
15330
+ "applicationKey",
15331
+ "applicationName",
15332
+ "environmentKey",
15333
+ "environmentName",
15334
+ "ownershipMode",
15335
+ "workloads"
15336
+ ],
15337
+ "type": "object"
15338
+ },
15339
+ "KubernetesServiceImportResult": {
15340
+ "additionalProperties": false,
15341
+ "properties": {
15342
+ "application": {
15343
+ "$ref": "#/components/schemas/KubernetesImportEntityRef"
15344
+ },
15345
+ "applicationEnvironmentCreated": {
15346
+ "type": "boolean"
15347
+ },
15348
+ "applicationEnvironmentId": {
15349
+ "type": "string"
15350
+ },
15351
+ "environment": {
15352
+ "$ref": "#/components/schemas/KubernetesImportEntityRef"
15353
+ },
15354
+ "ownershipMode": {
15355
+ "enum": [
15356
+ "observe_only",
15357
+ "managed"
15358
+ ],
15359
+ "type": "string"
15360
+ },
15361
+ "services": {
15362
+ "items": {
15363
+ "$ref": "#/components/schemas/KubernetesImportedService"
15364
+ },
15365
+ "type": "array"
15366
+ },
15367
+ "targets": {
15368
+ "items": {
15369
+ "$ref": "#/components/schemas/KubernetesImportedTarget"
15370
+ },
15371
+ "type": "array"
15372
+ }
15373
+ },
15374
+ "required": [
15375
+ "application",
15376
+ "environment",
15377
+ "applicationEnvironmentId",
15378
+ "applicationEnvironmentCreated",
15379
+ "ownershipMode",
15380
+ "services",
15381
+ "targets"
15382
+ ],
15383
+ "type": "object"
15384
+ },
15385
+ "KubernetesServiceImportResultEnvelope": {
15386
+ "additionalProperties": false,
15387
+ "properties": {
15388
+ "data": {
15389
+ "$ref": "#/components/schemas/KubernetesServiceImportResult"
15390
+ }
15391
+ },
15392
+ "required": [
15393
+ "data"
15394
+ ],
15395
+ "type": "object"
15396
+ },
15397
+ "KubernetesWorkloadImportInput": {
15398
+ "additionalProperties": false,
15399
+ "properties": {
15400
+ "workloadKind": {
15401
+ "enum": [
15402
+ "Deployment",
15403
+ "StatefulSet",
15404
+ "DaemonSet"
15405
+ ],
15406
+ "type": "string"
15407
+ },
15408
+ "workloadName": {
15409
+ "minLength": 1,
15410
+ "type": "string"
15411
+ }
15412
+ },
15413
+ "required": [
15414
+ "workloadKind",
15415
+ "workloadName"
15416
+ ],
15417
+ "type": "object"
15418
+ },
14524
15419
  "LLMCallLog": {
14525
15420
  "additionalProperties": false,
14526
15421
  "properties": {
@@ -19480,6 +20375,312 @@
19480
20375
  "description": "Native provider-compatible JSON. Unknown fields are preserved and responses are not wrapped in an OpenSoha envelope.",
19481
20376
  "type": "object"
19482
20377
  },
20378
+ "ObservabilityDashboard": {
20379
+ "additionalProperties": false,
20380
+ "properties": {
20381
+ "createdAt": {
20382
+ "format": "date-time",
20383
+ "type": "string"
20384
+ },
20385
+ "dataSourceId": {
20386
+ "maxLength": 200,
20387
+ "type": "string"
20388
+ },
20389
+ "id": {
20390
+ "maxLength": 128,
20391
+ "minLength": 1,
20392
+ "type": "string"
20393
+ },
20394
+ "name": {
20395
+ "maxLength": 200,
20396
+ "minLength": 1,
20397
+ "type": "string"
20398
+ },
20399
+ "panels": {
20400
+ "items": {
20401
+ "$ref": "#/components/schemas/ObservabilityDashboardPanel"
20402
+ },
20403
+ "maxItems": 200,
20404
+ "type": "array"
20405
+ },
20406
+ "source": {
20407
+ "$ref": "#/components/schemas/ObservabilityDashboardSource"
20408
+ },
20409
+ "sourceSchemaVersion": {
20410
+ "minimum": 0,
20411
+ "type": "integer"
20412
+ },
20413
+ "tags": {
20414
+ "items": {
20415
+ "maxLength": 100,
20416
+ "minLength": 1,
20417
+ "type": "string"
20418
+ },
20419
+ "maxItems": 50,
20420
+ "type": "array",
20421
+ "uniqueItems": true
20422
+ },
20423
+ "updatedAt": {
20424
+ "format": "date-time",
20425
+ "type": "string"
20426
+ }
20427
+ },
20428
+ "required": [
20429
+ "id",
20430
+ "name",
20431
+ "source",
20432
+ "tags",
20433
+ "panels",
20434
+ "createdAt",
20435
+ "updatedAt"
20436
+ ],
20437
+ "type": "object"
20438
+ },
20439
+ "ObservabilityDashboardEnvelope": {
20440
+ "additionalProperties": false,
20441
+ "properties": {
20442
+ "data": {
20443
+ "$ref": "#/components/schemas/ObservabilityDashboard"
20444
+ }
20445
+ },
20446
+ "required": [
20447
+ "data"
20448
+ ],
20449
+ "type": "object"
20450
+ },
20451
+ "ObservabilityDashboardImportResult": {
20452
+ "additionalProperties": false,
20453
+ "properties": {
20454
+ "dashboard": {
20455
+ "$ref": "#/components/schemas/ObservabilityDashboard"
20456
+ },
20457
+ "importedPanelCount": {
20458
+ "minimum": 1,
20459
+ "type": "integer"
20460
+ },
20461
+ "skippedPanelCount": {
20462
+ "minimum": 0,
20463
+ "type": "integer"
20464
+ },
20465
+ "warnings": {
20466
+ "items": {
20467
+ "$ref": "#/components/schemas/ObservabilityDashboardImportWarning"
20468
+ },
20469
+ "maxItems": 500,
20470
+ "type": "array"
20471
+ }
20472
+ },
20473
+ "required": [
20474
+ "dashboard",
20475
+ "warnings",
20476
+ "importedPanelCount",
20477
+ "skippedPanelCount"
20478
+ ],
20479
+ "type": "object"
20480
+ },
20481
+ "ObservabilityDashboardImportResultEnvelope": {
20482
+ "additionalProperties": false,
20483
+ "properties": {
20484
+ "data": {
20485
+ "$ref": "#/components/schemas/ObservabilityDashboardImportResult"
20486
+ }
20487
+ },
20488
+ "required": [
20489
+ "data"
20490
+ ],
20491
+ "type": "object"
20492
+ },
20493
+ "ObservabilityDashboardImportWarning": {
20494
+ "additionalProperties": false,
20495
+ "properties": {
20496
+ "code": {
20497
+ "enum": [
20498
+ "unsupported_panel_type",
20499
+ "skipped_target",
20500
+ "unsupported_variable",
20501
+ "datasource_rebound",
20502
+ "unsupported_feature"
20503
+ ],
20504
+ "type": "string"
20505
+ },
20506
+ "message": {
20507
+ "maxLength": 500,
20508
+ "minLength": 1,
20509
+ "type": "string"
20510
+ },
20511
+ "panelId": {
20512
+ "maxLength": 128,
20513
+ "type": "string"
20514
+ }
20515
+ },
20516
+ "required": [
20517
+ "code",
20518
+ "message"
20519
+ ],
20520
+ "type": "object"
20521
+ },
20522
+ "ObservabilityDashboardListEnvelope": {
20523
+ "additionalProperties": false,
20524
+ "properties": {
20525
+ "items": {
20526
+ "items": {
20527
+ "$ref": "#/components/schemas/ObservabilityDashboard"
20528
+ },
20529
+ "type": "array"
20530
+ }
20531
+ },
20532
+ "required": [
20533
+ "items"
20534
+ ],
20535
+ "type": "object"
20536
+ },
20537
+ "ObservabilityDashboardPanel": {
20538
+ "additionalProperties": false,
20539
+ "properties": {
20540
+ "id": {
20541
+ "maxLength": 128,
20542
+ "minLength": 1,
20543
+ "type": "string"
20544
+ },
20545
+ "layout": {
20546
+ "$ref": "#/components/schemas/ObservabilityDashboardPanelLayout"
20547
+ },
20548
+ "markdown": {
20549
+ "maxLength": 32768,
20550
+ "type": "string"
20551
+ },
20552
+ "queryable": {
20553
+ "type": "boolean"
20554
+ },
20555
+ "targets": {
20556
+ "items": {
20557
+ "$ref": "#/components/schemas/ObservabilityDashboardTarget"
20558
+ },
20559
+ "maxItems": 8,
20560
+ "type": "array"
20561
+ },
20562
+ "title": {
20563
+ "maxLength": 200,
20564
+ "minLength": 1,
20565
+ "type": "string"
20566
+ },
20567
+ "type": {
20568
+ "$ref": "#/components/schemas/ObservabilityDashboardPanelType"
20569
+ }
20570
+ },
20571
+ "required": [
20572
+ "id",
20573
+ "title",
20574
+ "type",
20575
+ "layout",
20576
+ "targets",
20577
+ "queryable"
20578
+ ],
20579
+ "type": "object"
20580
+ },
20581
+ "ObservabilityDashboardPanelLayout": {
20582
+ "additionalProperties": false,
20583
+ "properties": {
20584
+ "h": {
20585
+ "maximum": 100,
20586
+ "minimum": 1,
20587
+ "type": "integer"
20588
+ },
20589
+ "w": {
20590
+ "maximum": 24,
20591
+ "minimum": 1,
20592
+ "type": "integer"
20593
+ },
20594
+ "x": {
20595
+ "maximum": 23,
20596
+ "minimum": 0,
20597
+ "type": "integer"
20598
+ },
20599
+ "y": {
20600
+ "minimum": 0,
20601
+ "type": "integer"
20602
+ }
20603
+ },
20604
+ "required": [
20605
+ "x",
20606
+ "y",
20607
+ "w",
20608
+ "h"
20609
+ ],
20610
+ "type": "object"
20611
+ },
20612
+ "ObservabilityDashboardPanelQueryInput": {
20613
+ "additionalProperties": false,
20614
+ "properties": {
20615
+ "stepSeconds": {
20616
+ "default": 60,
20617
+ "maximum": 3600,
20618
+ "minimum": 1,
20619
+ "type": "integer"
20620
+ },
20621
+ "timeFrom": {
20622
+ "format": "date-time",
20623
+ "type": "string"
20624
+ },
20625
+ "timeTo": {
20626
+ "format": "date-time",
20627
+ "type": "string"
20628
+ }
20629
+ },
20630
+ "required": [
20631
+ "timeFrom",
20632
+ "timeTo"
20633
+ ],
20634
+ "type": "object"
20635
+ },
20636
+ "ObservabilityDashboardPanelType": {
20637
+ "enum": [
20638
+ "timeseries",
20639
+ "stat",
20640
+ "text",
20641
+ "row"
20642
+ ],
20643
+ "type": "string",
20644
+ "x-enum-varnames": [
20645
+ "ObservabilityDashboardPanelTypeTimeseries",
20646
+ "ObservabilityDashboardPanelTypeStat",
20647
+ "ObservabilityDashboardPanelTypeText",
20648
+ "ObservabilityDashboardPanelTypeRow"
20649
+ ]
20650
+ },
20651
+ "ObservabilityDashboardSource": {
20652
+ "enum": [
20653
+ "grafana"
20654
+ ],
20655
+ "type": "string",
20656
+ "x-enum-varnames": [
20657
+ "ObservabilityDashboardSourceGrafana"
20658
+ ]
20659
+ },
20660
+ "ObservabilityDashboardTarget": {
20661
+ "additionalProperties": false,
20662
+ "properties": {
20663
+ "expression": {
20664
+ "maxLength": 8192,
20665
+ "minLength": 1,
20666
+ "type": "string"
20667
+ },
20668
+ "legend": {
20669
+ "maxLength": 256,
20670
+ "type": "string"
20671
+ },
20672
+ "refId": {
20673
+ "maxLength": 16,
20674
+ "minLength": 1,
20675
+ "type": "string"
20676
+ }
20677
+ },
20678
+ "required": [
20679
+ "refId",
20680
+ "expression"
20681
+ ],
20682
+ "type": "object"
20683
+ },
19483
20684
  "ObservabilityDataSource": {
19484
20685
  "additionalProperties": false,
19485
20686
  "properties": {
@@ -19697,6 +20898,28 @@
19697
20898
  "ObservabilityDataSourceValidationStatusFailed"
19698
20899
  ]
19699
20900
  },
20901
+ "ObservabilityGrafanaDashboardImportInput": {
20902
+ "additionalProperties": false,
20903
+ "properties": {
20904
+ "dataSourceId": {
20905
+ "description": "Enabled Soha Prometheus data source used by every imported queryable panel.",
20906
+ "maxLength": 200,
20907
+ "minLength": 1,
20908
+ "type": "string"
20909
+ },
20910
+ "json": {
20911
+ "description": "Grafana Classic dashboard JSON or a V1 resource whose spec contains the Classic dashboard model.",
20912
+ "maxLength": 2097152,
20913
+ "minLength": 2,
20914
+ "type": "string"
20915
+ }
20916
+ },
20917
+ "required": [
20918
+ "json",
20919
+ "dataSourceId"
20920
+ ],
20921
+ "type": "object"
20922
+ },
19700
20923
  "ObservabilityLogDataSourceConfig": {
19701
20924
  "additionalProperties": false,
19702
20925
  "properties": {
@@ -19850,6 +21073,41 @@
19850
21073
  },
19851
21074
  "type": "object"
19852
21075
  },
21076
+ "ObservabilityMetricDataSource": {
21077
+ "additionalProperties": false,
21078
+ "properties": {
21079
+ "id": {
21080
+ "maxLength": 200,
21081
+ "minLength": 1,
21082
+ "type": "string"
21083
+ },
21084
+ "name": {
21085
+ "maxLength": 200,
21086
+ "minLength": 1,
21087
+ "type": "string"
21088
+ }
21089
+ },
21090
+ "required": [
21091
+ "id",
21092
+ "name"
21093
+ ],
21094
+ "type": "object"
21095
+ },
21096
+ "ObservabilityMetricDataSourceListEnvelope": {
21097
+ "additionalProperties": false,
21098
+ "properties": {
21099
+ "items": {
21100
+ "items": {
21101
+ "$ref": "#/components/schemas/ObservabilityMetricDataSource"
21102
+ },
21103
+ "type": "array"
21104
+ }
21105
+ },
21106
+ "required": [
21107
+ "items"
21108
+ ],
21109
+ "type": "object"
21110
+ },
19853
21111
  "ObservabilityMetricKey": {
19854
21112
  "enum": [
19855
21113
  "cpu_usage",
@@ -20936,6 +22194,192 @@
20936
22194
  ],
20937
22195
  "type": "object"
20938
22196
  },
22197
+ "PermissionApprovalPolicy": {
22198
+ "enum": [
22199
+ "never",
22200
+ "eligible",
22201
+ "required"
22202
+ ],
22203
+ "type": "string",
22204
+ "x-enum-varnames": [
22205
+ "PermissionApprovalPolicyNever",
22206
+ "PermissionApprovalPolicyEligible",
22207
+ "PermissionApprovalPolicyRequired"
22208
+ ]
22209
+ },
22210
+ "PermissionCatalog": {
22211
+ "additionalProperties": false,
22212
+ "properties": {
22213
+ "catalogVersion": {
22214
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
22215
+ "type": "string"
22216
+ },
22217
+ "contentHash": {
22218
+ "pattern": "^sha256:[a-f0-9]{64}$",
22219
+ "type": "string"
22220
+ },
22221
+ "permissions": {
22222
+ "items": {
22223
+ "$ref": "#/components/schemas/PermissionDefinition"
22224
+ },
22225
+ "minItems": 1,
22226
+ "type": "array"
22227
+ },
22228
+ "schemaVersion": {
22229
+ "const": "authorization.opensoha.io/v1",
22230
+ "type": "string"
22231
+ }
22232
+ },
22233
+ "required": [
22234
+ "schemaVersion",
22235
+ "catalogVersion",
22236
+ "contentHash",
22237
+ "permissions"
22238
+ ],
22239
+ "type": "object"
22240
+ },
22241
+ "PermissionCatalogEnvelope": {
22242
+ "additionalProperties": false,
22243
+ "properties": {
22244
+ "data": {
22245
+ "$ref": "#/components/schemas/PermissionCatalog"
22246
+ }
22247
+ },
22248
+ "required": [
22249
+ "data"
22250
+ ],
22251
+ "type": "object"
22252
+ },
22253
+ "PermissionDefinition": {
22254
+ "additionalProperties": false,
22255
+ "properties": {
22256
+ "action": {
22257
+ "pattern": "^[a-z][a-z0-9_-]*$",
22258
+ "type": "string"
22259
+ },
22260
+ "approvalPolicy": {
22261
+ "$ref": "#/components/schemas/PermissionApprovalPolicy"
22262
+ },
22263
+ "assignable": {
22264
+ "type": "boolean"
22265
+ },
22266
+ "displayName": {
22267
+ "minLength": 1,
22268
+ "type": "string"
22269
+ },
22270
+ "domain": {
22271
+ "pattern": "^[a-z][a-z0-9_-]*$",
22272
+ "type": "string"
22273
+ },
22274
+ "key": {
22275
+ "pattern": "^[a-z][a-z0-9_-]*(?:\\.[a-z][a-z0-9_-]*)+$",
22276
+ "type": "string"
22277
+ },
22278
+ "legacyAliases": {
22279
+ "items": {
22280
+ "minLength": 1,
22281
+ "type": "string"
22282
+ },
22283
+ "type": "array",
22284
+ "uniqueItems": true
22285
+ },
22286
+ "legacyCapabilities": {
22287
+ "description": "Migration-only role-global action aliases accepted by this exact permission.",
22288
+ "items": {
22289
+ "pattern": "^[a-z][a-z0-9_-]*$",
22290
+ "type": "string"
22291
+ },
22292
+ "type": "array",
22293
+ "uniqueItems": true
22294
+ },
22295
+ "replacedBy": {
22296
+ "items": {
22297
+ "minLength": 1,
22298
+ "type": "string"
22299
+ },
22300
+ "type": "array",
22301
+ "uniqueItems": true
22302
+ },
22303
+ "resource": {
22304
+ "pattern": "^[a-z][a-z0-9_.-]*$",
22305
+ "type": "string"
22306
+ },
22307
+ "riskLevel": {
22308
+ "$ref": "#/components/schemas/PermissionRiskLevel"
22309
+ },
22310
+ "scopeKinds": {
22311
+ "items": {
22312
+ "$ref": "#/components/schemas/PermissionScopeKind"
22313
+ },
22314
+ "minItems": 1,
22315
+ "type": "array",
22316
+ "uniqueItems": true
22317
+ },
22318
+ "status": {
22319
+ "$ref": "#/components/schemas/PermissionStatus"
22320
+ }
22321
+ },
22322
+ "required": [
22323
+ "key",
22324
+ "domain",
22325
+ "resource",
22326
+ "action",
22327
+ "displayName",
22328
+ "riskLevel",
22329
+ "scopeKinds",
22330
+ "approvalPolicy",
22331
+ "status",
22332
+ "assignable"
22333
+ ],
22334
+ "type": "object"
22335
+ },
22336
+ "PermissionRiskLevel": {
22337
+ "enum": [
22338
+ "read",
22339
+ "mutate",
22340
+ "execute",
22341
+ "high"
22342
+ ],
22343
+ "type": "string",
22344
+ "x-enum-varnames": [
22345
+ "PermissionRiskLevelRead",
22346
+ "PermissionRiskLevelMutate",
22347
+ "PermissionRiskLevelExecute",
22348
+ "PermissionRiskLevelHigh"
22349
+ ]
22350
+ },
22351
+ "PermissionScopeKind": {
22352
+ "enum": [
22353
+ "tenant",
22354
+ "workspace",
22355
+ "cluster",
22356
+ "namespace",
22357
+ "project",
22358
+ "resource",
22359
+ "owner"
22360
+ ],
22361
+ "type": "string",
22362
+ "x-enum-varnames": [
22363
+ "PermissionScopeKindTenant",
22364
+ "PermissionScopeKindWorkspace",
22365
+ "PermissionScopeKindCluster",
22366
+ "PermissionScopeKindNamespace",
22367
+ "PermissionScopeKindProject",
22368
+ "PermissionScopeKindResource",
22369
+ "PermissionScopeKindOwner"
22370
+ ]
22371
+ },
22372
+ "PermissionStatus": {
22373
+ "enum": [
22374
+ "active",
22375
+ "legacy"
22376
+ ],
22377
+ "type": "string",
22378
+ "x-enum-varnames": [
22379
+ "PermissionStatusActive",
22380
+ "PermissionStatusLegacy"
22381
+ ]
22382
+ },
20939
22383
  "PersonalAccessToken": {
20940
22384
  "additionalProperties": false,
20941
22385
  "properties": {
@@ -22192,6 +23636,140 @@
22192
23636
  },
22193
23637
  "type": "object"
22194
23638
  },
23639
+ "RegistryConnection": {
23640
+ "additionalProperties": false,
23641
+ "properties": {
23642
+ "createdAt": {
23643
+ "format": "date-time",
23644
+ "type": "string"
23645
+ },
23646
+ "endpoint": {
23647
+ "minLength": 1,
23648
+ "type": "string"
23649
+ },
23650
+ "id": {
23651
+ "minLength": 1,
23652
+ "type": "string"
23653
+ },
23654
+ "insecure": {
23655
+ "type": "boolean"
23656
+ },
23657
+ "metadata": {
23658
+ "$ref": "#/components/schemas/RegistryConnectionMetadata"
23659
+ },
23660
+ "name": {
23661
+ "minLength": 1,
23662
+ "type": "string"
23663
+ },
23664
+ "namespace": {
23665
+ "type": "string"
23666
+ },
23667
+ "registryType": {
23668
+ "minLength": 1,
23669
+ "type": "string"
23670
+ },
23671
+ "updatedAt": {
23672
+ "format": "date-time",
23673
+ "type": "string"
23674
+ },
23675
+ "username": {
23676
+ "type": "string"
23677
+ }
23678
+ },
23679
+ "required": [
23680
+ "id",
23681
+ "name",
23682
+ "registryType",
23683
+ "endpoint",
23684
+ "insecure",
23685
+ "metadata",
23686
+ "createdAt",
23687
+ "updatedAt"
23688
+ ],
23689
+ "type": "object"
23690
+ },
23691
+ "RegistryConnectionEnvelope": {
23692
+ "additionalProperties": false,
23693
+ "properties": {
23694
+ "data": {
23695
+ "$ref": "#/components/schemas/RegistryConnection"
23696
+ }
23697
+ },
23698
+ "required": [
23699
+ "data"
23700
+ ],
23701
+ "type": "object"
23702
+ },
23703
+ "RegistryConnectionInput": {
23704
+ "additionalProperties": false,
23705
+ "properties": {
23706
+ "endpoint": {
23707
+ "minLength": 1,
23708
+ "type": "string"
23709
+ },
23710
+ "id": {
23711
+ "type": "string"
23712
+ },
23713
+ "insecure": {
23714
+ "type": "boolean"
23715
+ },
23716
+ "name": {
23717
+ "minLength": 1,
23718
+ "type": "string"
23719
+ },
23720
+ "namespace": {
23721
+ "type": "string"
23722
+ },
23723
+ "registryType": {
23724
+ "minLength": 1,
23725
+ "type": "string"
23726
+ },
23727
+ "secret": {
23728
+ "type": "string",
23729
+ "writeOnly": true
23730
+ },
23731
+ "username": {
23732
+ "type": "string"
23733
+ }
23734
+ },
23735
+ "required": [
23736
+ "name",
23737
+ "registryType",
23738
+ "endpoint"
23739
+ ],
23740
+ "type": "object"
23741
+ },
23742
+ "RegistryConnectionListEnvelope": {
23743
+ "additionalProperties": false,
23744
+ "properties": {
23745
+ "items": {
23746
+ "items": {
23747
+ "$ref": "#/components/schemas/RegistryConnection"
23748
+ },
23749
+ "type": "array"
23750
+ }
23751
+ },
23752
+ "required": [
23753
+ "items"
23754
+ ],
23755
+ "type": "object"
23756
+ },
23757
+ "RegistryConnectionMetadata": {
23758
+ "additionalProperties": false,
23759
+ "properties": {
23760
+ "secretConfigured": {
23761
+ "type": "boolean"
23762
+ },
23763
+ "secretStorage": {
23764
+ "type": "string"
23765
+ }
23766
+ },
23767
+ "required": [
23768
+ "secretConfigured",
23769
+ "secretStorage"
23770
+ ],
23771
+ "type": "object"
23772
+ },
22195
23773
  "ReleaseBundle": {
22196
23774
  "additionalProperties": false,
22197
23775
  "properties": {
@@ -24871,6 +26449,287 @@
24871
26449
  ],
24872
26450
  "type": "object"
24873
26451
  },
26452
+ "SoftwarePackage": {
26453
+ "additionalProperties": false,
26454
+ "properties": {
26455
+ "arch": {
26456
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26457
+ "type": "string"
26458
+ },
26459
+ "category": {
26460
+ "maxLength": 50,
26461
+ "type": "string"
26462
+ },
26463
+ "createdAt": {
26464
+ "format": "date-time",
26465
+ "type": "string"
26466
+ },
26467
+ "description": {
26468
+ "maxLength": 500,
26469
+ "type": "string"
26470
+ },
26471
+ "downloadPath": {
26472
+ "pattern": "^/api/v1/software/packages/[^/]+/download$",
26473
+ "type": "string"
26474
+ },
26475
+ "fileName": {
26476
+ "maxLength": 255,
26477
+ "minLength": 1,
26478
+ "type": "string"
26479
+ },
26480
+ "id": {
26481
+ "maxLength": 128,
26482
+ "minLength": 1,
26483
+ "type": "string"
26484
+ },
26485
+ "name": {
26486
+ "maxLength": 100,
26487
+ "minLength": 1,
26488
+ "type": "string"
26489
+ },
26490
+ "platform": {
26491
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26492
+ "type": "string"
26493
+ },
26494
+ "publisher": {
26495
+ "maxLength": 100,
26496
+ "minLength": 1,
26497
+ "type": "string"
26498
+ },
26499
+ "sha256": {
26500
+ "pattern": "^[0-9a-f]{64}$",
26501
+ "type": "string"
26502
+ },
26503
+ "sizeBytes": {
26504
+ "format": "int64",
26505
+ "maximum": 4294967296,
26506
+ "minimum": 1,
26507
+ "type": "integer"
26508
+ },
26509
+ "softwareId": {
26510
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26511
+ "type": "string"
26512
+ },
26513
+ "updatedAt": {
26514
+ "format": "date-time",
26515
+ "type": "string"
26516
+ },
26517
+ "version": {
26518
+ "maxLength": 64,
26519
+ "minLength": 1,
26520
+ "type": "string"
26521
+ }
26522
+ },
26523
+ "required": [
26524
+ "id",
26525
+ "softwareId",
26526
+ "name",
26527
+ "publisher",
26528
+ "version",
26529
+ "platform",
26530
+ "arch",
26531
+ "fileName",
26532
+ "sizeBytes",
26533
+ "sha256",
26534
+ "downloadPath",
26535
+ "createdAt",
26536
+ "updatedAt"
26537
+ ],
26538
+ "type": "object"
26539
+ },
26540
+ "SoftwarePackageEnvelope": {
26541
+ "additionalProperties": false,
26542
+ "properties": {
26543
+ "data": {
26544
+ "$ref": "#/components/schemas/SoftwarePackage"
26545
+ }
26546
+ },
26547
+ "required": [
26548
+ "data"
26549
+ ],
26550
+ "type": "object"
26551
+ },
26552
+ "SoftwarePackageListEnvelope": {
26553
+ "additionalProperties": false,
26554
+ "properties": {
26555
+ "items": {
26556
+ "items": {
26557
+ "$ref": "#/components/schemas/SoftwarePackage"
26558
+ },
26559
+ "type": "array"
26560
+ },
26561
+ "nextCursor": {
26562
+ "type": "string"
26563
+ }
26564
+ },
26565
+ "required": [
26566
+ "items"
26567
+ ],
26568
+ "type": "object"
26569
+ },
26570
+ "SoftwarePackageUploadRequest": {
26571
+ "additionalProperties": false,
26572
+ "properties": {
26573
+ "arch": {
26574
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26575
+ "type": "string"
26576
+ },
26577
+ "category": {
26578
+ "maxLength": 50,
26579
+ "type": "string"
26580
+ },
26581
+ "description": {
26582
+ "maxLength": 500,
26583
+ "type": "string"
26584
+ },
26585
+ "file": {
26586
+ "format": "binary",
26587
+ "type": "string"
26588
+ },
26589
+ "name": {
26590
+ "maxLength": 100,
26591
+ "minLength": 1,
26592
+ "type": "string"
26593
+ },
26594
+ "platform": {
26595
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26596
+ "type": "string"
26597
+ },
26598
+ "publisher": {
26599
+ "maxLength": 100,
26600
+ "minLength": 1,
26601
+ "type": "string"
26602
+ },
26603
+ "softwareId": {
26604
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26605
+ "type": "string"
26606
+ },
26607
+ "version": {
26608
+ "maxLength": 64,
26609
+ "minLength": 1,
26610
+ "type": "string"
26611
+ }
26612
+ },
26613
+ "required": [
26614
+ "softwareId",
26615
+ "name",
26616
+ "publisher",
26617
+ "version",
26618
+ "platform",
26619
+ "arch",
26620
+ "file"
26621
+ ],
26622
+ "type": "object"
26623
+ },
26624
+ "SoftwarePackageURLImportRequest": {
26625
+ "additionalProperties": false,
26626
+ "properties": {
26627
+ "arch": {
26628
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26629
+ "type": "string"
26630
+ },
26631
+ "category": {
26632
+ "maxLength": 50,
26633
+ "type": "string"
26634
+ },
26635
+ "description": {
26636
+ "maxLength": 500,
26637
+ "type": "string"
26638
+ },
26639
+ "fileName": {
26640
+ "maxLength": 255,
26641
+ "minLength": 1,
26642
+ "type": "string"
26643
+ },
26644
+ "name": {
26645
+ "maxLength": 100,
26646
+ "minLength": 1,
26647
+ "type": "string"
26648
+ },
26649
+ "platform": {
26650
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26651
+ "type": "string"
26652
+ },
26653
+ "publisher": {
26654
+ "maxLength": 100,
26655
+ "minLength": 1,
26656
+ "type": "string"
26657
+ },
26658
+ "softwareId": {
26659
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
26660
+ "type": "string"
26661
+ },
26662
+ "url": {
26663
+ "format": "uri",
26664
+ "maxLength": 2048,
26665
+ "pattern": "^https://",
26666
+ "type": "string"
26667
+ },
26668
+ "version": {
26669
+ "maxLength": 64,
26670
+ "minLength": 1,
26671
+ "type": "string"
26672
+ }
26673
+ },
26674
+ "required": [
26675
+ "softwareId",
26676
+ "name",
26677
+ "publisher",
26678
+ "version",
26679
+ "platform",
26680
+ "arch",
26681
+ "url"
26682
+ ],
26683
+ "type": "object"
26684
+ },
26685
+ "SoftwareStorage": {
26686
+ "additionalProperties": false,
26687
+ "properties": {
26688
+ "backend": {
26689
+ "maxLength": 64,
26690
+ "minLength": 1,
26691
+ "type": "string"
26692
+ },
26693
+ "items": {
26694
+ "items": {
26695
+ "$ref": "#/components/schemas/SoftwarePackage"
26696
+ },
26697
+ "type": "array"
26698
+ },
26699
+ "nextCursor": {
26700
+ "type": "string"
26701
+ },
26702
+ "objectCount": {
26703
+ "format": "int64",
26704
+ "minimum": 0,
26705
+ "type": "integer"
26706
+ },
26707
+ "totalBytes": {
26708
+ "format": "int64",
26709
+ "minimum": 0,
26710
+ "type": "integer"
26711
+ }
26712
+ },
26713
+ "required": [
26714
+ "backend",
26715
+ "objectCount",
26716
+ "totalBytes",
26717
+ "items"
26718
+ ],
26719
+ "type": "object"
26720
+ },
26721
+ "SoftwareStorageEnvelope": {
26722
+ "additionalProperties": false,
26723
+ "properties": {
26724
+ "data": {
26725
+ "$ref": "#/components/schemas/SoftwareStorage"
26726
+ }
26727
+ },
26728
+ "required": [
26729
+ "data"
26730
+ ],
26731
+ "type": "object"
26732
+ },
24874
26733
  "SourceBranch": {
24875
26734
  "additionalProperties": false,
24876
26735
  "properties": {
@@ -27035,6 +28894,11 @@
27035
28894
  }
27036
28895
  },
27037
28896
  "securitySchemes": {
28897
+ "agentBearerAuth": {
28898
+ "description": "Per-cluster Agent session token provisioned through the installation manifest.",
28899
+ "scheme": "bearer",
28900
+ "type": "http"
28901
+ },
27038
28902
  "bearerAuth": {
27039
28903
  "bearerFormat": "JWT",
27040
28904
  "scheme": "bearer",
@@ -27056,7 +28920,7 @@
27056
28920
  "info": {
27057
28921
  "description": "Public OpenSoha core API contract. This first contract focuses on stable cross-repository boundaries: auth, health, runner-facing control-plane callbacks, AI Gateway, and MCP capability discovery.\n",
27058
28922
  "title": "Soha API",
27059
- "version": "0.1.5"
28923
+ "version": "0.1.7"
27060
28924
  },
27061
28925
  "openapi": "3.1.0",
27062
28926
  "paths": {
@@ -27190,6 +29054,229 @@
27190
29054
  ]
27191
29055
  }
27192
29056
  },
29057
+ "/access/permissions": {
29058
+ "get": {
29059
+ "operationId": "getPermissionCatalog",
29060
+ "responses": {
29061
+ "200": {
29062
+ "content": {
29063
+ "application/json": {
29064
+ "schema": {
29065
+ "$ref": "#/components/schemas/PermissionCatalogEnvelope"
29066
+ }
29067
+ }
29068
+ },
29069
+ "description": "Canonical permission definitions and compatibility metadata."
29070
+ },
29071
+ "401": {
29072
+ "$ref": "#/components/responses/Error"
29073
+ },
29074
+ "403": {
29075
+ "$ref": "#/components/responses/Error"
29076
+ }
29077
+ },
29078
+ "tags": [
29079
+ "Access"
29080
+ ]
29081
+ }
29082
+ },
29083
+ "/access/roles": {
29084
+ "get": {
29085
+ "operationId": "listAccessRoles",
29086
+ "responses": {
29087
+ "200": {
29088
+ "content": {
29089
+ "application/json": {
29090
+ "schema": {
29091
+ "$ref": "#/components/schemas/AccessRoleListEnvelope"
29092
+ }
29093
+ }
29094
+ },
29095
+ "description": "Access roles."
29096
+ },
29097
+ "401": {
29098
+ "$ref": "#/components/responses/Error"
29099
+ },
29100
+ "403": {
29101
+ "$ref": "#/components/responses/Error"
29102
+ }
29103
+ },
29104
+ "tags": [
29105
+ "Access"
29106
+ ]
29107
+ },
29108
+ "post": {
29109
+ "operationId": "createAccessRole",
29110
+ "requestBody": {
29111
+ "content": {
29112
+ "application/json": {
29113
+ "schema": {
29114
+ "$ref": "#/components/schemas/AccessRoleInput"
29115
+ }
29116
+ }
29117
+ },
29118
+ "required": true
29119
+ },
29120
+ "responses": {
29121
+ "201": {
29122
+ "content": {
29123
+ "application/json": {
29124
+ "schema": {
29125
+ "$ref": "#/components/schemas/AccessRoleEnvelope"
29126
+ }
29127
+ }
29128
+ },
29129
+ "description": "Created access role."
29130
+ },
29131
+ "400": {
29132
+ "$ref": "#/components/responses/Error"
29133
+ },
29134
+ "401": {
29135
+ "$ref": "#/components/responses/Error"
29136
+ },
29137
+ "403": {
29138
+ "$ref": "#/components/responses/Error"
29139
+ }
29140
+ },
29141
+ "tags": [
29142
+ "Access"
29143
+ ]
29144
+ }
29145
+ },
29146
+ "/access/roles/{accessRoleID}": {
29147
+ "delete": {
29148
+ "operationId": "deleteAccessRole",
29149
+ "responses": {
29150
+ "200": {
29151
+ "content": {
29152
+ "application/json": {
29153
+ "schema": {
29154
+ "$ref": "#/components/schemas/AccessRoleDeleteResult"
29155
+ }
29156
+ }
29157
+ },
29158
+ "description": "Access role deleted."
29159
+ },
29160
+ "401": {
29161
+ "$ref": "#/components/responses/Error"
29162
+ },
29163
+ "403": {
29164
+ "$ref": "#/components/responses/Error"
29165
+ },
29166
+ "404": {
29167
+ "$ref": "#/components/responses/Error"
29168
+ }
29169
+ },
29170
+ "tags": [
29171
+ "Access"
29172
+ ]
29173
+ },
29174
+ "get": {
29175
+ "operationId": "getAccessRole",
29176
+ "responses": {
29177
+ "200": {
29178
+ "content": {
29179
+ "application/json": {
29180
+ "schema": {
29181
+ "$ref": "#/components/schemas/AccessRoleEnvelope"
29182
+ }
29183
+ }
29184
+ },
29185
+ "description": "Access role detail."
29186
+ },
29187
+ "401": {
29188
+ "$ref": "#/components/responses/Error"
29189
+ },
29190
+ "403": {
29191
+ "$ref": "#/components/responses/Error"
29192
+ },
29193
+ "404": {
29194
+ "$ref": "#/components/responses/Error"
29195
+ }
29196
+ },
29197
+ "tags": [
29198
+ "Access"
29199
+ ]
29200
+ },
29201
+ "parameters": [
29202
+ {
29203
+ "$ref": "#/components/parameters/AccessRoleID"
29204
+ }
29205
+ ],
29206
+ "put": {
29207
+ "operationId": "updateAccessRole",
29208
+ "requestBody": {
29209
+ "content": {
29210
+ "application/json": {
29211
+ "schema": {
29212
+ "$ref": "#/components/schemas/AccessRoleInput"
29213
+ }
29214
+ }
29215
+ },
29216
+ "required": true
29217
+ },
29218
+ "responses": {
29219
+ "200": {
29220
+ "content": {
29221
+ "application/json": {
29222
+ "schema": {
29223
+ "$ref": "#/components/schemas/AccessRoleEnvelope"
29224
+ }
29225
+ }
29226
+ },
29227
+ "description": "Updated access role."
29228
+ },
29229
+ "400": {
29230
+ "$ref": "#/components/responses/Error"
29231
+ },
29232
+ "401": {
29233
+ "$ref": "#/components/responses/Error"
29234
+ },
29235
+ "403": {
29236
+ "$ref": "#/components/responses/Error"
29237
+ },
29238
+ "404": {
29239
+ "$ref": "#/components/responses/Error"
29240
+ }
29241
+ },
29242
+ "tags": [
29243
+ "Access"
29244
+ ]
29245
+ }
29246
+ },
29247
+ "/agent-sessions/connect": {
29248
+ "get": {
29249
+ "description": "Upgrades to the soha-agent-tunnel.v1 WebSocket subprotocol. The Agent initiates this connection and carries multiplexed HTTP and stream traffic over the resulting session.\n",
29250
+ "operationId": "connectClusterAgentSession",
29251
+ "parameters": [
29252
+ {
29253
+ "$ref": "#/components/parameters/ClusterIDQuery"
29254
+ }
29255
+ ],
29256
+ "responses": {
29257
+ "101": {
29258
+ "description": "WebSocket session established."
29259
+ },
29260
+ "400": {
29261
+ "$ref": "#/components/responses/Error"
29262
+ },
29263
+ "401": {
29264
+ "$ref": "#/components/responses/Error"
29265
+ },
29266
+ "409": {
29267
+ "$ref": "#/components/responses/Error"
29268
+ }
29269
+ },
29270
+ "security": [
29271
+ {
29272
+ "agentBearerAuth": []
29273
+ }
29274
+ ],
29275
+ "tags": [
29276
+ "Platform"
29277
+ ]
29278
+ }
29279
+ },
27193
29280
  "/ai-gateway/approval-requests": {
27194
29281
  "get": {
27195
29282
  "operationId": "listAIGatewayApprovalRequests",
@@ -33740,6 +35827,149 @@
33740
35827
  ]
33741
35828
  }
33742
35829
  },
35830
+ "/application-environments/helm-release-imports": {
35831
+ "post": {
35832
+ "operationId": "importHelmReleases",
35833
+ "requestBody": {
35834
+ "content": {
35835
+ "application/json": {
35836
+ "schema": {
35837
+ "$ref": "#/components/schemas/HelmReleaseImportRequest"
35838
+ }
35839
+ }
35840
+ },
35841
+ "required": true
35842
+ },
35843
+ "responses": {
35844
+ "200": {
35845
+ "content": {
35846
+ "application/json": {
35847
+ "schema": {
35848
+ "$ref": "#/components/schemas/HelmReleaseImportResultEnvelope"
35849
+ }
35850
+ }
35851
+ },
35852
+ "description": "Idempotent Helm release import result."
35853
+ },
35854
+ "400": {
35855
+ "$ref": "#/components/responses/Error"
35856
+ },
35857
+ "403": {
35858
+ "$ref": "#/components/responses/Error"
35859
+ },
35860
+ "409": {
35861
+ "$ref": "#/components/responses/Error"
35862
+ }
35863
+ },
35864
+ "tags": [
35865
+ "Delivery"
35866
+ ]
35867
+ }
35868
+ },
35869
+ "/application-environments/imports": {
35870
+ "post": {
35871
+ "operationId": "importKubernetesServices",
35872
+ "requestBody": {
35873
+ "content": {
35874
+ "application/json": {
35875
+ "schema": {
35876
+ "$ref": "#/components/schemas/KubernetesServiceImportRequest"
35877
+ }
35878
+ }
35879
+ },
35880
+ "required": true
35881
+ },
35882
+ "responses": {
35883
+ "200": {
35884
+ "content": {
35885
+ "application/json": {
35886
+ "schema": {
35887
+ "$ref": "#/components/schemas/KubernetesServiceImportResultEnvelope"
35888
+ }
35889
+ }
35890
+ },
35891
+ "description": "Idempotent Kubernetes service import result."
35892
+ },
35893
+ "400": {
35894
+ "$ref": "#/components/responses/Error"
35895
+ },
35896
+ "403": {
35897
+ "$ref": "#/components/responses/Error"
35898
+ },
35899
+ "409": {
35900
+ "$ref": "#/components/responses/Error"
35901
+ }
35902
+ },
35903
+ "tags": [
35904
+ "Delivery"
35905
+ ]
35906
+ }
35907
+ },
35908
+ "/application-environments/target-candidates": {
35909
+ "get": {
35910
+ "operationId": "listApplicationEnvironmentTargetCandidates",
35911
+ "parameters": [
35912
+ {
35913
+ "in": "query",
35914
+ "name": "clusterId",
35915
+ "required": true,
35916
+ "schema": {
35917
+ "minLength": 1,
35918
+ "type": "string"
35919
+ }
35920
+ },
35921
+ {
35922
+ "in": "query",
35923
+ "name": "namespace",
35924
+ "required": true,
35925
+ "schema": {
35926
+ "minLength": 1,
35927
+ "type": "string"
35928
+ }
35929
+ },
35930
+ {
35931
+ "in": "query",
35932
+ "name": "search",
35933
+ "required": false,
35934
+ "schema": {
35935
+ "type": "string"
35936
+ }
35937
+ },
35938
+ {
35939
+ "in": "query",
35940
+ "name": "limit",
35941
+ "required": false,
35942
+ "schema": {
35943
+ "default": 100,
35944
+ "maximum": 200,
35945
+ "minimum": 1,
35946
+ "type": "integer"
35947
+ }
35948
+ }
35949
+ ],
35950
+ "responses": {
35951
+ "200": {
35952
+ "content": {
35953
+ "application/json": {
35954
+ "schema": {
35955
+ "$ref": "#/components/schemas/KubernetesImportCandidateListEnvelope"
35956
+ }
35957
+ }
35958
+ },
35959
+ "description": "Discoverable Kubernetes workloads and their related resources."
35960
+ },
35961
+ "400": {
35962
+ "$ref": "#/components/responses/Error"
35963
+ },
35964
+ "403": {
35965
+ "$ref": "#/components/responses/Error"
35966
+ }
35967
+ },
35968
+ "tags": [
35969
+ "Delivery"
35970
+ ]
35971
+ }
35972
+ },
33743
35973
  "/applications": {
33744
35974
  "get": {
33745
35975
  "operationId": "listApplications",
@@ -34699,6 +36929,43 @@
34699
36929
  ]
34700
36930
  }
34701
36931
  },
36932
+ "/clusters/{clusterID}/agent-installation": {
36933
+ "post": {
36934
+ "operationId": "createClusterAgentInstallation",
36935
+ "parameters": [
36936
+ {
36937
+ "$ref": "#/components/parameters/ClusterID"
36938
+ }
36939
+ ],
36940
+ "responses": {
36941
+ "200": {
36942
+ "content": {
36943
+ "application/json": {
36944
+ "schema": {
36945
+ "$ref": "#/components/schemas/AgentInstallationEnvelope"
36946
+ }
36947
+ }
36948
+ },
36949
+ "description": "Short-lived Kubernetes manifest URL and kubectl command for installing the cluster Agent."
36950
+ },
36951
+ "400": {
36952
+ "$ref": "#/components/responses/Error"
36953
+ },
36954
+ "403": {
36955
+ "$ref": "#/components/responses/Error"
36956
+ },
36957
+ "404": {
36958
+ "$ref": "#/components/responses/Error"
36959
+ },
36960
+ "409": {
36961
+ "$ref": "#/components/responses/Error"
36962
+ }
36963
+ },
36964
+ "tags": [
36965
+ "Platform"
36966
+ ]
36967
+ }
36968
+ },
34702
36969
  "/clusters/{clusterID}/logs/query": {
34703
36970
  "post": {
34704
36971
  "operationId": "queryClusterLogs",
@@ -39801,6 +42068,38 @@
39801
42068
  ]
39802
42069
  }
39803
42070
  },
42071
+ "/kubernetes/agent-installations/{installTicket}/manifest.yaml": {
42072
+ "get": {
42073
+ "operationId": "downloadKubernetesAgentInstallationManifest",
42074
+ "parameters": [
42075
+ {
42076
+ "$ref": "#/components/parameters/AgentInstallTicket"
42077
+ }
42078
+ ],
42079
+ "responses": {
42080
+ "200": {
42081
+ "content": {
42082
+ "application/yaml": {
42083
+ "schema": {
42084
+ "type": "string"
42085
+ }
42086
+ }
42087
+ },
42088
+ "description": "Complete Kubernetes Agent installation manifest. The download URL is short-lived."
42089
+ },
42090
+ "404": {
42091
+ "$ref": "#/components/responses/Error"
42092
+ },
42093
+ "410": {
42094
+ "$ref": "#/components/responses/Error"
42095
+ }
42096
+ },
42097
+ "security": [],
42098
+ "tags": [
42099
+ "Platform"
42100
+ ]
42101
+ }
42102
+ },
39804
42103
  "/marketplace/index.json": {
39805
42104
  "get": {
39806
42105
  "operationId": "getPublicMarketplaceCatalog",
@@ -39876,6 +42175,178 @@
39876
42175
  ]
39877
42176
  }
39878
42177
  },
42178
+ "/observability/dashboards": {
42179
+ "get": {
42180
+ "operationId": "listObservabilityDashboards",
42181
+ "responses": {
42182
+ "200": {
42183
+ "content": {
42184
+ "application/json": {
42185
+ "schema": {
42186
+ "$ref": "#/components/schemas/ObservabilityDashboardListEnvelope"
42187
+ }
42188
+ }
42189
+ },
42190
+ "description": "Dashboards visible to the current principal."
42191
+ },
42192
+ "403": {
42193
+ "$ref": "#/components/responses/Error"
42194
+ }
42195
+ },
42196
+ "tags": [
42197
+ "Observability"
42198
+ ]
42199
+ }
42200
+ },
42201
+ "/observability/dashboards/{dashboardID}": {
42202
+ "delete": {
42203
+ "operationId": "deleteObservabilityDashboard",
42204
+ "parameters": [
42205
+ {
42206
+ "$ref": "#/components/parameters/DashboardID"
42207
+ }
42208
+ ],
42209
+ "responses": {
42210
+ "200": {
42211
+ "content": {
42212
+ "application/json": {
42213
+ "schema": {
42214
+ "$ref": "#/components/schemas/OperationStatus"
42215
+ }
42216
+ }
42217
+ },
42218
+ "description": "Dashboard deleted."
42219
+ },
42220
+ "403": {
42221
+ "$ref": "#/components/responses/Error"
42222
+ },
42223
+ "404": {
42224
+ "$ref": "#/components/responses/Error"
42225
+ }
42226
+ },
42227
+ "tags": [
42228
+ "Observability"
42229
+ ]
42230
+ },
42231
+ "get": {
42232
+ "operationId": "getObservabilityDashboard",
42233
+ "parameters": [
42234
+ {
42235
+ "$ref": "#/components/parameters/DashboardID"
42236
+ }
42237
+ ],
42238
+ "responses": {
42239
+ "200": {
42240
+ "content": {
42241
+ "application/json": {
42242
+ "schema": {
42243
+ "$ref": "#/components/schemas/ObservabilityDashboardEnvelope"
42244
+ }
42245
+ }
42246
+ },
42247
+ "description": "Dashboard detail including normalized panels and targets."
42248
+ },
42249
+ "403": {
42250
+ "$ref": "#/components/responses/Error"
42251
+ },
42252
+ "404": {
42253
+ "$ref": "#/components/responses/Error"
42254
+ }
42255
+ },
42256
+ "tags": [
42257
+ "Observability"
42258
+ ]
42259
+ }
42260
+ },
42261
+ "/observability/dashboards/{dashboardID}/panels/{panelID}/query": {
42262
+ "post": {
42263
+ "operationId": "queryObservabilityDashboardPanel",
42264
+ "parameters": [
42265
+ {
42266
+ "$ref": "#/components/parameters/DashboardID"
42267
+ },
42268
+ {
42269
+ "$ref": "#/components/parameters/DashboardPanelID"
42270
+ }
42271
+ ],
42272
+ "requestBody": {
42273
+ "content": {
42274
+ "application/json": {
42275
+ "schema": {
42276
+ "$ref": "#/components/schemas/ObservabilityDashboardPanelQueryInput"
42277
+ }
42278
+ }
42279
+ },
42280
+ "required": true
42281
+ },
42282
+ "responses": {
42283
+ "200": {
42284
+ "content": {
42285
+ "application/json": {
42286
+ "schema": {
42287
+ "$ref": "#/components/schemas/ObservabilityMetricQueryEnvelope"
42288
+ }
42289
+ }
42290
+ },
42291
+ "description": "Normalized metric series for the persisted dashboard panel targets."
42292
+ },
42293
+ "400": {
42294
+ "$ref": "#/components/responses/Error"
42295
+ },
42296
+ "403": {
42297
+ "$ref": "#/components/responses/Error"
42298
+ },
42299
+ "404": {
42300
+ "$ref": "#/components/responses/Error"
42301
+ },
42302
+ "503": {
42303
+ "$ref": "#/components/responses/Error"
42304
+ }
42305
+ },
42306
+ "tags": [
42307
+ "Observability"
42308
+ ]
42309
+ }
42310
+ },
42311
+ "/observability/dashboards/imports": {
42312
+ "post": {
42313
+ "operationId": "importGrafanaDashboard",
42314
+ "requestBody": {
42315
+ "content": {
42316
+ "application/json": {
42317
+ "schema": {
42318
+ "$ref": "#/components/schemas/ObservabilityGrafanaDashboardImportInput"
42319
+ }
42320
+ }
42321
+ },
42322
+ "required": true
42323
+ },
42324
+ "responses": {
42325
+ "201": {
42326
+ "content": {
42327
+ "application/json": {
42328
+ "schema": {
42329
+ "$ref": "#/components/schemas/ObservabilityDashboardImportResultEnvelope"
42330
+ }
42331
+ }
42332
+ },
42333
+ "description": "Imported native dashboard and explicit compatibility warnings."
42334
+ },
42335
+ "400": {
42336
+ "$ref": "#/components/responses/Error"
42337
+ },
42338
+ "403": {
42339
+ "$ref": "#/components/responses/Error"
42340
+ },
42341
+ "404": {
42342
+ "$ref": "#/components/responses/Error"
42343
+ }
42344
+ },
42345
+ "tags": [
42346
+ "Observability"
42347
+ ]
42348
+ }
42349
+ },
39879
42350
  "/observability/data-sources": {
39880
42351
  "get": {
39881
42352
  "operationId": "listObservabilityDataSources",
@@ -40011,6 +42482,29 @@
40011
42482
  ]
40012
42483
  }
40013
42484
  },
42485
+ "/observability/metrics/data-sources": {
42486
+ "get": {
42487
+ "operationId": "listObservabilityMetricDataSources",
42488
+ "responses": {
42489
+ "200": {
42490
+ "content": {
42491
+ "application/json": {
42492
+ "schema": {
42493
+ "$ref": "#/components/schemas/ObservabilityMetricDataSourceListEnvelope"
42494
+ }
42495
+ }
42496
+ },
42497
+ "description": "Enabled Prometheus data sources available for metric dashboards."
42498
+ },
42499
+ "403": {
42500
+ "$ref": "#/components/responses/Error"
42501
+ }
42502
+ },
42503
+ "tags": [
42504
+ "Observability"
42505
+ ]
42506
+ }
42507
+ },
40014
42508
  "/observability/metrics/query": {
40015
42509
  "post": {
40016
42510
  "operationId": "queryObservabilityMetrics",
@@ -40501,6 +42995,148 @@
40501
42995
  ]
40502
42996
  }
40503
42997
  },
42998
+ "/registries": {
42999
+ "get": {
43000
+ "operationId": "listRegistryConnections",
43001
+ "parameters": [
43002
+ {
43003
+ "in": "query",
43004
+ "name": "limit",
43005
+ "required": false,
43006
+ "schema": {
43007
+ "maximum": 200,
43008
+ "minimum": 1,
43009
+ "type": "integer"
43010
+ }
43011
+ }
43012
+ ],
43013
+ "responses": {
43014
+ "200": {
43015
+ "content": {
43016
+ "application/json": {
43017
+ "schema": {
43018
+ "$ref": "#/components/schemas/RegistryConnectionListEnvelope"
43019
+ }
43020
+ }
43021
+ },
43022
+ "description": "Registry connections visible to the current principal."
43023
+ },
43024
+ "403": {
43025
+ "$ref": "#/components/responses/Error"
43026
+ }
43027
+ },
43028
+ "tags": [
43029
+ "Delivery"
43030
+ ]
43031
+ },
43032
+ "post": {
43033
+ "operationId": "createRegistryConnection",
43034
+ "requestBody": {
43035
+ "content": {
43036
+ "application/json": {
43037
+ "schema": {
43038
+ "$ref": "#/components/schemas/RegistryConnectionInput"
43039
+ }
43040
+ }
43041
+ },
43042
+ "required": true
43043
+ },
43044
+ "responses": {
43045
+ "201": {
43046
+ "content": {
43047
+ "application/json": {
43048
+ "schema": {
43049
+ "$ref": "#/components/schemas/RegistryConnectionEnvelope"
43050
+ }
43051
+ }
43052
+ },
43053
+ "description": "Created registry connection."
43054
+ },
43055
+ "400": {
43056
+ "$ref": "#/components/responses/Error"
43057
+ },
43058
+ "403": {
43059
+ "$ref": "#/components/responses/Error"
43060
+ }
43061
+ },
43062
+ "tags": [
43063
+ "Delivery"
43064
+ ]
43065
+ }
43066
+ },
43067
+ "/registries/{connectionID}": {
43068
+ "delete": {
43069
+ "operationId": "deleteRegistryConnection",
43070
+ "parameters": [
43071
+ {
43072
+ "$ref": "#/components/parameters/RegistryConnectionID"
43073
+ }
43074
+ ],
43075
+ "responses": {
43076
+ "200": {
43077
+ "content": {
43078
+ "application/json": {
43079
+ "schema": {
43080
+ "$ref": "#/components/schemas/OperationStatus"
43081
+ }
43082
+ }
43083
+ },
43084
+ "description": "Deleted registry connection."
43085
+ },
43086
+ "403": {
43087
+ "$ref": "#/components/responses/Error"
43088
+ },
43089
+ "404": {
43090
+ "$ref": "#/components/responses/Error"
43091
+ }
43092
+ },
43093
+ "tags": [
43094
+ "Delivery"
43095
+ ]
43096
+ },
43097
+ "put": {
43098
+ "operationId": "updateRegistryConnection",
43099
+ "parameters": [
43100
+ {
43101
+ "$ref": "#/components/parameters/RegistryConnectionID"
43102
+ }
43103
+ ],
43104
+ "requestBody": {
43105
+ "content": {
43106
+ "application/json": {
43107
+ "schema": {
43108
+ "$ref": "#/components/schemas/RegistryConnectionInput"
43109
+ }
43110
+ }
43111
+ },
43112
+ "required": true
43113
+ },
43114
+ "responses": {
43115
+ "200": {
43116
+ "content": {
43117
+ "application/json": {
43118
+ "schema": {
43119
+ "$ref": "#/components/schemas/RegistryConnectionEnvelope"
43120
+ }
43121
+ }
43122
+ },
43123
+ "description": "Updated registry connection."
43124
+ },
43125
+ "400": {
43126
+ "$ref": "#/components/responses/Error"
43127
+ },
43128
+ "403": {
43129
+ "$ref": "#/components/responses/Error"
43130
+ },
43131
+ "404": {
43132
+ "$ref": "#/components/responses/Error"
43133
+ }
43134
+ },
43135
+ "tags": [
43136
+ "Delivery"
43137
+ ]
43138
+ }
43139
+ },
40504
43140
  "/repositories": {
40505
43141
  "get": {
40506
43142
  "operationId": "listRepositories",
@@ -41473,6 +44109,271 @@
41473
44109
  ]
41474
44110
  }
41475
44111
  },
44112
+ "/software/packages": {
44113
+ "get": {
44114
+ "operationId": "listSoftwarePackages",
44115
+ "parameters": [
44116
+ {
44117
+ "in": "query",
44118
+ "name": "platform",
44119
+ "required": false,
44120
+ "schema": {
44121
+ "maxLength": 64,
44122
+ "type": "string"
44123
+ }
44124
+ },
44125
+ {
44126
+ "in": "query",
44127
+ "name": "arch",
44128
+ "required": false,
44129
+ "schema": {
44130
+ "maxLength": 64,
44131
+ "type": "string"
44132
+ }
44133
+ },
44134
+ {
44135
+ "in": "query",
44136
+ "name": "cursor",
44137
+ "required": false,
44138
+ "schema": {
44139
+ "maxLength": 256,
44140
+ "type": "string"
44141
+ }
44142
+ },
44143
+ {
44144
+ "in": "query",
44145
+ "name": "limit",
44146
+ "required": false,
44147
+ "schema": {
44148
+ "maximum": 200,
44149
+ "minimum": 1,
44150
+ "type": "integer"
44151
+ }
44152
+ }
44153
+ ],
44154
+ "responses": {
44155
+ "200": {
44156
+ "content": {
44157
+ "application/json": {
44158
+ "schema": {
44159
+ "$ref": "#/components/schemas/SoftwarePackageListEnvelope"
44160
+ }
44161
+ }
44162
+ },
44163
+ "description": "Software packages visible to the current principal."
44164
+ },
44165
+ "401": {
44166
+ "$ref": "#/components/responses/Error"
44167
+ },
44168
+ "403": {
44169
+ "$ref": "#/components/responses/Error"
44170
+ }
44171
+ },
44172
+ "tags": [
44173
+ "Software"
44174
+ ]
44175
+ },
44176
+ "post": {
44177
+ "operationId": "uploadSoftwarePackage",
44178
+ "requestBody": {
44179
+ "content": {
44180
+ "multipart/form-data": {
44181
+ "schema": {
44182
+ "$ref": "#/components/schemas/SoftwarePackageUploadRequest"
44183
+ }
44184
+ }
44185
+ },
44186
+ "required": true
44187
+ },
44188
+ "responses": {
44189
+ "201": {
44190
+ "content": {
44191
+ "application/json": {
44192
+ "schema": {
44193
+ "$ref": "#/components/schemas/SoftwarePackageEnvelope"
44194
+ }
44195
+ }
44196
+ },
44197
+ "description": "Software package uploaded and published."
44198
+ },
44199
+ "400": {
44200
+ "$ref": "#/components/responses/Error"
44201
+ },
44202
+ "401": {
44203
+ "$ref": "#/components/responses/Error"
44204
+ },
44205
+ "403": {
44206
+ "$ref": "#/components/responses/Error"
44207
+ },
44208
+ "409": {
44209
+ "$ref": "#/components/responses/Error"
44210
+ },
44211
+ "413": {
44212
+ "$ref": "#/components/responses/Error"
44213
+ }
44214
+ },
44215
+ "tags": [
44216
+ "Software"
44217
+ ]
44218
+ }
44219
+ },
44220
+ "/software/packages/{packageID}": {
44221
+ "delete": {
44222
+ "operationId": "deleteSoftwarePackage",
44223
+ "parameters": [
44224
+ {
44225
+ "$ref": "#/components/parameters/SoftwarePackageID"
44226
+ }
44227
+ ],
44228
+ "responses": {
44229
+ "204": {
44230
+ "description": "Software package deleted."
44231
+ },
44232
+ "401": {
44233
+ "$ref": "#/components/responses/Error"
44234
+ },
44235
+ "403": {
44236
+ "$ref": "#/components/responses/Error"
44237
+ },
44238
+ "404": {
44239
+ "$ref": "#/components/responses/Error"
44240
+ }
44241
+ },
44242
+ "tags": [
44243
+ "Software"
44244
+ ]
44245
+ }
44246
+ },
44247
+ "/software/packages/{packageID}/download": {
44248
+ "get": {
44249
+ "operationId": "downloadSoftwarePackage",
44250
+ "parameters": [
44251
+ {
44252
+ "$ref": "#/components/parameters/SoftwarePackageID"
44253
+ }
44254
+ ],
44255
+ "responses": {
44256
+ "200": {
44257
+ "content": {
44258
+ "application/octet-stream": {
44259
+ "schema": {
44260
+ "format": "binary",
44261
+ "type": "string"
44262
+ }
44263
+ }
44264
+ },
44265
+ "description": "Software package binary."
44266
+ },
44267
+ "401": {
44268
+ "$ref": "#/components/responses/Error"
44269
+ },
44270
+ "403": {
44271
+ "$ref": "#/components/responses/Error"
44272
+ },
44273
+ "404": {
44274
+ "$ref": "#/components/responses/Error"
44275
+ }
44276
+ },
44277
+ "tags": [
44278
+ "Software"
44279
+ ]
44280
+ }
44281
+ },
44282
+ "/software/packages/import": {
44283
+ "post": {
44284
+ "operationId": "importSoftwarePackage",
44285
+ "requestBody": {
44286
+ "content": {
44287
+ "application/json": {
44288
+ "schema": {
44289
+ "$ref": "#/components/schemas/SoftwarePackageURLImportRequest"
44290
+ }
44291
+ }
44292
+ },
44293
+ "required": true
44294
+ },
44295
+ "responses": {
44296
+ "201": {
44297
+ "content": {
44298
+ "application/json": {
44299
+ "schema": {
44300
+ "$ref": "#/components/schemas/SoftwarePackageEnvelope"
44301
+ }
44302
+ }
44303
+ },
44304
+ "description": "Software package downloaded from the source URL and published."
44305
+ },
44306
+ "400": {
44307
+ "$ref": "#/components/responses/Error"
44308
+ },
44309
+ "401": {
44310
+ "$ref": "#/components/responses/Error"
44311
+ },
44312
+ "403": {
44313
+ "$ref": "#/components/responses/Error"
44314
+ },
44315
+ "409": {
44316
+ "$ref": "#/components/responses/Error"
44317
+ },
44318
+ "413": {
44319
+ "$ref": "#/components/responses/Error"
44320
+ }
44321
+ },
44322
+ "tags": [
44323
+ "Software"
44324
+ ]
44325
+ }
44326
+ },
44327
+ "/software/storage": {
44328
+ "get": {
44329
+ "operationId": "getSoftwareStorage",
44330
+ "parameters": [
44331
+ {
44332
+ "in": "query",
44333
+ "name": "cursor",
44334
+ "required": false,
44335
+ "schema": {
44336
+ "maxLength": 256,
44337
+ "type": "string"
44338
+ }
44339
+ },
44340
+ {
44341
+ "in": "query",
44342
+ "name": "limit",
44343
+ "required": false,
44344
+ "schema": {
44345
+ "maximum": 200,
44346
+ "minimum": 1,
44347
+ "type": "integer"
44348
+ }
44349
+ }
44350
+ ],
44351
+ "responses": {
44352
+ "200": {
44353
+ "content": {
44354
+ "application/json": {
44355
+ "schema": {
44356
+ "$ref": "#/components/schemas/SoftwareStorageEnvelope"
44357
+ }
44358
+ }
44359
+ },
44360
+ "description": "Managed software storage summary and object records."
44361
+ },
44362
+ "400": {
44363
+ "$ref": "#/components/responses/Error"
44364
+ },
44365
+ "401": {
44366
+ "$ref": "#/components/responses/Error"
44367
+ },
44368
+ "403": {
44369
+ "$ref": "#/components/responses/Error"
44370
+ }
44371
+ },
44372
+ "tags": [
44373
+ "Software"
44374
+ ]
44375
+ }
44376
+ },
41476
44377
  "/source-connections": {
41477
44378
  "get": {
41478
44379
  "operationId": "listSourceConnections",
@@ -42344,6 +45245,12 @@
42344
45245
  {
42345
45246
  "name": "Plugins"
42346
45247
  },
45248
+ {
45249
+ "name": "Software"
45250
+ },
45251
+ {
45252
+ "name": "Access"
45253
+ },
42347
45254
  {
42348
45255
  "name": "Identity"
42349
45256
  },