From 1abf419b828ae0b8848682ffa1a49ca27a9ebe0e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Apr 2026 06:29:04 +0000 Subject: [PATCH] chore: regenerate models from upstream schemas (2026-04-11) --- .../extensions/models/export.ts | 9 +- model/aws/bcmdataexports/manifest.yaml | 2 +- .../extensions/models/gateway_target.ts | 14 +- model/aws/bedrockagentcore/manifest.yaml | 4 +- model/aws/ecs/extensions/models/service.ts | 11 +- model/aws/ecs/manifest.yaml | 4 +- .../extensions/models/mail_manager_archive.ts | 11 +- .../models/mail_manager_ingress_point.ts | 11 +- .../extensions/models/mail_manager_relay.ts | 11 +- .../models/mail_manager_rule_set.ts | 9 +- model/aws/ses/manifest.yaml | 4 +- .../extensions/models/evaluationruns.ts | 20 +- .../extensions/models/reasoningengines.ts | 77 +++- .../models/reasoningengines_memories.ts | 103 +++-- .../reasoningengines_memories_revisions.ts | 10 +- .../reasoningengines_sandboxenvironments.ts | 83 +++- ...ningengines_sandboxenvironmentsnapshots.ts | 216 ++++++++++ ...ningengines_sandboxenvironmenttemplates.ts | 394 ++++++++++++++++++ .../extensions/models/tuningjobs.ts | 14 +- model/gcp/aiplatform/manifest.yaml | 7 +- .../transferconfigs_transferresources.ts | 9 +- model/gcp/bigquerydatatransfer/manifest.yaml | 4 +- .../container/extensions/models/clusters.ts | 82 +++- .../extensions/models/clusters_nodepools.ts | 47 ++- model/gcp/container/manifest.yaml | 2 +- .../dataplex/extensions/models/datascans.ts | 179 +++++++- .../extensions/models/datascans_jobs.ts | 63 ++- model/gcp/dataplex/manifest.yaml | 4 +- .../gcp/dataproc/extensions/models/batches.ts | 60 ++- model/gcp/dataproc/manifest.yaml | 4 +- model/gcp/redis/extensions/models/clusters.ts | 19 +- model/gcp/redis/manifest.yaml | 2 +- model/gcp/run/extensions/models/instances.ts | 133 +++++- model/gcp/run/extensions/models/services.ts | 11 +- .../gcp/run/extensions/models/workerpools.ts | 11 +- model/gcp/run/manifest.yaml | 4 +- .../extensions/models/releases.ts | 25 +- .../extensions/models/rollouts.ts | 17 +- .../extensions/models/tenants.ts | 15 +- .../extensions/models/unitkinds.ts | 32 +- .../extensions/models/units.ts | 8 +- model/gcp/saasservicemgmt/manifest.yaml | 4 +- .../extensions/models/workstationclusters.ts | 35 +- model/gcp/workstations/manifest.yaml | 2 +- 44 files changed, 1611 insertions(+), 175 deletions(-) create mode 100644 model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmentsnapshots.ts create mode 100644 model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmenttemplates.ts diff --git a/model/aws/bcmdataexports/extensions/models/export.ts b/model/aws/bcmdataexports/extensions/models/export.ts index d4cd8b92e..c6d5d8c1c 100644 --- a/model/aws/bcmdataexports/extensions/models/export.ts +++ b/model/aws/bcmdataexports/extensions/models/export.ts @@ -32,6 +32,8 @@ export const S3OutputConfigurationsSchema = z.object({ export const S3DestinationSchema = z.object({ S3Bucket: z.string().min(0).max(1024).regex(new RegExp("^[\\S\\s]*$")), + S3BucketOwner: z.string().min(12).max(12).regex(new RegExp("^[0-9]{12}$")) + .optional(), S3Prefix: z.string().min(0).max(1024).regex(new RegExp("^[\\S\\s]*$")), S3Region: z.string().min(0).max(1024).regex(new RegExp("^[\\S\\s]*$")), S3OutputConfigurations: S3OutputConfigurationsSchema, @@ -96,7 +98,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/bcmdataexports/export", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -113,6 +115,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/bcmdataexports/manifest.yaml b/model/aws/bcmdataexports/manifest.yaml index e4b3e2848..c058f5e6a 100644 --- a/model/aws/bcmdataexports/manifest.yaml +++ b/model/aws/bcmdataexports/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/bcmdataexports" -version: "2026.04.03.2" +version: "2026.04.11.1" description: "AWS BCMDATAEXPORTS infrastructure models" labels: - aws diff --git a/model/aws/bedrockagentcore/extensions/models/gateway_target.ts b/model/aws/bedrockagentcore/extensions/models/gateway_target.ts index be8bc667d..f77376ed2 100644 --- a/model/aws/bedrockagentcore/extensions/models/gateway_target.ts +++ b/model/aws/bedrockagentcore/extensions/models/gateway_target.ts @@ -34,11 +34,18 @@ export const ApiKeyCredentialProviderSchema = z.object({ CredentialLocation: z.enum(["HEADER", "QUERY_PARAMETER"]).optional(), }); +export const IamCredentialProviderSchema = z.object({ + Service: z.string().min(1).max(64).regex(new RegExp("^[a-zA-Z0-9._-]+$")), + Region: z.string().min(1).max(32).regex(new RegExp("^[a-zA-Z0-9-]+$")) + .optional(), +}); + export const CredentialProviderConfigurationSchema = z.object({ CredentialProviderType: z.enum(["GATEWAY_IAM_ROLE", "OAUTH", "API_KEY"]), CredentialProvider: z.object({ OauthCredentialProvider: OAuthCredentialProviderSchema.optional(), ApiKeyCredentialProvider: ApiKeyCredentialProviderSchema.optional(), + IamCredentialProvider: IamCredentialProviderSchema.optional(), }).optional(), }); @@ -103,7 +110,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/bedrockagentcore/gateway-target", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -120,6 +127,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/bedrockagentcore/manifest.yaml b/model/aws/bedrockagentcore/manifest.yaml index 2a3dcd160..3334eb008 100644 --- a/model/aws/bedrockagentcore/manifest.yaml +++ b/model/aws/bedrockagentcore/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/bedrockagentcore" -version: "2026.04.04.1" +version: "2026.04.11.1" description: "AWS BEDROCKAGENTCORE infrastructure models" labels: - aws @@ -9,7 +9,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Added: oauth2credential_provider + - Updated: gateway_target models: - api_key_credential_provider.ts - browser_custom.ts diff --git a/model/aws/ecs/extensions/models/service.ts b/model/aws/ecs/extensions/models/service.ts index dd8195745..fe743a08a 100644 --- a/model/aws/ecs/extensions/models/service.ts +++ b/model/aws/ecs/extensions/models/service.ts @@ -456,7 +456,7 @@ const GlobalArgsSchema = z.object({ "Configuration for canary deployment strategy. Only valid when the deployment strategy is CANARY. This configuration enables shifting a fixed percentage of traffic for testing, followed by shifting the remaining traffic after a bake period.", ).optional(), BakeTimeInMinutes: z.number().int().min(0).max(1440).describe( - "The duration when both blue and green service revisions are running simultaneously after the production traffic has shifted. The following rules apply when you don't specify a value: For rolling deployments, the value is set to 3 hours (180 minutes). When you use an external deployment controller ( EXTERNAL), or the ACD blue/green deployment controller ( CODE_DEPLOY), the value is set to 3 hours (180 minutes). For all other cases, the value is set to 36 hours (2160 minutes).", + "The duration waiting before terminating the previous service revision and marking a deployment complete. The following rules apply when you don't specify a value: For blue/green, linear, and canary deployments, the value is set to 15 minutes. For rolling deployments, there is no bake time set by default. The external deployment controller ( EXTERNAL) and the ACD blue/green deployment controller ( CODE_DEPLOY) do not support the BakeTimeInMinutes parameter. If you provide a bake time for a rolling deployment, the CloudFormation handler timeout is increased to the maximum of 36 hours, matching the timeout for blue/green, linear, and canary deployments.", ).optional(), LifecycleHooks: z.array(DeploymentLifecycleHookSchema).describe( "An array of deployment lifecycle hook objects to run custom logic at specific stages of the deployment lifecycle.", @@ -653,7 +653,7 @@ const InputsSchema = z.object({ "Configuration for canary deployment strategy. Only valid when the deployment strategy is CANARY. This configuration enables shifting a fixed percentage of traffic for testing, followed by shifting the remaining traffic after a bake period.", ).optional(), BakeTimeInMinutes: z.number().int().min(0).max(1440).describe( - "The duration when both blue and green service revisions are running simultaneously after the production traffic has shifted. The following rules apply when you don't specify a value: For rolling deployments, the value is set to 3 hours (180 minutes). When you use an external deployment controller ( EXTERNAL), or the ACD blue/green deployment controller ( CODE_DEPLOY), the value is set to 3 hours (180 minutes). For all other cases, the value is set to 36 hours (2160 minutes).", + "The duration waiting before terminating the previous service revision and marking a deployment complete. The following rules apply when you don't specify a value: For blue/green, linear, and canary deployments, the value is set to 15 minutes. For rolling deployments, there is no bake time set by default. The external deployment controller ( EXTERNAL) and the ACD blue/green deployment controller ( CODE_DEPLOY) do not support the BakeTimeInMinutes parameter. If you provide a bake time for a rolling deployment, the CloudFormation handler timeout is increased to the maximum of 36 hours, matching the timeout for blue/green, linear, and canary deployments.", ).optional(), LifecycleHooks: z.array(DeploymentLifecycleHookSchema).describe( "An array of deployment lifecycle hook objects to run custom logic at specific stages of the deployment lifecycle.", @@ -683,7 +683,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/ecs/service", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -700,6 +700,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/ecs/manifest.yaml b/model/aws/ecs/manifest.yaml index b78184853..e86c36a13 100644 --- a/model/aws/ecs/manifest.yaml +++ b/model/aws/ecs/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/ecs" -version: "2026.04.08.1" +version: "2026.04.11.1" description: "AWS ECS infrastructure models" labels: - aws @@ -9,7 +9,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: task_definition + - Updated: service models: - capacity_provider.ts - cluster.ts diff --git a/model/aws/ses/extensions/models/mail_manager_archive.ts b/model/aws/ses/extensions/models/mail_manager_archive.ts index 8fba2a09f..9742f3a4b 100644 --- a/model/aws/ses/extensions/models/mail_manager_archive.ts +++ b/model/aws/ses/extensions/models/mail_manager_archive.ts @@ -30,7 +30,7 @@ const GlobalArgsSchema = z.object({ ).optional(), KmsKeyArn: z.string().regex( new RegExp( - "^arn:aws(|-cn|-us-gov):kms:[a-z0-9-]{1,20}:[0-9]{12}:(key|alias)/.+$", + "^arn:aws(|-cn|-us-gov|-eusc):kms:[a-z0-9-]{1,20}:[0-9]{12}:(key|alias)/.+$", ), ).optional(), Retention: z.object({ @@ -77,7 +77,7 @@ const InputsSchema = z.object({ ).optional(), KmsKeyArn: z.string().regex( new RegExp( - "^arn:aws(|-cn|-us-gov):kms:[a-z0-9-]{1,20}:[0-9]{12}:(key|alias)/.+$", + "^arn:aws(|-cn|-us-gov|-eusc):kms:[a-z0-9-]{1,20}:[0-9]{12}:(key|alias)/.+$", ), ).optional(), Retention: z.object({ @@ -105,7 +105,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/ses/mail-manager-archive", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -122,6 +122,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/ses/extensions/models/mail_manager_ingress_point.ts b/model/aws/ses/extensions/models/mail_manager_ingress_point.ts index e3b1aa163..62b3cd7bb 100644 --- a/model/aws/ses/extensions/models/mail_manager_ingress_point.ts +++ b/model/aws/ses/extensions/models/mail_manager_ingress_point.ts @@ -40,7 +40,7 @@ const GlobalArgsSchema = z.object({ ).optional(), SecretArn: z.string().regex( new RegExp( - "^arn:(aws|aws-cn|aws-us-gov):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", + "^arn:(aws|aws-cn|aws-us-gov|aws-eusc):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", ), ).optional(), }).optional(), @@ -89,7 +89,7 @@ const InputsSchema = z.object({ ).optional(), SecretArn: z.string().regex( new RegExp( - "^arn:(aws|aws-cn|aws-us-gov):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", + "^arn:(aws|aws-cn|aws-us-gov|aws-eusc):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", ), ).optional(), }).optional(), @@ -108,7 +108,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/ses/mail-manager-ingress-point", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -125,6 +125,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/ses/extensions/models/mail_manager_relay.ts b/model/aws/ses/extensions/models/mail_manager_relay.ts index 0d6b2e3fe..158e2ee5e 100644 --- a/model/aws/ses/extensions/models/mail_manager_relay.ts +++ b/model/aws/ses/extensions/models/mail_manager_relay.ts @@ -28,7 +28,7 @@ const GlobalArgsSchema = z.object({ Authentication: z.object({ SecretArn: z.string().regex( new RegExp( - "^arn:(aws|aws-cn|aws-us-gov):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", + "^arn:(aws|aws-cn|aws-us-gov|aws-eusc):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", ), ).optional(), NoAuthentication: z.string().optional(), @@ -62,7 +62,7 @@ const InputsSchema = z.object({ Authentication: z.object({ SecretArn: z.string().regex( new RegExp( - "^arn:(aws|aws-cn|aws-us-gov):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", + "^arn:(aws|aws-cn|aws-us-gov|aws-eusc):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$", ), ).optional(), NoAuthentication: z.string().optional(), @@ -77,7 +77,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/ses/mail-manager-relay", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -94,6 +94,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/ses/extensions/models/mail_manager_rule_set.ts b/model/aws/ses/extensions/models/mail_manager_rule_set.ts index 47bf0ec31..d90a72e70 100644 --- a/model/aws/ses/extensions/models/mail_manager_rule_set.ts +++ b/model/aws/ses/extensions/models/mail_manager_rule_set.ts @@ -171,7 +171,7 @@ export const SnsActionSchema = z.object({ ActionFailurePolicy: z.enum(["CONTINUE", "DROP"]).optional(), TopicArn: z.string().min(20).max(2048).regex( new RegExp( - "^arn:(aws|aws-cn|aws-us-gov):sns:[a-z]{2}-[a-z]+-\\d{1}:\\d{12}:[\\w\\-]{1,256}$", + "^arn:(aws|aws-cn|aws-us-gov|aws-eusc):sns:[a-z]{2}-[a-z]+-\\d{1}:\\d{12}:[\\w\\-]{1,256}$", ), ), RoleArn: z.string().min(20).max(2048).regex( @@ -253,7 +253,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/aws/ses/mail-manager-rule-set", - version: "2026.04.03.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -270,6 +270,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/ses/manifest.yaml b/model/aws/ses/manifest.yaml index 0f2e02bf2..dd6b2bf7e 100644 --- a/model/aws/ses/manifest.yaml +++ b/model/aws/ses/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/ses" -version: "2026.04.03.2" +version: "2026.04.11.1" description: "AWS SES infrastructure models" labels: - aws @@ -9,7 +9,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: configuration_set, configuration_set_event_destination, contact_list, custom_verification_email_template, dedicated_ip_pool, email_identity, mail_manager_addon_instance, mail_manager_addon_subscription, mail_manager_address_list, mail_manager_archive, mail_manager_ingress_point, mail_manager_relay, mail_manager_rule_set, mail_manager_traffic_policy, multi_region_endpoint, template, tenant, vdm_attributes + - Updated: mail_manager_archive, mail_manager_ingress_point, mail_manager_relay, mail_manager_rule_set models: - configuration_set.ts - configuration_set_event_destination.ts diff --git a/model/gcp/aiplatform/extensions/models/evaluationruns.ts b/model/gcp/aiplatform/extensions/models/evaluationruns.ts index f37157a75..fc9a69e31 100644 --- a/model/gcp/aiplatform/extensions/models/evaluationruns.ts +++ b/model/gcp/aiplatform/extensions/models/evaluationruns.ts @@ -476,6 +476,9 @@ const GlobalArgsSchema = z.object({ predefinedRubricGenerationSpec: z.unknown().describe( "The spec for a pre-defined metric.", ).optional(), + resultParserConfig: z.unknown().describe( + "Config for parsing LLM responses. It can be used to parse the LLM response to be evaluated, or the LLM response from LLM-based metrics/Autoraters.", + ).optional(), rubricGenerationSpec: z.unknown().describe( "Specification for how rubrics should be generated.", ).optional(), @@ -1033,6 +1036,9 @@ const GlobalArgsSchema = z.object({ model: z.string().describe( "Optional. The fully qualified name of the publisher model or endpoint to use. Anthropic and Llama third-party models are also supported through Model Garden. Publisher model format: `projects/{project}/locations/{location}/publishers/*/models/*` Third-party model formats: `projects/{project}/locations/{location}/publishers/anthropic/models/{model}` or `projects/{project}/locations/{location}/publishers/llama/models/{model}` Endpoint format: `projects/{project}/locations/{location}/endpoints/{endpoint}`", ).optional(), + parallelism: z.number().int().describe( + "Optional. The parallelism of the evaluation run for the inference step. If not specified, the default parallelism will be used.", + ).optional(), }), ).describe( "Optional. The candidate to inference config map for the evaluation run. The candidate can be up to 128 characters long and can consist of any UTF-8 characters.", @@ -1208,6 +1214,7 @@ const StateSchema = z.object({ judgeAutoraterConfig: z.unknown(), metricPromptTemplate: z.unknown(), predefinedRubricGenerationSpec: z.unknown(), + resultParserConfig: z.unknown(), rubricGenerationSpec: z.unknown(), rubricGroupKey: z.unknown(), systemInstruction: z.unknown(), @@ -1725,6 +1732,9 @@ const InputsSchema = z.object({ predefinedRubricGenerationSpec: z.unknown().describe( "The spec for a pre-defined metric.", ).optional(), + resultParserConfig: z.unknown().describe( + "Config for parsing LLM responses. It can be used to parse the LLM response to be evaluated, or the LLM response from LLM-based metrics/Autoraters.", + ).optional(), rubricGenerationSpec: z.unknown().describe( "Specification for how rubrics should be generated.", ).optional(), @@ -2282,6 +2292,9 @@ const InputsSchema = z.object({ model: z.string().describe( "Optional. The fully qualified name of the publisher model or endpoint to use. Anthropic and Llama third-party models are also supported through Model Garden. Publisher model format: `projects/{project}/locations/{location}/publishers/*/models/*` Third-party model formats: `projects/{project}/locations/{location}/publishers/anthropic/models/{model}` or `projects/{project}/locations/{location}/publishers/llama/models/{model}` Endpoint format: `projects/{project}/locations/{location}/endpoints/{endpoint}`", ).optional(), + parallelism: z.number().int().describe( + "Optional. The parallelism of the evaluation run for the inference step. If not specified, the default parallelism will be used.", + ).optional(), }), ).describe( "Optional. The candidate to inference config map for the evaluation run. The candidate can be up to 128 characters long and can consist of any UTF-8 characters.", @@ -2302,7 +2315,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/aiplatform/evaluationruns", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -2334,6 +2347,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/aiplatform/extensions/models/reasoningengines.ts b/model/gcp/aiplatform/extensions/models/reasoningengines.ts index 222c56f82..3a8a5d433 100644 --- a/model/gcp/aiplatform/extensions/models/reasoningengines.ts +++ b/model/gcp/aiplatform/extensions/models/reasoningengines.ts @@ -92,22 +92,25 @@ const GlobalArgsSchema = z.object({ customizationConfigs: z.array(z.object({ consolidationConfig: z.object({ revisionsPerCandidateCount: z.unknown().describe( - "Optional. The maximum number of revisions to consider for each candidate memory. If not set, then the default value (1) will be used, which means that only the latest revision will be considered.", + "Optional. Represents the maximum number of revisions to consider for each candidate memory. If not set, then the default value (1) will be used, which means that only the latest revision will be considered.", ).optional(), }).describe( "Represents configuration for customizing how memories are consolidated.", ).optional(), + disableNaturalLanguageMemories: z.boolean().describe( + "Optional. Indicates whether natural language memory generation should be disabled for all requests. By default, natural language memory generation is enabled. Set this to `true` when you only want to generate structured memories.", + ).optional(), enableThirdPersonMemories: z.boolean().describe( - 'Optional. If true, then the memories will be generated in the third person (i.e. "The user generates memories with Memory Bank."). By default, the memories will be generated in the first person (i.e. "I generate memories with Memory Bank.")', + 'Optional. Indicates whether the memories will be generated in the third person (i.e. "The user generates memories with Memory Bank."). By default, the memories will be generated in the first person (i.e. "I generate memories with Memory Bank.")', ).optional(), generateMemoriesExamples: z.array(z.unknown()).describe( - "Optional. Examples of how to generate memories for a particular scope.", + "Optional. Provides examples of how to generate memories for a particular scope.", ).optional(), memoryTopics: z.array(z.unknown()).describe( - "Optional. Topics of information that should be extracted from conversations and stored as memories. If not set, then Memory Bank's default topics will be used.", + "Optional. Represents topics of information that should be extracted from conversations and stored as memories. If not set, then Memory Bank's default topics will be used.", ).optional(), scopeKeys: z.array(z.unknown()).describe( - "Optional. The scope keys (i.e. 'user_id') for which to use this config. A request's scope must include all of the provided keys for the config to be used (order does not matter). If empty, then the config will be used for all requests that do not have a more specific config. Only one default config is allowed per Memory Bank.", + "Optional. Represents the scope keys (i.e. 'user_id') for which to use this config. A request's scope must include all of the provided keys for the config to be used (order does not matter). If empty, then the config will be used for all requests that do not have a more specific config. Only one default config is allowed per Memory Bank.", ).optional(), })).describe( "Optional. Configuration for how to customize Memory Bank behavior for a particular scope.", @@ -116,8 +119,24 @@ const GlobalArgsSchema = z.object({ "If true, no memory revisions will be created for any requests to the Memory Bank.", ).optional(), generationConfig: z.object({ + generationTriggerConfig: z.object({ + generationRule: z.object({ + eventCount: z.unknown().describe( + "Optional. Specifies to trigger generation when the event count reaches this limit.", + ).optional(), + fixedInterval: z.unknown().describe( + "Optional. Specifies to trigger generation at a fixed interval. The duration must have a minute-level granularity.", + ).optional(), + idleDuration: z.unknown().describe( + "Optional. Specifies to trigger generation if the stream is inactive for the specified duration after the most recent event. The duration must have a minute-level granularity.", + ).optional(), + }).describe( + "Represents the active rule that determines when to flush the buffer.", + ).optional(), + }).describe("Represents configuration for triggering generation.") + .optional(), model: z.string().describe( - "Required. The model used to generate memories. Format: `projects/{project}/locations/{location}/publishers/google/models/{model}`.", + "Optional. The model used to generate memories. Format: `projects/{project}/locations/{location}/publishers/google/models/{model}`.", ).optional(), }).describe("Configuration for how to generate memories.").optional(), similaritySearchConfig: z.object({ @@ -366,6 +385,7 @@ const StateSchema = z.object({ consolidationConfig: z.object({ revisionsPerCandidateCount: z.unknown(), }), + disableNaturalLanguageMemories: z.boolean(), enableThirdPersonMemories: z.boolean(), generateMemoriesExamples: z.array(z.unknown()), memoryTopics: z.array(z.unknown()), @@ -373,6 +393,13 @@ const StateSchema = z.object({ })), disableMemoryRevisions: z.boolean(), generationConfig: z.object({ + generationTriggerConfig: z.object({ + generationRule: z.object({ + eventCount: z.unknown(), + fixedInterval: z.unknown(), + idleDuration: z.unknown(), + }), + }), model: z.string(), }), similaritySearchConfig: z.object({ @@ -486,22 +513,25 @@ const InputsSchema = z.object({ customizationConfigs: z.array(z.object({ consolidationConfig: z.object({ revisionsPerCandidateCount: z.unknown().describe( - "Optional. The maximum number of revisions to consider for each candidate memory. If not set, then the default value (1) will be used, which means that only the latest revision will be considered.", + "Optional. Represents the maximum number of revisions to consider for each candidate memory. If not set, then the default value (1) will be used, which means that only the latest revision will be considered.", ).optional(), }).describe( "Represents configuration for customizing how memories are consolidated.", ).optional(), + disableNaturalLanguageMemories: z.boolean().describe( + "Optional. Indicates whether natural language memory generation should be disabled for all requests. By default, natural language memory generation is enabled. Set this to `true` when you only want to generate structured memories.", + ).optional(), enableThirdPersonMemories: z.boolean().describe( - 'Optional. If true, then the memories will be generated in the third person (i.e. "The user generates memories with Memory Bank."). By default, the memories will be generated in the first person (i.e. "I generate memories with Memory Bank.")', + 'Optional. Indicates whether the memories will be generated in the third person (i.e. "The user generates memories with Memory Bank."). By default, the memories will be generated in the first person (i.e. "I generate memories with Memory Bank.")', ).optional(), generateMemoriesExamples: z.array(z.unknown()).describe( - "Optional. Examples of how to generate memories for a particular scope.", + "Optional. Provides examples of how to generate memories for a particular scope.", ).optional(), memoryTopics: z.array(z.unknown()).describe( - "Optional. Topics of information that should be extracted from conversations and stored as memories. If not set, then Memory Bank's default topics will be used.", + "Optional. Represents topics of information that should be extracted from conversations and stored as memories. If not set, then Memory Bank's default topics will be used.", ).optional(), scopeKeys: z.array(z.unknown()).describe( - "Optional. The scope keys (i.e. 'user_id') for which to use this config. A request's scope must include all of the provided keys for the config to be used (order does not matter). If empty, then the config will be used for all requests that do not have a more specific config. Only one default config is allowed per Memory Bank.", + "Optional. Represents the scope keys (i.e. 'user_id') for which to use this config. A request's scope must include all of the provided keys for the config to be used (order does not matter). If empty, then the config will be used for all requests that do not have a more specific config. Only one default config is allowed per Memory Bank.", ).optional(), })).describe( "Optional. Configuration for how to customize Memory Bank behavior for a particular scope.", @@ -510,8 +540,24 @@ const InputsSchema = z.object({ "If true, no memory revisions will be created for any requests to the Memory Bank.", ).optional(), generationConfig: z.object({ + generationTriggerConfig: z.object({ + generationRule: z.object({ + eventCount: z.unknown().describe( + "Optional. Specifies to trigger generation when the event count reaches this limit.", + ).optional(), + fixedInterval: z.unknown().describe( + "Optional. Specifies to trigger generation at a fixed interval. The duration must have a minute-level granularity.", + ).optional(), + idleDuration: z.unknown().describe( + "Optional. Specifies to trigger generation if the stream is inactive for the specified duration after the most recent event. The duration must have a minute-level granularity.", + ).optional(), + }).describe( + "Represents the active rule that determines when to flush the buffer.", + ).optional(), + }).describe("Represents configuration for triggering generation.") + .optional(), model: z.string().describe( - "Required. The model used to generate memories. Format: `projects/{project}/locations/{location}/publishers/google/models/{model}`.", + "Optional. The model used to generate memories. Format: `projects/{project}/locations/{location}/publishers/google/models/{model}`.", ).optional(), }).describe("Configuration for how to generate memories.").optional(), similaritySearchConfig: z.object({ @@ -755,7 +801,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/aiplatform/reasoningengines", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -787,6 +833,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/aiplatform/extensions/models/reasoningengines_memories.ts b/model/gcp/aiplatform/extensions/models/reasoningengines_memories.ts index 075fce463..f833c1529 100644 --- a/model/gcp/aiplatform/extensions/models/reasoningengines_memories.ts +++ b/model/gcp/aiplatform/extensions/models/reasoningengines_memories.ts @@ -87,50 +87,52 @@ const DELETE_CONFIG = { } as const; const GlobalArgsSchema = z.object({ - description: z.string().describe("Optional. Description of the Memory.") - .optional(), + description: z.string().describe( + "Optional. Represents the description of the Memory.", + ).optional(), disableMemoryRevisions: z.boolean().describe( - "Optional. Input only. If true, no revision will be created for this request.", + "Optional. Input only. Indicates whether no revision will be created for this request.", + ).optional(), + displayName: z.string().describe( + "Optional. Represents the display name of the Memory.", ).optional(), - displayName: z.string().describe("Optional. Display name of the Memory.") - .optional(), expireTime: z.string().describe( - "Optional. Timestamp of when this resource is considered expired. This is *always* provided on output when `expiration` is set on input, regardless of whether `expire_time` or `ttl` was provided.", + "Optional. Represents the timestamp of when this resource is considered expired. This is *always* provided on output when `expiration` is set on input, regardless of whether `expire_time` or `ttl` was provided.", ).optional(), fact: z.string().describe( - "Optional. Semantic knowledge extracted from the source content.", + "Optional. Represents semantic knowledge extracted from the source content.", ).optional(), metadata: z.record( z.string(), z.object({ - boolValue: z.boolean().describe("Boolean value.").optional(), - doubleValue: z.number().describe("Double value.").optional(), - stringValue: z.string().describe("String value.").optional(), + boolValue: z.boolean().describe("Represents a boolean value.").optional(), + doubleValue: z.number().describe("Represents a double value.").optional(), + stringValue: z.string().describe("Represents a string value.").optional(), timestampValue: z.string().describe( - "Timestamp value. When filtering on timestamp values, only the seconds field will be compared.", + "Represents a timestamp value. When filtering on timestamp values, only the seconds field will be compared.", ).optional(), }), ).describe( - "Optional. User-provided metadata for the Memory. This information was provided when creating, updating, or generating the Memory. It was not generated by Memory Bank.", + "Optional. Represents user-provided metadata for the Memory. This information was provided when creating, updating, or generating the Memory. It was not generated by Memory Bank.", ).optional(), name: z.string().describe( - "Identifier. The resource name of the Memory. Format: `projects/{project}/locations/{location}/reasoningEngines/{reasoning_engine}/memories/{memory}`", + "Identifier. Represents the resource name of the Memory. Format: `projects/{project}/locations/{location}/reasoningEngines/{reasoning_engine}/memories/{memory}`", ).optional(), revisionExpireTime: z.string().describe( - "Optional. Input only. Timestamp of when the revision is considered expired. If not set, the memory revision will be kept until manually deleted.", + "Optional. Input only. Represents the timestamp of when the revision is considered expired. If not set, the memory revision will be kept until manually deleted.", ).optional(), revisionLabels: z.record(z.string(), z.string()).describe( - "Optional. Input only. The labels to apply to the Memory Revision created as a result of this request.", + "Optional. Input only. Represents the labels to apply to the Memory Revision created as a result of this request.", ).optional(), revisionTtl: z.string().describe( - "Optional. Input only. The TTL for the revision. The expiration time is computed: now + TTL.", + "Optional. Input only. Represents the TTL for the revision. The expiration time is computed: now + TTL.", ).optional(), scope: z.record(z.string(), z.string()).describe( - "Required. Immutable. The scope of the Memory. Memories are isolated within their scope. The scope is defined when creating or generating memories. Scope values cannot contain the wildcard character '*'.", + "Required. Immutable. Represents the scope of the Memory. Memories are isolated within their scope. The scope is defined when creating or generating memories. Scope values cannot contain the wildcard character '*'.", ).optional(), topics: z.array(z.object({ customMemoryTopicLabel: z.string().describe( - "Optional. The custom memory topic label.", + "Optional. Represents the custom memory topic label.", ).optional(), managedMemoryTopic: z.enum([ "MANAGED_TOPIC_ENUM_UNSPECIFIED", @@ -138,10 +140,10 @@ const GlobalArgsSchema = z.object({ "USER_PREFERENCES", "KEY_CONVERSATION_DETAILS", "EXPLICIT_INSTRUCTIONS", - ]).describe("Optional. The managed memory topic.").optional(), - })).describe("Optional. The Topics of the Memory.").optional(), + ]).describe("Optional. Represents the managed memory topic.").optional(), + })).describe("Optional. Represents the Topics of the Memory.").optional(), ttl: z.string().describe( - "Optional. Input only. The TTL for this resource. The expiration time is computed: now + TTL.", + "Optional. Input only. Represents the TTL for this resource. The expiration time is computed: now + TTL.", ).optional(), memoryId: z.string().describe( "Optional. The user defined ID to use for memory, which will become the final component of the memory resource name. If not provided, Vertex AI will generate a value for this ID. This value may be up to 63 characters, and valid characters are `[a-z0-9-]`. The first character must be a letter, and the last character must be a letter or number.", @@ -175,50 +177,52 @@ const StateSchema = z.object({ type StateData = z.infer; const InputsSchema = z.object({ - description: z.string().describe("Optional. Description of the Memory.") - .optional(), + description: z.string().describe( + "Optional. Represents the description of the Memory.", + ).optional(), disableMemoryRevisions: z.boolean().describe( - "Optional. Input only. If true, no revision will be created for this request.", + "Optional. Input only. Indicates whether no revision will be created for this request.", + ).optional(), + displayName: z.string().describe( + "Optional. Represents the display name of the Memory.", ).optional(), - displayName: z.string().describe("Optional. Display name of the Memory.") - .optional(), expireTime: z.string().describe( - "Optional. Timestamp of when this resource is considered expired. This is *always* provided on output when `expiration` is set on input, regardless of whether `expire_time` or `ttl` was provided.", + "Optional. Represents the timestamp of when this resource is considered expired. This is *always* provided on output when `expiration` is set on input, regardless of whether `expire_time` or `ttl` was provided.", ).optional(), fact: z.string().describe( - "Optional. Semantic knowledge extracted from the source content.", + "Optional. Represents semantic knowledge extracted from the source content.", ).optional(), metadata: z.record( z.string(), z.object({ - boolValue: z.boolean().describe("Boolean value.").optional(), - doubleValue: z.number().describe("Double value.").optional(), - stringValue: z.string().describe("String value.").optional(), + boolValue: z.boolean().describe("Represents a boolean value.").optional(), + doubleValue: z.number().describe("Represents a double value.").optional(), + stringValue: z.string().describe("Represents a string value.").optional(), timestampValue: z.string().describe( - "Timestamp value. When filtering on timestamp values, only the seconds field will be compared.", + "Represents a timestamp value. When filtering on timestamp values, only the seconds field will be compared.", ).optional(), }), ).describe( - "Optional. User-provided metadata for the Memory. This information was provided when creating, updating, or generating the Memory. It was not generated by Memory Bank.", + "Optional. Represents user-provided metadata for the Memory. This information was provided when creating, updating, or generating the Memory. It was not generated by Memory Bank.", ).optional(), name: z.string().describe( - "Identifier. The resource name of the Memory. Format: `projects/{project}/locations/{location}/reasoningEngines/{reasoning_engine}/memories/{memory}`", + "Identifier. Represents the resource name of the Memory. Format: `projects/{project}/locations/{location}/reasoningEngines/{reasoning_engine}/memories/{memory}`", ).optional(), revisionExpireTime: z.string().describe( - "Optional. Input only. Timestamp of when the revision is considered expired. If not set, the memory revision will be kept until manually deleted.", + "Optional. Input only. Represents the timestamp of when the revision is considered expired. If not set, the memory revision will be kept until manually deleted.", ).optional(), revisionLabels: z.record(z.string(), z.string()).describe( - "Optional. Input only. The labels to apply to the Memory Revision created as a result of this request.", + "Optional. Input only. Represents the labels to apply to the Memory Revision created as a result of this request.", ).optional(), revisionTtl: z.string().describe( - "Optional. Input only. The TTL for the revision. The expiration time is computed: now + TTL.", + "Optional. Input only. Represents the TTL for the revision. The expiration time is computed: now + TTL.", ).optional(), scope: z.record(z.string(), z.string()).describe( - "Required. Immutable. The scope of the Memory. Memories are isolated within their scope. The scope is defined when creating or generating memories. Scope values cannot contain the wildcard character '*'.", + "Required. Immutable. Represents the scope of the Memory. Memories are isolated within their scope. The scope is defined when creating or generating memories. Scope values cannot contain the wildcard character '*'.", ).optional(), topics: z.array(z.object({ customMemoryTopicLabel: z.string().describe( - "Optional. The custom memory topic label.", + "Optional. Represents the custom memory topic label.", ).optional(), managedMemoryTopic: z.enum([ "MANAGED_TOPIC_ENUM_UNSPECIFIED", @@ -226,10 +230,10 @@ const InputsSchema = z.object({ "USER_PREFERENCES", "KEY_CONVERSATION_DETAILS", "EXPLICIT_INSTRUCTIONS", - ]).describe("Optional. The managed memory topic.").optional(), - })).describe("Optional. The Topics of the Memory.").optional(), + ]).describe("Optional. Represents the managed memory topic.").optional(), + })).describe("Optional. Represents the Topics of the Memory.").optional(), ttl: z.string().describe( - "Optional. Input only. The TTL for this resource. The expiration time is computed: now + TTL.", + "Optional. Input only. Represents the TTL for this resource. The expiration time is computed: now + TTL.", ).optional(), memoryId: z.string().describe( "Optional. The user defined ID to use for memory, which will become the final component of the memory resource name. If not provided, Vertex AI will generate a value for this ID. This value may be up to 63 characters, and valid characters are `[a-z0-9-]`. The first character must be a letter, and the last character must be a letter or number.", @@ -241,7 +245,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/aiplatform/reasoningengines-memories", - version: "2026.04.05.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -273,6 +277,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -529,6 +538,7 @@ export const model = { generate: { description: "generate", arguments: z.object({ + allowedTopics: z.any().optional(), directContentsSource: z.any().optional(), directMemoriesSource: z.any().optional(), disableConsolidation: z.any().optional(), @@ -547,6 +557,9 @@ export const model = { const params: Record = { project: projectId }; if (g["parent"] !== undefined) params["parent"] = String(g["parent"]); const body: Record = {}; + if (args["allowedTopics"] !== undefined) { + body["allowedTopics"] = args["allowedTopics"]; + } if (args["directContentsSource"] !== undefined) { body["directContentsSource"] = args["directContentsSource"]; } @@ -635,6 +648,7 @@ export const model = { arguments: z.object({ filter: z.any().optional(), filterGroups: z.any().optional(), + memoryTypes: z.any().optional(), scope: z.any().optional(), similaritySearchParams: z.any().optional(), simpleRetrievalParams: z.any().optional(), @@ -649,6 +663,9 @@ export const model = { if (args["filterGroups"] !== undefined) { body["filterGroups"] = args["filterGroups"]; } + if (args["memoryTypes"] !== undefined) { + body["memoryTypes"] = args["memoryTypes"]; + } if (args["scope"] !== undefined) body["scope"] = args["scope"]; if (args["similaritySearchParams"] !== undefined) { body["similaritySearchParams"] = args["similaritySearchParams"]; diff --git a/model/gcp/aiplatform/extensions/models/reasoningengines_memories_revisions.ts b/model/gcp/aiplatform/extensions/models/reasoningengines_memories_revisions.ts index a1ed5fdd6..e90ef25c1 100644 --- a/model/gcp/aiplatform/extensions/models/reasoningengines_memories_revisions.ts +++ b/model/gcp/aiplatform/extensions/models/reasoningengines_memories_revisions.ts @@ -45,11 +45,14 @@ const StateSchema = z.object({ createTime: z.string().optional(), expireTime: z.string().optional(), extractedMemories: z.array(z.object({ + context: z.string(), fact: z.string(), + structuredData: z.record(z.string(), z.unknown()), })).optional(), fact: z.string().optional(), labels: z.record(z.string(), z.unknown()).optional(), name: z.string(), + structuredData: z.record(z.string(), z.unknown()).optional(), }).passthrough(); type StateData = z.infer; @@ -63,7 +66,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/aiplatform/reasoningengines-memories-revisions", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -90,6 +93,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironments.ts b/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironments.ts index 8b320e930..192d0a179 100644 --- a/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironments.ts +++ b/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironments.ts @@ -75,6 +75,9 @@ const GlobalArgsSchema = z.object({ loadBalancerIp: z.string().describe( "Output only. The IP address of the load balancer.", ).optional(), + sandboxHostname: z.string().describe( + "Output only. The hostname of the SandboxEnvironment.", + ).optional(), sandboxInternalIp: z.string().describe( "Output only. The internal IP address of the SandboxEnvironment.", ).optional(), @@ -116,6 +119,7 @@ const StateSchema = z.object({ connectionInfo: z.object({ loadBalancerHostname: z.string(), loadBalancerIp: z.string(), + sandboxHostname: z.string(), sandboxInternalIp: z.string(), }).optional(), createTime: z.string().optional(), @@ -143,6 +147,9 @@ const InputsSchema = z.object({ loadBalancerIp: z.string().describe( "Output only. The IP address of the load balancer.", ).optional(), + sandboxHostname: z.string().describe( + "Output only. The hostname of the SandboxEnvironment.", + ).optional(), sandboxInternalIp: z.string().describe( "Output only. The internal IP address of the SandboxEnvironment.", ).optional(), @@ -182,7 +189,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/aiplatform/reasoningengines-sandboxenvironments", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -209,6 +216,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -409,5 +421,74 @@ export const model = { return { result }; }, }, + snapshot: { + description: "snapshot", + arguments: z.object({ + createTime: z.any().optional(), + displayName: z.any().optional(), + expireTime: z.any().optional(), + name: z.any().optional(), + owner: z.any().optional(), + parentSnapshot: z.any().optional(), + postSnapshotAction: z.any().optional(), + sizeBytes: z.any().optional(), + sourceSandboxEnvironment: z.any().optional(), + ttl: z.any().optional(), + updateTime: z.any().optional(), + }), + execute: async (args: Record, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + if (g["parent"] !== undefined && g["name"] !== undefined) { + params["name"] = buildResourceName( + String(g["parent"]), + String(g["name"]), + ); + } + const body: Record = {}; + if (args["createTime"] !== undefined) { + body["createTime"] = args["createTime"]; + } + if (args["displayName"] !== undefined) { + body["displayName"] = args["displayName"]; + } + if (args["expireTime"] !== undefined) { + body["expireTime"] = args["expireTime"]; + } + if (args["name"] !== undefined) body["name"] = args["name"]; + if (args["owner"] !== undefined) body["owner"] = args["owner"]; + if (args["parentSnapshot"] !== undefined) { + body["parentSnapshot"] = args["parentSnapshot"]; + } + if (args["postSnapshotAction"] !== undefined) { + body["postSnapshotAction"] = args["postSnapshotAction"]; + } + if (args["sizeBytes"] !== undefined) { + body["sizeBytes"] = args["sizeBytes"]; + } + if (args["sourceSandboxEnvironment"] !== undefined) { + body["sourceSandboxEnvironment"] = args["sourceSandboxEnvironment"]; + } + if (args["ttl"] !== undefined) body["ttl"] = args["ttl"]; + if (args["updateTime"] !== undefined) { + body["updateTime"] = args["updateTime"]; + } + const result = await createResource( + BASE_URL, + { + "id": + "aiplatform.projects.locations.reasoningEngines.sandboxEnvironments.snapshot", + "path": "v1/{+name}:snapshot", + "httpMethod": "POST", + "parameterOrder": ["name"], + "parameters": { "name": { "location": "path", "required": true } }, + }, + params, + body, + ); + return { result }; + }, + }, }, }; diff --git a/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmentsnapshots.ts b/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmentsnapshots.ts new file mode 100644 index 000000000..1c398ec6b --- /dev/null +++ b/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmentsnapshots.ts @@ -0,0 +1,216 @@ +// Auto-generated extension model for @swamp/gcp/aiplatform/reasoningengines-sandboxenvironmentsnapshots +// Do not edit manually. Re-generate with: deno task generate:gcp + +// deno-lint-ignore-file no-explicit-any + +import { z } from "zod"; +import { + deleteResource, + getProjectId, + isResourceNotFoundError, + readResource, +} from "./_lib/gcp.ts"; + +/** Construct the fully-qualified resource name from parent and short name. */ +function buildResourceName(parent: string, shortName: string): string { + return `${parent}/sandboxEnvironmentSnapshots/${shortName}`; +} + +const BASE_URL = "https://aiplatform.googleapis.com/"; + +const GET_CONFIG = { + "id": + "aiplatform.projects.locations.reasoningEngines.sandboxEnvironmentSnapshots.get", + "path": "v1/{+name}", + "httpMethod": "GET", + "parameterOrder": [ + "name", + ], + "parameters": { + "name": { + "location": "path", + "required": true, + }, + }, +} as const; + +const DELETE_CONFIG = { + "id": + "aiplatform.projects.locations.reasoningEngines.sandboxEnvironmentSnapshots.delete", + "path": "v1/{+name}", + "httpMethod": "DELETE", + "parameterOrder": [ + "name", + ], + "parameters": { + "name": { + "location": "path", + "required": true, + }, + }, +} as const; + +const GlobalArgsSchema = z.object({ + name: z.string().describe( + "Instance name for this resource (used as the unique identifier in the factory pattern)", + ), + location: z.string().describe( + "The location for this resource (e.g., 'us', 'us-central1', 'europe-west1')", + ).optional(), +}); + +const StateSchema = z.object({ + createTime: z.string().optional(), + displayName: z.string().optional(), + expireTime: z.string().optional(), + name: z.string(), + owner: z.string().optional(), + parentSnapshot: z.string().optional(), + postSnapshotAction: z.string().optional(), + sizeBytes: z.string().optional(), + sourceSandboxEnvironment: z.string().optional(), + ttl: z.string().optional(), + updateTime: z.string().optional(), +}).passthrough(); + +type StateData = z.infer; + +const InputsSchema = z.object({ + name: z.string().optional(), + location: z.string().describe( + "The location for this resource (e.g., 'us', 'us-central1', 'europe-west1')", + ).optional(), +}); + +export const model = { + type: "@swamp/gcp/aiplatform/reasoningengines-sandboxenvironmentsnapshots", + version: "2026.04.11.1", + globalArguments: GlobalArgsSchema, + inputsSchema: InputsSchema, + resources: { + state: { + description: + "SandboxEnvironmentSnapshot is a snapshot of the SandboxEnvironment.", + schema: StateSchema, + lifetime: "infinite", + garbageCollection: 10, + }, + }, + methods: { + get: { + description: "Get a sandboxEnvironmentSnapshots", + arguments: z.object({ + identifier: z.string().describe( + "The name of the sandboxEnvironmentSnapshots", + ), + }), + execute: async (args: { identifier: string }, context: any) => { + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + const g = context.globalArgs; + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + args.identifier, + ); + const result = await readResource( + BASE_URL, + GET_CONFIG, + params, + ) as StateData; + const instanceName = (g.name?.toString() ?? args.identifier).replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const handle = await context.writeResource( + "state", + instanceName, + result, + ); + return { dataHandles: [handle] }; + }, + }, + delete: { + description: "Delete the sandboxEnvironmentSnapshots", + arguments: z.object({ + identifier: z.string().describe( + "The name of the sandboxEnvironmentSnapshots", + ), + }), + execute: async (args: { identifier: string }, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + args.identifier, + ); + const { existed } = await deleteResource( + BASE_URL, + DELETE_CONFIG, + params, + ); + const instanceName = (g.name?.toString() ?? args.identifier).replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const handle = await context.writeResource("state", instanceName, { + identifier: args.identifier, + existed, + status: existed ? "deleted" : "not_found", + deletedAt: new Date().toISOString(), + }); + return { dataHandles: [handle] }; + }, + }, + sync: { + description: "Sync sandboxEnvironmentSnapshots state from GCP", + arguments: z.object({}), + execute: async (_args: Record, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const instanceName = (g.name?.toString() ?? "current").replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const content = await context.dataRepository.getContent( + context.modelType, + context.modelId, + instanceName, + ); + if (!content) { + throw new Error("No existing state found - run create or get first"); + } + const existing = JSON.parse(new TextDecoder().decode(content)); + try { + const params: Record = { project: projectId }; + const shortName = existing.name?.toString() ?? g["name"]?.toString(); + if (!shortName) throw new Error("No identifier found"); + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + shortName, + ); + const result = await readResource( + BASE_URL, + GET_CONFIG, + params, + ) as StateData; + const handle = await context.writeResource( + "state", + instanceName, + result, + ); + return { dataHandles: [handle] }; + } catch (error: unknown) { + if (isResourceNotFoundError(error)) { + const handle = await context.writeResource("state", instanceName, { + status: "not_found", + syncedAt: new Date().toISOString(), + }); + return { dataHandles: [handle] }; + } + throw error; + } + }, + }, + }, +}; diff --git a/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmenttemplates.ts b/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmenttemplates.ts new file mode 100644 index 000000000..4fb4d7aa1 --- /dev/null +++ b/model/gcp/aiplatform/extensions/models/reasoningengines_sandboxenvironmenttemplates.ts @@ -0,0 +1,394 @@ +// Auto-generated extension model for @swamp/gcp/aiplatform/reasoningengines-sandboxenvironmenttemplates +// Do not edit manually. Re-generate with: deno task generate:gcp + +// deno-lint-ignore-file no-explicit-any + +import { z } from "zod"; +import { + createResource, + deleteResource, + getProjectId, + isResourceNotFoundError, + readResource, +} from "./_lib/gcp.ts"; + +/** Construct the fully-qualified resource name from parent and short name. */ +function buildResourceName(parent: string, shortName: string): string { + return `${parent}/sandboxEnvironmentTemplates/${shortName}`; +} + +const BASE_URL = "https://aiplatform.googleapis.com/"; + +const GET_CONFIG = { + "id": + "aiplatform.projects.locations.reasoningEngines.sandboxEnvironmentTemplates.get", + "path": "v1/{+name}", + "httpMethod": "GET", + "parameterOrder": [ + "name", + ], + "parameters": { + "name": { + "location": "path", + "required": true, + }, + }, +} as const; + +const INSERT_CONFIG = { + "id": + "aiplatform.projects.locations.reasoningEngines.sandboxEnvironmentTemplates.create", + "path": "v1/{+parent}/sandboxEnvironmentTemplates", + "httpMethod": "POST", + "parameterOrder": [ + "parent", + ], + "parameters": { + "parent": { + "location": "path", + "required": true, + }, + }, +} as const; + +const DELETE_CONFIG = { + "id": + "aiplatform.projects.locations.reasoningEngines.sandboxEnvironmentTemplates.delete", + "path": "v1/{+name}", + "httpMethod": "DELETE", + "parameterOrder": [ + "name", + ], + "parameters": { + "name": { + "location": "path", + "required": true, + }, + }, +} as const; + +const GlobalArgsSchema = z.object({ + customContainerEnvironment: z.object({ + customContainerSpec: z.object({ + imageUri: z.string().describe( + "Required. The Artifact Registry Docker image URI (e.g., us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag) of the container image that is to be run on each worker replica.", + ).optional(), + }).describe("Specification for deploying from a custom container image.") + .optional(), + ports: z.array(z.object({ + port: z.number().int().describe( + "Optional. Port number to expose. This must be a valid port number, between 1 and 65535.", + ).optional(), + protocol: z.enum(["PROTOCOL_UNSPECIFIED", "TCP", "UDP"]).describe( + "Optional. Protocol for port. Defaults to TCP if not specified.", + ).optional(), + })).describe("Ports to expose from the container.").optional(), + resources: z.object({ + limits: z.record(z.string(), z.string()).describe( + 'Optional. The maximum amounts of compute resources allowed. Keys are resource names (e.g., "cpu", "memory"). Values are quantities (e.g., "500m", "1Gi").', + ).optional(), + requests: z.record(z.string(), z.string()).describe( + 'Optional. The requested amounts of compute resources. Keys are resource names (e.g., "cpu", "memory"). Values are quantities (e.g., "250m", "512Mi").', + ).optional(), + }).describe( + "Message to define resource requests and limits (mirroring Kubernetes) for each sandbox instance created from this template.", + ).optional(), + }).describe("The customized sandbox runtime environment for BYOC.") + .optional(), + defaultContainerEnvironment: z.object({ + defaultContainerCategory: z.enum([ + "DEFAULT_CONTAINER_CATEGORY_UNSPECIFIED", + "DEFAULT_CONTAINER_CATEGORY_COMPUTER_USE", + ]).describe("Required. The category of the default container image.") + .optional(), + }).describe( + "The default sandbox runtime environment for default container workloads.", + ).optional(), + displayName: z.string().describe( + "Required. The display name of the SandboxEnvironmentTemplate.", + ).optional(), + name: z.string().describe( + "Identifier. The resource name of the SandboxEnvironmentTemplate. Format: `projects/{project}/locations/{location}/reasoningEngines/{reasoning_engine}/sandboxEnvironmentTemplates/{sandbox_environment_template}`", + ).optional(), + warmPoolConfig: z.object({ + targetInstanceCount: z.number().int().describe( + "Optional. The target number of pre-warmed instances to maintain.", + ).optional(), + }).describe("Configuration for a warm pool of sandbox instances.").optional(), + location: z.string().describe( + "The location for this resource (e.g., 'us', 'us-central1', 'europe-west1')", + ).optional(), +}); + +const StateSchema = z.object({ + createTime: z.string().optional(), + customContainerEnvironment: z.object({ + customContainerSpec: z.object({ + imageUri: z.string(), + }), + ports: z.array(z.object({ + port: z.number(), + protocol: z.string(), + })), + resources: z.object({ + limits: z.record(z.string(), z.unknown()), + requests: z.record(z.string(), z.unknown()), + }), + }).optional(), + defaultContainerEnvironment: z.object({ + defaultContainerCategory: z.string(), + }).optional(), + displayName: z.string().optional(), + name: z.string(), + state: z.string().optional(), + updateTime: z.string().optional(), + warmPoolConfig: z.object({ + targetInstanceCount: z.number(), + }).optional(), +}).passthrough(); + +type StateData = z.infer; + +const InputsSchema = z.object({ + customContainerEnvironment: z.object({ + customContainerSpec: z.object({ + imageUri: z.string().describe( + "Required. The Artifact Registry Docker image URI (e.g., us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag) of the container image that is to be run on each worker replica.", + ).optional(), + }).describe("Specification for deploying from a custom container image.") + .optional(), + ports: z.array(z.object({ + port: z.number().int().describe( + "Optional. Port number to expose. This must be a valid port number, between 1 and 65535.", + ).optional(), + protocol: z.enum(["PROTOCOL_UNSPECIFIED", "TCP", "UDP"]).describe( + "Optional. Protocol for port. Defaults to TCP if not specified.", + ).optional(), + })).describe("Ports to expose from the container.").optional(), + resources: z.object({ + limits: z.record(z.string(), z.string()).describe( + 'Optional. The maximum amounts of compute resources allowed. Keys are resource names (e.g., "cpu", "memory"). Values are quantities (e.g., "500m", "1Gi").', + ).optional(), + requests: z.record(z.string(), z.string()).describe( + 'Optional. The requested amounts of compute resources. Keys are resource names (e.g., "cpu", "memory"). Values are quantities (e.g., "250m", "512Mi").', + ).optional(), + }).describe( + "Message to define resource requests and limits (mirroring Kubernetes) for each sandbox instance created from this template.", + ).optional(), + }).describe("The customized sandbox runtime environment for BYOC.") + .optional(), + defaultContainerEnvironment: z.object({ + defaultContainerCategory: z.enum([ + "DEFAULT_CONTAINER_CATEGORY_UNSPECIFIED", + "DEFAULT_CONTAINER_CATEGORY_COMPUTER_USE", + ]).describe("Required. The category of the default container image.") + .optional(), + }).describe( + "The default sandbox runtime environment for default container workloads.", + ).optional(), + displayName: z.string().describe( + "Required. The display name of the SandboxEnvironmentTemplate.", + ).optional(), + name: z.string().describe( + "Identifier. The resource name of the SandboxEnvironmentTemplate. Format: `projects/{project}/locations/{location}/reasoningEngines/{reasoning_engine}/sandboxEnvironmentTemplates/{sandbox_environment_template}`", + ).optional(), + warmPoolConfig: z.object({ + targetInstanceCount: z.number().int().describe( + "Optional. The target number of pre-warmed instances to maintain.", + ).optional(), + }).describe("Configuration for a warm pool of sandbox instances.").optional(), + location: z.string().describe( + "The location for this resource (e.g., 'us', 'us-central1', 'europe-west1')", + ).optional(), +}); + +export const model = { + type: "@swamp/gcp/aiplatform/reasoningengines-sandboxenvironmenttemplates", + version: "2026.04.11.1", + globalArguments: GlobalArgsSchema, + inputsSchema: InputsSchema, + resources: { + state: { + description: + "The specification of a SandboxEnvironmentTemplate. A SandboxEnvironmentTempla...", + schema: StateSchema, + lifetime: "infinite", + garbageCollection: 10, + }, + }, + methods: { + create: { + description: "Create a sandboxEnvironmentTemplates", + arguments: z.object({ + waitForReady: z.boolean().describe( + "Wait for the resource to reach a ready state after creation (default: true)", + ).optional(), + }), + execute: async (args: { waitForReady?: boolean }, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + if (g["parent"] !== undefined) params["parent"] = String(g["parent"]); + const body: Record = {}; + if (g["customContainerEnvironment"] !== undefined) { + body["customContainerEnvironment"] = g["customContainerEnvironment"]; + } + if (g["defaultContainerEnvironment"] !== undefined) { + body["defaultContainerEnvironment"] = + g["defaultContainerEnvironment"]; + } + if (g["displayName"] !== undefined) { + body["displayName"] = g["displayName"]; + } + if (g["name"] !== undefined) body["name"] = g["name"]; + if (g["warmPoolConfig"] !== undefined) { + body["warmPoolConfig"] = g["warmPoolConfig"]; + } + if (g["parent"] !== undefined && g["name"] !== undefined) { + params["name"] = buildResourceName( + String(g["parent"]), + String(g["name"]), + ); + } + const result = await createResource( + BASE_URL, + INSERT_CONFIG, + params, + body, + GET_CONFIG, + (args.waitForReady ?? true) + ? { + "statusField": "state", + "readyValues": ["ACTIVE"], + "failedValues": ["FAILED"], + } + : undefined, + ) as StateData; + const instanceName = ((result.name ?? g.name)?.toString() ?? "current") + .replace(/[\/\\]/g, "_").replace(/\.\./g, "_").replace(/\0/g, ""); + const handle = await context.writeResource( + "state", + instanceName, + result, + ); + return { dataHandles: [handle] }; + }, + }, + get: { + description: "Get a sandboxEnvironmentTemplates", + arguments: z.object({ + identifier: z.string().describe( + "The name of the sandboxEnvironmentTemplates", + ), + }), + execute: async (args: { identifier: string }, context: any) => { + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + const g = context.globalArgs; + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + args.identifier, + ); + const result = await readResource( + BASE_URL, + GET_CONFIG, + params, + ) as StateData; + const instanceName = + ((result.name ?? g.name)?.toString() ?? args.identifier).replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const handle = await context.writeResource( + "state", + instanceName, + result, + ); + return { dataHandles: [handle] }; + }, + }, + delete: { + description: "Delete the sandboxEnvironmentTemplates", + arguments: z.object({ + identifier: z.string().describe( + "The name of the sandboxEnvironmentTemplates", + ), + }), + execute: async (args: { identifier: string }, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + args.identifier, + ); + const { existed } = await deleteResource( + BASE_URL, + DELETE_CONFIG, + params, + ); + const instanceName = (g.name?.toString() ?? args.identifier).replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const handle = await context.writeResource("state", instanceName, { + identifier: args.identifier, + existed, + status: existed ? "deleted" : "not_found", + deletedAt: new Date().toISOString(), + }); + return { dataHandles: [handle] }; + }, + }, + sync: { + description: "Sync sandboxEnvironmentTemplates state from GCP", + arguments: z.object({}), + execute: async (_args: Record, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const instanceName = (g.name?.toString() ?? "current").replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const content = await context.dataRepository.getContent( + context.modelType, + context.modelId, + instanceName, + ); + if (!content) { + throw new Error("No existing state found - run create or get first"); + } + const existing = JSON.parse(new TextDecoder().decode(content)); + try { + const params: Record = { project: projectId }; + const shortName = existing.name?.toString() ?? g["name"]?.toString(); + if (!shortName) throw new Error("No identifier found"); + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + shortName, + ); + const result = await readResource( + BASE_URL, + GET_CONFIG, + params, + ) as StateData; + const handle = await context.writeResource( + "state", + instanceName, + result, + ); + return { dataHandles: [handle] }; + } catch (error: unknown) { + if (isResourceNotFoundError(error)) { + const handle = await context.writeResource("state", instanceName, { + status: "not_found", + syncedAt: new Date().toISOString(), + }); + return { dataHandles: [handle] }; + } + throw error; + } + }, + }, + }, +}; diff --git a/model/gcp/aiplatform/extensions/models/tuningjobs.ts b/model/gcp/aiplatform/extensions/models/tuningjobs.ts index 6550f5df5..11f5a6c8d 100644 --- a/model/gcp/aiplatform/extensions/models/tuningjobs.ts +++ b/model/gcp/aiplatform/extensions/models/tuningjobs.ts @@ -622,6 +622,9 @@ const GlobalArgsSchema = z.object({ predefinedRubricGenerationSpec: z.unknown().describe( "The spec for a pre-defined metric.", ).optional(), + resultParserConfig: z.unknown().describe( + "Config for parsing LLM responses. It can be used to parse the LLM response to be evaluated, or the LLM response from LLM-based metrics/Autoraters.", + ).optional(), rubricGenerationSpec: z.unknown().describe( "Specification for how rubrics should be generated.", ).optional(), @@ -1292,6 +1295,7 @@ const StateSchema = z.object({ judgeAutoraterConfig: z.unknown(), metricPromptTemplate: z.unknown(), predefinedRubricGenerationSpec: z.unknown(), + resultParserConfig: z.unknown(), rubricGenerationSpec: z.unknown(), rubricGroupKey: z.unknown(), systemInstruction: z.unknown(), @@ -2054,6 +2058,9 @@ const InputsSchema = z.object({ predefinedRubricGenerationSpec: z.unknown().describe( "The spec for a pre-defined metric.", ).optional(), + resultParserConfig: z.unknown().describe( + "Config for parsing LLM responses. It can be used to parse the LLM response to be evaluated, or the LLM response from LLM-based metrics/Autoraters.", + ).optional(), rubricGenerationSpec: z.unknown().describe( "Specification for how rubrics should be generated.", ).optional(), @@ -2494,7 +2501,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/aiplatform/tuningjobs", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -2526,6 +2533,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/aiplatform/manifest.yaml b/model/gcp/aiplatform/manifest.yaml index 484108bed..037d7a79f 100644 --- a/model/gcp/aiplatform/manifest.yaml +++ b/model/gcp/aiplatform/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/aiplatform" -version: "2026.04.05.1" +version: "2026.04.11.1" description: "Google Cloud aiplatform infrastructure models" labels: - gcp @@ -10,7 +10,8 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: reasoningengines_memories + - Added: reasoningengines_sandboxenvironmentsnapshots, reasoningengines_sandboxenvironmenttemplates + - Updated: evaluationruns, reasoningengines, reasoningengines_memories, reasoningengines_memories_revisions, reasoningengines_sandboxenvironments, tuningjobs models: - batchpredictionjobs.ts - cachedcontents.ts @@ -62,6 +63,8 @@ models: - reasoningengines_memories.ts - reasoningengines_memories_revisions.ts - reasoningengines_sandboxenvironments.ts + - reasoningengines_sandboxenvironmentsnapshots.ts + - reasoningengines_sandboxenvironmenttemplates.ts - reasoningengines_sessions.ts - reasoningengines_sessions_events.ts - schedules.ts diff --git a/model/gcp/bigquerydatatransfer/extensions/models/transferconfigs_transferresources.ts b/model/gcp/bigquerydatatransfer/extensions/models/transferconfigs_transferresources.ts index f608c5af9..27edee6a0 100644 --- a/model/gcp/bigquerydatatransfer/extensions/models/transferconfigs_transferresources.ts +++ b/model/gcp/bigquerydatatransfer/extensions/models/transferconfigs_transferresources.ts @@ -95,7 +95,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/bigquerydatatransfer/transferconfigs-transferresources", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -122,12 +122,17 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, resources: { state: { - description: "Resource(table/partition) that is being transferred.", + description: "Resource (table/partition) that is being transferred.", schema: StateSchema, lifetime: "infinite", garbageCollection: 10, diff --git a/model/gcp/bigquerydatatransfer/manifest.yaml b/model/gcp/bigquerydatatransfer/manifest.yaml index 30f68001d..965481667 100644 --- a/model/gcp/bigquerydatatransfer/manifest.yaml +++ b/model/gcp/bigquerydatatransfer/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/bigquerydatatransfer" -version: "2026.04.03.3" +version: "2026.04.11.1" description: "Google Cloud bigquerydatatransfer infrastructure models" labels: - gcp @@ -10,7 +10,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: datasources, locations, transferconfigs, transferconfigs_runs, transferconfigs_runs_transferlogs, transferconfigs_transferresources + - Updated: transferconfigs_transferresources models: - datasources.ts - locations.ts diff --git a/model/gcp/container/extensions/models/clusters.ts b/model/gcp/container/extensions/models/clusters.ts index fcac3bc6c..e2051bc64 100644 --- a/model/gcp/container/extensions/models/clusters.ts +++ b/model/gcp/container/extensions/models/clusters.ts @@ -195,6 +195,13 @@ const GlobalArgsSchema = z.object({ }).describe( "Configuration for the Cloud Storage Parallelstore CSI driver.", ).optional(), + podSnapshotConfig: z.object({ + enabled: z.boolean().describe( + "Whether or not the Pod Snapshots feature is enabled.", + ).optional(), + }).describe( + "PodSnapshotConfig is the configuration for GKE Pod Snapshots feature.", + ).optional(), rayOperatorConfig: z.object({ enabled: z.boolean().describe( "Whether the Ray Operator addon is enabled for this cluster.", @@ -1220,7 +1227,7 @@ const GlobalArgsSchema = z.object({ "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), }).describe( - "BootDisk specifies the boot disk configuration for nodepools.", + "BootDisk specifies the boot disk configuration for node pools.", ).optional(), bootDiskKmsKey: z.string().describe( "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption", @@ -1589,7 +1596,7 @@ const GlobalArgsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "The name of a Google Compute Engine [machine type](https://cloud.google.com/compute/docs/machine-types) If unspecified, the default machine type is `e2-medium`.", @@ -2027,7 +2034,7 @@ const GlobalArgsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), nodeKubeletConfig: z.object({ allowedUnsafeSysctls: z.array(z.unknown()).describe( @@ -2180,7 +2187,7 @@ const GlobalArgsSchema = z.object({ "Denotes that nodes belonging to this node pool are Autopilot nodes.", ).optional(), }).describe( - "AutopilotConfig contains configuration of autopilot feature for this nodepool.", + "AutopilotConfig contains configuration of autopilot feature for this node pool.", ).optional(), autoscaling: z.object({ autoprovisioned: z.boolean().describe( @@ -2193,7 +2200,7 @@ const GlobalArgsSchema = z.object({ "LOCATION_POLICY_UNSPECIFIED", "BALANCED", "ANY", - ]).describe("Location policy used when scaling up a nodepool.") + ]).describe("Location policy used when scaling up a node pool.") .optional(), maxNodeCount: z.number().int().describe( "Maximum number of nodes for one location in the node pool. Must be >= min_node_count. There has to be enough quota to scale up the cluster.", @@ -2260,7 +2267,7 @@ const GlobalArgsSchema = z.object({ "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), }).describe( - "BootDisk specifies the boot disk configuration for nodepools.", + "BootDisk specifies the boot disk configuration for node pools.", ).optional(), bootDiskKmsKey: z.string().describe( "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption", @@ -2468,7 +2475,7 @@ const GlobalArgsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "The name of a Google Compute Engine [machine type](https://cloud.google.com/compute/docs/machine-types) If unspecified, the default machine type is `e2-medium`.", @@ -2672,7 +2679,7 @@ const GlobalArgsSchema = z.object({ "Whether to respect PDB during node pool deletion.", ).optional(), }).describe( - "NodeDrainConfig contains the node drain related configurations for this nodepool.", + "NodeDrainConfig contains the node drain related configurations for this node pool.", ).optional(), placementPolicy: z.object({ policyName: z.string().describe( @@ -2692,7 +2699,7 @@ const GlobalArgsSchema = z.object({ ).optional(), queuedProvisioning: z.object({ enabled: z.boolean().describe( - "Denotes that this nodepool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", + "Denotes that this node pool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", ).optional(), }).describe( "QueuedProvisioning defines the queued provisioning used by the node pool.", @@ -3128,6 +3135,13 @@ const GlobalArgsSchema = z.object({ }).describe( "Configuration for the Cloud Storage Parallelstore CSI driver.", ).optional(), + podSnapshotConfig: z.object({ + enabled: z.boolean().describe( + "Whether or not the Pod Snapshots feature is enabled.", + ).optional(), + }).describe( + "PodSnapshotConfig is the configuration for GKE Pod Snapshots feature.", + ).optional(), rayOperatorConfig: z.object({ enabled: z.boolean().describe( "Whether the Ray Operator addon is enabled for this cluster.", @@ -4163,7 +4177,7 @@ const GlobalArgsSchema = z.object({ "Is autoscaling enabled for this node pool.", ).optional(), locationPolicy: z.enum(["LOCATION_POLICY_UNSPECIFIED", "BALANCED", "ANY"]) - .describe("Location policy used when scaling up a nodepool.") + .describe("Location policy used when scaling up a node pool.") .optional(), maxNodeCount: z.number().int().describe( "Maximum number of nodes for one location in the node pool. Must be >= min_node_count. There has to be enough quota to scale up the cluster.", @@ -4191,7 +4205,7 @@ const GlobalArgsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), desiredNodeVersion: z.string().describe( 'The Kubernetes version to change the nodes to (typically an upgrade). Users may specify either explicit versions offered by Kubernetes Engine or version aliases, which have the following behavior: - "latest": picks the highest valid Kubernetes version - "1.X": picks the highest valid patch+gke.N patch in the 1.X version - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version - "1.X.Y-gke.N": picks an explicit Kubernetes version - "-": picks the Kubernetes master version', @@ -4519,6 +4533,9 @@ const StateSchema = z.object({ parallelstoreCsiDriverConfig: z.object({ enabled: z.boolean(), }), + podSnapshotConfig: z.object({ + enabled: z.boolean(), + }), rayOperatorConfig: z.object({ enabled: z.boolean(), rayClusterLoggingConfig: z.object({ @@ -5764,6 +5781,13 @@ const InputsSchema = z.object({ }).describe( "Configuration for the Cloud Storage Parallelstore CSI driver.", ).optional(), + podSnapshotConfig: z.object({ + enabled: z.boolean().describe( + "Whether or not the Pod Snapshots feature is enabled.", + ).optional(), + }).describe( + "PodSnapshotConfig is the configuration for GKE Pod Snapshots feature.", + ).optional(), rayOperatorConfig: z.object({ enabled: z.boolean().describe( "Whether the Ray Operator addon is enabled for this cluster.", @@ -6789,7 +6813,7 @@ const InputsSchema = z.object({ "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), }).describe( - "BootDisk specifies the boot disk configuration for nodepools.", + "BootDisk specifies the boot disk configuration for node pools.", ).optional(), bootDiskKmsKey: z.string().describe( "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption", @@ -7158,7 +7182,7 @@ const InputsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "The name of a Google Compute Engine [machine type](https://cloud.google.com/compute/docs/machine-types) If unspecified, the default machine type is `e2-medium`.", @@ -7596,7 +7620,7 @@ const InputsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), nodeKubeletConfig: z.object({ allowedUnsafeSysctls: z.array(z.unknown()).describe( @@ -7749,7 +7773,7 @@ const InputsSchema = z.object({ "Denotes that nodes belonging to this node pool are Autopilot nodes.", ).optional(), }).describe( - "AutopilotConfig contains configuration of autopilot feature for this nodepool.", + "AutopilotConfig contains configuration of autopilot feature for this node pool.", ).optional(), autoscaling: z.object({ autoprovisioned: z.boolean().describe( @@ -7762,7 +7786,7 @@ const InputsSchema = z.object({ "LOCATION_POLICY_UNSPECIFIED", "BALANCED", "ANY", - ]).describe("Location policy used when scaling up a nodepool.") + ]).describe("Location policy used when scaling up a node pool.") .optional(), maxNodeCount: z.number().int().describe( "Maximum number of nodes for one location in the node pool. Must be >= min_node_count. There has to be enough quota to scale up the cluster.", @@ -7829,7 +7853,7 @@ const InputsSchema = z.object({ "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), }).describe( - "BootDisk specifies the boot disk configuration for nodepools.", + "BootDisk specifies the boot disk configuration for node pools.", ).optional(), bootDiskKmsKey: z.string().describe( "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption", @@ -8037,7 +8061,7 @@ const InputsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "The name of a Google Compute Engine [machine type](https://cloud.google.com/compute/docs/machine-types) If unspecified, the default machine type is `e2-medium`.", @@ -8241,7 +8265,7 @@ const InputsSchema = z.object({ "Whether to respect PDB during node pool deletion.", ).optional(), }).describe( - "NodeDrainConfig contains the node drain related configurations for this nodepool.", + "NodeDrainConfig contains the node drain related configurations for this node pool.", ).optional(), placementPolicy: z.object({ policyName: z.string().describe( @@ -8261,7 +8285,7 @@ const InputsSchema = z.object({ ).optional(), queuedProvisioning: z.object({ enabled: z.boolean().describe( - "Denotes that this nodepool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", + "Denotes that this node pool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", ).optional(), }).describe( "QueuedProvisioning defines the queued provisioning used by the node pool.", @@ -8697,6 +8721,13 @@ const InputsSchema = z.object({ }).describe( "Configuration for the Cloud Storage Parallelstore CSI driver.", ).optional(), + podSnapshotConfig: z.object({ + enabled: z.boolean().describe( + "Whether or not the Pod Snapshots feature is enabled.", + ).optional(), + }).describe( + "PodSnapshotConfig is the configuration for GKE Pod Snapshots feature.", + ).optional(), rayOperatorConfig: z.object({ enabled: z.boolean().describe( "Whether the Ray Operator addon is enabled for this cluster.", @@ -9732,7 +9763,7 @@ const InputsSchema = z.object({ "Is autoscaling enabled for this node pool.", ).optional(), locationPolicy: z.enum(["LOCATION_POLICY_UNSPECIFIED", "BALANCED", "ANY"]) - .describe("Location policy used when scaling up a nodepool.") + .describe("Location policy used when scaling up a node pool.") .optional(), maxNodeCount: z.number().int().describe( "Maximum number of nodes for one location in the node pool. Must be >= min_node_count. There has to be enough quota to scale up the cluster.", @@ -9760,7 +9791,7 @@ const InputsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), desiredNodeVersion: z.string().describe( 'The Kubernetes version to change the nodes to (typically an upgrade). Users may specify either explicit versions offered by Kubernetes Engine or version aliases, which have the following behavior: - "latest": picks the highest valid Kubernetes version - "1.X": picks the highest valid patch+gke.N patch in the 1.X version - "1.X.Y": picks the highest valid gke.N patch in the 1.X.Y version - "1.X.Y-gke.N": picks an explicit Kubernetes version - "-": picks the Kubernetes master version', @@ -10043,7 +10074,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/container/clusters", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -10085,6 +10116,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/container/extensions/models/clusters_nodepools.ts b/model/gcp/container/extensions/models/clusters_nodepools.ts index 29ee4c0bc..344d5f9c7 100644 --- a/model/gcp/container/extensions/models/clusters_nodepools.ts +++ b/model/gcp/container/extensions/models/clusters_nodepools.ts @@ -111,7 +111,7 @@ const GlobalArgsSchema = z.object({ "Denotes that nodes belonging to this node pool are Autopilot nodes.", ).optional(), }).describe( - "AutopilotConfig contains configuration of autopilot feature for this nodepool.", + "AutopilotConfig contains configuration of autopilot feature for this node pool.", ).optional(), autoscaling: z.object({ autoprovisioned: z.boolean().describe( @@ -121,7 +121,7 @@ const GlobalArgsSchema = z.object({ "Is autoscaling enabled for this node pool.", ).optional(), locationPolicy: z.enum(["LOCATION_POLICY_UNSPECIFIED", "BALANCED", "ANY"]) - .describe("Location policy used when scaling up a nodepool.") + .describe("Location policy used when scaling up a node pool.") .optional(), maxNodeCount: z.number().int().describe( "Maximum number of nodes for one location in the node pool. Must be >= min_node_count. There has to be enough quota to scale up the cluster.", @@ -247,7 +247,7 @@ const GlobalArgsSchema = z.object({ "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), }).describe( - "BootDisk specifies the boot disk configuration for nodepools.", + "BootDisk specifies the boot disk configuration for node pools.", ).optional(), bootDiskKmsKey: z.string().describe( "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption", @@ -616,7 +616,7 @@ const GlobalArgsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "The name of a Google Compute Engine [machine type](https://cloud.google.com/compute/docs/machine-types) If unspecified, the default machine type is `e2-medium`.", @@ -879,7 +879,7 @@ const GlobalArgsSchema = z.object({ "Whether to respect PDB during node pool deletion.", ).optional(), }).describe( - "NodeDrainConfig contains the node drain related configurations for this nodepool.", + "NodeDrainConfig contains the node drain related configurations for this node pool.", ).optional(), placementPolicy: z.object({ policyName: z.string().describe( @@ -899,7 +899,7 @@ const GlobalArgsSchema = z.object({ ).optional(), queuedProvisioning: z.object({ enabled: z.boolean().describe( - "Denotes that this nodepool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", + "Denotes that this node pool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", ).optional(), }).describe( "QueuedProvisioning defines the queued provisioning used by the node pool.", @@ -1046,7 +1046,7 @@ const GlobalArgsSchema = z.object({ sizeGb: z.string().describe( "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), - }).describe("BootDisk specifies the boot disk configuration for nodepools.") + }).describe("BootDisk specifies the boot disk configuration for node pools.") .optional(), confidentialNodes: z.object({ confidentialInstanceType: z.enum([ @@ -1400,7 +1400,7 @@ const GlobalArgsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "Optional. The desired [Google Compute Engine machine type](https://cloud.google.com/compute/docs/machine-types) for nodes in the node pool. Initiates an upgrade operation that migrates the nodes in the node pool to the specified machine type.", @@ -1416,7 +1416,7 @@ const GlobalArgsSchema = z.object({ "Whether to respect PDB during node pool deletion.", ).optional(), }).describe( - "NodeDrainConfig contains the node drain related configurations for this nodepool.", + "NodeDrainConfig contains the node drain related configurations for this node pool.", ).optional(), nodeNetworkConfig: z.object({ acceleratorNetworkProfile: z.string().describe( @@ -1494,7 +1494,7 @@ const GlobalArgsSchema = z.object({ ).optional(), queuedProvisioning: z.object({ enabled: z.boolean().describe( - "Denotes that this nodepool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", + "Denotes that this node pool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", ).optional(), }).describe( "QueuedProvisioning defines the queued provisioning used by the node pool.", @@ -1936,7 +1936,7 @@ const InputsSchema = z.object({ "Denotes that nodes belonging to this node pool are Autopilot nodes.", ).optional(), }).describe( - "AutopilotConfig contains configuration of autopilot feature for this nodepool.", + "AutopilotConfig contains configuration of autopilot feature for this node pool.", ).optional(), autoscaling: z.object({ autoprovisioned: z.boolean().describe( @@ -1946,7 +1946,7 @@ const InputsSchema = z.object({ "Is autoscaling enabled for this node pool.", ).optional(), locationPolicy: z.enum(["LOCATION_POLICY_UNSPECIFIED", "BALANCED", "ANY"]) - .describe("Location policy used when scaling up a nodepool.") + .describe("Location policy used when scaling up a node pool.") .optional(), maxNodeCount: z.number().int().describe( "Maximum number of nodes for one location in the node pool. Must be >= min_node_count. There has to be enough quota to scale up the cluster.", @@ -2072,7 +2072,7 @@ const InputsSchema = z.object({ "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), }).describe( - "BootDisk specifies the boot disk configuration for nodepools.", + "BootDisk specifies the boot disk configuration for node pools.", ).optional(), bootDiskKmsKey: z.string().describe( "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption", @@ -2441,7 +2441,7 @@ const InputsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "The name of a Google Compute Engine [machine type](https://cloud.google.com/compute/docs/machine-types) If unspecified, the default machine type is `e2-medium`.", @@ -2704,7 +2704,7 @@ const InputsSchema = z.object({ "Whether to respect PDB during node pool deletion.", ).optional(), }).describe( - "NodeDrainConfig contains the node drain related configurations for this nodepool.", + "NodeDrainConfig contains the node drain related configurations for this node pool.", ).optional(), placementPolicy: z.object({ policyName: z.string().describe( @@ -2724,7 +2724,7 @@ const InputsSchema = z.object({ ).optional(), queuedProvisioning: z.object({ enabled: z.boolean().describe( - "Denotes that this nodepool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", + "Denotes that this node pool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", ).optional(), }).describe( "QueuedProvisioning defines the queued provisioning used by the node pool.", @@ -2871,7 +2871,7 @@ const InputsSchema = z.object({ sizeGb: z.string().describe( "Disk size in GB. Replaces NodeConfig.disk_size_gb", ).optional(), - }).describe("BootDisk specifies the boot disk configuration for nodepools.") + }).describe("BootDisk specifies the boot disk configuration for node pools.") .optional(), confidentialNodes: z.object({ confidentialInstanceType: z.enum([ @@ -3225,7 +3225,7 @@ const InputsSchema = z.object({ "LoggingVariantConfig specifies the behaviour of the logging component.", ).optional(), }).describe( - "NodePoolLoggingConfig specifies logging configuration for nodepools.", + "NodePoolLoggingConfig specifies logging configuration for node pools.", ).optional(), machineType: z.string().describe( "Optional. The desired [Google Compute Engine machine type](https://cloud.google.com/compute/docs/machine-types) for nodes in the node pool. Initiates an upgrade operation that migrates the nodes in the node pool to the specified machine type.", @@ -3241,7 +3241,7 @@ const InputsSchema = z.object({ "Whether to respect PDB during node pool deletion.", ).optional(), }).describe( - "NodeDrainConfig contains the node drain related configurations for this nodepool.", + "NodeDrainConfig contains the node drain related configurations for this node pool.", ).optional(), nodeNetworkConfig: z.object({ acceleratorNetworkProfile: z.string().describe( @@ -3319,7 +3319,7 @@ const InputsSchema = z.object({ ).optional(), queuedProvisioning: z.object({ enabled: z.boolean().describe( - "Denotes that this nodepool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", + "Denotes that this node pool is QRM specific, meaning nodes can be only obtained through queuing via the Cluster Autoscaler ProvisioningRequest API.", ).optional(), }).describe( "QueuedProvisioning defines the queued provisioning used by the node pool.", @@ -3423,7 +3423,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/container/clusters-nodepools", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -3465,6 +3465,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/container/manifest.yaml b/model/gcp/container/manifest.yaml index 0f0e2677e..6ceb1bf18 100644 --- a/model/gcp/container/manifest.yaml +++ b/model/gcp/container/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/container" -version: "2026.04.04.1" +version: "2026.04.11.1" description: "Google Cloud container infrastructure models" labels: - gcp diff --git a/model/gcp/dataplex/extensions/models/datascans.ts b/model/gcp/dataplex/extensions/models/datascans.ts index e12546636..5d19ac358 100644 --- a/model/gcp/dataplex/extensions/models/datascans.ts +++ b/model/gcp/dataplex/extensions/models/datascans.ts @@ -519,6 +519,9 @@ const GlobalArgsSchema = z.object({ "Output only. The number of rows which passed a rule evaluation.This field is only valid for row-level type rules.This field is not set for rule SqlAssertion.", ).optional(), rule: z.object({ + attributes: z.record(z.string(), z.unknown()).describe( + "Optional. Map of attribute name and value linked to the rule. The rules to evaluate can be filtered based on attributes provided here and a filter expression provided in the DataQualitySpec.filter field.", + ).optional(), column: z.string().describe( "Optional. The unnested column which this rule is evaluated against.", ).optional(), @@ -569,6 +572,12 @@ const GlobalArgsSchema = z.object({ }).describe( "Evaluates whether each row passes the specified condition.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a boolean value per row as the result.Example: col1 >= 0 AND col2 < 10", ).optional(), + ruleSource: z.object({ + rulePathElements: z.unknown().describe( + "Output only. Rule path elements represent information about the individual items in the relationship path between the scan resource and rule origin in that order.", + ).optional(), + }).describe("Represents the rule source information from Catalog.") + .optional(), setExpectation: z.object({ values: z.unknown().describe( "Optional. Expected values for the column value.", @@ -610,6 +619,22 @@ const GlobalArgsSchema = z.object({ }).describe( "Evaluates whether the provided expression is true.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a scalar boolean result.Example: MIN(col1) >= 0", ).optional(), + templateReference: z.object({ + name: z.unknown().describe( + "Required. The template entry name. Entry must be of EntryType projects/dataplex-types/locations/global/entryTypes/data-quality-rule-template and contains top-level aspect of AspectType projects/dataplex-types/locations/global/aspectTypes/data-quality-rule-template. The format is: projects/{project_id_or_number}/locations/{location_id}/entryGroups/{entry_group_id}/entries/{entry_id}", + ).optional(), + resolvedSql: z.unknown().describe( + "Output only. The resolved SQL statement generated from the template with parameters substituted. It is only populated in the result.", + ).optional(), + ruleTemplate: z.unknown().describe( + "DataQualityRuleTemplate represents a template which can be reused across multiple data quality rules.", + ).optional(), + values: z.unknown().describe( + "Optional. Provides the map of parameter name and value. The maximum size of the field is 120KB (encoded as UTF-8).", + ).optional(), + }).describe( + "A rule that constructs a SQL statement to evaluate using a rule template and parameter values. If the constructed statement returns any rows, this rule fails", + ).optional(), threshold: z.number().describe( "Optional. The minimum ratio of passing_rows / total_rows required to pass this rule, with a range of 0.0, 1.0.0 indicates default value (i.e. 1.0).This field is only valid for row-level type rules.", ).optional(), @@ -646,6 +671,12 @@ const GlobalArgsSchema = z.object({ catalogPublishingEnabled: z.boolean().describe( "Optional. If set, the latest DataScan job result will be published as Dataplex Universal Catalog metadata.", ).optional(), + enableCatalogBasedRules: z.boolean().describe( + "Optional. If enabled, the data scan will retrieve rules defined in the dataplex-types.global.data-rules aspect on all paths of the catalog entry corresponding to the BigQuery table resource and all attached glossary terms. The path that data-rules aspect is attached on the table entry defines the column that the rule will be evaluated against. For glossary terms, the path that the terms are attached on the table entry defines the column that the rule will be evaluated against. At the start of scan execution, the rules reflect the latest state retrieved from the catalog entry and any updates on the rules thereafter are ignored for that execution. The updates will be reflected from the next execution. Rules defined in the datascan must be empty if this field is enabled.", + ).optional(), + filter: z.string().describe( + "Optional. Filter for selectively running a subset of rules. You can filter the request by the name or attribute key-value pairs defined on the rule. If not specified, all rules are run. The filter is applicable to both, the rules retrieved from catalog and explicitly defined rules in the scan. Please see filter syntax (https://docs.cloud.google.com/dataplex/docs/auto-data-quality-overview#rule-filtering) for more details.", + ).optional(), postScanActions: z.object({ bigqueryExport: z.object({ resultsTable: z.string().describe( @@ -682,6 +713,9 @@ const GlobalArgsSchema = z.object({ "Optional. A filter applied to all rows in a single DataScan job. The filter needs to be a valid SQL expression for a WHERE clause in GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#where_clause).Example: col1 >= 0 AND col2 < 10", ).optional(), rules: z.array(z.object({ + attributes: z.record(z.string(), z.string()).describe( + "Optional. Map of attribute name and value linked to the rule. The rules to evaluate can be filtered based on attributes provided here and a filter expression provided in the DataQualitySpec.filter field.", + ).optional(), column: z.string().describe( "Optional. The unnested column which this rule is evaluated against.", ).optional(), @@ -739,6 +773,12 @@ const GlobalArgsSchema = z.object({ }).describe( "Evaluates whether each row passes the specified condition.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a boolean value per row as the result.Example: col1 >= 0 AND col2 < 10", ).optional(), + ruleSource: z.object({ + rulePathElements: z.array(z.unknown()).describe( + "Output only. Rule path elements represent information about the individual items in the relationship path between the scan resource and rule origin in that order.", + ).optional(), + }).describe("Represents the rule source information from Catalog.") + .optional(), setExpectation: z.object({ values: z.array(z.unknown()).describe( "Optional. Expected values for the column value.", @@ -779,6 +819,38 @@ const GlobalArgsSchema = z.object({ }).describe( "Evaluates whether the provided expression is true.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a scalar boolean result.Example: MIN(col1) >= 0", ).optional(), + templateReference: z.object({ + name: z.string().describe( + "Required. The template entry name. Entry must be of EntryType projects/dataplex-types/locations/global/entryTypes/data-quality-rule-template and contains top-level aspect of AspectType projects/dataplex-types/locations/global/aspectTypes/data-quality-rule-template. The format is: projects/{project_id_or_number}/locations/{location_id}/entryGroups/{entry_group_id}/entries/{entry_id}", + ).optional(), + resolvedSql: z.string().describe( + "Output only. The resolved SQL statement generated from the template with parameters substituted. It is only populated in the result.", + ).optional(), + ruleTemplate: z.object({ + capabilities: z.unknown().describe( + "Output only. A list of features or properties supported by this rule template.", + ).optional(), + dimension: z.unknown().describe( + "Output only. The dimension a rule template belongs to. Rule level results are also aggregated at the dimension level.", + ).optional(), + inputParameters: z.unknown().describe( + "Output only. Description for input parameters", + ).optional(), + name: z.unknown().describe( + "Output only. The name of the rule template in the format: projects/{project_id_or_number}/locations/{location_id}/entryGroups/{entry_group_id}/entries/{entry_id}", + ).optional(), + sqlCollection: z.unknown().describe( + "Output only. Collection of SQLs for data quality rules. Currently only one SQL is supported.", + ).optional(), + }).describe( + "DataQualityRuleTemplate represents a template which can be reused across multiple data quality rules.", + ).optional(), + values: z.record(z.string(), z.unknown()).describe( + "Optional. Provides the map of parameter name and value. The maximum size of the field is 120KB (encoded as UTF-8).", + ).optional(), + }).describe( + "A rule that constructs a SQL statement to evaluate using a rule template and parameter values. If the constructed statement returns any rows, this rule fails", + ).optional(), threshold: z.number().describe( "Optional. The minimum ratio of passing_rows / total_rows required to pass this rule, with a range of 0.0, 1.0.0 indicates default value (i.e. 1.0).This field is only valid for row-level type rules.", ).optional(), @@ -1039,6 +1111,7 @@ const StateSchema = z.object({ passed: z.boolean(), passedCount: z.string(), rule: z.object({ + attributes: z.record(z.string(), z.unknown()), column: z.string(), debugQueries: z.array(z.unknown()), description: z.string(), @@ -1058,6 +1131,9 @@ const StateSchema = z.object({ rowConditionExpectation: z.object({ sqlExpression: z.unknown(), }), + ruleSource: z.object({ + rulePathElements: z.unknown(), + }), setExpectation: z.object({ values: z.unknown(), }), @@ -1075,6 +1151,12 @@ const StateSchema = z.object({ tableConditionExpectation: z.object({ sqlExpression: z.unknown(), }), + templateReference: z.object({ + name: z.unknown(), + resolvedSql: z.unknown(), + ruleTemplate: z.unknown(), + values: z.unknown(), + }), threshold: z.number(), uniquenessExpectation: z.object({}), }), @@ -1090,6 +1172,8 @@ const StateSchema = z.object({ }).optional(), dataQualitySpec: z.object({ catalogPublishingEnabled: z.boolean(), + enableCatalogBasedRules: z.boolean(), + filter: z.string(), postScanActions: z.object({ bigqueryExport: z.object({ resultsTable: z.string(), @@ -1107,6 +1191,7 @@ const StateSchema = z.object({ }), rowFilter: z.string(), rules: z.array(z.object({ + attributes: z.record(z.string(), z.unknown()), column: z.string(), debugQueries: z.array(z.object({ description: z.unknown(), @@ -1129,6 +1214,9 @@ const StateSchema = z.object({ rowConditionExpectation: z.object({ sqlExpression: z.string(), }), + ruleSource: z.object({ + rulePathElements: z.array(z.unknown()), + }), setExpectation: z.object({ values: z.array(z.unknown()), }), @@ -1146,6 +1234,18 @@ const StateSchema = z.object({ tableConditionExpectation: z.object({ sqlExpression: z.string(), }), + templateReference: z.object({ + name: z.string(), + resolvedSql: z.string(), + ruleTemplate: z.object({ + capabilities: z.unknown(), + dimension: z.unknown(), + inputParameters: z.unknown(), + name: z.unknown(), + sqlCollection: z.unknown(), + }), + values: z.record(z.string(), z.unknown()), + }), threshold: z.number(), uniquenessExpectation: z.object({}), })), @@ -1606,6 +1706,9 @@ const InputsSchema = z.object({ "Output only. The number of rows which passed a rule evaluation.This field is only valid for row-level type rules.This field is not set for rule SqlAssertion.", ).optional(), rule: z.object({ + attributes: z.record(z.string(), z.unknown()).describe( + "Optional. Map of attribute name and value linked to the rule. The rules to evaluate can be filtered based on attributes provided here and a filter expression provided in the DataQualitySpec.filter field.", + ).optional(), column: z.string().describe( "Optional. The unnested column which this rule is evaluated against.", ).optional(), @@ -1656,6 +1759,12 @@ const InputsSchema = z.object({ }).describe( "Evaluates whether each row passes the specified condition.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a boolean value per row as the result.Example: col1 >= 0 AND col2 < 10", ).optional(), + ruleSource: z.object({ + rulePathElements: z.unknown().describe( + "Output only. Rule path elements represent information about the individual items in the relationship path between the scan resource and rule origin in that order.", + ).optional(), + }).describe("Represents the rule source information from Catalog.") + .optional(), setExpectation: z.object({ values: z.unknown().describe( "Optional. Expected values for the column value.", @@ -1697,6 +1806,22 @@ const InputsSchema = z.object({ }).describe( "Evaluates whether the provided expression is true.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a scalar boolean result.Example: MIN(col1) >= 0", ).optional(), + templateReference: z.object({ + name: z.unknown().describe( + "Required. The template entry name. Entry must be of EntryType projects/dataplex-types/locations/global/entryTypes/data-quality-rule-template and contains top-level aspect of AspectType projects/dataplex-types/locations/global/aspectTypes/data-quality-rule-template. The format is: projects/{project_id_or_number}/locations/{location_id}/entryGroups/{entry_group_id}/entries/{entry_id}", + ).optional(), + resolvedSql: z.unknown().describe( + "Output only. The resolved SQL statement generated from the template with parameters substituted. It is only populated in the result.", + ).optional(), + ruleTemplate: z.unknown().describe( + "DataQualityRuleTemplate represents a template which can be reused across multiple data quality rules.", + ).optional(), + values: z.unknown().describe( + "Optional. Provides the map of parameter name and value. The maximum size of the field is 120KB (encoded as UTF-8).", + ).optional(), + }).describe( + "A rule that constructs a SQL statement to evaluate using a rule template and parameter values. If the constructed statement returns any rows, this rule fails", + ).optional(), threshold: z.number().describe( "Optional. The minimum ratio of passing_rows / total_rows required to pass this rule, with a range of 0.0, 1.0.0 indicates default value (i.e. 1.0).This field is only valid for row-level type rules.", ).optional(), @@ -1733,6 +1858,12 @@ const InputsSchema = z.object({ catalogPublishingEnabled: z.boolean().describe( "Optional. If set, the latest DataScan job result will be published as Dataplex Universal Catalog metadata.", ).optional(), + enableCatalogBasedRules: z.boolean().describe( + "Optional. If enabled, the data scan will retrieve rules defined in the dataplex-types.global.data-rules aspect on all paths of the catalog entry corresponding to the BigQuery table resource and all attached glossary terms. The path that data-rules aspect is attached on the table entry defines the column that the rule will be evaluated against. For glossary terms, the path that the terms are attached on the table entry defines the column that the rule will be evaluated against. At the start of scan execution, the rules reflect the latest state retrieved from the catalog entry and any updates on the rules thereafter are ignored for that execution. The updates will be reflected from the next execution. Rules defined in the datascan must be empty if this field is enabled.", + ).optional(), + filter: z.string().describe( + "Optional. Filter for selectively running a subset of rules. You can filter the request by the name or attribute key-value pairs defined on the rule. If not specified, all rules are run. The filter is applicable to both, the rules retrieved from catalog and explicitly defined rules in the scan. Please see filter syntax (https://docs.cloud.google.com/dataplex/docs/auto-data-quality-overview#rule-filtering) for more details.", + ).optional(), postScanActions: z.object({ bigqueryExport: z.object({ resultsTable: z.string().describe( @@ -1769,6 +1900,9 @@ const InputsSchema = z.object({ "Optional. A filter applied to all rows in a single DataScan job. The filter needs to be a valid SQL expression for a WHERE clause in GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#where_clause).Example: col1 >= 0 AND col2 < 10", ).optional(), rules: z.array(z.object({ + attributes: z.record(z.string(), z.string()).describe( + "Optional. Map of attribute name and value linked to the rule. The rules to evaluate can be filtered based on attributes provided here and a filter expression provided in the DataQualitySpec.filter field.", + ).optional(), column: z.string().describe( "Optional. The unnested column which this rule is evaluated against.", ).optional(), @@ -1826,6 +1960,12 @@ const InputsSchema = z.object({ }).describe( "Evaluates whether each row passes the specified condition.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a boolean value per row as the result.Example: col1 >= 0 AND col2 < 10", ).optional(), + ruleSource: z.object({ + rulePathElements: z.array(z.unknown()).describe( + "Output only. Rule path elements represent information about the individual items in the relationship path between the scan resource and rule origin in that order.", + ).optional(), + }).describe("Represents the rule source information from Catalog.") + .optional(), setExpectation: z.object({ values: z.array(z.unknown()).describe( "Optional. Expected values for the column value.", @@ -1866,6 +2006,38 @@ const InputsSchema = z.object({ }).describe( "Evaluates whether the provided expression is true.The SQL expression needs to use GoogleSQL syntax (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax) and should produce a scalar boolean result.Example: MIN(col1) >= 0", ).optional(), + templateReference: z.object({ + name: z.string().describe( + "Required. The template entry name. Entry must be of EntryType projects/dataplex-types/locations/global/entryTypes/data-quality-rule-template and contains top-level aspect of AspectType projects/dataplex-types/locations/global/aspectTypes/data-quality-rule-template. The format is: projects/{project_id_or_number}/locations/{location_id}/entryGroups/{entry_group_id}/entries/{entry_id}", + ).optional(), + resolvedSql: z.string().describe( + "Output only. The resolved SQL statement generated from the template with parameters substituted. It is only populated in the result.", + ).optional(), + ruleTemplate: z.object({ + capabilities: z.unknown().describe( + "Output only. A list of features or properties supported by this rule template.", + ).optional(), + dimension: z.unknown().describe( + "Output only. The dimension a rule template belongs to. Rule level results are also aggregated at the dimension level.", + ).optional(), + inputParameters: z.unknown().describe( + "Output only. Description for input parameters", + ).optional(), + name: z.unknown().describe( + "Output only. The name of the rule template in the format: projects/{project_id_or_number}/locations/{location_id}/entryGroups/{entry_group_id}/entries/{entry_id}", + ).optional(), + sqlCollection: z.unknown().describe( + "Output only. Collection of SQLs for data quality rules. Currently only one SQL is supported.", + ).optional(), + }).describe( + "DataQualityRuleTemplate represents a template which can be reused across multiple data quality rules.", + ).optional(), + values: z.record(z.string(), z.unknown()).describe( + "Optional. Provides the map of parameter name and value. The maximum size of the field is 120KB (encoded as UTF-8).", + ).optional(), + }).describe( + "A rule that constructs a SQL statement to evaluate using a rule template and parameter values. If the constructed statement returns any rows, this rule fails", + ).optional(), threshold: z.number().describe( "Optional. The minimum ratio of passing_rows / total_rows required to pass this rule, with a range of 0.0, 1.0.0 indicates default value (i.e. 1.0).This field is only valid for row-level type rules.", ).optional(), @@ -1940,7 +2112,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/dataplex/datascans", - version: "2026.04.04.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1987,6 +2159,11 @@ export const model = { description: "Added: executionIdentity", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/dataplex/extensions/models/datascans_jobs.ts b/model/gcp/dataplex/extensions/models/datascans_jobs.ts index abab9ecff..96d9d9c52 100644 --- a/model/gcp/dataplex/extensions/models/datascans_jobs.ts +++ b/model/gcp/dataplex/extensions/models/datascans_jobs.ts @@ -229,6 +229,7 @@ const StateSchema = z.object({ passed: z.boolean(), passedCount: z.string(), rule: z.object({ + attributes: z.record(z.string(), z.unknown()), column: z.string(), debugQueries: z.array(z.unknown()), description: z.string(), @@ -248,6 +249,9 @@ const StateSchema = z.object({ rowConditionExpectation: z.object({ sqlExpression: z.unknown(), }), + ruleSource: z.object({ + rulePathElements: z.unknown(), + }), setExpectation: z.object({ values: z.unknown(), }), @@ -265,6 +269,12 @@ const StateSchema = z.object({ tableConditionExpectation: z.object({ sqlExpression: z.unknown(), }), + templateReference: z.object({ + name: z.unknown(), + resolvedSql: z.unknown(), + ruleTemplate: z.unknown(), + values: z.unknown(), + }), threshold: z.number(), uniquenessExpectation: z.object({}), }), @@ -280,6 +290,8 @@ const StateSchema = z.object({ }).optional(), dataQualitySpec: z.object({ catalogPublishingEnabled: z.boolean(), + enableCatalogBasedRules: z.boolean(), + filter: z.string(), postScanActions: z.object({ bigqueryExport: z.object({ resultsTable: z.string(), @@ -297,6 +309,7 @@ const StateSchema = z.object({ }), rowFilter: z.string(), rules: z.array(z.object({ + attributes: z.record(z.string(), z.unknown()), column: z.string(), debugQueries: z.array(z.object({ description: z.unknown(), @@ -319,6 +332,9 @@ const StateSchema = z.object({ rowConditionExpectation: z.object({ sqlExpression: z.string(), }), + ruleSource: z.object({ + rulePathElements: z.array(z.unknown()), + }), setExpectation: z.object({ values: z.array(z.unknown()), }), @@ -336,6 +352,18 @@ const StateSchema = z.object({ tableConditionExpectation: z.object({ sqlExpression: z.string(), }), + templateReference: z.object({ + name: z.string(), + resolvedSql: z.string(), + ruleTemplate: z.object({ + capabilities: z.unknown(), + dimension: z.unknown(), + inputParameters: z.unknown(), + name: z.unknown(), + sqlCollection: z.unknown(), + }), + values: z.record(z.string(), z.unknown()), + }), threshold: z.number(), uniquenessExpectation: z.object({}), })), @@ -362,7 +390,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/dataplex/datascans-jobs", - version: "2026.04.04.2", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -409,6 +437,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -502,6 +535,34 @@ export const model = { } }, }, + cancel: { + description: "cancel", + arguments: z.object({}), + execute: async (_args: Record, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + if (g["parent"] !== undefined && g["name"] !== undefined) { + params["name"] = buildResourceName( + String(g["parent"]), + String(g["name"]), + ); + } + const result = await createResource( + BASE_URL, + { + "id": "dataplex.projects.locations.dataScans.jobs.cancel", + "path": "v1/{+name}:cancel", + "httpMethod": "POST", + "parameterOrder": ["name"], + "parameters": { "name": { "location": "path", "required": true } }, + }, + params, + {}, + ); + return { result }; + }, + }, generate_data_quality_rules: { description: "generate data quality rules", arguments: z.object({}), diff --git a/model/gcp/dataplex/manifest.yaml b/model/gcp/dataplex/manifest.yaml index b1746f5ba..d53bb7985 100644 --- a/model/gcp/dataplex/manifest.yaml +++ b/model/gcp/dataplex/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/dataplex" -version: "2026.04.04.2" +version: "2026.04.11.1" description: "Google Cloud dataplex infrastructure models" labels: - gcp @@ -10,7 +10,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: locations, datascans, datascans_jobs + - Updated: datascans, datascans_jobs models: - aspecttypes.ts - dataattributebindings.ts diff --git a/model/gcp/dataproc/extensions/models/batches.ts b/model/gcp/dataproc/extensions/models/batches.ts index 34706ed79..8a1235d86 100644 --- a/model/gcp/dataproc/extensions/models/batches.ts +++ b/model/gcp/dataproc/extensions/models/batches.ts @@ -149,6 +149,27 @@ const GlobalArgsSchema = z.object({ }).describe( "A configuration for running an Apache PySpark (https://spark.apache.org/docs/latest/api/python/getting_started/quickstart.html) batch workload.", ).optional(), + pysparkNotebookBatch: z.object({ + archiveUris: z.array(z.string()).describe( + "Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types:.jar,.tar,.tar.gz,.tgz, and.zip.", + ).optional(), + fileUris: z.array(z.string()).describe( + "Optional. HCFS URIs of files to be placed in the working directory of each executor", + ).optional(), + jarFileUris: z.array(z.string()).describe( + "Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH.", + ).optional(), + notebookFileUri: z.string().describe( + "Required. The HCFS URI of the notebook file to execute.", + ).optional(), + params: z.record(z.string(), z.string()).describe( + "Optional. The parameters to pass to the notebook.", + ).optional(), + pythonFileUris: z.array(z.string()).describe( + "Optional. HCFS URIs of Python files to pass to the PySpark framework.", + ).optional(), + }).describe("A configuration for running a PySpark Notebook batch workload.") + .optional(), runtimeConfig: z.object({ autotuningConfig: z.object({ scenarios: z.array( @@ -360,6 +381,14 @@ const StateSchema = z.object({ mainPythonFileUri: z.string(), pythonFileUris: z.array(z.string()), }).optional(), + pysparkNotebookBatch: z.object({ + archiveUris: z.array(z.string()), + fileUris: z.array(z.string()), + jarFileUris: z.array(z.string()), + notebookFileUri: z.string(), + params: z.record(z.string(), z.unknown()), + pythonFileUris: z.array(z.string()), + }).optional(), runtimeConfig: z.object({ autotuningConfig: z.object({ scenarios: z.array(z.string()), @@ -511,6 +540,27 @@ const InputsSchema = z.object({ }).describe( "A configuration for running an Apache PySpark (https://spark.apache.org/docs/latest/api/python/getting_started/quickstart.html) batch workload.", ).optional(), + pysparkNotebookBatch: z.object({ + archiveUris: z.array(z.string()).describe( + "Optional. HCFS URIs of archives to be extracted into the working directory of each executor. Supported file types:.jar,.tar,.tar.gz,.tgz, and.zip.", + ).optional(), + fileUris: z.array(z.string()).describe( + "Optional. HCFS URIs of files to be placed in the working directory of each executor", + ).optional(), + jarFileUris: z.array(z.string()).describe( + "Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH.", + ).optional(), + notebookFileUri: z.string().describe( + "Required. The HCFS URI of the notebook file to execute.", + ).optional(), + params: z.record(z.string(), z.string()).describe( + "Optional. The parameters to pass to the notebook.", + ).optional(), + pythonFileUris: z.array(z.string()).describe( + "Optional. HCFS URIs of Python files to pass to the PySpark framework.", + ).optional(), + }).describe("A configuration for running a PySpark Notebook batch workload.") + .optional(), runtimeConfig: z.object({ autotuningConfig: z.object({ scenarios: z.array( @@ -689,7 +739,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/dataproc/batches", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -716,6 +766,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "Added: pysparkNotebookBatch", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -748,6 +803,9 @@ export const model = { if (g["pysparkBatch"] !== undefined) { body["pysparkBatch"] = g["pysparkBatch"]; } + if (g["pysparkNotebookBatch"] !== undefined) { + body["pysparkNotebookBatch"] = g["pysparkNotebookBatch"]; + } if (g["runtimeConfig"] !== undefined) { body["runtimeConfig"] = g["runtimeConfig"]; } diff --git a/model/gcp/dataproc/manifest.yaml b/model/gcp/dataproc/manifest.yaml index 6f6b291a6..a2ed6902c 100644 --- a/model/gcp/dataproc/manifest.yaml +++ b/model/gcp/dataproc/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/dataproc" -version: "2026.04.04.1" +version: "2026.04.11.1" description: "Google Cloud dataproc infrastructure models" labels: - gcp @@ -10,7 +10,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: workflowtemplates, clusters, clusters_nodegroups + - Updated: batches models: - autoscalingpolicies.ts - batches.ts diff --git a/model/gcp/redis/extensions/models/clusters.ts b/model/gcp/redis/extensions/models/clusters.ts index b8c18b9a3..a3803dd1f 100644 --- a/model/gcp/redis/extensions/models/clusters.ts +++ b/model/gcp/redis/extensions/models/clusters.ts @@ -372,6 +372,9 @@ const GlobalArgsSchema = z.object({ "REDIS_HIGHMEM_MEDIUM", "REDIS_HIGHMEM_XLARGE", "REDIS_STANDARD_SMALL", + "REDIS_HIGHCPU_MEDIUM", + "REDIS_STANDARD_LARGE", + "REDIS_HIGHMEM_2XLARGE", ]).describe( "Optional. The type of a redis node in the cluster. NodeType determines the underlying machine-type of a redis node.", ).optional(), @@ -438,6 +441,9 @@ const GlobalArgsSchema = z.object({ "REDIS_HIGHMEM_MEDIUM", "REDIS_HIGHMEM_XLARGE", "REDIS_STANDARD_SMALL", + "REDIS_HIGHCPU_MEDIUM", + "REDIS_STANDARD_LARGE", + "REDIS_HIGHMEM_2XLARGE", ]).describe("Target node type for redis cluster.").optional(), targetReplicaCount: z.number().int().describe( "Target number of replica nodes per shard.", @@ -925,6 +931,9 @@ const InputsSchema = z.object({ "REDIS_HIGHMEM_MEDIUM", "REDIS_HIGHMEM_XLARGE", "REDIS_STANDARD_SMALL", + "REDIS_HIGHCPU_MEDIUM", + "REDIS_STANDARD_LARGE", + "REDIS_HIGHMEM_2XLARGE", ]).describe( "Optional. The type of a redis node in the cluster. NodeType determines the underlying machine-type of a redis node.", ).optional(), @@ -991,6 +1000,9 @@ const InputsSchema = z.object({ "REDIS_HIGHMEM_MEDIUM", "REDIS_HIGHMEM_XLARGE", "REDIS_STANDARD_SMALL", + "REDIS_HIGHCPU_MEDIUM", + "REDIS_STANDARD_LARGE", + "REDIS_HIGHMEM_2XLARGE", ]).describe("Target node type for redis cluster.").optional(), targetReplicaCount: z.number().int().describe( "Target number of replica nodes per shard.", @@ -1034,7 +1046,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/redis/clusters", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1066,6 +1078,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/redis/manifest.yaml b/model/gcp/redis/manifest.yaml index 7850028a4..47ce6304a 100644 --- a/model/gcp/redis/manifest.yaml +++ b/model/gcp/redis/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/redis" -version: "2026.04.04.1" +version: "2026.04.11.1" description: "Google Cloud redis infrastructure models" labels: - gcp diff --git a/model/gcp/run/extensions/models/instances.ts b/model/gcp/run/extensions/models/instances.ts index ebc804f0a..fab0a988d 100644 --- a/model/gcp/run/extensions/models/instances.ts +++ b/model/gcp/run/extensions/models/instances.ts @@ -10,6 +10,7 @@ import { getProjectId, isResourceNotFoundError, readResource, + updateResource, } from "./_lib/gcp.ts"; /** Construct the fully-qualified resource name from parent and short name. */ @@ -55,6 +56,30 @@ const INSERT_CONFIG = { }, } as const; +const PATCH_CONFIG = { + "id": "run.projects.locations.instances.patch", + "path": "v2/{+name}", + "httpMethod": "PATCH", + "parameterOrder": [ + "name", + ], + "parameters": { + "allowMissing": { + "location": "query", + }, + "name": { + "location": "path", + "required": true, + }, + "updateMask": { + "location": "query", + }, + "validateOnly": { + "location": "query", + }, + }, +} as const; + const DELETE_CONFIG = { "id": "run.projects.locations.instances.delete", "path": "v2/{+name}", @@ -319,7 +344,7 @@ const GlobalArgsSchema = z.object({ "Required. This must match the Name of a Volume.", ).optional(), subPath: z.string().describe( - "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently ignored for Secret volumes.", + "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently rejected in Secret volume mounts.", ).optional(), })).describe("Volume to mount into the container's filesystem.").optional(), workingDir: z.string().describe( @@ -996,7 +1021,7 @@ const InputsSchema = z.object({ "Required. This must match the Name of a Volume.", ).optional(), subPath: z.string().describe( - "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently ignored for Secret volumes.", + "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently rejected in Secret volume mounts.", ).optional(), })).describe("Volume to mount into the container's filesystem.").optional(), workingDir: z.string().describe( @@ -1229,7 +1254,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/run/instances", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1261,6 +1286,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -1388,6 +1418,103 @@ export const model = { return { dataHandles: [handle] }; }, }, + update: { + description: "Update instances attributes", + arguments: z.object({}), + execute: async (_args: Record, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const instanceName = (g.name?.toString() ?? "current").replace( + /[\/\\]/g, + "_", + ).replace(/\.\./g, "_").replace(/\0/g, ""); + const content = await context.dataRepository.getContent( + context.modelType, + context.modelId, + instanceName, + ); + if (!content) { + throw new Error("No existing state found - run create or get first"); + } + const existing = JSON.parse(new TextDecoder().decode(content)); + const params: Record = { project: projectId }; + params["name"] = buildResourceName( + String(g["parent"] ?? ""), + existing["name"]?.toString() ?? g["name"]?.toString() ?? "", + ); + const body: Record = {}; + if (g["annotations"] !== undefined) { + body["annotations"] = g["annotations"]; + } + if (g["binaryAuthorization"] !== undefined) { + body["binaryAuthorization"] = g["binaryAuthorization"]; + } + if (g["client"] !== undefined) body["client"] = g["client"]; + if (g["clientVersion"] !== undefined) { + body["clientVersion"] = g["clientVersion"]; + } + if (g["containers"] !== undefined) body["containers"] = g["containers"]; + if (g["description"] !== undefined) { + body["description"] = g["description"]; + } + if (g["encryptionKey"] !== undefined) { + body["encryptionKey"] = g["encryptionKey"]; + } + if (g["encryptionKeyRevocationAction"] !== undefined) { + body["encryptionKeyRevocationAction"] = + g["encryptionKeyRevocationAction"]; + } + if (g["encryptionKeyShutdownDuration"] !== undefined) { + body["encryptionKeyShutdownDuration"] = + g["encryptionKeyShutdownDuration"]; + } + if (g["gpuZonalRedundancyDisabled"] !== undefined) { + body["gpuZonalRedundancyDisabled"] = g["gpuZonalRedundancyDisabled"]; + } + if (g["iapEnabled"] !== undefined) body["iapEnabled"] = g["iapEnabled"]; + if (g["ingress"] !== undefined) body["ingress"] = g["ingress"]; + if (g["invokerIamDisabled"] !== undefined) { + body["invokerIamDisabled"] = g["invokerIamDisabled"]; + } + if (g["labels"] !== undefined) body["labels"] = g["labels"]; + if (g["launchStage"] !== undefined) { + body["launchStage"] = g["launchStage"]; + } + if (g["nodeSelector"] !== undefined) { + body["nodeSelector"] = g["nodeSelector"]; + } + if (g["serviceAccount"] !== undefined) { + body["serviceAccount"] = g["serviceAccount"]; + } + if (g["terminalCondition"] !== undefined) { + body["terminalCondition"] = g["terminalCondition"]; + } + if (g["timeout"] !== undefined) body["timeout"] = g["timeout"]; + if (g["volumes"] !== undefined) body["volumes"] = g["volumes"]; + if (g["vpcAccess"] !== undefined) body["vpcAccess"] = g["vpcAccess"]; + for (const key of Object.keys(existing)) { + if ( + key === "fingerprint" || key === "labelFingerprint" || + key === "etag" || key.endsWith("Fingerprint") + ) { + body[key] = existing[key]; + } + } + const result = await updateResource( + BASE_URL, + PATCH_CONFIG, + params, + body, + GET_CONFIG, + ) as StateData; + const handle = await context.writeResource( + "state", + instanceName, + result, + ); + return { dataHandles: [handle] }; + }, + }, delete: { description: "Delete the instances", arguments: z.object({ diff --git a/model/gcp/run/extensions/models/services.ts b/model/gcp/run/extensions/models/services.ts index c1dc13803..61824d3da 100644 --- a/model/gcp/run/extensions/models/services.ts +++ b/model/gcp/run/extensions/models/services.ts @@ -452,7 +452,7 @@ const GlobalArgsSchema = z.object({ "Required. This must match the Name of a Volume.", ).optional(), subPath: z.unknown().describe( - "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently ignored for Secret volumes.", + "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently rejected in Secret volume mounts.", ).optional(), })).describe("Volume to mount into the container's filesystem.") .optional(), @@ -1307,7 +1307,7 @@ const InputsSchema = z.object({ "Required. This must match the Name of a Volume.", ).optional(), subPath: z.unknown().describe( - "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently ignored for Secret volumes.", + "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently rejected in Secret volume mounts.", ).optional(), })).describe("Volume to mount into the container's filesystem.") .optional(), @@ -1564,7 +1564,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/run/services", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1596,6 +1596,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/run/extensions/models/workerpools.ts b/model/gcp/run/extensions/models/workerpools.ts index 0931080eb..85f08c7da 100644 --- a/model/gcp/run/extensions/models/workerpools.ts +++ b/model/gcp/run/extensions/models/workerpools.ts @@ -398,7 +398,7 @@ const GlobalArgsSchema = z.object({ "Required. This must match the Name of a Volume.", ).optional(), subPath: z.unknown().describe( - "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently ignored for Secret volumes.", + "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently rejected in Secret volume mounts.", ).optional(), })).describe("Volume to mount into the container's filesystem.") .optional(), @@ -1112,7 +1112,7 @@ const InputsSchema = z.object({ "Required. This must match the Name of a Volume.", ).optional(), subPath: z.unknown().describe( - "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently ignored for Secret volumes.", + "Optional. Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root). This field is currently rejected in Secret volume mounts.", ).optional(), })).describe("Volume to mount into the container's filesystem.") .optional(), @@ -1320,7 +1320,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/run/workerpools", - version: "2026.04.04.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1352,6 +1352,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/run/manifest.yaml b/model/gcp/run/manifest.yaml index be1f4788b..0aff12b96 100644 --- a/model/gcp/run/manifest.yaml +++ b/model/gcp/run/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/run" -version: "2026.04.04.1" +version: "2026.04.11.1" description: "Google Cloud run infrastructure models" labels: - gcp @@ -10,7 +10,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: instances, jobs, jobs_executions, jobs_executions_tasks, services, services_revisions, workerpools, workerpools_revisions + - Updated: instances, services, workerpools models: - instances.ts - jobs.ts diff --git a/model/gcp/saasservicemgmt/extensions/models/releases.ts b/model/gcp/saasservicemgmt/extensions/models/releases.ts index 571549917..dd51848c3 100644 --- a/model/gcp/saasservicemgmt/extensions/models/releases.ts +++ b/model/gcp/saasservicemgmt/extensions/models/releases.ts @@ -125,7 +125,14 @@ const GlobalArgsSchema = z.object({ "Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev).", ).optional(), inputVariableDefaults: z.array(z.object({ - type: z.enum(["TYPE_UNSPECIFIED", "STRING", "INT", "BOOL"]).describe( + type: z.enum([ + "TYPE_UNSPECIFIED", + "STRING", + "INT", + "BOOL", + "STRUCT", + "LIST", + ]).describe( "Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.", ).optional(), value: z.string().describe( @@ -217,7 +224,14 @@ const InputsSchema = z.object({ "Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev).", ).optional(), inputVariableDefaults: z.array(z.object({ - type: z.enum(["TYPE_UNSPECIFIED", "STRING", "INT", "BOOL"]).describe( + type: z.enum([ + "TYPE_UNSPECIFIED", + "STRING", + "INT", + "BOOL", + "STRUCT", + "LIST", + ]).describe( "Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.", ).optional(), value: z.string().describe( @@ -257,7 +271,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/saasservicemgmt/releases", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -284,6 +298,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/saasservicemgmt/extensions/models/rollouts.ts b/model/gcp/saasservicemgmt/extensions/models/rollouts.ts index 04885aae6..7ce9a3964 100644 --- a/model/gcp/saasservicemgmt/extensions/models/rollouts.ts +++ b/model/gcp/saasservicemgmt/extensions/models/rollouts.ts @@ -130,6 +130,9 @@ const GlobalArgsSchema = z.object({ }).describe( "RolloutControl provides a way to request a change to the execution of a Rollout by pausing or canceling it.", ).optional(), + flagRelease: z.string().describe( + 'Optional. Immutable. Name of the FlagRelease to be rolled out to the target Units. Release and FlagRelease are mutually exclusive. Note: `release` comment needs to be adjusted to mention that "Release and FlagRelease are mutually exclusive" when visibility restriction will be lifted.', + ).optional(), labels: z.record(z.string(), z.string()).describe( "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.", ).optional(), @@ -187,6 +190,7 @@ const StateSchema = z.object({ effectiveUnitFilter: z.string().optional(), endTime: z.string().optional(), etag: z.string().optional(), + flagRelease: z.string().optional(), labels: z.record(z.string(), z.unknown()).optional(), name: z.string(), parentRollout: z.string().optional(), @@ -235,6 +239,9 @@ const InputsSchema = z.object({ }).describe( "RolloutControl provides a way to request a change to the execution of a Rollout by pausing or canceling it.", ).optional(), + flagRelease: z.string().describe( + 'Optional. Immutable. Name of the FlagRelease to be rolled out to the target Units. Release and FlagRelease are mutually exclusive. Note: `release` comment needs to be adjusted to mention that "Release and FlagRelease are mutually exclusive" when visibility restriction will be lifted.', + ).optional(), labels: z.record(z.string(), z.string()).describe( "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.", ).optional(), @@ -281,7 +288,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/saasservicemgmt/rollouts", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -308,6 +315,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "Added: flagRelease", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -333,6 +345,9 @@ export const model = { body["annotations"] = g["annotations"]; } if (g["control"] !== undefined) body["control"] = g["control"]; + if (g["flagRelease"] !== undefined) { + body["flagRelease"] = g["flagRelease"]; + } if (g["labels"] !== undefined) body["labels"] = g["labels"]; if (g["name"] !== undefined) body["name"] = g["name"]; if (g["release"] !== undefined) body["release"] = g["release"]; diff --git a/model/gcp/saasservicemgmt/extensions/models/tenants.ts b/model/gcp/saasservicemgmt/extensions/models/tenants.ts index 8c560686d..1cad1f788 100644 --- a/model/gcp/saasservicemgmt/extensions/models/tenants.ts +++ b/model/gcp/saasservicemgmt/extensions/models/tenants.ts @@ -112,7 +112,7 @@ const GlobalArgsSchema = z.object({ "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations", ).optional(), consumerResource: z.string().describe( - "Optional. Immutable. A reference to the consumer resource this SaaS Tenant is representing. The relationship with a consumer resource can be used by SaaS Runtime for retrieving consumer-defined settings and policies such as maintenance policies (using Unified Maintenance Policy API).", + "Optional. Immutable. A reference to the consumer resource this SaaS Tenant is representing. The relationship with a consumer resource can be used by App Lifecycle Manager for retrieving consumer-defined settings and policies such as maintenance policies (using Unified Maintenance Policy API).", ).optional(), labels: z.record(z.string(), z.string()).describe( "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.", @@ -121,7 +121,7 @@ const GlobalArgsSchema = z.object({ 'Identifier. The resource name (full URI of the resource) following the standard naming scheme: "projects/{project}/locations/{location}/tenants/{tenant}"', ).optional(), saas: z.string().describe( - "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with SaaS Runtime. Part of the SaaS Runtime common data model.", + "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with App Lifecycle Manager. Part of the App Lifecycle Manager common data model.", ).optional(), requestId: z.string().describe( "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", @@ -152,7 +152,7 @@ const InputsSchema = z.object({ "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations", ).optional(), consumerResource: z.string().describe( - "Optional. Immutable. A reference to the consumer resource this SaaS Tenant is representing. The relationship with a consumer resource can be used by SaaS Runtime for retrieving consumer-defined settings and policies such as maintenance policies (using Unified Maintenance Policy API).", + "Optional. Immutable. A reference to the consumer resource this SaaS Tenant is representing. The relationship with a consumer resource can be used by App Lifecycle Manager for retrieving consumer-defined settings and policies such as maintenance policies (using Unified Maintenance Policy API).", ).optional(), labels: z.record(z.string(), z.string()).describe( "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.", @@ -161,7 +161,7 @@ const InputsSchema = z.object({ 'Identifier. The resource name (full URI of the resource) following the standard naming scheme: "projects/{project}/locations/{location}/tenants/{tenant}"', ).optional(), saas: z.string().describe( - "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with SaaS Runtime. Part of the SaaS Runtime common data model.", + "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with App Lifecycle Manager. Part of the App Lifecycle Manager common data model.", ).optional(), requestId: z.string().describe( "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", @@ -175,7 +175,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/saasservicemgmt/tenants", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -202,6 +202,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/saasservicemgmt/extensions/models/unitkinds.ts b/model/gcp/saasservicemgmt/extensions/models/unitkinds.ts index 4371530f1..4d3c2d0aa 100644 --- a/model/gcp/saasservicemgmt/extensions/models/unitkinds.ts +++ b/model/gcp/saasservicemgmt/extensions/models/unitkinds.ts @@ -111,6 +111,9 @@ const GlobalArgsSchema = z.object({ annotations: z.record(z.string(), z.string()).describe( "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations", ).optional(), + defaultFlagRevisions: z.array(z.string()).describe( + "Optional. Default revisions of flags for this UnitKind. Newly created units will use the flag default_flag_revisions present at the time of creation.", + ).optional(), defaultRelease: z.string().describe( "Optional. A reference to the Release object to use as default for creating new units of this UnitKind (optional). If not specified, a new unit must explicitly reference which release to use for its creation.", ).optional(), @@ -140,7 +143,7 @@ const GlobalArgsSchema = z.object({ "Required. Alias of the dependency that the inputVariable will pass its value to", ).optional(), ignoreForLookup: z.boolean().describe( - "Optional. Tells SaaS Runtime if this mapping should be used during lookup or not", + "Optional. Tells App Lifecycle Manager if this mapping should be used during lookup or not", ).optional(), inputVariable: z.string().describe( "Required. Name of the inputVariable on the dependency", @@ -174,7 +177,7 @@ const GlobalArgsSchema = z.object({ "Required. Alias of the dependency that the inputVariable will pass its value to", ).optional(), ignoreForLookup: z.boolean().describe( - "Optional. Tells SaaS Runtime if this mapping should be used during lookup or not", + "Optional. Tells App Lifecycle Manager if this mapping should be used during lookup or not", ).optional(), inputVariable: z.string().describe( "Required. Name of the inputVariable on the dependency", @@ -187,7 +190,7 @@ const GlobalArgsSchema = z.object({ "Optional. List of outputVariables for this unit kind will be passed to this unit's outputVariables. Maximum 100.", ).optional(), saas: z.string().describe( - "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with SaaS Runtime. Part of the SaaS Runtime common data model. Immutable once set.", + "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with App Lifecycle Manager. Part of the App Lifecycle Manager common data model. Immutable once set.", ).optional(), requestId: z.string().describe( "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", @@ -203,6 +206,7 @@ const GlobalArgsSchema = z.object({ const StateSchema = z.object({ annotations: z.record(z.string(), z.unknown()).optional(), createTime: z.string().optional(), + defaultFlagRevisions: z.array(z.string()).optional(), defaultRelease: z.string().optional(), dependencies: z.array(z.object({ alias: z.string(), @@ -246,6 +250,9 @@ const InputsSchema = z.object({ annotations: z.record(z.string(), z.string()).describe( "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations", ).optional(), + defaultFlagRevisions: z.array(z.string()).describe( + "Optional. Default revisions of flags for this UnitKind. Newly created units will use the flag default_flag_revisions present at the time of creation.", + ).optional(), defaultRelease: z.string().describe( "Optional. A reference to the Release object to use as default for creating new units of this UnitKind (optional). If not specified, a new unit must explicitly reference which release to use for its creation.", ).optional(), @@ -275,7 +282,7 @@ const InputsSchema = z.object({ "Required. Alias of the dependency that the inputVariable will pass its value to", ).optional(), ignoreForLookup: z.boolean().describe( - "Optional. Tells SaaS Runtime if this mapping should be used during lookup or not", + "Optional. Tells App Lifecycle Manager if this mapping should be used during lookup or not", ).optional(), inputVariable: z.string().describe( "Required. Name of the inputVariable on the dependency", @@ -309,7 +316,7 @@ const InputsSchema = z.object({ "Required. Alias of the dependency that the inputVariable will pass its value to", ).optional(), ignoreForLookup: z.boolean().describe( - "Optional. Tells SaaS Runtime if this mapping should be used during lookup or not", + "Optional. Tells App Lifecycle Manager if this mapping should be used during lookup or not", ).optional(), inputVariable: z.string().describe( "Required. Name of the inputVariable on the dependency", @@ -322,7 +329,7 @@ const InputsSchema = z.object({ "Optional. List of outputVariables for this unit kind will be passed to this unit's outputVariables. Maximum 100.", ).optional(), saas: z.string().describe( - "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with SaaS Runtime. Part of the SaaS Runtime common data model. Immutable once set.", + "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with App Lifecycle Manager. Part of the App Lifecycle Manager common data model. Immutable once set.", ).optional(), requestId: z.string().describe( "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", @@ -337,7 +344,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/saasservicemgmt/unitkinds", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -364,6 +371,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "Added: defaultFlagRevisions", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -389,6 +401,9 @@ export const model = { if (g["annotations"] !== undefined) { body["annotations"] = g["annotations"]; } + if (g["defaultFlagRevisions"] !== undefined) { + body["defaultFlagRevisions"] = g["defaultFlagRevisions"]; + } if (g["defaultRelease"] !== undefined) { body["defaultRelease"] = g["defaultRelease"]; } @@ -488,6 +503,9 @@ export const model = { if (g["annotations"] !== undefined) { body["annotations"] = g["annotations"]; } + if (g["defaultFlagRevisions"] !== undefined) { + body["defaultFlagRevisions"] = g["defaultFlagRevisions"]; + } if (g["defaultRelease"] !== undefined) { body["defaultRelease"] = g["defaultRelease"]; } diff --git a/model/gcp/saasservicemgmt/extensions/models/units.ts b/model/gcp/saasservicemgmt/extensions/models/units.ts index 002ab1664..524e38adc 100644 --- a/model/gcp/saasservicemgmt/extensions/models/units.ts +++ b/model/gcp/saasservicemgmt/extensions/models/units.ts @@ -166,6 +166,7 @@ const StateSchema = z.object({ unit: z.string(), })).optional(), etag: z.string().optional(), + flagRevisions: z.array(z.string()).optional(), inputVariables: z.array(z.object({ type: z.string(), value: z.string(), @@ -241,7 +242,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/saasservicemgmt/units", - version: "2026.04.03.3", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -268,6 +269,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.04.11.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/saasservicemgmt/manifest.yaml b/model/gcp/saasservicemgmt/manifest.yaml index fd51f46e2..e5f539088 100644 --- a/model/gcp/saasservicemgmt/manifest.yaml +++ b/model/gcp/saasservicemgmt/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/saasservicemgmt" -version: "2026.04.03.3" +version: "2026.04.11.1" description: "Google Cloud saasservicemgmt infrastructure models" labels: - gcp @@ -10,7 +10,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: locations, releases, rolloutkinds, rollouts, saas, tenants, unitkinds, units + - Updated: releases, rollouts, tenants, unitkinds, units models: - locations.ts - releases.ts diff --git a/model/gcp/workstations/extensions/models/workstationclusters.ts b/model/gcp/workstations/extensions/models/workstationclusters.ts index 5e4e47da4..87ede6d9b 100644 --- a/model/gcp/workstations/extensions/models/workstationclusters.ts +++ b/model/gcp/workstations/extensions/models/workstationclusters.ts @@ -151,6 +151,12 @@ const GlobalArgsSchema = z.object({ tags: z.record(z.string(), z.string()).describe( 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', ).optional(), + workstationAuthorizationUrl: z.string().describe( + "Optional. Specifies the redirect URL for unauthorized requests received by workstation VMs in this cluster. Redirects to this endpoint will send a base64 encoded `state` query param containing the target workstation name and original request hostname. The endpoint is responsible for retrieving a token using `GenerateAccessToken` and redirecting back to the original hostname with the token.", + ).optional(), + workstationLaunchUrl: z.string().describe( + "Optional. Specifies the launch URL for workstations in this cluster. Requests sent to unstarted workstations will be redirected to this URL. Requests redirected to the launch endpoint will be sent with a `workstation` and `project` query parameter containing the full workstation resource name and project ID, respectively. The launch endpoint is responsible for starting the workstation, polling it until it reaches `STATE_RUNNING`, and then issuing a redirect to the workstation's host URL.", + ).optional(), workstationClusterId: z.string().describe( "Required. ID to use for the workstation cluster.", ).optional(), @@ -192,6 +198,8 @@ const StateSchema = z.object({ tags: z.record(z.string(), z.unknown()).optional(), uid: z.string().optional(), updateTime: z.string().optional(), + workstationAuthorizationUrl: z.string().optional(), + workstationLaunchUrl: z.string().optional(), }).passthrough(); type StateData = z.infer; @@ -243,6 +251,12 @@ const InputsSchema = z.object({ tags: z.record(z.string(), z.string()).describe( 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', ).optional(), + workstationAuthorizationUrl: z.string().describe( + "Optional. Specifies the redirect URL for unauthorized requests received by workstation VMs in this cluster. Redirects to this endpoint will send a base64 encoded `state` query param containing the target workstation name and original request hostname. The endpoint is responsible for retrieving a token using `GenerateAccessToken` and redirecting back to the original hostname with the token.", + ).optional(), + workstationLaunchUrl: z.string().describe( + "Optional. Specifies the launch URL for workstations in this cluster. Requests sent to unstarted workstations will be redirected to this URL. Requests redirected to the launch endpoint will be sent with a `workstation` and `project` query parameter containing the full workstation resource name and project ID, respectively. The launch endpoint is responsible for starting the workstation, polling it until it reaches `STATE_RUNNING`, and then issuing a redirect to the workstation's host URL.", + ).optional(), workstationClusterId: z.string().describe( "Required. ID to use for the workstation cluster.", ).optional(), @@ -253,7 +267,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/workstations/workstationclusters", - version: "2026.04.09.1", + version: "2026.04.11.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -297,6 +311,11 @@ export const model = { return rest; }, }, + { + toVersion: "2026.04.11.1", + description: "Added: workstationAuthorizationUrl, workstationLaunchUrl", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -339,6 +358,13 @@ export const model = { } if (g["subnetwork"] !== undefined) body["subnetwork"] = g["subnetwork"]; if (g["tags"] !== undefined) body["tags"] = g["tags"]; + if (g["workstationAuthorizationUrl"] !== undefined) { + body["workstationAuthorizationUrl"] = + g["workstationAuthorizationUrl"]; + } + if (g["workstationLaunchUrl"] !== undefined) { + body["workstationLaunchUrl"] = g["workstationLaunchUrl"]; + } if (g["workstationClusterId"] !== undefined) { body["workstationClusterId"] = g["workstationClusterId"]; } @@ -437,6 +463,13 @@ export const model = { if (g["privateClusterConfig"] !== undefined) { body["privateClusterConfig"] = g["privateClusterConfig"]; } + if (g["workstationAuthorizationUrl"] !== undefined) { + body["workstationAuthorizationUrl"] = + g["workstationAuthorizationUrl"]; + } + if (g["workstationLaunchUrl"] !== undefined) { + body["workstationLaunchUrl"] = g["workstationLaunchUrl"]; + } for (const key of Object.keys(existing)) { if ( key === "fingerprint" || key === "labelFingerprint" || diff --git a/model/gcp/workstations/manifest.yaml b/model/gcp/workstations/manifest.yaml index 1a69bf742..aabdcddcb 100644 --- a/model/gcp/workstations/manifest.yaml +++ b/model/gcp/workstations/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/workstations" -version: "2026.04.09.1" +version: "2026.04.11.1" description: "Google Cloud workstations infrastructure models" labels: - gcp