content: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // NO CHECKED-IN PROTOBUF GENCODE
  // source: a2a.proto
  // Protobuf Java Version: 4.31.1
  
  package io.a2a.grpc;
  
  /**
   * <pre>
   * AgentCard conveys key information:
   * - Overall details (version, name, description, uses)
   * - Skills; a set of actions/solutions the agent can perform
   * - Default modalities/content types supported by the agent.
   * - Authentication requirements
   * Next ID: 18
   * </pre>
   *
   * Protobuf type {@code a2a.v1.AgentCard}
   */
  @com.google.protobuf.Generated
  public final class AgentCard extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:a2a.v1.AgentCard)
      AgentCardOrBuilder {
  private static final long serialVersionUID = 0L;
    static {
      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
        /* major= */ 4,
        /* minor= */ 31,
        /* patch= */ 1,
        /* suffix= */ "",
        AgentCard.class.getName());
    }
    // Use AgentCard.newBuilder() to construct.
    private AgentCard(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
    }
    private AgentCard() {
      protocolVersion_ = "";
      name_ = "";
      description_ = "";
      url_ = "";
      preferredTransport_ = "";
      additionalInterfaces_ = java.util.Collections.emptyList();
      version_ = "";
      documentationUrl_ = "";
      security_ = java.util.Collections.emptyList();
      defaultInputModes_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      defaultOutputModes_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      skills_ = java.util.Collections.emptyList();
      signatures_ = java.util.Collections.emptyList();
    }
  
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.a2a.grpc.A2A.internal_static_a2a_v1_AgentCard_descriptor;
    }
  
    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
        int number) {
      switch (number) {
        case 8:
          return internalGetSecuritySchemes();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.a2a.grpc.A2A.internal_static_a2a_v1_AgentCard_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.a2a.grpc.AgentCard.class, io.a2a.grpc.AgentCard.Builder.class);
    }
  
    private int bitField0_;
    public static final int PROTOCOL_VERSION_FIELD_NUMBER = 16;
    @SuppressWarnings("serial")
    private volatile java.lang.Object protocolVersion_ = "";
    /**
     * <pre>
     * The version of the A2A protocol this agent supports.
     * </pre>
     *
     * <code>string protocol_version = 16;</code>
     * @return The protocolVersion.
     */
    @java.lang.Override
    public java.lang.String getProtocolVersion() {
      java.lang.Object ref = protocolVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        protocolVersion_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The version of the A2A protocol this agent supports.
     * </pre>
     *
     * <code>string protocol_version = 16;</code>
     * @return The bytes for protocolVersion.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getProtocolVersionBytes() {
      java.lang.Object ref = protocolVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        protocolVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int NAME_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object name_ = "";
    /**
     * <pre>
     * A human readable name for the agent.
     * Example: "Recipe Agent"
     * </pre>
     *
     * <code>string name = 1;</code>
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * A human readable name for the agent.
     * Example: "Recipe Agent"
     * </pre>
     *
     * <code>string name = 1;</code>
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int DESCRIPTION_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private volatile java.lang.Object description_ = "";
    /**
     * <pre>
     * A description of the agent's domain of action/solution space.
     * Example: "Agent that helps users with recipes and cooking."
     * </pre>
     *
     * <code>string description = 2;</code>
     * @return The description.
     */
    @java.lang.Override
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        description_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * A description of the agent's domain of action/solution space.
     * Example: "Agent that helps users with recipes and cooking."
     * </pre>
     *
     * <code>string description = 2;</code>
     * @return The bytes for description.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int URL_FIELD_NUMBER = 3;
    @SuppressWarnings("serial")
    private volatile java.lang.Object url_ = "";
    /**
     * <pre>
     * A URL to the address the agent is hosted at. This represents the
     * preferred endpoint as declared by the agent.
     * </pre>
     *
     * <code>string url = 3;</code>
     * @return The url.
     */
    @java.lang.Override
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        url_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * A URL to the address the agent is hosted at. This represents the
     * preferred endpoint as declared by the agent.
     * </pre>
     *
     * <code>string url = 3;</code>
     * @return The bytes for url.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int PREFERRED_TRANSPORT_FIELD_NUMBER = 14;
    @SuppressWarnings("serial")
    private volatile java.lang.Object preferredTransport_ = "";
    /**
     * <pre>
     * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
     * </pre>
     *
     * <code>string preferred_transport = 14;</code>
     * @return The preferredTransport.
     */
    @java.lang.Override
    public java.lang.String getPreferredTransport() {
      java.lang.Object ref = preferredTransport_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        preferredTransport_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
     * </pre>
     *
     * <code>string preferred_transport = 14;</code>
     * @return The bytes for preferredTransport.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPreferredTransportBytes() {
      java.lang.Object ref = preferredTransport_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        preferredTransport_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int ADDITIONAL_INTERFACES_FIELD_NUMBER = 15;
    @SuppressWarnings("serial")
    private java.util.List<io.a2a.grpc.AgentInterface> additionalInterfaces_;
    /**
     * <pre>
     * Announcement of additional supported transports. Client can use any of
     * the supported transports.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
     */
    @java.lang.Override
    public java.util.List<io.a2a.grpc.AgentInterface> getAdditionalInterfacesList() {
      return additionalInterfaces_;
    }
    /**
     * <pre>
     * Announcement of additional supported transports. Client can use any of
     * the supported transports.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
     */
    @java.lang.Override
    public java.util.List<? extends io.a2a.grpc.AgentInterfaceOrBuilder> 
        getAdditionalInterfacesOrBuilderList() {
      return additionalInterfaces_;
    }
    /**
     * <pre>
     * Announcement of additional supported transports. Client can use any of
     * the supported transports.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
     */
    @java.lang.Override
    public int getAdditionalInterfacesCount() {
      return additionalInterfaces_.size();
    }
    /**
     * <pre>
     * Announcement of additional supported transports. Client can use any of
     * the supported transports.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentInterface getAdditionalInterfaces(int index) {
      return additionalInterfaces_.get(index);
    }
    /**
     * <pre>
     * Announcement of additional supported transports. Client can use any of
     * the supported transports.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentInterfaceOrBuilder getAdditionalInterfacesOrBuilder(
        int index) {
      return additionalInterfaces_.get(index);
    }
  
    public static final int PROVIDER_FIELD_NUMBER = 4;
    private io.a2a.grpc.AgentProvider provider_;
    /**
     * <pre>
     * The service provider of the agent.
     * </pre>
     *
     * <code>.a2a.v1.AgentProvider provider = 4;</code>
     * @return Whether the provider field is set.
     */
    @java.lang.Override
    public boolean hasProvider() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * The service provider of the agent.
     * </pre>
     *
     * <code>.a2a.v1.AgentProvider provider = 4;</code>
     * @return The provider.
     */
    @java.lang.Override
    public io.a2a.grpc.AgentProvider getProvider() {
      return provider_ == null ? io.a2a.grpc.AgentProvider.getDefaultInstance() : provider_;
    }
    /**
     * <pre>
     * The service provider of the agent.
     * </pre>
     *
     * <code>.a2a.v1.AgentProvider provider = 4;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentProviderOrBuilder getProviderOrBuilder() {
      return provider_ == null ? io.a2a.grpc.AgentProvider.getDefaultInstance() : provider_;
    }
  
    public static final int VERSION_FIELD_NUMBER = 5;
    @SuppressWarnings("serial")
    private volatile java.lang.Object version_ = "";
    /**
     * <pre>
     * The version of the agent.
     * Example: "1.0.0"
     * </pre>
     *
     * <code>string version = 5;</code>
     * @return The version.
     */
    @java.lang.Override
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        version_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The version of the agent.
     * Example: "1.0.0"
     * </pre>
     *
     * <code>string version = 5;</code>
     * @return The bytes for version.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int DOCUMENTATION_URL_FIELD_NUMBER = 6;
    @SuppressWarnings("serial")
    private volatile java.lang.Object documentationUrl_ = "";
    /**
     * <pre>
     * A url to provide additional documentation about the agent.
     * </pre>
     *
     * <code>string documentation_url = 6;</code>
     * @return The documentationUrl.
     */
    @java.lang.Override
    public java.lang.String getDocumentationUrl() {
      java.lang.Object ref = documentationUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        documentationUrl_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * A url to provide additional documentation about the agent.
     * </pre>
     *
     * <code>string documentation_url = 6;</code>
     * @return The bytes for documentationUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDocumentationUrlBytes() {
      java.lang.Object ref = documentationUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        documentationUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
  
    public static final int CAPABILITIES_FIELD_NUMBER = 7;
    private io.a2a.grpc.AgentCapabilities capabilities_;
    /**
     * <pre>
     * A2A Capability set supported by the agent.
     * </pre>
     *
     * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
     * @return Whether the capabilities field is set.
     */
    @java.lang.Override
    public boolean hasCapabilities() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * A2A Capability set supported by the agent.
     * </pre>
     *
     * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
     * @return The capabilities.
     */
    @java.lang.Override
    public io.a2a.grpc.AgentCapabilities getCapabilities() {
      return capabilities_ == null ? io.a2a.grpc.AgentCapabilities.getDefaultInstance() : capabilities_;
    }
    /**
     * <pre>
     * A2A Capability set supported by the agent.
     * </pre>
     *
     * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentCapabilitiesOrBuilder getCapabilitiesOrBuilder() {
      return capabilities_ == null ? io.a2a.grpc.AgentCapabilities.getDefaultInstance() : capabilities_;
    }
  
    public static final int SECURITY_SCHEMES_FIELD_NUMBER = 8;
    private static final class SecuritySchemesDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, io.a2a.grpc.SecurityScheme> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, io.a2a.grpc.SecurityScheme>newDefaultInstance(
                  io.a2a.grpc.A2A.internal_static_a2a_v1_AgentCard_SecuritySchemesEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  io.a2a.grpc.SecurityScheme.getDefaultInstance());
    }
    @SuppressWarnings("serial")
    private com.google.protobuf.MapField<
        java.lang.String, io.a2a.grpc.SecurityScheme> securitySchemes_;
    private com.google.protobuf.MapField<java.lang.String, io.a2a.grpc.SecurityScheme>
    internalGetSecuritySchemes() {
      if (securitySchemes_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            SecuritySchemesDefaultEntryHolder.defaultEntry);
      }
      return securitySchemes_;
    }
    public int getSecuritySchemesCount() {
      return internalGetSecuritySchemes().getMap().size();
    }
    /**
     * <pre>
     * The security scheme details used for authenticating with this agent.
     * </pre>
     *
     * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
     */
    @java.lang.Override
    public boolean containsSecuritySchemes(
        java.lang.String key) {
      if (key == null) { throw new NullPointerException("map key"); }
      return internalGetSecuritySchemes().getMap().containsKey(key);
    }
    /**
     * Use {@link #getSecuritySchemesMap()} instead.
     */
    @java.lang.Override
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> getSecuritySchemes() {
      return getSecuritySchemesMap();
    }
    /**
     * <pre>
     * The security scheme details used for authenticating with this agent.
     * </pre>
     *
     * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
     */
    @java.lang.Override
    public java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> getSecuritySchemesMap() {
      return internalGetSecuritySchemes().getMap();
    }
    /**
     * <pre>
     * The security scheme details used for authenticating with this agent.
     * </pre>
     *
     * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
     */
    @java.lang.Override
    public /* nullable */
  io.a2a.grpc.SecurityScheme getSecuritySchemesOrDefault(
        java.lang.String key,
        /* nullable */
  io.a2a.grpc.SecurityScheme defaultValue) {
      if (key == null) { throw new NullPointerException("map key"); }
      java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> map =
          internalGetSecuritySchemes().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * The security scheme details used for authenticating with this agent.
     * </pre>
     *
     * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.SecurityScheme getSecuritySchemesOrThrow(
        java.lang.String key) {
      if (key == null) { throw new NullPointerException("map key"); }
      java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> map =
          internalGetSecuritySchemes().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }
  
    public static final int SECURITY_FIELD_NUMBER = 9;
    @SuppressWarnings("serial")
    private java.util.List<io.a2a.grpc.Security> security_;
    /**
     * <pre>
     * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
     * Security requirements for contacting the agent.
     * This list can be seen as an OR of ANDs. Each object in the list describes
     * one possible set of security requirements that must be present on a
     * request. This allows specifying, for example, "callers must either use
     * OAuth OR an API Key AND mTLS."
     * Example:
     * security {
     * schemes { key: "oauth" value { list: ["read"] } }
     * }
     * security {
     * schemes { key: "api-key" }
     * schemes { key: "mtls" }
     * }
     * </pre>
     *
     * <code>repeated .a2a.v1.Security security = 9;</code>
     */
    @java.lang.Override
    public java.util.List<io.a2a.grpc.Security> getSecurityList() {
      return security_;
    }
    /**
     * <pre>
     * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
     * Security requirements for contacting the agent.
     * This list can be seen as an OR of ANDs. Each object in the list describes
     * one possible set of security requirements that must be present on a
     * request. This allows specifying, for example, "callers must either use
     * OAuth OR an API Key AND mTLS."
     * Example:
     * security {
     * schemes { key: "oauth" value { list: ["read"] } }
     * }
     * security {
     * schemes { key: "api-key" }
     * schemes { key: "mtls" }
     * }
     * </pre>
     *
     * <code>repeated .a2a.v1.Security security = 9;</code>
     */
    @java.lang.Override
    public java.util.List<? extends io.a2a.grpc.SecurityOrBuilder> 
        getSecurityOrBuilderList() {
      return security_;
    }
    /**
     * <pre>
     * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
     * Security requirements for contacting the agent.
     * This list can be seen as an OR of ANDs. Each object in the list describes
     * one possible set of security requirements that must be present on a
     * request. This allows specifying, for example, "callers must either use
     * OAuth OR an API Key AND mTLS."
     * Example:
     * security {
     * schemes { key: "oauth" value { list: ["read"] } }
     * }
     * security {
     * schemes { key: "api-key" }
     * schemes { key: "mtls" }
     * }
     * </pre>
     *
     * <code>repeated .a2a.v1.Security security = 9;</code>
     */
    @java.lang.Override
    public int getSecurityCount() {
      return security_.size();
    }
    /**
     * <pre>
     * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
     * Security requirements for contacting the agent.
     * This list can be seen as an OR of ANDs. Each object in the list describes
     * one possible set of security requirements that must be present on a
     * request. This allows specifying, for example, "callers must either use
     * OAuth OR an API Key AND mTLS."
     * Example:
     * security {
     * schemes { key: "oauth" value { list: ["read"] } }
     * }
     * security {
     * schemes { key: "api-key" }
     * schemes { key: "mtls" }
     * }
     * </pre>
     *
     * <code>repeated .a2a.v1.Security security = 9;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.Security getSecurity(int index) {
      return security_.get(index);
    }
    /**
     * <pre>
     * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
     * Security requirements for contacting the agent.
     * This list can be seen as an OR of ANDs. Each object in the list describes
     * one possible set of security requirements that must be present on a
     * request. This allows specifying, for example, "callers must either use
     * OAuth OR an API Key AND mTLS."
     * Example:
     * security {
     * schemes { key: "oauth" value { list: ["read"] } }
     * }
     * security {
     * schemes { key: "api-key" }
     * schemes { key: "mtls" }
     * }
     * </pre>
     *
     * <code>repeated .a2a.v1.Security security = 9;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.SecurityOrBuilder getSecurityOrBuilder(
        int index) {
      return security_.get(index);
    }
  
    public static final int DEFAULT_INPUT_MODES_FIELD_NUMBER = 10;
    @SuppressWarnings("serial")
    private com.google.protobuf.LazyStringArrayList defaultInputModes_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
    /**
     * <pre>
     * 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 mime types.
     * </pre>
     *
     * <code>repeated string default_input_modes = 10;</code>
     * @return A list containing the defaultInputModes.
     */
    public com.google.protobuf.ProtocolStringList
        getDefaultInputModesList() {
      return defaultInputModes_;
    }
    /**
     * <pre>
     * 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 mime types.
     * </pre>
     *
     * <code>repeated string default_input_modes = 10;</code>
     * @return The count of defaultInputModes.
     */
    public int getDefaultInputModesCount() {
      return defaultInputModes_.size();
    }
    /**
     * <pre>
     * 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 mime types.
     * </pre>
     *
     * <code>repeated string default_input_modes = 10;</code>
     * @param index The index of the element to return.
     * @return The defaultInputModes at the given index.
     */
    public java.lang.String getDefaultInputModes(int index) {
      return defaultInputModes_.get(index);
    }
    /**
     * <pre>
     * 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 mime types.
     * </pre>
     *
     * <code>repeated string default_input_modes = 10;</code>
     * @param index The index of the value to return.
     * @return The bytes of the defaultInputModes at the given index.
     */
    public com.google.protobuf.ByteString
        getDefaultInputModesBytes(int index) {
      return defaultInputModes_.getByteString(index);
    }
  
    public static final int DEFAULT_OUTPUT_MODES_FIELD_NUMBER = 11;
    @SuppressWarnings("serial")
    private com.google.protobuf.LazyStringArrayList defaultOutputModes_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
    /**
     * <pre>
     * The mime types supported as outputs from this agent.
     * </pre>
     *
     * <code>repeated string default_output_modes = 11;</code>
     * @return A list containing the defaultOutputModes.
     */
    public com.google.protobuf.ProtocolStringList
        getDefaultOutputModesList() {
      return defaultOutputModes_;
    }
    /**
     * <pre>
     * The mime types supported as outputs from this agent.
     * </pre>
     *
     * <code>repeated string default_output_modes = 11;</code>
     * @return The count of defaultOutputModes.
     */
    public int getDefaultOutputModesCount() {
      return defaultOutputModes_.size();
    }
    /**
     * <pre>
     * The mime types supported as outputs from this agent.
     * </pre>
     *
     * <code>repeated string default_output_modes = 11;</code>
     * @param index The index of the element to return.
     * @return The defaultOutputModes at the given index.
     */
    public java.lang.String getDefaultOutputModes(int index) {
      return defaultOutputModes_.get(index);
    }
    /**
     * <pre>
     * The mime types supported as outputs from this agent.
     * </pre>
     *
     * <code>repeated string default_output_modes = 11;</code>
     * @param index The index of the value to return.
     * @return The bytes of the defaultOutputModes at the given index.
     */
    public com.google.protobuf.ByteString
        getDefaultOutputModesBytes(int index) {
      return defaultOutputModes_.getByteString(index);
    }
  
    public static final int SKILLS_FIELD_NUMBER = 12;
    @SuppressWarnings("serial")
    private java.util.List<io.a2a.grpc.AgentSkill> skills_;
    /**
     * <pre>
     * Skills represent a unit of ability an agent can perform. This may
     * somewhat abstract but represents a more focused set of actions that the
     * agent is highly likely to succeed at.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
     */
    @java.lang.Override
    public java.util.List<io.a2a.grpc.AgentSkill> getSkillsList() {
      return skills_;
    }
    /**
     * <pre>
     * Skills represent a unit of ability an agent can perform. This may
     * somewhat abstract but represents a more focused set of actions that the
     * agent is highly likely to succeed at.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
     */
    @java.lang.Override
    public java.util.List<? extends io.a2a.grpc.AgentSkillOrBuilder> 
        getSkillsOrBuilderList() {
      return skills_;
    }
    /**
     * <pre>
     * Skills represent a unit of ability an agent can perform. This may
     * somewhat abstract but represents a more focused set of actions that the
     * agent is highly likely to succeed at.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
     */
    @java.lang.Override
    public int getSkillsCount() {
      return skills_.size();
    }
    /**
     * <pre>
     * Skills represent a unit of ability an agent can perform. This may
     * somewhat abstract but represents a more focused set of actions that the
     * agent is highly likely to succeed at.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentSkill getSkills(int index) {
      return skills_.get(index);
    }
    /**
     * <pre>
     * Skills represent a unit of ability an agent can perform. This may
     * somewhat abstract but represents a more focused set of actions that the
     * agent is highly likely to succeed at.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentSkillOrBuilder getSkillsOrBuilder(
        int index) {
      return skills_.get(index);
    }
  
    public static final int SUPPORTS_AUTHENTICATED_EXTENDED_CARD_FIELD_NUMBER = 13;
    private boolean supportsAuthenticatedExtendedCard_ = false;
    /**
     * <pre>
     * Whether the agent supports providing an extended agent card when
     * the user is authenticated, i.e. is the card from .well-known
     * different than the card from GetAgentCard.
     * </pre>
     *
     * <code>bool supports_authenticated_extended_card = 13;</code>
     * @return The supportsAuthenticatedExtendedCard.
     */
    @java.lang.Override
    public boolean getSupportsAuthenticatedExtendedCard() {
      return supportsAuthenticatedExtendedCard_;
    }
  
    public static final int SIGNATURES_FIELD_NUMBER = 17;
    @SuppressWarnings("serial")
    private java.util.List<io.a2a.grpc.AgentCardSignature> signatures_;
    /**
     * <pre>
     * JSON Web Signatures computed for this AgentCard.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
     */
    @java.lang.Override
    public java.util.List<io.a2a.grpc.AgentCardSignature> getSignaturesList() {
      return signatures_;
    }
    /**
     * <pre>
     * JSON Web Signatures computed for this AgentCard.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
     */
    @java.lang.Override
    public java.util.List<? extends io.a2a.grpc.AgentCardSignatureOrBuilder> 
        getSignaturesOrBuilderList() {
      return signatures_;
    }
    /**
     * <pre>
     * JSON Web Signatures computed for this AgentCard.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
     */
    @java.lang.Override
    public int getSignaturesCount() {
      return signatures_.size();
    }
    /**
     * <pre>
     * JSON Web Signatures computed for this AgentCard.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentCardSignature getSignatures(int index) {
      return signatures_.get(index);
    }
    /**
     * <pre>
     * JSON Web Signatures computed for this AgentCard.
     * </pre>
     *
     * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
     */
    @java.lang.Override
    public io.a2a.grpc.AgentCardSignatureOrBuilder getSignaturesOrBuilder(
        int index) {
      return signatures_.get(index);
    }
  
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
  
      memoizedIsInitialized = 1;
      return true;
    }
  
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 1, name_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(description_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 2, description_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(url_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 3, url_);
      }
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(4, getProvider());
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(version_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 5, version_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(documentationUrl_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 6, documentationUrl_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(7, getCapabilities());
      }
      com.google.protobuf.GeneratedMessage
        .serializeStringMapTo(
          output,
          internalGetSecuritySchemes(),
          SecuritySchemesDefaultEntryHolder.defaultEntry,
          8);
      for (int i = 0; i < security_.size(); i++) {
        output.writeMessage(9, security_.get(i));
      }
      for (int i = 0; i < defaultInputModes_.size(); i++) {
        com.google.protobuf.GeneratedMessage.writeString(output, 10, defaultInputModes_.getRaw(i));
      }
      for (int i = 0; i < defaultOutputModes_.size(); i++) {
        com.google.protobuf.GeneratedMessage.writeString(output, 11, defaultOutputModes_.getRaw(i));
      }
      for (int i = 0; i < skills_.size(); i++) {
        output.writeMessage(12, skills_.get(i));
      }
      if (supportsAuthenticatedExtendedCard_ != false) {
        output.writeBool(13, supportsAuthenticatedExtendedCard_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(preferredTransport_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 14, preferredTransport_);
      }
      for (int i = 0; i < additionalInterfaces_.size(); i++) {
        output.writeMessage(15, additionalInterfaces_.get(i));
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(protocolVersion_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 16, protocolVersion_);
      }
      for (int i = 0; i < signatures_.size(); i++) {
        output.writeMessage(17, signatures_.get(i));
      }
      getUnknownFields().writeTo(output);
    }
  
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
  
      size = 0;
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(description_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(2, description_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(url_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(3, url_);
      }
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getProvider());
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(version_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(5, version_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(documentationUrl_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(6, documentationUrl_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getCapabilities());
      }
      for (java.util.Map.Entry<java.lang.String, io.a2a.grpc.SecurityScheme> entry
           : internalGetSecuritySchemes().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, io.a2a.grpc.SecurityScheme>
        securitySchemes__ = SecuritySchemesDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(8, securitySchemes__);
      }
      for (int i = 0; i < security_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, security_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < defaultInputModes_.size(); i++) {
          dataSize += computeStringSizeNoTag(defaultInputModes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getDefaultInputModesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < defaultOutputModes_.size(); i++) {
          dataSize += computeStringSizeNoTag(defaultOutputModes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getDefaultOutputModesList().size();
      }
      for (int i = 0; i < skills_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, skills_.get(i));
      }
      if (supportsAuthenticatedExtendedCard_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, supportsAuthenticatedExtendedCard_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(preferredTransport_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(14, preferredTransport_);
      }
      for (int i = 0; i < additionalInterfaces_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, additionalInterfaces_.get(i));
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(protocolVersion_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(16, protocolVersion_);
      }
      for (int i = 0; i < signatures_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, signatures_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }
  
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.a2a.grpc.AgentCard)) {
        return super.equals(obj);
      }
      io.a2a.grpc.AgentCard other = (io.a2a.grpc.AgentCard) obj;
  
      if (!getProtocolVersion()
          .equals(other.getProtocolVersion())) return false;
      if (!getName()
          .equals(other.getName())) return false;
      if (!getDescription()
          .equals(other.getDescription())) return false;
      if (!getUrl()
          .equals(other.getUrl())) return false;
      if (!getPreferredTransport()
          .equals(other.getPreferredTransport())) return false;
      if (!getAdditionalInterfacesList()
          .equals(other.getAdditionalInterfacesList())) return false;
      if (hasProvider() != other.hasProvider()) return false;
      if (hasProvider()) {
        if (!getProvider()
            .equals(other.getProvider())) return false;
      }
      if (!getVersion()
          .equals(other.getVersion())) return false;
      if (!getDocumentationUrl()
          .equals(other.getDocumentationUrl())) return false;
      if (hasCapabilities() != other.hasCapabilities()) return false;
      if (hasCapabilities()) {
        if (!getCapabilities()
            .equals(other.getCapabilities())) return false;
      }
      if (!internalGetSecuritySchemes().equals(
          other.internalGetSecuritySchemes())) return false;
      if (!getSecurityList()
          .equals(other.getSecurityList())) return false;
      if (!getDefaultInputModesList()
          .equals(other.getDefaultInputModesList())) return false;
      if (!getDefaultOutputModesList()
          .equals(other.getDefaultOutputModesList())) return false;
      if (!getSkillsList()
          .equals(other.getSkillsList())) return false;
      if (getSupportsAuthenticatedExtendedCard()
          != other.getSupportsAuthenticatedExtendedCard()) return false;
      if (!getSignaturesList()
          .equals(other.getSignaturesList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }
  
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + PROTOCOL_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + getProtocolVersion().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getDescription().hashCode();
      hash = (37 * hash) + URL_FIELD_NUMBER;
      hash = (53 * hash) + getUrl().hashCode();
      hash = (37 * hash) + PREFERRED_TRANSPORT_FIELD_NUMBER;
      hash = (53 * hash) + getPreferredTransport().hashCode();
      if (getAdditionalInterfacesCount() > 0) {
        hash = (37 * hash) + ADDITIONAL_INTERFACES_FIELD_NUMBER;
        hash = (53 * hash) + getAdditionalInterfacesList().hashCode();
      }
      if (hasProvider()) {
        hash = (37 * hash) + PROVIDER_FIELD_NUMBER;
        hash = (53 * hash) + getProvider().hashCode();
      }
      hash = (37 * hash) + VERSION_FIELD_NUMBER;
      hash = (53 * hash) + getVersion().hashCode();
      hash = (37 * hash) + DOCUMENTATION_URL_FIELD_NUMBER;
      hash = (53 * hash) + getDocumentationUrl().hashCode();
      if (hasCapabilities()) {
        hash = (37 * hash) + CAPABILITIES_FIELD_NUMBER;
        hash = (53 * hash) + getCapabilities().hashCode();
      }
      if (!internalGetSecuritySchemes().getMap().isEmpty()) {
        hash = (37 * hash) + SECURITY_SCHEMES_FIELD_NUMBER;
        hash = (53 * hash) + internalGetSecuritySchemes().hashCode();
      }
      if (getSecurityCount() > 0) {
        hash = (37 * hash) + SECURITY_FIELD_NUMBER;
        hash = (53 * hash) + getSecurityList().hashCode();
      }
      if (getDefaultInputModesCount() > 0) {
        hash = (37 * hash) + DEFAULT_INPUT_MODES_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultInputModesList().hashCode();
      }
      if (getDefaultOutputModesCount() > 0) {
        hash = (37 * hash) + DEFAULT_OUTPUT_MODES_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultOutputModesList().hashCode();
      }
      if (getSkillsCount() > 0) {
        hash = (37 * hash) + SKILLS_FIELD_NUMBER;
        hash = (53 * hash) + getSkillsList().hashCode();
      }
      hash = (37 * hash) + SUPPORTS_AUTHENTICATED_EXTENDED_CARD_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSupportsAuthenticatedExtendedCard());
      if (getSignaturesCount() > 0) {
        hash = (37 * hash) + SIGNATURES_FIELD_NUMBER;
        hash = (53 * hash) + getSignaturesList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }
  
    public static io.a2a.grpc.AgentCard parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.a2a.grpc.AgentCard parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.a2a.grpc.AgentCard parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
  
    public static io.a2a.grpc.AgentCard parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input);
    }
  
    public static io.a2a.grpc.AgentCard parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static io.a2a.grpc.AgentCard parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
  
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.a2a.grpc.AgentCard prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
  
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * AgentCard conveys key information:
     * - Overall details (version, name, description, uses)
     * - Skills; a set of actions/solutions the agent can perform
     * - Default modalities/content types supported by the agent.
     * - Authentication requirements
     * Next ID: 18
     * </pre>
     *
     * Protobuf type {@code a2a.v1.AgentCard}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:a2a.v1.AgentCard)
        io.a2a.grpc.AgentCardOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.a2a.grpc.A2A.internal_static_a2a_v1_AgentCard_descriptor;
      }
  
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
          int number) {
        switch (number) {
          case 8:
            return internalGetSecuritySchemes();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
          int number) {
        switch (number) {
          case 8:
            return internalGetMutableSecuritySchemes();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.a2a.grpc.A2A.internal_static_a2a_v1_AgentCard_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.a2a.grpc.AgentCard.class, io.a2a.grpc.AgentCard.Builder.class);
      }
  
      // Construct using io.a2a.grpc.AgentCard.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
  
      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage
                .alwaysUseFieldBuilders) {
          internalGetAdditionalInterfacesFieldBuilder();
          internalGetProviderFieldBuilder();
          internalGetCapabilitiesFieldBuilder();
          internalGetSecurityFieldBuilder();
          internalGetSkillsFieldBuilder();
          internalGetSignaturesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        protocolVersion_ = "";
        name_ = "";
        description_ = "";
        url_ = "";
        preferredTransport_ = "";
        if (additionalInterfacesBuilder_ == null) {
          additionalInterfaces_ = java.util.Collections.emptyList();
        } else {
          additionalInterfaces_ = null;
          additionalInterfacesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        provider_ = null;
        if (providerBuilder_ != null) {
          providerBuilder_.dispose();
          providerBuilder_ = null;
        }
        version_ = "";
        documentationUrl_ = "";
        capabilities_ = null;
        if (capabilitiesBuilder_ != null) {
          capabilitiesBuilder_.dispose();
          capabilitiesBuilder_ = null;
        }
        internalGetMutableSecuritySchemes().clear();
        if (securityBuilder_ == null) {
          security_ = java.util.Collections.emptyList();
        } else {
          security_ = null;
          securityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        defaultInputModes_ =
            com.google.protobuf.LazyStringArrayList.emptyList();
        defaultOutputModes_ =
            com.google.protobuf.LazyStringArrayList.emptyList();
        if (skillsBuilder_ == null) {
          skills_ = java.util.Collections.emptyList();
        } else {
          skills_ = null;
          skillsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        supportsAuthenticatedExtendedCard_ = false;
        if (signaturesBuilder_ == null) {
          signatures_ = java.util.Collections.emptyList();
        } else {
          signatures_ = null;
          signaturesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
  
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.a2a.grpc.A2A.internal_static_a2a_v1_AgentCard_descriptor;
      }
  
      @java.lang.Override
      public io.a2a.grpc.AgentCard getDefaultInstanceForType() {
        return io.a2a.grpc.AgentCard.getDefaultInstance();
      }
  
      @java.lang.Override
      public io.a2a.grpc.AgentCard build() {
        io.a2a.grpc.AgentCard result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
  
      @java.lang.Override
      public io.a2a.grpc.AgentCard buildPartial() {
        io.a2a.grpc.AgentCard result = new io.a2a.grpc.AgentCard(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }
  
      private void buildPartialRepeatedFields(io.a2a.grpc.AgentCard result) {
        if (additionalInterfacesBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0)) {
            additionalInterfaces_ = java.util.Collections.unmodifiableList(additionalInterfaces_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.additionalInterfaces_ = additionalInterfaces_;
        } else {
          result.additionalInterfaces_ = additionalInterfacesBuilder_.build();
        }
        if (securityBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0)) {
            security_ = java.util.Collections.unmodifiableList(security_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.security_ = security_;
        } else {
          result.security_ = securityBuilder_.build();
        }
        if (skillsBuilder_ == null) {
          if (((bitField0_ & 0x00004000) != 0)) {
            skills_ = java.util.Collections.unmodifiableList(skills_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.skills_ = skills_;
        } else {
          result.skills_ = skillsBuilder_.build();
        }
        if (signaturesBuilder_ == null) {
          if (((bitField0_ & 0x00010000) != 0)) {
            signatures_ = java.util.Collections.unmodifiableList(signatures_);
            bitField0_ = (bitField0_ & ~0x00010000);
          }
          result.signatures_ = signatures_;
        } else {
          result.signatures_ = signaturesBuilder_.build();
        }
      }
  
      private void buildPartial0(io.a2a.grpc.AgentCard result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.protocolVersion_ = protocolVersion_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.name_ = name_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.description_ = description_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.url_ = url_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.preferredTransport_ = preferredTransport_;
        }
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.provider_ = providerBuilder_ == null
              ? provider_
              : providerBuilder_.build();
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.version_ = version_;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.documentationUrl_ = documentationUrl_;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.capabilities_ = capabilitiesBuilder_ == null
              ? capabilities_
              : capabilitiesBuilder_.build();
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.securitySchemes_ = internalGetSecuritySchemes().build(SecuritySchemesDefaultEntryHolder.defaultEntry);
        }
        if (((from_bitField0_ & 0x00001000) != 0)) {
          defaultInputModes_.makeImmutable();
          result.defaultInputModes_ = defaultInputModes_;
        }
        if (((from_bitField0_ & 0x00002000) != 0)) {
          defaultOutputModes_.makeImmutable();
          result.defaultOutputModes_ = defaultOutputModes_;
        }
        if (((from_bitField0_ & 0x00008000) != 0)) {
          result.supportsAuthenticatedExtendedCard_ = supportsAuthenticatedExtendedCard_;
        }
        result.bitField0_ |= to_bitField0_;
      }
  
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.a2a.grpc.AgentCard) {
          return mergeFrom((io.a2a.grpc.AgentCard)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
  
      public Builder mergeFrom(io.a2a.grpc.AgentCard other) {
        if (other == io.a2a.grpc.AgentCard.getDefaultInstance()) return this;
        if (!other.getProtocolVersion().isEmpty()) {
          protocolVersion_ = other.protocolVersion_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (!other.getDescription().isEmpty()) {
          description_ = other.description_;
          bitField0_ |= 0x00000004;
          onChanged();
        }
        if (!other.getUrl().isEmpty()) {
          url_ = other.url_;
          bitField0_ |= 0x00000008;
          onChanged();
        }
        if (!other.getPreferredTransport().isEmpty()) {
          preferredTransport_ = other.preferredTransport_;
          bitField0_ |= 0x00000010;
          onChanged();
        }
        if (additionalInterfacesBuilder_ == null) {
          if (!other.additionalInterfaces_.isEmpty()) {
            if (additionalInterfaces_.isEmpty()) {
              additionalInterfaces_ = other.additionalInterfaces_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureAdditionalInterfacesIsMutable();
              additionalInterfaces_.addAll(other.additionalInterfaces_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalInterfaces_.isEmpty()) {
            if (additionalInterfacesBuilder_.isEmpty()) {
              additionalInterfacesBuilder_.dispose();
              additionalInterfacesBuilder_ = null;
              additionalInterfaces_ = other.additionalInterfaces_;
              bitField0_ = (bitField0_ & ~0x00000020);
              additionalInterfacesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   internalGetAdditionalInterfacesFieldBuilder() : null;
            } else {
              additionalInterfacesBuilder_.addAllMessages(other.additionalInterfaces_);
            }
          }
        }
        if (other.hasProvider()) {
          mergeProvider(other.getProvider());
        }
        if (!other.getVersion().isEmpty()) {
          version_ = other.version_;
          bitField0_ |= 0x00000080;
          onChanged();
        }
        if (!other.getDocumentationUrl().isEmpty()) {
          documentationUrl_ = other.documentationUrl_;
          bitField0_ |= 0x00000100;
          onChanged();
        }
        if (other.hasCapabilities()) {
          mergeCapabilities(other.getCapabilities());
        }
        internalGetMutableSecuritySchemes().mergeFrom(
            other.internalGetSecuritySchemes());
        bitField0_ |= 0x00000400;
        if (securityBuilder_ == null) {
          if (!other.security_.isEmpty()) {
            if (security_.isEmpty()) {
              security_ = other.security_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureSecurityIsMutable();
              security_.addAll(other.security_);
            }
            onChanged();
          }
        } else {
          if (!other.security_.isEmpty()) {
            if (securityBuilder_.isEmpty()) {
              securityBuilder_.dispose();
              securityBuilder_ = null;
              security_ = other.security_;
              bitField0_ = (bitField0_ & ~0x00000800);
              securityBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   internalGetSecurityFieldBuilder() : null;
            } else {
              securityBuilder_.addAllMessages(other.security_);
            }
          }
        }
        if (!other.defaultInputModes_.isEmpty()) {
          if (defaultInputModes_.isEmpty()) {
            defaultInputModes_ = other.defaultInputModes_;
            bitField0_ |= 0x00001000;
          } else {
            ensureDefaultInputModesIsMutable();
            defaultInputModes_.addAll(other.defaultInputModes_);
          }
          onChanged();
        }
        if (!other.defaultOutputModes_.isEmpty()) {
          if (defaultOutputModes_.isEmpty()) {
            defaultOutputModes_ = other.defaultOutputModes_;
            bitField0_ |= 0x00002000;
          } else {
            ensureDefaultOutputModesIsMutable();
            defaultOutputModes_.addAll(other.defaultOutputModes_);
          }
          onChanged();
        }
        if (skillsBuilder_ == null) {
          if (!other.skills_.isEmpty()) {
            if (skills_.isEmpty()) {
              skills_ = other.skills_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureSkillsIsMutable();
              skills_.addAll(other.skills_);
            }
            onChanged();
          }
        } else {
          if (!other.skills_.isEmpty()) {
            if (skillsBuilder_.isEmpty()) {
              skillsBuilder_.dispose();
              skillsBuilder_ = null;
              skills_ = other.skills_;
              bitField0_ = (bitField0_ & ~0x00004000);
              skillsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   internalGetSkillsFieldBuilder() : null;
            } else {
              skillsBuilder_.addAllMessages(other.skills_);
            }
          }
        }
        if (other.getSupportsAuthenticatedExtendedCard() != false) {
          setSupportsAuthenticatedExtendedCard(other.getSupportsAuthenticatedExtendedCard());
        }
        if (signaturesBuilder_ == null) {
          if (!other.signatures_.isEmpty()) {
            if (signatures_.isEmpty()) {
              signatures_ = other.signatures_;
              bitField0_ = (bitField0_ & ~0x00010000);
            } else {
              ensureSignaturesIsMutable();
              signatures_.addAll(other.signatures_);
            }
            onChanged();
          }
        } else {
          if (!other.signatures_.isEmpty()) {
            if (signaturesBuilder_.isEmpty()) {
              signaturesBuilder_.dispose();
              signaturesBuilder_ = null;
              signatures_ = other.signatures_;
              bitField0_ = (bitField0_ & ~0x00010000);
              signaturesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   internalGetSignaturesFieldBuilder() : null;
            } else {
              signaturesBuilder_.addAllMessages(other.signatures_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }
  
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
  
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                name_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000002;
                break;
              } // case 10
              case 18: {
                description_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000004;
                break;
              } // case 18
              case 26: {
                url_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000008;
                break;
              } // case 26
              case 34: {
                input.readMessage(
                    internalGetProviderFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000040;
                break;
              } // case 34
              case 42: {
                version_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000080;
                break;
              } // case 42
              case 50: {
                documentationUrl_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000100;
                break;
              } // case 50
              case 58: {
                input.readMessage(
                    internalGetCapabilitiesFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000200;
                break;
              } // case 58
              case 66: {
                com.google.protobuf.MapEntry<java.lang.String, io.a2a.grpc.SecurityScheme>
                securitySchemes__ = input.readMessage(
                    SecuritySchemesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
                internalGetMutableSecuritySchemes().ensureBuilderMap().put(
                    securitySchemes__.getKey(), securitySchemes__.getValue());
                bitField0_ |= 0x00000400;
                break;
              } // case 66
              case 74: {
                io.a2a.grpc.Security m =
                    input.readMessage(
                        io.a2a.grpc.Security.parser(),
                        extensionRegistry);
                if (securityBuilder_ == null) {
                  ensureSecurityIsMutable();
                  security_.add(m);
                } else {
                  securityBuilder_.addMessage(m);
                }
                break;
              } // case 74
              case 82: {
                java.lang.String s = input.readStringRequireUtf8();
                ensureDefaultInputModesIsMutable();
                defaultInputModes_.add(s);
                break;
              } // case 82
              case 90: {
                java.lang.String s = input.readStringRequireUtf8();
                ensureDefaultOutputModesIsMutable();
                defaultOutputModes_.add(s);
                break;
              } // case 90
              case 98: {
                io.a2a.grpc.AgentSkill m =
                    input.readMessage(
                        io.a2a.grpc.AgentSkill.parser(),
                        extensionRegistry);
                if (skillsBuilder_ == null) {
                  ensureSkillsIsMutable();
                  skills_.add(m);
                } else {
                  skillsBuilder_.addMessage(m);
                }
                break;
              } // case 98
              case 104: {
                supportsAuthenticatedExtendedCard_ = input.readBool();
                bitField0_ |= 0x00008000;
                break;
              } // case 104
              case 114: {
                preferredTransport_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000010;
                break;
              } // case 114
              case 122: {
                io.a2a.grpc.AgentInterface m =
                    input.readMessage(
                        io.a2a.grpc.AgentInterface.parser(),
                        extensionRegistry);
                if (additionalInterfacesBuilder_ == null) {
                  ensureAdditionalInterfacesIsMutable();
                  additionalInterfaces_.add(m);
                } else {
                  additionalInterfacesBuilder_.addMessage(m);
                }
                break;
              } // case 122
              case 130: {
                protocolVersion_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 130
              case 138: {
                io.a2a.grpc.AgentCardSignature m =
                    input.readMessage(
                        io.a2a.grpc.AgentCardSignature.parser(),
                        extensionRegistry);
                if (signaturesBuilder_ == null) {
                  ensureSignaturesIsMutable();
                  signatures_.add(m);
                } else {
                  signaturesBuilder_.addMessage(m);
                }
                break;
              } // case 138
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;
  
      private java.lang.Object protocolVersion_ = "";
      /**
       * <pre>
       * The version of the A2A protocol this agent supports.
       * </pre>
       *
       * <code>string protocol_version = 16;</code>
       * @return The protocolVersion.
       */
      public java.lang.String getProtocolVersion() {
        java.lang.Object ref = protocolVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          protocolVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The version of the A2A protocol this agent supports.
       * </pre>
       *
       * <code>string protocol_version = 16;</code>
       * @return The bytes for protocolVersion.
       */
      public com.google.protobuf.ByteString
          getProtocolVersionBytes() {
        java.lang.Object ref = protocolVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          protocolVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The version of the A2A protocol this agent supports.
       * </pre>
       *
       * <code>string protocol_version = 16;</code>
       * @param value The protocolVersion to set.
       * @return This builder for chaining.
       */
      public Builder setProtocolVersion(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        protocolVersion_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The version of the A2A protocol this agent supports.
       * </pre>
       *
       * <code>string protocol_version = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearProtocolVersion() {
        protocolVersion_ = getDefaultInstance().getProtocolVersion();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The version of the A2A protocol this agent supports.
       * </pre>
       *
       * <code>string protocol_version = 16;</code>
       * @param value The bytes for protocolVersion to set.
       * @return This builder for chaining.
       */
      public Builder setProtocolVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        protocolVersion_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
  
      private java.lang.Object name_ = "";
      /**
       * <pre>
       * A human readable name for the agent.
       * Example: "Recipe Agent"
       * </pre>
       *
       * <code>string name = 1;</code>
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * A human readable name for the agent.
       * Example: "Recipe Agent"
       * </pre>
       *
       * <code>string name = 1;</code>
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * A human readable name for the agent.
       * Example: "Recipe Agent"
       * </pre>
       *
       * <code>string name = 1;</code>
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        name_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A human readable name for the agent.
       * Example: "Recipe Agent"
       * </pre>
       *
       * <code>string name = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        name_ = getDefaultInstance().getName();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A human readable name for the agent.
       * Example: "Recipe Agent"
       * </pre>
       *
       * <code>string name = 1;</code>
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        name_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
  
      private java.lang.Object description_ = "";
      /**
       * <pre>
       * A description of the agent's domain of action/solution space.
       * Example: "Agent that helps users with recipes and cooking."
       * </pre>
       *
       * <code>string description = 2;</code>
       * @return The description.
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * A description of the agent's domain of action/solution space.
       * Example: "Agent that helps users with recipes and cooking."
       * </pre>
       *
       * <code>string description = 2;</code>
       * @return The bytes for description.
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * A description of the agent's domain of action/solution space.
       * Example: "Agent that helps users with recipes and cooking."
       * </pre>
       *
       * <code>string description = 2;</code>
       * @param value The description to set.
       * @return This builder for chaining.
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        description_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A description of the agent's domain of action/solution space.
       * Example: "Agent that helps users with recipes and cooking."
       * </pre>
       *
       * <code>string description = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescription() {
        description_ = getDefaultInstance().getDescription();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A description of the agent's domain of action/solution space.
       * Example: "Agent that helps users with recipes and cooking."
       * </pre>
       *
       * <code>string description = 2;</code>
       * @param value The bytes for description to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        description_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
  
      private java.lang.Object url_ = "";
      /**
       * <pre>
       * A URL to the address the agent is hosted at. This represents the
       * preferred endpoint as declared by the agent.
       * </pre>
       *
       * <code>string url = 3;</code>
       * @return The url.
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * A URL to the address the agent is hosted at. This represents the
       * preferred endpoint as declared by the agent.
       * </pre>
       *
       * <code>string url = 3;</code>
       * @return The bytes for url.
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * A URL to the address the agent is hosted at. This represents the
       * preferred endpoint as declared by the agent.
       * </pre>
       *
       * <code>string url = 3;</code>
       * @param value The url to set.
       * @return This builder for chaining.
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        url_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A URL to the address the agent is hosted at. This represents the
       * preferred endpoint as declared by the agent.
       * </pre>
       *
       * <code>string url = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearUrl() {
        url_ = getDefaultInstance().getUrl();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A URL to the address the agent is hosted at. This represents the
       * preferred endpoint as declared by the agent.
       * </pre>
       *
       * <code>string url = 3;</code>
       * @param value The bytes for url to set.
       * @return This builder for chaining.
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        url_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
  
      private java.lang.Object preferredTransport_ = "";
      /**
       * <pre>
       * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
       * </pre>
       *
       * <code>string preferred_transport = 14;</code>
       * @return The preferredTransport.
       */
      public java.lang.String getPreferredTransport() {
        java.lang.Object ref = preferredTransport_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          preferredTransport_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
       * </pre>
       *
       * <code>string preferred_transport = 14;</code>
       * @return The bytes for preferredTransport.
       */
      public com.google.protobuf.ByteString
          getPreferredTransportBytes() {
        java.lang.Object ref = preferredTransport_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          preferredTransport_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
       * </pre>
       *
       * <code>string preferred_transport = 14;</code>
       * @param value The preferredTransport to set.
       * @return This builder for chaining.
       */
      public Builder setPreferredTransport(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        preferredTransport_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
       * </pre>
       *
       * <code>string preferred_transport = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearPreferredTransport() {
        preferredTransport_ = getDefaultInstance().getPreferredTransport();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The transport of the preferred endpoint. If empty, defaults to JSONRPC.
       * </pre>
       *
       * <code>string preferred_transport = 14;</code>
       * @param value The bytes for preferredTransport to set.
       * @return This builder for chaining.
       */
      public Builder setPreferredTransportBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        preferredTransport_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
  
      private java.util.List<io.a2a.grpc.AgentInterface> additionalInterfaces_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalInterfacesIsMutable() {
        if (!((bitField0_ & 0x00000020) != 0)) {
          additionalInterfaces_ = new java.util.ArrayList<io.a2a.grpc.AgentInterface>(additionalInterfaces_);
          bitField0_ |= 0x00000020;
         }
      }
  
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.AgentInterface, io.a2a.grpc.AgentInterface.Builder, io.a2a.grpc.AgentInterfaceOrBuilder> additionalInterfacesBuilder_;
  
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public java.util.List<io.a2a.grpc.AgentInterface> getAdditionalInterfacesList() {
        if (additionalInterfacesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalInterfaces_);
        } else {
          return additionalInterfacesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public int getAdditionalInterfacesCount() {
        if (additionalInterfacesBuilder_ == null) {
          return additionalInterfaces_.size();
        } else {
          return additionalInterfacesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public io.a2a.grpc.AgentInterface getAdditionalInterfaces(int index) {
        if (additionalInterfacesBuilder_ == null) {
          return additionalInterfaces_.get(index);
        } else {
          return additionalInterfacesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder setAdditionalInterfaces(
          int index, io.a2a.grpc.AgentInterface value) {
        if (additionalInterfacesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.set(index, value);
          onChanged();
        } else {
          additionalInterfacesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder setAdditionalInterfaces(
          int index, io.a2a.grpc.AgentInterface.Builder builderForValue) {
        if (additionalInterfacesBuilder_ == null) {
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalInterfacesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder addAdditionalInterfaces(io.a2a.grpc.AgentInterface value) {
        if (additionalInterfacesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.add(value);
          onChanged();
        } else {
          additionalInterfacesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder addAdditionalInterfaces(
          int index, io.a2a.grpc.AgentInterface value) {
        if (additionalInterfacesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.add(index, value);
          onChanged();
        } else {
          additionalInterfacesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder addAdditionalInterfaces(
          io.a2a.grpc.AgentInterface.Builder builderForValue) {
        if (additionalInterfacesBuilder_ == null) {
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.add(builderForValue.build());
          onChanged();
        } else {
          additionalInterfacesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder addAdditionalInterfaces(
          int index, io.a2a.grpc.AgentInterface.Builder builderForValue) {
        if (additionalInterfacesBuilder_ == null) {
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalInterfacesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder addAllAdditionalInterfaces(
          java.lang.Iterable<? extends io.a2a.grpc.AgentInterface> values) {
        if (additionalInterfacesBuilder_ == null) {
          ensureAdditionalInterfacesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, additionalInterfaces_);
          onChanged();
        } else {
          additionalInterfacesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder clearAdditionalInterfaces() {
        if (additionalInterfacesBuilder_ == null) {
          additionalInterfaces_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          additionalInterfacesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public Builder removeAdditionalInterfaces(int index) {
        if (additionalInterfacesBuilder_ == null) {
          ensureAdditionalInterfacesIsMutable();
          additionalInterfaces_.remove(index);
          onChanged();
        } else {
          additionalInterfacesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public io.a2a.grpc.AgentInterface.Builder getAdditionalInterfacesBuilder(
          int index) {
        return internalGetAdditionalInterfacesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public io.a2a.grpc.AgentInterfaceOrBuilder getAdditionalInterfacesOrBuilder(
          int index) {
        if (additionalInterfacesBuilder_ == null) {
          return additionalInterfaces_.get(index);  } else {
          return additionalInterfacesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public java.util.List<? extends io.a2a.grpc.AgentInterfaceOrBuilder> 
           getAdditionalInterfacesOrBuilderList() {
        if (additionalInterfacesBuilder_ != null) {
          return additionalInterfacesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalInterfaces_);
        }
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public io.a2a.grpc.AgentInterface.Builder addAdditionalInterfacesBuilder() {
        return internalGetAdditionalInterfacesFieldBuilder().addBuilder(
            io.a2a.grpc.AgentInterface.getDefaultInstance());
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public io.a2a.grpc.AgentInterface.Builder addAdditionalInterfacesBuilder(
          int index) {
        return internalGetAdditionalInterfacesFieldBuilder().addBuilder(
            index, io.a2a.grpc.AgentInterface.getDefaultInstance());
      }
      /**
       * <pre>
       * Announcement of additional supported transports. Client can use any of
       * the supported transports.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentInterface additional_interfaces = 15;</code>
       */
      public java.util.List<io.a2a.grpc.AgentInterface.Builder> 
           getAdditionalInterfacesBuilderList() {
        return internalGetAdditionalInterfacesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.AgentInterface, io.a2a.grpc.AgentInterface.Builder, io.a2a.grpc.AgentInterfaceOrBuilder> 
          internalGetAdditionalInterfacesFieldBuilder() {
        if (additionalInterfacesBuilder_ == null) {
          additionalInterfacesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              io.a2a.grpc.AgentInterface, io.a2a.grpc.AgentInterface.Builder, io.a2a.grpc.AgentInterfaceOrBuilder>(
                  additionalInterfaces_,
                  ((bitField0_ & 0x00000020) != 0),
                  getParentForChildren(),
                  isClean());
          additionalInterfaces_ = null;
        }
        return additionalInterfacesBuilder_;
      }
  
      private io.a2a.grpc.AgentProvider provider_;
      private com.google.protobuf.SingleFieldBuilder<
          io.a2a.grpc.AgentProvider, io.a2a.grpc.AgentProvider.Builder, io.a2a.grpc.AgentProviderOrBuilder> providerBuilder_;
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       * @return Whether the provider field is set.
       */
      public boolean hasProvider() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       * @return The provider.
       */
      public io.a2a.grpc.AgentProvider getProvider() {
        if (providerBuilder_ == null) {
          return provider_ == null ? io.a2a.grpc.AgentProvider.getDefaultInstance() : provider_;
        } else {
          return providerBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      public Builder setProvider(io.a2a.grpc.AgentProvider value) {
        if (providerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          provider_ = value;
        } else {
          providerBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      public Builder setProvider(
          io.a2a.grpc.AgentProvider.Builder builderForValue) {
        if (providerBuilder_ == null) {
          provider_ = builderForValue.build();
        } else {
          providerBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      public Builder mergeProvider(io.a2a.grpc.AgentProvider value) {
        if (providerBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0) &&
            provider_ != null &&
            provider_ != io.a2a.grpc.AgentProvider.getDefaultInstance()) {
            getProviderBuilder().mergeFrom(value);
          } else {
            provider_ = value;
          }
        } else {
          providerBuilder_.mergeFrom(value);
        }
        if (provider_ != null) {
          bitField0_ |= 0x00000040;
          onChanged();
        }
        return this;
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      public Builder clearProvider() {
        bitField0_ = (bitField0_ & ~0x00000040);
        provider_ = null;
        if (providerBuilder_ != null) {
          providerBuilder_.dispose();
          providerBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      public io.a2a.grpc.AgentProvider.Builder getProviderBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return internalGetProviderFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      public io.a2a.grpc.AgentProviderOrBuilder getProviderOrBuilder() {
        if (providerBuilder_ != null) {
          return providerBuilder_.getMessageOrBuilder();
        } else {
          return provider_ == null ?
              io.a2a.grpc.AgentProvider.getDefaultInstance() : provider_;
        }
      }
      /**
       * <pre>
       * The service provider of the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentProvider provider = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          io.a2a.grpc.AgentProvider, io.a2a.grpc.AgentProvider.Builder, io.a2a.grpc.AgentProviderOrBuilder> 
          internalGetProviderFieldBuilder() {
        if (providerBuilder_ == null) {
          providerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              io.a2a.grpc.AgentProvider, io.a2a.grpc.AgentProvider.Builder, io.a2a.grpc.AgentProviderOrBuilder>(
                  getProvider(),
                  getParentForChildren(),
                  isClean());
          provider_ = null;
        }
        return providerBuilder_;
      }
  
      private java.lang.Object version_ = "";
      /**
       * <pre>
       * The version of the agent.
       * Example: "1.0.0"
       * </pre>
       *
       * <code>string version = 5;</code>
       * @return The version.
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          version_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The version of the agent.
       * Example: "1.0.0"
       * </pre>
       *
       * <code>string version = 5;</code>
       * @return The bytes for version.
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The version of the agent.
       * Example: "1.0.0"
       * </pre>
       *
       * <code>string version = 5;</code>
       * @param value The version to set.
       * @return This builder for chaining.
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        version_ = value;
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The version of the agent.
       * Example: "1.0.0"
       * </pre>
       *
       * <code>string version = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersion() {
        version_ = getDefaultInstance().getVersion();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The version of the agent.
       * Example: "1.0.0"
       * </pre>
       *
       * <code>string version = 5;</code>
       * @param value The bytes for version to set.
       * @return This builder for chaining.
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        version_ = value;
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
  
      private java.lang.Object documentationUrl_ = "";
      /**
       * <pre>
       * A url to provide additional documentation about the agent.
       * </pre>
       *
       * <code>string documentation_url = 6;</code>
       * @return The documentationUrl.
       */
      public java.lang.String getDocumentationUrl() {
        java.lang.Object ref = documentationUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          documentationUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * A url to provide additional documentation about the agent.
       * </pre>
       *
       * <code>string documentation_url = 6;</code>
       * @return The bytes for documentationUrl.
       */
      public com.google.protobuf.ByteString
          getDocumentationUrlBytes() {
        java.lang.Object ref = documentationUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          documentationUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * A url to provide additional documentation about the agent.
       * </pre>
       *
       * <code>string documentation_url = 6;</code>
       * @param value The documentationUrl to set.
       * @return This builder for chaining.
       */
      public Builder setDocumentationUrl(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        documentationUrl_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A url to provide additional documentation about the agent.
       * </pre>
       *
       * <code>string documentation_url = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearDocumentationUrl() {
        documentationUrl_ = getDefaultInstance().getDocumentationUrl();
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A url to provide additional documentation about the agent.
       * </pre>
       *
       * <code>string documentation_url = 6;</code>
       * @param value The bytes for documentationUrl to set.
       * @return This builder for chaining.
       */
      public Builder setDocumentationUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        documentationUrl_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }
  
      private io.a2a.grpc.AgentCapabilities capabilities_;
      private com.google.protobuf.SingleFieldBuilder<
          io.a2a.grpc.AgentCapabilities, io.a2a.grpc.AgentCapabilities.Builder, io.a2a.grpc.AgentCapabilitiesOrBuilder> capabilitiesBuilder_;
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       * @return Whether the capabilities field is set.
       */
      public boolean hasCapabilities() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       * @return The capabilities.
       */
      public io.a2a.grpc.AgentCapabilities getCapabilities() {
        if (capabilitiesBuilder_ == null) {
          return capabilities_ == null ? io.a2a.grpc.AgentCapabilities.getDefaultInstance() : capabilities_;
        } else {
          return capabilitiesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      public Builder setCapabilities(io.a2a.grpc.AgentCapabilities value) {
        if (capabilitiesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          capabilities_ = value;
        } else {
          capabilitiesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      public Builder setCapabilities(
          io.a2a.grpc.AgentCapabilities.Builder builderForValue) {
        if (capabilitiesBuilder_ == null) {
          capabilities_ = builderForValue.build();
        } else {
          capabilitiesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      public Builder mergeCapabilities(io.a2a.grpc.AgentCapabilities value) {
        if (capabilitiesBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0) &&
            capabilities_ != null &&
            capabilities_ != io.a2a.grpc.AgentCapabilities.getDefaultInstance()) {
            getCapabilitiesBuilder().mergeFrom(value);
          } else {
            capabilities_ = value;
          }
        } else {
          capabilitiesBuilder_.mergeFrom(value);
        }
        if (capabilities_ != null) {
          bitField0_ |= 0x00000200;
          onChanged();
        }
        return this;
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      public Builder clearCapabilities() {
        bitField0_ = (bitField0_ & ~0x00000200);
        capabilities_ = null;
        if (capabilitiesBuilder_ != null) {
          capabilitiesBuilder_.dispose();
          capabilitiesBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      public io.a2a.grpc.AgentCapabilities.Builder getCapabilitiesBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return internalGetCapabilitiesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      public io.a2a.grpc.AgentCapabilitiesOrBuilder getCapabilitiesOrBuilder() {
        if (capabilitiesBuilder_ != null) {
          return capabilitiesBuilder_.getMessageOrBuilder();
        } else {
          return capabilities_ == null ?
              io.a2a.grpc.AgentCapabilities.getDefaultInstance() : capabilities_;
        }
      }
      /**
       * <pre>
       * A2A Capability set supported by the agent.
       * </pre>
       *
       * <code>.a2a.v1.AgentCapabilities capabilities = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          io.a2a.grpc.AgentCapabilities, io.a2a.grpc.AgentCapabilities.Builder, io.a2a.grpc.AgentCapabilitiesOrBuilder> 
          internalGetCapabilitiesFieldBuilder() {
        if (capabilitiesBuilder_ == null) {
          capabilitiesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              io.a2a.grpc.AgentCapabilities, io.a2a.grpc.AgentCapabilities.Builder, io.a2a.grpc.AgentCapabilitiesOrBuilder>(
                  getCapabilities(),
                  getParentForChildren(),
                  isClean());
          capabilities_ = null;
        }
        return capabilitiesBuilder_;
      }
  
      private static final class SecuritySchemesConverter implements com.google.protobuf.MapFieldBuilder.Converter<java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder, io.a2a.grpc.SecurityScheme> {
        @java.lang.Override
        public io.a2a.grpc.SecurityScheme build(io.a2a.grpc.SecuritySchemeOrBuilder val) {
          if (val instanceof io.a2a.grpc.SecurityScheme) { return (io.a2a.grpc.SecurityScheme) val; }
          return ((io.a2a.grpc.SecurityScheme.Builder) val).build();
        }
  
        @java.lang.Override
        public com.google.protobuf.MapEntry<java.lang.String, io.a2a.grpc.SecurityScheme> defaultEntry() {
          return SecuritySchemesDefaultEntryHolder.defaultEntry;
        }
      };
      private static final SecuritySchemesConverter securitySchemesConverter = new SecuritySchemesConverter();
  
      private com.google.protobuf.MapFieldBuilder<
          java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder, io.a2a.grpc.SecurityScheme, io.a2a.grpc.SecurityScheme.Builder> securitySchemes_;
      private com.google.protobuf.MapFieldBuilder<java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder, io.a2a.grpc.SecurityScheme, io.a2a.grpc.SecurityScheme.Builder>
          internalGetSecuritySchemes() {
        if (securitySchemes_ == null) {
          return new com.google.protobuf.MapFieldBuilder<>(securitySchemesConverter);
        }
        return securitySchemes_;
      }
      private com.google.protobuf.MapFieldBuilder<java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder, io.a2a.grpc.SecurityScheme, io.a2a.grpc.SecurityScheme.Builder>
          internalGetMutableSecuritySchemes() {
        if (securitySchemes_ == null) {
          securitySchemes_ = new com.google.protobuf.MapFieldBuilder<>(securitySchemesConverter);
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return securitySchemes_;
      }
      public int getSecuritySchemesCount() {
        return internalGetSecuritySchemes().ensureBuilderMap().size();
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      @java.lang.Override
      public boolean containsSecuritySchemes(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        return internalGetSecuritySchemes().ensureBuilderMap().containsKey(key);
      }
      /**
       * Use {@link #getSecuritySchemesMap()} instead.
       */
      @java.lang.Override
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> getSecuritySchemes() {
        return getSecuritySchemesMap();
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      @java.lang.Override
      public java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> getSecuritySchemesMap() {
        return internalGetSecuritySchemes().getImmutableMap();
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      @java.lang.Override
      public /* nullable */
  io.a2a.grpc.SecurityScheme getSecuritySchemesOrDefault(
          java.lang.String key,
          /* nullable */
  io.a2a.grpc.SecurityScheme defaultValue) {
        if (key == null) { throw new NullPointerException("map key"); }
        java.util.Map<java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder> map = internalGetMutableSecuritySchemes().ensureBuilderMap();
        return map.containsKey(key) ? securitySchemesConverter.build(map.get(key)) : defaultValue;
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      @java.lang.Override
      public io.a2a.grpc.SecurityScheme getSecuritySchemesOrThrow(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        java.util.Map<java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder> map = internalGetMutableSecuritySchemes().ensureBuilderMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return securitySchemesConverter.build(map.get(key));
      }
      public Builder clearSecuritySchemes() {
        bitField0_ = (bitField0_ & ~0x00000400);
        internalGetMutableSecuritySchemes().clear();
        return this;
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      public Builder removeSecuritySchemes(
          java.lang.String key) {
        if (key == null) { throw new NullPointerException("map key"); }
        internalGetMutableSecuritySchemes().ensureBuilderMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme>
          getMutableSecuritySchemes() {
        bitField0_ |= 0x00000400;
        return internalGetMutableSecuritySchemes().ensureMessageMap();
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      public Builder putSecuritySchemes(
          java.lang.String key,
          io.a2a.grpc.SecurityScheme value) {
        if (key == null) { throw new NullPointerException("map key"); }
        if (value == null) { throw new NullPointerException("map value"); }
        internalGetMutableSecuritySchemes().ensureBuilderMap()
            .put(key, value);
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      public Builder putAllSecuritySchemes(
          java.util.Map<java.lang.String, io.a2a.grpc.SecurityScheme> values) {
        for (java.util.Map.Entry<java.lang.String, io.a2a.grpc.SecurityScheme> e : values.entrySet()) {
          if (e.getKey() == null || e.getValue() == null) {
            throw new NullPointerException();
          }
        }
        internalGetMutableSecuritySchemes().ensureBuilderMap()
            .putAll(values);
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <pre>
       * The security scheme details used for authenticating with this agent.
       * </pre>
       *
       * <code>map&lt;string, .a2a.v1.SecurityScheme&gt; security_schemes = 8;</code>
       */
      public io.a2a.grpc.SecurityScheme.Builder putSecuritySchemesBuilderIfAbsent(
          java.lang.String key) {
        java.util.Map<java.lang.String, io.a2a.grpc.SecuritySchemeOrBuilder> builderMap = internalGetMutableSecuritySchemes().ensureBuilderMap();
        io.a2a.grpc.SecuritySchemeOrBuilder entry = builderMap.get(key);
        if (entry == null) {
          entry = io.a2a.grpc.SecurityScheme.newBuilder();
          builderMap.put(key, entry);
        }
        if (entry instanceof io.a2a.grpc.SecurityScheme) {
          entry = ((io.a2a.grpc.SecurityScheme) entry).toBuilder();
          builderMap.put(key, entry);
        }
        return (io.a2a.grpc.SecurityScheme.Builder) entry;
      }
  
      private java.util.List<io.a2a.grpc.Security> security_ =
        java.util.Collections.emptyList();
      private void ensureSecurityIsMutable() {
        if (!((bitField0_ & 0x00000800) != 0)) {
          security_ = new java.util.ArrayList<io.a2a.grpc.Security>(security_);
          bitField0_ |= 0x00000800;
         }
      }
  
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.Security, io.a2a.grpc.Security.Builder, io.a2a.grpc.SecurityOrBuilder> securityBuilder_;
  
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public java.util.List<io.a2a.grpc.Security> getSecurityList() {
        if (securityBuilder_ == null) {
          return java.util.Collections.unmodifiableList(security_);
        } else {
          return securityBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public int getSecurityCount() {
        if (securityBuilder_ == null) {
          return security_.size();
        } else {
          return securityBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public io.a2a.grpc.Security getSecurity(int index) {
        if (securityBuilder_ == null) {
          return security_.get(index);
        } else {
          return securityBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder setSecurity(
          int index, io.a2a.grpc.Security value) {
        if (securityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSecurityIsMutable();
          security_.set(index, value);
          onChanged();
        } else {
          securityBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder setSecurity(
          int index, io.a2a.grpc.Security.Builder builderForValue) {
        if (securityBuilder_ == null) {
          ensureSecurityIsMutable();
          security_.set(index, builderForValue.build());
          onChanged();
        } else {
          securityBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder addSecurity(io.a2a.grpc.Security value) {
        if (securityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSecurityIsMutable();
          security_.add(value);
          onChanged();
        } else {
          securityBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder addSecurity(
          int index, io.a2a.grpc.Security value) {
        if (securityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSecurityIsMutable();
          security_.add(index, value);
          onChanged();
        } else {
          securityBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder addSecurity(
          io.a2a.grpc.Security.Builder builderForValue) {
        if (securityBuilder_ == null) {
          ensureSecurityIsMutable();
          security_.add(builderForValue.build());
          onChanged();
        } else {
          securityBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder addSecurity(
          int index, io.a2a.grpc.Security.Builder builderForValue) {
        if (securityBuilder_ == null) {
          ensureSecurityIsMutable();
          security_.add(index, builderForValue.build());
          onChanged();
        } else {
          securityBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder addAllSecurity(
          java.lang.Iterable<? extends io.a2a.grpc.Security> values) {
        if (securityBuilder_ == null) {
          ensureSecurityIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, security_);
          onChanged();
        } else {
          securityBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder clearSecurity() {
        if (securityBuilder_ == null) {
          security_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          securityBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public Builder removeSecurity(int index) {
        if (securityBuilder_ == null) {
          ensureSecurityIsMutable();
          security_.remove(index);
          onChanged();
        } else {
          securityBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public io.a2a.grpc.Security.Builder getSecurityBuilder(
          int index) {
        return internalGetSecurityFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public io.a2a.grpc.SecurityOrBuilder getSecurityOrBuilder(
          int index) {
        if (securityBuilder_ == null) {
          return security_.get(index);  } else {
          return securityBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public java.util.List<? extends io.a2a.grpc.SecurityOrBuilder> 
           getSecurityOrBuilderList() {
        if (securityBuilder_ != null) {
          return securityBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(security_);
        }
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public io.a2a.grpc.Security.Builder addSecurityBuilder() {
        return internalGetSecurityFieldBuilder().addBuilder(
            io.a2a.grpc.Security.getDefaultInstance());
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public io.a2a.grpc.Security.Builder addSecurityBuilder(
          int index) {
        return internalGetSecurityFieldBuilder().addBuilder(
            index, io.a2a.grpc.Security.getDefaultInstance());
      }
      /**
       * <pre>
       * protolint:disable REPEATED_FIELD_NAMES_PLURALIZED
       * Security requirements for contacting the agent.
       * This list can be seen as an OR of ANDs. Each object in the list describes
       * one possible set of security requirements that must be present on a
       * request. This allows specifying, for example, "callers must either use
       * OAuth OR an API Key AND mTLS."
       * Example:
       * security {
       * schemes { key: "oauth" value { list: ["read"] } }
       * }
       * security {
       * schemes { key: "api-key" }
       * schemes { key: "mtls" }
       * }
       * </pre>
       *
       * <code>repeated .a2a.v1.Security security = 9;</code>
       */
      public java.util.List<io.a2a.grpc.Security.Builder> 
           getSecurityBuilderList() {
        return internalGetSecurityFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.Security, io.a2a.grpc.Security.Builder, io.a2a.grpc.SecurityOrBuilder> 
          internalGetSecurityFieldBuilder() {
        if (securityBuilder_ == null) {
          securityBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              io.a2a.grpc.Security, io.a2a.grpc.Security.Builder, io.a2a.grpc.SecurityOrBuilder>(
                  security_,
                  ((bitField0_ & 0x00000800) != 0),
                  getParentForChildren(),
                  isClean());
          security_ = null;
        }
        return securityBuilder_;
      }
  
      private com.google.protobuf.LazyStringArrayList defaultInputModes_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      private void ensureDefaultInputModesIsMutable() {
        if (!defaultInputModes_.isModifiable()) {
          defaultInputModes_ = new com.google.protobuf.LazyStringArrayList(defaultInputModes_);
        }
        bitField0_ |= 0x00001000;
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @return A list containing the defaultInputModes.
       */
      public com.google.protobuf.ProtocolStringList
          getDefaultInputModesList() {
        defaultInputModes_.makeImmutable();
        return defaultInputModes_;
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @return The count of defaultInputModes.
       */
      public int getDefaultInputModesCount() {
        return defaultInputModes_.size();
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @param index The index of the element to return.
       * @return The defaultInputModes at the given index.
       */
      public java.lang.String getDefaultInputModes(int index) {
        return defaultInputModes_.get(index);
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @param index The index of the value to return.
       * @return The bytes of the defaultInputModes at the given index.
       */
      public com.google.protobuf.ByteString
          getDefaultInputModesBytes(int index) {
        return defaultInputModes_.getByteString(index);
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @param index The index to set the value at.
       * @param value The defaultInputModes to set.
       * @return This builder for chaining.
       */
      public Builder setDefaultInputModes(
          int index, java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        ensureDefaultInputModesIsMutable();
        defaultInputModes_.set(index, value);
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @param value The defaultInputModes to add.
       * @return This builder for chaining.
       */
      public Builder addDefaultInputModes(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        ensureDefaultInputModesIsMutable();
        defaultInputModes_.add(value);
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @param values The defaultInputModes to add.
       * @return This builder for chaining.
       */
      public Builder addAllDefaultInputModes(
          java.lang.Iterable<java.lang.String> values) {
        ensureDefaultInputModesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, defaultInputModes_);
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearDefaultInputModes() {
        defaultInputModes_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
        bitField0_ = (bitField0_ & ~0x00001000);;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 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 mime types.
       * </pre>
       *
       * <code>repeated string default_input_modes = 10;</code>
       * @param value The bytes of the defaultInputModes to add.
       * @return This builder for chaining.
       */
      public Builder addDefaultInputModesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        ensureDefaultInputModesIsMutable();
        defaultInputModes_.add(value);
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
  
      private com.google.protobuf.LazyStringArrayList defaultOutputModes_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      private void ensureDefaultOutputModesIsMutable() {
        if (!defaultOutputModes_.isModifiable()) {
          defaultOutputModes_ = new com.google.protobuf.LazyStringArrayList(defaultOutputModes_);
        }
        bitField0_ |= 0x00002000;
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @return A list containing the defaultOutputModes.
       */
      public com.google.protobuf.ProtocolStringList
          getDefaultOutputModesList() {
        defaultOutputModes_.makeImmutable();
        return defaultOutputModes_;
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @return The count of defaultOutputModes.
       */
      public int getDefaultOutputModesCount() {
        return defaultOutputModes_.size();
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @param index The index of the element to return.
       * @return The defaultOutputModes at the given index.
       */
      public java.lang.String getDefaultOutputModes(int index) {
        return defaultOutputModes_.get(index);
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @param index The index of the value to return.
       * @return The bytes of the defaultOutputModes at the given index.
       */
      public com.google.protobuf.ByteString
          getDefaultOutputModesBytes(int index) {
        return defaultOutputModes_.getByteString(index);
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @param index The index to set the value at.
       * @param value The defaultOutputModes to set.
       * @return This builder for chaining.
       */
      public Builder setDefaultOutputModes(
          int index, java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        ensureDefaultOutputModesIsMutable();
        defaultOutputModes_.set(index, value);
        bitField0_ |= 0x00002000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @param value The defaultOutputModes to add.
       * @return This builder for chaining.
       */
      public Builder addDefaultOutputModes(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        ensureDefaultOutputModesIsMutable();
        defaultOutputModes_.add(value);
        bitField0_ |= 0x00002000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @param values The defaultOutputModes to add.
       * @return This builder for chaining.
       */
      public Builder addAllDefaultOutputModes(
          java.lang.Iterable<java.lang.String> values) {
        ensureDefaultOutputModesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, defaultOutputModes_);
        bitField0_ |= 0x00002000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearDefaultOutputModes() {
        defaultOutputModes_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
        bitField0_ = (bitField0_ & ~0x00002000);;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The mime types supported as outputs from this agent.
       * </pre>
       *
       * <code>repeated string default_output_modes = 11;</code>
       * @param value The bytes of the defaultOutputModes to add.
       * @return This builder for chaining.
       */
      public Builder addDefaultOutputModesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        ensureDefaultOutputModesIsMutable();
        defaultOutputModes_.add(value);
        bitField0_ |= 0x00002000;
        onChanged();
        return this;
      }
  
      private java.util.List<io.a2a.grpc.AgentSkill> skills_ =
        java.util.Collections.emptyList();
      private void ensureSkillsIsMutable() {
        if (!((bitField0_ & 0x00004000) != 0)) {
          skills_ = new java.util.ArrayList<io.a2a.grpc.AgentSkill>(skills_);
          bitField0_ |= 0x00004000;
         }
      }
  
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.AgentSkill, io.a2a.grpc.AgentSkill.Builder, io.a2a.grpc.AgentSkillOrBuilder> skillsBuilder_;
  
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public java.util.List<io.a2a.grpc.AgentSkill> getSkillsList() {
        if (skillsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(skills_);
        } else {
          return skillsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public int getSkillsCount() {
        if (skillsBuilder_ == null) {
          return skills_.size();
        } else {
          return skillsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public io.a2a.grpc.AgentSkill getSkills(int index) {
        if (skillsBuilder_ == null) {
          return skills_.get(index);
        } else {
          return skillsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder setSkills(
          int index, io.a2a.grpc.AgentSkill value) {
        if (skillsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSkillsIsMutable();
          skills_.set(index, value);
          onChanged();
        } else {
          skillsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder setSkills(
          int index, io.a2a.grpc.AgentSkill.Builder builderForValue) {
        if (skillsBuilder_ == null) {
          ensureSkillsIsMutable();
          skills_.set(index, builderForValue.build());
          onChanged();
        } else {
          skillsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder addSkills(io.a2a.grpc.AgentSkill value) {
        if (skillsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSkillsIsMutable();
          skills_.add(value);
          onChanged();
        } else {
          skillsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder addSkills(
          int index, io.a2a.grpc.AgentSkill value) {
        if (skillsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSkillsIsMutable();
          skills_.add(index, value);
          onChanged();
        } else {
          skillsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder addSkills(
          io.a2a.grpc.AgentSkill.Builder builderForValue) {
        if (skillsBuilder_ == null) {
          ensureSkillsIsMutable();
          skills_.add(builderForValue.build());
          onChanged();
        } else {
          skillsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder addSkills(
          int index, io.a2a.grpc.AgentSkill.Builder builderForValue) {
        if (skillsBuilder_ == null) {
          ensureSkillsIsMutable();
          skills_.add(index, builderForValue.build());
          onChanged();
        } else {
          skillsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder addAllSkills(
          java.lang.Iterable<? extends io.a2a.grpc.AgentSkill> values) {
        if (skillsBuilder_ == null) {
          ensureSkillsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, skills_);
          onChanged();
        } else {
          skillsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder clearSkills() {
        if (skillsBuilder_ == null) {
          skills_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          skillsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public Builder removeSkills(int index) {
        if (skillsBuilder_ == null) {
          ensureSkillsIsMutable();
          skills_.remove(index);
          onChanged();
        } else {
          skillsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public io.a2a.grpc.AgentSkill.Builder getSkillsBuilder(
          int index) {
        return internalGetSkillsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public io.a2a.grpc.AgentSkillOrBuilder getSkillsOrBuilder(
          int index) {
        if (skillsBuilder_ == null) {
          return skills_.get(index);  } else {
          return skillsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public java.util.List<? extends io.a2a.grpc.AgentSkillOrBuilder> 
           getSkillsOrBuilderList() {
        if (skillsBuilder_ != null) {
          return skillsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(skills_);
        }
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public io.a2a.grpc.AgentSkill.Builder addSkillsBuilder() {
        return internalGetSkillsFieldBuilder().addBuilder(
            io.a2a.grpc.AgentSkill.getDefaultInstance());
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public io.a2a.grpc.AgentSkill.Builder addSkillsBuilder(
          int index) {
        return internalGetSkillsFieldBuilder().addBuilder(
            index, io.a2a.grpc.AgentSkill.getDefaultInstance());
      }
      /**
       * <pre>
       * Skills represent a unit of ability an agent can perform. This may
       * somewhat abstract but represents a more focused set of actions that the
       * agent is highly likely to succeed at.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentSkill skills = 12;</code>
       */
      public java.util.List<io.a2a.grpc.AgentSkill.Builder> 
           getSkillsBuilderList() {
        return internalGetSkillsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.AgentSkill, io.a2a.grpc.AgentSkill.Builder, io.a2a.grpc.AgentSkillOrBuilder> 
          internalGetSkillsFieldBuilder() {
        if (skillsBuilder_ == null) {
          skillsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              io.a2a.grpc.AgentSkill, io.a2a.grpc.AgentSkill.Builder, io.a2a.grpc.AgentSkillOrBuilder>(
                  skills_,
                  ((bitField0_ & 0x00004000) != 0),
                  getParentForChildren(),
                  isClean());
          skills_ = null;
        }
        return skillsBuilder_;
      }
  
      private boolean supportsAuthenticatedExtendedCard_ ;
      /**
       * <pre>
       * Whether the agent supports providing an extended agent card when
       * the user is authenticated, i.e. is the card from .well-known
       * different than the card from GetAgentCard.
       * </pre>
       *
       * <code>bool supports_authenticated_extended_card = 13;</code>
       * @return The supportsAuthenticatedExtendedCard.
       */
      @java.lang.Override
      public boolean getSupportsAuthenticatedExtendedCard() {
        return supportsAuthenticatedExtendedCard_;
      }
      /**
       * <pre>
       * Whether the agent supports providing an extended agent card when
       * the user is authenticated, i.e. is the card from .well-known
       * different than the card from GetAgentCard.
       * </pre>
       *
       * <code>bool supports_authenticated_extended_card = 13;</code>
       * @param value The supportsAuthenticatedExtendedCard to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsAuthenticatedExtendedCard(boolean value) {
  
        supportsAuthenticatedExtendedCard_ = value;
        bitField0_ |= 0x00008000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the agent supports providing an extended agent card when
       * the user is authenticated, i.e. is the card from .well-known
       * different than the card from GetAgentCard.
       * </pre>
       *
       * <code>bool supports_authenticated_extended_card = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsAuthenticatedExtendedCard() {
        bitField0_ = (bitField0_ & ~0x00008000);
        supportsAuthenticatedExtendedCard_ = false;
        onChanged();
        return this;
      }
  
      private java.util.List<io.a2a.grpc.AgentCardSignature> signatures_ =
        java.util.Collections.emptyList();
      private void ensureSignaturesIsMutable() {
        if (!((bitField0_ & 0x00010000) != 0)) {
          signatures_ = new java.util.ArrayList<io.a2a.grpc.AgentCardSignature>(signatures_);
          bitField0_ |= 0x00010000;
         }
      }
  
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.AgentCardSignature, io.a2a.grpc.AgentCardSignature.Builder, io.a2a.grpc.AgentCardSignatureOrBuilder> signaturesBuilder_;
  
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public java.util.List<io.a2a.grpc.AgentCardSignature> getSignaturesList() {
        if (signaturesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(signatures_);
        } else {
          return signaturesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public int getSignaturesCount() {
        if (signaturesBuilder_ == null) {
          return signatures_.size();
        } else {
          return signaturesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public io.a2a.grpc.AgentCardSignature getSignatures(int index) {
        if (signaturesBuilder_ == null) {
          return signatures_.get(index);
        } else {
          return signaturesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder setSignatures(
          int index, io.a2a.grpc.AgentCardSignature value) {
        if (signaturesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSignaturesIsMutable();
          signatures_.set(index, value);
          onChanged();
        } else {
          signaturesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder setSignatures(
          int index, io.a2a.grpc.AgentCardSignature.Builder builderForValue) {
        if (signaturesBuilder_ == null) {
          ensureSignaturesIsMutable();
          signatures_.set(index, builderForValue.build());
          onChanged();
        } else {
          signaturesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder addSignatures(io.a2a.grpc.AgentCardSignature value) {
        if (signaturesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSignaturesIsMutable();
          signatures_.add(value);
          onChanged();
        } else {
          signaturesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder addSignatures(
          int index, io.a2a.grpc.AgentCardSignature value) {
        if (signaturesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSignaturesIsMutable();
          signatures_.add(index, value);
          onChanged();
        } else {
          signaturesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder addSignatures(
          io.a2a.grpc.AgentCardSignature.Builder builderForValue) {
        if (signaturesBuilder_ == null) {
          ensureSignaturesIsMutable();
          signatures_.add(builderForValue.build());
          onChanged();
        } else {
          signaturesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder addSignatures(
          int index, io.a2a.grpc.AgentCardSignature.Builder builderForValue) {
        if (signaturesBuilder_ == null) {
          ensureSignaturesIsMutable();
          signatures_.add(index, builderForValue.build());
          onChanged();
        } else {
          signaturesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder addAllSignatures(
          java.lang.Iterable<? extends io.a2a.grpc.AgentCardSignature> values) {
        if (signaturesBuilder_ == null) {
          ensureSignaturesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, signatures_);
          onChanged();
        } else {
          signaturesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder clearSignatures() {
        if (signaturesBuilder_ == null) {
          signatures_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
          onChanged();
        } else {
          signaturesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public Builder removeSignatures(int index) {
        if (signaturesBuilder_ == null) {
          ensureSignaturesIsMutable();
          signatures_.remove(index);
          onChanged();
        } else {
          signaturesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public io.a2a.grpc.AgentCardSignature.Builder getSignaturesBuilder(
          int index) {
        return internalGetSignaturesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public io.a2a.grpc.AgentCardSignatureOrBuilder getSignaturesOrBuilder(
          int index) {
        if (signaturesBuilder_ == null) {
          return signatures_.get(index);  } else {
          return signaturesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public java.util.List<? extends io.a2a.grpc.AgentCardSignatureOrBuilder> 
           getSignaturesOrBuilderList() {
        if (signaturesBuilder_ != null) {
          return signaturesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(signatures_);
        }
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public io.a2a.grpc.AgentCardSignature.Builder addSignaturesBuilder() {
        return internalGetSignaturesFieldBuilder().addBuilder(
            io.a2a.grpc.AgentCardSignature.getDefaultInstance());
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public io.a2a.grpc.AgentCardSignature.Builder addSignaturesBuilder(
          int index) {
        return internalGetSignaturesFieldBuilder().addBuilder(
            index, io.a2a.grpc.AgentCardSignature.getDefaultInstance());
      }
      /**
       * <pre>
       * JSON Web Signatures computed for this AgentCard.
       * </pre>
       *
       * <code>repeated .a2a.v1.AgentCardSignature signatures = 17;</code>
       */
      public java.util.List<io.a2a.grpc.AgentCardSignature.Builder> 
           getSignaturesBuilderList() {
        return internalGetSignaturesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          io.a2a.grpc.AgentCardSignature, io.a2a.grpc.AgentCardSignature.Builder, io.a2a.grpc.AgentCardSignatureOrBuilder> 
          internalGetSignaturesFieldBuilder() {
        if (signaturesBuilder_ == null) {
          signaturesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              io.a2a.grpc.AgentCardSignature, io.a2a.grpc.AgentCardSignature.Builder, io.a2a.grpc.AgentCardSignatureOrBuilder>(
                  signatures_,
                  ((bitField0_ & 0x00010000) != 0),
                  getParentForChildren(),
                  isClean());
          signatures_ = null;
        }
        return signaturesBuilder_;
      }
  
      // @@protoc_insertion_point(builder_scope:a2a.v1.AgentCard)
    }
  
    // @@protoc_insertion_point(class_scope:a2a.v1.AgentCard)
    private static final io.a2a.grpc.AgentCard DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.a2a.grpc.AgentCard();
    }
  
    public static io.a2a.grpc.AgentCard getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
  
    private static final com.google.protobuf.Parser<AgentCard>
        PARSER = new com.google.protobuf.AbstractParser<AgentCard>() {
      @java.lang.Override
      public AgentCard parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };
  
    public static com.google.protobuf.Parser<AgentCard> parser() {
      return PARSER;
    }
  
    @java.lang.Override
    public com.google.protobuf.Parser<AgentCard> getParserForType() {
      return PARSER;
    }
  
    @java.lang.Override
    public io.a2a.grpc.AgentCard getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  
  }
  
  