@opensoha/contracts 0.1.18 → 0.1.20

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 (49) hide show
  1. package/COMPATIBILITY.md +33 -6
  2. package/README.md +1 -0
  3. package/compat/consumer-revisions.json +5 -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/fixtures/openapi/AgentPrometheusQueryRequest/invalid/basic.json +5 -0
  7. package/fixtures/openapi/AgentPrometheusQueryRequest/invalid/missing-range-fields.json +5 -0
  8. package/fixtures/openapi/AgentPrometheusQueryRequest/invalid/zero-start.json +8 -0
  9. package/fixtures/openapi/AgentPrometheusQueryRequest/valid/basic.json +8 -0
  10. package/fixtures/openapi/AgentPrometheusQueryRequest/valid/instant.json +5 -0
  11. package/fixtures/openapi/ClusterAgentUpgradeInput/invalid/image.json +1 -0
  12. package/fixtures/openapi/ClusterAgentUpgradeInput/invalid/missing.json +1 -0
  13. package/fixtures/openapi/ClusterAgentUpgradeInput/invalid/mutable-tag.json +1 -0
  14. package/fixtures/openapi/ClusterAgentUpgradeInput/valid/stable.json +1 -0
  15. package/fixtures/openapi/ClusterAgentUpgradeInput/valid/unprefixed.json +1 -0
  16. package/fixtures/openapi/ConnectionCheckResult/invalid/missing-health.json +1 -0
  17. package/fixtures/openapi/ConnectionCheckResult/invalid/task-id.json +1 -0
  18. package/fixtures/openapi/ConnectionCheckResult/valid/failure.json +1 -0
  19. package/fixtures/openapi/ConnectionCheckResult/valid/healthy.json +1 -0
  20. package/fixtures/openapi/KubernetesAgentCustomResourceRule/invalid/basic.json +9 -0
  21. package/fixtures/openapi/KubernetesAgentCustomResourceRule/valid/basic.json +14 -0
  22. package/fixtures/openapi/KubernetesAgentCustomResourceRule/valid/dns-names.json +1 -0
  23. package/fixtures/openapi/KubernetesClusterRegistrationRequest/invalid/basic.json +4 -0
  24. package/fixtures/openapi/KubernetesClusterRegistrationRequest/valid/basic.json +6 -0
  25. package/fixtures/openapi/KubernetesConfigMapDataInput/invalid/basic.json +5 -0
  26. package/fixtures/openapi/KubernetesConfigMapDataInput/valid/basic.json +8 -0
  27. package/fixtures/openapi/KubernetesCronJobSuspendInput/invalid/basic.json +3 -0
  28. package/fixtures/openapi/KubernetesCronJobSuspendInput/valid/basic.json +3 -0
  29. package/fixtures/openapi/KubernetesCustomResourceAccess/invalid/basic.json +5 -0
  30. package/fixtures/openapi/KubernetesCustomResourceAccess/valid/basic.json +6 -0
  31. package/fixtures/openapi/KubernetesNamespaceCreateInput/invalid/basic.json +1 -0
  32. package/fixtures/openapi/KubernetesNamespaceCreateInput/valid/basic.json +1 -0
  33. package/fixtures/openapi/KubernetesNodeDrainInput/invalid/basic.json +3 -0
  34. package/fixtures/openapi/KubernetesNodeDrainInput/valid/basic.json +3 -0
  35. package/fixtures/openapi/KubernetesNodeSchedulabilityInput/invalid/basic.json +1 -0
  36. package/fixtures/openapi/KubernetesNodeSchedulabilityInput/valid/basic.json +3 -0
  37. package/fixtures/openapi/KubernetesSecretDataInput/invalid/basic.json +5 -0
  38. package/fixtures/openapi/KubernetesSecretDataInput/valid/basic.json +5 -0
  39. package/fixtures/openapi/UpdateBrandingSettingsRequest/invalid/dark-logo-type.json +9 -0
  40. package/fixtures/openapi/UpdateBrandingSettingsRequest/valid/dark-logos.json +10 -0
  41. package/gen/go/sohaapi/client.go +11 -3
  42. package/gen/go/sohaapi/client_test.go +26 -3
  43. package/gen/go/sohaapi/types.go +121 -23
  44. package/gen/ts/sohaapi/index.ts +208 -2
  45. package/openapi/soha-api.json +623 -4
  46. package/openapi/soha-api.yaml +317 -3
  47. package/openapi/spec_generated.go +3 -3
  48. package/package.json +1 -1
  49. package/resource/agent_access.go +23 -0
package/COMPATIBILITY.md CHANGED
@@ -364,6 +364,31 @@ role migration and consumer conformance prove no active dependency.
364
364
 
365
365
  ## Consumer Adoption
366
366
 
367
+ Connection tests and Compute provider health checks return HTTP 200 with
368
+ `ConnectionCheckResultEnvelope` after each fresh probe. Consumers read `healthy`
369
+ and the diagnostic fields directly; no task or task log is created. The Compute
370
+ endpoint still accepts `Idempotency-Key` for request compatibility, but it no
371
+ longer replays stored checks. Operation/audit logs and existing task history are
372
+ preserved. HTTP 202 task envelopes remain documented for older servers. Core,
373
+ Web and CLI must adopt the new HTTP 200 result together. Discovery and asset
374
+ synchronization remain asynchronous. The Go SDK
375
+ `CheckComputeProviderInstanceHealth` method now returns `ConnectionCheckResult`
376
+ instead of `ComputeTaskView`; callers consuming its fields must update with Core
377
+ to preserve the immediate health result and diagnostic details. Upgrade Core
378
+ before these clients. The SDK rejects legacy task responses with a server-upgrade
379
+ error instead of reporting an empty health result; the 202 schema documents older
380
+ server wire behavior and does not promise task polling in the new check method.
381
+
382
+ Docker port mapping creation reserves control-plane metadata synchronously; it
383
+ does not enqueue `port_reserve` or bind a host port. Existing operation kinds and
384
+ historical records remain compatible. Service log readers use the existing
385
+ project runtime logs API. The service-action API accepts start, stop and restart;
386
+ `logs` returns an invalid-argument error directing callers to the direct project
387
+ log query instead of creating a task. Compute resource actions expose only these
388
+ mutations. Historical `connection_test`, `port_reserve`, and `service_action`
389
+ with action `logs` remain readable, but their operation state is not retryable
390
+ and retry requests are rejected without requeueing or appending task logs.
391
+
367
392
  Recommended adoption flow:
368
393
 
369
394
  1. Change contracts and fixtures here first.
@@ -402,9 +427,11 @@ behavior.
402
427
 
403
428
  ## Contracts-first consumer revisions
404
429
 
405
- `compat/consumer-revisions.json` pins a reviewed consumer commit when a contracts
406
- release introduces APIs implemented by that consumer's pending change. Both CI
407
- and release use the same commit and run the complete existing consumer checks.
408
- Unlisted consumers use `main`. Replace the pin with `main` (or remove it) once the
409
- matching consumer changes reach its default branch; do not skip failed checks to
410
- resolve a release-order dependency.
430
+ `compat/consumer-revisions.json` pins a reviewed full commit SHA for every consumer
431
+ in the executable matrix. CI and release use `scripts/select-consumer-revision.mjs`;
432
+ missing or invalid revisions fail instead of falling back to `main`. Update a pin
433
+ only with an explicit compatibility reason and successful matrix evidence.
434
+
435
+ Manual CI may select `consumer_mode=latest` for separate integration evidence.
436
+ This does not rewrite the fixed manifest or replace fixed-combination acceptance.
437
+ Record the actual contracts and consumer commits, not only the selected mode.
package/README.md CHANGED
@@ -169,6 +169,7 @@ npm run check:consumers -- --consumer soha --require-all
169
169
  npm run check:consumers -- --consumer soha-web --require-all
170
170
  npm run check:consumers -- --consumer soha-cli --require-all
171
171
  npm run check:consumers -- --consumer soha-agent --require-all
172
+ npm run check:consumers -- --consumer soha-skills --require-all
172
173
  ```
173
174
 
174
175
  Go consumers run in a temporary `go.work` that replaces the contracts module
@@ -1,3 +1,7 @@
1
1
  {
2
- "soha": "d675a708806072a2fee42e3c2c00309091a8cfb9"
2
+ "soha": "d675a708806072a2fee42e3c2c00309091a8cfb9",
3
+ "soha-web": "816ec0fb82e6e804f0f66d47d3446a7b5baeabc1",
4
+ "soha-cli": "1c9b760c986a9c1a5148db55b72ab99d23edd7a3",
5
+ "soha-agent": "af1efc0b0cd6bb544153429fa28244dd6cc81ac7",
6
+ "soha-skills": "0345171ee1c9f23ab5d4350767395d0919dfb21c"
3
7
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.18",
2
+ "version": "0.1.20",
3
3
  "schemas": {
4
4
  "plugins/plugin-manifest.schema.json": {
5
5
  "rootRequired": ["id", "name", "publisher", "type", "version"],
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.18",
2
+ "version": "0.1.20",
3
3
  "generatedFrom": "openapi/soha-api.yaml",
4
4
  "entries": [
5
5
  {
@@ -0,0 +1,5 @@
1
+ {
2
+ "endpoint": "http://prometheus:9090",
3
+ "query": "",
4
+ "kind": "proxy"
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "endpoint": "http://prometheus.monitoring.svc:9090",
3
+ "query": "up",
4
+ "kind": "range"
5
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "endpoint": "http://prometheus.monitoring.svc:9090",
3
+ "query": "up",
4
+ "kind": "range",
5
+ "start": 0,
6
+ "end": 100,
7
+ "step": 1
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "endpoint": "http://prometheus.monitoring:9090",
3
+ "query": "up",
4
+ "kind": "range",
5
+ "start": 1,
6
+ "end": 60,
7
+ "step": 10
8
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "endpoint": "http://prometheus.monitoring.svc:9090",
3
+ "query": "up",
4
+ "kind": "instant"
5
+ }
@@ -0,0 +1 @@
1
+ {"version":"other.example/agent:latest"}
@@ -0,0 +1 @@
1
+ {"version":"v0.1.7"}
@@ -0,0 +1 @@
1
+ {"version":"0.1.7"}
@@ -0,0 +1 @@
1
+ {"status":"healthy","checkedAt":"2026-09-22T00:00:00Z"}
@@ -0,0 +1 @@
1
+ {"healthy":true,"status":"healthy","checkedAt":"2026-09-22T00:00:00Z","id":"task-1"}
@@ -0,0 +1 @@
1
+ {"healthy":false,"status":"unavailable","message":"Connection refused","reason":"network","checkedAt":"2026-09-22T00:00:00Z"}
@@ -0,0 +1 @@
1
+ {"healthy":true,"status":"healthy","checkedAt":"2026-09-22T00:00:00Z"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "apiGroup": "*",
3
+ "resources": [
4
+ "*"
5
+ ],
6
+ "verbs": [
7
+ "*"
8
+ ]
9
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "apiGroup": "example.io",
3
+ "resources": [
4
+ "widgets"
5
+ ],
6
+ "verbs": [
7
+ "get",
8
+ "list",
9
+ "update"
10
+ ],
11
+ "namespaces": [
12
+ "apps"
13
+ ]
14
+ }
@@ -0,0 +1 @@
1
+ {"apiGroup":"apps--demo.example.io","resources":["widget-sets"],"verbs":["get","list"],"namespaces":["apps"]}
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "private",
3
+ "prometheusTransport": "fallback"
4
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "private",
3
+ "connectionMode": "agent",
4
+ "prometheusTransport": "agent",
5
+ "agentCustomResourceRules": []
6
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "data": {
3
+ "key": 1
4
+ }
5
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "data": {
3
+ "key": "text"
4
+ },
5
+ "binaryData": {
6
+ "payload": "AAEC"
7
+ }
8
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "suspend": "yes"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "suspend": true
3
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "allowedActions": [
3
+ "*"
4
+ ]
5
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "allowedActions": [
3
+ "list",
4
+ "view"
5
+ ]
6
+ }
@@ -0,0 +1 @@
1
+ {"name":"team-a","labels":{"environment":"test"}}
@@ -0,0 +1,3 @@
1
+ {
2
+ "timeoutSeconds": 29
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "timeoutSeconds": 30
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "unschedulable": false
3
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "data": {
3
+ "example": true
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "data": {
3
+ "example": "example-value"
4
+ }
5
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "appTitle": "Soha",
3
+ "sidebarTitle": "Soha",
4
+ "loginLogoUrl": "/logo.svg",
5
+ "expandedLogoUrl": "/logo.svg",
6
+ "collapsedLogoUrl": "/logo.svg",
7
+ "faviconUrl": "/logo.svg",
8
+ "darkExpandedLogoUrl": true
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "appTitle": "Soha",
3
+ "sidebarTitle": "Soha",
4
+ "loginLogoUrl": "/logo.svg",
5
+ "expandedLogoUrl": "/logo.svg",
6
+ "collapsedLogoUrl": "/logo.svg",
7
+ "faviconUrl": "/logo.svg",
8
+ "darkExpandedLogoUrl": "/brand-dark.svg",
9
+ "darkCollapsedLogoUrl": "/mark-dark.svg"
10
+ }
@@ -16,7 +16,7 @@ import (
16
16
  "time"
17
17
  )
18
18
 
19
- const defaultUserAgent = "opensoha-contracts/0.1.18"
19
+ const defaultUserAgent = "opensoha-contracts/0.1.20"
20
20
 
21
21
  type Client struct {
22
22
  BaseURL string
@@ -594,8 +594,16 @@ func (c *Client) GetComputeProviderInstance(ctx context.Context, domain ComputeP
594
594
  return out.Data, nil
595
595
  }
596
596
 
597
- func (c *Client) CheckComputeProviderInstanceHealth(ctx context.Context, domain ComputeProviderDomain, providerKey, instanceRef, idempotencyKey string, req ComputeProviderReadRequest) (ComputeTaskView, error) {
598
- return c.mutateComputeProviderInstance(ctx, domain, providerKey, instanceRef, "health-checks", idempotencyKey, req)
597
+ func (c *Client) CheckComputeProviderInstanceHealth(ctx context.Context, domain ComputeProviderDomain, providerKey, instanceRef, idempotencyKey string, req ComputeProviderReadRequest) (ConnectionCheckResult, error) {
598
+ var out ConnectionCheckResultEnvelope
599
+ path := computeProviderInstancePath(domain, providerKey, instanceRef) + "/health-checks"
600
+ if err := c.doJSONWithHeaders(ctx, http.MethodPost, path, true, req, &out, idempotencyHeader(idempotencyKey)); err != nil {
601
+ return ConnectionCheckResult{}, err
602
+ }
603
+ if out.Data.CheckedAt.IsZero() || strings.TrimSpace(out.Data.Status) == "" {
604
+ return ConnectionCheckResult{}, fmt.Errorf("connection health check returned no synchronous result; upgrade the server before using this client")
605
+ }
606
+ return out.Data, nil
599
607
  }
600
608
 
601
609
  func (c *Client) DiscoverComputeProviderInstance(ctx context.Context, domain ComputeProviderDomain, providerKey, instanceRef, idempotencyKey string, req ComputeProviderDiscoverRequest) (ComputeTaskView, error) {
@@ -414,7 +414,7 @@ func TestComputeInventoryClientSurface(t *testing.T) {
414
414
  if key := r.Header.Get("Idempotency-Key"); key != "health-key-1" {
415
415
  t.Fatalf("health Idempotency-Key = %q", key)
416
416
  }
417
- writeJSON(t, w, computeTaskEnvelopeFixture("health-task"))
417
+ writeJSON(t, w, map[string]any{"data": map[string]any{"healthy": true, "status": "healthy", "checkedAt": "2026-09-22T00:00:00Z"}})
418
418
  case 8:
419
419
  assertCommonRequest(t, r, http.MethodPost, "/api/v1/compute/provider-instances/virtualization/pve/connection%2Fone/discoveries")
420
420
  if key := r.Header.Get("Idempotency-Key"); key != "discover-key-1" {
@@ -458,8 +458,8 @@ func TestComputeInventoryClientSurface(t *testing.T) {
458
458
  if _, err := client.GetComputeProviderInstance(ctx, ComputeProviderDomainVirtualization, "pve", "connection/one"); err != nil {
459
459
  t.Fatal(err)
460
460
  }
461
- if _, err := client.CheckComputeProviderInstanceHealth(ctx, ComputeProviderDomainVirtualization, "pve", "connection/one", "health-key-1", ComputeProviderReadRequest{ExpectedGeneration: 1}); err != nil {
462
- t.Fatal(err)
461
+ if result, err := client.CheckComputeProviderInstanceHealth(ctx, ComputeProviderDomainVirtualization, "pve", "connection/one", "health-key-1", ComputeProviderReadRequest{ExpectedGeneration: 1}); err != nil || !result.Healthy || result.Status != "healthy" || result.CheckedAt.IsZero() {
462
+ t.Fatalf("CheckComputeProviderInstanceHealth = %#v, %v", result, err)
463
463
  }
464
464
  if _, err := client.DiscoverComputeProviderInstance(ctx, ComputeProviderDomainVirtualization, "pve", "connection/one", "discover-key-1", ComputeProviderDiscoverRequest{ExpectedGeneration: 1}); err != nil {
465
465
  t.Fatal(err)
@@ -475,6 +475,29 @@ func TestComputeInventoryClientSurface(t *testing.T) {
475
475
  }
476
476
  }
477
477
 
478
+ func TestComputeProviderHealthPreservesDiagnostics(t *testing.T) {
479
+ client := newTestClient(t, func(w http.ResponseWriter, r *http.Request) {
480
+ writeJSON(t, w, map[string]any{"data": map[string]any{
481
+ "healthy": false, "status": "degraded", "checkedAt": "2026-09-22T00:00:00Z",
482
+ "httpStatus": 401, "reason": "authentication_failed", "message": "Credentials rejected", "nextAction": "Update credentials",
483
+ }})
484
+ })
485
+ result, err := client.CheckComputeProviderInstanceHealth(context.Background(), ComputeProviderDomainVirtualization, "pve", "connection-1", "", ComputeProviderReadRequest{})
486
+ if err != nil || result.Healthy || result.Status != "degraded" || result.HTTPStatus != 401 || result.Reason != "authentication_failed" || result.Message != "Credentials rejected" || result.NextAction != "Update credentials" || result.CheckedAt.IsZero() {
487
+ t.Fatalf("CheckComputeProviderInstanceHealth = %#v, %v", result, err)
488
+ }
489
+ }
490
+
491
+ func TestComputeProviderHealthRejectsLegacyTask(t *testing.T) {
492
+ client := newTestClient(t, func(w http.ResponseWriter, r *http.Request) {
493
+ w.WriteHeader(http.StatusAccepted)
494
+ writeJSON(t, w, computeTaskEnvelopeFixture("health-task"))
495
+ })
496
+ if _, err := client.CheckComputeProviderInstanceHealth(context.Background(), ComputeProviderDomainVirtualization, "pve", "connection-1", "", ComputeProviderReadRequest{}); err == nil || !strings.Contains(err.Error(), "upgrade the server") {
497
+ t.Fatalf("legacy task response should require a server upgrade, got %v", err)
498
+ }
499
+ }
500
+
478
501
  func TestStreamComputeTask(t *testing.T) {
479
502
  client := newTestClient(t, func(w http.ResponseWriter, r *http.Request) {
480
503
  if r.Method != http.MethodGet || r.URL.EscapedPath() != "/api/v1/compute/tasks/virtualization/task%2Fone/stream" {
@@ -4340,6 +4340,39 @@ func (e KubernetesAccessReviewSubjectKind) Valid() bool {
4340
4340
  }
4341
4341
  }
4342
4342
 
4343
+ // Defines values for KubernetesAgentCustomResourceRuleVerbs.
4344
+ const (
4345
+ KubernetesAgentCustomResourceRuleVerbsCreate KubernetesAgentCustomResourceRuleVerbs = "create"
4346
+ KubernetesAgentCustomResourceRuleVerbsDelete KubernetesAgentCustomResourceRuleVerbs = "delete"
4347
+ KubernetesAgentCustomResourceRuleVerbsGet KubernetesAgentCustomResourceRuleVerbs = "get"
4348
+ KubernetesAgentCustomResourceRuleVerbsList KubernetesAgentCustomResourceRuleVerbs = "list"
4349
+ KubernetesAgentCustomResourceRuleVerbsPatch KubernetesAgentCustomResourceRuleVerbs = "patch"
4350
+ KubernetesAgentCustomResourceRuleVerbsUpdate KubernetesAgentCustomResourceRuleVerbs = "update"
4351
+ KubernetesAgentCustomResourceRuleVerbsWatch KubernetesAgentCustomResourceRuleVerbs = "watch"
4352
+ )
4353
+
4354
+ // Valid indicates whether the value is a known member of the KubernetesAgentCustomResourceRuleVerbs enum.
4355
+ func (e KubernetesAgentCustomResourceRuleVerbs) Valid() bool {
4356
+ switch e {
4357
+ case KubernetesAgentCustomResourceRuleVerbsCreate:
4358
+ return true
4359
+ case KubernetesAgentCustomResourceRuleVerbsDelete:
4360
+ return true
4361
+ case KubernetesAgentCustomResourceRuleVerbsGet:
4362
+ return true
4363
+ case KubernetesAgentCustomResourceRuleVerbsList:
4364
+ return true
4365
+ case KubernetesAgentCustomResourceRuleVerbsPatch:
4366
+ return true
4367
+ case KubernetesAgentCustomResourceRuleVerbsUpdate:
4368
+ return true
4369
+ case KubernetesAgentCustomResourceRuleVerbsWatch:
4370
+ return true
4371
+ default:
4372
+ return false
4373
+ }
4374
+ }
4375
+
4343
4376
  // Defines values for KubernetesConnectionMode.
4344
4377
  const (
4345
4378
  KubernetesConnectionModeAgent KubernetesConnectionMode = "agent"
@@ -4421,6 +4454,24 @@ func (e KubernetesImportedTargetWorkloadKind) Valid() bool {
4421
4454
  }
4422
4455
  }
4423
4456
 
4457
+ // Defines values for KubernetesPrometheusTransport.
4458
+ const (
4459
+ Agent KubernetesPrometheusTransport = "agent"
4460
+ Direct KubernetesPrometheusTransport = "direct"
4461
+ )
4462
+
4463
+ // Valid indicates whether the value is a known member of the KubernetesPrometheusTransport enum.
4464
+ func (e KubernetesPrometheusTransport) Valid() bool {
4465
+ switch e {
4466
+ case Agent:
4467
+ return true
4468
+ case Direct:
4469
+ return true
4470
+ default:
4471
+ return false
4472
+ }
4473
+ }
4474
+
4424
4475
  // Defines values for KubernetesRelatedResourceKind.
4425
4476
  const (
4426
4477
  KubernetesRelatedResourceKindHorizontalPodAutoscaler KubernetesRelatedResourceKind = "HorizontalPodAutoscaler"
@@ -12775,11 +12826,17 @@ type BrandingAssetUploadEnvelope struct {
12775
12826
  type BrandingSettings struct {
12776
12827
  AppTitle string `json:"appTitle"`
12777
12828
  CollapsedLogoURL string `json:"collapsedLogoUrl"`
12778
- ExpandedLogoURL string `json:"expandedLogoUrl"`
12779
- FaviconURL string `json:"faviconUrl"`
12780
- LoginLogoURL string `json:"loginLogoUrl"`
12781
- SidebarTitle string `json:"sidebarTitle"`
12782
- Slogan string `json:"slogan,omitempty"`
12829
+
12830
+ // DarkCollapsedLogoURL Optional dark-theme compact logo. Empty or absent uses collapsedLogoUrl.
12831
+ DarkCollapsedLogoURL string `json:"darkCollapsedLogoUrl,omitempty"`
12832
+
12833
+ // DarkExpandedLogoURL Optional dark-theme expanded logo. Empty or absent uses expandedLogoUrl.
12834
+ DarkExpandedLogoURL string `json:"darkExpandedLogoUrl,omitempty"`
12835
+ ExpandedLogoURL string `json:"expandedLogoUrl"`
12836
+ FaviconURL string `json:"faviconUrl"`
12837
+ LoginLogoURL string `json:"loginLogoUrl"`
12838
+ SidebarTitle string `json:"sidebarTitle"`
12839
+ Slogan string `json:"slogan,omitempty"`
12783
12840
  }
12784
12841
 
12785
12842
  // BrandingSettingsEnvelope defines model for BrandingSettingsEnvelope.
@@ -14026,6 +14083,23 @@ type ComputeWarning struct {
14026
14083
  Message string `json:"message,omitempty"`
14027
14084
  }
14028
14085
 
14086
+ // ConnectionCheckResult Current connection health from a synchronous probe. This result is not a task and has no task identifier or lifecycle actions.
14087
+ type ConnectionCheckResult struct {
14088
+ CheckedAt time.Time `json:"checkedAt"`
14089
+ Healthy bool `json:"healthy"`
14090
+ HTTPStatus int `json:"httpStatus,omitempty"`
14091
+ Message string `json:"message,omitempty"`
14092
+ NextAction string `json:"nextAction,omitempty"`
14093
+ Reason string `json:"reason,omitempty"`
14094
+ Status string `json:"status"`
14095
+ }
14096
+
14097
+ // ConnectionCheckResultEnvelope defines model for ConnectionCheckResultEnvelope.
14098
+ type ConnectionCheckResultEnvelope struct {
14099
+ // Data Current connection health from a synchronous probe. This result is not a task and has no task identifier or lifecycle actions.
14100
+ Data ConnectionCheckResult `json:"data"`
14101
+ }
14102
+
14029
14103
  // CreatedPersonalAccessToken defines model for CreatedPersonalAccessToken.
14030
14104
  type CreatedPersonalAccessToken struct {
14031
14105
  Token PersonalAccessToken `json:"token"`
@@ -17922,6 +17996,19 @@ type KubernetesAdmissionWebhookRule struct {
17922
17996
  Scope string `json:"scope,omitempty"`
17923
17997
  }
17924
17998
 
17999
+ // KubernetesAgentCustomResourceRule defines model for KubernetesAgentCustomResourceRule.
18000
+ type KubernetesAgentCustomResourceRule struct {
18001
+ APIGroup string `json:"apiGroup"`
18002
+
18003
+ // Namespaces Explicit namespaces; omitted or empty grants cluster-wide access to the named resources only.
18004
+ Namespaces []string `json:"namespaces,omitempty"`
18005
+ Resources []string `json:"resources"`
18006
+ Verbs []KubernetesAgentCustomResourceRuleVerbs `json:"verbs"`
18007
+ }
18008
+
18009
+ // KubernetesAgentCustomResourceRuleVerbs defines model for KubernetesAgentCustomResourceRule.Verbs.
18010
+ type KubernetesAgentCustomResourceRuleVerbs string
18011
+
17925
18012
  // KubernetesBackendTLSPolicy defines model for KubernetesBackendTLSPolicy.
17926
18013
  type KubernetesBackendTLSPolicy struct {
17927
18014
  AgeSeconds int64 `json:"ageSeconds"`
@@ -17970,15 +18057,16 @@ type KubernetesCacheResourceDiagnostic struct {
17970
18057
 
17971
18058
  // KubernetesClusterConnectionDetail defines model for KubernetesClusterConnectionDetail.
17972
18059
  type KubernetesClusterConnectionDetail struct {
17973
- Context string `json:"context,omitempty"`
17974
- CredentialType string `json:"credentialType"`
17975
- Endpoint string `json:"endpoint,omitempty"`
17976
- HasInlineKubeconfig bool `json:"hasInlineKubeconfig"`
17977
- HasToken bool `json:"hasToken"`
17978
- Mode KubernetesConnectionMode `json:"mode"`
17979
- SourceRef string `json:"sourceRef,omitempty"`
17980
- SourceType string `json:"sourceType"`
17981
- UsesInformerCache bool `json:"usesInformerCache"`
18060
+ Context string `json:"context,omitempty"`
18061
+ CredentialType string `json:"credentialType"`
18062
+ CustomResourceRules []KubernetesAgentCustomResourceRule `json:"customResourceRules,omitempty"`
18063
+ Endpoint string `json:"endpoint,omitempty"`
18064
+ HasInlineKubeconfig bool `json:"hasInlineKubeconfig"`
18065
+ HasToken bool `json:"hasToken"`
18066
+ Mode KubernetesConnectionMode `json:"mode"`
18067
+ SourceRef string `json:"sourceRef,omitempty"`
18068
+ SourceType string `json:"sourceType"`
18069
+ UsesInformerCache bool `json:"usesInformerCache"`
17982
18070
  }
17983
18071
 
17984
18072
  // KubernetesClusterDetail defines model for KubernetesClusterDetail.
@@ -19619,12 +19707,16 @@ type KubernetesPriorityClassListEnvelope struct {
19619
19707
 
19620
19708
  // KubernetesPrometheusDetail defines model for KubernetesPrometheusDetail.
19621
19709
  type KubernetesPrometheusDetail struct {
19622
- BaseURL string `json:"baseUrl,omitempty"`
19623
- ClusterLabel string `json:"clusterLabel,omitempty"`
19624
- GrafanaBaseURL string `json:"grafanaBaseUrl,omitempty"`
19625
- HasBearerToken bool `json:"hasBearerToken"`
19710
+ BaseURL string `json:"baseUrl,omitempty"`
19711
+ ClusterLabel string `json:"clusterLabel,omitempty"`
19712
+ GrafanaBaseURL string `json:"grafanaBaseUrl,omitempty"`
19713
+ HasBearerToken bool `json:"hasBearerToken"`
19714
+ Transport KubernetesPrometheusTransport `json:"transport,omitempty"`
19626
19715
  }
19627
19716
 
19717
+ // KubernetesPrometheusTransport defines model for KubernetesPrometheusTransport.
19718
+ type KubernetesPrometheusTransport string
19719
+
19628
19720
  // KubernetesReferenceGrant defines model for KubernetesReferenceGrant.
19629
19721
  type KubernetesReferenceGrant struct {
19630
19722
  AgeSeconds int64 `json:"ageSeconds"`
@@ -26761,11 +26853,17 @@ type UpdateAIWorkbenchModelRequest struct {
26761
26853
  type UpdateBrandingSettingsRequest struct {
26762
26854
  AppTitle string `json:"appTitle"`
26763
26855
  CollapsedLogoURL string `json:"collapsedLogoUrl"`
26764
- ExpandedLogoURL string `json:"expandedLogoUrl"`
26765
- FaviconURL string `json:"faviconUrl"`
26766
- LoginLogoURL string `json:"loginLogoUrl"`
26767
- SidebarTitle string `json:"sidebarTitle"`
26768
- Slogan string `json:"slogan,omitempty"`
26856
+
26857
+ // DarkCollapsedLogoURL Optional dark-theme compact logo. Empty or absent clears the override.
26858
+ DarkCollapsedLogoURL string `json:"darkCollapsedLogoUrl,omitempty"`
26859
+
26860
+ // DarkExpandedLogoURL Optional dark-theme expanded logo. Empty or absent clears the override.
26861
+ DarkExpandedLogoURL string `json:"darkExpandedLogoUrl,omitempty"`
26862
+ ExpandedLogoURL string `json:"expandedLogoUrl"`
26863
+ FaviconURL string `json:"faviconUrl"`
26864
+ LoginLogoURL string `json:"loginLogoUrl"`
26865
+ SidebarTitle string `json:"sidebarTitle"`
26866
+ Slogan string `json:"slogan,omitempty"`
26769
26867
  }
26770
26868
 
26771
26869
  // UpdateLoginProvidersSettingsRequest defines model for UpdateLoginProvidersSettingsRequest.