@opensoha/contracts 0.1.6 → 0.1.8

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 (83) hide show
  1. package/auth/catalog_generated.go +3 -3
  2. package/auth/permission-catalog.json +108 -2
  3. package/capabilities/cluster-capability-matrix.schema.json +30 -1
  4. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  5. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  6. package/examples/gateway-manifest/minimal.json +6 -6
  7. package/examples/openapi/agent-run-tool-call-request.json +1 -1
  8. package/examples/openapi/agent-tool-call-result-envelope.json +1 -1
  9. package/examples/openapi/gateway-manifest-envelope.json +4 -4
  10. package/examples/openapi/tool-invocation-request.json +1 -1
  11. package/examples/openapi/tool-invocation-result-envelope.json +1 -1
  12. package/examples/plugin-manifest/skill-pack.json +2 -2
  13. package/examples/skill-manifest/k8s-sre.json +2 -2
  14. package/examples/token-claims/service-account.json +1 -1
  15. package/fixtures/json-schema/cluster-capability-matrix/valid/runtime-parity.json +3 -0
  16. package/fixtures/json-schema/companion-pack/invalid/traversal.json +19 -0
  17. package/fixtures/json-schema/companion-pack/valid/svg.json +47 -0
  18. package/fixtures/json-schema/companion-provenance/invalid/missing-source.json +8 -0
  19. package/fixtures/json-schema/companion-provenance/valid/minimal.json +10 -0
  20. package/fixtures/json-schema/gateway-manifest/valid/minimal.json +4 -4
  21. package/fixtures/json-schema/marketplace-catalog/valid/companion-pack.json +39 -0
  22. package/fixtures/json-schema/plugin-manifest/invalid/companion-pack-without-assets.json +17 -0
  23. package/fixtures/json-schema/plugin-manifest/valid/companion-pack.json +28 -0
  24. package/fixtures/json-schema/skill-manifest/valid/minimal.json +2 -2
  25. package/fixtures/json-schema/token-claims/valid/service-account.json +1 -1
  26. package/fixtures/openapi/AIGatewayManifestEnvelope/valid/minimal.json +1 -1
  27. package/fixtures/openapi/AgentInstallationEnvelope/invalid/missing-command.json +7 -0
  28. package/fixtures/openapi/AgentInstallationEnvelope/valid/minimal.json +8 -0
  29. package/fixtures/openapi/ApplicationInput/invalid/missing-key.json +4 -0
  30. package/fixtures/openapi/ApplicationInput/valid/minimal.json +5 -0
  31. package/fixtures/openapi/CompanionInteractionReceiptEnvelope/invalid/missing-profile.json +9 -0
  32. package/fixtures/openapi/CompanionInteractionReceiptEnvelope/valid/applied.json +22 -0
  33. package/fixtures/openapi/CompanionInteractionRequest/invalid/client-reward.json +5 -0
  34. package/fixtures/openapi/CompanionInteractionRequest/valid/pet.json +5 -0
  35. package/fixtures/openapi/CompanionPackManifest/invalid/external-entry.json +11 -0
  36. package/fixtures/openapi/CompanionPackManifest/valid/svg.json +20 -0
  37. package/fixtures/openapi/CompanionProfileEnvelope/invalid/level-zero.json +15 -0
  38. package/fixtures/openapi/CompanionProfileEnvelope/valid/default.json +15 -0
  39. package/fixtures/openapi/HelmReleaseImportRequest/invalid/empty-releases.json +10 -0
  40. package/fixtures/openapi/HelmReleaseImportRequest/valid/managed.json +14 -0
  41. package/fixtures/openapi/HelmReleaseImportResultEnvelope/invalid/missing-mode.json +20 -0
  42. package/fixtures/openapi/HelmReleaseImportResultEnvelope/valid/created.json +35 -0
  43. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/invalid/unknown-kind.json +14 -0
  44. package/fixtures/openapi/KubernetesImportCandidateListEnvelope/valid/grouped.json +31 -0
  45. package/fixtures/openapi/KubernetesServiceImportRequest/invalid/unsupported-mode.json +15 -0
  46. package/fixtures/openapi/KubernetesServiceImportRequest/valid/managed.json +15 -0
  47. package/fixtures/openapi/KubernetesServiceImportRequest/valid/observe-only.json +15 -0
  48. package/fixtures/openapi/KubernetesServiceImportResultEnvelope/invalid/missing-mode.json +20 -0
  49. package/fixtures/openapi/KubernetesServiceImportResultEnvelope/valid/created.json +37 -0
  50. package/fixtures/openapi/MCPCapabilityListEnvelope/invalid/missing-scopes.json +1 -1
  51. package/fixtures/openapi/MCPCapabilityListEnvelope/valid/minimal.json +1 -1
  52. package/fixtures/openapi/ObservabilityDashboardImportResultEnvelope/invalid/missing-dashboard.json +7 -0
  53. package/fixtures/openapi/ObservabilityDashboardImportResultEnvelope/valid/imported.json +36 -0
  54. package/fixtures/openapi/ObservabilityGrafanaDashboardImportInput/invalid/missing-data-source.json +3 -0
  55. package/fixtures/openapi/ObservabilityGrafanaDashboardImportInput/invalid/missing-json.json +3 -0
  56. package/fixtures/openapi/ObservabilityGrafanaDashboardImportInput/valid/classic.json +4 -0
  57. package/fixtures/openapi/ObservabilityMetricDataSourceListEnvelope/invalid/missing-name.json +7 -0
  58. package/fixtures/openapi/ObservabilityMetricDataSourceListEnvelope/valid/list.json +8 -0
  59. package/fixtures/openapi/PersonalAccessTokenInput/invalid/extra-field.json +1 -1
  60. package/fixtures/openapi/PersonalAccessTokenInput/valid/create.json +1 -1
  61. package/fixtures/openapi/PluginProvenanceStatement/invalid/algorithm.json +10 -0
  62. package/fixtures/openapi/PluginProvenanceStatement/valid/minimal.json +10 -0
  63. package/fixtures/openapi/RegistryConnectionInput/invalid/missing-type.json +4 -0
  64. package/fixtures/openapi/RegistryConnectionInput/valid/harbor.json +9 -0
  65. package/fixtures/openapi/RegistryConnectionListEnvelope/invalid/exposed-secret.json +18 -0
  66. package/fixtures/openapi/RegistryConnectionListEnvelope/valid/configured.json +19 -0
  67. package/fixtures/openapi/SoftwarePackage/invalid/unsafe-software-package.json +15 -0
  68. package/fixtures/openapi/SoftwarePackage/valid/software-package.json +17 -0
  69. package/fixtures/openapi/SoftwarePackageURLImportRequest/invalid/software-package-url-import-request.json +9 -0
  70. package/fixtures/openapi/SoftwarePackageURLImportRequest/valid/software-package-url-import-request.json +12 -0
  71. package/fixtures/openapi/SoftwareStorage/invalid/software-storage.json +6 -0
  72. package/fixtures/openapi/SoftwareStorage/valid/software-storage.json +22 -0
  73. package/gen/go/sohaapi/client.go +1 -1
  74. package/gen/go/sohaapi/types.go +1251 -21
  75. package/gen/ts/sohaapi/index.ts +1855 -129
  76. package/openapi/soha-api.json +3280 -4
  77. package/openapi/soha-api.yaml +1876 -71
  78. package/openapi/spec_generated.go +3 -3
  79. package/package.json +3 -1
  80. package/plugins/companion-pack.schema.json +118 -0
  81. package/plugins/companion-provenance.schema.json +19 -0
  82. package/plugins/marketplace-catalog.schema.json +20 -0
  83. package/plugins/plugin-manifest.schema.json +19 -1
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: Soha API
4
- version: 0.1.6
4
+ version: 0.1.8
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,7 @@ tags:
34
34
  - name: Compute
35
35
  - name: MCP
36
36
  - name: Plugins
37
+ - name: Software
37
38
  - name: Access
38
39
  - name: Identity
39
40
  - name: Directory
@@ -1304,6 +1305,93 @@ paths:
1304
1305
  $ref: "#/components/schemas/ApplicationEnvironmentEnvelope"
1305
1306
  "400":
1306
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"
1307
1395
  /application-environments/{applicationEnvironmentID}:
1308
1396
  get:
1309
1397
  tags: [Delivery]
@@ -1370,6 +1458,88 @@ paths:
1370
1458
  $ref: "#/components/schemas/ApplicationEnvironmentDeliveryDetailEnvelope"
1371
1459
  "404":
1372
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"
1373
1543
  /build-templates:
1374
1544
  get:
1375
1545
  tags: [Delivery]
@@ -2738,6 +2908,66 @@ paths:
2738
2908
  $ref: "#/components/schemas/ClusterCapabilityMatrixEnvelope"
2739
2909
  "403":
2740
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"
2741
2971
  /clusters/{clusterID}/logs/query:
2742
2972
  post:
2743
2973
  tags: [Platform]
@@ -3021,120 +3251,230 @@ paths:
3021
3251
  $ref: "#/components/schemas/ObservabilityProviderListEnvelope"
3022
3252
  "403":
3023
3253
  $ref: "#/components/responses/Error"
3024
- /observability/metrics/query:
3025
- post:
3254
+ /observability/dashboards:
3255
+ get:
3026
3256
  tags: [Observability]
3027
- operationId: queryObservabilityMetrics
3028
- requestBody:
3029
- required: true
3030
- content:
3031
- application/json:
3032
- schema:
3033
- $ref: "#/components/schemas/ObservabilityMetricQueryInput"
3257
+ operationId: listObservabilityDashboards
3034
3258
  responses:
3035
3259
  "200":
3036
- description: Normalized metric series from an authorized configured provider.
3260
+ description: Dashboards visible to the current principal.
3037
3261
  content:
3038
3262
  application/json:
3039
3263
  schema:
3040
- $ref: "#/components/schemas/ObservabilityMetricQueryEnvelope"
3041
- "400":
3042
- $ref: "#/components/responses/Error"
3264
+ $ref: "#/components/schemas/ObservabilityDashboardListEnvelope"
3043
3265
  "403":
3044
3266
  $ref: "#/components/responses/Error"
3045
- "404":
3046
- $ref: "#/components/responses/Error"
3047
- "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":
3048
3279
  $ref: "#/components/responses/Error"
3049
- /observability/traces/query:
3280
+ /observability/dashboards/imports:
3050
3281
  post:
3051
3282
  tags: [Observability]
3052
- operationId: queryObservabilityTraces
3283
+ operationId: importGrafanaDashboard
3053
3284
  requestBody:
3054
3285
  required: true
3055
3286
  content:
3056
3287
  application/json:
3057
3288
  schema:
3058
- $ref: "#/components/schemas/ObservabilityTraceQueryInput"
3289
+ $ref: "#/components/schemas/ObservabilityGrafanaDashboardImportInput"
3059
3290
  responses:
3060
- "200":
3061
- description: Normalized trace spans from an authorized configured provider.
3291
+ "201":
3292
+ description: Imported native dashboard and explicit compatibility warnings.
3062
3293
  content:
3063
3294
  application/json:
3064
3295
  schema:
3065
- $ref: "#/components/schemas/ObservabilityTraceQueryEnvelope"
3296
+ $ref: "#/components/schemas/ObservabilityDashboardImportResultEnvelope"
3066
3297
  "400":
3067
3298
  $ref: "#/components/responses/Error"
3068
3299
  "403":
3069
3300
  $ref: "#/components/responses/Error"
3070
3301
  "404":
3071
3302
  $ref: "#/components/responses/Error"
3072
- "503":
3073
- $ref: "#/components/responses/Error"
3074
- /observability/data-sources:
3303
+ /observability/dashboards/{dashboardID}:
3075
3304
  get:
3076
3305
  tags: [Observability]
3077
- operationId: listObservabilityDataSources
3306
+ operationId: getObservabilityDashboard
3307
+ parameters:
3308
+ - $ref: "#/components/parameters/DashboardID"
3078
3309
  responses:
3079
3310
  "200":
3080
- description: Permission-filtered log data sources with credentials redacted.
3311
+ description: Dashboard detail including normalized panels and targets.
3081
3312
  content:
3082
3313
  application/json:
3083
3314
  schema:
3084
- $ref: "#/components/schemas/ObservabilityDataSourceListEnvelope"
3315
+ $ref: "#/components/schemas/ObservabilityDashboardEnvelope"
3085
3316
  "403":
3086
3317
  $ref: "#/components/responses/Error"
3087
- post:
3318
+ "404":
3319
+ $ref: "#/components/responses/Error"
3320
+ delete:
3088
3321
  tags: [Observability]
3089
- operationId: createObservabilityDataSource
3090
- requestBody:
3091
- required: true
3092
- content:
3093
- application/json:
3094
- schema:
3095
- $ref: "#/components/schemas/ObservabilityDataSourceInput"
3322
+ operationId: deleteObservabilityDashboard
3323
+ parameters:
3324
+ - $ref: "#/components/parameters/DashboardID"
3096
3325
  responses:
3097
- "201":
3098
- description: Log data source created with credentials redacted.
3326
+ "200":
3327
+ description: Dashboard deleted.
3099
3328
  content:
3100
3329
  application/json:
3101
3330
  schema:
3102
- $ref: "#/components/schemas/ObservabilityDataSourceEnvelope"
3103
- "400":
3104
- $ref: "#/components/responses/Error"
3331
+ $ref: "#/components/schemas/OperationStatus"
3105
3332
  "403":
3106
3333
  $ref: "#/components/responses/Error"
3107
- /observability/data-sources/{dataSourceID}:
3108
- put:
3334
+ "404":
3335
+ $ref: "#/components/responses/Error"
3336
+ /observability/dashboards/{dashboardID}/panels/{panelID}/query:
3337
+ post:
3109
3338
  tags: [Observability]
3110
- operationId: updateObservabilityDataSource
3339
+ operationId: queryObservabilityDashboardPanel
3111
3340
  parameters:
3112
- - $ref: "#/components/parameters/DataSourceID"
3341
+ - $ref: "#/components/parameters/DashboardID"
3342
+ - $ref: "#/components/parameters/DashboardPanelID"
3113
3343
  requestBody:
3114
3344
  required: true
3115
3345
  content:
3116
3346
  application/json:
3117
3347
  schema:
3118
- $ref: "#/components/schemas/ObservabilityDataSourceInput"
3348
+ $ref: "#/components/schemas/ObservabilityDashboardPanelQueryInput"
3119
3349
  responses:
3120
3350
  "200":
3121
- description: Log data source updated with credentials redacted.
3351
+ description: Normalized metric series for the persisted dashboard panel targets.
3122
3352
  content:
3123
3353
  application/json:
3124
3354
  schema:
3125
- $ref: "#/components/schemas/ObservabilityDataSourceEnvelope"
3355
+ $ref: "#/components/schemas/ObservabilityMetricQueryEnvelope"
3126
3356
  "400":
3127
3357
  $ref: "#/components/responses/Error"
3128
3358
  "403":
3129
3359
  $ref: "#/components/responses/Error"
3130
3360
  "404":
3131
3361
  $ref: "#/components/responses/Error"
3132
- /observability/data-sources/{dataSourceID}/validate:
3362
+ "503":
3363
+ $ref: "#/components/responses/Error"
3364
+ /observability/metrics/query:
3133
3365
  post:
3134
3366
  tags: [Observability]
3135
- operationId: validateObservabilityDataSource
3136
- parameters:
3137
- - $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"
3138
3478
  responses:
3139
3479
  "200":
3140
3480
  description: Current data-source validation and backend health result.
@@ -6063,6 +6403,25 @@ paths:
6063
6403
  application/json:
6064
6404
  schema:
6065
6405
  $ref: "#/components/schemas/PluginManifest"
6406
+ /marketplace/plugins/{pluginID}/{version}/provenance.json:
6407
+ get:
6408
+ tags: [Marketplace]
6409
+ operationId: getPublicMarketplacePluginProvenance
6410
+ security: []
6411
+ parameters:
6412
+ - $ref: "#/components/parameters/PluginID"
6413
+ - name: version
6414
+ in: path
6415
+ required: true
6416
+ schema:
6417
+ type: string
6418
+ responses:
6419
+ "200":
6420
+ description: Immutable signed provenance statement for a plugin package.
6421
+ content:
6422
+ application/json:
6423
+ schema:
6424
+ $ref: "#/components/schemas/PluginProvenanceStatement"
6066
6425
  /plugins/marketplace:
6067
6426
  get:
6068
6427
  tags: [Plugins]
@@ -6133,6 +6492,166 @@ paths:
6133
6492
  application/json:
6134
6493
  schema:
6135
6494
  $ref: "#/components/schemas/MarketplacePluginEnvelope"
6495
+ /software/packages:
6496
+ get:
6497
+ tags: [Software]
6498
+ operationId: listSoftwarePackages
6499
+ parameters:
6500
+ - name: platform
6501
+ in: query
6502
+ required: false
6503
+ schema:
6504
+ type: string
6505
+ maxLength: 64
6506
+ - name: arch
6507
+ in: query
6508
+ required: false
6509
+ schema:
6510
+ type: string
6511
+ maxLength: 64
6512
+ - name: cursor
6513
+ in: query
6514
+ required: false
6515
+ schema:
6516
+ type: string
6517
+ maxLength: 256
6518
+ - name: limit
6519
+ in: query
6520
+ required: false
6521
+ schema:
6522
+ type: integer
6523
+ minimum: 1
6524
+ maximum: 200
6525
+ responses:
6526
+ "200":
6527
+ description: Software packages visible to the current principal.
6528
+ content:
6529
+ application/json:
6530
+ schema:
6531
+ $ref: "#/components/schemas/SoftwarePackageListEnvelope"
6532
+ "401":
6533
+ $ref: "#/components/responses/Error"
6534
+ "403":
6535
+ $ref: "#/components/responses/Error"
6536
+ post:
6537
+ tags: [Software]
6538
+ operationId: uploadSoftwarePackage
6539
+ requestBody:
6540
+ required: true
6541
+ content:
6542
+ multipart/form-data:
6543
+ schema:
6544
+ $ref: "#/components/schemas/SoftwarePackageUploadRequest"
6545
+ responses:
6546
+ "201":
6547
+ description: Software package uploaded and published.
6548
+ content:
6549
+ application/json:
6550
+ schema:
6551
+ $ref: "#/components/schemas/SoftwarePackageEnvelope"
6552
+ "400":
6553
+ $ref: "#/components/responses/Error"
6554
+ "401":
6555
+ $ref: "#/components/responses/Error"
6556
+ "403":
6557
+ $ref: "#/components/responses/Error"
6558
+ "409":
6559
+ $ref: "#/components/responses/Error"
6560
+ "413":
6561
+ $ref: "#/components/responses/Error"
6562
+ /software/packages/import:
6563
+ post:
6564
+ tags: [Software]
6565
+ operationId: importSoftwarePackage
6566
+ requestBody:
6567
+ required: true
6568
+ content:
6569
+ application/json:
6570
+ schema:
6571
+ $ref: "#/components/schemas/SoftwarePackageURLImportRequest"
6572
+ responses:
6573
+ "201":
6574
+ description: Software package downloaded from the source URL and published.
6575
+ content:
6576
+ application/json:
6577
+ schema:
6578
+ $ref: "#/components/schemas/SoftwarePackageEnvelope"
6579
+ "400":
6580
+ $ref: "#/components/responses/Error"
6581
+ "401":
6582
+ $ref: "#/components/responses/Error"
6583
+ "403":
6584
+ $ref: "#/components/responses/Error"
6585
+ "409":
6586
+ $ref: "#/components/responses/Error"
6587
+ "413":
6588
+ $ref: "#/components/responses/Error"
6589
+ /software/storage:
6590
+ get:
6591
+ tags: [Software]
6592
+ operationId: getSoftwareStorage
6593
+ parameters:
6594
+ - name: cursor
6595
+ in: query
6596
+ required: false
6597
+ schema:
6598
+ type: string
6599
+ maxLength: 256
6600
+ - name: limit
6601
+ in: query
6602
+ required: false
6603
+ schema:
6604
+ type: integer
6605
+ minimum: 1
6606
+ maximum: 200
6607
+ responses:
6608
+ "200":
6609
+ description: Managed software storage summary and object records.
6610
+ content:
6611
+ application/json:
6612
+ schema:
6613
+ $ref: "#/components/schemas/SoftwareStorageEnvelope"
6614
+ "400":
6615
+ $ref: "#/components/responses/Error"
6616
+ "401":
6617
+ $ref: "#/components/responses/Error"
6618
+ "403":
6619
+ $ref: "#/components/responses/Error"
6620
+ /software/packages/{packageID}:
6621
+ delete:
6622
+ tags: [Software]
6623
+ operationId: deleteSoftwarePackage
6624
+ parameters:
6625
+ - $ref: "#/components/parameters/SoftwarePackageID"
6626
+ responses:
6627
+ "204":
6628
+ description: Software package deleted.
6629
+ "401":
6630
+ $ref: "#/components/responses/Error"
6631
+ "403":
6632
+ $ref: "#/components/responses/Error"
6633
+ "404":
6634
+ $ref: "#/components/responses/Error"
6635
+ /software/packages/{packageID}/download:
6636
+ get:
6637
+ tags: [Software]
6638
+ operationId: downloadSoftwarePackage
6639
+ parameters:
6640
+ - $ref: "#/components/parameters/SoftwarePackageID"
6641
+ responses:
6642
+ "200":
6643
+ description: Software package binary.
6644
+ content:
6645
+ application/octet-stream:
6646
+ schema:
6647
+ type: string
6648
+ format: binary
6649
+ "401":
6650
+ $ref: "#/components/responses/Error"
6651
+ "403":
6652
+ $ref: "#/components/responses/Error"
6653
+ "404":
6654
+ $ref: "#/components/responses/Error"
6136
6655
  /plugins/installed:
6137
6656
  get:
6138
6657
  tags: [Plugins]
@@ -6263,9 +6782,173 @@ paths:
6263
6782
  application/json:
6264
6783
  schema:
6265
6784
  $ref: "#/components/schemas/InstalledPluginEnvelope"
6266
- /ai/agent-providers/catalog:
6267
- get:
6268
- tags: [Agent Providers]
6785
+ /plugins/{pluginID}/activate:
6786
+ post:
6787
+ tags: [Plugins]
6788
+ operationId: activateInstalledPlugin
6789
+ parameters:
6790
+ - $ref: "#/components/parameters/PluginID"
6791
+ - $ref: "#/components/parameters/IdempotencyKey"
6792
+ requestBody:
6793
+ required: false
6794
+ content:
6795
+ application/json:
6796
+ schema:
6797
+ $ref: "#/components/schemas/CompanionActivationRequest"
6798
+ responses:
6799
+ "200":
6800
+ description: Companion pack version activated.
6801
+ content:
6802
+ application/json:
6803
+ schema:
6804
+ $ref: "#/components/schemas/InstalledPluginEnvelope"
6805
+ "401": { $ref: "#/components/responses/Error" }
6806
+ "403": { $ref: "#/components/responses/Error" }
6807
+ "404": { $ref: "#/components/responses/Error" }
6808
+ "409": { $ref: "#/components/responses/Error" }
6809
+ "422": { $ref: "#/components/responses/Error" }
6810
+ "503": { $ref: "#/components/responses/Error" }
6811
+ /plugins/{pluginID}/rollback:
6812
+ post:
6813
+ tags: [Plugins]
6814
+ operationId: rollbackInstalledPlugin
6815
+ parameters:
6816
+ - $ref: "#/components/parameters/PluginID"
6817
+ - $ref: "#/components/parameters/IdempotencyKey"
6818
+ requestBody:
6819
+ required: false
6820
+ content:
6821
+ application/json:
6822
+ schema:
6823
+ $ref: "#/components/schemas/CompanionRollbackRequest"
6824
+ responses:
6825
+ "200":
6826
+ description: Companion pack rolled back to a retained verified version.
6827
+ content:
6828
+ application/json:
6829
+ schema:
6830
+ $ref: "#/components/schemas/InstalledPluginEnvelope"
6831
+ "401": { $ref: "#/components/responses/Error" }
6832
+ "403": { $ref: "#/components/responses/Error" }
6833
+ "404": { $ref: "#/components/responses/Error" }
6834
+ "409": { $ref: "#/components/responses/Error" }
6835
+ "422": { $ref: "#/components/responses/Error" }
6836
+ "503": { $ref: "#/components/responses/Error" }
6837
+ /plugins/{pluginID}/assets/{assetPath}:
6838
+ get:
6839
+ tags: [Plugins]
6840
+ operationId: getInstalledPluginAsset
6841
+ parameters:
6842
+ - $ref: "#/components/parameters/PluginID"
6843
+ - $ref: "#/components/parameters/PluginAssetPath"
6844
+ responses:
6845
+ "200":
6846
+ description: Immutable verified asset from the active companion pack.
6847
+ headers:
6848
+ Cache-Control:
6849
+ schema:
6850
+ type: string
6851
+ content:
6852
+ application/octet-stream:
6853
+ schema:
6854
+ type: string
6855
+ format: binary
6856
+ application/json:
6857
+ schema:
6858
+ type: string
6859
+ format: binary
6860
+ image/png:
6861
+ schema:
6862
+ type: string
6863
+ format: binary
6864
+ image/jpeg:
6865
+ schema:
6866
+ type: string
6867
+ format: binary
6868
+ image/webp:
6869
+ schema:
6870
+ type: string
6871
+ format: binary
6872
+ image/svg+xml:
6873
+ schema:
6874
+ type: string
6875
+ format: binary
6876
+ "401": { $ref: "#/components/responses/Error" }
6877
+ "403": { $ref: "#/components/responses/Error" }
6878
+ "404": { $ref: "#/components/responses/Error" }
6879
+ /companion/profile:
6880
+ get:
6881
+ tags: [Companion]
6882
+ operationId: getCompanionProfile
6883
+ responses:
6884
+ "200":
6885
+ description: Current principal's companion profile.
6886
+ content:
6887
+ application/json:
6888
+ schema:
6889
+ $ref: "#/components/schemas/CompanionProfileEnvelope"
6890
+ "401": { $ref: "#/components/responses/Error" }
6891
+ "403": { $ref: "#/components/responses/Error" }
6892
+ "503": { $ref: "#/components/responses/Error" }
6893
+ /companion/interactions:
6894
+ post:
6895
+ tags: [Companion]
6896
+ operationId: recordCompanionInteraction
6897
+ parameters:
6898
+ - $ref: "#/components/parameters/IdempotencyKey"
6899
+ requestBody:
6900
+ required: true
6901
+ content:
6902
+ application/json:
6903
+ schema:
6904
+ $ref: "#/components/schemas/CompanionInteractionRequest"
6905
+ responses:
6906
+ "200":
6907
+ description: Existing idempotent interaction result.
6908
+ content:
6909
+ application/json:
6910
+ schema:
6911
+ $ref: "#/components/schemas/CompanionInteractionReceiptEnvelope"
6912
+ "201":
6913
+ description: Interaction applied to the companion profile.
6914
+ content:
6915
+ application/json:
6916
+ schema:
6917
+ $ref: "#/components/schemas/CompanionInteractionReceiptEnvelope"
6918
+ "400": { $ref: "#/components/responses/Error" }
6919
+ "401": { $ref: "#/components/responses/Error" }
6920
+ "403": { $ref: "#/components/responses/Error" }
6921
+ "404": { $ref: "#/components/responses/Error" }
6922
+ "409": { $ref: "#/components/responses/Error" }
6923
+ "422": { $ref: "#/components/responses/Error" }
6924
+ "503": { $ref: "#/components/responses/Error" }
6925
+ /companion/profile/reset:
6926
+ post:
6927
+ tags: [Companion]
6928
+ operationId: resetCompanionProfile
6929
+ parameters:
6930
+ - $ref: "#/components/parameters/IdempotencyKey"
6931
+ requestBody:
6932
+ required: false
6933
+ content:
6934
+ application/json:
6935
+ schema:
6936
+ $ref: "#/components/schemas/CompanionProfileResetRequest"
6937
+ responses:
6938
+ "200":
6939
+ description: Companion progression reset for the selected pack.
6940
+ content:
6941
+ application/json:
6942
+ schema:
6943
+ $ref: "#/components/schemas/CompanionProfileEnvelope"
6944
+ "401": { $ref: "#/components/responses/Error" }
6945
+ "403": { $ref: "#/components/responses/Error" }
6946
+ "404": { $ref: "#/components/responses/Error" }
6947
+ "409": { $ref: "#/components/responses/Error" }
6948
+ "503": { $ref: "#/components/responses/Error" }
6949
+ /ai/agent-providers/catalog:
6950
+ get:
6951
+ tags: [Agent Providers]
6269
6952
  operationId: getAgentProviderCatalog
6270
6953
  responses:
6271
6954
  "200":
@@ -8301,6 +8984,10 @@ components:
8301
8984
  type: http
8302
8985
  scheme: bearer
8303
8986
  description: Runtime execution runner token.
8987
+ agentBearerAuth:
8988
+ type: http
8989
+ scheme: bearer
8990
+ description: Per-cluster Agent session token provisioned through the installation manifest.
8304
8991
  sohaXAPIKey:
8305
8992
  type: apiKey
8306
8993
  in: header
@@ -8421,6 +9108,21 @@ components:
8421
9108
  schema:
8422
9109
  type: string
8423
9110
  minLength: 1
9111
+ ClusterIDQuery:
9112
+ name: clusterId
9113
+ in: query
9114
+ required: true
9115
+ schema:
9116
+ type: string
9117
+ minLength: 1
9118
+ AgentInstallTicket:
9119
+ name: installTicket
9120
+ in: path
9121
+ required: true
9122
+ schema:
9123
+ type: string
9124
+ minLength: 16
9125
+ maxLength: 1024
8424
9126
  DataSourceID:
8425
9127
  name: dataSourceID
8426
9128
  in: path
@@ -8429,6 +9131,22 @@ components:
8429
9131
  type: string
8430
9132
  minLength: 1
8431
9133
  maxLength: 128
9134
+ DashboardID:
9135
+ name: dashboardID
9136
+ in: path
9137
+ required: true
9138
+ schema:
9139
+ type: string
9140
+ minLength: 1
9141
+ maxLength: 128
9142
+ DashboardPanelID:
9143
+ name: panelID
9144
+ in: path
9145
+ required: true
9146
+ schema:
9147
+ type: string
9148
+ minLength: 1
9149
+ maxLength: 128
8432
9150
  ComputeCursor:
8433
9151
  name: cursor
8434
9152
  in: query
@@ -8631,6 +9349,13 @@ components:
8631
9349
  required: true
8632
9350
  schema:
8633
9351
  type: string
9352
+ RegistryConnectionID:
9353
+ name: connectionID
9354
+ in: path
9355
+ required: true
9356
+ schema:
9357
+ type: string
9358
+ minLength: 1
8634
9359
  BundleID:
8635
9360
  name: bundleID
8636
9361
  in: path
@@ -8673,6 +9398,16 @@ components:
8673
9398
  required: true
8674
9399
  schema:
8675
9400
  type: string
9401
+ PluginAssetPath:
9402
+ name: assetPath
9403
+ in: path
9404
+ required: true
9405
+ description: Slash-separated relative path declared by the active companion pack.
9406
+ schema:
9407
+ type: string
9408
+ minLength: 1
9409
+ maxLength: 512
9410
+ pattern: "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[A-Za-z0-9._/-]+$"
8676
9411
  KnowledgeBaseID:
8677
9412
  name: baseID
8678
9413
  in: path
@@ -8717,6 +9452,14 @@ components:
8717
9452
  type: string
8718
9453
  minLength: 1
8719
9454
  maxLength: 128
9455
+ SoftwarePackageID:
9456
+ name: packageID
9457
+ in: path
9458
+ required: true
9459
+ schema:
9460
+ type: string
9461
+ minLength: 1
9462
+ maxLength: 128
8720
9463
  AIMemoryID:
8721
9464
  name: memoryID
8722
9465
  in: path
@@ -14088,7 +14831,7 @@ components:
14088
14831
  additionalProperties: false
14089
14832
  ApplicationInput:
14090
14833
  type: object
14091
- required: [name, key, group, language, enabled]
14834
+ required: [name, key, enabled]
14092
14835
  properties:
14093
14836
  id:
14094
14837
  type: string
@@ -14448,6 +15191,87 @@ components:
14448
15191
  enabled:
14449
15192
  type: boolean
14450
15193
  additionalProperties: false
15194
+ RegistryConnectionMetadata:
15195
+ type: object
15196
+ required: [secretConfigured, secretStorage]
15197
+ properties:
15198
+ secretConfigured:
15199
+ type: boolean
15200
+ secretStorage:
15201
+ type: string
15202
+ additionalProperties: false
15203
+ RegistryConnection:
15204
+ type: object
15205
+ required: [id, name, registryType, endpoint, insecure, metadata, createdAt, updatedAt]
15206
+ properties:
15207
+ id:
15208
+ type: string
15209
+ minLength: 1
15210
+ name:
15211
+ type: string
15212
+ minLength: 1
15213
+ registryType:
15214
+ type: string
15215
+ minLength: 1
15216
+ endpoint:
15217
+ type: string
15218
+ minLength: 1
15219
+ namespace:
15220
+ type: string
15221
+ username:
15222
+ type: string
15223
+ insecure:
15224
+ type: boolean
15225
+ metadata:
15226
+ $ref: "#/components/schemas/RegistryConnectionMetadata"
15227
+ createdAt:
15228
+ type: string
15229
+ format: date-time
15230
+ updatedAt:
15231
+ type: string
15232
+ format: date-time
15233
+ additionalProperties: false
15234
+ RegistryConnectionInput:
15235
+ type: object
15236
+ required: [name, registryType, endpoint]
15237
+ properties:
15238
+ id:
15239
+ type: string
15240
+ name:
15241
+ type: string
15242
+ minLength: 1
15243
+ registryType:
15244
+ type: string
15245
+ minLength: 1
15246
+ endpoint:
15247
+ type: string
15248
+ minLength: 1
15249
+ namespace:
15250
+ type: string
15251
+ username:
15252
+ type: string
15253
+ secret:
15254
+ type: string
15255
+ writeOnly: true
15256
+ insecure:
15257
+ type: boolean
15258
+ additionalProperties: false
15259
+ RegistryConnectionEnvelope:
15260
+ type: object
15261
+ required: [data]
15262
+ properties:
15263
+ data:
15264
+ $ref: "#/components/schemas/RegistryConnection"
15265
+ additionalProperties: false
15266
+ RegistryConnectionListEnvelope:
15267
+ type: object
15268
+ required: [items]
15269
+ properties:
15270
+ items:
15271
+ type: array
15272
+ items:
15273
+ $ref: "#/components/schemas/RegistryConnection"
15274
+ additionalProperties: false
14451
15275
  WorkflowTemplate:
14452
15276
  type: object
14453
15277
  required: [id, key, name, enabled, createdAt, updatedAt]
@@ -14566,26 +15390,302 @@ components:
14566
15390
  items:
14567
15391
  $ref: "#/components/schemas/ReleaseTargetInput"
14568
15392
  additionalProperties: false
14569
- BuildTemplate:
15393
+ KubernetesRelatedResource:
14570
15394
  type: object
14571
- required: [id, key, name, enabled, createdAt, updatedAt]
15395
+ required: [kind, name]
14572
15396
  properties:
14573
- id:
14574
- type: string
14575
- key:
15397
+ kind:
14576
15398
  type: string
15399
+ enum: [Service, Ingress, HorizontalPodAutoscaler]
14577
15400
  name:
14578
15401
  type: string
14579
- description:
15402
+ minLength: 1
15403
+ additionalProperties: false
15404
+ KubernetesImportCandidate:
15405
+ type: object
15406
+ required: [clusterId, namespace, workloadKind, workloadName, desiredReplicas, readyReplicas, relatedResources]
15407
+ properties:
15408
+ clusterId:
14580
15409
  type: string
14581
- builderKind:
15410
+ minLength: 1
15411
+ namespace:
14582
15412
  type: string
14583
- dockerfileTemplate:
15413
+ minLength: 1
15414
+ workloadKind:
14584
15415
  type: string
14585
- buildCommands:
14586
- type: array
14587
- items:
14588
- type: string
15416
+ enum: [Deployment, StatefulSet, DaemonSet]
15417
+ workloadName:
15418
+ type: string
15419
+ minLength: 1
15420
+ desiredReplicas:
15421
+ type: integer
15422
+ minimum: 0
15423
+ readyReplicas:
15424
+ type: integer
15425
+ minimum: 0
15426
+ containers:
15427
+ type: array
15428
+ uniqueItems: true
15429
+ items:
15430
+ type: string
15431
+ labels:
15432
+ type: object
15433
+ additionalProperties:
15434
+ type: string
15435
+ relatedResources:
15436
+ type: array
15437
+ items:
15438
+ $ref: "#/components/schemas/KubernetesRelatedResource"
15439
+ additionalProperties: false
15440
+ KubernetesImportCandidateListEnvelope:
15441
+ type: object
15442
+ required: [items, truncated]
15443
+ properties:
15444
+ items:
15445
+ type: array
15446
+ items:
15447
+ $ref: "#/components/schemas/KubernetesImportCandidate"
15448
+ truncated:
15449
+ type: boolean
15450
+ additionalProperties: false
15451
+ KubernetesWorkloadImportInput:
15452
+ type: object
15453
+ required: [workloadKind, workloadName]
15454
+ properties:
15455
+ workloadKind:
15456
+ type: string
15457
+ enum: [Deployment, StatefulSet, DaemonSet]
15458
+ workloadName:
15459
+ type: string
15460
+ minLength: 1
15461
+ additionalProperties: false
15462
+ KubernetesServiceImportRequest:
15463
+ type: object
15464
+ required: [clusterId, namespace, applicationKey, applicationName, environmentKey, environmentName, ownershipMode, workloads]
15465
+ properties:
15466
+ clusterId:
15467
+ type: string
15468
+ minLength: 1
15469
+ namespace:
15470
+ type: string
15471
+ minLength: 1
15472
+ applicationKey:
15473
+ type: string
15474
+ minLength: 1
15475
+ applicationName:
15476
+ type: string
15477
+ minLength: 1
15478
+ environmentKey:
15479
+ type: string
15480
+ minLength: 1
15481
+ environmentName:
15482
+ type: string
15483
+ minLength: 1
15484
+ ownershipMode:
15485
+ type: string
15486
+ enum: [observe_only, managed]
15487
+ workloads:
15488
+ type: array
15489
+ minItems: 1
15490
+ maxItems: 100
15491
+ uniqueItems: true
15492
+ items:
15493
+ $ref: "#/components/schemas/KubernetesWorkloadImportInput"
15494
+ additionalProperties: false
15495
+ KubernetesImportEntityRef:
15496
+ type: object
15497
+ required: [id, key, name, created]
15498
+ properties:
15499
+ id:
15500
+ type: string
15501
+ key:
15502
+ type: string
15503
+ name:
15504
+ type: string
15505
+ created:
15506
+ type: boolean
15507
+ additionalProperties: false
15508
+ KubernetesImportedService:
15509
+ type: object
15510
+ required: [id, key, name, workloadKind, workloadName, created]
15511
+ properties:
15512
+ id:
15513
+ type: string
15514
+ key:
15515
+ type: string
15516
+ name:
15517
+ type: string
15518
+ workloadKind:
15519
+ type: string
15520
+ enum: [Deployment, StatefulSet, DaemonSet]
15521
+ workloadName:
15522
+ type: string
15523
+ created:
15524
+ type: boolean
15525
+ additionalProperties: false
15526
+ KubernetesImportedTarget:
15527
+ type: object
15528
+ required: [id, workloadKind, workloadName, created]
15529
+ properties:
15530
+ id:
15531
+ type: string
15532
+ workloadKind:
15533
+ type: string
15534
+ enum: [Deployment, StatefulSet, DaemonSet]
15535
+ workloadName:
15536
+ type: string
15537
+ created:
15538
+ type: boolean
15539
+ additionalProperties: false
15540
+ KubernetesServiceImportResult:
15541
+ type: object
15542
+ required: [application, environment, applicationEnvironmentId, applicationEnvironmentCreated, ownershipMode, services, targets]
15543
+ properties:
15544
+ application:
15545
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15546
+ environment:
15547
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15548
+ applicationEnvironmentId:
15549
+ type: string
15550
+ applicationEnvironmentCreated:
15551
+ type: boolean
15552
+ ownershipMode:
15553
+ type: string
15554
+ enum: [observe_only, managed]
15555
+ services:
15556
+ type: array
15557
+ items:
15558
+ $ref: "#/components/schemas/KubernetesImportedService"
15559
+ targets:
15560
+ type: array
15561
+ items:
15562
+ $ref: "#/components/schemas/KubernetesImportedTarget"
15563
+ additionalProperties: false
15564
+ KubernetesServiceImportResultEnvelope:
15565
+ type: object
15566
+ required: [data]
15567
+ properties:
15568
+ data:
15569
+ $ref: "#/components/schemas/KubernetesServiceImportResult"
15570
+ additionalProperties: false
15571
+ HelmReleaseImportInput:
15572
+ type: object
15573
+ required: [releaseName]
15574
+ properties:
15575
+ releaseName:
15576
+ type: string
15577
+ minLength: 1
15578
+ additionalProperties: false
15579
+ HelmReleaseImportRequest:
15580
+ type: object
15581
+ required: [clusterId, namespace, applicationKey, applicationName, environmentKey, environmentName, ownershipMode, releases]
15582
+ properties:
15583
+ clusterId:
15584
+ type: string
15585
+ minLength: 1
15586
+ namespace:
15587
+ type: string
15588
+ minLength: 1
15589
+ applicationKey:
15590
+ type: string
15591
+ minLength: 1
15592
+ applicationName:
15593
+ type: string
15594
+ minLength: 1
15595
+ environmentKey:
15596
+ type: string
15597
+ minLength: 1
15598
+ environmentName:
15599
+ type: string
15600
+ minLength: 1
15601
+ ownershipMode:
15602
+ type: string
15603
+ enum: [observe_only, managed]
15604
+ releases:
15605
+ type: array
15606
+ minItems: 1
15607
+ maxItems: 100
15608
+ uniqueItems: true
15609
+ items:
15610
+ $ref: "#/components/schemas/HelmReleaseImportInput"
15611
+ additionalProperties: false
15612
+ HelmImportedService:
15613
+ type: object
15614
+ required: [id, key, name, releaseName, created]
15615
+ properties:
15616
+ id:
15617
+ type: string
15618
+ key:
15619
+ type: string
15620
+ name:
15621
+ type: string
15622
+ releaseName:
15623
+ type: string
15624
+ created:
15625
+ type: boolean
15626
+ additionalProperties: false
15627
+ HelmImportedTarget:
15628
+ type: object
15629
+ required: [id, releaseName, created]
15630
+ properties:
15631
+ id:
15632
+ type: string
15633
+ releaseName:
15634
+ type: string
15635
+ created:
15636
+ type: boolean
15637
+ additionalProperties: false
15638
+ HelmReleaseImportResult:
15639
+ type: object
15640
+ required: [application, environment, applicationEnvironmentId, applicationEnvironmentCreated, ownershipMode, services, targets]
15641
+ properties:
15642
+ application:
15643
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15644
+ environment:
15645
+ $ref: "#/components/schemas/KubernetesImportEntityRef"
15646
+ applicationEnvironmentId:
15647
+ type: string
15648
+ applicationEnvironmentCreated:
15649
+ type: boolean
15650
+ ownershipMode:
15651
+ type: string
15652
+ enum: [observe_only, managed]
15653
+ services:
15654
+ type: array
15655
+ items:
15656
+ $ref: "#/components/schemas/HelmImportedService"
15657
+ targets:
15658
+ type: array
15659
+ items:
15660
+ $ref: "#/components/schemas/HelmImportedTarget"
15661
+ additionalProperties: false
15662
+ HelmReleaseImportResultEnvelope:
15663
+ type: object
15664
+ required: [data]
15665
+ properties:
15666
+ data:
15667
+ $ref: "#/components/schemas/HelmReleaseImportResult"
15668
+ additionalProperties: false
15669
+ BuildTemplate:
15670
+ type: object
15671
+ required: [id, key, name, enabled, createdAt, updatedAt]
15672
+ properties:
15673
+ id:
15674
+ type: string
15675
+ key:
15676
+ type: string
15677
+ name:
15678
+ type: string
15679
+ description:
15680
+ type: string
15681
+ builderKind:
15682
+ type: string
15683
+ dockerfileTemplate:
15684
+ type: string
15685
+ buildCommands:
15686
+ type: array
15687
+ items:
15688
+ type: string
14589
15689
  variableSchema:
14590
15690
  type: object
14591
15691
  additionalProperties: true
@@ -15072,6 +16172,10 @@ components:
15072
16172
  type: string
15073
16173
  containerName:
15074
16174
  type: string
16175
+ valuesContent:
16176
+ type: string
16177
+ maxLength: 1048576
16178
+ description: Complete Helm values YAML used when the selected target is a managed Helm release.
15075
16179
  variables:
15076
16180
  type: object
15077
16181
  additionalProperties: true
@@ -17084,6 +18188,30 @@ components:
17084
18188
  items:
17085
18189
  $ref: "#/components/schemas/ClusterCapabilityMatrixEntry"
17086
18190
  additionalProperties: false
18191
+ AgentInstallation:
18192
+ type: object
18193
+ required: [clusterId, manifestUrl, command, expiresAt]
18194
+ properties:
18195
+ clusterId:
18196
+ type: string
18197
+ minLength: 1
18198
+ manifestUrl:
18199
+ type: string
18200
+ format: uri
18201
+ command:
18202
+ type: string
18203
+ minLength: 1
18204
+ expiresAt:
18205
+ type: string
18206
+ format: date-time
18207
+ additionalProperties: false
18208
+ AgentInstallationEnvelope:
18209
+ type: object
18210
+ required: [data]
18211
+ properties:
18212
+ data:
18213
+ $ref: "#/components/schemas/AgentInstallation"
18214
+ additionalProperties: false
17087
18215
  ObservabilityProviderSignal:
17088
18216
  type: string
17089
18217
  enum: [logs, metrics, traces, profiles]
@@ -17163,10 +18291,235 @@ components:
17163
18291
  items:
17164
18292
  $ref: "#/components/schemas/ObservabilityProviderDefinition"
17165
18293
  additionalProperties: false
17166
- ObservabilityQueryScope:
18294
+ ObservabilityDashboardSource:
18295
+ type: string
18296
+ enum: [grafana]
18297
+ x-enum-varnames:
18298
+ - ObservabilityDashboardSourceGrafana
18299
+ ObservabilityDashboardPanelType:
18300
+ type: string
18301
+ enum: [timeseries, stat, text, row]
18302
+ x-enum-varnames:
18303
+ - ObservabilityDashboardPanelTypeTimeseries
18304
+ - ObservabilityDashboardPanelTypeStat
18305
+ - ObservabilityDashboardPanelTypeText
18306
+ - ObservabilityDashboardPanelTypeRow
18307
+ ObservabilityDashboardPanelLayout:
17167
18308
  type: object
18309
+ required: [x, y, w, h]
17168
18310
  properties:
17169
- clusterId:
18311
+ x:
18312
+ type: integer
18313
+ minimum: 0
18314
+ maximum: 23
18315
+ y:
18316
+ type: integer
18317
+ minimum: 0
18318
+ w:
18319
+ type: integer
18320
+ minimum: 1
18321
+ maximum: 24
18322
+ h:
18323
+ type: integer
18324
+ minimum: 1
18325
+ maximum: 100
18326
+ additionalProperties: false
18327
+ ObservabilityDashboardTarget:
18328
+ type: object
18329
+ required: [refId, expression]
18330
+ properties:
18331
+ refId:
18332
+ type: string
18333
+ minLength: 1
18334
+ maxLength: 16
18335
+ expression:
18336
+ type: string
18337
+ minLength: 1
18338
+ maxLength: 8192
18339
+ legend:
18340
+ type: string
18341
+ maxLength: 256
18342
+ additionalProperties: false
18343
+ ObservabilityDashboardPanel:
18344
+ type: object
18345
+ required: [id, title, type, layout, targets, queryable]
18346
+ properties:
18347
+ id:
18348
+ type: string
18349
+ minLength: 1
18350
+ maxLength: 128
18351
+ title:
18352
+ type: string
18353
+ minLength: 1
18354
+ maxLength: 200
18355
+ type:
18356
+ $ref: "#/components/schemas/ObservabilityDashboardPanelType"
18357
+ layout:
18358
+ $ref: "#/components/schemas/ObservabilityDashboardPanelLayout"
18359
+ targets:
18360
+ type: array
18361
+ maxItems: 8
18362
+ items:
18363
+ $ref: "#/components/schemas/ObservabilityDashboardTarget"
18364
+ queryable:
18365
+ type: boolean
18366
+ markdown:
18367
+ type: string
18368
+ maxLength: 32768
18369
+ additionalProperties: false
18370
+ ObservabilityDashboard:
18371
+ type: object
18372
+ required: [id, name, source, tags, panels, createdAt, updatedAt]
18373
+ properties:
18374
+ id:
18375
+ type: string
18376
+ minLength: 1
18377
+ maxLength: 128
18378
+ name:
18379
+ type: string
18380
+ minLength: 1
18381
+ maxLength: 200
18382
+ source:
18383
+ $ref: "#/components/schemas/ObservabilityDashboardSource"
18384
+ sourceSchemaVersion:
18385
+ type: integer
18386
+ minimum: 0
18387
+ dataSourceId:
18388
+ type: string
18389
+ maxLength: 200
18390
+ tags:
18391
+ type: array
18392
+ maxItems: 50
18393
+ uniqueItems: true
18394
+ items:
18395
+ type: string
18396
+ minLength: 1
18397
+ maxLength: 100
18398
+ panels:
18399
+ type: array
18400
+ maxItems: 200
18401
+ items:
18402
+ $ref: "#/components/schemas/ObservabilityDashboardPanel"
18403
+ createdAt:
18404
+ type: string
18405
+ format: date-time
18406
+ updatedAt:
18407
+ type: string
18408
+ format: date-time
18409
+ additionalProperties: false
18410
+ ObservabilityDashboardEnvelope:
18411
+ type: object
18412
+ required: [data]
18413
+ properties:
18414
+ data:
18415
+ $ref: "#/components/schemas/ObservabilityDashboard"
18416
+ additionalProperties: false
18417
+ ObservabilityDashboardListEnvelope:
18418
+ type: object
18419
+ required: [items]
18420
+ properties:
18421
+ items:
18422
+ type: array
18423
+ items:
18424
+ $ref: "#/components/schemas/ObservabilityDashboard"
18425
+ additionalProperties: false
18426
+ ObservabilityGrafanaDashboardImportInput:
18427
+ type: object
18428
+ required: [json, dataSourceId]
18429
+ properties:
18430
+ json:
18431
+ type: string
18432
+ minLength: 2
18433
+ maxLength: 2097152
18434
+ description: Grafana Classic dashboard JSON or a V1 resource whose spec contains the Classic dashboard model.
18435
+ dataSourceId:
18436
+ type: string
18437
+ minLength: 1
18438
+ maxLength: 200
18439
+ description: Enabled Soha Prometheus data source used by every imported queryable panel.
18440
+ additionalProperties: false
18441
+ ObservabilityMetricDataSource:
18442
+ type: object
18443
+ required: [id, name]
18444
+ properties:
18445
+ id:
18446
+ type: string
18447
+ minLength: 1
18448
+ maxLength: 200
18449
+ name:
18450
+ type: string
18451
+ minLength: 1
18452
+ maxLength: 200
18453
+ additionalProperties: false
18454
+ ObservabilityMetricDataSourceListEnvelope:
18455
+ type: object
18456
+ required: [items]
18457
+ properties:
18458
+ items:
18459
+ type: array
18460
+ items:
18461
+ $ref: "#/components/schemas/ObservabilityMetricDataSource"
18462
+ additionalProperties: false
18463
+ ObservabilityDashboardImportWarning:
18464
+ type: object
18465
+ required: [code, message]
18466
+ properties:
18467
+ code:
18468
+ type: string
18469
+ enum: [unsupported_panel_type, skipped_target, unsupported_variable, datasource_rebound, unsupported_feature]
18470
+ message:
18471
+ type: string
18472
+ minLength: 1
18473
+ maxLength: 500
18474
+ panelId:
18475
+ type: string
18476
+ maxLength: 128
18477
+ additionalProperties: false
18478
+ ObservabilityDashboardImportResult:
18479
+ type: object
18480
+ required: [dashboard, warnings, importedPanelCount, skippedPanelCount]
18481
+ properties:
18482
+ dashboard:
18483
+ $ref: "#/components/schemas/ObservabilityDashboard"
18484
+ warnings:
18485
+ type: array
18486
+ maxItems: 500
18487
+ items:
18488
+ $ref: "#/components/schemas/ObservabilityDashboardImportWarning"
18489
+ importedPanelCount:
18490
+ type: integer
18491
+ minimum: 1
18492
+ skippedPanelCount:
18493
+ type: integer
18494
+ minimum: 0
18495
+ additionalProperties: false
18496
+ ObservabilityDashboardImportResultEnvelope:
18497
+ type: object
18498
+ required: [data]
18499
+ properties:
18500
+ data:
18501
+ $ref: "#/components/schemas/ObservabilityDashboardImportResult"
18502
+ additionalProperties: false
18503
+ ObservabilityDashboardPanelQueryInput:
18504
+ type: object
18505
+ required: [timeFrom, timeTo]
18506
+ properties:
18507
+ timeFrom:
18508
+ type: string
18509
+ format: date-time
18510
+ timeTo:
18511
+ type: string
18512
+ format: date-time
18513
+ stepSeconds:
18514
+ type: integer
18515
+ minimum: 1
18516
+ maximum: 3600
18517
+ default: 60
18518
+ additionalProperties: false
18519
+ ObservabilityQueryScope:
18520
+ type: object
18521
+ properties:
18522
+ clusterId:
17170
18523
  type: string
17171
18524
  maxLength: 128
17172
18525
  namespace:
@@ -20033,6 +21386,185 @@ components:
20033
21386
  items:
20034
21387
  type: string
20035
21388
  additionalProperties: false
21389
+ CompanionAsset:
21390
+ type: object
21391
+ required: [path, kind, contentType, sizeBytes, sha256]
21392
+ properties:
21393
+ path:
21394
+ type: string
21395
+ minLength: 1
21396
+ maxLength: 512
21397
+ pattern: "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[A-Za-z0-9._/-]+$"
21398
+ kind:
21399
+ type: string
21400
+ enum: [entry, model, texture, motion, expression, physics, pose, thumbnail, audio]
21401
+ contentType:
21402
+ type: string
21403
+ enum: [application/json, application/octet-stream, image/png, image/jpeg, image/webp, image/svg+xml, audio/mpeg, audio/ogg]
21404
+ sizeBytes:
21405
+ type: integer
21406
+ format: int64
21407
+ minimum: 1
21408
+ maximum: 67108864
21409
+ sha256:
21410
+ type: string
21411
+ pattern: "^sha256:[a-f0-9]{64}$"
21412
+ additionalProperties: false
21413
+ CompanionAnimationBindings:
21414
+ type: object
21415
+ properties:
21416
+ idle: { type: string, minLength: 1 }
21417
+ listening: { type: string, minLength: 1 }
21418
+ thinking: { type: string, minLength: 1 }
21419
+ speaking: { type: string, minLength: 1 }
21420
+ error: { type: string, minLength: 1 }
21421
+ dragging: { type: string, minLength: 1 }
21422
+ hover: { type: string, minLength: 1 }
21423
+ tap: { type: string, minLength: 1 }
21424
+ additionalProperties: false
21425
+ CompanionInteractionDefinition:
21426
+ type: object
21427
+ required: [id, action]
21428
+ properties:
21429
+ id:
21430
+ type: string
21431
+ pattern: "^[a-z][a-z0-9._-]*$"
21432
+ label: { type: string, minLength: 1, maxLength: 64 }
21433
+ action:
21434
+ type: string
21435
+ enum: [tap, pet, feed, play, greet]
21436
+ animation: { type: string, minLength: 1 }
21437
+ cooldownSeconds: { type: integer, minimum: 0, maximum: 86400 }
21438
+ rewardXp: { type: integer, minimum: 0, maximum: 1000 }
21439
+ rewardAffinity: { type: integer, minimum: 0, maximum: 100 }
21440
+ additionalProperties: false
21441
+ CompanionUnlockDefinition:
21442
+ type: object
21443
+ required: [id, kind, level, ref]
21444
+ properties:
21445
+ id:
21446
+ type: string
21447
+ pattern: "^[a-z][a-z0-9._-]*$"
21448
+ kind:
21449
+ type: string
21450
+ enum: [interaction, animation, expression, asset]
21451
+ level: { type: integer, minimum: 1, maximum: 100 }
21452
+ ref: { type: string, minLength: 1 }
21453
+ additionalProperties: false
21454
+ CompanionPackLicense:
21455
+ type: object
21456
+ required: [name, url, redistributionAllowed, commercialUseAllowed]
21457
+ properties:
21458
+ name: { type: string, minLength: 1 }
21459
+ spdxId: { type: string, minLength: 1 }
21460
+ url: { type: string, format: uri }
21461
+ sourceUrl: { type: string, format: uri }
21462
+ attribution: { type: string, maxLength: 2048 }
21463
+ redistributionAllowed: { type: boolean, enum: [true] }
21464
+ commercialUseAllowed: { type: boolean }
21465
+ additionalProperties: false
21466
+ CompanionPackManifest:
21467
+ type: object
21468
+ required: [renderer, entryAsset, assets, license]
21469
+ properties:
21470
+ renderer:
21471
+ type: string
21472
+ enum: [svg, sprite, live2d-cubism]
21473
+ entryAsset:
21474
+ type: string
21475
+ minLength: 1
21476
+ maxLength: 512
21477
+ pattern: "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[A-Za-z0-9._/-]+$"
21478
+ thumbnailAsset:
21479
+ type: string
21480
+ minLength: 1
21481
+ maxLength: 512
21482
+ pattern: "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[A-Za-z0-9._/-]+$"
21483
+ modelFormatVersion: { type: string, minLength: 1 }
21484
+ assets:
21485
+ type: array
21486
+ minItems: 1
21487
+ maxItems: 512
21488
+ items:
21489
+ $ref: "#/components/schemas/CompanionAsset"
21490
+ animations:
21491
+ $ref: "#/components/schemas/CompanionAnimationBindings"
21492
+ interactions:
21493
+ type: array
21494
+ maxItems: 64
21495
+ items:
21496
+ $ref: "#/components/schemas/CompanionInteractionDefinition"
21497
+ unlocks:
21498
+ type: array
21499
+ maxItems: 128
21500
+ items:
21501
+ $ref: "#/components/schemas/CompanionUnlockDefinition"
21502
+ license:
21503
+ $ref: "#/components/schemas/CompanionPackLicense"
21504
+ additionalProperties: false
21505
+ PluginPackageDescriptor:
21506
+ type: object
21507
+ required: [url, contentType, sizeBytes, sha256]
21508
+ properties:
21509
+ url: { type: string, format: uri }
21510
+ contentType:
21511
+ type: string
21512
+ enum: [application/zip, application/gzip, application/x-tar]
21513
+ sizeBytes:
21514
+ type: integer
21515
+ format: int64
21516
+ minimum: 1
21517
+ maximum: 268435456
21518
+ sha256:
21519
+ type: string
21520
+ pattern: "^sha256:[a-f0-9]{64}$"
21521
+ signature: { type: string, minLength: 1 }
21522
+ signatureAlgorithm:
21523
+ type: string
21524
+ enum: [ed25519]
21525
+ signingKeyId:
21526
+ type: string
21527
+ pattern: "^[a-z][a-z0-9._-]*$"
21528
+ provenanceUrl: { type: string, format: uri }
21529
+ sbomUrl: { type: string, format: uri }
21530
+ additionalProperties: false
21531
+ PluginProvenanceStatement:
21532
+ type: object
21533
+ description: The Ed25519 signature covers UTF-8 lines subjectSha256, builderId, sourceUri, sourceCommit, and builtAt in that order, joined with LF and without a trailing LF.
21534
+ required: [subjectSha256, builderId, sourceUri, sourceCommit, builtAt, signingKeyId, signatureAlgorithm, signature]
21535
+ properties:
21536
+ subjectSha256:
21537
+ type: string
21538
+ pattern: "^sha256:[a-f0-9]{64}$"
21539
+ builderId: { type: string, minLength: 1, maxLength: 512 }
21540
+ sourceUri: { type: string, format: uri }
21541
+ sourceCommit: { type: string, pattern: "^[A-Fa-f0-9]{7,64}$" }
21542
+ builtAt: { type: string, format: date-time }
21543
+ signingKeyId: { type: string, pattern: "^[a-z][a-z0-9._-]*$" }
21544
+ signatureAlgorithm: { type: string, enum: [ed25519] }
21545
+ signature: { type: string, minLength: 1 }
21546
+ additionalProperties: false
21547
+ PluginArtifactRecord:
21548
+ type: object
21549
+ required: [version, sha256, sizeBytes, checksumStatus, signatureStatus, provenanceStatus, active]
21550
+ properties:
21551
+ version: { type: string }
21552
+ sha256:
21553
+ type: string
21554
+ pattern: "^sha256:[a-f0-9]{64}$"
21555
+ sizeBytes: { type: integer, format: int64, minimum: 1 }
21556
+ checksumStatus:
21557
+ type: string
21558
+ enum: [verified, mismatch]
21559
+ signatureStatus:
21560
+ type: string
21561
+ enum: [verified, not_provided, untrusted, invalid]
21562
+ provenanceStatus:
21563
+ type: string
21564
+ enum: [verified, not_provided, invalid]
21565
+ active: { type: boolean }
21566
+ installedAt: { type: string, format: date-time }
21567
+ additionalProperties: false
20036
21568
  PluginCompatibility:
20037
21569
  type: object
20038
21570
  properties:
@@ -20536,6 +22068,8 @@ components:
20536
22068
  type: string
20537
22069
  signature:
20538
22070
  type: string
22071
+ package:
22072
+ $ref: "#/components/schemas/PluginPackageDescriptor"
20539
22073
  publishedAt:
20540
22074
  type: string
20541
22075
  format: date-time
@@ -20626,6 +22160,7 @@ components:
20626
22160
  - notification-channel
20627
22161
  - identity-template
20628
22162
  - ui-extension
22163
+ - companion-pack
20629
22164
  description:
20630
22165
  type: string
20631
22166
  homepage:
@@ -20650,6 +22185,8 @@ components:
20650
22185
  $ref: "#/components/schemas/PluginIntegrity"
20651
22186
  runtime:
20652
22187
  $ref: "#/components/schemas/PluginRuntimeSpec"
22188
+ companionPack:
22189
+ $ref: "#/components/schemas/CompanionPackManifest"
20653
22190
  configSchema:
20654
22191
  $ref: "#/components/schemas/JSONSchema"
20655
22192
  extensionPoints:
@@ -20767,6 +22304,188 @@ components:
20767
22304
  installed:
20768
22305
  type: boolean
20769
22306
  additionalProperties: false
22307
+ SoftwarePackage:
22308
+ type: object
22309
+ required:
22310
+ [id, softwareId, name, publisher, version, platform, arch, fileName, sizeBytes, sha256, downloadPath, createdAt, updatedAt]
22311
+ properties:
22312
+ id:
22313
+ type: string
22314
+ minLength: 1
22315
+ maxLength: 128
22316
+ softwareId:
22317
+ type: string
22318
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22319
+ name:
22320
+ type: string
22321
+ minLength: 1
22322
+ maxLength: 100
22323
+ description:
22324
+ type: string
22325
+ maxLength: 500
22326
+ publisher:
22327
+ type: string
22328
+ minLength: 1
22329
+ maxLength: 100
22330
+ category:
22331
+ type: string
22332
+ maxLength: 50
22333
+ version:
22334
+ type: string
22335
+ minLength: 1
22336
+ maxLength: 64
22337
+ platform:
22338
+ type: string
22339
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22340
+ arch:
22341
+ type: string
22342
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22343
+ fileName:
22344
+ type: string
22345
+ minLength: 1
22346
+ maxLength: 255
22347
+ sizeBytes:
22348
+ type: integer
22349
+ format: int64
22350
+ minimum: 1
22351
+ maximum: 4294967296
22352
+ sha256:
22353
+ type: string
22354
+ pattern: "^[0-9a-f]{64}$"
22355
+ downloadPath:
22356
+ type: string
22357
+ pattern: "^/api/v1/software/packages/[^/]+/download$"
22358
+ createdAt:
22359
+ type: string
22360
+ format: date-time
22361
+ updatedAt:
22362
+ type: string
22363
+ format: date-time
22364
+ additionalProperties: false
22365
+ SoftwarePackageEnvelope:
22366
+ type: object
22367
+ required: [data]
22368
+ properties:
22369
+ data:
22370
+ $ref: "#/components/schemas/SoftwarePackage"
22371
+ additionalProperties: false
22372
+ SoftwarePackageListEnvelope:
22373
+ type: object
22374
+ required: [items]
22375
+ properties:
22376
+ items:
22377
+ type: array
22378
+ items:
22379
+ $ref: "#/components/schemas/SoftwarePackage"
22380
+ nextCursor:
22381
+ type: string
22382
+ additionalProperties: false
22383
+ SoftwarePackageUploadRequest:
22384
+ type: object
22385
+ required: [softwareId, name, publisher, version, platform, arch, file]
22386
+ properties:
22387
+ softwareId:
22388
+ type: string
22389
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22390
+ name:
22391
+ type: string
22392
+ minLength: 1
22393
+ maxLength: 100
22394
+ description:
22395
+ type: string
22396
+ maxLength: 500
22397
+ publisher:
22398
+ type: string
22399
+ minLength: 1
22400
+ maxLength: 100
22401
+ category:
22402
+ type: string
22403
+ maxLength: 50
22404
+ version:
22405
+ type: string
22406
+ minLength: 1
22407
+ maxLength: 64
22408
+ platform:
22409
+ type: string
22410
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22411
+ arch:
22412
+ type: string
22413
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22414
+ file:
22415
+ type: string
22416
+ format: binary
22417
+ additionalProperties: false
22418
+ SoftwarePackageURLImportRequest:
22419
+ type: object
22420
+ required: [softwareId, name, publisher, version, platform, arch, url]
22421
+ properties:
22422
+ softwareId:
22423
+ type: string
22424
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22425
+ name:
22426
+ type: string
22427
+ minLength: 1
22428
+ maxLength: 100
22429
+ description:
22430
+ type: string
22431
+ maxLength: 500
22432
+ publisher:
22433
+ type: string
22434
+ minLength: 1
22435
+ maxLength: 100
22436
+ category:
22437
+ type: string
22438
+ maxLength: 50
22439
+ version:
22440
+ type: string
22441
+ minLength: 1
22442
+ maxLength: 64
22443
+ platform:
22444
+ type: string
22445
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22446
+ arch:
22447
+ type: string
22448
+ pattern: "^[a-z0-9][a-z0-9._-]{0,63}$"
22449
+ url:
22450
+ type: string
22451
+ format: uri
22452
+ pattern: "^https://"
22453
+ maxLength: 2048
22454
+ fileName:
22455
+ type: string
22456
+ minLength: 1
22457
+ maxLength: 255
22458
+ additionalProperties: false
22459
+ SoftwareStorage:
22460
+ type: object
22461
+ required: [backend, objectCount, totalBytes, items]
22462
+ properties:
22463
+ backend:
22464
+ type: string
22465
+ minLength: 1
22466
+ maxLength: 64
22467
+ objectCount:
22468
+ type: integer
22469
+ format: int64
22470
+ minimum: 0
22471
+ totalBytes:
22472
+ type: integer
22473
+ format: int64
22474
+ minimum: 0
22475
+ items:
22476
+ type: array
22477
+ items:
22478
+ $ref: "#/components/schemas/SoftwarePackage"
22479
+ nextCursor:
22480
+ type: string
22481
+ additionalProperties: false
22482
+ SoftwareStorageEnvelope:
22483
+ type: object
22484
+ required: [data]
22485
+ properties:
22486
+ data:
22487
+ $ref: "#/components/schemas/SoftwareStorage"
22488
+ additionalProperties: false
20770
22489
  InstalledPlugin:
20771
22490
  type: object
20772
22491
  required: [id, name, version, publisher, type, status, source, manifest, checksumStatus, installedBy, installedAt, updatedAt]
@@ -20792,6 +22511,12 @@ components:
20792
22511
  type: string
20793
22512
  signatureStatus:
20794
22513
  type: string
22514
+ activeVersion:
22515
+ type: string
22516
+ artifacts:
22517
+ type: array
22518
+ items:
22519
+ $ref: "#/components/schemas/PluginArtifactRecord"
20795
22520
  requestedPermissions:
20796
22521
  $ref: "#/components/schemas/PluginPermissionRequest"
20797
22522
  configuredSecretRefs:
@@ -20833,9 +22558,89 @@ components:
20833
22558
  $ref: "#/components/schemas/PluginManifest"
20834
22559
  expectedChecksum:
20835
22560
  type: string
22561
+ package:
22562
+ $ref: "#/components/schemas/PluginPackageDescriptor"
20836
22563
  enable:
20837
22564
  type: boolean
20838
22565
  additionalProperties: false
22566
+ CompanionActivationRequest:
22567
+ type: object
22568
+ properties:
22569
+ version: { type: string, minLength: 1 }
22570
+ additionalProperties: false
22571
+ CompanionRollbackRequest:
22572
+ type: object
22573
+ required: [version]
22574
+ properties:
22575
+ version: { type: string, minLength: 1 }
22576
+ reason: { type: string, maxLength: 512 }
22577
+ additionalProperties: false
22578
+ CompanionProfile:
22579
+ type: object
22580
+ required: [id, ownerId, activePluginId, activeVersion, level, xp, affinity, unlockedIds, revision, createdAt, updatedAt]
22581
+ properties:
22582
+ id: { type: string }
22583
+ ownerId: { type: string }
22584
+ activePluginId: { type: string }
22585
+ activeVersion: { type: string }
22586
+ level: { type: integer, minimum: 1, maximum: 100 }
22587
+ xp: { type: integer, minimum: 0 }
22588
+ affinity: { type: integer, minimum: 0 }
22589
+ unlockedIds:
22590
+ type: array
22591
+ uniqueItems: true
22592
+ items: { type: string }
22593
+ revision: { type: integer, format: int64, minimum: 1 }
22594
+ lastInteractionAt: { type: string, format: date-time }
22595
+ createdAt: { type: string, format: date-time }
22596
+ updatedAt: { type: string, format: date-time }
22597
+ additionalProperties: false
22598
+ CompanionInteractionRequest:
22599
+ type: object
22600
+ required: [pluginId, interactionId]
22601
+ properties:
22602
+ pluginId: { type: string }
22603
+ interactionId:
22604
+ type: string
22605
+ pattern: "^[a-z][a-z0-9._-]*$"
22606
+ sessionId: { type: string }
22607
+ messageId: { type: string }
22608
+ clientRevision: { type: integer, format: int64, minimum: 1 }
22609
+ additionalProperties: false
22610
+ CompanionInteractionReceipt:
22611
+ type: object
22612
+ required: [idempotencyKey, applied, xpAwarded, affinityAwarded, unlockedIds, profile]
22613
+ properties:
22614
+ idempotencyKey: { type: string }
22615
+ applied: { type: boolean }
22616
+ xpAwarded: { type: integer, minimum: 0 }
22617
+ affinityAwarded: { type: integer, minimum: 0 }
22618
+ unlockedIds:
22619
+ type: array
22620
+ uniqueItems: true
22621
+ items: { type: string }
22622
+ profile:
22623
+ $ref: "#/components/schemas/CompanionProfile"
22624
+ additionalProperties: false
22625
+ CompanionProfileResetRequest:
22626
+ type: object
22627
+ properties:
22628
+ pluginId: { type: string }
22629
+ additionalProperties: false
22630
+ CompanionProfileEnvelope:
22631
+ type: object
22632
+ required: [data]
22633
+ properties:
22634
+ data:
22635
+ $ref: "#/components/schemas/CompanionProfile"
22636
+ additionalProperties: false
22637
+ CompanionInteractionReceiptEnvelope:
22638
+ type: object
22639
+ required: [data]
22640
+ properties:
22641
+ data:
22642
+ $ref: "#/components/schemas/CompanionInteractionReceipt"
22643
+ additionalProperties: false
20839
22644
  PluginConfigRequest:
20840
22645
  type: object
20841
22646
  properties: