diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index bf83e44268f..a5b1012c5d2 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -4591,6 +4591,22 @@ components: - id - base_severity type: object + AgentTrigger: + description: "Trigger a workflow from an agent via the MCP execute tool. Workflow can be executed from Bits Chat, Bits Agent Builder, Claude Code, Codex, Cursor, and any other coding agent using the Datadog MCP." + properties: + rateLimit: + $ref: "#/components/schemas/TriggerRateLimit" + type: object + AgentTriggerWrapper: + description: "Schema for an agent-based trigger." + properties: + agentTrigger: + $ref: "#/components/schemas/AgentTrigger" + startStepNames: + $ref: "#/components/schemas/StartStepNames" + required: + - agentTrigger + type: object AggregatedHighFrozenFrameRate: description: Aggregated high frozen frame rate detection at view level. properties: @@ -114425,6 +114441,7 @@ components: Trigger: description: "One of the triggers that can start the execution of a workflow." oneOf: + - $ref: "#/components/schemas/AgentTriggerWrapper" - $ref: "#/components/schemas/APITriggerWrapper" - $ref: "#/components/schemas/AppTriggerWrapper" - $ref: "#/components/schemas/CaseTriggerWrapper" diff --git a/src/main/java/com/datadog/api/client/v2/model/AgentTrigger.java b/src/main/java/com/datadog/api/client/v2/model/AgentTrigger.java new file mode 100644 index 00000000000..4d1178e4669 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/AgentTrigger.java @@ -0,0 +1,143 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * Trigger a workflow from an agent via the MCP execute tool. Workflow can be executed from Bits + * Chat, Bits Agent Builder, Claude Code, Codex, Cursor, and any other coding agent using the + * Datadog MCP. + */ +@JsonPropertyOrder({AgentTrigger.JSON_PROPERTY_RATE_LIMIT}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class AgentTrigger { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_RATE_LIMIT = "rateLimit"; + private TriggerRateLimit rateLimit; + + public AgentTrigger rateLimit(TriggerRateLimit rateLimit) { + this.rateLimit = rateLimit; + this.unparsed |= rateLimit.unparsed; + return this; + } + + /** + * Defines a rate limit for a trigger. + * + * @return rateLimit + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RATE_LIMIT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TriggerRateLimit getRateLimit() { + return rateLimit; + } + + public void setRateLimit(TriggerRateLimit rateLimit) { + this.rateLimit = rateLimit; + if (rateLimit != null) { + this.unparsed |= rateLimit.unparsed; + } + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return AgentTrigger + */ + @JsonAnySetter + public AgentTrigger putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this AgentTrigger object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentTrigger agentTrigger = (AgentTrigger) o; + return Objects.equals(this.rateLimit, agentTrigger.rateLimit) + && Objects.equals(this.additionalProperties, agentTrigger.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(rateLimit, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentTrigger {\n"); + sb.append(" rateLimit: ").append(toIndentedString(rateLimit)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/AgentTriggerWrapper.java b/src/main/java/com/datadog/api/client/v2/model/AgentTriggerWrapper.java new file mode 100644 index 00000000000..6efa4ea037a --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/AgentTriggerWrapper.java @@ -0,0 +1,190 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** Schema for an agent-based trigger. */ +@JsonPropertyOrder({ + AgentTriggerWrapper.JSON_PROPERTY_AGENT_TRIGGER, + AgentTriggerWrapper.JSON_PROPERTY_START_STEP_NAMES +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class AgentTriggerWrapper { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_AGENT_TRIGGER = "agentTrigger"; + private AgentTrigger agentTrigger; + + public static final String JSON_PROPERTY_START_STEP_NAMES = "startStepNames"; + private List startStepNames = null; + + public AgentTriggerWrapper() {} + + @JsonCreator + public AgentTriggerWrapper( + @JsonProperty(required = true, value = JSON_PROPERTY_AGENT_TRIGGER) + AgentTrigger agentTrigger) { + this.agentTrigger = agentTrigger; + this.unparsed |= agentTrigger.unparsed; + } + + public AgentTriggerWrapper agentTrigger(AgentTrigger agentTrigger) { + this.agentTrigger = agentTrigger; + this.unparsed |= agentTrigger.unparsed; + return this; + } + + /** + * Trigger a workflow from an agent via the MCP execute tool. Workflow can be executed from Bits + * Chat, Bits Agent Builder, Claude Code, Codex, Cursor, and any other coding agent using the + * Datadog MCP. + * + * @return agentTrigger + */ + @JsonProperty(JSON_PROPERTY_AGENT_TRIGGER) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentTrigger getAgentTrigger() { + return agentTrigger; + } + + public void setAgentTrigger(AgentTrigger agentTrigger) { + this.agentTrigger = agentTrigger; + if (agentTrigger != null) { + this.unparsed |= agentTrigger.unparsed; + } + } + + public AgentTriggerWrapper startStepNames(List startStepNames) { + this.startStepNames = startStepNames; + return this; + } + + public AgentTriggerWrapper addStartStepNamesItem(String startStepNamesItem) { + if (this.startStepNames == null) { + this.startStepNames = new ArrayList<>(); + } + this.startStepNames.add(startStepNamesItem); + return this; + } + + /** + * Names of existing workflow steps that run first after a trigger fires. + * + * @return startStepNames + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_START_STEP_NAMES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getStartStepNames() { + return startStepNames; + } + + public void setStartStepNames(List startStepNames) { + this.startStepNames = startStepNames; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return AgentTriggerWrapper + */ + @JsonAnySetter + public AgentTriggerWrapper putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this AgentTriggerWrapper object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentTriggerWrapper agentTriggerWrapper = (AgentTriggerWrapper) o; + return Objects.equals(this.agentTrigger, agentTriggerWrapper.agentTrigger) + && Objects.equals(this.startStepNames, agentTriggerWrapper.startStepNames) + && Objects.equals(this.additionalProperties, agentTriggerWrapper.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(agentTrigger, startStepNames, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentTriggerWrapper {\n"); + sb.append(" agentTrigger: ").append(toIndentedString(agentTrigger)).append("\n"); + sb.append(" startStepNames: ").append(toIndentedString(startStepNames)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/Trigger.java b/src/main/java/com/datadog/api/client/v2/model/Trigger.java index d4ff9b8107e..b817e2d472b 100644 --- a/src/main/java/com/datadog/api/client/v2/model/Trigger.java +++ b/src/main/java/com/datadog/api/client/v2/model/Trigger.java @@ -77,6 +77,50 @@ public Trigger deserialize(JsonParser jp, DeserializationContext ctxt) boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); int match = 0; JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize AgentTriggerWrapper + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentTriggerWrapper.class.equals(Integer.class) + || AgentTriggerWrapper.class.equals(Long.class) + || AgentTriggerWrapper.class.equals(Float.class) + || AgentTriggerWrapper.class.equals(Double.class) + || AgentTriggerWrapper.class.equals(Boolean.class) + || AgentTriggerWrapper.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((AgentTriggerWrapper.class.equals(Integer.class) + || AgentTriggerWrapper.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((AgentTriggerWrapper.class.equals(Float.class) + || AgentTriggerWrapper.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (AgentTriggerWrapper.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (AgentTriggerWrapper.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(AgentTriggerWrapper.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((AgentTriggerWrapper) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'AgentTriggerWrapper'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentTriggerWrapper'", e); + } + // deserialize APITriggerWrapper try { boolean attemptParsing = true; @@ -956,6 +1000,11 @@ public Trigger() { super("oneOf", Boolean.FALSE); } + public Trigger(AgentTriggerWrapper o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public Trigger(APITriggerWrapper o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -1052,6 +1101,7 @@ public Trigger(WorkflowTriggerWrapper o) { } static { + schemas.put("AgentTriggerWrapper", new GenericType() {}); schemas.put("APITriggerWrapper", new GenericType() {}); schemas.put("AppTriggerWrapper", new GenericType() {}); schemas.put("CaseTriggerWrapper", new GenericType() {}); @@ -1083,18 +1133,23 @@ public Map getSchemas() { /** * Set the instance that matches the oneOf child schema, check the instance parameter is valid - * against the oneOf child schemas: APITriggerWrapper, AppTriggerWrapper, CaseTriggerWrapper, - * ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper, DatastoreTriggerWrapper, - * DashboardTriggerWrapper, FormTriggerWrapper, GithubWebhookTriggerWrapper, - * IncidentTriggerWrapper, MonitorTriggerWrapper, NotebookTriggerWrapper, OnCallTriggerWrapper, - * ScheduleTriggerWrapper, SecurityTriggerWrapper, SelfServiceTriggerWrapper, SlackTriggerWrapper, - * SoftwareCatalogTriggerWrapper, WorkflowTriggerWrapper + * against the oneOf child schemas: AgentTriggerWrapper, APITriggerWrapper, AppTriggerWrapper, + * CaseTriggerWrapper, ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper, + * DatastoreTriggerWrapper, DashboardTriggerWrapper, FormTriggerWrapper, + * GithubWebhookTriggerWrapper, IncidentTriggerWrapper, MonitorTriggerWrapper, + * NotebookTriggerWrapper, OnCallTriggerWrapper, ScheduleTriggerWrapper, SecurityTriggerWrapper, + * SelfServiceTriggerWrapper, SlackTriggerWrapper, SoftwareCatalogTriggerWrapper, + * WorkflowTriggerWrapper * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). */ @Override public void setActualInstance(Object instance) { + if (JSON.isInstanceOf(AgentTriggerWrapper.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf(APITriggerWrapper.class, instance, new HashSet>())) { super.setActualInstance(instance); return; @@ -1178,8 +1233,8 @@ public void setActualInstance(Object instance) { return; } throw new RuntimeException( - "Invalid instance type. Must be APITriggerWrapper, AppTriggerWrapper, CaseTriggerWrapper," - + " ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper," + "Invalid instance type. Must be AgentTriggerWrapper, APITriggerWrapper, AppTriggerWrapper," + + " CaseTriggerWrapper, ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper," + " DatastoreTriggerWrapper, DashboardTriggerWrapper, FormTriggerWrapper," + " GithubWebhookTriggerWrapper, IncidentTriggerWrapper, MonitorTriggerWrapper," + " NotebookTriggerWrapper, OnCallTriggerWrapper, ScheduleTriggerWrapper," @@ -1188,27 +1243,38 @@ public void setActualInstance(Object instance) { } /** - * Get the actual instance, which can be the following: APITriggerWrapper, AppTriggerWrapper, - * CaseTriggerWrapper, ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper, - * DatastoreTriggerWrapper, DashboardTriggerWrapper, FormTriggerWrapper, - * GithubWebhookTriggerWrapper, IncidentTriggerWrapper, MonitorTriggerWrapper, + * Get the actual instance, which can be the following: AgentTriggerWrapper, APITriggerWrapper, + * AppTriggerWrapper, CaseTriggerWrapper, ChangeEventTriggerWrapper, + * DatabaseMonitoringTriggerWrapper, DatastoreTriggerWrapper, DashboardTriggerWrapper, + * FormTriggerWrapper, GithubWebhookTriggerWrapper, IncidentTriggerWrapper, MonitorTriggerWrapper, * NotebookTriggerWrapper, OnCallTriggerWrapper, ScheduleTriggerWrapper, SecurityTriggerWrapper, * SelfServiceTriggerWrapper, SlackTriggerWrapper, SoftwareCatalogTriggerWrapper, * WorkflowTriggerWrapper * - * @return The actual instance (APITriggerWrapper, AppTriggerWrapper, CaseTriggerWrapper, - * ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper, DatastoreTriggerWrapper, - * DashboardTriggerWrapper, FormTriggerWrapper, GithubWebhookTriggerWrapper, - * IncidentTriggerWrapper, MonitorTriggerWrapper, NotebookTriggerWrapper, - * OnCallTriggerWrapper, ScheduleTriggerWrapper, SecurityTriggerWrapper, - * SelfServiceTriggerWrapper, SlackTriggerWrapper, SoftwareCatalogTriggerWrapper, - * WorkflowTriggerWrapper) + * @return The actual instance (AgentTriggerWrapper, APITriggerWrapper, AppTriggerWrapper, + * CaseTriggerWrapper, ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper, + * DatastoreTriggerWrapper, DashboardTriggerWrapper, FormTriggerWrapper, + * GithubWebhookTriggerWrapper, IncidentTriggerWrapper, MonitorTriggerWrapper, + * NotebookTriggerWrapper, OnCallTriggerWrapper, ScheduleTriggerWrapper, + * SecurityTriggerWrapper, SelfServiceTriggerWrapper, SlackTriggerWrapper, + * SoftwareCatalogTriggerWrapper, WorkflowTriggerWrapper) */ @Override public Object getActualInstance() { return super.getActualInstance(); } + /** + * Get the actual instance of `AgentTriggerWrapper`. If the actual instance is not + * `AgentTriggerWrapper`, the ClassCastException will be thrown. + * + * @return The actual instance of `AgentTriggerWrapper` + * @throws ClassCastException if the instance is not `AgentTriggerWrapper` + */ + public AgentTriggerWrapper getAgentTriggerWrapper() throws ClassCastException { + return (AgentTriggerWrapper) super.getActualInstance(); + } + /** * Get the actual instance of `APITriggerWrapper`. If the actual instance is not * `APITriggerWrapper`, the ClassCastException will be thrown.