// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.cloud.ces.v1;

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/ces/v1/common.proto";
import "google/cloud/ces/v1/connector_toolset.proto";
import "google/cloud/ces/v1/fakes.proto";
import "google/cloud/ces/v1/mcp_toolset.proto";
import "google/cloud/ces/v1/open_api_toolset.proto";
import "google/protobuf/timestamp.proto";

option go_package = "cloud.google.com/go/ces/apiv1/cespb;cespb";
option java_multiple_files = true;
option java_outer_classname = "ToolsetProto";
option java_package = "com.google.cloud.ces.v1";

// A toolset represents a group of dynamically managed tools that can be used
// by the agent.
message Toolset {
  option (google.api.resource) = {
    type: "ces.googleapis.com/Toolset"
    pattern: "projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}"
    plural: "toolsets"
    singular: "toolset"
  };

  // The type of the toolset.
  oneof toolset_type {
    // Optional. A toolset that contains a list of tools that are offered by the
    // MCP server.
    McpToolset mcp_toolset = 6 [(google.api.field_behavior) = OPTIONAL];

    // Optional. A toolset that contains a list of tools that are defined by an
    // OpenAPI schema.
    OpenApiToolset open_api_toolset = 7
        [(google.api.field_behavior) = OPTIONAL];

    // Optional. A toolset that generates tools from an Integration Connectors
    // Connection.
    ConnectorToolset connector_toolset = 8
        [(google.api.field_behavior) = OPTIONAL];
  }

  // Identifier. The unique identifier of the toolset.
  // Format:
  // `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}`
  string name = 1 [(google.api.field_behavior) = IDENTIFIER];

  // Optional. The display name of the toolset. Must be unique within the same
  // app.
  string display_name = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. The description of the toolset.
  string description = 10 [(google.api.field_behavior) = OPTIONAL];

  // Output only. Timestamp when the toolset was created.
  google.protobuf.Timestamp create_time = 3
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Timestamp when the toolset was last updated.
  google.protobuf.Timestamp update_time = 4
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // ETag used to ensure the object hasn't changed during a read-modify-write
  // operation. If the etag is empty, the update will overwrite any concurrent
  // changes.
  string etag = 5;

  // Optional. The execution type of the tools in the toolset.
  ExecutionType execution_type = 9 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Configuration for tools behavior in fake mode.
  ToolFakeConfig tool_fake_config = 11 [(google.api.field_behavior) = OPTIONAL];
}
