@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
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: Soha API
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  description: >
6
6
  Public OpenSoha core API contract. This first contract focuses on stable
7
7
  cross-repository boundaries: auth, health, runner-facing control-plane
@@ -34,6 +34,8 @@ tags:
34
34
  - name: Compute
35
35
  - name: MCP
36
36
  - name: Plugins
37
+ - name: Software
38
+ - name: Access
37
39
  - name: Identity
38
40
  - name: Directory
39
41
  paths:
@@ -1303,6 +1305,93 @@ paths:
1303
1305
  $ref: "#/components/schemas/ApplicationEnvironmentEnvelope"
1304
1306
  "400":
1305
1307
  $ref: "#/components/responses/Error"
1308
+ /application-environments/target-candidates:
1309
+ get:
1310
+ tags: [Delivery]
1311
+ operationId: listApplicationEnvironmentTargetCandidates
1312
+ parameters:
1313
+ - name: clusterId
1314
+ in: query
1315
+ required: true
1316
+ schema:
1317
+ type: string
1318
+ minLength: 1
1319
+ - name: namespace
1320
+ in: query
1321
+ required: true
1322
+ schema:
1323
+ type: string
1324
+ minLength: 1
1325
+ - name: search
1326
+ in: query
1327
+ required: false
1328
+ schema:
1329
+ type: string
1330
+ - name: limit
1331
+ in: query
1332
+ required: false
1333
+ schema:
1334
+ type: integer
1335
+ minimum: 1
1336
+ maximum: 200
1337
+ default: 100
1338
+ responses:
1339
+ "200":
1340
+ description: Discoverable Kubernetes workloads and their related resources.
1341
+ content:
1342
+ application/json:
1343
+ schema:
1344
+ $ref: "#/components/schemas/KubernetesImportCandidateListEnvelope"
1345
+ "400":
1346
+ $ref: "#/components/responses/Error"
1347
+ "403":
1348
+ $ref: "#/components/responses/Error"
1349
+ /application-environments/imports:
1350
+ post:
1351
+ tags: [Delivery]
1352
+ operationId: importKubernetesServices
1353
+ requestBody:
1354
+ required: true
1355
+ content:
1356
+ application/json:
1357
+ schema:
1358
+ $ref: "#/components/schemas/KubernetesServiceImportRequest"
1359
+ responses:
1360
+ "200":
1361
+ description: Idempotent Kubernetes service import result.
1362
+ content:
1363
+ application/json:
1364
+ schema:
1365
+ $ref: "#/components/schemas/KubernetesServiceImportResultEnvelope"
1366
+ "400":
1367
+ $ref: "#/components/responses/Error"
1368
+ "403":
1369
+ $ref: "#/components/responses/Error"
1370
+ "409":
1371
+ $ref: "#/components/responses/Error"
1372
+ /application-environments/helm-release-imports:
1373
+ post:
1374
+ tags: [Delivery]
1375
+ operationId: importHelmReleases
1376
+ requestBody:
1377
+ required: true
1378
+ content:
1379
+ application/json:
1380
+ schema:
1381
+ $ref: "#/components/schemas/HelmReleaseImportRequest"
1382
+ responses:
1383
+ "200":
1384
+ description: Idempotent Helm release import result.
1385
+ content:
1386
+ application/json:
1387
+ schema:
1388
+ $ref: "#/components/schemas/HelmReleaseImportResultEnvelope"
1389
+ "400":
1390
+ $ref: "#/components/responses/Error"
1391
+ "403":
1392
+ $ref: "#/components/responses/Error"
1393
+ "409":
1394
+ $ref: "#/components/responses/Error"
1306
1395
  /application-environments/{applicationEnvironmentID}:
1307
1396
  get:
1308
1397
  tags: [Delivery]
@@ -1369,6 +1458,88 @@ paths:
1369
1458
  $ref: "#/components/schemas/ApplicationEnvironmentDeliveryDetailEnvelope"
1370
1459
  "404":
1371
1460
  $ref: "#/components/responses/Error"
1461
+ /registries:
1462
+ get:
1463
+ tags: [Delivery]
1464
+ operationId: listRegistryConnections
1465
+ parameters:
1466
+ - name: limit
1467
+ in: query
1468
+ required: false
1469
+ schema:
1470
+ type: integer
1471
+ minimum: 1
1472
+ maximum: 200
1473
+ responses:
1474
+ "200":
1475
+ description: Registry connections visible to the current principal.
1476
+ content:
1477
+ application/json:
1478
+ schema:
1479
+ $ref: "#/components/schemas/RegistryConnectionListEnvelope"
1480
+ "403":
1481
+ $ref: "#/components/responses/Error"
1482
+ post:
1483
+ tags: [Delivery]
1484
+ operationId: createRegistryConnection
1485
+ requestBody:
1486
+ required: true
1487
+ content:
1488
+ application/json:
1489
+ schema:
1490
+ $ref: "#/components/schemas/RegistryConnectionInput"
1491
+ responses:
1492
+ "201":
1493
+ description: Created registry connection.
1494
+ content:
1495
+ application/json:
1496
+ schema:
1497
+ $ref: "#/components/schemas/RegistryConnectionEnvelope"
1498
+ "400":
1499
+ $ref: "#/components/responses/Error"
1500
+ "403":
1501
+ $ref: "#/components/responses/Error"
1502
+ /registries/{connectionID}:
1503
+ put:
1504
+ tags: [Delivery]
1505
+ operationId: updateRegistryConnection
1506
+ parameters:
1507
+ - $ref: "#/components/parameters/RegistryConnectionID"
1508
+ requestBody:
1509
+ required: true
1510
+ content:
1511
+ application/json:
1512
+ schema:
1513
+ $ref: "#/components/schemas/RegistryConnectionInput"
1514
+ responses:
1515
+ "200":
1516
+ description: Updated registry connection.
1517
+ content:
1518
+ application/json:
1519
+ schema:
1520
+ $ref: "#/components/schemas/RegistryConnectionEnvelope"
1521
+ "400":
1522
+ $ref: "#/components/responses/Error"
1523
+ "403":
1524
+ $ref: "#/components/responses/Error"
1525
+ "404":
1526
+ $ref: "#/components/responses/Error"
1527
+ delete:
1528
+ tags: [Delivery]
1529
+ operationId: deleteRegistryConnection
1530
+ parameters:
1531
+ - $ref: "#/components/parameters/RegistryConnectionID"
1532
+ responses:
1533
+ "200":
1534
+ description: Deleted registry connection.
1535
+ content:
1536
+ application/json:
1537
+ schema:
1538
+ $ref: "#/components/schemas/OperationStatus"
1539
+ "403":
1540
+ $ref: "#/components/responses/Error"
1541
+ "404":
1542
+ $ref: "#/components/responses/Error"
1372
1543
  /build-templates:
1373
1544
  get:
1374
1545
  tags: [Delivery]
@@ -2737,6 +2908,66 @@ paths:
2737
2908
  $ref: "#/components/schemas/ClusterCapabilityMatrixEnvelope"
2738
2909
  "403":
2739
2910
  $ref: "#/components/responses/Error"
2911
+ /clusters/{clusterID}/agent-installation:
2912
+ post:
2913
+ tags: [Platform]
2914
+ operationId: createClusterAgentInstallation
2915
+ parameters:
2916
+ - $ref: "#/components/parameters/ClusterID"
2917
+ responses:
2918
+ "200":
2919
+ description: Short-lived Kubernetes manifest URL and kubectl command for installing the cluster Agent.
2920
+ content:
2921
+ application/json:
2922
+ schema:
2923
+ $ref: "#/components/schemas/AgentInstallationEnvelope"
2924
+ "400":
2925
+ $ref: "#/components/responses/Error"
2926
+ "403":
2927
+ $ref: "#/components/responses/Error"
2928
+ "404":
2929
+ $ref: "#/components/responses/Error"
2930
+ "409":
2931
+ $ref: "#/components/responses/Error"
2932
+ /kubernetes/agent-installations/{installTicket}/manifest.yaml:
2933
+ get:
2934
+ tags: [Platform]
2935
+ operationId: downloadKubernetesAgentInstallationManifest
2936
+ security: []
2937
+ parameters:
2938
+ - $ref: "#/components/parameters/AgentInstallTicket"
2939
+ responses:
2940
+ "200":
2941
+ description: Complete Kubernetes Agent installation manifest. The download URL is short-lived.
2942
+ content:
2943
+ application/yaml:
2944
+ schema:
2945
+ type: string
2946
+ "404":
2947
+ $ref: "#/components/responses/Error"
2948
+ "410":
2949
+ $ref: "#/components/responses/Error"
2950
+ /agent-sessions/connect:
2951
+ get:
2952
+ tags: [Platform]
2953
+ operationId: connectClusterAgentSession
2954
+ description: >
2955
+ Upgrades to the soha-agent-tunnel.v1 WebSocket subprotocol. The Agent
2956
+ initiates this connection and carries multiplexed HTTP and stream traffic
2957
+ over the resulting session.
2958
+ security:
2959
+ - agentBearerAuth: []
2960
+ parameters:
2961
+ - $ref: "#/components/parameters/ClusterIDQuery"
2962
+ responses:
2963
+ "101":
2964
+ description: WebSocket session established.
2965
+ "400":
2966
+ $ref: "#/components/responses/Error"
2967
+ "401":
2968
+ $ref: "#/components/responses/Error"
2969
+ "409":
2970
+ $ref: "#/components/responses/Error"
2740
2971
  /clusters/{clusterID}/logs/query:
2741
2972
  post:
2742
2973
  tags: [Platform]
@@ -3020,120 +3251,230 @@ paths:
3020
3251
  $ref: "#/components/schemas/ObservabilityProviderListEnvelope"
3021
3252
  "403":
3022
3253
  $ref: "#/components/responses/Error"
3023
- /observability/metrics/query:
3024
- post:
3254
+ /observability/dashboards:
3255
+ get:
3025
3256
  tags: [Observability]
3026
- operationId: queryObservabilityMetrics
3027
- requestBody:
3028
- required: true
3029
- content:
3030
- application/json:
3031
- schema:
3032
- $ref: "#/components/schemas/ObservabilityMetricQueryInput"
3257
+ operationId: listObservabilityDashboards
3033
3258
  responses:
3034
3259
  "200":
3035
- description: Normalized metric series from an authorized configured provider.
3260
+ description: Dashboards visible to the current principal.
3036
3261
  content:
3037
3262
  application/json:
3038
3263
  schema:
3039
- $ref: "#/components/schemas/ObservabilityMetricQueryEnvelope"
3040
- "400":
3041
- $ref: "#/components/responses/Error"
3264
+ $ref: "#/components/schemas/ObservabilityDashboardListEnvelope"
3042
3265
  "403":
3043
3266
  $ref: "#/components/responses/Error"
3044
- "404":
3045
- $ref: "#/components/responses/Error"
3046
- "503":
3267
+ /observability/metrics/data-sources:
3268
+ get:
3269
+ tags: [Observability]
3270
+ operationId: listObservabilityMetricDataSources
3271
+ responses:
3272
+ "200":
3273
+ description: Enabled Prometheus data sources available for metric dashboards.
3274
+ content:
3275
+ application/json:
3276
+ schema:
3277
+ $ref: "#/components/schemas/ObservabilityMetricDataSourceListEnvelope"
3278
+ "403":
3047
3279
  $ref: "#/components/responses/Error"
3048
- /observability/traces/query:
3280
+ /observability/dashboards/imports:
3049
3281
  post:
3050
3282
  tags: [Observability]
3051
- operationId: queryObservabilityTraces
3283
+ operationId: importGrafanaDashboard
3052
3284
  requestBody:
3053
3285
  required: true
3054
3286
  content:
3055
3287
  application/json:
3056
3288
  schema:
3057
- $ref: "#/components/schemas/ObservabilityTraceQueryInput"
3289
+ $ref: "#/components/schemas/ObservabilityGrafanaDashboardImportInput"
3058
3290
  responses:
3059
- "200":
3060
- description: Normalized trace spans from an authorized configured provider.
3291
+ "201":
3292
+ description: Imported native dashboard and explicit compatibility warnings.
3061
3293
  content:
3062
3294
  application/json:
3063
3295
  schema:
3064
- $ref: "#/components/schemas/ObservabilityTraceQueryEnvelope"
3296
+ $ref: "#/components/schemas/ObservabilityDashboardImportResultEnvelope"
3065
3297
  "400":
3066
3298
  $ref: "#/components/responses/Error"
3067
3299
  "403":
3068
3300
  $ref: "#/components/responses/Error"
3069
3301
  "404":
3070
3302
  $ref: "#/components/responses/Error"
3071
- "503":
3072
- $ref: "#/components/responses/Error"
3073
- /observability/data-sources:
3303
+ /observability/dashboards/{dashboardID}:
3074
3304
  get:
3075
3305
  tags: [Observability]
3076
- operationId: listObservabilityDataSources
3306
+ operationId: getObservabilityDashboard
3307
+ parameters:
3308
+ - $ref: "#/components/parameters/DashboardID"
3077
3309
  responses:
3078
3310
  "200":
3079
- description: Permission-filtered log data sources with credentials redacted.
3311
+ description: Dashboard detail including normalized panels and targets.
3080
3312
  content:
3081
3313
  application/json:
3082
3314
  schema:
3083
- $ref: "#/components/schemas/ObservabilityDataSourceListEnvelope"
3315
+ $ref: "#/components/schemas/ObservabilityDashboardEnvelope"
3084
3316
  "403":
3085
3317
  $ref: "#/components/responses/Error"
3086
- post:
3318
+ "404":
3319
+ $ref: "#/components/responses/Error"
3320
+ delete:
3087
3321
  tags: [Observability]
3088
- operationId: createObservabilityDataSource
3089
- requestBody:
3090
- required: true
3091
- content:
3092
- application/json:
3093
- schema:
3094
- $ref: "#/components/schemas/ObservabilityDataSourceInput"
3322
+ operationId: deleteObservabilityDashboard
3323
+ parameters:
3324
+ - $ref: "#/components/parameters/DashboardID"
3095
3325
  responses:
3096
- "201":
3097
- description: Log data source created with credentials redacted.
3326
+ "200":
3327
+ description: Dashboard deleted.
3098
3328
  content:
3099
3329
  application/json:
3100
3330
  schema:
3101
- $ref: "#/components/schemas/ObservabilityDataSourceEnvelope"
3102
- "400":
3103
- $ref: "#/components/responses/Error"
3331
+ $ref: "#/components/schemas/OperationStatus"
3104
3332
  "403":
3105
3333
  $ref: "#/components/responses/Error"
3106
- /observability/data-sources/{dataSourceID}:
3107
- put:
3334
+ "404":
3335
+ $ref: "#/components/responses/Error"
3336
+ /observability/dashboards/{dashboardID}/panels/{panelID}/query:
3337
+ post:
3108
3338
  tags: [Observability]
3109
- operationId: updateObservabilityDataSource
3339
+ operationId: queryObservabilityDashboardPanel
3110
3340
  parameters:
3111
- - $ref: "#/components/parameters/DataSourceID"
3341
+ - $ref: "#/components/parameters/DashboardID"
3342
+ - $ref: "#/components/parameters/DashboardPanelID"
3112
3343
  requestBody:
3113
3344
  required: true
3114
3345
  content:
3115
3346
  application/json:
3116
3347
  schema:
3117
- $ref: "#/components/schemas/ObservabilityDataSourceInput"
3348
+ $ref: "#/components/schemas/ObservabilityDashboardPanelQueryInput"
3118
3349
  responses:
3119
3350
  "200":
3120
- description: Log data source updated with credentials redacted.
3351
+ description: Normalized metric series for the persisted dashboard panel targets.
3121
3352
  content:
3122
3353
  application/json:
3123
3354
  schema:
3124
- $ref: "#/components/schemas/ObservabilityDataSourceEnvelope"
3355
+ $ref: "#/components/schemas/ObservabilityMetricQueryEnvelope"
3125
3356
  "400":
3126
3357
  $ref: "#/components/responses/Error"
3127
3358
  "403":
3128
3359
  $ref: "#/components/responses/Error"
3129
3360
  "404":
3130
3361
  $ref: "#/components/responses/Error"
3131
- /observability/data-sources/{dataSourceID}/validate:
3362
+ "503":
3363
+ $ref: "#/components/responses/Error"
3364
+ /observability/metrics/query:
3132
3365
  post:
3133
3366
  tags: [Observability]
3134
- operationId: validateObservabilityDataSource
3135
- parameters:
3136
- - $ref: "#/components/parameters/DataSourceID"
3367
+ operationId: queryObservabilityMetrics
3368
+ requestBody:
3369
+ required: true
3370
+ content:
3371
+ application/json:
3372
+ schema:
3373
+ $ref: "#/components/schemas/ObservabilityMetricQueryInput"
3374
+ responses:
3375
+ "200":
3376
+ description: Normalized metric series from an authorized configured provider.
3377
+ content:
3378
+ application/json:
3379
+ schema:
3380
+ $ref: "#/components/schemas/ObservabilityMetricQueryEnvelope"
3381
+ "400":
3382
+ $ref: "#/components/responses/Error"
3383
+ "403":
3384
+ $ref: "#/components/responses/Error"
3385
+ "404":
3386
+ $ref: "#/components/responses/Error"
3387
+ "503":
3388
+ $ref: "#/components/responses/Error"
3389
+ /observability/traces/query:
3390
+ post:
3391
+ tags: [Observability]
3392
+ operationId: queryObservabilityTraces
3393
+ requestBody:
3394
+ required: true
3395
+ content:
3396
+ application/json:
3397
+ schema:
3398
+ $ref: "#/components/schemas/ObservabilityTraceQueryInput"
3399
+ responses:
3400
+ "200":
3401
+ description: Normalized trace spans from an authorized configured provider.
3402
+ content:
3403
+ application/json:
3404
+ schema:
3405
+ $ref: "#/components/schemas/ObservabilityTraceQueryEnvelope"
3406
+ "400":
3407
+ $ref: "#/components/responses/Error"
3408
+ "403":
3409
+ $ref: "#/components/responses/Error"
3410
+ "404":
3411
+ $ref: "#/components/responses/Error"
3412
+ "503":
3413
+ $ref: "#/components/responses/Error"
3414
+ /observability/data-sources:
3415
+ get:
3416
+ tags: [Observability]
3417
+ operationId: listObservabilityDataSources
3418
+ responses:
3419
+ "200":
3420
+ description: Permission-filtered log data sources with credentials redacted.
3421
+ content:
3422
+ application/json:
3423
+ schema:
3424
+ $ref: "#/components/schemas/ObservabilityDataSourceListEnvelope"
3425
+ "403":
3426
+ $ref: "#/components/responses/Error"
3427
+ post:
3428
+ tags: [Observability]
3429
+ operationId: createObservabilityDataSource
3430
+ requestBody:
3431
+ required: true
3432
+ content:
3433
+ application/json:
3434
+ schema:
3435
+ $ref: "#/components/schemas/ObservabilityDataSourceInput"
3436
+ responses:
3437
+ "201":
3438
+ description: Log data source created with credentials redacted.
3439
+ content:
3440
+ application/json:
3441
+ schema:
3442
+ $ref: "#/components/schemas/ObservabilityDataSourceEnvelope"
3443
+ "400":
3444
+ $ref: "#/components/responses/Error"
3445
+ "403":
3446
+ $ref: "#/components/responses/Error"
3447
+ /observability/data-sources/{dataSourceID}:
3448
+ put:
3449
+ tags: [Observability]
3450
+ operationId: updateObservabilityDataSource
3451
+ parameters:
3452
+ - $ref: "#/components/parameters/DataSourceID"
3453
+ requestBody:
3454
+ required: true
3455
+ content:
3456
+ application/json:
3457
+ schema:
3458
+ $ref: "#/components/schemas/ObservabilityDataSourceInput"
3459
+ responses:
3460
+ "200":
3461
+ description: Log data source updated with credentials redacted.
3462
+ content:
3463
+ application/json:
3464
+ schema:
3465
+ $ref: "#/components/schemas/ObservabilityDataSourceEnvelope"
3466
+ "400":
3467
+ $ref: "#/components/responses/Error"
3468
+ "403":
3469
+ $ref: "#/components/responses/Error"
3470
+ "404":
3471
+ $ref: "#/components/responses/Error"
3472
+ /observability/data-sources/{dataSourceID}/validate:
3473
+ post:
3474
+ tags: [Observability]
3475
+ operationId: validateObservabilityDataSource
3476
+ parameters:
3477
+ - $ref: "#/components/parameters/DataSourceID"
3137
3478
  responses:
3138
3479
  "200":
3139
3480
  description: Current data-source validation and backend health result.
@@ -6132,6 +6473,166 @@ paths:
6132
6473
  application/json:
6133
6474
  schema:
6134
6475
  $ref: "#/components/schemas/MarketplacePluginEnvelope"
6476
+ /software/packages:
6477
+ get:
6478
+ tags: [Software]
6479
+ operationId: listSoftwarePackages
6480
+ parameters:
6481
+ - name: platform
6482
+ in: query
6483
+ required: false
6484
+ schema:
6485
+ type: string
6486
+ maxLength: 64
6487
+ - name: arch
6488
+ in: query
6489
+ required: false
6490
+ schema:
6491
+ type: string
6492
+ maxLength: 64
6493
+ - name: cursor
6494
+ in: query
6495
+ required: false
6496
+ schema:
6497
+ type: string
6498
+ maxLength: 256
6499
+ - name: limit
6500
+ in: query
6501
+ required: false
6502
+ schema:
6503
+ type: integer
6504
+ minimum: 1
6505
+ maximum: 200
6506
+ responses:
6507
+ "200":
6508
+ description: Software packages visible to the current principal.
6509
+ content:
6510
+ application/json:
6511
+ schema:
6512
+ $ref: "#/components/schemas/SoftwarePackageListEnvelope"
6513
+ "401":
6514
+ $ref: "#/components/responses/Error"
6515
+ "403":
6516
+ $ref: "#/components/responses/Error"
6517
+ post:
6518
+ tags: [Software]
6519
+ operationId: uploadSoftwarePackage
6520
+ requestBody:
6521
+ required: true
6522
+ content:
6523
+ multipart/form-data:
6524
+ schema:
6525
+ $ref: "#/components/schemas/SoftwarePackageUploadRequest"
6526
+ responses:
6527
+ "201":
6528
+ description: Software package uploaded and published.
6529
+ content:
6530
+ application/json:
6531
+ schema:
6532
+ $ref: "#/components/schemas/SoftwarePackageEnvelope"
6533
+ "400":
6534
+ $ref: "#/components/responses/Error"
6535
+ "401":
6536
+ $ref: "#/components/responses/Error"
6537
+ "403":
6538
+ $ref: "#/components/responses/Error"
6539
+ "409":
6540
+ $ref: "#/components/responses/Error"
6541
+ "413":
6542
+ $ref: "#/components/responses/Error"
6543
+ /software/packages/import:
6544
+ post:
6545
+ tags: [Software]
6546
+ operationId: importSoftwarePackage
6547
+ requestBody:
6548
+ required: true
6549
+ content:
6550
+ application/json:
6551
+ schema:
6552
+ $ref: "#/components/schemas/SoftwarePackageURLImportRequest"
6553
+ responses:
6554
+ "201":
6555
+ description: Software package downloaded from the source URL and published.
6556
+ content:
6557
+ application/json:
6558
+ schema:
6559
+ $ref: "#/components/schemas/SoftwarePackageEnvelope"
6560
+ "400":
6561
+ $ref: "#/components/responses/Error"
6562
+ "401":
6563
+ $ref: "#/components/responses/Error"
6564
+ "403":
6565
+ $ref: "#/components/responses/Error"
6566
+ "409":
6567
+ $ref: "#/components/responses/Error"
6568
+ "413":
6569
+ $ref: "#/components/responses/Error"
6570
+ /software/storage:
6571
+ get:
6572
+ tags: [Software]
6573
+ operationId: getSoftwareStorage
6574
+ parameters:
6575
+ - name: cursor
6576
+ in: query
6577
+ required: false
6578
+ schema:
6579
+ type: string
6580
+ maxLength: 256
6581
+ - name: limit
6582
+ in: query
6583
+ required: false
6584
+ schema:
6585
+ type: integer
6586
+ minimum: 1
6587
+ maximum: 200
6588
+ responses:
6589
+ "200":
6590
+ description: Managed software storage summary and object records.
6591
+ content:
6592
+ application/json:
6593
+ schema:
6594
+ $ref: "#/components/schemas/SoftwareStorageEnvelope"
6595
+ "400":
6596
+ $ref: "#/components/responses/Error"
6597
+ "401":
6598
+ $ref: "#/components/responses/Error"
6599
+ "403":
6600
+ $ref: "#/components/responses/Error"
6601
+ /software/packages/{packageID}:
6602
+ delete:
6603
+ tags: [Software]
6604
+ operationId: deleteSoftwarePackage
6605
+ parameters:
6606
+ - $ref: "#/components/parameters/SoftwarePackageID"
6607
+ responses:
6608
+ "204":
6609
+ description: Software package deleted.
6610
+ "401":
6611
+ $ref: "#/components/responses/Error"
6612
+ "403":
6613
+ $ref: "#/components/responses/Error"
6614
+ "404":
6615
+ $ref: "#/components/responses/Error"
6616
+ /software/packages/{packageID}/download:
6617
+ get:
6618
+ tags: [Software]
6619
+ operationId: downloadSoftwarePackage
6620
+ parameters:
6621
+ - $ref: "#/components/parameters/SoftwarePackageID"
6622
+ responses:
6623
+ "200":
6624
+ description: Software package binary.
6625
+ content:
6626
+ application/octet-stream:
6627
+ schema:
6628
+ type: string
6629
+ format: binary
6630
+ "401":
6631
+ $ref: "#/components/responses/Error"
6632
+ "403":
6633
+ $ref: "#/components/responses/Error"
6634
+ "404":
6635
+ $ref: "#/components/responses/Error"
6135
6636
  /plugins/installed:
6136
6637
  get:
6137
6638
  tags: [Plugins]
@@ -7420,31 +7921,117 @@ paths:
7420
7921
  "400": { $ref: "#/components/responses/Error" }
7421
7922
  "401": { $ref: "#/components/responses/Error" }
7422
7923
  "403": { $ref: "#/components/responses/Error" }
7423
- /identity/capabilities:
7924
+ /access/permissions:
7424
7925
  get:
7425
- tags: [Identity]
7426
- operationId: getIdentityRuntimeCapabilities
7926
+ tags: [Access]
7927
+ operationId: getPermissionCatalog
7427
7928
  responses:
7428
7929
  "200":
7429
- description: Identity protocol and runtime capability truth.
7930
+ description: Canonical permission definitions and compatibility metadata.
7430
7931
  content:
7431
7932
  application/json:
7432
- schema: { $ref: "#/components/schemas/IdentityRuntimeCapabilityEnvelope" }
7433
- "403": { $ref: "#/components/responses/IdentityError" }
7434
- /identity/applications:
7933
+ schema: { $ref: "#/components/schemas/PermissionCatalogEnvelope" }
7934
+ "401": { $ref: "#/components/responses/Error" }
7935
+ "403": { $ref: "#/components/responses/Error" }
7936
+ /access/roles:
7435
7937
  get:
7436
- tags: [Identity]
7437
- operationId: listIdentityApplications
7938
+ tags: [Access]
7939
+ operationId: listAccessRoles
7438
7940
  responses:
7439
7941
  "200":
7440
- description: Identity applications.
7942
+ description: Access roles.
7441
7943
  content:
7442
7944
  application/json:
7443
- schema: { $ref: "#/components/schemas/IdentityApplicationListEnvelope" }
7444
- "403": { $ref: "#/components/responses/IdentityError" }
7945
+ schema: { $ref: "#/components/schemas/AccessRoleListEnvelope" }
7946
+ "401": { $ref: "#/components/responses/Error" }
7947
+ "403": { $ref: "#/components/responses/Error" }
7445
7948
  post:
7446
- tags: [Identity]
7447
- operationId: createIdentityApplication
7949
+ tags: [Access]
7950
+ operationId: createAccessRole
7951
+ requestBody:
7952
+ required: true
7953
+ content:
7954
+ application/json:
7955
+ schema: { $ref: "#/components/schemas/AccessRoleInput" }
7956
+ responses:
7957
+ "201":
7958
+ description: Created access role.
7959
+ content:
7960
+ application/json:
7961
+ schema: { $ref: "#/components/schemas/AccessRoleEnvelope" }
7962
+ "400": { $ref: "#/components/responses/Error" }
7963
+ "401": { $ref: "#/components/responses/Error" }
7964
+ "403": { $ref: "#/components/responses/Error" }
7965
+ /access/roles/{accessRoleID}:
7966
+ parameters:
7967
+ - $ref: "#/components/parameters/AccessRoleID"
7968
+ get:
7969
+ tags: [Access]
7970
+ operationId: getAccessRole
7971
+ responses:
7972
+ "200":
7973
+ description: Access role detail.
7974
+ content:
7975
+ application/json:
7976
+ schema: { $ref: "#/components/schemas/AccessRoleEnvelope" }
7977
+ "401": { $ref: "#/components/responses/Error" }
7978
+ "403": { $ref: "#/components/responses/Error" }
7979
+ "404": { $ref: "#/components/responses/Error" }
7980
+ put:
7981
+ tags: [Access]
7982
+ operationId: updateAccessRole
7983
+ requestBody:
7984
+ required: true
7985
+ content:
7986
+ application/json:
7987
+ schema: { $ref: "#/components/schemas/AccessRoleInput" }
7988
+ responses:
7989
+ "200":
7990
+ description: Updated access role.
7991
+ content:
7992
+ application/json:
7993
+ schema: { $ref: "#/components/schemas/AccessRoleEnvelope" }
7994
+ "400": { $ref: "#/components/responses/Error" }
7995
+ "401": { $ref: "#/components/responses/Error" }
7996
+ "403": { $ref: "#/components/responses/Error" }
7997
+ "404": { $ref: "#/components/responses/Error" }
7998
+ delete:
7999
+ tags: [Access]
8000
+ operationId: deleteAccessRole
8001
+ responses:
8002
+ "200":
8003
+ description: Access role deleted.
8004
+ content:
8005
+ application/json:
8006
+ schema: { $ref: "#/components/schemas/AccessRoleDeleteResult" }
8007
+ "401": { $ref: "#/components/responses/Error" }
8008
+ "403": { $ref: "#/components/responses/Error" }
8009
+ "404": { $ref: "#/components/responses/Error" }
8010
+ /identity/capabilities:
8011
+ get:
8012
+ tags: [Identity]
8013
+ operationId: getIdentityRuntimeCapabilities
8014
+ responses:
8015
+ "200":
8016
+ description: Identity protocol and runtime capability truth.
8017
+ content:
8018
+ application/json:
8019
+ schema: { $ref: "#/components/schemas/IdentityRuntimeCapabilityEnvelope" }
8020
+ "403": { $ref: "#/components/responses/IdentityError" }
8021
+ /identity/applications:
8022
+ get:
8023
+ tags: [Identity]
8024
+ operationId: listIdentityApplications
8025
+ responses:
8026
+ "200":
8027
+ description: Identity applications.
8028
+ content:
8029
+ application/json:
8030
+ schema: { $ref: "#/components/schemas/IdentityApplicationListEnvelope" }
8031
+ "403": { $ref: "#/components/responses/IdentityError" }
8032
+ post:
8033
+ tags: [Identity]
8034
+ operationId: createIdentityApplication
7448
8035
  requestBody:
7449
8036
  required: true
7450
8037
  content:
@@ -8214,12 +8801,21 @@ components:
8214
8801
  type: http
8215
8802
  scheme: bearer
8216
8803
  description: Runtime execution runner token.
8804
+ agentBearerAuth:
8805
+ type: http
8806
+ scheme: bearer
8807
+ description: Per-cluster Agent session token provisioned through the installation manifest.
8217
8808
  sohaXAPIKey:
8218
8809
  type: apiKey
8219
8810
  in: header
8220
8811
  name: x-api-key
8221
8812
  description: Anthropic-style Soha PAT/SAT credential header for native relay endpoints.
8222
8813
  parameters:
8814
+ AccessRoleID:
8815
+ name: accessRoleID
8816
+ in: path
8817
+ required: true
8818
+ schema: { type: string, minLength: 1, maxLength: 128 }
8223
8819
  IdentityApplicationID:
8224
8820
  name: identityApplicationID
8225
8821
  in: path
@@ -8329,6 +8925,21 @@ components:
8329
8925
  schema:
8330
8926
  type: string
8331
8927
  minLength: 1
8928
+ ClusterIDQuery:
8929
+ name: clusterId
8930
+ in: query
8931
+ required: true
8932
+ schema:
8933
+ type: string
8934
+ minLength: 1
8935
+ AgentInstallTicket:
8936
+ name: installTicket
8937
+ in: path
8938
+ required: true
8939
+ schema:
8940
+ type: string
8941
+ minLength: 16
8942
+ maxLength: 1024
8332
8943
  DataSourceID:
8333
8944
  name: dataSourceID
8334
8945
  in: path
@@ -8337,6 +8948,22 @@ components:
8337
8948
  type: string
8338
8949
  minLength: 1
8339
8950
  maxLength: 128
8951
+ DashboardID:
8952
+ name: dashboardID
8953
+ in: path
8954
+ required: true
8955
+ schema:
8956
+ type: string
8957
+ minLength: 1
8958
+ maxLength: 128
8959
+ DashboardPanelID:
8960
+ name: panelID
8961
+ in: path
8962
+ required: true
8963
+ schema:
8964
+ type: string
8965
+ minLength: 1
8966
+ maxLength: 128
8340
8967
  ComputeCursor:
8341
8968
  name: cursor
8342
8969
  in: query
@@ -8539,6 +9166,13 @@ components:
8539
9166
  required: true
8540
9167
  schema:
8541
9168
  type: string
9169
+ RegistryConnectionID:
9170
+ name: connectionID
9171
+ in: path
9172
+ required: true
9173
+ schema:
9174
+ type: string
9175
+ minLength: 1
8542
9176
  BundleID:
8543
9177
  name: bundleID
8544
9178
  in: path
@@ -8625,6 +9259,14 @@ components:
8625
9259
  type: string
8626
9260
  minLength: 1
8627
9261
  maxLength: 128
9262
+ SoftwarePackageID:
9263
+ name: packageID
9264
+ in: path
9265
+ required: true
9266
+ schema:
9267
+ type: string
9268
+ minLength: 1
9269
+ maxLength: 128
8628
9270
  AIMemoryID:
8629
9271
  name: memoryID
8630
9272
  in: path
@@ -10425,6 +11067,166 @@ components:
10425
11067
  items:
10426
11068
  $ref: "#/components/schemas/AnyValue"
10427
11069
  additionalProperties: false
11070
+ PermissionRiskLevel:
11071
+ type: string
11072
+ enum: [read, mutate, execute, high]
11073
+ x-enum-varnames: [PermissionRiskLevelRead, PermissionRiskLevelMutate, PermissionRiskLevelExecute, PermissionRiskLevelHigh]
11074
+ PermissionApprovalPolicy:
11075
+ type: string
11076
+ enum: [never, eligible, required]
11077
+ x-enum-varnames: [PermissionApprovalPolicyNever, PermissionApprovalPolicyEligible, PermissionApprovalPolicyRequired]
11078
+ PermissionStatus:
11079
+ type: string
11080
+ enum: [active, legacy]
11081
+ x-enum-varnames: [PermissionStatusActive, PermissionStatusLegacy]
11082
+ PermissionScopeKind:
11083
+ type: string
11084
+ enum: [tenant, workspace, cluster, namespace, project, resource, owner]
11085
+ x-enum-varnames: [PermissionScopeKindTenant, PermissionScopeKindWorkspace, PermissionScopeKindCluster, PermissionScopeKindNamespace, PermissionScopeKindProject, PermissionScopeKindResource, PermissionScopeKindOwner]
11086
+ PermissionDefinition:
11087
+ type: object
11088
+ required: [key, domain, resource, action, displayName, riskLevel, scopeKinds, approvalPolicy, status, assignable]
11089
+ properties:
11090
+ key: { type: string, pattern: "^[a-z][a-z0-9_-]*(?:\\.[a-z][a-z0-9_-]*)+$" }
11091
+ domain: { type: string, pattern: "^[a-z][a-z0-9_-]*$" }
11092
+ resource: { type: string, pattern: "^[a-z][a-z0-9_.-]*$" }
11093
+ action: { type: string, pattern: "^[a-z][a-z0-9_-]*$" }
11094
+ displayName: { type: string, minLength: 1 }
11095
+ riskLevel: { $ref: "#/components/schemas/PermissionRiskLevel" }
11096
+ scopeKinds:
11097
+ type: array
11098
+ minItems: 1
11099
+ uniqueItems: true
11100
+ items: { $ref: "#/components/schemas/PermissionScopeKind" }
11101
+ approvalPolicy: { $ref: "#/components/schemas/PermissionApprovalPolicy" }
11102
+ status: { $ref: "#/components/schemas/PermissionStatus" }
11103
+ assignable: { type: boolean }
11104
+ legacyAliases: { type: array, uniqueItems: true, items: { type: string, minLength: 1 } }
11105
+ legacyCapabilities:
11106
+ type: array
11107
+ uniqueItems: true
11108
+ description: Migration-only role-global action aliases accepted by this exact permission.
11109
+ items: { type: string, pattern: "^[a-z][a-z0-9_-]*$" }
11110
+ replacedBy: { type: array, uniqueItems: true, items: { type: string, minLength: 1 } }
11111
+ additionalProperties: false
11112
+ PermissionCatalog:
11113
+ type: object
11114
+ required: [schemaVersion, catalogVersion, contentHash, permissions]
11115
+ properties:
11116
+ schemaVersion: { type: string, const: authorization.opensoha.io/v1 }
11117
+ catalogVersion: { type: string, pattern: "^[0-9]+\\.[0-9]+\\.[0-9]+$" }
11118
+ contentHash: { type: string, pattern: "^sha256:[a-f0-9]{64}$" }
11119
+ permissions:
11120
+ type: array
11121
+ minItems: 1
11122
+ items: { $ref: "#/components/schemas/PermissionDefinition" }
11123
+ additionalProperties: false
11124
+ PermissionCatalogEnvelope:
11125
+ type: object
11126
+ required: [data]
11127
+ properties:
11128
+ data: { $ref: "#/components/schemas/PermissionCatalog" }
11129
+ additionalProperties: false
11130
+ AccessRole:
11131
+ type: object
11132
+ required: [id, name, scope, capabilities, permissionKeys, userCount]
11133
+ properties:
11134
+ id: { type: string, minLength: 1 }
11135
+ name: { type: string, minLength: 1 }
11136
+ scope: { type: string, minLength: 1 }
11137
+ capabilities:
11138
+ type: array
11139
+ uniqueItems: true
11140
+ deprecated: true
11141
+ description: Legacy role-global action aliases retained only for migration.
11142
+ items: { type: string, minLength: 1 }
11143
+ permissionKeys:
11144
+ type: array
11145
+ uniqueItems: true
11146
+ items: { type: string, minLength: 1 }
11147
+ userCount: { type: integer, minimum: 0 }
11148
+ additionalProperties: false
11149
+ AccessRoleInput:
11150
+ type: object
11151
+ required: [name, scope, permissionKeys]
11152
+ properties:
11153
+ id: { type: string, minLength: 1 }
11154
+ name: { type: string, minLength: 1 }
11155
+ scope: { type: string, minLength: 1 }
11156
+ capabilities:
11157
+ type: array
11158
+ uniqueItems: true
11159
+ deprecated: true
11160
+ description: Legacy role-global action aliases; new role editors must send an empty array.
11161
+ items: { type: string, minLength: 1 }
11162
+ permissionKeys:
11163
+ type: array
11164
+ uniqueItems: true
11165
+ items: { type: string, minLength: 1 }
11166
+ additionalProperties: false
11167
+ AccessRoleEnvelope:
11168
+ type: object
11169
+ required: [data]
11170
+ properties:
11171
+ data: { $ref: "#/components/schemas/AccessRole" }
11172
+ additionalProperties: false
11173
+ AccessRoleListEnvelope:
11174
+ type: object
11175
+ required: [items]
11176
+ properties:
11177
+ items: { type: array, items: { $ref: "#/components/schemas/AccessRole" } }
11178
+ additionalProperties: false
11179
+ AccessRoleDeleteResult:
11180
+ type: object
11181
+ required: [status]
11182
+ properties:
11183
+ status: { type: string, const: ok }
11184
+ additionalProperties: false
11185
+ AuthorizationDecisionStatus:
11186
+ type: string
11187
+ enum: [allow, deny, approval_required]
11188
+ x-enum-varnames: [AuthorizationDecisionStatusAllow, AuthorizationDecisionStatusDeny, AuthorizationDecisionStatusApprovalRequired]
11189
+ AuthorizationResource:
11190
+ type: object
11191
+ required: [type]
11192
+ properties:
11193
+ type: { type: string, minLength: 1 }
11194
+ id: { type: string }
11195
+ tenantId: { type: string }
11196
+ workspaceId: { type: string }
11197
+ clusterId: { type: string }
11198
+ namespace: { type: string }
11199
+ projectId: { type: string }
11200
+ owner: { type: string }
11201
+ labels: { type: object, additionalProperties: { type: string } }
11202
+ additionalProperties: false
11203
+ AuthorizationEffectiveScope:
11204
+ type: object
11205
+ properties:
11206
+ tenantIds: { type: array, uniqueItems: true, items: { type: string } }
11207
+ workspaceIds: { type: array, uniqueItems: true, items: { type: string } }
11208
+ clusterIds: { type: array, uniqueItems: true, items: { type: string } }
11209
+ namespaces: { type: array, uniqueItems: true, items: { type: string } }
11210
+ projectIds: { type: array, uniqueItems: true, items: { type: string } }
11211
+ resourceKinds: { type: array, uniqueItems: true, items: { type: string } }
11212
+ labelSelector: { type: string }
11213
+ additionalProperties: false
11214
+ AuthorizationDecision:
11215
+ type: object
11216
+ required: [status, permissionKey, action, resource, reasonCode, policyVersion]
11217
+ properties:
11218
+ status: { $ref: "#/components/schemas/AuthorizationDecisionStatus" }
11219
+ permissionKey: { type: string, minLength: 1 }
11220
+ action: { type: string, minLength: 1 }
11221
+ resource: { $ref: "#/components/schemas/AuthorizationResource" }
11222
+ effectiveScope: { $ref: "#/components/schemas/AuthorizationEffectiveScope" }
11223
+ reasonCode: { type: string, minLength: 1 }
11224
+ policyVersion: { type: string, minLength: 1 }
11225
+ allowedActions:
11226
+ type: array
11227
+ uniqueItems: true
11228
+ items: { type: string, minLength: 1 }
11229
+ additionalProperties: false
10428
11230
  ComputeDomain:
10429
11231
  type: string
10430
11232
  enum: [virtualization, container_runtime, agent]
@@ -13836,7 +14638,7 @@ components:
13836
14638
  additionalProperties: false
13837
14639
  ApplicationInput:
13838
14640
  type: object
13839
- required: [name, key, group, language, enabled]
14641
+ required: [name, key, enabled]
13840
14642
  properties:
13841
14643
  id:
13842
14644
  type: string
@@ -14196,6 +14998,87 @@ components:
14196
14998
  enabled:
14197
14999
  type: boolean
14198
15000
  additionalProperties: false
15001
+ RegistryConnectionMetadata:
15002
+ type: object
15003
+ required: [secretConfigured, secretStorage]
15004
+ properties:
15005
+ secretConfigured:
15006
+ type: boolean
15007
+ secretStorage:
15008
+ type: string
15009
+ additionalProperties: false
15010
+ RegistryConnection:
15011
+ type: object
15012
+ required: [id, name, registryType, endpoint, insecure, metadata, createdAt, updatedAt]
15013
+ properties:
15014
+ id:
15015
+ type: string
15016
+ minLength: 1
15017
+ name:
15018
+ type: string
15019
+ minLength: 1
15020
+ registryType:
15021
+ type: string
15022
+ minLength: 1
15023
+ endpoint:
15024
+ type: string
15025
+ minLength: 1
15026
+ namespace:
15027
+ type: string
15028
+ username:
15029
+ type: string
15030
+ insecure:
15031
+ type: boolean
15032
+ metadata:
15033
+ $ref: "#/components/schemas/RegistryConnectionMetadata"
15034
+ createdAt:
15035
+ type: string
15036
+ format: date-time
15037
+ updatedAt:
15038
+ type: string
15039
+ format: date-time
15040
+ additionalProperties: false
15041
+ RegistryConnectionInput:
15042
+ type: object
15043
+ required: [name, registryType, endpoint]
15044
+ properties:
15045
+ id:
15046
+ type: string
15047
+ name:
15048
+ type: string
15049
+ minLength: 1
15050
+ registryType:
15051
+ type: string
15052
+ minLength: 1
15053
+ endpoint:
15054
+ type: string
15055
+ minLength: 1
15056
+ namespace:
15057
+ type: string
15058
+ username:
15059
+ type: string
15060
+ secret:
15061
+ type: string
15062
+ writeOnly: true
15063
+ insecure:
15064
+ type: boolean
15065
+ additionalProperties: false
15066
+ RegistryConnectionEnvelope:
15067
+ type: object
15068
+ required: [data]
15069
+ properties:
15070
+ data:
15071
+ $ref: "#/components/schemas/RegistryConnection"
15072
+ additionalProperties: false
15073
+ RegistryConnectionListEnvelope:
15074
+ type: object
15075
+ required: [items]
15076
+ properties:
15077
+ items:
15078
+ type: array
15079
+ items:
15080
+ $ref: "#/components/schemas/RegistryConnection"
15081
+ additionalProperties: false
14199
15082
  WorkflowTemplate:
14200
15083
  type: object
14201
15084
  required: [id, key, name, enabled, createdAt, updatedAt]
@@ -14297,22 +15180,298 @@ components:
14297
15180
  type: string
14298
15181
  strategyProfileId:
14299
15182
  type: string
14300
- promotionPolicyId:
15183
+ promotionPolicyId:
15184
+ type: string
15185
+ artifactPolicyId:
15186
+ type: string
15187
+ workflowTemplateId:
15188
+ type: string
15189
+ buildPolicy:
15190
+ $ref: "#/components/schemas/BuildPolicy"
15191
+ releasePolicy:
15192
+ $ref: "#/components/schemas/ReleasePolicy"
15193
+ resourceSelector:
15194
+ $ref: "#/components/schemas/ResourceSelector"
15195
+ targets:
15196
+ type: array
15197
+ items:
15198
+ $ref: "#/components/schemas/ReleaseTargetInput"
15199
+ additionalProperties: false
15200
+ KubernetesRelatedResource:
15201
+ type: object
15202
+ required: [kind, name]
15203
+ properties:
15204
+ kind:
15205
+ type: string
15206
+ enum: [Service, Ingress, HorizontalPodAutoscaler]
15207
+ name:
15208
+ type: string
15209
+ minLength: 1
15210
+ additionalProperties: false
15211
+ KubernetesImportCandidate:
15212
+ type: object
15213
+ required: [clusterId, namespace, workloadKind, workloadName, desiredReplicas, readyReplicas, relatedResources]
15214
+ properties:
15215
+ clusterId:
15216
+ type: string
15217
+ minLength: 1
15218
+ namespace:
15219
+ type: string
15220
+ minLength: 1
15221
+ workloadKind:
15222
+ type: string
15223
+ enum: [Deployment, StatefulSet, DaemonSet]
15224
+ workloadName:
15225
+ type: string
15226
+ minLength: 1
15227
+ desiredReplicas:
15228
+ type: integer
15229
+ minimum: 0
15230
+ readyReplicas:
15231
+ type: integer
15232
+ minimum: 0
15233
+ containers:
15234
+ type: array
15235
+ uniqueItems: true
15236
+ items:
15237
+ type: string
15238
+ labels:
15239
+ type: object
15240
+ additionalProperties:
15241
+ type: string
15242
+ relatedResources:
15243
+ type: array
15244
+ items:
15245
+ $ref: "#/components/schemas/KubernetesRelatedResource"
15246
+ additionalProperties: false
15247
+ KubernetesImportCandidateListEnvelope:
15248
+ type: object
15249
+ required: [items, truncated]
15250
+ properties:
15251
+ items:
15252
+ type: array
15253
+ items:
15254
+ $ref: "#/components/schemas/KubernetesImportCandidate"
15255
+ truncated:
15256
+ type: boolean
15257
+ additionalProperties: false
15258
+ KubernetesWorkloadImportInput:
15259
+ type: object
15260
+ required: [workloadKind, workloadName]
15261
+ properties:
15262
+ workloadKind:
15263
+ type: string
15264
+ enum: [Deployment, StatefulSet, DaemonSet]
15265
+ workloadName:
15266
+ type: string
15267
+ minLength: 1
15268
+ additionalProperties: false
15269
+ KubernetesServiceImportRequest:
15270
+ type: object
15271
+ required: [clusterId, namespace, applicationKey, applicationName, environmentKey, environmentName, ownershipMode, workloads]
15272
+ properties:
15273
+ clusterId:
15274
+ type: string
15275
+ minLength: 1
15276
+ namespace:
15277
+ type: string
15278
+ minLength: 1
15279
+ applicationKey:
15280
+ type: string
15281
+ minLength: 1
15282
+ applicationName:
15283
+ type: string
15284
+ minLength: 1
15285
+ environmentKey:
15286
+ type: string
15287
+ minLength: 1
15288
+ environmentName:
15289
+ type: string
15290
+ minLength: 1
15291
+ ownershipMode:
15292
+ type: string
15293
+ enum: [observe_only, managed]
15294
+ workloads:
15295
+ type: array
15296
+ minItems: 1
15297
+ maxItems: 100
15298
+ uniqueItems: true
15299
+ items:
15300
+ $ref: "#/components/schemas/KubernetesWorkloadImportInput"
15301
+ additionalProperties: false
15302
+ KubernetesImportEntityRef:
15303
+ type: object
15304
+ required: [id, key, name, created]
15305
+ properties:
15306
+ id:
15307
+ type: string
15308
+ key:
15309
+ type: string
15310
+ name:
15311
+ type: string
15312
+ created:
15313
+ type: boolean
15314
+ additionalProperties: false
15315
+ KubernetesImportedService:
15316
+ type: object
15317
+ required: [id, key, name, workloadKind, workloadName, created]
15318
+ properties:
15319
+ id:
15320
+ type: string
15321
+ key:
15322
+ type: string
15323
+ name:
15324
+ type: string
15325
+ workloadKind:
15326
+ type: string
15327
+ enum: [Deployment, StatefulSet, DaemonSet]
15328
+ workloadName:
15329
+ type: string
15330
+ created:
15331
+ type: boolean
15332
+ additionalProperties: false
15333
+ KubernetesImportedTarget:
15334
+ type: object
15335
+ required: [id, workloadKind, workloadName, created]
15336
+ properties:
15337
+ id:
15338
+ type: string
15339
+ workloadKind:
15340
+ type: string
15341
+ enum: [Deployment, StatefulSet, DaemonSet]
15342
+ workloadName:
15343
+ type: string
15344
+ created:
15345
+ type: boolean
15346
+ additionalProperties: false
15347
+ KubernetesServiceImportResult:
15348
+ type: object
15349
+ required: [application, environment, applicationEnvironmentId, applicationEnvironmentCreated, ownershipMode, services, targets]
15350
+ properties:
15351
+ application:
15352
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15353
+ environment:
15354
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15355
+ applicationEnvironmentId:
15356
+ type: string
15357
+ applicationEnvironmentCreated:
15358
+ type: boolean
15359
+ ownershipMode:
15360
+ type: string
15361
+ enum: [observe_only, managed]
15362
+ services:
15363
+ type: array
15364
+ items:
15365
+ $ref: "#/components/schemas/KubernetesImportedService"
15366
+ targets:
15367
+ type: array
15368
+ items:
15369
+ $ref: "#/components/schemas/KubernetesImportedTarget"
15370
+ additionalProperties: false
15371
+ KubernetesServiceImportResultEnvelope:
15372
+ type: object
15373
+ required: [data]
15374
+ properties:
15375
+ data:
15376
+ $ref: "#/components/schemas/KubernetesServiceImportResult"
15377
+ additionalProperties: false
15378
+ HelmReleaseImportInput:
15379
+ type: object
15380
+ required: [releaseName]
15381
+ properties:
15382
+ releaseName:
15383
+ type: string
15384
+ minLength: 1
15385
+ additionalProperties: false
15386
+ HelmReleaseImportRequest:
15387
+ type: object
15388
+ required: [clusterId, namespace, applicationKey, applicationName, environmentKey, environmentName, ownershipMode, releases]
15389
+ properties:
15390
+ clusterId:
15391
+ type: string
15392
+ minLength: 1
15393
+ namespace:
15394
+ type: string
15395
+ minLength: 1
15396
+ applicationKey:
15397
+ type: string
15398
+ minLength: 1
15399
+ applicationName:
15400
+ type: string
15401
+ minLength: 1
15402
+ environmentKey:
15403
+ type: string
15404
+ minLength: 1
15405
+ environmentName:
15406
+ type: string
15407
+ minLength: 1
15408
+ ownershipMode:
15409
+ type: string
15410
+ enum: [observe_only, managed]
15411
+ releases:
15412
+ type: array
15413
+ minItems: 1
15414
+ maxItems: 100
15415
+ uniqueItems: true
15416
+ items:
15417
+ $ref: "#/components/schemas/HelmReleaseImportInput"
15418
+ additionalProperties: false
15419
+ HelmImportedService:
15420
+ type: object
15421
+ required: [id, key, name, releaseName, created]
15422
+ properties:
15423
+ id:
15424
+ type: string
15425
+ key:
15426
+ type: string
15427
+ name:
15428
+ type: string
15429
+ releaseName:
15430
+ type: string
15431
+ created:
15432
+ type: boolean
15433
+ additionalProperties: false
15434
+ HelmImportedTarget:
15435
+ type: object
15436
+ required: [id, releaseName, created]
15437
+ properties:
15438
+ id:
15439
+ type: string
15440
+ releaseName:
14301
15441
  type: string
14302
- artifactPolicyId:
15442
+ created:
15443
+ type: boolean
15444
+ additionalProperties: false
15445
+ HelmReleaseImportResult:
15446
+ type: object
15447
+ required: [application, environment, applicationEnvironmentId, applicationEnvironmentCreated, ownershipMode, services, targets]
15448
+ properties:
15449
+ application:
15450
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15451
+ environment:
15452
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15453
+ applicationEnvironmentId:
14303
15454
  type: string
14304
- workflowTemplateId:
15455
+ applicationEnvironmentCreated:
15456
+ type: boolean
15457
+ ownershipMode:
14305
15458
  type: string
14306
- buildPolicy:
14307
- $ref: "#/components/schemas/BuildPolicy"
14308
- releasePolicy:
14309
- $ref: "#/components/schemas/ReleasePolicy"
14310
- resourceSelector:
14311
- $ref: "#/components/schemas/ResourceSelector"
15459
+ enum: [observe_only, managed]
15460
+ services:
15461
+ type: array
15462
+ items:
15463
+ $ref: "#/components/schemas/HelmImportedService"
14312
15464
  targets:
14313
15465
  type: array
14314
15466
  items:
14315
- $ref: "#/components/schemas/ReleaseTargetInput"
15467
+ $ref: "#/components/schemas/HelmImportedTarget"
15468
+ additionalProperties: false
15469
+ HelmReleaseImportResultEnvelope:
15470
+ type: object
15471
+ required: [data]
15472
+ properties:
15473
+ data:
15474
+ $ref: "#/components/schemas/HelmReleaseImportResult"
14316
15475
  additionalProperties: false
14317
15476
  BuildTemplate:
14318
15477
  type: object
@@ -14820,6 +15979,10 @@ components:
14820
15979
  type: string
14821
15980
  containerName:
14822
15981
  type: string
15982
+ valuesContent:
15983
+ type: string
15984
+ maxLength: 1048576
15985
+ description: Complete Helm values YAML used when the selected target is a managed Helm release.
14823
15986
  variables:
14824
15987
  type: object
14825
15988
  additionalProperties: true
@@ -16796,120 +17959,369 @@ components:
16796
17959
  notes:
16797
17960
  type: array
16798
17961
  items:
16799
- type: string
17962
+ type: string
17963
+ additionalProperties: false
17964
+ ClusterCapabilityMatrixEntry:
17965
+ type: object
17966
+ required: [key, label, category, riskLevel, requiresApproval, direct, agent]
17967
+ properties:
17968
+ key:
17969
+ type: string
17970
+ label:
17971
+ type: string
17972
+ category:
17973
+ type: string
17974
+ requiredScopes:
17975
+ type: array
17976
+ items:
17977
+ type: string
17978
+ riskLevel:
17979
+ $ref: "#/components/schemas/RiskLevel"
17980
+ requiresApproval:
17981
+ type: boolean
17982
+ docsUrl:
17983
+ type: string
17984
+ direct:
17985
+ $ref: "#/components/schemas/ClusterCapabilityModeSupport"
17986
+ agent:
17987
+ $ref: "#/components/schemas/ClusterCapabilityModeSupport"
17988
+ additionalProperties: false
17989
+ ClusterCapabilityMatrixEnvelope:
17990
+ type: object
17991
+ required: [items]
17992
+ properties:
17993
+ items:
17994
+ type: array
17995
+ items:
17996
+ $ref: "#/components/schemas/ClusterCapabilityMatrixEntry"
17997
+ additionalProperties: false
17998
+ AgentInstallation:
17999
+ type: object
18000
+ required: [clusterId, manifestUrl, command, expiresAt]
18001
+ properties:
18002
+ clusterId:
18003
+ type: string
18004
+ minLength: 1
18005
+ manifestUrl:
18006
+ type: string
18007
+ format: uri
18008
+ command:
18009
+ type: string
18010
+ minLength: 1
18011
+ expiresAt:
18012
+ type: string
18013
+ format: date-time
18014
+ additionalProperties: false
18015
+ AgentInstallationEnvelope:
18016
+ type: object
18017
+ required: [data]
18018
+ properties:
18019
+ data:
18020
+ $ref: "#/components/schemas/AgentInstallation"
18021
+ additionalProperties: false
18022
+ ObservabilityProviderSignal:
18023
+ type: string
18024
+ enum: [logs, metrics, traces, profiles]
18025
+ x-enum-varnames:
18026
+ - ObservabilityProviderSignalLogs
18027
+ - ObservabilityProviderSignalMetrics
18028
+ - ObservabilityProviderSignalTraces
18029
+ - ObservabilityProviderSignalProfiles
18030
+ ObservabilityProviderRuntimeMode:
18031
+ type: string
18032
+ enum: [builtin, external-http, managed-container]
18033
+ x-enum-varnames:
18034
+ - ObservabilityProviderRuntimeModeBuiltin
18035
+ - ObservabilityProviderRuntimeModeExternalHTTP
18036
+ - ObservabilityProviderRuntimeModeManagedContainer
18037
+ ObservabilityProviderStatus:
18038
+ type: string
18039
+ enum: [supported, degraded, unsupported]
18040
+ x-enum-varnames:
18041
+ - ObservabilityProviderStatusSupported
18042
+ - ObservabilityProviderStatusDegraded
18043
+ - ObservabilityProviderStatusUnsupported
18044
+ ObservabilityProviderDefinition:
18045
+ type: object
18046
+ required: [providerKey, displayName, protocolVersion, signals, capabilities, runtimeMode, builtIn, status]
18047
+ properties:
18048
+ providerKey:
18049
+ type: string
18050
+ pattern: "^[a-z][a-z0-9._-]*$"
18051
+ maxLength: 128
18052
+ description: Required when backendType is provider.
18053
+ displayName:
18054
+ type: string
18055
+ minLength: 1
18056
+ maxLength: 200
18057
+ description:
18058
+ type: string
18059
+ maxLength: 1000
18060
+ protocolVersion:
18061
+ type: string
18062
+ pattern: "^v[1-9][0-9]*$"
18063
+ signals:
18064
+ type: array
18065
+ minItems: 1
18066
+ uniqueItems: true
18067
+ items:
18068
+ $ref: "#/components/schemas/ObservabilityProviderSignal"
18069
+ capabilities:
18070
+ type: array
18071
+ minItems: 1
18072
+ uniqueItems: true
18073
+ items:
18074
+ type: string
18075
+ pattern: "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$"
18076
+ runtimeMode:
18077
+ $ref: "#/components/schemas/ObservabilityProviderRuntimeMode"
18078
+ builtIn:
18079
+ type: boolean
18080
+ status:
18081
+ $ref: "#/components/schemas/ObservabilityProviderStatus"
18082
+ statusReason:
18083
+ type: string
18084
+ maxLength: 500
18085
+ pluginId:
18086
+ type: string
18087
+ maxLength: 200
18088
+ configSchemaRef:
18089
+ type: string
18090
+ maxLength: 512
18091
+ additionalProperties: false
18092
+ ObservabilityProviderListEnvelope:
18093
+ type: object
18094
+ required: [items]
18095
+ properties:
18096
+ items:
18097
+ type: array
18098
+ items:
18099
+ $ref: "#/components/schemas/ObservabilityProviderDefinition"
18100
+ additionalProperties: false
18101
+ ObservabilityDashboardSource:
18102
+ type: string
18103
+ enum: [grafana]
18104
+ x-enum-varnames:
18105
+ - ObservabilityDashboardSourceGrafana
18106
+ ObservabilityDashboardPanelType:
18107
+ type: string
18108
+ enum: [timeseries, stat, text, row]
18109
+ x-enum-varnames:
18110
+ - ObservabilityDashboardPanelTypeTimeseries
18111
+ - ObservabilityDashboardPanelTypeStat
18112
+ - ObservabilityDashboardPanelTypeText
18113
+ - ObservabilityDashboardPanelTypeRow
18114
+ ObservabilityDashboardPanelLayout:
18115
+ type: object
18116
+ required: [x, y, w, h]
18117
+ properties:
18118
+ x:
18119
+ type: integer
18120
+ minimum: 0
18121
+ maximum: 23
18122
+ y:
18123
+ type: integer
18124
+ minimum: 0
18125
+ w:
18126
+ type: integer
18127
+ minimum: 1
18128
+ maximum: 24
18129
+ h:
18130
+ type: integer
18131
+ minimum: 1
18132
+ maximum: 100
18133
+ additionalProperties: false
18134
+ ObservabilityDashboardTarget:
18135
+ type: object
18136
+ required: [refId, expression]
18137
+ properties:
18138
+ refId:
18139
+ type: string
18140
+ minLength: 1
18141
+ maxLength: 16
18142
+ expression:
18143
+ type: string
18144
+ minLength: 1
18145
+ maxLength: 8192
18146
+ legend:
18147
+ type: string
18148
+ maxLength: 256
18149
+ additionalProperties: false
18150
+ ObservabilityDashboardPanel:
18151
+ type: object
18152
+ required: [id, title, type, layout, targets, queryable]
18153
+ properties:
18154
+ id:
18155
+ type: string
18156
+ minLength: 1
18157
+ maxLength: 128
18158
+ title:
18159
+ type: string
18160
+ minLength: 1
18161
+ maxLength: 200
18162
+ type:
18163
+ $ref: "#/components/schemas/ObservabilityDashboardPanelType"
18164
+ layout:
18165
+ $ref: "#/components/schemas/ObservabilityDashboardPanelLayout"
18166
+ targets:
18167
+ type: array
18168
+ maxItems: 8
18169
+ items:
18170
+ $ref: "#/components/schemas/ObservabilityDashboardTarget"
18171
+ queryable:
18172
+ type: boolean
18173
+ markdown:
18174
+ type: string
18175
+ maxLength: 32768
18176
+ additionalProperties: false
18177
+ ObservabilityDashboard:
18178
+ type: object
18179
+ required: [id, name, source, tags, panels, createdAt, updatedAt]
18180
+ properties:
18181
+ id:
18182
+ type: string
18183
+ minLength: 1
18184
+ maxLength: 128
18185
+ name:
18186
+ type: string
18187
+ minLength: 1
18188
+ maxLength: 200
18189
+ source:
18190
+ $ref: "#/components/schemas/ObservabilityDashboardSource"
18191
+ sourceSchemaVersion:
18192
+ type: integer
18193
+ minimum: 0
18194
+ dataSourceId:
18195
+ type: string
18196
+ maxLength: 200
18197
+ tags:
18198
+ type: array
18199
+ maxItems: 50
18200
+ uniqueItems: true
18201
+ items:
18202
+ type: string
18203
+ minLength: 1
18204
+ maxLength: 100
18205
+ panels:
18206
+ type: array
18207
+ maxItems: 200
18208
+ items:
18209
+ $ref: "#/components/schemas/ObservabilityDashboardPanel"
18210
+ createdAt:
18211
+ type: string
18212
+ format: date-time
18213
+ updatedAt:
18214
+ type: string
18215
+ format: date-time
18216
+ additionalProperties: false
18217
+ ObservabilityDashboardEnvelope:
18218
+ type: object
18219
+ required: [data]
18220
+ properties:
18221
+ data:
18222
+ $ref: "#/components/schemas/ObservabilityDashboard"
18223
+ additionalProperties: false
18224
+ ObservabilityDashboardListEnvelope:
18225
+ type: object
18226
+ required: [items]
18227
+ properties:
18228
+ items:
18229
+ type: array
18230
+ items:
18231
+ $ref: "#/components/schemas/ObservabilityDashboard"
16800
18232
  additionalProperties: false
16801
- ClusterCapabilityMatrixEntry:
18233
+ ObservabilityGrafanaDashboardImportInput:
16802
18234
  type: object
16803
- required: [key, label, category, riskLevel, requiresApproval, direct, agent]
18235
+ required: [json, dataSourceId]
16804
18236
  properties:
16805
- key:
18237
+ json:
16806
18238
  type: string
16807
- label:
18239
+ minLength: 2
18240
+ maxLength: 2097152
18241
+ description: Grafana Classic dashboard JSON or a V1 resource whose spec contains the Classic dashboard model.
18242
+ dataSourceId:
16808
18243
  type: string
16809
- category:
18244
+ minLength: 1
18245
+ maxLength: 200
18246
+ description: Enabled Soha Prometheus data source used by every imported queryable panel.
18247
+ additionalProperties: false
18248
+ ObservabilityMetricDataSource:
18249
+ type: object
18250
+ required: [id, name]
18251
+ properties:
18252
+ id:
16810
18253
  type: string
16811
- requiredScopes:
16812
- type: array
16813
- items:
16814
- type: string
16815
- riskLevel:
16816
- $ref: "#/components/schemas/RiskLevel"
16817
- requiresApproval:
16818
- type: boolean
16819
- docsUrl:
18254
+ minLength: 1
18255
+ maxLength: 200
18256
+ name:
16820
18257
  type: string
16821
- direct:
16822
- $ref: "#/components/schemas/ClusterCapabilityModeSupport"
16823
- agent:
16824
- $ref: "#/components/schemas/ClusterCapabilityModeSupport"
18258
+ minLength: 1
18259
+ maxLength: 200
16825
18260
  additionalProperties: false
16826
- ClusterCapabilityMatrixEnvelope:
18261
+ ObservabilityMetricDataSourceListEnvelope:
16827
18262
  type: object
16828
18263
  required: [items]
16829
18264
  properties:
16830
18265
  items:
16831
18266
  type: array
16832
18267
  items:
16833
- $ref: "#/components/schemas/ClusterCapabilityMatrixEntry"
18268
+ $ref: "#/components/schemas/ObservabilityMetricDataSource"
16834
18269
  additionalProperties: false
16835
- ObservabilityProviderSignal:
16836
- type: string
16837
- enum: [logs, metrics, traces, profiles]
16838
- x-enum-varnames:
16839
- - ObservabilityProviderSignalLogs
16840
- - ObservabilityProviderSignalMetrics
16841
- - ObservabilityProviderSignalTraces
16842
- - ObservabilityProviderSignalProfiles
16843
- ObservabilityProviderRuntimeMode:
16844
- type: string
16845
- enum: [builtin, external-http, managed-container]
16846
- x-enum-varnames:
16847
- - ObservabilityProviderRuntimeModeBuiltin
16848
- - ObservabilityProviderRuntimeModeExternalHTTP
16849
- - ObservabilityProviderRuntimeModeManagedContainer
16850
- ObservabilityProviderStatus:
16851
- type: string
16852
- enum: [supported, degraded, unsupported]
16853
- x-enum-varnames:
16854
- - ObservabilityProviderStatusSupported
16855
- - ObservabilityProviderStatusDegraded
16856
- - ObservabilityProviderStatusUnsupported
16857
- ObservabilityProviderDefinition:
18270
+ ObservabilityDashboardImportWarning:
16858
18271
  type: object
16859
- required: [providerKey, displayName, protocolVersion, signals, capabilities, runtimeMode, builtIn, status]
18272
+ required: [code, message]
16860
18273
  properties:
16861
- providerKey:
18274
+ code:
16862
18275
  type: string
16863
- pattern: "^[a-z][a-z0-9._-]*$"
16864
- maxLength: 128
16865
- description: Required when backendType is provider.
16866
- displayName:
18276
+ enum: [unsupported_panel_type, skipped_target, unsupported_variable, datasource_rebound, unsupported_feature]
18277
+ message:
16867
18278
  type: string
16868
18279
  minLength: 1
16869
- maxLength: 200
16870
- description:
16871
- type: string
16872
- maxLength: 1000
16873
- protocolVersion:
16874
- type: string
16875
- pattern: "^v[1-9][0-9]*$"
16876
- signals:
16877
- type: array
16878
- minItems: 1
16879
- uniqueItems: true
16880
- items:
16881
- $ref: "#/components/schemas/ObservabilityProviderSignal"
16882
- capabilities:
16883
- type: array
16884
- minItems: 1
16885
- uniqueItems: true
16886
- items:
16887
- type: string
16888
- pattern: "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$"
16889
- runtimeMode:
16890
- $ref: "#/components/schemas/ObservabilityProviderRuntimeMode"
16891
- builtIn:
16892
- type: boolean
16893
- status:
16894
- $ref: "#/components/schemas/ObservabilityProviderStatus"
16895
- statusReason:
16896
- type: string
16897
18280
  maxLength: 500
16898
- pluginId:
18281
+ panelId:
16899
18282
  type: string
16900
- maxLength: 200
16901
- configSchemaRef:
16902
- type: string
16903
- maxLength: 512
18283
+ maxLength: 128
16904
18284
  additionalProperties: false
16905
- ObservabilityProviderListEnvelope:
18285
+ ObservabilityDashboardImportResult:
16906
18286
  type: object
16907
- required: [items]
18287
+ required: [dashboard, warnings, importedPanelCount, skippedPanelCount]
16908
18288
  properties:
16909
- items:
18289
+ dashboard:
18290
+ $ref: "#/components/schemas/ObservabilityDashboard"
18291
+ warnings:
16910
18292
  type: array
18293
+ maxItems: 500
16911
18294
  items:
16912
- $ref: "#/components/schemas/ObservabilityProviderDefinition"
18295
+ $ref: "#/components/schemas/ObservabilityDashboardImportWarning"
18296
+ importedPanelCount:
18297
+ type: integer
18298
+ minimum: 1
18299
+ skippedPanelCount:
18300
+ type: integer
18301
+ minimum: 0
18302
+ additionalProperties: false
18303
+ ObservabilityDashboardImportResultEnvelope:
18304
+ type: object
18305
+ required: [data]
18306
+ properties:
18307
+ data:
18308
+ $ref: "#/components/schemas/ObservabilityDashboardImportResult"
18309
+ additionalProperties: false
18310
+ ObservabilityDashboardPanelQueryInput:
18311
+ type: object
18312
+ required: [timeFrom, timeTo]
18313
+ properties:
18314
+ timeFrom:
18315
+ type: string
18316
+ format: date-time
18317
+ timeTo:
18318
+ type: string
18319
+ format: date-time
18320
+ stepSeconds:
18321
+ type: integer
18322
+ minimum: 1
18323
+ maximum: 3600
18324
+ default: 60
16913
18325
  additionalProperties: false
16914
18326
  ObservabilityQueryScope:
16915
18327
  type: object
@@ -20515,6 +21927,188 @@ components:
20515
21927
  installed:
20516
21928
  type: boolean
20517
21929
  additionalProperties: false
21930
+ SoftwarePackage:
21931
+ type: object
21932
+ required:
21933
+ [id, softwareId, name, publisher, version, platform, arch, fileName, sizeBytes, sha256, downloadPath, createdAt, updatedAt]
21934
+ properties:
21935
+ id:
21936
+ type: string
21937
+ minLength: 1
21938
+ maxLength: 128
21939
+ softwareId:
21940
+ type: string
21941
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
21942
+ name:
21943
+ type: string
21944
+ minLength: 1
21945
+ maxLength: 100
21946
+ description:
21947
+ type: string
21948
+ maxLength: 500
21949
+ publisher:
21950
+ type: string
21951
+ minLength: 1
21952
+ maxLength: 100
21953
+ category:
21954
+ type: string
21955
+ maxLength: 50
21956
+ version:
21957
+ type: string
21958
+ minLength: 1
21959
+ maxLength: 64
21960
+ platform:
21961
+ type: string
21962
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
21963
+ arch:
21964
+ type: string
21965
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
21966
+ fileName:
21967
+ type: string
21968
+ minLength: 1
21969
+ maxLength: 255
21970
+ sizeBytes:
21971
+ type: integer
21972
+ format: int64
21973
+ minimum: 1
21974
+ maximum: 4294967296
21975
+ sha256:
21976
+ type: string
21977
+ pattern: "^[0-9a-f]{64}$"
21978
+ downloadPath:
21979
+ type: string
21980
+ pattern: "^/api/v1/software/packages/[^/]+/download$"
21981
+ createdAt:
21982
+ type: string
21983
+ format: date-time
21984
+ updatedAt:
21985
+ type: string
21986
+ format: date-time
21987
+ additionalProperties: false
21988
+ SoftwarePackageEnvelope:
21989
+ type: object
21990
+ required: [data]
21991
+ properties:
21992
+ data:
21993
+ $ref: "#/components/schemas/SoftwarePackage"
21994
+ additionalProperties: false
21995
+ SoftwarePackageListEnvelope:
21996
+ type: object
21997
+ required: [items]
21998
+ properties:
21999
+ items:
22000
+ type: array
22001
+ items:
22002
+ $ref: "#/components/schemas/SoftwarePackage"
22003
+ nextCursor:
22004
+ type: string
22005
+ additionalProperties: false
22006
+ SoftwarePackageUploadRequest:
22007
+ type: object
22008
+ required: [softwareId, name, publisher, version, platform, arch, file]
22009
+ properties:
22010
+ softwareId:
22011
+ type: string
22012
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22013
+ name:
22014
+ type: string
22015
+ minLength: 1
22016
+ maxLength: 100
22017
+ description:
22018
+ type: string
22019
+ maxLength: 500
22020
+ publisher:
22021
+ type: string
22022
+ minLength: 1
22023
+ maxLength: 100
22024
+ category:
22025
+ type: string
22026
+ maxLength: 50
22027
+ version:
22028
+ type: string
22029
+ minLength: 1
22030
+ maxLength: 64
22031
+ platform:
22032
+ type: string
22033
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22034
+ arch:
22035
+ type: string
22036
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22037
+ file:
22038
+ type: string
22039
+ format: binary
22040
+ additionalProperties: false
22041
+ SoftwarePackageURLImportRequest:
22042
+ type: object
22043
+ required: [softwareId, name, publisher, version, platform, arch, url]
22044
+ properties:
22045
+ softwareId:
22046
+ type: string
22047
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22048
+ name:
22049
+ type: string
22050
+ minLength: 1
22051
+ maxLength: 100
22052
+ description:
22053
+ type: string
22054
+ maxLength: 500
22055
+ publisher:
22056
+ type: string
22057
+ minLength: 1
22058
+ maxLength: 100
22059
+ category:
22060
+ type: string
22061
+ maxLength: 50
22062
+ version:
22063
+ type: string
22064
+ minLength: 1
22065
+ maxLength: 64
22066
+ platform:
22067
+ type: string
22068
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22069
+ arch:
22070
+ type: string
22071
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22072
+ url:
22073
+ type: string
22074
+ format: uri
22075
+ pattern: "^https://"
22076
+ maxLength: 2048
22077
+ fileName:
22078
+ type: string
22079
+ minLength: 1
22080
+ maxLength: 255
22081
+ additionalProperties: false
22082
+ SoftwareStorage:
22083
+ type: object
22084
+ required: [backend, objectCount, totalBytes, items]
22085
+ properties:
22086
+ backend:
22087
+ type: string
22088
+ minLength: 1
22089
+ maxLength: 64
22090
+ objectCount:
22091
+ type: integer
22092
+ format: int64
22093
+ minimum: 0
22094
+ totalBytes:
22095
+ type: integer
22096
+ format: int64
22097
+ minimum: 0
22098
+ items:
22099
+ type: array
22100
+ items:
22101
+ $ref: "#/components/schemas/SoftwarePackage"
22102
+ nextCursor:
22103
+ type: string
22104
+ additionalProperties: false
22105
+ SoftwareStorageEnvelope:
22106
+ type: object
22107
+ required: [data]
22108
+ properties:
22109
+ data:
22110
+ $ref: "#/components/schemas/SoftwareStorage"
22111
+ additionalProperties: false
20518
22112
  InstalledPlugin:
20519
22113
  type: object
20520
22114
  required: [id, name, version, publisher, type, status, source, manifest, checksumStatus, installedBy, installedAt, updatedAt]