@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
@@ -0,0 +1,22 @@
1
+ {
2
+ "data": {
3
+ "idempotencyKey": "interaction-0001",
4
+ "applied": true,
5
+ "xpAwarded": 2,
6
+ "affinityAwarded": 1,
7
+ "unlockedIds": [],
8
+ "profile": {
9
+ "id": "companion:user-1",
10
+ "ownerId": "user-1",
11
+ "activePluginId": "opensoha.soha-companion",
12
+ "activeVersion": "0.1.0",
13
+ "level": 1,
14
+ "xp": 2,
15
+ "affinity": 1,
16
+ "unlockedIds": [],
17
+ "revision": 2,
18
+ "createdAt": "2026-08-08T00:00:00Z",
19
+ "updatedAt": "2026-08-08T00:00:01Z"
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "pluginId": "opensoha.soha-companion",
3
+ "interactionId": "pet",
4
+ "rewardXp": 100000
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "pluginId": "opensoha.soha-companion",
3
+ "interactionId": "pet",
4
+ "clientRevision": 3
5
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "renderer": "live2d-cubism",
3
+ "entryAsset": "https://cdn.example.com/model.json",
4
+ "assets": [],
5
+ "license": {
6
+ "name": "Unknown",
7
+ "url": "https://example.com/license",
8
+ "redistributionAllowed": true,
9
+ "commercialUseAllowed": false
10
+ }
11
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "renderer": "svg",
3
+ "entryAsset": "model/soha.svg",
4
+ "assets": [
5
+ {
6
+ "path": "model/soha.svg",
7
+ "kind": "entry",
8
+ "contentType": "image/svg+xml",
9
+ "sizeBytes": 2048,
10
+ "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
11
+ }
12
+ ],
13
+ "license": {
14
+ "name": "Apache License 2.0",
15
+ "spdxId": "Apache-2.0",
16
+ "url": "https://www.apache.org/licenses/LICENSE-2.0",
17
+ "redistributionAllowed": true,
18
+ "commercialUseAllowed": true
19
+ }
20
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "data": {
3
+ "id": "companion:user-1",
4
+ "ownerId": "user-1",
5
+ "activePluginId": "builtin.soha-companion",
6
+ "activeVersion": "builtin",
7
+ "level": 0,
8
+ "xp": 0,
9
+ "affinity": 0,
10
+ "unlockedIds": [],
11
+ "revision": 1,
12
+ "createdAt": "2026-08-08T00:00:00Z",
13
+ "updatedAt": "2026-08-08T00:00:00Z"
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "data": {
3
+ "id": "companion:user-1",
4
+ "ownerId": "user-1",
5
+ "activePluginId": "builtin.soha-companion",
6
+ "activeVersion": "builtin",
7
+ "level": 1,
8
+ "xp": 0,
9
+ "affinity": 0,
10
+ "unlockedIds": [],
11
+ "revision": 1,
12
+ "createdAt": "2026-08-08T00:00:00Z",
13
+ "updatedAt": "2026-08-08T00:00:00Z"
14
+ }
15
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "clusterId": "cluster-prod",
3
+ "namespace": "payments",
4
+ "applicationKey": "payments",
5
+ "applicationName": "Payments",
6
+ "environmentKey": "prod",
7
+ "environmentName": "Production",
8
+ "ownershipMode": "managed",
9
+ "releases": []
10
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "clusterId": "cluster-prod",
3
+ "namespace": "payments",
4
+ "applicationKey": "payments",
5
+ "applicationName": "Payments",
6
+ "environmentKey": "prod",
7
+ "environmentName": "Production",
8
+ "ownershipMode": "managed",
9
+ "releases": [
10
+ {
11
+ "releaseName": "payments"
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "data": {
3
+ "application": {
4
+ "id": "app-1",
5
+ "key": "payments",
6
+ "name": "Payments",
7
+ "created": true
8
+ },
9
+ "environment": {
10
+ "id": "env-1",
11
+ "key": "prod",
12
+ "name": "Production",
13
+ "created": false
14
+ },
15
+ "applicationEnvironmentId": "app-env-1",
16
+ "applicationEnvironmentCreated": true,
17
+ "services": [],
18
+ "targets": []
19
+ }
20
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "data": {
3
+ "application": {
4
+ "id": "app-1",
5
+ "key": "payments",
6
+ "name": "Payments",
7
+ "created": true
8
+ },
9
+ "environment": {
10
+ "id": "env-1",
11
+ "key": "prod",
12
+ "name": "Production",
13
+ "created": false
14
+ },
15
+ "applicationEnvironmentId": "app-env-1",
16
+ "applicationEnvironmentCreated": true,
17
+ "ownershipMode": "managed",
18
+ "services": [
19
+ {
20
+ "id": "service-1",
21
+ "key": "helm-payments",
22
+ "name": "payments",
23
+ "releaseName": "payments",
24
+ "created": true
25
+ }
26
+ ],
27
+ "targets": [
28
+ {
29
+ "id": "target-1",
30
+ "releaseName": "payments",
31
+ "created": true
32
+ }
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "clusterId": "cluster-prod",
5
+ "namespace": "payments",
6
+ "workloadKind": "Pod",
7
+ "workloadName": "payments-api-123",
8
+ "desiredReplicas": 1,
9
+ "readyReplicas": 1,
10
+ "relatedResources": []
11
+ }
12
+ ],
13
+ "truncated": false
14
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "clusterId": "cluster-prod",
5
+ "namespace": "payments",
6
+ "workloadKind": "Deployment",
7
+ "workloadName": "payments-api",
8
+ "desiredReplicas": 3,
9
+ "readyReplicas": 3,
10
+ "containers": ["api"],
11
+ "labels": {
12
+ "app": "payments-api"
13
+ },
14
+ "relatedResources": [
15
+ {
16
+ "kind": "Service",
17
+ "name": "payments-api"
18
+ },
19
+ {
20
+ "kind": "Ingress",
21
+ "name": "payments"
22
+ },
23
+ {
24
+ "kind": "HorizontalPodAutoscaler",
25
+ "name": "payments-api"
26
+ }
27
+ ]
28
+ }
29
+ ],
30
+ "truncated": false
31
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "clusterId": "cluster-prod",
3
+ "namespace": "payments",
4
+ "applicationKey": "payments",
5
+ "applicationName": "Payments",
6
+ "environmentKey": "prod",
7
+ "environmentName": "Production",
8
+ "ownershipMode": "takeover",
9
+ "workloads": [
10
+ {
11
+ "workloadKind": "Deployment",
12
+ "workloadName": "payments-api"
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "clusterId": "cluster-prod",
3
+ "namespace": "payments",
4
+ "applicationKey": "payments",
5
+ "applicationName": "Payments",
6
+ "environmentKey": "prod",
7
+ "environmentName": "Production",
8
+ "ownershipMode": "managed",
9
+ "workloads": [
10
+ {
11
+ "workloadKind": "Deployment",
12
+ "workloadName": "payments-api"
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "clusterId": "cluster-prod",
3
+ "namespace": "payments",
4
+ "applicationKey": "payments",
5
+ "applicationName": "Payments",
6
+ "environmentKey": "prod",
7
+ "environmentName": "Production",
8
+ "ownershipMode": "observe_only",
9
+ "workloads": [
10
+ {
11
+ "workloadKind": "Deployment",
12
+ "workloadName": "payments-api"
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "data": {
3
+ "application": {
4
+ "id": "app-1",
5
+ "key": "payments",
6
+ "name": "Payments",
7
+ "created": false
8
+ },
9
+ "environment": {
10
+ "id": "env-1",
11
+ "key": "prod",
12
+ "name": "Production",
13
+ "created": false
14
+ },
15
+ "applicationEnvironmentId": "app-env-1",
16
+ "applicationEnvironmentCreated": false,
17
+ "services": [],
18
+ "targets": []
19
+ }
20
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "data": {
3
+ "application": {
4
+ "id": "app-1",
5
+ "key": "payments",
6
+ "name": "Payments",
7
+ "created": true
8
+ },
9
+ "environment": {
10
+ "id": "env-1",
11
+ "key": "prod",
12
+ "name": "Production",
13
+ "created": false
14
+ },
15
+ "applicationEnvironmentId": "app-env-1",
16
+ "applicationEnvironmentCreated": true,
17
+ "ownershipMode": "observe_only",
18
+ "services": [
19
+ {
20
+ "id": "service-1",
21
+ "key": "k8s-deployment-payments-api",
22
+ "name": "payments-api",
23
+ "workloadKind": "Deployment",
24
+ "workloadName": "payments-api",
25
+ "created": true
26
+ }
27
+ ],
28
+ "targets": [
29
+ {
30
+ "id": "target-1",
31
+ "workloadKind": "Deployment",
32
+ "workloadName": "payments-api",
33
+ "created": true
34
+ }
35
+ ]
36
+ }
37
+ }
@@ -2,7 +2,7 @@
2
2
  "items": [
3
3
  {
4
4
  "adapterID": "builtin",
5
- "name": "k8s.list_pods",
5
+ "name": "k8s.pods.list",
6
6
  "description": "List pods."
7
7
  }
8
8
  ]
@@ -2,7 +2,7 @@
2
2
  "items": [
3
3
  {
4
4
  "adapterID": "builtin",
5
- "name": "k8s.list_pods",
5
+ "name": "k8s.pods.list",
6
6
  "description": "List pods.",
7
7
  "scopes": ["k8s:read"]
8
8
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "data": {
3
+ "warnings": [],
4
+ "importedPanelCount": 1,
5
+ "skippedPanelCount": 0
6
+ }
7
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "data": {
3
+ "dashboard": {
4
+ "id": "dashboard:8b9f35ba-6870-4f34-b45f-6f601d8b8c35",
5
+ "name": "Kubernetes Overview",
6
+ "source": "grafana",
7
+ "sourceSchemaVersion": 39,
8
+ "tags": ["kubernetes"],
9
+ "panels": [
10
+ {
11
+ "id": "1",
12
+ "title": "CPU",
13
+ "type": "timeseries",
14
+ "layout": { "x": 0, "y": 0, "w": 12, "h": 8 },
15
+ "targets": [
16
+ {
17
+ "refId": "A",
18
+ "expression": "sum(rate(container_cpu_usage_seconds_total[5m]))"
19
+ }
20
+ ],
21
+ "queryable": true
22
+ }
23
+ ],
24
+ "createdAt": "2026-08-08T08:00:00Z",
25
+ "updatedAt": "2026-08-08T08:00:00Z"
26
+ },
27
+ "warnings": [
28
+ {
29
+ "code": "datasource_rebound",
30
+ "message": "Grafana data-source references will use the default enabled Prometheus source."
31
+ }
32
+ ],
33
+ "importedPanelCount": 1,
34
+ "skippedPanelCount": 0
35
+ }
36
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "json": "{\"title\":\"Kubernetes Overview\",\"panels\":[]}"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "dataSourceId": "prometheus-main"
3
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "json": "{\"title\":\"Kubernetes Overview\",\"schemaVersion\":39,\"tags\":[\"kubernetes\"],\"panels\":[{\"id\":1,\"title\":\"CPU\",\"type\":\"timeseries\",\"gridPos\":{\"x\":0,\"y\":0,\"w\":12,\"h\":8},\"targets\":[{\"refId\":\"A\",\"expr\":\"sum(rate(container_cpu_usage_seconds_total[5m]))\"}]}]}",
3
+ "dataSourceId": "prometheus-main"
4
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "prometheus-main"
5
+ }
6
+ ]
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "prometheus-main",
5
+ "name": "Production Prometheus"
6
+ }
7
+ ]
8
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "CLI token",
3
3
  "scopes": ["ai:read"],
4
- "permissionKeys": ["ai.gateway.tools.read"],
4
+ "permissionKeys": ["ai.gateway.view"],
5
5
  "plainTextValue": "should-not-be-accepted"
6
6
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "CLI token",
3
3
  "scopes": ["ai:read"],
4
- "permissionKeys": ["ai.gateway.tools.read"],
4
+ "permissionKeys": ["ai.gateway.view"],
5
5
  "metadata": {
6
6
  "createdFrom": "fixture"
7
7
  },
@@ -0,0 +1,10 @@
1
+ {
2
+ "subjectSha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
3
+ "builderId": "local",
4
+ "sourceUri": "https://github.com/opensoha/companion-packs",
5
+ "sourceCommit": "0123456",
6
+ "builtAt": "2026-08-08T00:00:00Z",
7
+ "signingKeyId": "opensoha.release",
8
+ "signatureAlgorithm": "sha256",
9
+ "signature": "c2lnbmF0dXJl"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "subjectSha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
3
+ "builderId": "https://github.com/opensoha/soha-cloud/actions/runs/1",
4
+ "sourceUri": "https://github.com/opensoha/companion-packs",
5
+ "sourceCommit": "0123456789abcdef0123456789abcdef01234567",
6
+ "builtAt": "2026-08-08T00:00:00Z",
7
+ "signingKeyId": "opensoha.release",
8
+ "signatureAlgorithm": "ed25519",
9
+ "signature": "c2lnbmF0dXJl"
10
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "Harbor Production",
3
+ "endpoint": "https://harbor.example.com"
4
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Harbor Production",
3
+ "registryType": "harbor",
4
+ "endpoint": "https://harbor.example.com",
5
+ "namespace": "delivery",
6
+ "username": "robot$delivery",
7
+ "secret": "fixture-only-token",
8
+ "insecure": false
9
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "registry-harbor-production",
5
+ "name": "Harbor Production",
6
+ "registryType": "harbor",
7
+ "endpoint": "https://harbor.example.com",
8
+ "secret": "must-not-be-returned",
9
+ "insecure": false,
10
+ "metadata": {
11
+ "secretConfigured": true,
12
+ "secretStorage": "encrypted"
13
+ },
14
+ "createdAt": "2026-08-08T08:00:00Z",
15
+ "updatedAt": "2026-08-08T08:00:00Z"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "registry-harbor-production",
5
+ "name": "Harbor Production",
6
+ "registryType": "harbor",
7
+ "endpoint": "https://harbor.example.com",
8
+ "namespace": "delivery",
9
+ "username": "robot$delivery",
10
+ "insecure": false,
11
+ "metadata": {
12
+ "secretConfigured": true,
13
+ "secretStorage": "encrypted"
14
+ },
15
+ "createdAt": "2026-08-08T08:00:00Z",
16
+ "updatedAt": "2026-08-08T08:00:00Z"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "pkg-01j9z3m4w8n2",
3
+ "softwareId": "../soha-cli",
4
+ "name": "Soha CLI",
5
+ "publisher": "OpenSoha",
6
+ "version": "0.1.0",
7
+ "platform": "darwin",
8
+ "arch": "arm64",
9
+ "fileName": "../soha-cli.pkg",
10
+ "sizeBytes": 0,
11
+ "sha256": "invalid",
12
+ "downloadPath": "https://untrusted.example.com/installer",
13
+ "createdAt": "2026-08-08T00:00:00Z",
14
+ "updatedAt": "2026-08-08T00:00:00Z"
15
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "pkg-01j9z3m4w8n2",
3
+ "softwareId": "soha-cli",
4
+ "name": "Soha CLI",
5
+ "description": "Command-line client for Soha.",
6
+ "publisher": "OpenSoha",
7
+ "category": "Developer Tools",
8
+ "version": "0.1.0",
9
+ "platform": "darwin",
10
+ "arch": "arm64",
11
+ "fileName": "soha-cli-0.1.0-darwin-arm64.pkg",
12
+ "sizeBytes": 1048576,
13
+ "sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
14
+ "downloadPath": "/api/v1/software/packages/pkg-01j9z3m4w8n2/download",
15
+ "createdAt": "2026-08-08T00:00:00Z",
16
+ "updatedAt": "2026-08-08T00:00:00Z"
17
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "softwareId": "soha-desktop",
3
+ "name": "Soha Desktop",
4
+ "publisher": "OpenSoha",
5
+ "version": "0.2.0",
6
+ "platform": "darwin",
7
+ "arch": "arm64",
8
+ "url": "http://127.0.0.1/private.dmg"
9
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "softwareId": "soha-desktop",
3
+ "name": "Soha Desktop",
4
+ "description": "Desktop client for Soha.",
5
+ "publisher": "OpenSoha",
6
+ "category": "Developer Tools",
7
+ "version": "0.2.0",
8
+ "platform": "darwin",
9
+ "arch": "arm64",
10
+ "url": "https://downloads.opensoha.dev/soha-desktop-0.2.0-arm64.dmg",
11
+ "fileName": "soha-desktop-0.2.0-arm64.dmg"
12
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "backend": "filesystem",
3
+ "objectCount": -1,
4
+ "totalBytes": -1,
5
+ "items": []
6
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "backend": "filesystem",
3
+ "objectCount": 1,
4
+ "totalBytes": 1048576,
5
+ "items": [
6
+ {
7
+ "id": "pkg-01j9z3m4w8n2",
8
+ "softwareId": "soha-cli",
9
+ "name": "Soha CLI",
10
+ "publisher": "OpenSoha",
11
+ "version": "0.1.0",
12
+ "platform": "darwin",
13
+ "arch": "arm64",
14
+ "fileName": "soha-cli-0.1.0-darwin-arm64.pkg",
15
+ "sizeBytes": 1048576,
16
+ "sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
17
+ "downloadPath": "/api/v1/software/packages/pkg-01j9z3m4w8n2/download",
18
+ "createdAt": "2026-08-08T00:00:00Z",
19
+ "updatedAt": "2026-08-08T00:00:00Z"
20
+ }
21
+ ]
22
+ }
@@ -14,7 +14,7 @@ import (
14
14
  "time"
15
15
  )
16
16
 
17
- const defaultUserAgent = "opensoha-contracts/0.1.6"
17
+ const defaultUserAgent = "opensoha-contracts/0.1.8"
18
18
 
19
19
  type Client struct {
20
20
  BaseURL string