@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.
Files changed (275) hide show
  1. package/COMPATIBILITY.md +72 -0
  2. package/README.md +38 -0
  3. package/auth/catalog_generated.go +2 -2
  4. package/auth/outpost_headers.go +17 -0
  5. package/auth/outpost_headers_test.go +16 -0
  6. package/auth/permission-catalog.json +383 -1
  7. package/compat/consumer-revisions.json +7 -0
  8. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  9. package/compat/openapi-loose-boundaries-0.1.0.json +78 -46
  10. package/delivery/canonical.go +136 -0
  11. package/delivery/document.go +203 -0
  12. package/delivery/document.schema.json +1527 -0
  13. package/delivery/document_test.go +191 -0
  14. package/delivery/parser.go +155 -0
  15. package/evaluation/evaluation-run.schema.json +64 -10
  16. package/fixtures/json-schema/gateway-manifest/invalid/bad-execution-mode.json +73 -0
  17. package/fixtures/json-schema/gateway-manifest/invalid/unversioned-check.json +85 -0
  18. package/fixtures/json-schema/gateway-manifest/valid/checks.json +86 -0
  19. package/fixtures/json-schema/gateway-manifest/valid/versioned-task.json +73 -0
  20. package/fixtures/json-schema/network-ingest-event/invalid/vpn-probe-negative-rtt.json +34 -0
  21. package/fixtures/json-schema/network-ingest-event/invalid/vpn-stats-secret.json +27 -0
  22. package/fixtures/json-schema/network-ingest-event/valid/vpn-probe-batch.json +45 -0
  23. package/fixtures/json-schema/network-ingest-event/valid/vpn-tunnel-stats.json +26 -0
  24. package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-bad-token.json +15 -0
  25. package/fixtures/json-schema/network-runtime-protocol/invalid/vpn-managed-mode-override.json +16 -0
  26. package/fixtures/json-schema/network-runtime-protocol/valid/managed-vpn-macos-enrollment.json +27 -0
  27. package/fixtures/json-schema/network-runtime-protocol/valid/vpn-managed-connect.json +15 -0
  28. package/fixtures/openapi/AgentChatInput/invalid/empty-question.json +4 -0
  29. package/fixtures/openapi/AgentChatInput/invalid/system-role.json +9 -0
  30. package/fixtures/openapi/AgentChatInput/valid/authorized-background.json +5 -0
  31. package/fixtures/openapi/AgentChatInput/valid/conversation.json +15 -0
  32. package/fixtures/openapi/AgentRunnerToolCallRequest/invalid/model-identity.json +1 -0
  33. package/fixtures/openapi/AgentRunnerToolCallRequest/valid/search.json +1 -0
  34. package/fixtures/openapi/ApplicationInput/invalid/negative-version.json +6 -0
  35. package/fixtures/openapi/ApplicationInput/invalid/zero-version.json +6 -0
  36. package/fixtures/openapi/ApplicationInput/valid/versioned.json +6 -0
  37. package/fixtures/openapi/ApprovalRequest/invalid/resolved-scopes.json +20 -0
  38. package/fixtures/openapi/ApprovalRequest/valid/resolved-scopes.json +21 -0
  39. package/fixtures/openapi/BuildTemplateInput/invalid/negative-revision.json +6 -0
  40. package/fixtures/openapi/BuildTemplateInput/valid/draft.json +11 -0
  41. package/fixtures/openapi/BuildTriggerRequest/invalid/no-ref.json +1 -0
  42. package/fixtures/openapi/BuildTriggerRequest/valid/no-environment.json +1 -0
  43. package/fixtures/openapi/BuildpacksConfiguration/invalid/mutable-builder.json +5 -0
  44. package/fixtures/openapi/BuildpacksConfiguration/invalid/privilege-override.json +6 -0
  45. package/fixtures/openapi/BuildpacksConfiguration/invalid/unsupported-platform.json +5 -0
  46. package/fixtures/openapi/BuildpacksConfiguration/valid/pinned.json +5 -0
  47. package/fixtures/openapi/CapabilityAssessment/invalid/contract.json +16 -0
  48. package/fixtures/openapi/CapabilityAssessment/valid/contract.json +16 -0
  49. package/fixtures/openapi/CapabilityPlan/invalid/contract.json +16 -0
  50. package/fixtures/openapi/CapabilityPlan/valid/contract.json +19 -0
  51. package/fixtures/openapi/CapabilityPlanValidation/invalid/contract.json +5 -0
  52. package/fixtures/openapi/CapabilityPlanValidation/valid/contract.json +11 -0
  53. package/fixtures/openapi/CapabilityTask/invalid/contract.json +33 -0
  54. package/fixtures/openapi/CapabilityTask/valid/contract.json +34 -0
  55. package/fixtures/openapi/CapabilityTaskInput/invalid/contract.json +22 -0
  56. package/fixtures/openapi/CapabilityTaskInput/valid/contract.json +22 -0
  57. package/fixtures/openapi/CapabilityValueSemantic/invalid/contract.json +4 -0
  58. package/fixtures/openapi/CapabilityValueSemantic/valid/contract.json +7 -0
  59. package/fixtures/openapi/ConnectionCheckResult/invalid/missing-health.json +1 -0
  60. package/fixtures/openapi/ConnectionCheckResult/invalid/task-id.json +1 -0
  61. package/fixtures/openapi/ConnectionCheckResult/valid/failure.json +1 -0
  62. package/fixtures/openapi/ConnectionCheckResult/valid/healthy.json +1 -0
  63. package/fixtures/openapi/DeliveryAccessResult/invalid/release-verification.json +8 -0
  64. package/fixtures/openapi/DeliveryAccessResult/valid/release-verification.json +8 -0
  65. package/fixtures/openapi/DeliveryBatchAssessment/invalid/release-verification.json +11 -0
  66. package/fixtures/openapi/DeliveryBatchAssessment/valid/release-verification.json +11 -0
  67. package/fixtures/openapi/DeliveryBatchAssessmentInput/invalid/release-verification.json +9 -0
  68. package/fixtures/openapi/DeliveryBatchAssessmentInput/valid/release-verification.json +8 -0
  69. package/fixtures/openapi/DeliveryBatchInput/invalid/ambiguous-source.json +19 -0
  70. package/fixtures/openapi/DeliveryBatchInput/invalid/missing-idempotency.json +16 -0
  71. package/fixtures/openapi/DeliveryBatchInput/valid/quick-deploy.json +17 -0
  72. package/fixtures/openapi/DeliveryBatchInput/valid/saved-workflow.json +5 -0
  73. package/fixtures/openapi/DeliveryBlueprintInput/invalid/unversioned-preset.json +31 -0
  74. package/fixtures/openapi/DeliveryBlueprintInput/valid/service-preset.json +32 -0
  75. package/fixtures/openapi/DeliveryDocument/invalid/unknown-field.json +24 -0
  76. package/fixtures/openapi/DeliveryDocument/invalid/unknown-kind.json +23 -0
  77. package/fixtures/openapi/DeliveryDocument/invalid/unknown-version.json +23 -0
  78. package/fixtures/openapi/DeliveryDocument/valid/build-template.json +26 -0
  79. package/fixtures/openapi/DeliveryDocument/valid/deployment-template.json +26 -0
  80. package/fixtures/openapi/DeliveryDocument/valid/legacy-dag.json +39 -0
  81. package/fixtures/openapi/DeliveryDocument/valid/workflow-template.json +23 -0
  82. package/fixtures/openapi/DeliveryDocument/valid/workflow.json +20 -0
  83. package/fixtures/openapi/DeliveryDraftInput/invalid/short-idempotency-key.json +30 -0
  84. package/fixtures/openapi/DeliveryDraftInput/valid/idempotent-create.json +30 -0
  85. package/fixtures/openapi/DeliveryDraftService/invalid/zero-version.json +7 -0
  86. package/fixtures/openapi/DeliveryDraftService/valid/versioned-template.json +9 -0
  87. package/fixtures/openapi/DeliveryExecutionHistoryPage/invalid-kind.json +9 -0
  88. package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-build.json +16 -0
  89. package/fixtures/openapi/DeliveryExecutionHistoryPage/valid-empty.json +3 -0
  90. package/fixtures/openapi/DeliveryPlanApprovalInput/invalid/confirm.json +1 -0
  91. package/fixtures/openapi/DeliveryPlanApprovalInput/valid/approve.json +1 -0
  92. package/fixtures/openapi/DeliveryPlanInput/invalid/draft-manifest-revision.json +1 -0
  93. package/fixtures/openapi/DeliveryPlanInput/valid/manifest-revision.json +1 -0
  94. package/fixtures/openapi/DeliveryTargetInput/invalid/deploy-without-environment.json +7 -0
  95. package/fixtures/openapi/DeliveryTargetInput/valid/build-without-environment.json +6 -0
  96. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/duplicate-kind.json +13 -0
  97. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/embedded-credentials.json +16 -0
  98. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/empty-kinds.json +10 -0
  99. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/negative-generation.json +15 -0
  100. package/fixtures/openapi/DeliveryTemplateSourceInput/invalid/unknown-kind.json +12 -0
  101. package/fixtures/openapi/DeliveryTemplateSourceInput/valid/manual-source.json +15 -0
  102. package/fixtures/openapi/DeliveryWorkflowDefinition/invalid/unversioned-template.json +15 -0
  103. package/fixtures/openapi/DeliveryWorkflowDefinition/valid/cross-app.json +24 -0
  104. package/fixtures/openapi/DeliveryWorkflowInput/invalid/short-key.json +1 -0
  105. package/fixtures/openapi/DeliveryWorkflowInput/valid/idempotent-create.json +1 -0
  106. package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-target-override.json +7 -0
  107. package/fixtures/openapi/DeploymentTemplatePreviewInput/invalid/invalid-zero-version.json +6 -0
  108. package/fixtures/openapi/DeploymentTemplatePreviewInput/valid/valid.json +6 -0
  109. package/fixtures/openapi/DockerDeliveryConfiguration/invalid/empty-mappings.json +5 -0
  110. package/fixtures/openapi/DockerDeliveryConfiguration/valid/compose.json +7 -0
  111. package/fixtures/openapi/DockerDeliverySnapshot/invalid/missing-required-field.json +19 -0
  112. package/fixtures/openapi/DockerDeliverySnapshot/valid/frozen-project.json +20 -0
  113. package/fixtures/openapi/DockerOperationCallbackRequest/invalid/cancellation-acknowledged-not-boolean.json +13 -0
  114. package/fixtures/openapi/DockerOperationCallbackRequest/valid/cancellation-acknowledged.json +13 -0
  115. package/fixtures/openapi/DockerProjectInput/invalid/empty-host.json +4 -0
  116. package/fixtures/openapi/DockerProjectInput/valid/inline-idempotent.json +7 -0
  117. package/fixtures/openapi/DockerQuickCreateHostInput/invalid/capacity-type.json +1 -0
  118. package/fixtures/openapi/DockerQuickCreateHostInput/valid/capacity.json +1 -0
  119. package/fixtures/openapi/HelmDeliveryConfiguration/invalid/plain-credential.json +21 -0
  120. package/fixtures/openapi/HelmDeliveryConfiguration/invalid/release-name.json +20 -0
  121. package/fixtures/openapi/HelmDeliveryConfiguration/valid/private-oci.json +20 -0
  122. package/fixtures/openapi/HelmDeliverySnapshot/invalid/secret-plan.json +31 -0
  123. package/fixtures/openapi/HelmDeliverySnapshot/invalid/unknown-operation.json +28 -0
  124. package/fixtures/openapi/HelmDeliverySnapshot/valid/first-install.json +28 -0
  125. package/fixtures/openapi/IdentityApplication/invalid/outpost-status.json +1 -0
  126. package/fixtures/openapi/IdentityApplicationOnboardingInput/invalid/missing-access.json +12 -0
  127. package/fixtures/openapi/IdentityApplicationOnboardingInput/valid/link.json +13 -0
  128. package/fixtures/openapi/IdentityOutpost/invalid/missing-runtime-status.json +9 -0
  129. package/fixtures/openapi/IdentityOutpost/valid/healthy.json +17 -0
  130. package/fixtures/openapi/IdentityOutpost/valid/unregistered.json +12 -0
  131. package/fixtures/openapi/IdentityOutpostDeployment/invalid/missing-protocol.json +3 -0
  132. package/fixtures/openapi/IdentityOutpostDeployment/valid/remote.json +6 -0
  133. package/fixtures/openapi/IdentityOutpostInput/invalid/forged-observation.json +7 -0
  134. package/fixtures/openapi/IdentityOutpostInput/valid/forward-auth.json +6 -0
  135. package/fixtures/openapi/IdentityOutpostInput/valid/legacy.json +8 -0
  136. package/fixtures/openapi/IdentityProviderSetup/invalid/fake-verification.json +1 -0
  137. package/fixtures/openapi/IdentityProviderSetup/valid/incomplete.json +1 -0
  138. package/fixtures/openapi/IdentityProviderSetup/valid/remote.json +1 -0
  139. package/fixtures/openapi/IdentityProviderUserMetadata/invalid/attributes.json +8 -0
  140. package/fixtures/openapi/IdentityProviderUserMetadata/valid/attributes.json +13 -0
  141. package/fixtures/openapi/KubernetesCustomResource/invalid/negative-generation.json +1 -0
  142. package/fixtures/openapi/KubernetesCustomResource/valid/deleting-operator.json +1 -0
  143. package/fixtures/openapi/KubernetesResourceCreationReceipt/invalid/manifest-content.json +20 -0
  144. package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/confirmed.json +20 -0
  145. package/fixtures/openapi/KubernetesResourceCreationReceipt/valid/unknown.json +19 -0
  146. package/fixtures/openapi/ManifestDeploymentEnvelope/invalid/negative-resource-observation.json +57 -0
  147. package/fixtures/openapi/ManifestDeploymentEnvelope/valid/operator-deleting.json +57 -0
  148. package/fixtures/openapi/ManifestExecutionTaskPayload/invalid/gitops-empty.json +7 -0
  149. package/fixtures/openapi/ManifestExecutionTaskPayload/valid/gitops-frozen-children.json +18 -0
  150. package/fixtures/openapi/ManifestKustomizeOptions/invalid/escaping-entry.json +1 -0
  151. package/fixtures/openapi/ManifestKustomizeOptions/invalid/mutable-image.json +1 -0
  152. package/fixtures/openapi/ManifestKustomizeOptions/valid/overlay-images.json +7 -0
  153. package/fixtures/openapi/ManifestRevisionInput/invalid/missing-version.json +1 -0
  154. package/fixtures/openapi/ManifestRevisionInput/valid/current-draft.json +1 -0
  155. package/fixtures/openapi/ManifestServiceTemplateInputs/invalid/mutable-image.json +8 -0
  156. package/fixtures/openapi/ManifestServiceTemplateInputs/valid/frozen-service-image.json +9 -0
  157. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/auto-with-gateway.json +6 -0
  158. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/missing-manual-gateway.json +5 -0
  159. package/fixtures/openapi/NetworkVPNConnectionIntentInput/invalid/mode-override.json +7 -0
  160. package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/auto-intent.json +5 -0
  161. package/fixtures/openapi/NetworkVPNConnectionIntentInput/valid/manual-intent.json +6 -0
  162. package/fixtures/openapi/NetworkVPNProfileInput/invalid/unknown-private-key.json +25 -0
  163. package/fixtures/openapi/NetworkVPNProfileInput/valid/assigned-profile.json +24 -0
  164. package/fixtures/openapi/NetworkVPNSelectionPolicyInput/invalid/unbounded-attempts.json +21 -0
  165. package/fixtures/openapi/NetworkVPNSelectionPolicyInput/valid/provider-policy.json +21 -0
  166. package/fixtures/openapi/ObservabilityMetricAssessmentInput/invalid/arbitrary-expression.json +10 -0
  167. package/fixtures/openapi/ObservabilityMetricAssessmentInput/valid/metric-window.json +10 -0
  168. package/fixtures/openapi/PluginManifest/valid/hermes-api.json +53 -0
  169. package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/missing-identity.json +5 -0
  170. package/fixtures/openapi/ProgressiveRolloutControlInput/invalid/skip-analysis.json +5 -0
  171. package/fixtures/openapi/ProgressiveRolloutControlInput/valid/pause.json +5 -0
  172. package/fixtures/openapi/ReleaseTargetInput/invalid/missing-required-field.json +15 -0
  173. package/fixtures/openapi/ReleaseTargetInput/valid/docker-compose.json +16 -0
  174. package/fixtures/openapi/RepositoryAnalysis/invalid/moving-ref.json +11 -0
  175. package/fixtures/openapi/RepositoryAnalysis/valid/go.json +29 -0
  176. package/fixtures/openapi/RepositoryAnalysisInput/invalid/arbitrary-source-url.json +6 -0
  177. package/fixtures/openapi/RepositoryAnalysisInput/invalid/missing-ref.json +4 -0
  178. package/fixtures/openapi/RepositoryAnalysisInput/valid/nested-project.json +6 -0
  179. package/fixtures/openapi/ServiceDeploymentTemplateBinding/invalid/invalid-unpinned.json +4 -0
  180. package/fixtures/openapi/ServiceDeploymentTemplateBinding/valid/valid.json +7 -0
  181. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-executable-schema.json +25 -0
  182. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-missing-schema.json +21 -0
  183. package/fixtures/openapi/ServiceDeploymentTemplateInput/invalid/invalid-mixed-renderers.json +40 -0
  184. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-nested-parameters.json +41 -0
  185. package/fixtures/openapi/ServiceDeploymentTemplateInput/valid/valid-yaml.json +34 -0
  186. package/fixtures/openapi/TemplatePublishInput/invalid/missing-revision.json +1 -0
  187. package/fixtures/openapi/TemplatePublishInput/invalid/unknown-field.json +4 -0
  188. package/fixtures/openapi/TemplatePublishInput/invalid/zero-revision.json +3 -0
  189. package/fixtures/openapi/TemplatePublishInput/valid/revision.json +3 -0
  190. package/fixtures/openapi/ToolCapability/invalid/bad-idempotency.json +35 -0
  191. package/fixtures/openapi/ToolCapability/invalid/unversioned-check.json +47 -0
  192. package/fixtures/openapi/ToolCapability/valid/checks.json +48 -0
  193. package/fixtures/openapi/ToolCapability/valid/versioned-task.json +35 -0
  194. package/fixtures/openapi/ToolInvocationRequest/invalid/empty-version.json +8 -0
  195. package/fixtures/openapi/ToolInvocationRequest/valid/versioned.json +8 -0
  196. package/fixtures/openapi/ToolInvocationResult/invalid/missing-status-call.json +13 -0
  197. package/fixtures/openapi/ToolInvocationResult/valid/task.json +20 -0
  198. package/fixtures/openapi/UpdateBrandingSettingsRequest/invalid/dark-logo-type.json +9 -0
  199. package/fixtures/openapi/UpdateBrandingSettingsRequest/valid/dark-logos.json +10 -0
  200. package/fixtures/openapi/VirtualMachineCreateInput/invalid/capacity-type.json +1 -0
  201. package/fixtures/openapi/VirtualMachineCreateInput/valid/capacity.json +1 -0
  202. package/fixtures/openapi/VirtualizationCapacityInput/invalid/missing-disk.json +1 -0
  203. package/fixtures/openapi/VirtualizationCapacityInput/valid/running-vm.json +1 -0
  204. package/fixtures/openapi/VirtualizationCapacityResult/invalid/invented-status.json +1 -0
  205. package/fixtures/openapi/VirtualizationCapacityResult/valid/available.json +1 -0
  206. package/fixtures/openapi/VirtualizationWorkerCreateInput/invalid/secret-input.json +5 -0
  207. package/fixtures/openapi/VirtualizationWorkerCreateInput/valid/one-worker.json +4 -0
  208. package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/external-owner.json +27 -0
  209. package/fixtures/openapi/VirtualizationWorkerPoolInput/invalid/zero-budget.json +27 -0
  210. package/fixtures/openapi/VirtualizationWorkerPoolInput/valid/registered.json +27 -0
  211. package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/invalid/nested-data.json +5 -0
  212. package/fixtures/openapi/VirtualizationWorkerPoolListEnvelope/valid/empty.json +3 -0
  213. package/fixtures/openapi/WorkbenchContextSelection/invalid/missing-file-content.json +8 -0
  214. package/fixtures/openapi/WorkbenchContextSelection/invalid/unknown-reference-kind.json +8 -0
  215. package/fixtures/openapi/WorkbenchContextSelection/valid/text-and-resource.json +17 -0
  216. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/trigger-without-plan.json +10 -0
  217. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/unknown-trigger.json +28 -0
  218. package/fixtures/openapi/WorkbenchInspectionTaskInput/invalid/zero-interval.json +28 -0
  219. package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/alert-capability.json +30 -0
  220. package/fixtures/openapi/WorkbenchInspectionTaskInput/valid/scheduled-capability.json +28 -0
  221. package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/missing-rule.json +3 -0
  222. package/fixtures/openapi/WorkbenchInspectionTrigger/invalid/schedule-alert-selector.json +4 -0
  223. package/fixtures/openapi/WorkbenchInspectionTrigger/valid/schedule.json +3 -0
  224. package/fixtures/openapi/WorkbenchModelPreferences/invalid/unknown-effort.json +1 -0
  225. package/fixtures/openapi/WorkbenchModelPreferences/valid/selected.json +1 -0
  226. package/fixtures/openapi/WorkflowCatalogPage/invalid/unsupported-kind.json +6 -0
  227. package/fixtures/openapi/WorkflowCatalogPage/valid/build-without-environment.json +6 -0
  228. package/fixtures/openapi/WorkflowTemplateInput/invalid/zero-revision.json +6 -0
  229. package/fixtures/openapi/WorkflowTemplateInput/valid/draft.json +10 -0
  230. package/gen/go/sohaapi/client.go +11 -3
  231. package/gen/go/sohaapi/client_test.go +26 -3
  232. package/gen/go/sohaapi/types.go +8103 -863
  233. package/gen/go/sohaapi/types_test.go +100 -1
  234. package/gen/go/sohaapi/vpn_models_test.go +21 -0
  235. package/gen/ts/sohaapi/index.ts +20390 -13160
  236. package/go.mod +107 -5
  237. package/go.sum +379 -16
  238. package/helmrelease/delivery.go +283 -0
  239. package/helmrelease/delivery_test.go +102 -0
  240. package/helmrelease/frozen_chart.go +91 -0
  241. package/helmrelease/result.go +27 -0
  242. package/helmrelease/runtime/delivery.go +508 -0
  243. package/helmrelease/runtime/delivery_test.go +236 -0
  244. package/helmrelease/runtime/resources_test.go +60 -0
  245. package/helmrelease/values.go +99 -0
  246. package/knowledge/context-envelope.schema.json +1 -0
  247. package/mcp/gateway-manifest.schema.json +387 -72
  248. package/network/README.md +40 -0
  249. package/network/network-ingest-event.schema.json +228 -0
  250. package/network/network-runtime-protocol.schema.json +457 -1
  251. package/openapi/soha-api.json +54874 -38722
  252. package/openapi/soha-api.yaml +12199 -4982
  253. package/openapi/spec_generated.go +3 -3
  254. package/package.json +3 -1
  255. package/resource/manifest_health.go +155 -0
  256. package/resource/manifest_health_test.go +37 -0
  257. package/resource/models.go +14 -0
  258. package/resource/runtime/argocd.go +166 -0
  259. package/resource/runtime/argocd_integration_test.go +142 -0
  260. package/resource/runtime/argocd_observation.go +143 -0
  261. package/resource/runtime/argocd_operation.go +253 -0
  262. package/resource/runtime/argocd_resources.go +115 -0
  263. package/resource/runtime/argocd_resources_test.go +107 -0
  264. package/resource/runtime/argocd_test.go +386 -0
  265. package/resource/runtime/health.go +115 -0
  266. package/resource/runtime/health_test.go +78 -0
  267. package/resource/runtime/operator_integration_test.go +174 -0
  268. package/resource/runtime/ownership.go +178 -0
  269. package/resource/runtime/ownership_test.go +178 -0
  270. package/resource/runtime/rollout_integration_test.go +287 -0
  271. package/resource/runtime/rollout_observation.go +252 -0
  272. package/resource/runtime/rollout_operation.go +398 -0
  273. package/resource/runtime/rollout_resources.go +385 -0
  274. package/resource/runtime/rollout_task.go +165 -0
  275. package/resource/runtime/rollout_test.go +450 -0
@@ -15,32 +15,61 @@
15
15
  "summary"
16
16
  ],
17
17
  "properties": {
18
- "name": { "type": "string" },
19
- "version": { "type": "string" },
20
- "generatedAt": { "type": "string", "format": "date-time" },
21
- "principal": { "$ref": "#/$defs/Principal" },
22
- "caller": { "$ref": "#/$defs/CallerContext" },
18
+ "name": {
19
+ "type": "string"
20
+ },
21
+ "version": {
22
+ "type": "string"
23
+ },
24
+ "generatedAt": {
25
+ "type": "string",
26
+ "format": "date-time"
27
+ },
28
+ "principal": {
29
+ "$ref": "#/$defs/Principal"
30
+ },
31
+ "caller": {
32
+ "$ref": "#/$defs/CallerContext"
33
+ },
23
34
  "permissionKeys": {
24
35
  "type": "array",
25
- "items": { "type": "string" }
36
+ "items": {
37
+ "type": "string"
38
+ }
26
39
  },
27
40
  "tools": {
28
41
  "type": "array",
29
- "items": { "$ref": "#/$defs/ToolCapability" }
42
+ "items": {
43
+ "$ref": "#/$defs/ToolCapability"
44
+ }
30
45
  },
31
46
  "resources": {
32
47
  "type": "array",
33
- "items": { "$ref": "#/$defs/ResourceCapability" }
48
+ "items": {
49
+ "$ref": "#/$defs/ResourceCapability"
50
+ }
34
51
  },
35
52
  "prompts": {
36
53
  "type": "array",
37
- "items": { "$ref": "#/$defs/PromptCapability" }
54
+ "items": {
55
+ "$ref": "#/$defs/PromptCapability"
56
+ }
38
57
  },
39
58
  "skills": {
40
59
  "type": "array",
41
- "items": { "$ref": "#/$defs/SkillCapability" }
60
+ "items": {
61
+ "$ref": "#/$defs/SkillCapability"
62
+ }
63
+ },
64
+ "summary": {
65
+ "$ref": "#/$defs/ManifestSummary"
42
66
  },
43
- "summary": { "$ref": "#/$defs/ManifestSummary" }
67
+ "catalogRevision": {
68
+ "type": "string"
69
+ },
70
+ "nextCursor": {
71
+ "type": "string"
72
+ }
44
73
  },
45
74
  "additionalProperties": false,
46
75
  "$defs": {
@@ -50,53 +79,103 @@
50
79
  },
51
80
  "Principal": {
52
81
  "type": "object",
53
- "required": ["userId", "userName", "email", "roles", "teams", "projects", "tags"],
82
+ "required": [
83
+ "userId",
84
+ "userName",
85
+ "email",
86
+ "roles",
87
+ "teams",
88
+ "projects",
89
+ "tags"
90
+ ],
54
91
  "properties": {
55
- "userId": { "type": "string" },
56
- "userName": { "type": "string" },
57
- "email": { "type": "string" },
92
+ "userId": {
93
+ "type": "string"
94
+ },
95
+ "userName": {
96
+ "type": "string"
97
+ },
98
+ "email": {
99
+ "type": "string"
100
+ },
58
101
  "roles": {
59
102
  "type": "array",
60
- "items": { "type": "string" }
103
+ "items": {
104
+ "type": "string"
105
+ }
61
106
  },
62
107
  "teams": {
63
108
  "type": "array",
64
- "items": { "type": "string" }
109
+ "items": {
110
+ "type": "string"
111
+ }
65
112
  },
66
113
  "projects": {
67
114
  "type": "array",
68
- "items": { "type": "string" }
115
+ "items": {
116
+ "type": "string"
117
+ }
69
118
  },
70
119
  "tags": {
71
120
  "type": "array",
72
- "items": { "type": "string" }
121
+ "items": {
122
+ "type": "string"
123
+ }
73
124
  },
74
125
  "permissionKeys": {
75
126
  "type": "array",
76
- "items": { "type": "string" }
127
+ "items": {
128
+ "type": "string"
129
+ }
77
130
  }
78
131
  },
79
132
  "additionalProperties": true
80
133
  },
81
134
  "CallerContext": {
82
135
  "type": "object",
83
- "required": ["identityMode"],
136
+ "required": [
137
+ "identityMode"
138
+ ],
84
139
  "properties": {
85
- "identityMode": { "type": "string" },
86
- "aiClientId": { "type": "string" },
87
- "aiClientName": { "type": "string" },
88
- "skillId": { "type": "string" },
89
- "tokenId": { "type": "string" },
90
- "sessionId": { "type": "string" },
91
- "subjectType": { "type": "string" },
92
- "subjectId": { "type": "string" },
93
- "source": { "type": "string" }
140
+ "identityMode": {
141
+ "type": "string"
142
+ },
143
+ "aiClientId": {
144
+ "type": "string"
145
+ },
146
+ "aiClientName": {
147
+ "type": "string"
148
+ },
149
+ "skillId": {
150
+ "type": "string"
151
+ },
152
+ "tokenId": {
153
+ "type": "string"
154
+ },
155
+ "sessionId": {
156
+ "type": "string"
157
+ },
158
+ "subjectType": {
159
+ "type": "string"
160
+ },
161
+ "subjectId": {
162
+ "type": "string"
163
+ },
164
+ "source": {
165
+ "type": "string"
166
+ }
94
167
  },
95
168
  "additionalProperties": false
96
169
  },
97
170
  "RiskLevel": {
98
171
  "type": "string",
99
- "enum": ["read", "analyze", "mutate", "execute", "high"]
172
+ "enum": [
173
+ "read",
174
+ "analyze",
175
+ "mutate",
176
+ "execute",
177
+ "high"
178
+ ]
100
179
  },
101
180
  "ToolCapability": {
102
181
  "type": "object",
@@ -111,100 +190,336 @@
111
190
  "requiresApproval"
112
191
  ],
113
192
  "properties": {
114
- "name": { "type": "string" },
115
- "title": { "type": "string" },
116
- "description": { "type": "string" },
117
- "domain": { "type": "string" },
118
- "action": { "type": "string" },
119
- "riskLevel": { "$ref": "#/$defs/RiskLevel" },
193
+ "name": {
194
+ "type": "string"
195
+ },
196
+ "title": {
197
+ "type": "string"
198
+ },
199
+ "description": {
200
+ "type": "string"
201
+ },
202
+ "domain": {
203
+ "type": "string"
204
+ },
205
+ "action": {
206
+ "type": "string"
207
+ },
208
+ "riskLevel": {
209
+ "$ref": "#/$defs/RiskLevel"
210
+ },
120
211
  "permissionKeys": {
121
212
  "type": "array",
122
- "items": { "type": "string" }
213
+ "items": {
214
+ "type": "string"
215
+ }
123
216
  },
124
217
  "requiredScopes": {
125
218
  "type": "array",
126
- "items": { "type": "string" }
219
+ "items": {
220
+ "type": "string"
221
+ }
222
+ },
223
+ "mcpAdapterId": {
224
+ "type": "string"
225
+ },
226
+ "mcpToolName": {
227
+ "type": "string"
228
+ },
229
+ "requiresApproval": {
230
+ "type": "boolean"
231
+ },
232
+ "inputSchema": {
233
+ "$ref": "#/$defs/JSONSchema"
234
+ },
235
+ "outputSchema": {
236
+ "$ref": "#/$defs/JSONSchema"
237
+ },
238
+ "version": {
239
+ "type": "string",
240
+ "minLength": 1
241
+ },
242
+ "execution": {
243
+ "$ref": "#/$defs/ToolExecutionContract"
244
+ },
245
+ "inputSemantics": {
246
+ "type": "array",
247
+ "items": {
248
+ "$ref": "#/$defs/CapabilityValueSemantic"
249
+ }
250
+ },
251
+ "outputSemantics": {
252
+ "type": "array",
253
+ "items": {
254
+ "$ref": "#/$defs/CapabilityValueSemantic"
255
+ }
127
256
  },
128
- "mcpAdapterId": { "type": "string" },
129
- "mcpToolName": { "type": "string" },
130
- "requiresApproval": { "type": "boolean" },
131
- "inputSchema": { "$ref": "#/$defs/JSONSchema" },
132
- "outputSchema": { "$ref": "#/$defs/JSONSchema" }
257
+ "effects": {
258
+ "type": "array",
259
+ "items": {
260
+ "type": "string",
261
+ "minLength": 1
262
+ }
263
+ },
264
+ "producesAssessment": {
265
+ "type": "boolean"
266
+ }
267
+ },
268
+ "additionalProperties": false
269
+ },
270
+ "ToolExecutionContract": {
271
+ "type": "object",
272
+ "required": [
273
+ "mode",
274
+ "idempotent"
275
+ ],
276
+ "properties": {
277
+ "mode": {
278
+ "type": "string",
279
+ "enum": [
280
+ "sync",
281
+ "async"
282
+ ]
283
+ },
284
+ "idempotent": {
285
+ "type": "boolean"
286
+ },
287
+ "idempotencyKeyField": {
288
+ "type": "string",
289
+ "minLength": 1
290
+ },
291
+ "taskKind": {
292
+ "type": "string",
293
+ "minLength": 1
294
+ },
295
+ "statusTool": {
296
+ "type": "string",
297
+ "minLength": 1
298
+ },
299
+ "cancelTool": {
300
+ "type": "string",
301
+ "minLength": 1
302
+ },
303
+ "checks": {
304
+ "type": "array",
305
+ "maxItems": 20,
306
+ "uniqueItems": true,
307
+ "items": {
308
+ "$ref": "#/$defs/CapabilityCheckReference"
309
+ }
310
+ },
311
+ "recoveryMode": {
312
+ "type": "string",
313
+ "enum": [
314
+ "original_call"
315
+ ]
316
+ }
133
317
  },
134
318
  "additionalProperties": false
135
319
  },
136
320
  "ResourceCapability": {
137
321
  "type": "object",
138
- "required": ["name", "description", "permissionKeys"],
322
+ "required": [
323
+ "name",
324
+ "description",
325
+ "permissionKeys"
326
+ ],
139
327
  "properties": {
140
- "name": { "type": "string" },
141
- "description": { "type": "string" },
328
+ "name": {
329
+ "type": "string"
330
+ },
331
+ "description": {
332
+ "type": "string"
333
+ },
142
334
  "permissionKeys": {
143
335
  "type": "array",
144
- "items": { "type": "string" }
336
+ "items": {
337
+ "type": "string"
338
+ }
145
339
  },
146
340
  "requiredScopes": {
147
341
  "type": "array",
148
- "items": { "type": "string" }
342
+ "items": {
343
+ "type": "string"
344
+ }
149
345
  },
150
- "contextSchema": { "$ref": "#/$defs/JSONSchema" }
346
+ "contextSchema": {
347
+ "$ref": "#/$defs/JSONSchema"
348
+ }
151
349
  },
152
350
  "additionalProperties": false
153
351
  },
154
352
  "PromptCapability": {
155
353
  "type": "object",
156
- "required": ["name", "description", "permissionKeys"],
354
+ "required": [
355
+ "name",
356
+ "description",
357
+ "permissionKeys"
358
+ ],
157
359
  "properties": {
158
- "name": { "type": "string" },
159
- "description": { "type": "string" },
360
+ "name": {
361
+ "type": "string"
362
+ },
363
+ "description": {
364
+ "type": "string"
365
+ },
160
366
  "permissionKeys": {
161
367
  "type": "array",
162
- "items": { "type": "string" }
368
+ "items": {
369
+ "type": "string"
370
+ }
163
371
  },
164
372
  "requiredScopes": {
165
373
  "type": "array",
166
- "items": { "type": "string" }
374
+ "items": {
375
+ "type": "string"
376
+ }
167
377
  },
168
- "argumentSchema": { "$ref": "#/$defs/JSONSchema" },
169
- "contextSchema": { "$ref": "#/$defs/JSONSchema" }
378
+ "argumentSchema": {
379
+ "$ref": "#/$defs/JSONSchema"
380
+ },
381
+ "contextSchema": {
382
+ "$ref": "#/$defs/JSONSchema"
383
+ }
170
384
  },
171
385
  "additionalProperties": false
172
386
  },
173
387
  "SkillCapability": {
174
388
  "type": "object",
175
- "required": ["id", "name", "category", "description"],
389
+ "required": [
390
+ "id",
391
+ "name",
392
+ "category",
393
+ "description"
394
+ ],
176
395
  "properties": {
177
- "id": { "type": "string" },
178
- "name": { "type": "string" },
179
- "category": { "type": "string" },
180
- "description": { "type": "string" },
396
+ "id": {
397
+ "type": "string"
398
+ },
399
+ "name": {
400
+ "type": "string"
401
+ },
402
+ "category": {
403
+ "type": "string"
404
+ },
405
+ "description": {
406
+ "type": "string"
407
+ },
181
408
  "capabilityRefs": {
182
409
  "type": "array",
183
- "items": { "type": "string" }
410
+ "items": {
411
+ "type": "string"
412
+ }
184
413
  },
185
414
  "permissionKeys": {
186
415
  "type": "array",
187
- "items": { "type": "string" }
416
+ "items": {
417
+ "type": "string"
418
+ }
188
419
  },
189
420
  "requiredScopes": {
190
421
  "type": "array",
191
- "items": { "type": "string" }
422
+ "items": {
423
+ "type": "string"
424
+ }
192
425
  }
193
426
  },
194
427
  "additionalProperties": false
195
428
  },
196
429
  "ManifestSummary": {
197
430
  "type": "object",
198
- "required": ["toolCount", "resourceCount", "promptCount", "skillCount", "deniedCount"],
431
+ "required": [
432
+ "toolCount",
433
+ "resourceCount",
434
+ "promptCount",
435
+ "skillCount",
436
+ "deniedCount"
437
+ ],
438
+ "properties": {
439
+ "toolCount": {
440
+ "type": "integer",
441
+ "minimum": 0
442
+ },
443
+ "resourceCount": {
444
+ "type": "integer",
445
+ "minimum": 0
446
+ },
447
+ "promptCount": {
448
+ "type": "integer",
449
+ "minimum": 0
450
+ },
451
+ "skillCount": {
452
+ "type": "integer",
453
+ "minimum": 0
454
+ },
455
+ "deniedCount": {
456
+ "type": "integer",
457
+ "minimum": 0
458
+ }
459
+ },
460
+ "additionalProperties": false
461
+ },
462
+ "CapabilityValueSemantic": {
463
+ "type": "object",
464
+ "required": [
465
+ "path",
466
+ "kind"
467
+ ],
199
468
  "properties": {
200
- "toolCount": { "type": "integer", "minimum": 0 },
201
- "resourceCount": { "type": "integer", "minimum": 0 },
202
- "promptCount": { "type": "integer", "minimum": 0 },
203
- "skillCount": { "type": "integer", "minimum": 0 },
204
- "deniedCount": { "type": "integer", "minimum": 0 }
469
+ "path": {
470
+ "type": "string",
471
+ "pattern": "^/",
472
+ "maxLength": 512
473
+ },
474
+ "kind": {
475
+ "type": "string",
476
+ "minLength": 1,
477
+ "maxLength": 100
478
+ },
479
+ "unit": {
480
+ "type": "string",
481
+ "minLength": 1,
482
+ "maxLength": 50
483
+ },
484
+ "scopePaths": {
485
+ "type": "object",
486
+ "additionalProperties": {
487
+ "type": "string",
488
+ "pattern": "^/",
489
+ "maxLength": 512
490
+ }
491
+ }
492
+ },
493
+ "additionalProperties": false
494
+ },
495
+ "CapabilityCheckReference": {
496
+ "type": "object",
497
+ "required": [
498
+ "purpose",
499
+ "toolName",
500
+ "capabilityVersion"
501
+ ],
502
+ "properties": {
503
+ "purpose": {
504
+ "type": "string",
505
+ "enum": [
506
+ "availability",
507
+ "precondition",
508
+ "verification"
509
+ ]
510
+ },
511
+ "toolName": {
512
+ "type": "string",
513
+ "minLength": 1,
514
+ "maxLength": 200
515
+ },
516
+ "capabilityVersion": {
517
+ "type": "string",
518
+ "minLength": 1,
519
+ "maxLength": 100
520
+ }
205
521
  },
206
522
  "additionalProperties": false
207
523
  }
208
524
  }
209
525
  }
210
-
package/network/README.md CHANGED
@@ -94,6 +94,33 @@ for authorization, routing, firewall configuration or accounting.
94
94
  - Validate ProtectedSet before NetworkLease coverage. A broad network lease
95
95
  cannot authorize a protected resource without a valid ResourceLease.
96
96
 
97
+ ## Managed VPN selection
98
+
99
+ - Endpoint capability `managed-vpn-v1` enables the additive
100
+ `vpn.managed.prepare.*` and `vpn.managed.connect.*` messages. Legacy explicit
101
+ scope requests retain their existing contract; absent managed capability
102
+ never means implicit permission to use `external_vpn`.
103
+ - Managed requests carry a short-lived intent ID/token bound to the enrolled
104
+ endpoint, authenticated user, published profile and selection-policy revisions.
105
+ The server resolves mode, site, space and resources; a caller cannot override
106
+ them. Prepare validates but does not consume the intent. A successful connection
107
+ consumes it atomically with the session and leases; replays cannot create a
108
+ second session. Tokens never enter audit logs or telemetry.
109
+ - Manual selection stays on the requested gateway unless the published policy
110
+ explicitly permits manual-to-auto fallback. Auto only ranks gateways that
111
+ reach the same authorized target scope. Final admission rechecks topology,
112
+ live credentials, policy and capacity under the connection transaction.
113
+ - Probe descriptors are authoritative control responses, bounded to 32 gateways,
114
+ 10 samples, four concurrent requests and three seconds per request. Only fixed
115
+ HTTPS `/vpn/probe` targets are permitted; redirects and arbitrary caller URLs
116
+ are rejected. Gateway capability `vpn-probe-v1` enables `vpnProbe` verification
117
+ configuration. Probe tokens are endpoint- and gateway-bound and expire quickly.
118
+ - HTTPS RTT is entrance-probe latency, not WireGuard or application RTT. A failed
119
+ HTTPS sample is a failed probe, not evidence of packet loss. Missing or expired
120
+ samples are unknown, never zero latency.
121
+ - Gateway capability `vpn-metrics-v1` enables endpoint-peer `sessionId` and
122
+ `vpnProfileId` metadata. Site-link peers do not carry VPN user-session statistics.
123
+
97
124
  ## Ingest batches
98
125
 
99
126
  - Authenticate `producerId` from the transport credential; do not trust the
@@ -110,6 +137,19 @@ for authorization, routing, firewall configuration or accounting.
110
137
  limits before persistence.
111
138
  - Accounting and flow events are observability input only. They cannot create,
112
139
  renew, broaden or revoke a NetworkLease or ResourceLease.
140
+ - `vpn.probe.batch` is endpoint-only and binds the intent, profile revision,
141
+ selection-policy revision, network epoch and measurement window. A successful
142
+ RTT sample count cannot exceed the number sent. Selection accepts only samples
143
+ from the intent's enrolled endpoint and approved candidate set.
144
+ - `vpn.tunnel.stats` is gateway-only. Upload is the ingress gateway's endpoint-peer
145
+ received-byte delta; download is its transmitted-byte delta. Session, endpoint,
146
+ profile, ingress gateway and counter epoch identify the sample. Exclude transit
147
+ site-link peers and never sum endpoint copies into gateway-authoritative totals.
148
+ - `vpn.gateway.health` is gateway-only, carries observed runtime readiness and
149
+ endpoint-peer count, and is not an administrator-supplied health override.
150
+ - VPN aggregate queries enforce trusted session/gateway bindings and authorized
151
+ scope before aggregation. Counters reset with a new epoch; absent data stays
152
+ absent. Quantiles must come from samples, not averages of per-gateway quantiles.
113
153
 
114
154
  Consumers must cover these rules with deterministic tests. Failure is
115
155
  fail-closed for control messages and bounded reject/drop-with-counter behavior