// @generated
// This file is @generated by prost-build.
/// Configuration of a send message request.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SendMessageConfiguration {
    /// A list of media types the client is prepared to accept for response parts.
    /// Agents SHOULD use this to tailor their output.
    #[prost(string, repeated, tag="1")]
    pub accepted_output_modes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// Configuration for the agent to send push notifications for task updates.
    /// Task id should be empty when sending this configuration in a `SendMessage` request.
    #[prost(message, optional, tag="2")]
    pub task_push_notification_config: ::core::option::Option<TaskPushNotificationConfig>,
    /// The maximum number of most recent messages from the task's history to retrieve in
    /// the response. An unset value means the client does not impose any limit. A
    /// value of zero is a request to not include any messages. The server MUST NOT
    /// return more messages than the provided value, but MAY apply a lower limit.
    #[prost(int32, optional, tag="3")]
    pub history_length: ::core::option::Option<i32>,
    /// If `true`, the operation returns immediately after creating the task,
    /// even if processing is still in progress.
    /// If `false` (default), the operation MUST wait until the task reaches a
    /// terminal (`COMPLETED`, `FAILED`, `CANCELED`, `REJECTED`) or interrupted
    /// (`INPUT_REQUIRED`, `AUTH_REQUIRED`) state before returning.
    #[prost(bool, tag="4")]
    pub return_immediately: bool,
}
/// `Task` is the core unit of action for A2A. It has a current status
/// and when results are created for the task they are stored in the
/// artifact. If there are multiple turns for a task, these are stored in
/// history.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Task {
    /// Unique identifier (e.g. UUID) for the task, generated by the server for a
    /// new task.
    #[prost(string, tag="1")]
    pub id: ::prost::alloc::string::String,
    /// Unique identifier (e.g. UUID) for the contextual collection of interactions
    /// (tasks and messages).
    #[prost(string, tag="2")]
    pub context_id: ::prost::alloc::string::String,
    /// The current status of a `Task`, including `state` and a `message`.
    #[prost(message, optional, tag="3")]
    pub status: ::core::option::Option<TaskStatus>,
    /// A set of output artifacts for a `Task`.
    #[prost(message, repeated, tag="4")]
    pub artifacts: ::prost::alloc::vec::Vec<Artifact>,
    /// protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
    /// The history of interactions from a `Task`.
    #[prost(message, repeated, tag="5")]
    pub history: ::prost::alloc::vec::Vec<Message>,
    /// protolint:enable REPEATED_FIELD_NAMES_PLURALIZED
    /// A key/value object to store custom metadata about a task.
    #[prost(message, optional, tag="6")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
}
/// A container for the status of a task
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TaskStatus {
    /// The current state of this task.
    #[prost(enumeration="TaskState", tag="1")]
    pub state: i32,
    /// A message associated with the status.
    #[prost(message, optional, tag="2")]
    pub message: ::core::option::Option<Message>,
    /// ISO 8601 Timestamp when the status was recorded.
    /// Example: "2023-10-27T10:00:00Z"
    #[prost(message, optional, tag="3")]
    pub timestamp: ::core::option::Option<::prost_types::Timestamp>,
}
/// `Part` represents a container for a section of communication content.
/// Parts can be purely textual, some sort of file (image, video, etc) or
/// a structured data blob (i.e. JSON).
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Part {
    /// Optional. metadata associated with this part.
    #[prost(message, optional, tag="5")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
    /// An optional `filename` for the file (e.g., "document.pdf").
    #[prost(string, tag="6")]
    pub filename: ::prost::alloc::string::String,
    /// The `media_type` (MIME type) of the part content (e.g., "text/plain", "application/json", "image/png").
    /// This field is available for all part types.
    #[prost(string, tag="7")]
    pub media_type: ::prost::alloc::string::String,
    #[prost(oneof="part::Content", tags="1, 2, 3, 4")]
    pub content: ::core::option::Option<part::Content>,
}
/// Nested message and enum types in `Part`.
pub mod part {
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Content {
        /// The string content of the `text` part.
        #[prost(string, tag="1")]
        Text(::prost::alloc::string::String),
        /// The `raw` byte content of a file. In JSON serialization, this is encoded as a base64 string.
        #[prost(bytes, tag="2")]
        Raw(::prost::alloc::vec::Vec<u8>),
        /// A `url` pointing to the file's content.
        #[prost(string, tag="3")]
        Url(::prost::alloc::string::String),
        /// Arbitrary structured `data` as a JSON value (object, array, string, number, boolean, or null).
        #[prost(message, tag="4")]
        Data(::prost_types::Value),
    }
}
/// `Message` is one unit of communication between client and server. It can be
/// associated with a context and/or a task. For server messages, `context_id` must
/// be provided, and `task_id` only if a task was created. For client messages, both
/// fields are optional, with the caveat that if both are provided, they have to
/// match (the `context_id` has to be the one that is set on the task). If only
/// `task_id` is provided, the server will infer `context_id` from it.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Message {
    /// The unique identifier (e.g. UUID) of the message. This is created by the message creator.
    #[prost(string, tag="1")]
    pub message_id: ::prost::alloc::string::String,
    /// Optional. The context id of the message. If set, the message will be associated with the given context.
    #[prost(string, tag="2")]
    pub context_id: ::prost::alloc::string::String,
    /// Optional. The task id of the message. If set, the message will be associated with the given task.
    #[prost(string, tag="3")]
    pub task_id: ::prost::alloc::string::String,
    /// Identifies the sender of the message.
    #[prost(enumeration="Role", tag="4")]
    pub role: i32,
    /// Parts is the container of the message content.
    #[prost(message, repeated, tag="5")]
    pub parts: ::prost::alloc::vec::Vec<Part>,
    /// Optional. Any metadata to provide along with the message.
    #[prost(message, optional, tag="6")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
    /// The URIs of extensions that are present or contributed to this Message.
    #[prost(string, repeated, tag="7")]
    pub extensions: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// A list of task IDs that this message references for additional context.
    #[prost(string, repeated, tag="8")]
    pub reference_task_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// Artifacts represent task outputs.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Artifact {
    /// Unique identifier (e.g. UUID) for the artifact. It must be unique within a task.
    #[prost(string, tag="1")]
    pub artifact_id: ::prost::alloc::string::String,
    /// A human readable name for the artifact.
    #[prost(string, tag="2")]
    pub name: ::prost::alloc::string::String,
    /// Optional. A human readable description of the artifact.
    #[prost(string, tag="3")]
    pub description: ::prost::alloc::string::String,
    /// The content of the artifact. Must contain at least one part.
    #[prost(message, repeated, tag="4")]
    pub parts: ::prost::alloc::vec::Vec<Part>,
    /// Optional. Metadata included with the artifact.
    #[prost(message, optional, tag="5")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
    /// The URIs of extensions that are present or contributed to this Artifact.
    #[prost(string, repeated, tag="6")]
    pub extensions: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// An event sent by the agent to notify the client of a change in a task's status.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TaskStatusUpdateEvent {
    /// The ID of the task that has changed.
    #[prost(string, tag="1")]
    pub task_id: ::prost::alloc::string::String,
    /// The ID of the context that the task belongs to.
    #[prost(string, tag="2")]
    pub context_id: ::prost::alloc::string::String,
    /// The new status of the task.
    #[prost(message, optional, tag="3")]
    pub status: ::core::option::Option<TaskStatus>,
    /// Optional. Metadata associated with the task update.
    #[prost(message, optional, tag="4")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
}
/// A task delta where an artifact has been generated.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TaskArtifactUpdateEvent {
    /// The ID of the task for this artifact.
    #[prost(string, tag="1")]
    pub task_id: ::prost::alloc::string::String,
    /// The ID of the context that this task belongs to.
    #[prost(string, tag="2")]
    pub context_id: ::prost::alloc::string::String,
    /// The artifact that was generated or updated.
    #[prost(message, optional, tag="3")]
    pub artifact: ::core::option::Option<Artifact>,
    /// If true, the content of this artifact should be appended to a previously
    /// sent artifact with the same ID.
    #[prost(bool, tag="4")]
    pub append: bool,
    /// If true, this is the final chunk of the artifact.
    #[prost(bool, tag="5")]
    pub last_chunk: bool,
    /// Optional. Metadata associated with the artifact update.
    #[prost(message, optional, tag="6")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
}
/// Defines authentication details, used for push notifications.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AuthenticationInfo {
    /// HTTP Authentication Scheme from the [IANA registry](<https://www.iana.org/assignments/http-authschemes/>).
    /// Examples: `Bearer`, `Basic`, `Digest`.
    /// Scheme names are case-insensitive per [RFC 9110 Section 11.1](<https://www.rfc-editor.org/rfc/rfc9110#section-11.1>).
    #[prost(string, tag="1")]
    pub scheme: ::prost::alloc::string::String,
    /// Push Notification credentials. Format depends on the scheme (e.g., token for Bearer).
    #[prost(string, tag="2")]
    pub credentials: ::prost::alloc::string::String,
}
/// Declares a combination of a target URL, transport and protocol version for interacting with the agent.
/// This allows agents to expose the same functionality over multiple protocol binding mechanisms.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentInterface {
    /// The URL where this interface is available. Must be a valid absolute HTTPS URL in production.
    /// Example: "<https://api.example.com/a2a/v1",> "<https://grpc.example.com/a2a">
    #[prost(string, tag="1")]
    pub url: ::prost::alloc::string::String,
    /// The protocol binding supported at this URL. This is an open form string, to be
    /// easily extended for other protocol bindings. The core ones officially
    /// supported are `JSONRPC`, `GRPC` and `HTTP+JSON`.
    #[prost(string, tag="2")]
    pub protocol_binding: ::prost::alloc::string::String,
    /// Tenant ID to be used in the request when calling the agent.
    #[prost(string, tag="3")]
    pub tenant: ::prost::alloc::string::String,
    /// The version of the A2A protocol this interface exposes.
    /// Use the latest supported minor version per major version.
    /// Examples: "0.3", "1.0"
    #[prost(string, tag="4")]
    pub protocol_version: ::prost::alloc::string::String,
}
/// A self-describing manifest for an agent. It provides essential
/// metadata including the agent's identity, capabilities, skills, supported
/// communication methods, and security requirements.
/// Next ID: 20
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentCard {
    /// A human readable name for the agent.
    /// Example: "Recipe Agent"
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
    /// A human-readable description of the agent, assisting users and other agents
    /// in understanding its purpose.
    /// Example: "Agent that helps users with recipes and cooking."
    #[prost(string, tag="2")]
    pub description: ::prost::alloc::string::String,
    /// Ordered list of supported interfaces. The first entry is preferred.
    #[prost(message, repeated, tag="3")]
    pub supported_interfaces: ::prost::alloc::vec::Vec<AgentInterface>,
    /// The service provider of the agent.
    #[prost(message, optional, tag="4")]
    pub provider: ::core::option::Option<AgentProvider>,
    /// The version of the agent.
    /// Example: "1.0.0"
    #[prost(string, tag="5")]
    pub version: ::prost::alloc::string::String,
    /// A URL providing additional documentation about the agent.
    #[prost(string, optional, tag="6")]
    pub documentation_url: ::core::option::Option<::prost::alloc::string::String>,
    /// A2A Capability set supported by the agent.
    #[prost(message, optional, tag="7")]
    pub capabilities: ::core::option::Option<AgentCapabilities>,
    /// The security scheme details used for authenticating with this agent.
    #[prost(map="string, message", tag="8")]
    pub security_schemes: ::std::collections::HashMap<::prost::alloc::string::String, SecurityScheme>,
    /// Security requirements for contacting the agent.
    #[prost(message, repeated, tag="9")]
    pub security_requirements: ::prost::alloc::vec::Vec<SecurityRequirement>,
    /// protolint:enable REPEATED_FIELD_NAMES_PLURALIZED
    /// The set of interaction modes that the agent supports across all skills.
    /// This can be overridden per skill. Defined as media types.
    #[prost(string, repeated, tag="10")]
    pub default_input_modes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// The media types supported as outputs from this agent.
    #[prost(string, repeated, tag="11")]
    pub default_output_modes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// Skills represent the abilities of an agent.
    /// It is largely a descriptive concept but represents a more focused set of behaviors that the
    /// agent is likely to succeed at.
    #[prost(message, repeated, tag="12")]
    pub skills: ::prost::alloc::vec::Vec<AgentSkill>,
    /// JSON Web Signatures computed for this `AgentCard`.
    #[prost(message, repeated, tag="13")]
    pub signatures: ::prost::alloc::vec::Vec<AgentCardSignature>,
    /// Optional. A URL to an icon for the agent.
    #[prost(string, optional, tag="14")]
    pub icon_url: ::core::option::Option<::prost::alloc::string::String>,
}
/// Represents the service provider of an agent.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentProvider {
    /// A URL for the agent provider's website or relevant documentation.
    /// Example: "<https://ai.google.dev">
    #[prost(string, tag="1")]
    pub url: ::prost::alloc::string::String,
    /// The name of the agent provider's organization.
    /// Example: "Google"
    #[prost(string, tag="2")]
    pub organization: ::prost::alloc::string::String,
}
/// Defines optional capabilities supported by an agent.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentCapabilities {
    /// Indicates if the agent supports streaming responses.
    #[prost(bool, optional, tag="1")]
    pub streaming: ::core::option::Option<bool>,
    /// Indicates if the agent supports sending push notifications for asynchronous task updates.
    #[prost(bool, optional, tag="2")]
    pub push_notifications: ::core::option::Option<bool>,
    /// A list of protocol extensions supported by the agent.
    #[prost(message, repeated, tag="3")]
    pub extensions: ::prost::alloc::vec::Vec<AgentExtension>,
    /// Indicates if the agent supports providing an extended agent card when authenticated.
    #[prost(bool, optional, tag="4")]
    pub extended_agent_card: ::core::option::Option<bool>,
}
/// A declaration of a protocol extension supported by an Agent.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentExtension {
    /// The unique URI identifying the extension.
    #[prost(string, tag="1")]
    pub uri: ::prost::alloc::string::String,
    /// A human-readable description of how this agent uses the extension.
    #[prost(string, tag="2")]
    pub description: ::prost::alloc::string::String,
    /// If true, the client must understand and comply with the extension's requirements.
    #[prost(bool, tag="3")]
    pub required: bool,
    /// Optional. Extension-specific configuration parameters.
    #[prost(message, optional, tag="4")]
    pub params: ::core::option::Option<::prost_types::Struct>,
}
/// Represents a distinct capability or function that an agent can perform.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentSkill {
    /// A unique identifier for the agent's skill.
    #[prost(string, tag="1")]
    pub id: ::prost::alloc::string::String,
    /// A human-readable name for the skill.
    #[prost(string, tag="2")]
    pub name: ::prost::alloc::string::String,
    /// A detailed description of the skill.
    #[prost(string, tag="3")]
    pub description: ::prost::alloc::string::String,
    /// A set of keywords describing the skill's capabilities.
    #[prost(string, repeated, tag="4")]
    pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// Example prompts or scenarios that this skill can handle.
    #[prost(string, repeated, tag="5")]
    pub examples: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// The set of supported input media types for this skill, overriding the agent's defaults.
    #[prost(string, repeated, tag="6")]
    pub input_modes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// The set of supported output media types for this skill, overriding the agent's defaults.
    #[prost(string, repeated, tag="7")]
    pub output_modes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// Security schemes necessary for this skill.
    #[prost(message, repeated, tag="8")]
    pub security_requirements: ::prost::alloc::vec::Vec<SecurityRequirement>,
}
/// AgentCardSignature represents a JWS signature of an AgentCard.
/// This follows the JSON format of an RFC 7515 JSON Web Signature (JWS).
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AgentCardSignature {
    /// (-- api-linter: core::0140::reserved-words=disabled
    ///      aip.dev/not-precedent: Backwards compatibility --)
    /// Required. The protected JWS header for the signature. This is always a
    /// base64url-encoded JSON object.
    #[prost(string, tag="1")]
    pub protected: ::prost::alloc::string::String,
    /// Required. The computed signature, base64url-encoded.
    #[prost(string, tag="2")]
    pub signature: ::prost::alloc::string::String,
    /// The unprotected JWS header values.
    #[prost(message, optional, tag="3")]
    pub header: ::core::option::Option<::prost_types::Struct>,
}
/// A container associating a push notification configuration with a specific task.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TaskPushNotificationConfig {
    /// Optional. Tenant ID.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The push notification configuration details.
    /// A unique identifier (e.g. UUID) for this push notification configuration.
    #[prost(string, tag="2")]
    pub id: ::prost::alloc::string::String,
    /// The ID of the task this configuration is associated with.
    #[prost(string, tag="3")]
    pub task_id: ::prost::alloc::string::String,
    /// The URL where the notification should be sent.
    #[prost(string, tag="4")]
    pub url: ::prost::alloc::string::String,
    /// A token unique for this task or session.
    #[prost(string, tag="5")]
    pub token: ::prost::alloc::string::String,
    /// Authentication information required to send the notification.
    #[prost(message, optional, tag="6")]
    pub authentication: ::core::option::Option<AuthenticationInfo>,
}
/// protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
/// A list of strings.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StringList {
    /// The individual string values.
    #[prost(string, repeated, tag="1")]
    pub list: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// Defines the security requirements for an agent.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SecurityRequirement {
    /// A map of security schemes to the required scopes.
    #[prost(map="string, message", tag="1")]
    pub schemes: ::std::collections::HashMap<::prost::alloc::string::String, StringList>,
}
/// Defines a security scheme that can be used to secure an agent's endpoints.
/// This is a discriminated union type based on the OpenAPI 3.2 Security Scheme Object.
/// See: <https://spec.openapis.org/oas/v3.2.0.html#security-scheme-object>
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SecurityScheme {
    #[prost(oneof="security_scheme::Scheme", tags="1, 2, 3, 4, 5")]
    pub scheme: ::core::option::Option<security_scheme::Scheme>,
}
/// Nested message and enum types in `SecurityScheme`.
pub mod security_scheme {
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Scheme {
        /// API key-based authentication.
        #[prost(message, tag="1")]
        ApiKeySecurityScheme(super::ApiKeySecurityScheme),
        /// HTTP authentication (Basic, Bearer, etc.).
        #[prost(message, tag="2")]
        HttpAuthSecurityScheme(super::HttpAuthSecurityScheme),
        /// OAuth 2.0 authentication.
        #[prost(message, tag="3")]
        Oauth2SecurityScheme(super::OAuth2SecurityScheme),
        /// OpenID Connect authentication.
        #[prost(message, tag="4")]
        OpenIdConnectSecurityScheme(super::OpenIdConnectSecurityScheme),
        /// Mutual TLS authentication.
        #[prost(message, tag="5")]
        MtlsSecurityScheme(super::MutualTlsSecurityScheme),
    }
}
/// Defines a security scheme using an API key.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ApiKeySecurityScheme {
    /// An optional description for the security scheme.
    #[prost(string, tag="1")]
    pub description: ::prost::alloc::string::String,
    /// The location of the API key. Valid values are "query", "header", or "cookie".
    #[prost(string, tag="2")]
    pub location: ::prost::alloc::string::String,
    /// The name of the header, query, or cookie parameter to be used.
    #[prost(string, tag="3")]
    pub name: ::prost::alloc::string::String,
}
/// Defines a security scheme using HTTP authentication.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct HttpAuthSecurityScheme {
    /// An optional description for the security scheme.
    #[prost(string, tag="1")]
    pub description: ::prost::alloc::string::String,
    /// The name of the HTTP Authentication scheme to be used in the Authorization header,
    /// as defined in RFC7235 (e.g., "Bearer").
    /// This value should be registered in the IANA Authentication Scheme registry.
    #[prost(string, tag="2")]
    pub scheme: ::prost::alloc::string::String,
    /// A hint to the client to identify how the bearer token is formatted (e.g., "JWT").
    /// Primarily for documentation purposes.
    #[prost(string, tag="3")]
    pub bearer_format: ::prost::alloc::string::String,
}
/// Defines a security scheme using OAuth 2.0.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OAuth2SecurityScheme {
    /// An optional description for the security scheme.
    #[prost(string, tag="1")]
    pub description: ::prost::alloc::string::String,
    /// An object containing configuration information for the supported OAuth 2.0 flows.
    #[prost(message, optional, tag="2")]
    pub flows: ::core::option::Option<OAuthFlows>,
    /// URL to the OAuth2 authorization server metadata [RFC 8414](<https://datatracker.ietf.org/doc/html/rfc8414>).
    /// TLS is required.
    #[prost(string, tag="3")]
    pub oauth2_metadata_url: ::prost::alloc::string::String,
}
/// Defines a security scheme using OpenID Connect.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OpenIdConnectSecurityScheme {
    /// An optional description for the security scheme.
    #[prost(string, tag="1")]
    pub description: ::prost::alloc::string::String,
    /// The [OpenID Connect Discovery URL](<https://openid.net/specs/openid-connect-discovery-1_0.html>) for the OIDC provider's metadata.
    #[prost(string, tag="2")]
    pub open_id_connect_url: ::prost::alloc::string::String,
}
/// Defines a security scheme using mTLS authentication.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MutualTlsSecurityScheme {
    /// An optional description for the security scheme.
    #[prost(string, tag="1")]
    pub description: ::prost::alloc::string::String,
}
/// Defines the configuration for the supported OAuth 2.0 flows.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OAuthFlows {
    #[prost(oneof="o_auth_flows::Flow", tags="1, 2, 3, 4, 5")]
    pub flow: ::core::option::Option<o_auth_flows::Flow>,
}
/// Nested message and enum types in `OAuthFlows`.
pub mod o_auth_flows {
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Flow {
        /// Configuration for the OAuth Authorization Code flow.
        #[prost(message, tag="1")]
        AuthorizationCode(super::AuthorizationCodeOAuthFlow),
        /// Configuration for the OAuth Client Credentials flow.
        #[prost(message, tag="2")]
        ClientCredentials(super::ClientCredentialsOAuthFlow),
        /// Deprecated: Use Authorization Code + PKCE instead.
        #[prost(message, tag="3")]
        Implicit(super::ImplicitOAuthFlow),
        /// Deprecated: Use Authorization Code + PKCE or Device Code.
        #[prost(message, tag="4")]
        Password(super::PasswordOAuthFlow),
        /// Configuration for the OAuth Device Code flow.
        #[prost(message, tag="5")]
        DeviceCode(super::DeviceCodeOAuthFlow),
    }
}
/// Defines configuration details for the OAuth 2.0 Authorization Code flow.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AuthorizationCodeOAuthFlow {
    /// The authorization URL to be used for this flow.
    #[prost(string, tag="1")]
    pub authorization_url: ::prost::alloc::string::String,
    /// The token URL to be used for this flow.
    #[prost(string, tag="2")]
    pub token_url: ::prost::alloc::string::String,
    /// The URL to be used for obtaining refresh tokens.
    #[prost(string, tag="3")]
    pub refresh_url: ::prost::alloc::string::String,
    /// The available scopes for the OAuth2 security scheme.
    #[prost(map="string, string", tag="4")]
    pub scopes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
    /// Indicates if PKCE (RFC 7636) is required for this flow.
    /// PKCE should always be used for public clients and is recommended for all clients.
    #[prost(bool, tag="5")]
    pub pkce_required: bool,
}
/// Defines configuration details for the OAuth 2.0 Client Credentials flow.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ClientCredentialsOAuthFlow {
    /// The token URL to be used for this flow.
    #[prost(string, tag="1")]
    pub token_url: ::prost::alloc::string::String,
    /// The URL to be used for obtaining refresh tokens.
    #[prost(string, tag="2")]
    pub refresh_url: ::prost::alloc::string::String,
    /// The available scopes for the OAuth2 security scheme.
    #[prost(map="string, string", tag="3")]
    pub scopes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
}
/// Deprecated: Use Authorization Code + PKCE instead.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ImplicitOAuthFlow {
    /// The authorization URL to be used for this flow. This MUST be in the
    /// form of a URL. The OAuth2 standard requires the use of TLS
    #[prost(string, tag="1")]
    pub authorization_url: ::prost::alloc::string::String,
    /// The URL to be used for obtaining refresh tokens. This MUST be in the
    /// form of a URL. The OAuth2 standard requires the use of TLS.
    #[prost(string, tag="2")]
    pub refresh_url: ::prost::alloc::string::String,
    /// The available scopes for the OAuth2 security scheme. A map between the
    /// scope name and a short description for it. The map MAY be empty.
    #[prost(map="string, string", tag="3")]
    pub scopes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
}
/// Deprecated: Use Authorization Code + PKCE or Device Code.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PasswordOAuthFlow {
    /// The token URL to be used for this flow. This MUST be in the form of a URL.
    /// The OAuth2 standard requires the use of TLS.
    #[prost(string, tag="1")]
    pub token_url: ::prost::alloc::string::String,
    /// The URL to be used for obtaining refresh tokens. This MUST be in the
    /// form of a URL. The OAuth2 standard requires the use of TLS.
    #[prost(string, tag="2")]
    pub refresh_url: ::prost::alloc::string::String,
    /// The available scopes for the OAuth2 security scheme. A map between the
    /// scope name and a short description for it. The map MAY be empty.
    #[prost(map="string, string", tag="3")]
    pub scopes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
}
/// Defines configuration details for the OAuth 2.0 Device Code flow (RFC 8628).
/// This flow is designed for input-constrained devices such as IoT devices,
/// and CLI tools where the user authenticates on a separate device.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeviceCodeOAuthFlow {
    /// The device authorization endpoint URL.
    #[prost(string, tag="1")]
    pub device_authorization_url: ::prost::alloc::string::String,
    /// The token URL to be used for this flow.
    #[prost(string, tag="2")]
    pub token_url: ::prost::alloc::string::String,
    /// The URL to be used for obtaining refresh tokens.
    #[prost(string, tag="3")]
    pub refresh_url: ::prost::alloc::string::String,
    /// The available scopes for the OAuth2 security scheme.
    #[prost(map="string, string", tag="4")]
    pub scopes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
}
/// Represents a request for the `SendMessage` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SendMessageRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The message to send to the agent.
    #[prost(message, optional, tag="2")]
    pub message: ::core::option::Option<Message>,
    /// Configuration for the send request.
    #[prost(message, optional, tag="3")]
    pub configuration: ::core::option::Option<SendMessageConfiguration>,
    /// A flexible key-value map for passing additional context or parameters.
    #[prost(message, optional, tag="4")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
}
/// Represents a request for the `GetTask` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTaskRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The resource ID of the task to retrieve.
    #[prost(string, tag="2")]
    pub id: ::prost::alloc::string::String,
    /// The maximum number of most recent messages from the task's history to retrieve. An
    /// unset value means the client does not impose any limit. A value of zero is
    /// a request to not include any messages. The server MUST NOT return more
    /// messages than the provided value, but MAY apply a lower limit.
    #[prost(int32, optional, tag="3")]
    pub history_length: ::core::option::Option<i32>,
}
/// Parameters for listing tasks with optional filtering criteria.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListTasksRequest {
    /// Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// Filter tasks by context ID to get tasks from a specific conversation or session.
    #[prost(string, tag="2")]
    pub context_id: ::prost::alloc::string::String,
    /// Filter tasks by their current status state.
    #[prost(enumeration="TaskState", tag="3")]
    pub status: i32,
    /// The maximum number of tasks to return. The service may return fewer than this value.
    /// If unspecified, at most 50 tasks will be returned.
    /// The minimum value is 1.
    /// The maximum value is 100.
    #[prost(int32, optional, tag="4")]
    pub page_size: ::core::option::Option<i32>,
    /// A page token, received from a previous `ListTasks` call.
    /// `ListTasksResponse.next_page_token`.
    /// Provide this to retrieve the subsequent page.
    #[prost(string, tag="5")]
    pub page_token: ::prost::alloc::string::String,
    /// The maximum number of messages to include in each task's history.
    #[prost(int32, optional, tag="6")]
    pub history_length: ::core::option::Option<i32>,
    /// Filter tasks which have a status updated after the provided timestamp in ISO 8601 format (e.g., "2023-10-27T10:00:00Z").
    /// Only tasks with a status timestamp time greater than or equal to this value will be returned.
    #[prost(message, optional, tag="7")]
    pub status_timestamp_after: ::core::option::Option<::prost_types::Timestamp>,
    /// Whether to include artifacts in the returned tasks.
    /// Defaults to false to reduce payload size.
    #[prost(bool, optional, tag="8")]
    pub include_artifacts: ::core::option::Option<bool>,
}
/// Result object for `ListTasks` method containing an array of tasks and pagination information.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListTasksResponse {
    /// Array of tasks matching the specified criteria.
    #[prost(message, repeated, tag="1")]
    pub tasks: ::prost::alloc::vec::Vec<Task>,
    /// A token to retrieve the next page of results, or empty if there are no more results in the list.
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
    /// The page size used for this response.
    #[prost(int32, tag="3")]
    pub page_size: i32,
    /// Total number of tasks available (before pagination).
    #[prost(int32, tag="4")]
    pub total_size: i32,
}
/// Represents a request for the `CancelTask` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CancelTaskRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The resource ID of the task to cancel.
    #[prost(string, tag="2")]
    pub id: ::prost::alloc::string::String,
    /// A flexible key-value map for passing additional context or parameters.
    #[prost(message, optional, tag="3")]
    pub metadata: ::core::option::Option<::prost_types::Struct>,
}
/// Represents a request for the `GetTaskPushNotificationConfig` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTaskPushNotificationConfigRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The parent task resource ID.
    #[prost(string, tag="2")]
    pub task_id: ::prost::alloc::string::String,
    /// The resource ID of the configuration to retrieve.
    #[prost(string, tag="3")]
    pub id: ::prost::alloc::string::String,
}
/// Represents a request for the `DeleteTaskPushNotificationConfig` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteTaskPushNotificationConfigRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The parent task resource ID.
    #[prost(string, tag="2")]
    pub task_id: ::prost::alloc::string::String,
    /// The resource ID of the configuration to delete.
    #[prost(string, tag="3")]
    pub id: ::prost::alloc::string::String,
}
/// Represents a request for the `SubscribeToTask` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SubscribeToTaskRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
    /// The resource ID of the task to subscribe to.
    #[prost(string, tag="2")]
    pub id: ::prost::alloc::string::String,
}
/// Represents a request for the `ListTaskPushNotificationConfigs` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListTaskPushNotificationConfigsRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="4")]
    pub tenant: ::prost::alloc::string::String,
    /// The parent task resource ID.
    #[prost(string, tag="1")]
    pub task_id: ::prost::alloc::string::String,
    /// The maximum number of configurations to return.
    #[prost(int32, tag="2")]
    pub page_size: i32,
    /// A page token received from a previous `ListTaskPushNotificationConfigsRequest` call.
    #[prost(string, tag="3")]
    pub page_token: ::prost::alloc::string::String,
}
/// Represents a request for the `GetExtendedAgentCard` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetExtendedAgentCardRequest {
    /// Optional. Tenant ID, provided as a path parameter.
    #[prost(string, tag="1")]
    pub tenant: ::prost::alloc::string::String,
}
/// Represents the response for the `SendMessage` method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SendMessageResponse {
    /// The payload of the response.
    #[prost(oneof="send_message_response::Payload", tags="1, 2")]
    pub payload: ::core::option::Option<send_message_response::Payload>,
}
/// Nested message and enum types in `SendMessageResponse`.
pub mod send_message_response {
    /// The payload of the response.
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Payload {
        /// The task created or updated by the message.
        #[prost(message, tag="1")]
        Task(super::Task),
        /// A message from the agent.
        #[prost(message, tag="2")]
        Message(super::Message),
    }
}
/// A wrapper object used in streaming operations to encapsulate different types of response data.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StreamResponse {
    /// The payload of the stream response.
    #[prost(oneof="stream_response::Payload", tags="1, 2, 3, 4")]
    pub payload: ::core::option::Option<stream_response::Payload>,
}
/// Nested message and enum types in `StreamResponse`.
pub mod stream_response {
    /// The payload of the stream response.
    #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Payload {
        /// A Task object containing the current state of the task.
        #[prost(message, tag="1")]
        Task(super::Task),
        /// A Message object containing a message from the agent.
        #[prost(message, tag="2")]
        Message(super::Message),
        /// An event indicating a task status update.
        #[prost(message, tag="3")]
        StatusUpdate(super::TaskStatusUpdateEvent),
        /// An event indicating a task artifact update.
        #[prost(message, tag="4")]
        ArtifactUpdate(super::TaskArtifactUpdateEvent),
    }
}
/// Represents a successful response for the `ListTaskPushNotificationConfigs`
/// method.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListTaskPushNotificationConfigsResponse {
    /// The list of push notification configurations.
    #[prost(message, repeated, tag="1")]
    pub configs: ::prost::alloc::vec::Vec<TaskPushNotificationConfig>,
    /// A token to retrieve the next page of results, or empty if there are no more results in the list.
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// Defines the possible lifecycle states of a `Task`.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum TaskState {
    /// The task is in an unknown or indeterminate state.
    Unspecified = 0,
    /// Indicates that a task has been successfully submitted and acknowledged.
    Submitted = 1,
    /// Indicates that a task is actively being processed by the agent.
    Working = 2,
    /// Indicates that a task has finished successfully. This is a terminal state.
    Completed = 3,
    /// Indicates that a task has finished with an error. This is a terminal state.
    Failed = 4,
    /// Indicates that a task was canceled before completion. This is a terminal state.
    Canceled = 5,
    /// Indicates that the agent requires additional user input to proceed. This is an interrupted state.
    InputRequired = 6,
    /// Indicates that the agent has decided to not perform the task.
    /// This may be done during initial task creation or later once an agent
    /// has determined it can't or won't proceed. This is a terminal state.
    Rejected = 7,
    /// Indicates that authentication is required to proceed. This is an interrupted state.
    AuthRequired = 8,
}
impl TaskState {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            TaskState::Unspecified => "TASK_STATE_UNSPECIFIED",
            TaskState::Submitted => "TASK_STATE_SUBMITTED",
            TaskState::Working => "TASK_STATE_WORKING",
            TaskState::Completed => "TASK_STATE_COMPLETED",
            TaskState::Failed => "TASK_STATE_FAILED",
            TaskState::Canceled => "TASK_STATE_CANCELED",
            TaskState::InputRequired => "TASK_STATE_INPUT_REQUIRED",
            TaskState::Rejected => "TASK_STATE_REJECTED",
            TaskState::AuthRequired => "TASK_STATE_AUTH_REQUIRED",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "TASK_STATE_UNSPECIFIED" => Some(Self::Unspecified),
            "TASK_STATE_SUBMITTED" => Some(Self::Submitted),
            "TASK_STATE_WORKING" => Some(Self::Working),
            "TASK_STATE_COMPLETED" => Some(Self::Completed),
            "TASK_STATE_FAILED" => Some(Self::Failed),
            "TASK_STATE_CANCELED" => Some(Self::Canceled),
            "TASK_STATE_INPUT_REQUIRED" => Some(Self::InputRequired),
            "TASK_STATE_REJECTED" => Some(Self::Rejected),
            "TASK_STATE_AUTH_REQUIRED" => Some(Self::AuthRequired),
            _ => None,
        }
    }
}
/// Defines the sender of a message in A2A protocol communication.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum Role {
    /// The role is unspecified.
    Unspecified = 0,
    /// The message is from the client to the server.
    User = 1,
    /// The message is from the server to the client.
    Agent = 2,
}
impl Role {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Role::Unspecified => "ROLE_UNSPECIFIED",
            Role::User => "ROLE_USER",
            Role::Agent => "ROLE_AGENT",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "ROLE_UNSPECIFIED" => Some(Self::Unspecified),
            "ROLE_USER" => Some(Self::User),
            "ROLE_AGENT" => Some(Self::Agent),
            _ => None,
        }
    }
}
include!("lf.a2a.v1.tonic.rs");
// @@protoc_insertion_point(module)