@opensoha/contracts 0.1.17 → 0.1.19
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.
- package/COMPATIBILITY.md +72 -0
- package/README.md +38 -0
- package/auth/catalog_generated.go +2 -2
- package/auth/outpost_headers.go +17 -0
- package/auth/outpost_headers_test.go +16 -0
- package/auth/permission-catalog.json +383 -1
- package/compat/consumer-revisions.json +7 -0
- package/compat/json-schema-ecosystem-0.1.0.json +1 -1
- package/compat/openapi-loose-boundaries-0.1.0.json +78 -46
- package/delivery/canonical.go +136 -0
- package/delivery/document.go +203 -0
- package/delivery/document.schema.json +1527 -0
- package/delivery/document_test.go +191 -0
- package/delivery/parser.go +155 -0
- package/evaluation/evaluation-run.schema.json +64 -10
- package/fixtures/json-schema/gateway-manifest/invalid/bad-execution-mode.json +73 -0
- package/fixtures/json-schema/gateway-manifest/invalid/unversioned-check.json +85 -0
- package/fixtures/json-schema/gateway-manifest/valid/checks.json +86 -0
- package/fixtures/json-schema/gateway-manifest/valid/versioned-task.json +73 -0
- package/fixtures/json-schema/network-ingest-event/invalid/vpn-probe-negative-rtt.json +34 -0
- package/fixtures/json-schema/network-ingest-event/invalid/vpn-stats-secret.json +27 -0
- package/fixtures/json-schema/network-ingest-event/valid/vpn-probe-batch.json +45 -0
- package/fixtures/json-schema/network-ingest-event/valid/vpn-tunnel-stats.json +26 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-bad-token.json +15 -0
- package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-mode-override.json +16 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/managed-vpn-macos-enrollment.json +27 -0
- package/fixtures/json-schema/network-runtime-protocol/valid/vpn-managed-connect.json +15 -0
- package/fixtures/openapi/AgentChatInput/invalid/empty-question.json +4 -0
- package/fixtures/openapi/AgentChatInput/invalid/system-role.json +9 -0
- package/fixtures/openapi/AgentChatInput/valid/authorized-background.json +5 -0
- package/fixtures/openapi/AgentChatInput/valid/conversation.json +15 -0
- package/fixtures/openapi/AgentRunnerToolCallRequest/invalid/model-identity.json +1 -0
- package/fixtures/openapi/AgentRunnerToolCallRequest/valid/search.json +1 -0
- package/fixtures/openapi/ApplicationInput/invalid/negative-version.json +6 -0
- package/fixtures/openapi/ApplicationInput/invalid/zero-version.json +6 -0
- package/fixtures/openapi/ApplicationInput/valid/versioned.json +6 -0
- package/fixtures/openapi/ApprovalRequest/invalid/resolved-scopes.json +20 -0
- package/fixtures/openapi/ApprovalRequest/valid/resolved-scopes.json +21 -0
- package/fixtures/openapi/BuildTemplateInput/invalid/negative-revision.json +6 -0
- package/fixtures/openapi/BuildTemplateInput/valid/draft.json +11 -0
- package/fixtures/openapi/BuildTriggerRequest/invalid/no-ref.json +1 -0
- package/fixtures/openapi/BuildTriggerRequest/valid/no-environment.json +1 -0
- package/fixtures/openapi/BuildpacksConfiguration/invalid/mutable-builder.json +5 -0
- package/fixtures/openapi/BuildpacksConfiguration/invalid/privilege-override.json +6 -0
- package/fixtures/openapi/BuildpacksConfiguration/invalid/unsupported-platform.json +5 -0
- package/fixtures/openapi/BuildpacksConfiguration/valid/pinned.json +5 -0
- package/fixtures/openapi/CapabilityAssessment/invalid/contract.json +16 -0
- package/fixtures/openapi/CapabilityAssessment/valid/contract.json +16 -0
- package/fixtures/openapi/CapabilityPlan/invalid/contract.json +16 -0
- package/fixtures/openapi/CapabilityPlan/valid/contract.json +19 -0
- package/fixtures/openapi/CapabilityPlanValidation/invalid/contract.json +5 -0
- package/fixtures/openapi/CapabilityPlanValidation/valid/contract.json +11 -0
- package/fixtures/openapi/CapabilityTask/invalid/contract.json +33 -0
- package/fixtures/openapi/CapabilityTask/valid/contract.json +34 -0
- package/fixtures/openapi/CapabilityTaskInput/invalid/contract.json +22 -0
- package/fixtures/openapi/CapabilityTaskInput/valid/contract.json +22 -0
- package/fixtures/openapi/CapabilityValueSemantic/invalid/contract.json +4 -0
- package/fixtures/openapi/CapabilityValueSemantic/valid/contract.json +7 -0
- package/fixtures/openapi/ConnectionCheckResult/invalid/missing-health.json +1 -0
- package/fixtures/openapi/ConnectionCheckResult/invalid/task-id.json +1 -0
- package/fixtures/openapi/ConnectionCheckResult/valid/failure.json +1 -0
- package/fixtures/openapi/ConnectionCheckResult/valid/healthy.json +1 -0
- package/fixtures/openapi/DeliveryAccessResult/invalid/release-verification.json +8 -0
- package/fixtures/openapi/DeliveryAccessResult/valid/release-verification.json +8 -0
- package/fixtures/openapi/DeliveryBatchAssessment/invalid/release-verification.json +11 -0
- package/fixtures/openapi/DeliveryBatchAssessment/valid/release-verification.json +11 -0
- package/fixtures/openapi/DeliveryBatchAssessmentInput/invalid/release-verification.json +9 -0
- package/fixtures/openapi/DeliveryBatchAssessmentInput/valid/release-verification.json +8 -0
- package/fixtures/openapi/DeliveryBatchInput/invalid/ambiguous-source.json +19 -0
- package/fixtures/openapi/DeliveryBatchInput/invalid/missing-idempotency.json +16 -0
- package/fixtures/openapi/DeliveryBatchInput/valid/quick-deploy.json +17 -0
- package/fixtures/openapi/DeliveryBatchInput/valid/saved-workflow.json +5 -0
- package/fixtures/openapi/DeliveryBlueprintInput/invalid/unversioned-preset.json +31 -0
- package/fixtures/openapi/DeliveryBlueprintInput/valid/service-preset.json +32 -0
- package/fixtures/openapi/DeliveryDocument/invalid/unknown-field.json +24 -0
- package/fixtures/openapi/DeliveryDocument/invalid/unknown-kind.json +23 -0
- package/fixtures/openapi/DeliveryDocument/invalid/unknown-version.json +23 -0
- package/fixtures/openapi/DeliveryDocument/valid/build-template.json +26 -0
- package/fixtures/openapi/DeliveryDocument/valid/deployment-template.json +26 -0
- package/fixtures/openapi/DeliveryDocument/valid/legacy-dag.json +39 -0
- package/fixtures/openapi/DeliveryDocument/valid/workflow-template.json +23 -0
- package/fixtures/openapi/DeliveryDocument/valid/workflow.json +20 -0
- package/fixtures/openapi/DeliveryDraftInput/invalid/short-idempotency-key.json +30 -0
- package/fixtures/openapi/DeliveryDraftInput/valid/idempotent-create.json +30 -0
- package/fixtures/openapi/DeliveryDraftService/invalid/zero-version.json +7 -0
- package/fixtures/openapi/DeliveryDraftService/valid/versioned-template.json +9 -0
- package/fixtures/openapi/DeliveryExecutionHistoryPage/invalid-kind.json +9 -0
- package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-build.json +16 -0
- package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-empty.json +3 -0
- package/fixtures/openapi/DeliveryPlanApprovalInput/invalid/confirm.json +1 -0
- package/fixtures/openapi/DeliveryPlanApprovalInput/valid/approve.json +1 -0
- package/fixtures/openapi/DeliveryPlanInput/invalid/draft-manifest-revision.json +1 -0
- package/fixtures/openapi/DeliveryPlanInput/valid/manifest-revision.json +1 -0
- package/fixtures/openapi/DeliveryTargetInput/invalid/deploy-without-environment.json +7 -0
- package/fixtures/openapi/DeliveryTargetInput/valid/build-without-environment.json +6 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/duplicate-kind.json +13 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/embedded-credentials.json +16 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/empty-kinds.json +10 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/negative-generation.json +15 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/unknown-kind.json +12 -0
- package/fixtures/openapi/DeliveryTemplateSourceInput/valid/manual-source.json +15 -0
- package/fixtures/openapi/DeliveryWorkflowDefinition/invalid/unversioned-template.json +15 -0
- package/fixtures/openapi/DeliveryWorkflowDefinition/valid/cross-app.json +24 -0
- package/fixtures/openapi/DeliveryWorkflowInput/invalid/short-key.json +1 -0
- package/fixtures/openapi/DeliveryWorkflowInput/valid/idempotent-create.json +1 -0
- package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-target-override.json +7 -0
- package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-zero-version.json +6 -0
- package/fixtures/openapi/DeploymentTemplatePreviewInput/valid/valid.json +6 -0
- package/fixtures/openapi/DockerDeliveryConfiguration/invalid/empty-mappings.json +5 -0
- package/fixtures/openapi/DockerDeliveryConfiguration/valid/compose.json +7 -0
- package/fixtures/openapi/DockerDeliverySnapshot/invalid/missing-required-field.json +19 -0
- package/fixtures/openapi/DockerDeliverySnapshot/valid/frozen-project.json +20 -0
- package/fixtures/openapi/DockerOperationCallbackRequest/invalid/cancellation-acknowledged-not-boolean.json +13 -0
- package/fixtures/openapi/DockerOperationCallbackRequest/valid/cancellation-acknowledged.json +13 -0
- package/fixtures/openapi/DockerProjectInput/invalid/empty-host.json +4 -0
- package/fixtures/openapi/DockerProjectInput/valid/inline-idempotent.json +7 -0
- package/fixtures/openapi/DockerQuickCreateHostInput/invalid/capacity-type.json +1 -0
- package/fixtures/openapi/DockerQuickCreateHostInput/valid/capacity.json +1 -0
- package/fixtures/openapi/HelmDeliveryConfiguration/invalid/plain-credential.json +21 -0
- package/fixtures/openapi/HelmDeliveryConfiguration/invalid/release-name.json +20 -0
- package/fixtures/openapi/HelmDeliveryConfiguration/valid/private-oci.json +20 -0
- package/fixtures/openapi/HelmDeliverySnapshot/invalid/secret-plan.json +31 -0
- package/fixtures/openapi/HelmDeliverySnapshot/invalid/unknown-operation.json +28 -0
- package/fixtures/openapi/HelmDeliverySnapshot/valid/first-install.json +28 -0
- package/fixtures/openapi/IdentityApplication/invalid/outpost-status.json +1 -0
- package/fixtures/openapi/IdentityApplicationOnboardingInput/invalid/missing-access.json +12 -0
- package/fixtures/openapi/IdentityApplicationOnboardingInput/valid/link.json +13 -0
- package/fixtures/openapi/IdentityOutpost/invalid/missing-runtime-status.json +9 -0
- package/fixtures/openapi/IdentityOutpost/valid/healthy.json +17 -0
- package/fixtures/openapi/IdentityOutpost/valid/unregistered.json +12 -0
- package/fixtures/openapi/IdentityOutpostDeployment/invalid/missing-protocol.json +3 -0
- package/fixtures/openapi/IdentityOutpostDeployment/valid/remote.json +6 -0
- package/fixtures/openapi/IdentityOutpostInput/invalid/forged-observation.json +7 -0
- package/fixtures/openapi/IdentityOutpostInput/valid/forward-auth.json +6 -0
- package/fixtures/openapi/IdentityOutpostInput/valid/legacy.json +8 -0
- package/fixtures/openapi/IdentityProviderSetup/invalid/fake-verification.json +1 -0
- package/fixtures/openapi/IdentityProviderSetup/valid/incomplete.json +1 -0
- package/fixtures/openapi/IdentityProviderSetup/valid/remote.json +1 -0
- package/fixtures/openapi/IdentityProviderUserMetadata/invalid/attributes.json +8 -0
- package/fixtures/openapi/IdentityProviderUserMetadata/valid/attributes.json +13 -0
- package/fixtures/openapi/KubernetesCustomResource/invalid/negative-generation.json +1 -0
- package/fixtures/openapi/KubernetesCustomResource/valid/deleting-operator.json +1 -0
- package/fixtures/openapi/KubernetesResourceCreationReceipt/invalid/manifest-content.json +20 -0
- package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/confirmed.json +20 -0
- package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/unknown.json +19 -0
- package/fixtures/openapi/ManifestDeploymentEnvelope/invalid/negative-resource-observation.json +57 -0
- package/fixtures/openapi/ManifestDeploymentEnvelope/valid/operator-deleting.json +57 -0
- package/fixtures/openapi/ManifestExecutionTaskPayload/invalid/gitops-empty.json +7 -0
- package/fixtures/openapi/ManifestExecutionTaskPayload/valid/gitops-frozen-children.json +18 -0
- package/fixtures/openapi/ManifestKustomizeOptions/invalid/escaping-entry.json +1 -0
- package/fixtures/openapi/ManifestKustomizeOptions/invalid/mutable-image.json +1 -0
- package/fixtures/openapi/ManifestKustomizeOptions/valid/overlay-images.json +7 -0
- package/fixtures/openapi/ManifestRevisionInput/invalid/missing-version.json +1 -0
- package/fixtures/openapi/ManifestRevisionInput/valid/current-draft.json +1 -0
- package/fixtures/openapi/ManifestServiceTemplateInputs/invalid/mutable-image.json +8 -0
- package/fixtures/openapi/ManifestServiceTemplateInputs/valid/frozen-service-image.json +9 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/auto-with-gateway.json +6 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/missing-manual-gateway.json +5 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/mode-override.json +7 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/auto-intent.json +5 -0
- package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/manual-intent.json +6 -0
- package/fixtures/openapi/NetworkVPNProfileInput/invalid/unknown-private-key.json +25 -0
- package/fixtures/openapi/NetworkVPNProfileInput/valid/assigned-profile.json +24 -0
- package/fixtures/openapi/NetworkVPNSelectionPolicyInput/invalid/unbounded-attempts.json +21 -0
- package/fixtures/openapi/NetworkVPNSelectionPolicyInput/valid/provider-policy.json +21 -0
- package/fixtures/openapi/ObservabilityMetricAssessmentInput/invalid/arbitrary-expression.json +10 -0
- package/fixtures/openapi/ObservabilityMetricAssessmentInput/valid/metric-window.json +10 -0
- package/fixtures/openapi/PluginManifest/valid/hermes-api.json +53 -0
- package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/missing-identity.json +5 -0
- package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/skip-analysis.json +5 -0
- package/fixtures/openapi/ProgressiveRolloutControlInput/valid/pause.json +5 -0
- package/fixtures/openapi/ReleaseTargetInput/invalid/missing-required-field.json +15 -0
- package/fixtures/openapi/ReleaseTargetInput/valid/docker-compose.json +16 -0
- package/fixtures/openapi/RepositoryAnalysis/invalid/moving-ref.json +11 -0
- package/fixtures/openapi/RepositoryAnalysis/valid/go.json +29 -0
- package/fixtures/openapi/RepositoryAnalysisInput/invalid/arbitrary-source-url.json +6 -0
- package/fixtures/openapi/RepositoryAnalysisInput/invalid/missing-ref.json +4 -0
- package/fixtures/openapi/RepositoryAnalysisInput/valid/nested-project.json +6 -0
- package/fixtures/openapi/ServiceDeploymentTemplateBinding/invalid/invalid-unpinned.json +4 -0
- package/fixtures/openapi/ServiceDeploymentTemplateBinding/valid/valid.json +7 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-executable-schema.json +25 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-missing-schema.json +21 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-mixed-renderers.json +40 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-nested-parameters.json +41 -0
- package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-yaml.json +34 -0
- package/fixtures/openapi/TemplatePublishInput/invalid/missing-revision.json +1 -0
- package/fixtures/openapi/TemplatePublishInput/invalid/unknown-field.json +4 -0
- package/fixtures/openapi/TemplatePublishInput/invalid/zero-revision.json +3 -0
- package/fixtures/openapi/TemplatePublishInput/valid/revision.json +3 -0
- package/fixtures/openapi/ToolCapability/invalid/bad-idempotency.json +35 -0
- package/fixtures/openapi/ToolCapability/invalid/unversioned-check.json +47 -0
- package/fixtures/openapi/ToolCapability/valid/checks.json +48 -0
- package/fixtures/openapi/ToolCapability/valid/versioned-task.json +35 -0
- package/fixtures/openapi/ToolInvocationRequest/invalid/empty-version.json +8 -0
- package/fixtures/openapi/ToolInvocationRequest/valid/versioned.json +8 -0
- package/fixtures/openapi/ToolInvocationResult/invalid/missing-status-call.json +13 -0
- package/fixtures/openapi/ToolInvocationResult/valid/task.json +20 -0
- package/fixtures/openapi/UpdateBrandingSettingsRequest/invalid/dark-logo-type.json +9 -0
- package/fixtures/openapi/UpdateBrandingSettingsRequest/valid/dark-logos.json +10 -0
- package/fixtures/openapi/VirtualMachineCreateInput/invalid/capacity-type.json +1 -0
- package/fixtures/openapi/VirtualMachineCreateInput/valid/capacity.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityInput/invalid/missing-disk.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityInput/valid/running-vm.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityResult/invalid/invented-status.json +1 -0
- package/fixtures/openapi/VirtualizationCapacityResult/valid/available.json +1 -0
- package/fixtures/openapi/VirtualizationWorkerCreateInput/invalid/secret-input.json +5 -0
- package/fixtures/openapi/VirtualizationWorkerCreateInput/valid/one-worker.json +4 -0
- package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/external-owner.json +27 -0
- package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/zero-budget.json +27 -0
- package/fixtures/openapi/VirtualizationWorkerPoolInput/valid/registered.json +27 -0
- package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/invalid/nested-data.json +5 -0
- package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/valid/empty.json +3 -0
- package/fixtures/openapi/WorkbenchContextSelection/invalid/missing-file-content.json +8 -0
- package/fixtures/openapi/WorkbenchContextSelection/invalid/unknown-reference-kind.json +8 -0
- package/fixtures/openapi/WorkbenchContextSelection/valid/text-and-resource.json +17 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/trigger-without-plan.json +10 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/unknown-trigger.json +28 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/zero-interval.json +28 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/alert-capability.json +30 -0
- package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/scheduled-capability.json +28 -0
- package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/missing-rule.json +3 -0
- package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/schedule-alert-selector.json +4 -0
- package/fixtures/openapi/WorkbenchInspectionTrigger/valid/schedule.json +3 -0
- package/fixtures/openapi/WorkbenchModelPreferences/invalid/unknown-effort.json +1 -0
- package/fixtures/openapi/WorkbenchModelPreferences/valid/selected.json +1 -0
- package/fixtures/openapi/WorkflowCatalogPage/invalid/unsupported-kind.json +6 -0
- package/fixtures/openapi/WorkflowCatalogPage/valid/build-without-environment.json +6 -0
- package/fixtures/openapi/WorkflowTemplateInput/invalid/zero-revision.json +6 -0
- package/fixtures/openapi/WorkflowTemplateInput/valid/draft.json +10 -0
- package/gen/go/sohaapi/client.go +11 -3
- package/gen/go/sohaapi/client_test.go +26 -3
- package/gen/go/sohaapi/types.go +8103 -863
- package/gen/go/sohaapi/types_test.go +100 -1
- package/gen/go/sohaapi/vpn_models_test.go +21 -0
- package/gen/ts/sohaapi/index.ts +20390 -13160
- package/go.mod +107 -5
- package/go.sum +379 -16
- package/helmrelease/delivery.go +283 -0
- package/helmrelease/delivery_test.go +102 -0
- package/helmrelease/frozen_chart.go +91 -0
- package/helmrelease/result.go +27 -0
- package/helmrelease/runtime/delivery.go +508 -0
- package/helmrelease/runtime/delivery_test.go +236 -0
- package/helmrelease/runtime/resources_test.go +60 -0
- package/helmrelease/values.go +99 -0
- package/knowledge/context-envelope.schema.json +1 -0
- package/mcp/gateway-manifest.schema.json +387 -72
- package/network/README.md +40 -0
- package/network/network-ingest-event.schema.json +228 -0
- package/network/network-runtime-protocol.schema.json +457 -1
- package/openapi/soha-api.json +54874 -38722
- package/openapi/soha-api.yaml +12199 -4982
- package/openapi/spec_generated.go +3 -3
- package/package.json +3 -1
- package/resource/manifest_health.go +155 -0
- package/resource/manifest_health_test.go +37 -0
- package/resource/models.go +14 -0
- package/resource/runtime/argocd.go +166 -0
- package/resource/runtime/argocd_integration_test.go +142 -0
- package/resource/runtime/argocd_observation.go +143 -0
- package/resource/runtime/argocd_operation.go +253 -0
- package/resource/runtime/argocd_resources.go +115 -0
- package/resource/runtime/argocd_resources_test.go +107 -0
- package/resource/runtime/argocd_test.go +386 -0
- package/resource/runtime/health.go +115 -0
- package/resource/runtime/health_test.go +78 -0
- package/resource/runtime/operator_integration_test.go +174 -0
- package/resource/runtime/ownership.go +178 -0
- package/resource/runtime/ownership_test.go +178 -0
- package/resource/runtime/rollout_integration_test.go +287 -0
- package/resource/runtime/rollout_observation.go +252 -0
- package/resource/runtime/rollout_operation.go +398 -0
- package/resource/runtime/rollout_resources.go +385 -0
- package/resource/runtime/rollout_task.go +165 -0
- package/resource/runtime/rollout_test.go +450 -0
package/COMPATIBILITY.md
CHANGED
|
@@ -100,6 +100,11 @@ requires dynamic JSON, add it to the baseline with an intentional review note.
|
|
|
100
100
|
If a loose boundary is tightened, remove it from the baseline in the same
|
|
101
101
|
change so the contract surface keeps moving toward named schemas.
|
|
102
102
|
|
|
103
|
+
`CapabilityCall.input` is intentionally dynamic: a continuation references a
|
|
104
|
+
registered capability whose version and input schema are checked by the Gateway.
|
|
105
|
+
The call envelope and task reference are closed schemas; this input map does not
|
|
106
|
+
permit arbitrary HTTP endpoints, scripts, or bypasses of current authorization.
|
|
107
|
+
|
|
103
108
|
## Public Cloud Extension Points
|
|
104
109
|
|
|
105
110
|
`CloudExtensionPoint` OpenAPI DTOs describe only public extension points that
|
|
@@ -116,6 +121,23 @@ the Cloud-only exclusion enum.
|
|
|
116
121
|
|
|
117
122
|
## Fixture Policy
|
|
118
123
|
|
|
124
|
+
### Outpost management compatibility
|
|
125
|
+
|
|
126
|
+
Outpost management retains the deployed `online/offline/degraded` status values,
|
|
127
|
+
node metadata, endpoint, version and last-contact fields. The shared
|
|
128
|
+
`IdentityResourceStatus` type is preserved for SDK source compatibility; these
|
|
129
|
+
legacy runtime values apply to Outposts, not to other resources' management
|
|
130
|
+
transitions. Management `status` and `version` inputs remain accepted for old
|
|
131
|
+
clients but cannot manufacture runtime observations. New clients use
|
|
132
|
+
`runtimeStatus`, `lastHeartbeatAt`, applied configuration information and the
|
|
133
|
+
explicit `forwardAuthUrl`. A desired configuration version of zero represents
|
|
134
|
+
an unregistered node and must not be displayed as a deployed version.
|
|
135
|
+
|
|
136
|
+
The two Outpost metadata references in the loose-boundary inventory document an
|
|
137
|
+
existing deployed JSON object surface. They preserve legacy clients and do not
|
|
138
|
+
authorize runtime health, configuration versions or lease expiry; those are
|
|
139
|
+
separately typed and recorded by authenticated runtime operations.
|
|
140
|
+
|
|
119
141
|
Every JSON Schema owned by this repository must have at least one valid and one
|
|
120
142
|
invalid fixture under `fixtures/json-schema/<contract>/`.
|
|
121
143
|
|
|
@@ -342,6 +364,31 @@ role migration and consumer conformance prove no active dependency.
|
|
|
342
364
|
|
|
343
365
|
## Consumer Adoption
|
|
344
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
|
+
|
|
345
392
|
Recommended adoption flow:
|
|
346
393
|
|
|
347
394
|
1. Change contracts and fixtures here first.
|
|
@@ -363,3 +410,28 @@ npm run check:consumers
|
|
|
363
410
|
Local runs skip missing sibling checkouts by default. CI and release candidate
|
|
364
411
|
validation should use `--require-all` or a specific `--consumer <name>` so a
|
|
365
412
|
missing checkout is a failure.
|
|
413
|
+
|
|
414
|
+
## Capability lifecycle metadata
|
|
415
|
+
|
|
416
|
+
`execution.checks` adds optional version-pinned references to read-only availability,
|
|
417
|
+
precondition, and assessment capabilities. Discovery filters references using the
|
|
418
|
+
caller-visible catalog before pagination. They are suggestions for explicit plan
|
|
419
|
+
steps, not automatic execution or a replacement for domain admission. No declared
|
|
420
|
+
check means unknown support, not a successful check.
|
|
421
|
+
|
|
422
|
+
`execution.recoveryMode=original_call` declares read-only receipt lookup by the
|
|
423
|
+
managed goal executor with the exact persisted invocation and current authorization.
|
|
424
|
+
It does not promise rollback or authorize a new write. Consumers without these
|
|
425
|
+
optional fields keep the existing version, idempotency, status, and cancellation
|
|
426
|
+
behavior.
|
|
427
|
+
|
|
428
|
+
## Contracts-first consumer revisions
|
|
429
|
+
|
|
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
|
|
@@ -237,3 +238,40 @@ import paths.
|
|
|
237
238
|
|
|
238
239
|
This repository is licensed under the Apache License 2.0. See
|
|
239
240
|
[LICENSE](./LICENSE) for the full license text.
|
|
241
|
+
|
|
242
|
+
### Workbench model preferences
|
|
243
|
+
|
|
244
|
+
`WorkbenchSendMessageStreamRequest.modelPreferences` selects a public model and
|
|
245
|
+
an optional `auto`, `low`, `medium`, or `high` reasoning effort for internal general
|
|
246
|
+
chat. Preferences persist in session metadata when a message is sent; an empty
|
|
247
|
+
public model follows the global default. External agents and analysis modes manage
|
|
248
|
+
their own models. The workbench catalog exposes only permitted public model names.
|
|
249
|
+
|
|
250
|
+
Gateway routes may declare `metadata.reasoningEfforts: ["low", "medium", "high"]`
|
|
251
|
+
(or a supported subset). Only OpenAI-wire routes without protocol conversion expose
|
|
252
|
+
these levels; every eligible fallback must support a level for it to be offered.
|
|
253
|
+
Unknown capabilities offer automatic reasoning only. Explicit supported efforts map
|
|
254
|
+
to `reasoning_effort` for chat completions and `reasoning.effort` for Responses.
|
|
255
|
+
|
|
256
|
+
### Shared native Helm task adapter
|
|
257
|
+
|
|
258
|
+
`helmrelease/runtime` applies the versioned Helm execution contract through Helm 4.
|
|
259
|
+
Both core Direct and the standalone Agent supply their own authorized action configuration;
|
|
260
|
+
queueing, approvals, secret resolution and chart downloads remain outside this package.
|
|
261
|
+
SDK-only consumers need not import this optional package. Its native revision and recovery
|
|
262
|
+
checks are tested once for both execution modes.
|
|
263
|
+
|
|
264
|
+
Agent-local authenticated POST endpoints `/api/v1/platform/helm/delivery/prepare`,
|
|
265
|
+
`/api/v1/platform/helm/delivery/preflight` and `/api/v1/platform/helm/delivery/observe` accept `HelmExecutionTaskPayload` and return a
|
|
266
|
+
`data` envelope with the prepared payload or `HelmExecutionTaskResult`, respectively.
|
|
267
|
+
They enforce the configured cluster identity and are read-only; `apply` is accepted
|
|
268
|
+
only by the claimed-task runner. Confidential requests are bounded to 8 MiB,
|
|
269
|
+
rendered manifests plus hooks to 2 MiB and values to 1 MiB, and are never logged.
|
|
270
|
+
|
|
271
|
+
### Controller-aware Agent execution
|
|
272
|
+
|
|
273
|
+
Manifest tasks emitted by the controller-aware Core use `manifest_agent_v3.<clusterId>` and require the Agent summary capability `manifest.execution.v3`. New Agents also accept legacy `manifest_agent.<clusterId>` and `manifest_agent_v2.<clusterId>` tasks using the protected executor. Old Agents cannot claim the new provider kind; capability checks alone are not a substitute for this claim boundary during rolling upgrades.
|
|
274
|
+
|
|
275
|
+
Native YAML/CR writes and workload restart, scale, rollback and image changes use the existing request/response bodies under `/api/v1/platform/ownership-v2`, with the original route suffix. This endpoint family guarantees live external-owner checks for Operator, Argo CD, and Argo Rollouts resources and optimistic identity fencing; ownership conflicts return HTTP 409. Core must not fall back to older mutations after 404/405. Reads retain their existing routes.
|
|
276
|
+
|
|
277
|
+
`resource/runtime` implements bounded WorkloadCronJob, Argo CD, and Argo Rollouts adapters shared by Direct and Agent. The frozen inventory, operation identity, current generation, resource UID/version, and child-resource evidence determine completion. Blue-green and Traefik canary delivery observe native Service revisions, weights, and complete AnalysisRun metric windows. Promotion only releases manual pauses; analysis failure and cancellation require confirmed stable traffic. Restoring desired configuration uses a new governed operation. Other CRs and traffic plugins are not inferred as supported from a generic Ready condition.
|
|
@@ -6,8 +6,8 @@ import _ "embed"
|
|
|
6
6
|
|
|
7
7
|
const (
|
|
8
8
|
PermissionCatalogVersion = "2.0.0"
|
|
9
|
-
PermissionCatalogContentSHA256 = "
|
|
10
|
-
PermissionCatalogSHA256 = "
|
|
9
|
+
PermissionCatalogContentSHA256 = "5b4c9eed71c549d61a6fd538db542681cb2932619d66ab031c74fcbaaa0c9867"
|
|
10
|
+
PermissionCatalogSHA256 = "e1e4bab807f64894c9bbde245394902fb1e82253d5847585102560ea6f853894"
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
//go:embed permission-catalog.json
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package auth
|
|
2
|
+
|
|
3
|
+
import "strings"
|
|
4
|
+
|
|
5
|
+
// IsOutpostIdentityHeader identifies the response headers supported by the v1
|
|
6
|
+
// Outpost protocol. Transport, cookie and internal authentication headers are
|
|
7
|
+
// deliberately excluded, including when returned by a configured claim mapping.
|
|
8
|
+
func IsOutpostIdentityHeader(name string) bool {
|
|
9
|
+
switch strings.ToLower(strings.TrimSpace(name)) {
|
|
10
|
+
case "x-auth-request-user", "x-auth-request-email", "x-auth-request-groups",
|
|
11
|
+
"x-soha-user", "x-soha-user-id", "x-soha-email", "x-soha-roles",
|
|
12
|
+
"x-soha-teams", "x-soha-groups", "x-soha-projects", "x-soha-tags":
|
|
13
|
+
return true
|
|
14
|
+
default:
|
|
15
|
+
return false
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package auth
|
|
2
|
+
|
|
3
|
+
import "testing"
|
|
4
|
+
|
|
5
|
+
func TestOutpostIdentityHeaders(t *testing.T) {
|
|
6
|
+
for _, name := range []string{"X-Soha-User-ID", "X-Soha-Projects", "X-Soha-Tags", " x-auth-request-email "} {
|
|
7
|
+
if !IsOutpostIdentityHeader(name) {
|
|
8
|
+
t.Errorf("supported identity header %q rejected", name)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
for _, name := range []string{"Set-Cookie", "Authorization", "Location", "X-Forwarded-Host", "X-Soha-Outpost-Token", "X-Soha-Session-Token", "X-Auth-Email", "X-Soha-Email\r\nInjected"} {
|
|
12
|
+
if IsOutpostIdentityHeader(name) {
|
|
13
|
+
t.Errorf("unsupported header %q accepted", name)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "authorization.opensoha.io/v1",
|
|
3
3
|
"catalogVersion": "2.0.0",
|
|
4
|
-
"contentHash": "sha256:
|
|
4
|
+
"contentHash": "sha256:5b4c9eed71c549d61a6fd538db542681cb2932619d66ab031c74fcbaaa0c9867",
|
|
5
5
|
"permissions": [
|
|
6
6
|
{
|
|
7
7
|
"key": "access.directory.create",
|
|
@@ -2846,6 +2846,62 @@
|
|
|
2846
2846
|
"status": "active",
|
|
2847
2847
|
"assignable": true
|
|
2848
2848
|
},
|
|
2849
|
+
{
|
|
2850
|
+
"key": "delivery.deployment-templates.create",
|
|
2851
|
+
"domain": "delivery",
|
|
2852
|
+
"resource": "deployment-templates",
|
|
2853
|
+
"action": "create",
|
|
2854
|
+
"displayName": "创建构建模板",
|
|
2855
|
+
"riskLevel": "mutate",
|
|
2856
|
+
"scopeKinds": [
|
|
2857
|
+
"workspace"
|
|
2858
|
+
],
|
|
2859
|
+
"approvalPolicy": "never",
|
|
2860
|
+
"status": "active",
|
|
2861
|
+
"assignable": true
|
|
2862
|
+
},
|
|
2863
|
+
{
|
|
2864
|
+
"key": "delivery.deployment-templates.delete",
|
|
2865
|
+
"domain": "delivery",
|
|
2866
|
+
"resource": "deployment-templates",
|
|
2867
|
+
"action": "delete",
|
|
2868
|
+
"displayName": "删除构建模板",
|
|
2869
|
+
"riskLevel": "high",
|
|
2870
|
+
"scopeKinds": [
|
|
2871
|
+
"workspace"
|
|
2872
|
+
],
|
|
2873
|
+
"approvalPolicy": "eligible",
|
|
2874
|
+
"status": "active",
|
|
2875
|
+
"assignable": true
|
|
2876
|
+
},
|
|
2877
|
+
{
|
|
2878
|
+
"key": "delivery.deployment-templates.update",
|
|
2879
|
+
"domain": "delivery",
|
|
2880
|
+
"resource": "deployment-templates",
|
|
2881
|
+
"action": "update",
|
|
2882
|
+
"displayName": "修改构建模板",
|
|
2883
|
+
"riskLevel": "mutate",
|
|
2884
|
+
"scopeKinds": [
|
|
2885
|
+
"workspace"
|
|
2886
|
+
],
|
|
2887
|
+
"approvalPolicy": "never",
|
|
2888
|
+
"status": "active",
|
|
2889
|
+
"assignable": true
|
|
2890
|
+
},
|
|
2891
|
+
{
|
|
2892
|
+
"key": "delivery.deployment-templates.view",
|
|
2893
|
+
"domain": "delivery",
|
|
2894
|
+
"resource": "deployment-templates",
|
|
2895
|
+
"action": "view",
|
|
2896
|
+
"displayName": "查看构建模板",
|
|
2897
|
+
"riskLevel": "read",
|
|
2898
|
+
"scopeKinds": [
|
|
2899
|
+
"workspace"
|
|
2900
|
+
],
|
|
2901
|
+
"approvalPolicy": "never",
|
|
2902
|
+
"status": "active",
|
|
2903
|
+
"assignable": true
|
|
2904
|
+
},
|
|
2849
2905
|
{
|
|
2850
2906
|
"key": "delivery.execution-tasks.cancel",
|
|
2851
2907
|
"domain": "delivery",
|
|
@@ -3322,6 +3378,126 @@
|
|
|
3322
3378
|
"status": "active",
|
|
3323
3379
|
"assignable": true
|
|
3324
3380
|
},
|
|
3381
|
+
{
|
|
3382
|
+
"key": "delivery.template-sources.create",
|
|
3383
|
+
"domain": "delivery",
|
|
3384
|
+
"resource": "template-sources",
|
|
3385
|
+
"action": "create",
|
|
3386
|
+
"displayName": "创建交付模板来源",
|
|
3387
|
+
"riskLevel": "mutate",
|
|
3388
|
+
"scopeKinds": [
|
|
3389
|
+
"workspace",
|
|
3390
|
+
"resource"
|
|
3391
|
+
],
|
|
3392
|
+
"approvalPolicy": "never",
|
|
3393
|
+
"status": "active",
|
|
3394
|
+
"assignable": true
|
|
3395
|
+
},
|
|
3396
|
+
{
|
|
3397
|
+
"key": "delivery.template-sources.delete",
|
|
3398
|
+
"domain": "delivery",
|
|
3399
|
+
"resource": "template-sources",
|
|
3400
|
+
"action": "delete",
|
|
3401
|
+
"displayName": "移除交付模板来源",
|
|
3402
|
+
"riskLevel": "mutate",
|
|
3403
|
+
"scopeKinds": [
|
|
3404
|
+
"workspace",
|
|
3405
|
+
"resource"
|
|
3406
|
+
],
|
|
3407
|
+
"approvalPolicy": "never",
|
|
3408
|
+
"status": "active",
|
|
3409
|
+
"assignable": true
|
|
3410
|
+
},
|
|
3411
|
+
{
|
|
3412
|
+
"key": "delivery.template-sources.sync",
|
|
3413
|
+
"domain": "delivery",
|
|
3414
|
+
"resource": "template-sources",
|
|
3415
|
+
"action": "sync",
|
|
3416
|
+
"displayName": "同步交付模板来源",
|
|
3417
|
+
"riskLevel": "mutate",
|
|
3418
|
+
"scopeKinds": [
|
|
3419
|
+
"workspace",
|
|
3420
|
+
"resource"
|
|
3421
|
+
],
|
|
3422
|
+
"approvalPolicy": "never",
|
|
3423
|
+
"status": "active",
|
|
3424
|
+
"assignable": true
|
|
3425
|
+
},
|
|
3426
|
+
{
|
|
3427
|
+
"key": "delivery.template-sources.update",
|
|
3428
|
+
"domain": "delivery",
|
|
3429
|
+
"resource": "template-sources",
|
|
3430
|
+
"action": "update",
|
|
3431
|
+
"displayName": "修改交付模板来源",
|
|
3432
|
+
"riskLevel": "mutate",
|
|
3433
|
+
"scopeKinds": [
|
|
3434
|
+
"workspace",
|
|
3435
|
+
"resource"
|
|
3436
|
+
],
|
|
3437
|
+
"approvalPolicy": "never",
|
|
3438
|
+
"status": "active",
|
|
3439
|
+
"assignable": true
|
|
3440
|
+
},
|
|
3441
|
+
{
|
|
3442
|
+
"key": "delivery.template-sources.view",
|
|
3443
|
+
"domain": "delivery",
|
|
3444
|
+
"resource": "template-sources",
|
|
3445
|
+
"action": "view",
|
|
3446
|
+
"displayName": "查看交付模板来源",
|
|
3447
|
+
"riskLevel": "read",
|
|
3448
|
+
"scopeKinds": [
|
|
3449
|
+
"workspace",
|
|
3450
|
+
"resource"
|
|
3451
|
+
],
|
|
3452
|
+
"approvalPolicy": "never",
|
|
3453
|
+
"status": "active",
|
|
3454
|
+
"assignable": true
|
|
3455
|
+
},
|
|
3456
|
+
{
|
|
3457
|
+
"key": "delivery.triggers.create",
|
|
3458
|
+
"domain": "delivery",
|
|
3459
|
+
"resource": "triggers",
|
|
3460
|
+
"action": "create",
|
|
3461
|
+
"displayName": "创建交付触发器",
|
|
3462
|
+
"riskLevel": "mutate",
|
|
3463
|
+
"scopeKinds": [
|
|
3464
|
+
"workspace",
|
|
3465
|
+
"resource"
|
|
3466
|
+
],
|
|
3467
|
+
"approvalPolicy": "never",
|
|
3468
|
+
"status": "active",
|
|
3469
|
+
"assignable": true
|
|
3470
|
+
},
|
|
3471
|
+
{
|
|
3472
|
+
"key": "delivery.triggers.update",
|
|
3473
|
+
"domain": "delivery",
|
|
3474
|
+
"resource": "triggers",
|
|
3475
|
+
"action": "update",
|
|
3476
|
+
"displayName": "修改交付触发器",
|
|
3477
|
+
"riskLevel": "mutate",
|
|
3478
|
+
"scopeKinds": [
|
|
3479
|
+
"workspace",
|
|
3480
|
+
"resource"
|
|
3481
|
+
],
|
|
3482
|
+
"approvalPolicy": "never",
|
|
3483
|
+
"status": "active",
|
|
3484
|
+
"assignable": true
|
|
3485
|
+
},
|
|
3486
|
+
{
|
|
3487
|
+
"key": "delivery.triggers.view",
|
|
3488
|
+
"domain": "delivery",
|
|
3489
|
+
"resource": "triggers",
|
|
3490
|
+
"action": "view",
|
|
3491
|
+
"displayName": "查看交付触发器",
|
|
3492
|
+
"riskLevel": "read",
|
|
3493
|
+
"scopeKinds": [
|
|
3494
|
+
"workspace",
|
|
3495
|
+
"resource"
|
|
3496
|
+
],
|
|
3497
|
+
"approvalPolicy": "never",
|
|
3498
|
+
"status": "active",
|
|
3499
|
+
"assignable": true
|
|
3500
|
+
},
|
|
3325
3501
|
{
|
|
3326
3502
|
"key": "delivery.workflow-templates.create",
|
|
3327
3503
|
"domain": "delivery",
|
|
@@ -5030,6 +5206,198 @@
|
|
|
5030
5206
|
"status": "active",
|
|
5031
5207
|
"assignable": true
|
|
5032
5208
|
},
|
|
5209
|
+
{
|
|
5210
|
+
"key": "network_access.vpn_dashboard.view",
|
|
5211
|
+
"domain": "network_access",
|
|
5212
|
+
"resource": "vpn_dashboard",
|
|
5213
|
+
"action": "view",
|
|
5214
|
+
"displayName": "查看VPN 连接看板",
|
|
5215
|
+
"riskLevel": "read",
|
|
5216
|
+
"scopeKinds": [
|
|
5217
|
+
"tenant",
|
|
5218
|
+
"workspace",
|
|
5219
|
+
"resource"
|
|
5220
|
+
],
|
|
5221
|
+
"approvalPolicy": "never",
|
|
5222
|
+
"status": "active",
|
|
5223
|
+
"assignable": true
|
|
5224
|
+
},
|
|
5225
|
+
{
|
|
5226
|
+
"key": "network_access.vpn_profiles.create",
|
|
5227
|
+
"domain": "network_access",
|
|
5228
|
+
"resource": "vpn_profiles",
|
|
5229
|
+
"action": "create",
|
|
5230
|
+
"displayName": "创建VPN 连接方案",
|
|
5231
|
+
"riskLevel": "mutate",
|
|
5232
|
+
"scopeKinds": [
|
|
5233
|
+
"tenant",
|
|
5234
|
+
"workspace",
|
|
5235
|
+
"resource"
|
|
5236
|
+
],
|
|
5237
|
+
"approvalPolicy": "never",
|
|
5238
|
+
"status": "active",
|
|
5239
|
+
"assignable": true
|
|
5240
|
+
},
|
|
5241
|
+
{
|
|
5242
|
+
"key": "network_access.vpn_profiles.delete",
|
|
5243
|
+
"domain": "network_access",
|
|
5244
|
+
"resource": "vpn_profiles",
|
|
5245
|
+
"action": "delete",
|
|
5246
|
+
"displayName": "删除VPN 连接方案",
|
|
5247
|
+
"riskLevel": "mutate",
|
|
5248
|
+
"scopeKinds": [
|
|
5249
|
+
"tenant",
|
|
5250
|
+
"workspace",
|
|
5251
|
+
"resource"
|
|
5252
|
+
],
|
|
5253
|
+
"approvalPolicy": "never",
|
|
5254
|
+
"status": "active",
|
|
5255
|
+
"assignable": true
|
|
5256
|
+
},
|
|
5257
|
+
{
|
|
5258
|
+
"key": "network_access.vpn_profiles.publish",
|
|
5259
|
+
"domain": "network_access",
|
|
5260
|
+
"resource": "vpn_profiles",
|
|
5261
|
+
"action": "publish",
|
|
5262
|
+
"displayName": "发布VPN 连接方案",
|
|
5263
|
+
"riskLevel": "mutate",
|
|
5264
|
+
"scopeKinds": [
|
|
5265
|
+
"tenant",
|
|
5266
|
+
"workspace",
|
|
5267
|
+
"resource"
|
|
5268
|
+
],
|
|
5269
|
+
"approvalPolicy": "never",
|
|
5270
|
+
"status": "active",
|
|
5271
|
+
"assignable": true
|
|
5272
|
+
},
|
|
5273
|
+
{
|
|
5274
|
+
"key": "network_access.vpn_profiles.update",
|
|
5275
|
+
"domain": "network_access",
|
|
5276
|
+
"resource": "vpn_profiles",
|
|
5277
|
+
"action": "update",
|
|
5278
|
+
"displayName": "修改VPN 连接方案",
|
|
5279
|
+
"riskLevel": "mutate",
|
|
5280
|
+
"scopeKinds": [
|
|
5281
|
+
"tenant",
|
|
5282
|
+
"workspace",
|
|
5283
|
+
"resource"
|
|
5284
|
+
],
|
|
5285
|
+
"approvalPolicy": "never",
|
|
5286
|
+
"status": "active",
|
|
5287
|
+
"assignable": true
|
|
5288
|
+
},
|
|
5289
|
+
{
|
|
5290
|
+
"key": "network_access.vpn_profiles.view",
|
|
5291
|
+
"domain": "network_access",
|
|
5292
|
+
"resource": "vpn_profiles",
|
|
5293
|
+
"action": "view",
|
|
5294
|
+
"displayName": "查看VPN 连接方案",
|
|
5295
|
+
"riskLevel": "read",
|
|
5296
|
+
"scopeKinds": [
|
|
5297
|
+
"tenant",
|
|
5298
|
+
"workspace",
|
|
5299
|
+
"resource"
|
|
5300
|
+
],
|
|
5301
|
+
"approvalPolicy": "never",
|
|
5302
|
+
"status": "active",
|
|
5303
|
+
"assignable": true
|
|
5304
|
+
},
|
|
5305
|
+
{
|
|
5306
|
+
"key": "network_access.vpn_selection_policies.create",
|
|
5307
|
+
"domain": "network_access",
|
|
5308
|
+
"resource": "vpn_selection_policies",
|
|
5309
|
+
"action": "create",
|
|
5310
|
+
"displayName": "创建VPN 选择策略",
|
|
5311
|
+
"riskLevel": "mutate",
|
|
5312
|
+
"scopeKinds": [
|
|
5313
|
+
"tenant",
|
|
5314
|
+
"workspace",
|
|
5315
|
+
"resource"
|
|
5316
|
+
],
|
|
5317
|
+
"approvalPolicy": "never",
|
|
5318
|
+
"status": "active",
|
|
5319
|
+
"assignable": true
|
|
5320
|
+
},
|
|
5321
|
+
{
|
|
5322
|
+
"key": "network_access.vpn_selection_policies.delete",
|
|
5323
|
+
"domain": "network_access",
|
|
5324
|
+
"resource": "vpn_selection_policies",
|
|
5325
|
+
"action": "delete",
|
|
5326
|
+
"displayName": "删除VPN 选择策略",
|
|
5327
|
+
"riskLevel": "mutate",
|
|
5328
|
+
"scopeKinds": [
|
|
5329
|
+
"tenant",
|
|
5330
|
+
"workspace",
|
|
5331
|
+
"resource"
|
|
5332
|
+
],
|
|
5333
|
+
"approvalPolicy": "never",
|
|
5334
|
+
"status": "active",
|
|
5335
|
+
"assignable": true
|
|
5336
|
+
},
|
|
5337
|
+
{
|
|
5338
|
+
"key": "network_access.vpn_selection_policies.preview",
|
|
5339
|
+
"domain": "network_access",
|
|
5340
|
+
"resource": "vpn_selection_policies",
|
|
5341
|
+
"action": "preview",
|
|
5342
|
+
"displayName": "模拟VPN 选择策略",
|
|
5343
|
+
"riskLevel": "read",
|
|
5344
|
+
"scopeKinds": [
|
|
5345
|
+
"tenant",
|
|
5346
|
+
"workspace",
|
|
5347
|
+
"resource"
|
|
5348
|
+
],
|
|
5349
|
+
"approvalPolicy": "never",
|
|
5350
|
+
"status": "active",
|
|
5351
|
+
"assignable": true
|
|
5352
|
+
},
|
|
5353
|
+
{
|
|
5354
|
+
"key": "network_access.vpn_selection_policies.publish",
|
|
5355
|
+
"domain": "network_access",
|
|
5356
|
+
"resource": "vpn_selection_policies",
|
|
5357
|
+
"action": "publish",
|
|
5358
|
+
"displayName": "发布VPN 选择策略",
|
|
5359
|
+
"riskLevel": "mutate",
|
|
5360
|
+
"scopeKinds": [
|
|
5361
|
+
"tenant",
|
|
5362
|
+
"workspace",
|
|
5363
|
+
"resource"
|
|
5364
|
+
],
|
|
5365
|
+
"approvalPolicy": "never",
|
|
5366
|
+
"status": "active",
|
|
5367
|
+
"assignable": true
|
|
5368
|
+
},
|
|
5369
|
+
{
|
|
5370
|
+
"key": "network_access.vpn_selection_policies.update",
|
|
5371
|
+
"domain": "network_access",
|
|
5372
|
+
"resource": "vpn_selection_policies",
|
|
5373
|
+
"action": "update",
|
|
5374
|
+
"displayName": "修改VPN 选择策略",
|
|
5375
|
+
"riskLevel": "mutate",
|
|
5376
|
+
"scopeKinds": [
|
|
5377
|
+
"tenant",
|
|
5378
|
+
"workspace",
|
|
5379
|
+
"resource"
|
|
5380
|
+
],
|
|
5381
|
+
"approvalPolicy": "never",
|
|
5382
|
+
"status": "active",
|
|
5383
|
+
"assignable": true
|
|
5384
|
+
},
|
|
5385
|
+
{
|
|
5386
|
+
"key": "network_access.vpn_selection_policies.view",
|
|
5387
|
+
"domain": "network_access",
|
|
5388
|
+
"resource": "vpn_selection_policies",
|
|
5389
|
+
"action": "view",
|
|
5390
|
+
"displayName": "查看VPN 选择策略",
|
|
5391
|
+
"riskLevel": "read",
|
|
5392
|
+
"scopeKinds": [
|
|
5393
|
+
"tenant",
|
|
5394
|
+
"workspace",
|
|
5395
|
+
"resource"
|
|
5396
|
+
],
|
|
5397
|
+
"approvalPolicy": "never",
|
|
5398
|
+
"status": "active",
|
|
5399
|
+
"assignable": true
|
|
5400
|
+
},
|
|
5033
5401
|
{
|
|
5034
5402
|
"key": "observe.ai.chat",
|
|
5035
5403
|
"domain": "observe",
|
|
@@ -8784,6 +9152,20 @@
|
|
|
8784
9152
|
"platform.network.topology.view"
|
|
8785
9153
|
]
|
|
8786
9154
|
},
|
|
9155
|
+
{
|
|
9156
|
+
"key": "platform.nodes.create",
|
|
9157
|
+
"domain": "platform",
|
|
9158
|
+
"resource": "nodes",
|
|
9159
|
+
"action": "create",
|
|
9160
|
+
"displayName": "创建 Kubernetes Node",
|
|
9161
|
+
"riskLevel": "high",
|
|
9162
|
+
"scopeKinds": [
|
|
9163
|
+
"cluster"
|
|
9164
|
+
],
|
|
9165
|
+
"approvalPolicy": "eligible",
|
|
9166
|
+
"status": "active",
|
|
9167
|
+
"assignable": true
|
|
9168
|
+
},
|
|
8787
9169
|
{
|
|
8788
9170
|
"key": "platform.nodes.delete",
|
|
8789
9171
|
"domain": "platform",
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"soha": "d675a708806072a2fee42e3c2c00309091a8cfb9",
|
|
3
|
+
"soha-web": "816ec0fb82e6e804f0f66d47d3446a7b5baeabc1",
|
|
4
|
+
"soha-cli": "1c9b760c986a9c1a5148db55b72ab99d23edd7a3",
|
|
5
|
+
"soha-agent": "af1efc0b0cd6bb544153429fa28244dd6cc81ac7",
|
|
6
|
+
"soha-skills": "0345171ee1c9f23ab5d4350767395d0919dfb21c"
|
|
7
|
+
}
|