@opensoha/contracts 0.1.13 → 0.1.15

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 (43) hide show
  1. package/auth/catalog_generated.go +2 -2
  2. package/auth/catalog_test.go +40 -0
  3. package/auth/permission-catalog.json +227 -3
  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/AISkillsSettingsEnvelope/invalid/missing-registry.json +3 -0
  7. package/fixtures/openapi/AISkillsSettingsEnvelope/valid/registry.json +13 -0
  8. package/fixtures/openapi/AlertEventStreamSignal/invalid/missing-observed-at.json +4 -0
  9. package/fixtures/openapi/AlertEventStreamSignal/valid/changed.json +9 -0
  10. package/fixtures/openapi/ComputeOverviewEnvelope/valid/partial.json +6 -0
  11. package/fixtures/openapi/ComputeTaskListEnvelope/invalid/progress-overflow.json +21 -0
  12. package/fixtures/openapi/ComputeTaskListEnvelope/valid/running.json +15 -0
  13. package/fixtures/openapi/ComputeTaskStreamEvent/invalid/missing-observed-at.json +3 -0
  14. package/fixtures/openapi/ComputeTaskStreamEvent/valid/snapshot.json +27 -0
  15. package/fixtures/openapi/KubernetesResourceGraphEnvelope/invalid/edge-without-target.json +16 -0
  16. package/fixtures/openapi/KubernetesResourceGraphEnvelope/valid/deployment.json +53 -0
  17. package/fixtures/openapi/KubernetesResourceSearchEnvelope/invalid/missing-resource.json +10 -0
  18. package/fixtures/openapi/KubernetesResourceSearchEnvelope/valid/mixed.json +29 -0
  19. package/fixtures/openapi/KubernetesResourceStreamEvent/invalid/missing-observed-at.json +5 -0
  20. package/fixtures/openapi/KubernetesResourceStreamEvent/valid/modified.json +18 -0
  21. package/fixtures/openapi/KubernetesSecurityPostureEnvelope/invalid/finding-without-severity.json +24 -0
  22. package/fixtures/openapi/KubernetesSecurityPostureEnvelope/valid/kubescape.json +34 -0
  23. package/fixtures/openapi/KubernetesService/invalid/node-port-out-of-range.json +14 -0
  24. package/fixtures/openapi/KubernetesService/valid/port-mappings.json +22 -0
  25. package/fixtures/openapi/KubernetesServiceDetail/invalid/empty-target-port.json +13 -0
  26. package/fixtures/openapi/KubernetesServiceDetail/valid/port-mappings.json +22 -0
  27. package/fixtures/openapi/KubernetesWorkloadSnapshotRequest/invalid/unknown-inheritance.json +9 -0
  28. package/fixtures/openapi/KubernetesWorkloadSnapshotRequest/valid/selective-job.json +9 -0
  29. package/fixtures/openapi/OperationalPlanEnvelope/invalid/kubernetes-owner-without-manager.json +29 -0
  30. package/fixtures/openapi/OperationalPlanEnvelope/valid/kubernetes-resource-update.json +30 -0
  31. package/fixtures/openapi/WorkbenchAgentRunListEnvelope/invalid/callback-token.json +17 -0
  32. package/fixtures/openapi/WorkbenchAgentRunListEnvelope/valid/session-scoped.json +17 -0
  33. package/fixtures/openapi/WorkbenchSessionEnvelope/invalid/missing-owner.json +8 -0
  34. package/fixtures/openapi/WorkbenchSessionEnvelope/valid/current.json +17 -0
  35. package/gen/go/sohaapi/client.go +1 -1
  36. package/gen/go/sohaapi/types.go +1758 -59
  37. package/gen/go/sohaapi/types_test.go +43 -2
  38. package/gen/ts/sohaapi/index.ts +12853 -9909
  39. package/openapi/soha-api.json +11360 -5927
  40. package/openapi/soha-api.yaml +11122 -8646
  41. package/openapi/spec_generated.go +3 -3
  42. package/package.json +1 -1
  43. package/resource/models.go +197 -0
@@ -6,8 +6,8 @@ import _ "embed"
6
6
 
7
7
  const (
8
8
  PermissionCatalogVersion = "2.0.0"
9
- PermissionCatalogContentSHA256 = "82626eb53d9cd6b53ee502ae32285392c672f7f186a7dbefb42bf1f700d67e98"
10
- PermissionCatalogSHA256 = "f563a9be8901002e790f271d589c9f4b8b05dcd8e9b4bba767b835b1cc606b76"
9
+ PermissionCatalogContentSHA256 = "58321138575c22b20933cf2c1db2742b741a123bb8f6a2983bb436e84be4e58a"
10
+ PermissionCatalogSHA256 = "38ac1a2e7087ff4831e8f6390b804e32f918b49b9af3165fdf2df286d64fe3c8"
11
11
  )
12
12
 
13
13
  //go:embed permission-catalog.json
@@ -86,3 +86,43 @@ func TestPermissionCatalogIncludesIndependentResourceCreationEntry(t *testing.T)
86
86
  t.Fatal("platform.resource-creation.use is missing")
87
87
  }
88
88
  }
89
+
90
+ func TestPermissionCatalogIncludesIndependentWorkbenchEntries(t *testing.T) {
91
+ var catalog struct {
92
+ Permissions []struct {
93
+ Key string `json:"key"`
94
+ Domain string `json:"domain"`
95
+ Action string `json:"action"`
96
+ Status string `json:"status"`
97
+ Assignable bool `json:"assignable"`
98
+ } `json:"permissions"`
99
+ }
100
+ if err := json.Unmarshal(PermissionCatalogJSON(), &catalog); err != nil {
101
+ t.Fatalf("decode permission catalog: %v", err)
102
+ }
103
+
104
+ want := map[string]bool{
105
+ "workbench.ai.view": false,
106
+ "workbench.compute.view": false,
107
+ "workbench.delivery.view": false,
108
+ "workbench.home.view": false,
109
+ "workbench.monitoring.view": false,
110
+ "workbench.platform.view": false,
111
+ "workbench.security.view": false,
112
+ "workbench.settings.view": false,
113
+ }
114
+ for _, permission := range catalog.Permissions {
115
+ if _, ok := want[permission.Key]; !ok {
116
+ continue
117
+ }
118
+ if permission.Domain != "workbench" || permission.Action != "view" || permission.Status != "active" || !permission.Assignable {
119
+ t.Fatalf("workbench entry must be independently assignable: %#v", permission)
120
+ }
121
+ want[permission.Key] = true
122
+ }
123
+ for key, found := range want {
124
+ if !found {
125
+ t.Fatalf("%s is missing", key)
126
+ }
127
+ }
128
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "authorization.opensoha.io/v1",
3
3
  "catalogVersion": "2.0.0",
4
- "contentHash": "sha256:82626eb53d9cd6b53ee502ae32285392c672f7f186a7dbefb42bf1f700d67e98",
4
+ "contentHash": "sha256:58321138575c22b20933cf2c1db2742b741a123bb8f6a2983bb436e84be4e58a",
5
5
  "permissions": [
6
6
  {
7
7
  "key": "access.directory.create",
@@ -943,6 +943,70 @@
943
943
  "status": "active",
944
944
  "assignable": true
945
945
  },
946
+ {
947
+ "key": "ai.data-sources.create",
948
+ "domain": "ai",
949
+ "resource": "data-sources",
950
+ "action": "create",
951
+ "displayName": "创建 AI 数据源",
952
+ "riskLevel": "mutate",
953
+ "scopeKinds": [
954
+ "tenant",
955
+ "workspace",
956
+ "resource"
957
+ ],
958
+ "approvalPolicy": "never",
959
+ "status": "active",
960
+ "assignable": true
961
+ },
962
+ {
963
+ "key": "ai.data-sources.update",
964
+ "domain": "ai",
965
+ "resource": "data-sources",
966
+ "action": "update",
967
+ "displayName": "修改 AI 数据源",
968
+ "riskLevel": "mutate",
969
+ "scopeKinds": [
970
+ "tenant",
971
+ "workspace",
972
+ "resource"
973
+ ],
974
+ "approvalPolicy": "never",
975
+ "status": "active",
976
+ "assignable": true
977
+ },
978
+ {
979
+ "key": "ai.data-sources.validate",
980
+ "domain": "ai",
981
+ "resource": "data-sources",
982
+ "action": "validate",
983
+ "displayName": "校验 AI 数据源",
984
+ "riskLevel": "mutate",
985
+ "scopeKinds": [
986
+ "tenant",
987
+ "workspace",
988
+ "resource"
989
+ ],
990
+ "approvalPolicy": "never",
991
+ "status": "active",
992
+ "assignable": true
993
+ },
994
+ {
995
+ "key": "ai.data-sources.view",
996
+ "domain": "ai",
997
+ "resource": "data-sources",
998
+ "action": "view",
999
+ "displayName": "查看 AI 数据源",
1000
+ "riskLevel": "read",
1001
+ "scopeKinds": [
1002
+ "tenant",
1003
+ "workspace",
1004
+ "resource"
1005
+ ],
1006
+ "approvalPolicy": "never",
1007
+ "status": "active",
1008
+ "assignable": true
1009
+ },
946
1010
  {
947
1011
  "key": "ai.environments.create",
948
1012
  "domain": "ai",
@@ -5456,6 +5520,26 @@
5456
5520
  "status": "active",
5457
5521
  "assignable": true
5458
5522
  },
5523
+ {
5524
+ "key": "platform.access-control.access-reviews.execute",
5525
+ "domain": "platform",
5526
+ "resource": "access-control.access-reviews",
5527
+ "action": "execute",
5528
+ "displayName": "执行 Kubernetes 有效权限检查",
5529
+ "riskLevel": "read",
5530
+ "scopeKinds": [
5531
+ "workspace",
5532
+ "cluster",
5533
+ "namespace",
5534
+ "resource"
5535
+ ],
5536
+ "approvalPolicy": "never",
5537
+ "status": "active",
5538
+ "assignable": true,
5539
+ "legacyAliases": [
5540
+ "platform.access-control.view"
5541
+ ]
5542
+ },
5459
5543
  {
5460
5544
  "key": "platform.access-control.cluster-role-bindings.create",
5461
5545
  "domain": "platform",
@@ -5897,6 +5981,7 @@
5897
5981
  "status": "legacy",
5898
5982
  "assignable": false,
5899
5983
  "replacedBy": [
5984
+ "platform.access-control.access-reviews.execute",
5900
5985
  "platform.access-control.cluster-role-bindings.view",
5901
5986
  "platform.access-control.cluster-roles.view",
5902
5987
  "platform.access-control.role-bindings.view",
@@ -7266,6 +7351,25 @@
7266
7351
  "delete"
7267
7352
  ]
7268
7353
  },
7354
+ {
7355
+ "key": "platform.helm.releases.rollback",
7356
+ "domain": "platform",
7357
+ "resource": "helm.releases",
7358
+ "action": "rollback",
7359
+ "displayName": "回滚 Kubernetes HelmRelease",
7360
+ "riskLevel": "high",
7361
+ "scopeKinds": [
7362
+ "cluster",
7363
+ "namespace",
7364
+ "resource"
7365
+ ],
7366
+ "approvalPolicy": "eligible",
7367
+ "status": "active",
7368
+ "assignable": true,
7369
+ "legacyCapabilities": [
7370
+ "rollback"
7371
+ ]
7372
+ },
7269
7373
  {
7270
7374
  "key": "platform.helm.releases.update",
7271
7375
  "domain": "platform",
@@ -10929,12 +11033,132 @@
10929
11033
  "status": "active",
10930
11034
  "assignable": true
10931
11035
  },
11036
+ {
11037
+ "key": "workbench.ai.view",
11038
+ "domain": "workbench",
11039
+ "resource": "ai",
11040
+ "action": "view",
11041
+ "displayName": "访问 AI 工作台",
11042
+ "riskLevel": "read",
11043
+ "scopeKinds": [
11044
+ "tenant",
11045
+ "workspace"
11046
+ ],
11047
+ "approvalPolicy": "never",
11048
+ "status": "active",
11049
+ "assignable": true
11050
+ },
11051
+ {
11052
+ "key": "workbench.compute.view",
11053
+ "domain": "workbench",
11054
+ "resource": "compute",
11055
+ "action": "view",
11056
+ "displayName": "访问计算资源工作台",
11057
+ "riskLevel": "read",
11058
+ "scopeKinds": [
11059
+ "tenant",
11060
+ "workspace"
11061
+ ],
11062
+ "approvalPolicy": "never",
11063
+ "status": "active",
11064
+ "assignable": true
11065
+ },
11066
+ {
11067
+ "key": "workbench.delivery.view",
11068
+ "domain": "workbench",
11069
+ "resource": "delivery",
11070
+ "action": "view",
11071
+ "displayName": "访问应用交付工作台",
11072
+ "riskLevel": "read",
11073
+ "scopeKinds": [
11074
+ "tenant",
11075
+ "workspace"
11076
+ ],
11077
+ "approvalPolicy": "never",
11078
+ "status": "active",
11079
+ "assignable": true
11080
+ },
11081
+ {
11082
+ "key": "workbench.home.view",
11083
+ "domain": "workbench",
11084
+ "resource": "home",
11085
+ "action": "view",
11086
+ "displayName": "访问应用门户",
11087
+ "riskLevel": "read",
11088
+ "scopeKinds": [
11089
+ "tenant",
11090
+ "workspace"
11091
+ ],
11092
+ "approvalPolicy": "never",
11093
+ "status": "active",
11094
+ "assignable": true
11095
+ },
11096
+ {
11097
+ "key": "workbench.monitoring.view",
11098
+ "domain": "workbench",
11099
+ "resource": "monitoring",
11100
+ "action": "view",
11101
+ "displayName": "访问可观测与值班工作台",
11102
+ "riskLevel": "read",
11103
+ "scopeKinds": [
11104
+ "tenant",
11105
+ "workspace"
11106
+ ],
11107
+ "approvalPolicy": "never",
11108
+ "status": "active",
11109
+ "assignable": true
11110
+ },
11111
+ {
11112
+ "key": "workbench.platform.view",
11113
+ "domain": "workbench",
11114
+ "resource": "platform",
11115
+ "action": "view",
11116
+ "displayName": "访问 k8s工作台",
11117
+ "riskLevel": "read",
11118
+ "scopeKinds": [
11119
+ "tenant",
11120
+ "workspace"
11121
+ ],
11122
+ "approvalPolicy": "never",
11123
+ "status": "active",
11124
+ "assignable": true
11125
+ },
11126
+ {
11127
+ "key": "workbench.security.view",
11128
+ "domain": "workbench",
11129
+ "resource": "security",
11130
+ "action": "view",
11131
+ "displayName": "访问身份与安全工作台",
11132
+ "riskLevel": "read",
11133
+ "scopeKinds": [
11134
+ "tenant",
11135
+ "workspace"
11136
+ ],
11137
+ "approvalPolicy": "never",
11138
+ "status": "active",
11139
+ "assignable": true
11140
+ },
11141
+ {
11142
+ "key": "workbench.settings.view",
11143
+ "domain": "workbench",
11144
+ "resource": "settings",
11145
+ "action": "view",
11146
+ "displayName": "访问设置中心",
11147
+ "riskLevel": "read",
11148
+ "scopeKinds": [
11149
+ "tenant",
11150
+ "workspace"
11151
+ ],
11152
+ "approvalPolicy": "never",
11153
+ "status": "active",
11154
+ "assignable": true
11155
+ },
10932
11156
  {
10933
11157
  "key": "workspace.application.view",
10934
11158
  "domain": "workspace",
10935
11159
  "resource": "application",
10936
11160
  "action": "view",
10937
- "displayName": "查看应用工作台",
11161
+ "displayName": "查看工作空间应用",
10938
11162
  "riskLevel": "read",
10939
11163
  "scopeKinds": [
10940
11164
  "tenant",
@@ -10950,7 +11174,7 @@
10950
11174
  "domain": "workspace",
10951
11175
  "resource": "resource",
10952
11176
  "action": "view",
10953
- "displayName": "查看 k8s工作台",
11177
+ "displayName": "查看工作空间资源",
10954
11178
  "riskLevel": "read",
10955
11179
  "scopeKinds": [
10956
11180
  "tenant",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.13",
2
+ "version": "0.1.15",
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.13",
2
+ "version": "0.1.15",
3
3
  "generatedFrom": "openapi/soha-api.yaml",
4
4
  "entries": [
5
5
  {
@@ -0,0 +1,13 @@
1
+ {
2
+ "data": {
3
+ "skillsRegistry": [
4
+ {
5
+ "id": "observability-summary",
6
+ "name": "Observability Summary",
7
+ "category": "observability",
8
+ "enabled": true,
9
+ "scopes": ["cluster"]
10
+ }
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "changed",
3
+ "eventId": "alert-1"
4
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "type": "changed",
3
+ "observedAt": "2026-08-23T08:00:00Z",
4
+ "clusterId": "cluster-a",
5
+ "namespace": "team-a",
6
+ "eventId": "alert-1",
7
+ "eventStatus": "firing",
8
+ "resyncRequired": false
9
+ }
@@ -27,6 +27,12 @@
27
27
  "checkedAt": "2026-07-14T02:00:00Z"
28
28
  }
29
29
  ],
30
+ "generatedAt": "2026-07-14T02:00:01Z",
31
+ "freshness": {
32
+ "status": "fresh",
33
+ "observedAt": "2026-07-14T02:00:00Z",
34
+ "maxAgeSeconds": 120
35
+ },
30
36
  "partial": true,
31
37
  "warnings": [{ "code": "runtime_section_unavailable" }]
32
38
  }
@@ -0,0 +1,21 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "virtualization:task-1",
5
+ "domain": "virtualization",
6
+ "sourceType": "virtualization_task",
7
+ "sourceId": "task-1",
8
+ "kind": "vm.create",
9
+ "category": "lifecycle",
10
+ "normalizedStatus": "running",
11
+ "rawStatus": "running",
12
+ "resources": [],
13
+ "attemptCount": 1,
14
+ "cancelable": true,
15
+ "retryable": false,
16
+ "availableActions": ["cancel"],
17
+ "progress": 1.5,
18
+ "createdAt": "2026-07-14T02:00:00Z"
19
+ }
20
+ ]
21
+ }
@@ -23,6 +23,21 @@
23
23
  "cancelable": true,
24
24
  "retryable": false,
25
25
  "availableActions": ["logs", "cancel"],
26
+ "progress": 0.65,
27
+ "heartbeat": {
28
+ "status": "fresh",
29
+ "observedAt": "2026-07-14T02:00:08Z",
30
+ "timeoutSeconds": 30
31
+ },
32
+ "result": {
33
+ "status": "accepted",
34
+ "summary": "Provider accepted the VM create request."
35
+ },
36
+ "verification": {
37
+ "status": "pending",
38
+ "summary": "Waiting for the VM to become observable."
39
+ },
40
+ "auditRef": "audit-virtualization-task-1",
26
41
  "createdAt": "2026-07-14T02:00:00Z",
27
42
  "startedAt": "2026-07-14T02:00:01Z"
28
43
  }
@@ -0,0 +1,27 @@
1
+ {
2
+ "type": "snapshot",
3
+ "observedAt": "2026-07-14T02:00:08Z",
4
+ "sequence": 1,
5
+ "task": {
6
+ "id": "virtualization:task-1",
7
+ "domain": "virtualization",
8
+ "sourceType": "virtualization_task",
9
+ "sourceId": "task-1",
10
+ "kind": "vm.create",
11
+ "category": "lifecycle",
12
+ "normalizedStatus": "running",
13
+ "rawStatus": "running",
14
+ "resources": [],
15
+ "attemptCount": 1,
16
+ "cancelable": true,
17
+ "retryable": false,
18
+ "availableActions": ["logs", "cancel"],
19
+ "progress": 0.65,
20
+ "heartbeat": {
21
+ "status": "fresh",
22
+ "observedAt": "2026-07-14T02:00:08Z",
23
+ "timeoutSeconds": 30
24
+ },
25
+ "createdAt": "2026-07-14T02:00:00Z"
26
+ }
27
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "data": {
3
+ "clusterId": "cluster-a",
4
+ "generatedAt": "2026-08-23T08:00:00Z",
5
+ "nodes": [],
6
+ "edges": [
7
+ {
8
+ "id": "broken",
9
+ "sourceId": "a",
10
+ "relation": "owns"
11
+ }
12
+ ],
13
+ "evidence": [],
14
+ "warnings": []
15
+ }
16
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "data": {
3
+ "clusterId": "cluster-a",
4
+ "namespace": "team-a",
5
+ "generatedAt": "2026-08-23T08:00:00Z",
6
+ "rootId": "apps/v1:Deployment:team-a/api",
7
+ "nodes": [
8
+ {
9
+ "id": "apps/v1:Deployment:team-a/api",
10
+ "resource": {
11
+ "clusterId": "cluster-a",
12
+ "apiVersion": "apps/v1",
13
+ "kind": "Deployment",
14
+ "name": "api",
15
+ "namespace": "team-a",
16
+ "scopeMode": "namespace"
17
+ },
18
+ "status": "healthy"
19
+ },
20
+ {
21
+ "id": "v1:Pod:team-a/api-1",
22
+ "resource": {
23
+ "clusterId": "cluster-a",
24
+ "apiVersion": "v1",
25
+ "kind": "Pod",
26
+ "name": "api-1",
27
+ "namespace": "team-a",
28
+ "scopeMode": "namespace"
29
+ },
30
+ "status": "Running"
31
+ }
32
+ ],
33
+ "edges": [
34
+ {
35
+ "id": "owns:deployment-api:pod-api-1",
36
+ "sourceId": "apps/v1:Deployment:team-a/api",
37
+ "targetId": "v1:Pod:team-a/api-1",
38
+ "relation": "owns"
39
+ }
40
+ ],
41
+ "evidence": [
42
+ {
43
+ "id": "event/team-a/api-1-scheduled",
44
+ "type": "kubernetes-event",
45
+ "severity": "info",
46
+ "summary": "Pod scheduled",
47
+ "observedAt": "2026-08-23T07:59:58Z",
48
+ "resourceId": "v1:Pod:team-a/api-1"
49
+ }
50
+ ],
51
+ "warnings": []
52
+ }
53
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "data": {
3
+ "items": [
4
+ {
5
+ "status": "Running"
6
+ }
7
+ ],
8
+ "truncated": false
9
+ }
10
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "data": {
3
+ "items": [
4
+ {
5
+ "resource": {
6
+ "clusterId": "cluster-a",
7
+ "apiVersion": "v1",
8
+ "kind": "Pod",
9
+ "name": "api-7c8d9f",
10
+ "namespace": "production",
11
+ "scopeMode": "namespace",
12
+ "uid": "pod-uid"
13
+ },
14
+ "status": "Running"
15
+ },
16
+ {
17
+ "resource": {
18
+ "clusterId": "cluster-a",
19
+ "apiVersion": "v1",
20
+ "kind": "Node",
21
+ "name": "worker-1",
22
+ "scopeMode": "cluster"
23
+ },
24
+ "status": "Ready"
25
+ }
26
+ ],
27
+ "truncated": false
28
+ }
29
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "type": "modified",
3
+ "clusterId": "cluster-a",
4
+ "source": "informer"
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "type": "modified",
3
+ "clusterId": "cluster-a",
4
+ "observedAt": "2026-08-23T08:00:00Z",
5
+ "source": "informer",
6
+ "resourceVersion": "42",
7
+ "cacheStatus": "live",
8
+ "resyncRequired": false,
9
+ "resource": {
10
+ "clusterId": "cluster-a",
11
+ "apiVersion": "v1",
12
+ "kind": "Pod",
13
+ "name": "api-1",
14
+ "namespace": "team-a",
15
+ "scopeMode": "namespace",
16
+ "uid": "pod-uid"
17
+ }
18
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "data": {
3
+ "clusterId": "cluster-a",
4
+ "provider": "kubescape",
5
+ "status": "available",
6
+ "generatedAt": "2026-08-23T08:00:00Z",
7
+ "counts": {
8
+ "critical": 0,
9
+ "high": 1,
10
+ "medium": 0,
11
+ "low": 0,
12
+ "unknown": 0
13
+ },
14
+ "findings": [
15
+ {
16
+ "id": "broken",
17
+ "category": "configuration",
18
+ "title": "Missing severity",
19
+ "status": "failed"
20
+ }
21
+ ],
22
+ "warnings": []
23
+ }
24
+ }