@opensoha/contracts 0.1.14 → 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 (40) hide show
  1. package/auth/catalog_generated.go +2 -2
  2. package/auth/permission-catalog.json +105 -1
  3. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  4. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  5. package/fixtures/openapi/AISkillsSettingsEnvelope/invalid/missing-registry.json +3 -0
  6. package/fixtures/openapi/AISkillsSettingsEnvelope/valid/registry.json +13 -0
  7. package/fixtures/openapi/AlertEventStreamSignal/invalid/missing-observed-at.json +4 -0
  8. package/fixtures/openapi/AlertEventStreamSignal/valid/changed.json +9 -0
  9. package/fixtures/openapi/ComputeOverviewEnvelope/valid/partial.json +6 -0
  10. package/fixtures/openapi/ComputeTaskListEnvelope/invalid/progress-overflow.json +21 -0
  11. package/fixtures/openapi/ComputeTaskListEnvelope/valid/running.json +15 -0
  12. package/fixtures/openapi/ComputeTaskStreamEvent/invalid/missing-observed-at.json +3 -0
  13. package/fixtures/openapi/ComputeTaskStreamEvent/valid/snapshot.json +27 -0
  14. package/fixtures/openapi/KubernetesResourceGraphEnvelope/invalid/edge-without-target.json +16 -0
  15. package/fixtures/openapi/KubernetesResourceGraphEnvelope/valid/deployment.json +53 -0
  16. package/fixtures/openapi/KubernetesResourceSearchEnvelope/invalid/missing-resource.json +10 -0
  17. package/fixtures/openapi/KubernetesResourceSearchEnvelope/valid/mixed.json +29 -0
  18. package/fixtures/openapi/KubernetesResourceStreamEvent/invalid/missing-observed-at.json +5 -0
  19. package/fixtures/openapi/KubernetesResourceStreamEvent/valid/modified.json +18 -0
  20. package/fixtures/openapi/KubernetesSecurityPostureEnvelope/invalid/finding-without-severity.json +24 -0
  21. package/fixtures/openapi/KubernetesSecurityPostureEnvelope/valid/kubescape.json +34 -0
  22. package/fixtures/openapi/KubernetesService/invalid/node-port-out-of-range.json +14 -0
  23. package/fixtures/openapi/KubernetesService/valid/port-mappings.json +22 -0
  24. package/fixtures/openapi/KubernetesServiceDetail/invalid/empty-target-port.json +13 -0
  25. package/fixtures/openapi/KubernetesServiceDetail/valid/port-mappings.json +22 -0
  26. package/fixtures/openapi/OperationalPlanEnvelope/invalid/kubernetes-owner-without-manager.json +29 -0
  27. package/fixtures/openapi/OperationalPlanEnvelope/valid/kubernetes-resource-update.json +30 -0
  28. package/fixtures/openapi/WorkbenchAgentRunListEnvelope/invalid/callback-token.json +17 -0
  29. package/fixtures/openapi/WorkbenchAgentRunListEnvelope/valid/session-scoped.json +17 -0
  30. package/fixtures/openapi/WorkbenchSessionEnvelope/invalid/missing-owner.json +8 -0
  31. package/fixtures/openapi/WorkbenchSessionEnvelope/valid/current.json +17 -0
  32. package/gen/go/sohaapi/client.go +1 -1
  33. package/gen/go/sohaapi/types.go +1716 -59
  34. package/gen/go/sohaapi/types_test.go +40 -0
  35. package/gen/ts/sohaapi/index.ts +12848 -9909
  36. package/openapi/soha-api.json +11328 -5927
  37. package/openapi/soha-api.yaml +11106 -8649
  38. package/openapi/spec_generated.go +3 -3
  39. package/package.json +1 -1
  40. 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 = "0efe8f496fa0fb29703584586f9306d04fdb5b9a38eaea78532107698230f609"
10
- PermissionCatalogSHA256 = "5f1d8b49fb4155473f61ff255002ec7a13e3f63d718d5f9fc592daa93da610df"
9
+ PermissionCatalogContentSHA256 = "58321138575c22b20933cf2c1db2742b741a123bb8f6a2983bb436e84be4e58a"
10
+ PermissionCatalogSHA256 = "38ac1a2e7087ff4831e8f6390b804e32f918b49b9af3165fdf2df286d64fe3c8"
11
11
  )
12
12
 
13
13
  //go:embed permission-catalog.json
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "authorization.opensoha.io/v1",
3
3
  "catalogVersion": "2.0.0",
4
- "contentHash": "sha256:0efe8f496fa0fb29703584586f9306d04fdb5b9a38eaea78532107698230f609",
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",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.14",
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.14",
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
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "data": {
3
+ "clusterId": "cluster-a",
4
+ "provider": "kubescape",
5
+ "status": "available",
6
+ "generatedAt": "2026-08-23T08:00:00Z",
7
+ "counts": {
8
+ "critical": 1,
9
+ "high": 2,
10
+ "medium": 3,
11
+ "low": 4,
12
+ "unknown": 0
13
+ },
14
+ "findings": [
15
+ {
16
+ "id": "configuration:C-001:team-a:Deployment:api",
17
+ "category": "configuration",
18
+ "severity": "high",
19
+ "title": "Privileged container",
20
+ "status": "failed",
21
+ "controlId": "C-001",
22
+ "resource": {
23
+ "clusterId": "cluster-a",
24
+ "apiVersion": "apps/v1",
25
+ "kind": "Deployment",
26
+ "name": "api",
27
+ "namespace": "team-a",
28
+ "scopeMode": "namespace"
29
+ }
30
+ }
31
+ ],
32
+ "warnings": []
33
+ }
34
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "web",
3
+ "namespace": "default",
4
+ "type": "NodePort",
5
+ "ageSeconds": 0,
6
+ "portMappings": [
7
+ {
8
+ "protocol": "TCP",
9
+ "targetPort": "8080",
10
+ "port": 80,
11
+ "nodePort": 70000
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "web",
3
+ "namespace": "default",
4
+ "type": "NodePort",
5
+ "ageSeconds": 0,
6
+ "ports": ["http:80/tcp (nodePort:30001)"],
7
+ "portMappings": [
8
+ {
9
+ "name": "http",
10
+ "protocol": "TCP",
11
+ "targetPort": "8080",
12
+ "port": 80,
13
+ "nodePort": 30001
14
+ },
15
+ {
16
+ "name": "metrics",
17
+ "protocol": "TCP",
18
+ "targetPort": "metrics",
19
+ "port": 9090
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "web",
3
+ "namespace": "default",
4
+ "type": "ClusterIP",
5
+ "ageSeconds": 60,
6
+ "portMappings": [
7
+ {
8
+ "protocol": "TCP",
9
+ "targetPort": "",
10
+ "port": 80
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "web",
3
+ "namespace": "default",
4
+ "type": "ClusterIP",
5
+ "clusterIp": "10.43.0.10",
6
+ "ageSeconds": 60,
7
+ "ports": ["http:80/tcp"],
8
+ "portMappings": [
9
+ {
10
+ "name": "http",
11
+ "protocol": "TCP",
12
+ "targetPort": "http",
13
+ "port": 80
14
+ }
15
+ ],
16
+ "endpoints": [
17
+ {
18
+ "address": "10.42.0.10",
19
+ "ready": true
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "data": {
3
+ "capability": "k8s.resources.update",
4
+ "target": "cluster-a/team-a/Deployment/api",
5
+ "ready": false,
6
+ "riskLevel": "mutate",
7
+ "requiresApproval": false,
8
+ "changes": [
9
+ {
10
+ "action": "apply",
11
+ "resource": "Deployment/api",
12
+ "summary": "apply the reviewed manifest"
13
+ }
14
+ ],
15
+ "warnings": [],
16
+ "kubernetesResourceUpdate": {
17
+ "fieldManager": "opensoha-resource-edit/v1",
18
+ "changedFields": ["/spec/replicas"],
19
+ "owners": [
20
+ {
21
+ "operation": "Apply",
22
+ "apiVersion": "apps/v1",
23
+ "fields": ["/spec/template"]
24
+ }
25
+ ],
26
+ "conflicts": []
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "data": {
3
+ "capability": "k8s.resources.update",
4
+ "target": "cluster-a/team-a/Deployment/api",
5
+ "ready": true,
6
+ "riskLevel": "mutate",
7
+ "requiresApproval": false,
8
+ "changes": [
9
+ {
10
+ "action": "apply",
11
+ "resource": "Deployment/api",
12
+ "summary": "apply the reviewed manifest"
13
+ }
14
+ ],
15
+ "warnings": [],
16
+ "kubernetesResourceUpdate": {
17
+ "fieldManager": "opensoha-resource-edit/v1",
18
+ "changedFields": ["/spec/replicas"],
19
+ "owners": [
20
+ {
21
+ "manager": "helm",
22
+ "operation": "Apply",
23
+ "apiVersion": "apps/v1",
24
+ "fields": ["/spec/template"]
25
+ }
26
+ ],
27
+ "conflicts": []
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "run-1",
5
+ "providerId": "external-agent",
6
+ "providerKind": "general",
7
+ "capabilityId": "root-cause-analysis",
8
+ "createdBy": "user-1",
9
+ "status": "running",
10
+ "callbackToken": "must-not-cross-the-user-api-boundary",
11
+ "timeoutSeconds": 600,
12
+ "queuedAt": "2026-08-19T08:00:00Z",
13
+ "createdAt": "2026-08-19T08:00:00Z",
14
+ "updatedAt": "2026-08-19T08:01:00Z"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "run-1",
5
+ "providerId": "external-agent",
6
+ "providerKind": "general",
7
+ "capabilityId": "root-cause-analysis",
8
+ "sessionId": "session-1",
9
+ "createdBy": "user-1",
10
+ "status": "running",
11
+ "timeoutSeconds": 600,
12
+ "queuedAt": "2026-08-19T08:00:00Z",
13
+ "createdAt": "2026-08-19T08:00:00Z",
14
+ "updatedAt": "2026-08-19T08:01:00Z"
15
+ }
16
+ ]
17
+ }