diff --git a/README.md b/README.md
index dfc4673ea5a65..96cd5f3bd33f6 100644
--- a/README.md
+++ b/README.md
@@ -176,6 +176,9 @@ See each library's `README.md` file for more information about:
- [Certificate Manager API](google/cloud/certificatemanager/README.md)
[[quickstart]](google/cloud/certificatemanager/quickstart/README.md)
[[reference]](https://cloud.google.com/cpp/docs/reference/certificatemanager/latest)
+- [Gemini Enterprise for Customer Experience API](google/cloud/ces/README.md)
+ [[quickstart]](google/cloud/ces/quickstart/README.md)
+ [[reference]](https://cloud.google.com/cpp/docs/reference/ces/latest)
- [Cloud Channel API](google/cloud/channel/README.md)
[[quickstart]](google/cloud/channel/quickstart/README.md)
[[reference]](https://cloud.google.com/cpp/docs/reference/channel/latest)
diff --git a/ci/abi-dumps/google_cloud_cpp_ces.expected.abi.dump.gz b/ci/abi-dumps/google_cloud_cpp_ces.expected.abi.dump.gz
new file mode 100644
index 0000000000000..44f5238bdc097
Binary files /dev/null and b/ci/abi-dumps/google_cloud_cpp_ces.expected.abi.dump.gz differ
diff --git a/ci/etc/expected_install_directories b/ci/etc/expected_install_directories
index cc929e54a07cf..f79126b8dfe5f 100644
--- a/ci/etc/expected_install_directories
+++ b/ci/etc/expected_install_directories
@@ -171,6 +171,10 @@
./include/google/cloud/certificatemanager/v1
./include/google/cloud/certificatemanager/v1/internal
./include/google/cloud/certificatemanager/v1/mocks
+./include/google/cloud/ces
+./include/google/cloud/ces/v1
+./include/google/cloud/ces/v1/internal
+./include/google/cloud/ces/v1/mocks
./include/google/cloud/channel
./include/google/cloud/channel/v1
./include/google/cloud/channel/v1/internal
@@ -1326,6 +1330,8 @@
./lib64/cmake/google_cloud_cpp_binaryauthorization_mocks
./lib64/cmake/google_cloud_cpp_certificatemanager
./lib64/cmake/google_cloud_cpp_certificatemanager_mocks
+./lib64/cmake/google_cloud_cpp_ces
+./lib64/cmake/google_cloud_cpp_ces_mocks
./lib64/cmake/google_cloud_cpp_channel
./lib64/cmake/google_cloud_cpp_channel_mocks
./lib64/cmake/google_cloud_cpp_chronicle
diff --git a/cmake/GoogleCloudCppFeatures.cmake b/cmake/GoogleCloudCppFeatures.cmake
index 15186185f8408..25561b78911d0 100644
--- a/cmake/GoogleCloudCppFeatures.cmake
+++ b/cmake/GoogleCloudCppFeatures.cmake
@@ -67,6 +67,7 @@ set(GOOGLE_CLOUD_CPP_GA_LIBRARIES
"billing"
"binaryauthorization"
"certificatemanager"
+ "ces"
"channel"
"chronicle"
"cloudbuild"
diff --git a/external/googleapis/protodeps/ces.deps b/external/googleapis/protodeps/ces.deps
new file mode 100644
index 0000000000000..3a69eb58546e0
--- /dev/null
+++ b/external/googleapis/protodeps/ces.deps
@@ -0,0 +1,8 @@
+@googleapis//google/api:annotations_proto
+@googleapis//google/api:client_proto
+@googleapis//google/api:field_behavior_proto
+@googleapis//google/api:http_proto
+@googleapis//google/api:launch_stage_proto
+@googleapis//google/api:resource_proto
+@googleapis//google/longrunning:operations_proto
+@googleapis//google/rpc:status_proto
diff --git a/external/googleapis/protolists/ces.list b/external/googleapis/protolists/ces.list
new file mode 100644
index 0000000000000..119ce2e7b685f
--- /dev/null
+++ b/external/googleapis/protolists/ces.list
@@ -0,0 +1,38 @@
+@googleapis//google/cloud/ces/v1:agent.proto
+@googleapis//google/cloud/ces/v1:agent_service.proto
+@googleapis//google/cloud/ces/v1:agent_transfers.proto
+@googleapis//google/cloud/ces/v1:app.proto
+@googleapis//google/cloud/ces/v1:app_version.proto
+@googleapis//google/cloud/ces/v1:auth.proto
+@googleapis//google/cloud/ces/v1:bigquery_export.proto
+@googleapis//google/cloud/ces/v1:changelog.proto
+@googleapis//google/cloud/ces/v1:client_function.proto
+@googleapis//google/cloud/ces/v1:common.proto
+@googleapis//google/cloud/ces/v1:connector_tool.proto
+@googleapis//google/cloud/ces/v1:connector_toolset.proto
+@googleapis//google/cloud/ces/v1:conversation.proto
+@googleapis//google/cloud/ces/v1:data_store.proto
+@googleapis//google/cloud/ces/v1:data_store_tool.proto
+@googleapis//google/cloud/ces/v1:deployment.proto
+@googleapis//google/cloud/ces/v1:example.proto
+@googleapis//google/cloud/ces/v1:fakes.proto
+@googleapis//google/cloud/ces/v1:file_search_tool.proto
+@googleapis//google/cloud/ces/v1:google_search_tool.proto
+@googleapis//google/cloud/ces/v1:guardrail.proto
+@googleapis//google/cloud/ces/v1:mcp_tool.proto
+@googleapis//google/cloud/ces/v1:mcp_toolset.proto
+@googleapis//google/cloud/ces/v1:omnichannel.proto
+@googleapis//google/cloud/ces/v1:omnichannel_service.proto
+@googleapis//google/cloud/ces/v1:open_api_tool.proto
+@googleapis//google/cloud/ces/v1:open_api_toolset.proto
+@googleapis//google/cloud/ces/v1:python_function.proto
+@googleapis//google/cloud/ces/v1:schema.proto
+@googleapis//google/cloud/ces/v1:search_suggestions.proto
+@googleapis//google/cloud/ces/v1:session_service.proto
+@googleapis//google/cloud/ces/v1:system_tool.proto
+@googleapis//google/cloud/ces/v1:tool.proto
+@googleapis//google/cloud/ces/v1:tool_service.proto
+@googleapis//google/cloud/ces/v1:toolset.proto
+@googleapis//google/cloud/ces/v1:toolset_tool.proto
+@googleapis//google/cloud/ces/v1:widget_service.proto
+@googleapis//google/cloud/ces/v1:widget_tool.proto
diff --git a/external/googleapis/update_libraries.sh b/external/googleapis/update_libraries.sh
index 0ff46efc06183..3a1370e92a8d9 100755
--- a/external/googleapis/update_libraries.sh
+++ b/external/googleapis/update_libraries.sh
@@ -93,6 +93,7 @@ declare -A -r LIBRARIES=(
"@googleapis//google/cloud/certificatemanager/logging/v1:logging_cc_grpc" \
"@googleapis//google/cloud/certificatemanager/v1:certificatemanager_cc_grpc"
)"
+ ["ces"]="@googleapis//google/cloud/ces/v1:ces_cc_grpc"
["channel"]="@googleapis//google/cloud/channel/v1:channel_cc_grpc"
["chronicle"]="@googleapis//google/cloud/chronicle/v1:chronicle_cc_grpc"
["cloudbuild"]="$(
diff --git a/generator/generator_config.textproto b/generator/generator_config.textproto
index fe4be3c266e6f..210c7b6e89a6f 100644
--- a/generator/generator_config.textproto
+++ b/generator/generator_config.textproto
@@ -666,6 +666,35 @@ service {
retryable_status_codes: ["kUnavailable"]
}
+# CES
+service {
+ service_proto_path: "google/cloud/ces/v1/agent_service.proto"
+ product_path: "google/cloud/ces/v1"
+ initial_copyright_year: "2026"
+ retryable_status_codes: ["kUnavailable"]
+}
+
+service {
+ service_proto_path: "google/cloud/ces/v1/widget_service.proto"
+ product_path: "google/cloud/ces/v1"
+ initial_copyright_year: "2026"
+ retryable_status_codes: ["kUnavailable"]
+}
+
+service {
+ service_proto_path: "google/cloud/ces/v1/tool_service.proto"
+ product_path: "google/cloud/ces/v1"
+ initial_copyright_year: "2026"
+ retryable_status_codes: ["kUnavailable"]
+}
+
+service {
+ service_proto_path: "google/cloud/ces/v1/session_service.proto"
+ product_path: "google/cloud/ces/v1"
+ initial_copyright_year: "2026"
+ retryable_status_codes: ["kUnavailable"]
+}
+
# Chronicle
service {
service_proto_path: "google/cloud/chronicle/v1/entity.proto"
diff --git a/generator/internal/format_method_comments.cc b/generator/internal/format_method_comments.cc
index 5b67477b08db3..b94c00e60ea78 100644
--- a/generator/internal/format_method_comments.cc
+++ b/generator/internal/format_method_comments.cc
@@ -192,9 +192,10 @@ MethodCommentSubstitution substitutions[] = {
{kDialogflowEsConversationsProto, kDialogflowEsConversationsCpp},
// From google/cloud/visionai/v1/warehouse.proto
+ // From google/cloud/ces/v1/session_service.proto
// The "---" are transformed into a element which breaks our docs
// process.
- {R"""(--- General Rules ---)""", R"""(General Rules:)"""},
+ {R"""(---)""", R"""(-)"""},
// Add Doxygen-style comments
{"\n", "\n ///"},
diff --git a/google/cloud/ces/BUILD.bazel b/google/cloud/ces/BUILD.bazel
new file mode 100644
index 0000000000000..64030d2315962
--- /dev/null
+++ b/google/cloud/ces/BUILD.bazel
@@ -0,0 +1,31 @@
+# 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
+#
+# https://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.
+
+load("//bazel:gapic.bzl", "cc_gapic_library")
+
+package(default_visibility = ["//visibility:private"])
+
+licenses(["notice"]) # Apache 2.0
+
+service_dirs = ["v1/"]
+
+googleapis_deps = [
+ "@googleapis//google/cloud/ces/v1:ces_cc_grpc",
+]
+
+cc_gapic_library(
+ name = "ces",
+ googleapis_deps = googleapis_deps,
+ service_dirs = service_dirs,
+)
diff --git a/google/cloud/ces/CMakeLists.txt b/google/cloud/ces/CMakeLists.txt
new file mode 100644
index 0000000000000..58fb7bc79cdee
--- /dev/null
+++ b/google/cloud/ces/CMakeLists.txt
@@ -0,0 +1,36 @@
+# ~~~
+# 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
+#
+# https://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.
+# ~~~
+
+include(GoogleCloudCppLibrary)
+
+google_cloud_cpp_add_gapic_library(
+ ces "Gemini Enterprise for Customer Experience API" SERVICE_DIRS "v1/")
+
+if (BUILD_TESTING AND GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS)
+ add_executable(ces_quickstart "quickstart/quickstart.cc")
+ target_link_libraries(ces_quickstart PRIVATE google-cloud-cpp::ces)
+ google_cloud_cpp_add_common_options(ces_quickstart)
+ add_test(
+ NAME ces_quickstart
+ COMMAND
+ cmake -P "${PROJECT_SOURCE_DIR}/cmake/quickstart-runner.cmake"
+ $ GOOGLE_CLOUD_PROJECT
+ GOOGLE_CLOUD_CPP_TEST_REGION)
+ set_tests_properties(
+ ces_quickstart
+ PROPERTIES LABELS "integration-test;quickstart" PASS_REGULAR_EXPRESSION
+ "Permanent error.*gcloud-cpp.retry.function=ListApps")
+endif ()
diff --git a/google/cloud/ces/README.md b/google/cloud/ces/README.md
new file mode 100644
index 0000000000000..22706c2382515
--- /dev/null
+++ b/google/cloud/ces/README.md
@@ -0,0 +1,58 @@
+# Gemini Enterprise for Customer Experience API C++ Client Library
+
+This directory contains an idiomatic C++ client library for the
+[Gemini Enterprise for Customer Experience API][cloud-service-docs].
+
+While this library is **GA**, please note that the Google Cloud C++ client
+libraries do **not** follow [Semantic Versioning](https://semver.org/).
+
+## Quickstart
+
+The [quickstart/](quickstart/README.md) directory contains a minimal environment
+to get started using this client library in a larger project. The following
+"Hello World" program is used in this quickstart, and should give you a taste of
+this library.
+
+
+
+```cc
+#include "google/cloud/ces/v1/agent_client.h"
+#include "google/cloud/location.h"
+#include
+
+int main(int argc, char* argv[]) try {
+ if (argc != 3) {
+ std::cerr << "Usage: " << argv[0] << " project-id location-id\n";
+ return 1;
+ }
+
+ auto const location = google::cloud::Location(argv[1], argv[2]);
+
+ namespace ces = ::google::cloud::ces_v1;
+ auto client = ces::AgentServiceClient(ces::MakeAgentServiceConnection());
+
+ for (auto r : client.ListApps(location.FullName())) {
+ if (!r) throw std::move(r).status();
+ std::cout << r->DebugString() << "\n";
+ }
+
+ return 0;
+} catch (google::cloud::Status const& status) {
+ std::cerr << "google::cloud::Status thrown: " << status << "\n";
+ return 1;
+}
+```
+
+
+
+## More Information
+
+- Official documentation about the
+ [Gemini Enterprise for Customer Experience API][cloud-service-docs] service
+- [Reference doxygen documentation][doxygen-link] for each release of this
+ client library
+- Detailed header comments in our [public `.h`][source-link] files
+
+[cloud-service-docs]: https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps
+[doxygen-link]: https://cloud.google.com/cpp/docs/reference/ces/latest/
+[source-link]: https://github.com/googleapis/google-cloud-cpp/tree/main/google/cloud/ces
diff --git a/google/cloud/ces/doc/environment-variables.dox b/google/cloud/ces/doc/environment-variables.dox
new file mode 100644
index 0000000000000..dabca87b6c348
--- /dev/null
+++ b/google/cloud/ces/doc/environment-variables.dox
@@ -0,0 +1,61 @@
+/*!
+@page ces-env Environment Variables
+
+A number of environment variables can be used to configure the behavior of
+the library. There are also functions to configure this behavior in code. The
+environment variables are convenient when troubleshooting problems.
+
+@section ces-env-endpoint Endpoint Overrides
+
+
+
+- `GOOGLE_CLOUD_CPP_AGENT_SERVICE_ENDPOINT=...` overrides the
+ `EndpointOption` (which defaults to "ces.googleapis.com")
+ used by `MakeAgentServiceConnection()`.
+
+- `GOOGLE_CLOUD_CPP_SESSION_SERVICE_ENDPOINT=...` overrides the
+ `EndpointOption` (which defaults to "ces.googleapis.com")
+ used by `MakeSessionServiceConnection()`.
+
+- `GOOGLE_CLOUD_CPP_TOOL_SERVICE_ENDPOINT=...` overrides the
+ `EndpointOption` (which defaults to "ces.googleapis.com")
+ used by `MakeToolServiceConnection()`.
+
+- `GOOGLE_CLOUD_CPP_WIDGET_SERVICE_ENDPOINT=...` overrides the
+ `EndpointOption` (which defaults to "ces.googleapis.com")
+ used by `MakeWidgetServiceConnection()`.
+
+
+
+@see google::cloud::EndpointOption
+
+@section ces-env-logging Logging
+
+`GOOGLE_CLOUD_CPP_ENABLE_TRACING=rpc`: turns on tracing for most gRPC
+calls. The library injects an additional Stub decorator that prints each gRPC
+request and response. Unless you have configured your own logging backend,
+you should also set `GOOGLE_CLOUD_CPP_ENABLE_CLOG` to produce any output on
+the program's console.
+
+@see google::cloud::LoggingComponentsOption
+
+`GOOGLE_CLOUD_CPP_TRACING_OPTIONS=...`: modifies the behavior of gRPC tracing,
+including whether messages will be output on multiple lines, or whether
+string/bytes fields will be truncated.
+
+@see google::cloud::GrpcTracingOptionsOption
+
+`GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes`: turns on logging in the library, basically
+the library always "logs" but the logging infrastructure has no backend to
+actually print anything until the application sets a backend or they set this
+environment variable.
+
+@see google::cloud::LogBackend
+@see google::cloud::LogSink
+
+@section ces-env-project Setting the Default Project
+
+`GOOGLE_CLOUD_PROJECT=...`: is used in examples and integration tests to
+configure the GCP project. This has no effect in the library.
+
+*/
diff --git a/google/cloud/ces/doc/main.dox b/google/cloud/ces/doc/main.dox
new file mode 100644
index 0000000000000..edda9ef02d7f2
--- /dev/null
+++ b/google/cloud/ces/doc/main.dox
@@ -0,0 +1,56 @@
+/*!
+
+@mainpage Gemini Enterprise for Customer Experience API C++ Client Library
+
+An idiomatic C++ client library for the [Gemini Enterprise for Customer Experience API][cloud-service-docs].
+
+
+
+While this library is **GA**, please note that the Google Cloud C++ client libraries do **not** follow
+[Semantic Versioning](https://semver.org/).
+
+@tableofcontents{HTML:2}
+
+## Quickstart
+
+The following shows the code that you'll run in the
+`google/cloud/ces/quickstart/` directory,
+which should give you a taste of the Gemini Enterprise for Customer Experience API C++ client library API.
+
+@snippet quickstart.cc all
+
+## Main classes
+
+
+This library offers multiple `*Client` classes, which are listed below. Each one
+of these classes exposes all the RPCs for a service as member functions of the
+class. This library groups multiple services because they are part of the same
+product or are often used together. A typical example may be the administrative
+and data plane operations for a single product.
+
+The library also has other classes that provide helpers, configuration
+parameters, and infrastructure to mock the `*Client` classes when testing your
+application.
+
+- [\c ces_v1::AgentServiceClient](@ref google::cloud::ces_v1::AgentServiceClient)
+- [\c ces_v1::SessionServiceClient](@ref google::cloud::ces_v1::SessionServiceClient)
+- [\c ces_v1::ToolServiceClient](@ref google::cloud::ces_v1::ToolServiceClient)
+- [\c ces_v1::WidgetServiceClient](@ref google::cloud::ces_v1::WidgetServiceClient)
+
+
+## More Information
+
+- @ref common-error-handling - describes how the library reports errors.
+- @ref ces-override-endpoint - describes how to override the default
+ endpoint.
+- @ref ces-override-authentication - describes how to change the
+ authentication credentials used by the library.
+- @ref ces-override-retry - describes how to change the default retry
+ policies.
+- @ref ces-env - describes environment variables that can configure the
+ behavior of the library.
+- @ref ces-override-universe-domain - describes how to override the default universe domain.
+
+[cloud-service-docs]: https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps
+
+*/
diff --git a/google/cloud/ces/doc/options.dox b/google/cloud/ces/doc/options.dox
new file mode 100644
index 0000000000000..86dc0ecaf31ab
--- /dev/null
+++ b/google/cloud/ces/doc/options.dox
@@ -0,0 +1,10 @@
+/*!
+@defgroup google-cloud-ces-options Gemini Enterprise for Customer Experience API Configuration Options
+
+This library uses the same mechanism (`google::cloud::Options`) and the common
+[options](@ref options) as all other C++ client libraries for its configuration.
+Some `*Option` classes, which are only used in this library, are documented in
+this page.
+
+@see @ref options - for an overview of client library configuration.
+*/
diff --git a/google/cloud/ces/doc/override-authentication.dox b/google/cloud/ces/doc/override-authentication.dox
new file mode 100644
index 0000000000000..c966661a1ed76
--- /dev/null
+++ b/google/cloud/ces/doc/override-authentication.dox
@@ -0,0 +1,60 @@
+/*!
+@page ces-override-authentication How to Override the Authentication Credentials
+
+Unless otherwise configured, the client libraries use
+[Application Default Credentials] to authenticate with Google Cloud Services.
+While this works for most applications, in some cases you may need to override
+this default. You can do so by providing the
+[UnifiedCredentialsOption](@ref google::cloud::UnifiedCredentialsOption)
+The following example shows how to explicitly load a service account key file:
+
+
+@snippet agent_client_samples.cc with-service-account
+
+Follow these links to find examples for other \c *Client classes:
+
+- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-service-account-snippet)
+- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-service-account-snippet)
+- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-service-account-snippet)
+- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-service-account-snippet)
+
+
+
+Keep in mind that we chose this as an example because it is relatively easy to
+understand. Consult the [Best practices for managing service account keys]
+guide for more details.
+
+@see @ref guac - for more information on the factory functions to create
+`google::cloud::Credentials` objects.
+
+[Best practices for managing service account keys]: https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys
+[Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
+
+*/
+
+//
+
+/*! @page ces_v1::AgentServiceClient-service-account-snippet Override ces_v1::AgentServiceClient Authentication Defaults
+
+@snippet google/cloud/ces/v1/samples/agent_client_samples.cc with-service-account
+
+*/
+
+/*! @page ces_v1::SessionServiceClient-service-account-snippet Override ces_v1::SessionServiceClient Authentication Defaults
+
+@snippet google/cloud/ces/v1/samples/session_client_samples.cc with-service-account
+
+*/
+
+/*! @page ces_v1::ToolServiceClient-service-account-snippet Override ces_v1::ToolServiceClient Authentication Defaults
+
+@snippet google/cloud/ces/v1/samples/tool_client_samples.cc with-service-account
+
+*/
+
+/*! @page ces_v1::WidgetServiceClient-service-account-snippet Override ces_v1::WidgetServiceClient Authentication Defaults
+
+@snippet google/cloud/ces/v1/samples/widget_client_samples.cc with-service-account
+
+*/
+//
diff --git a/google/cloud/ces/doc/override-endpoint.dox b/google/cloud/ces/doc/override-endpoint.dox
new file mode 100644
index 0000000000000..818fb9eeb73b8
--- /dev/null
+++ b/google/cloud/ces/doc/override-endpoint.dox
@@ -0,0 +1,50 @@
+/*!
+@page ces-override-endpoint How to Override the Default Endpoint
+
+In some cases, you may need to override the default endpoint used by the client
+library. Use the
+[EndpointOption](@ref google::cloud::EndpointOption) when initializing the
+client library to change this default.
+
+
+For example, this will override the default endpoint for `ces_v1::AgentServiceClient`:
+
+@snippet agent_client_samples.cc set-client-endpoint
+
+Follow these links to find examples for other \c *Client classes:
+
+- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-endpoint-snippet)
+- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-endpoint-snippet)
+- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-endpoint-snippet)
+- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-endpoint-snippet)
+
+
+
+*/
+
+//
+
+/*! @page ces_v1::AgentServiceClient-endpoint-snippet Override ces_v1::AgentServiceClient Endpoint Configuration
+
+@snippet google/cloud/ces/v1/samples/agent_client_samples.cc set-client-endpoint
+
+*/
+
+/*! @page ces_v1::SessionServiceClient-endpoint-snippet Override ces_v1::SessionServiceClient Endpoint Configuration
+
+@snippet google/cloud/ces/v1/samples/session_client_samples.cc set-client-endpoint
+
+*/
+
+/*! @page ces_v1::ToolServiceClient-endpoint-snippet Override ces_v1::ToolServiceClient Endpoint Configuration
+
+@snippet google/cloud/ces/v1/samples/tool_client_samples.cc set-client-endpoint
+
+*/
+
+/*! @page ces_v1::WidgetServiceClient-endpoint-snippet Override ces_v1::WidgetServiceClient Endpoint Configuration
+
+@snippet google/cloud/ces/v1/samples/widget_client_samples.cc set-client-endpoint
+
+*/
+//
diff --git a/google/cloud/ces/doc/override-retry-policies.dox b/google/cloud/ces/doc/override-retry-policies.dox
new file mode 100644
index 0000000000000..5e15b48437254
--- /dev/null
+++ b/google/cloud/ces/doc/override-retry-policies.dox
@@ -0,0 +1,151 @@
+/*!
+@page ces-override-retry Override Retry, Backoff, and Idempotency Policies
+
+When it is safe to do so, the library automatically retries requests that fail
+due to a transient error. The library then uses [exponential backoff] to backoff
+before trying again. Which operations are considered safe to retry, which
+errors are treated as transient failures, the details of the exponential backoff
+algorithm, and for how long the library retries are all configurable via
+policies.
+
+This document provides examples showing how to override the default policies.
+
+The policies can be set when the `*Connection` object is created. The library
+provides default policies for any policy that is not set. The application can
+also override some (or all) policies when the `*Client` object is created. This
+can be useful if multiple `*Client` objects share the same `*Connection` object,
+but you want different retry behavior in some of the clients. Finally, the
+application can override some retry policies when calling a specific member
+function.
+
+The library uses three different options to control the retry loop. The options
+have per-client names.
+
+@section ces-override-retry-retry-policy Configuring the transient errors and retry duration
+
+The `*RetryPolicyOption` controls:
+
+- Which errors are to be treated as transient errors.
+- How long the library will keep retrying transient errors.
+
+You can provide your own class for this option. The library also provides two
+built-in policies:
+
+- `*LimitedErrorCountRetryPolicy`: stops retrying after a specified number
+ of transient errors.
+- `*LimitedTimeRetryPolicy`: stops retrying after a specified time.
+
+Note that a library may have more than one version of these classes. Their name
+match the `*Client` and `*Connection` object they are intended to be used
+with. Some `*Client` objects treat different error codes as transient errors.
+In most cases, only [kUnavailable](@ref google::cloud::StatusCode) is treated
+as a transient error.
+
+@section ces-override-retry-backoff-policy Controlling the backoff algorithm
+
+The `*BackoffPolicyOption` controls how long the client library will wait
+before retrying a request that failed with a transient error. You can provide
+your own class for this option.
+
+The only built-in backoff policy is
+[`ExponentialBackoffPolicy`](@ref google::cloud::ExponentialBackoffPolicy).
+This class implements a truncated exponential backoff algorithm, with jitter.
+In summary, it doubles the current backoff time after each failure. The actual
+backoff time for an RPC is chosen at random, but never exceeds the current
+backoff. The current backoff is doubled after each failure, but never exceeds
+(or is "truncated") if it reaches a prescribed maximum.
+
+@section ces-override-retry-idempotency-policy Controlling which operations are retryable
+
+The `*IdempotencyPolicyOption` controls which requests are retryable, as some
+requests are never safe to retry.
+
+Only one built-in idempotency policy is provided by the library. The name
+matches the name of the client it is intended for. For example, `FooBarClient`
+will use `FooBarIdempotencyPolicy`. This policy is very conservative.
+
+@section ces-override-retry-example Example
+
+
+For example, this will override the retry policies for `ces_v1::AgentServiceClient`:
+
+@snippet agent_client_samples.cc set-retry-policy
+
+This assumes you have created a custom idempotency policy. Such as:
+
+@snippet agent_client_samples.cc custom-idempotency-policy
+
+This will override the polling policies for `ces_v1::AgentServiceClient`
+
+@snippet agent_client_samples.cc set-polling-policy
+
+
+Follow these links to find examples for other \c *Client classes:
+
+- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-retry-snippet)
+- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-retry-snippet)
+- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-retry-snippet)
+- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-retry-snippet)
+
+
+
+@section ces-override-retry-more-information More Information
+
+@see google::cloud::Options
+@see google::cloud::BackoffPolicy
+@see google::cloud::ExponentialBackoffPolicy
+
+[exponential backoff]: https://en.wikipedia.org/wiki/Exponential_backoff
+
+*/
+
+//
+
+/*! @page ces_v1::AgentServiceClient-retry-snippet Override ces_v1::AgentServiceClient Retry Policies
+
+This shows how to override the retry policies for ces_v1::AgentServiceClient:
+
+@snippet google/cloud/ces/v1/samples/agent_client_samples.cc set-retry-policy
+
+Assuming you have created a custom idempotency policy. Such as:
+
+@snippet google/cloud/ces/v1/samples/agent_client_samples.cc custom-idempotency-policy
+
+*/
+
+/*! @page ces_v1::SessionServiceClient-retry-snippet Override ces_v1::SessionServiceClient Retry Policies
+
+This shows how to override the retry policies for ces_v1::SessionServiceClient:
+
+@snippet google/cloud/ces/v1/samples/session_client_samples.cc set-retry-policy
+
+Assuming you have created a custom idempotency policy. Such as:
+
+@snippet google/cloud/ces/v1/samples/session_client_samples.cc custom-idempotency-policy
+
+*/
+
+/*! @page ces_v1::ToolServiceClient-retry-snippet Override ces_v1::ToolServiceClient Retry Policies
+
+This shows how to override the retry policies for ces_v1::ToolServiceClient:
+
+@snippet google/cloud/ces/v1/samples/tool_client_samples.cc set-retry-policy
+
+Assuming you have created a custom idempotency policy. Such as:
+
+@snippet google/cloud/ces/v1/samples/tool_client_samples.cc custom-idempotency-policy
+
+*/
+
+/*! @page ces_v1::WidgetServiceClient-retry-snippet Override ces_v1::WidgetServiceClient Retry Policies
+
+This shows how to override the retry policies for ces_v1::WidgetServiceClient:
+
+@snippet google/cloud/ces/v1/samples/widget_client_samples.cc set-retry-policy
+
+Assuming you have created a custom idempotency policy. Such as:
+
+@snippet google/cloud/ces/v1/samples/widget_client_samples.cc custom-idempotency-policy
+
+*/
+//
diff --git a/google/cloud/ces/doc/override-universe-domain.dox b/google/cloud/ces/doc/override-universe-domain.dox
new file mode 100644
index 0000000000000..5ff301d359767
--- /dev/null
+++ b/google/cloud/ces/doc/override-universe-domain.dox
@@ -0,0 +1,49 @@
+/*!
+@page ces-override-universe-domain How to Override the Default Universe Domain
+
+In some cases, you may need to override the default universe domain used by the
+client library. Use `AddUniverseDomainOption` when initializing the client
+library to change this default.
+
+
+For example, this will override the default universe domain for `ces_v1::AgentServiceClient`:
+
+@snippet agent_client_samples.cc set-client-universe-domain
+
+Follow these links to find examples for other \c *Client classes:
+
+- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-universe-domain-snippet)
+- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-universe-domain-snippet)
+- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-universe-domain-snippet)
+- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-universe-domain-snippet)
+
+
+
+*/
+
+//
+
+/*! @page ces_v1::AgentServiceClient-universe-domain-snippet Override ces_v1::AgentServiceClient Universe Domain
+
+@snippet google/cloud/ces/v1/samples/agent_client_samples.cc set-client-universe-domain
+
+*/
+
+/*! @page ces_v1::SessionServiceClient-universe-domain-snippet Override ces_v1::SessionServiceClient Universe Domain
+
+@snippet google/cloud/ces/v1/samples/session_client_samples.cc set-client-universe-domain
+
+*/
+
+/*! @page ces_v1::ToolServiceClient-universe-domain-snippet Override ces_v1::ToolServiceClient Universe Domain
+
+@snippet google/cloud/ces/v1/samples/tool_client_samples.cc set-client-universe-domain
+
+*/
+
+/*! @page ces_v1::WidgetServiceClient-universe-domain-snippet Override ces_v1::WidgetServiceClient Universe Domain
+
+@snippet google/cloud/ces/v1/samples/widget_client_samples.cc set-client-universe-domain
+
+*/
+//
diff --git a/google/cloud/ces/quickstart/.bazelrc b/google/cloud/ces/quickstart/.bazelrc
new file mode 100644
index 0000000000000..c884db46c2b4d
--- /dev/null
+++ b/google/cloud/ces/quickstart/.bazelrc
@@ -0,0 +1,30 @@
+# 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
+#
+# https://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.
+
+# Use host-OS-specific config lines from bazelrc files.
+build --enable_platform_specific_config=true
+
+# The project requires C++ >= 14. By default Bazel adds `-std=c++0x` which
+# disables C++14 features, even if the compilers defaults to C++ >= 14
+build:linux --cxxopt=-std=c++14
+build:macos --cxxopt=-std=c++14
+# Protobuf and gRPC require (or soon will require) C++14 to compile the "host"
+# targets, such as protoc and the grpc plugin.
+build:linux --host_cxxopt=-std=c++14
+build:macos --host_cxxopt=-std=c++14
+
+# Do not create the convenience links. They are inconvenient when the build
+# runs inside a docker image or if one builds a quickstart and then builds
+# the project separately.
+build --experimental_convenience_symlinks=ignore
diff --git a/google/cloud/ces/quickstart/BUILD.bazel b/google/cloud/ces/quickstart/BUILD.bazel
new file mode 100644
index 0000000000000..b2dff227bed3b
--- /dev/null
+++ b/google/cloud/ces/quickstart/BUILD.bazel
@@ -0,0 +1,25 @@
+# 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
+#
+# https://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.
+
+licenses(["notice"]) # Apache 2.0
+
+cc_binary(
+ name = "quickstart",
+ srcs = [
+ "quickstart.cc",
+ ],
+ deps = [
+ "@google_cloud_cpp//:ces",
+ ],
+)
diff --git a/google/cloud/ces/quickstart/CMakeLists.txt b/google/cloud/ces/quickstart/CMakeLists.txt
new file mode 100644
index 0000000000000..a7e65582e2519
--- /dev/null
+++ b/google/cloud/ces/quickstart/CMakeLists.txt
@@ -0,0 +1,32 @@
+# 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
+#
+# https://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.
+
+# This file shows how to use the Gemini Enterprise for Customer Experience API
+# C++ client library from a larger CMake project.
+
+cmake_minimum_required(VERSION 3.22...3.31)
+project(google-cloud-cpp-ces-quickstart CXX)
+
+find_package(google_cloud_cpp_ces REQUIRED)
+
+# MSVC requires some additional code to select the correct runtime library
+if (VCPKG_TARGET_TRIPLET MATCHES "-static$")
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")
+else ()
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL")
+endif ()
+
+# Define your targets.
+add_executable(quickstart quickstart.cc)
+target_link_libraries(quickstart google-cloud-cpp::ces)
diff --git a/google/cloud/ces/quickstart/Makefile b/google/cloud/ces/quickstart/Makefile
new file mode 100644
index 0000000000000..25de5e91ee8c4
--- /dev/null
+++ b/google/cloud/ces/quickstart/Makefile
@@ -0,0 +1,35 @@
+# 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
+#
+# https://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.
+
+# This is a minimal Makefile to show how to use the Gemini Enterprise for Customer Experience API C++ client
+# for developers who use make(1) as their build system.
+
+# The CXX, CXXFLAGS and CXXLD variables are hard-coded. These values work for
+# our tests, but applications would typically make them configurable parameters.
+CXX=g++
+CXXFLAGS=
+CXXLD=$(CXX)
+BIN=.
+
+all: $(BIN)/quickstart
+
+# Configuration variables to compile and link against the Gemini Enterprise for Customer Experience API C++
+# client library.
+CLIENT_MODULE := google_cloud_cpp_ces
+CLIENT_CXXFLAGS := $(shell pkg-config $(CLIENT_MODULE) --cflags)
+CLIENT_CXXLDFLAGS := $(shell pkg-config $(CLIENT_MODULE) --libs-only-L)
+CLIENT_LIBS := $(shell pkg-config $(CLIENT_MODULE) --libs-only-l)
+
+$(BIN)/quickstart: quickstart.cc
+ $(CXXLD) $(CXXFLAGS) $(CLIENT_CXXFLAGS) $(CLIENT_CXXLDFLAGS) -o $@ $^ $(CLIENT_LIBS)
diff --git a/google/cloud/ces/quickstart/README.md b/google/cloud/ces/quickstart/README.md
new file mode 100644
index 0000000000000..dbabddbe94053
--- /dev/null
+++ b/google/cloud/ces/quickstart/README.md
@@ -0,0 +1,137 @@
+# HOWTO: using the Gemini Enterprise for Customer Experience API C++ client in your project
+
+This directory contains small examples showing how to use the Gemini Enterprise
+for Customer Experience API C++ client library in your own project. These
+instructions assume that you have some experience as a C++ developer and that
+you have a working C++ toolchain (compiler, linker, etc.) installed on your
+platform.
+
+- Packaging maintainers or developers who prefer to install the library in a
+ fixed directory (such as `/usr/local` or `/opt`) should consult the
+ [packaging guide](/doc/packaging.md).
+- Developers who prefer using a package manager such as
+ [vcpkg](https://vcpkg.io), or [Conda](https://conda.io), should follow the
+ instructions for their package manager.
+- Developers wanting to use the libraries as part of a larger CMake or Bazel
+ project should consult the current document. Note that there are similar
+ documents for each library in their corresponding directories.
+- Developers wanting to compile the library just to run some examples or tests
+ should consult the
+ [building and installing](/README.md#building-and-installing) section of the
+ top-level README file.
+- Contributors and developers to `google-cloud-cpp` should consult the guide to
+ [set up a development workstation][howto-setup-dev-workstation].
+
+## Before you begin
+
+To run the quickstart examples you will need a working Google Cloud Platform
+(GCP) project.
+
+## Configuring authentication for the C++ Client Library
+
+Like most Google Cloud Platform (GCP) services, Gemini Enterprise for Customer
+Experience API requires that your application authenticates with the service
+before accessing any data. If you are not familiar with GCP authentication
+please take this opportunity to review the
+[Authentication methods at Google][authentication-quickstart].
+
+## Using with Bazel
+
+> :warning: If you are using Windows or macOS there are additional instructions
+> at the end of this document.
+
+1. Install Bazel using [the instructions][bazel-install] from the `bazel.build`
+ website.
+
+1. Compile this example using Bazel:
+
+ ```bash
+ cd $HOME/google-cloud-cpp/google/cloud/ces/quickstart
+ bazel build ...
+ ```
+
+ Note that Bazel automatically downloads and compiles all dependencies of the
+ project. As it is often the case with C++ libraries, compiling these
+ dependencies may take several minutes.
+
+1. Run the example, changing the placeholder(s) to appropriate values:
+
+ ```bash
+ bazel run :quickstart -- [...]
+ ```
+
+## Using with CMake
+
+> :warning: If you are using Windows or macOS there are additional instructions
+> at the end of this document.
+
+1. Install CMake. The package managers for most Linux distributions include a
+ package for CMake. Likewise, you can install CMake on Windows using a package
+ manager such as [chocolatey][choco-cmake-link], and on macOS using
+ [homebrew][homebrew-cmake-link]. You can also obtain the software directly
+ from the [cmake.org](https://cmake.org/download/).
+
+1. Install the dependencies with your favorite tools. As an example, if you use
+ [vcpkg](https://github.com/Microsoft/vcpkg.git):
+
+ ```bash
+ cd $HOME/vcpkg
+ ./vcpkg install google-cloud-cpp[core,ces]
+ ```
+
+ Note that, as it is often the case with C++ libraries, compiling these
+ dependencies may take several minutes.
+
+1. Configure CMake, if necessary, configure the directory where you installed
+ the dependencies:
+
+ ```bash
+ cd $HOME/google-cloud-cpp/google/cloud/ces/quickstart
+ cmake -S . -B .build -DCMAKE_TOOLCHAIN_FILE=$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake
+ cmake --build .build
+ ```
+
+1. Run the example, changing the placeholder(s) to appropriate values:
+
+ ```bash
+ .build/quickstart [...]
+ ```
+
+## Platform Specific Notes
+
+### macOS
+
+gRPC [requires][grpc-roots-pem-bug] an environment variable to configure the
+trust store for SSL certificates, you can download and configure this using:
+
+```bash
+curl -Lo roots.pem https://pki.google.com/roots.pem
+export GRPC_DEFAULT_SSL_ROOTS_FILE_PATH="$PWD/roots.pem"
+```
+
+### Windows
+
+Bazel tends to create very long file names and paths. You may need to use a
+short directory to store the build output, such as `c:\b`, and instruct Bazel to
+use it via:
+
+```shell
+bazel --output_user_root=c:\b build ...
+```
+
+gRPC [requires][grpc-roots-pem-bug] an environment variable to configure the
+trust store for SSL certificates, you can download and configure this using:
+
+```console
+@powershell -NoProfile -ExecutionPolicy unrestricted -Command ^
+ (new-object System.Net.WebClient).Downloadfile( ^
+ 'https://pki.google.com/roots.pem', 'roots.pem')
+set GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=%cd%\roots.pem
+```
+
+[authentication-quickstart]: https://cloud.google.com/docs/authentication/client-libraries "Authenticate for using client libraries"
+[bazel-install]: https://docs.bazel.build/versions/main/install.html
+[choco-cmake-link]: https://chocolatey.org/packages/cmake
+[grpc-roots-pem-bug]: https://github.com/grpc/grpc/issues/16571
+[homebrew-cmake-link]: https://formulae.brew.sh/formula/cmake
+[howto-setup-dev-workstation]: /doc/contributor/howto-guide-setup-development-workstation.md
diff --git a/google/cloud/ces/quickstart/WORKSPACE.bazel b/google/cloud/ces/quickstart/WORKSPACE.bazel
new file mode 100644
index 0000000000000..d54072a7cc7af
--- /dev/null
+++ b/google/cloud/ces/quickstart/WORKSPACE.bazel
@@ -0,0 +1,53 @@
+# 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
+#
+# https://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.
+
+# A minimal WORKSPACE file showing how to use the Gemini Enterprise for Customer Experience API
+# C++ client library in Bazel-based projects.
+workspace(name = "qs")
+
+# Add the necessary Starlark functions to fetch google-cloud-cpp.
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+# Fetch the Google Cloud C++ libraries.
+# NOTE: Update this version and SHA256 as needed.
+http_archive(
+ name = "google_cloud_cpp",
+ sha256 = "699955112a4c57ae9111fbadeff1698674a1762acd77daf36360e6dfc227dc93",
+ strip_prefix = "google-cloud-cpp-2.42.0",
+ url = "https://github.com/googleapis/google-cloud-cpp/archive/v2.42.0.tar.gz",
+)
+
+load("@google_cloud_cpp//bazel:workspace0.bzl", "gl_cpp_workspace0")
+
+gl_cpp_workspace0()
+
+load("@google_cloud_cpp//bazel:workspace1.bzl", "gl_cpp_workspace1")
+
+gl_cpp_workspace1()
+
+load("@google_cloud_cpp//bazel:workspace2.bzl", "gl_cpp_workspace2")
+
+gl_cpp_workspace2()
+
+load("@google_cloud_cpp//bazel:workspace3.bzl", "gl_cpp_workspace3")
+
+gl_cpp_workspace3()
+
+load("@google_cloud_cpp//bazel:workspace4.bzl", "gl_cpp_workspace4")
+
+gl_cpp_workspace4()
+
+load("@google_cloud_cpp//bazel:workspace5.bzl", "gl_cpp_workspace5")
+
+gl_cpp_workspace5()
diff --git a/google/cloud/ces/quickstart/quickstart.cc b/google/cloud/ces/quickstart/quickstart.cc
new file mode 100644
index 0000000000000..d44947feeff5d
--- /dev/null
+++ b/google/cloud/ces/quickstart/quickstart.cc
@@ -0,0 +1,41 @@
+// 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
+//
+// https://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.
+
+//! [all]
+#include "google/cloud/ces/v1/agent_client.h"
+#include "google/cloud/location.h"
+#include
+
+int main(int argc, char* argv[]) try {
+ if (argc != 3) {
+ std::cerr << "Usage: " << argv[0] << " project-id location-id\n";
+ return 1;
+ }
+
+ auto const location = google::cloud::Location(argv[1], argv[2]);
+
+ namespace ces = ::google::cloud::ces_v1;
+ auto client = ces::AgentServiceClient(ces::MakeAgentServiceConnection());
+
+ for (auto r : client.ListApps(location.FullName())) {
+ if (!r) throw std::move(r).status();
+ std::cout << r->DebugString() << "\n";
+ }
+
+ return 0;
+} catch (google::cloud::Status const& status) {
+ std::cerr << "google::cloud::Status thrown: " << status << "\n";
+ return 1;
+}
+//! [all]
diff --git a/google/cloud/ces/v1/.repo-metadata.json b/google/cloud/ces/v1/.repo-metadata.json
new file mode 100644
index 0000000000000..1c8a196aa718b
--- /dev/null
+++ b/google/cloud/ces/v1/.repo-metadata.json
@@ -0,0 +1,14 @@
+{
+ "api_id": "ces.googleapis.com",
+ "api_shortname": "ces",
+ "client_documentation": "https://cloud.google.com/cpp/docs/reference/ces/latest",
+ "distribution_name": "google-cloud-cpp",
+ "issue_tracker": "https://issuetracker.google.com/issues?q=componentid:1157150%20status=open",
+ "language": "cpp",
+ "library_type": "GAPIC_AUTO",
+ "name_pretty": "Gemini Enterprise for Customer Experience API",
+ "product_documentation": "https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps",
+ "release_level": "stable",
+ "repo": "googleapis/google-cloud-cpp",
+ "requires_billing": true
+}
diff --git a/google/cloud/ces/v1/agent_client.cc b/google/cloud/ces/v1/agent_client.cc
new file mode 100644
index 0000000000000..615a0c041a50b
--- /dev/null
+++ b/google/cloud/ces/v1/agent_client.cc
@@ -0,0 +1,1087 @@
+// 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
+//
+// https://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.
+
+// Generated by the Codegen C++ plugin.
+// If you make any local changes, they will be lost.
+// source: google/cloud/ces/v1/agent_service.proto
+
+#include "google/cloud/ces/v1/agent_client.h"
+#include
+#include
+
+namespace google {
+namespace cloud {
+namespace ces_v1 {
+GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
+
+AgentServiceClient::AgentServiceClient(
+ std::shared_ptr connection, Options opts)
+ : connection_(std::move(connection)),
+ options_(
+ internal::MergeOptions(std::move(opts), connection_->options())) {}
+AgentServiceClient::~AgentServiceClient() = default;
+
+StreamRange AgentServiceClient::ListApps(
+ std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListAppsRequest request;
+ request.set_parent(parent);
+ return connection_->ListApps(request);
+}
+
+StreamRange AgentServiceClient::ListApps(
+ google::cloud::ces::v1::ListAppsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListApps(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetApp(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetAppRequest request;
+ request.set_name(name);
+ return connection_->GetApp(request);
+}
+
+StatusOr AgentServiceClient::GetApp(
+ google::cloud::ces::v1::GetAppRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetApp(request);
+}
+
+future> AgentServiceClient::CreateApp(
+ std::string const& parent, google::cloud::ces::v1::App const& app,
+ std::string const& app_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAppRequest request;
+ request.set_parent(parent);
+ *request.mutable_app() = app;
+ request.set_app_id(app_id);
+ return connection_->CreateApp(request);
+}
+
+StatusOr AgentServiceClient::CreateApp(
+ NoAwaitTag, std::string const& parent,
+ google::cloud::ces::v1::App const& app, std::string const& app_id,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAppRequest request;
+ request.set_parent(parent);
+ *request.mutable_app() = app;
+ request.set_app_id(app_id);
+ return connection_->CreateApp(NoAwaitTag{}, request);
+}
+
+future> AgentServiceClient::CreateApp(
+ std::string const& parent, google::cloud::ces::v1::App const& app,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAppRequest request;
+ request.set_parent(parent);
+ *request.mutable_app() = app;
+ return connection_->CreateApp(request);
+}
+
+StatusOr AgentServiceClient::CreateApp(
+ NoAwaitTag, std::string const& parent,
+ google::cloud::ces::v1::App const& app, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAppRequest request;
+ request.set_parent(parent);
+ *request.mutable_app() = app;
+ return connection_->CreateApp(NoAwaitTag{}, request);
+}
+
+future> AgentServiceClient::CreateApp(
+ google::cloud::ces::v1::CreateAppRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateApp(request);
+}
+
+StatusOr AgentServiceClient::CreateApp(
+ NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateApp(NoAwaitTag{}, request);
+}
+
+future> AgentServiceClient::CreateApp(
+ google::longrunning::Operation const& operation, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateApp(operation);
+}
+
+StatusOr AgentServiceClient::UpdateApp(
+ google::cloud::ces::v1::App const& app,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateAppRequest request;
+ *request.mutable_app() = app;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateApp(request);
+}
+
+StatusOr AgentServiceClient::UpdateApp(
+ google::cloud::ces::v1::UpdateAppRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateApp(request);
+}
+
+future>
+AgentServiceClient::DeleteApp(std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteAppRequest request;
+ request.set_name(name);
+ return connection_->DeleteApp(request);
+}
+
+StatusOr AgentServiceClient::DeleteApp(
+ NoAwaitTag, std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteAppRequest request;
+ request.set_name(name);
+ return connection_->DeleteApp(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::DeleteApp(
+ google::cloud::ces::v1::DeleteAppRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteApp(request);
+}
+
+StatusOr AgentServiceClient::DeleteApp(
+ NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteApp(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::DeleteApp(google::longrunning::Operation const& operation,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteApp(operation);
+}
+
+future>
+AgentServiceClient::ExportApp(std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ExportAppRequest request;
+ request.set_name(name);
+ return connection_->ExportApp(request);
+}
+
+StatusOr AgentServiceClient::ExportApp(
+ NoAwaitTag, std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ExportAppRequest request;
+ request.set_name(name);
+ return connection_->ExportApp(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::ExportApp(
+ google::cloud::ces::v1::ExportAppRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ExportApp(request);
+}
+
+StatusOr AgentServiceClient::ExportApp(
+ NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ExportApp(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::ExportApp(google::longrunning::Operation const& operation,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ExportApp(operation);
+}
+
+future>
+AgentServiceClient::ImportApp(std::string const& parent,
+ std::string const& display_name,
+ std::string const& app_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ImportAppRequest request;
+ request.set_parent(parent);
+ request.set_display_name(display_name);
+ request.set_app_id(app_id);
+ return connection_->ImportApp(request);
+}
+
+StatusOr AgentServiceClient::ImportApp(
+ NoAwaitTag, std::string const& parent, std::string const& display_name,
+ std::string const& app_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ImportAppRequest request;
+ request.set_parent(parent);
+ request.set_display_name(display_name);
+ request.set_app_id(app_id);
+ return connection_->ImportApp(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::ImportApp(
+ google::cloud::ces::v1::ImportAppRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ImportApp(request);
+}
+
+StatusOr AgentServiceClient::ImportApp(
+ NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ImportApp(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::ImportApp(google::longrunning::Operation const& operation,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ImportApp(operation);
+}
+
+StreamRange AgentServiceClient::ListAgents(
+ std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListAgentsRequest request;
+ request.set_parent(parent);
+ return connection_->ListAgents(request);
+}
+
+StreamRange AgentServiceClient::ListAgents(
+ google::cloud::ces::v1::ListAgentsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListAgents(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetAgent(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetAgentRequest request;
+ request.set_name(name);
+ return connection_->GetAgent(request);
+}
+
+StatusOr AgentServiceClient::GetAgent(
+ google::cloud::ces::v1::GetAgentRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetAgent(request);
+}
+
+StatusOr AgentServiceClient::CreateAgent(
+ std::string const& parent, google::cloud::ces::v1::Agent const& agent,
+ std::string const& agent_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAgentRequest request;
+ request.set_parent(parent);
+ *request.mutable_agent() = agent;
+ request.set_agent_id(agent_id);
+ return connection_->CreateAgent(request);
+}
+
+StatusOr AgentServiceClient::CreateAgent(
+ std::string const& parent, google::cloud::ces::v1::Agent const& agent,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAgentRequest request;
+ request.set_parent(parent);
+ *request.mutable_agent() = agent;
+ return connection_->CreateAgent(request);
+}
+
+StatusOr AgentServiceClient::CreateAgent(
+ google::cloud::ces::v1::CreateAgentRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateAgent(request);
+}
+
+StatusOr AgentServiceClient::UpdateAgent(
+ google::cloud::ces::v1::Agent const& agent,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateAgentRequest request;
+ *request.mutable_agent() = agent;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateAgent(request);
+}
+
+StatusOr AgentServiceClient::UpdateAgent(
+ google::cloud::ces::v1::UpdateAgentRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateAgent(request);
+}
+
+Status AgentServiceClient::DeleteAgent(std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteAgentRequest request;
+ request.set_name(name);
+ return connection_->DeleteAgent(request);
+}
+
+Status AgentServiceClient::DeleteAgent(
+ google::cloud::ces::v1::DeleteAgentRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteAgent(request);
+}
+
+StreamRange AgentServiceClient::ListExamples(
+ std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListExamplesRequest request;
+ request.set_parent(parent);
+ return connection_->ListExamples(request);
+}
+
+StreamRange AgentServiceClient::ListExamples(
+ google::cloud::ces::v1::ListExamplesRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListExamples(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetExample(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetExampleRequest request;
+ request.set_name(name);
+ return connection_->GetExample(request);
+}
+
+StatusOr AgentServiceClient::GetExample(
+ google::cloud::ces::v1::GetExampleRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetExample(request);
+}
+
+StatusOr AgentServiceClient::CreateExample(
+ std::string const& parent, google::cloud::ces::v1::Example const& example,
+ std::string const& example_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateExampleRequest request;
+ request.set_parent(parent);
+ *request.mutable_example() = example;
+ request.set_example_id(example_id);
+ return connection_->CreateExample(request);
+}
+
+StatusOr AgentServiceClient::CreateExample(
+ std::string const& parent, google::cloud::ces::v1::Example const& example,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateExampleRequest request;
+ request.set_parent(parent);
+ *request.mutable_example() = example;
+ return connection_->CreateExample(request);
+}
+
+StatusOr AgentServiceClient::CreateExample(
+ google::cloud::ces::v1::CreateExampleRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateExample(request);
+}
+
+StatusOr AgentServiceClient::UpdateExample(
+ google::cloud::ces::v1::Example const& example,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateExampleRequest request;
+ *request.mutable_example() = example;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateExample(request);
+}
+
+StatusOr AgentServiceClient::UpdateExample(
+ google::cloud::ces::v1::UpdateExampleRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateExample(request);
+}
+
+Status AgentServiceClient::DeleteExample(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteExampleRequest request;
+ request.set_name(name);
+ return connection_->DeleteExample(request);
+}
+
+Status AgentServiceClient::DeleteExample(
+ google::cloud::ces::v1::DeleteExampleRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteExample(request);
+}
+
+StreamRange AgentServiceClient::ListTools(
+ std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListToolsRequest request;
+ request.set_parent(parent);
+ return connection_->ListTools(request);
+}
+
+StreamRange AgentServiceClient::ListTools(
+ google::cloud::ces::v1::ListToolsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListTools(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetTool(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetToolRequest request;
+ request.set_name(name);
+ return connection_->GetTool(request);
+}
+
+StatusOr AgentServiceClient::GetTool(
+ google::cloud::ces::v1::GetToolRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetTool(request);
+}
+
+StreamRange
+AgentServiceClient::ListConversations(std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListConversationsRequest request;
+ request.set_parent(parent);
+ return connection_->ListConversations(request);
+}
+
+StreamRange
+AgentServiceClient::ListConversations(
+ google::cloud::ces::v1::ListConversationsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListConversations(std::move(request));
+}
+
+StatusOr
+AgentServiceClient::GetConversation(std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetConversationRequest request;
+ request.set_name(name);
+ return connection_->GetConversation(request);
+}
+
+StatusOr
+AgentServiceClient::GetConversation(
+ google::cloud::ces::v1::GetConversationRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetConversation(request);
+}
+
+Status AgentServiceClient::DeleteConversation(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteConversationRequest request;
+ request.set_name(name);
+ return connection_->DeleteConversation(request);
+}
+
+Status AgentServiceClient::DeleteConversation(
+ google::cloud::ces::v1::DeleteConversationRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteConversation(request);
+}
+
+future>
+AgentServiceClient::BatchDeleteConversations(std::string const& parent,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::BatchDeleteConversationsRequest request;
+ request.set_parent(parent);
+ return connection_->BatchDeleteConversations(request);
+}
+
+StatusOr
+AgentServiceClient::BatchDeleteConversations(NoAwaitTag,
+ std::string const& parent,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::BatchDeleteConversationsRequest request;
+ request.set_parent(parent);
+ return connection_->BatchDeleteConversations(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::BatchDeleteConversations(
+ google::cloud::ces::v1::BatchDeleteConversationsRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->BatchDeleteConversations(request);
+}
+
+StatusOr
+AgentServiceClient::BatchDeleteConversations(
+ NoAwaitTag,
+ google::cloud::ces::v1::BatchDeleteConversationsRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->BatchDeleteConversations(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::BatchDeleteConversations(
+ google::longrunning::Operation const& operation, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->BatchDeleteConversations(operation);
+}
+
+StatusOr AgentServiceClient::CreateTool(
+ std::string const& parent, google::cloud::ces::v1::Tool const& tool,
+ std::string const& tool_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateToolRequest request;
+ request.set_parent(parent);
+ *request.mutable_tool() = tool;
+ request.set_tool_id(tool_id);
+ return connection_->CreateTool(request);
+}
+
+StatusOr AgentServiceClient::CreateTool(
+ std::string const& parent, google::cloud::ces::v1::Tool const& tool,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateToolRequest request;
+ request.set_parent(parent);
+ *request.mutable_tool() = tool;
+ return connection_->CreateTool(request);
+}
+
+StatusOr AgentServiceClient::CreateTool(
+ google::cloud::ces::v1::CreateToolRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateTool(request);
+}
+
+StatusOr AgentServiceClient::UpdateTool(
+ google::cloud::ces::v1::Tool const& tool,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateToolRequest request;
+ *request.mutable_tool() = tool;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateTool(request);
+}
+
+StatusOr AgentServiceClient::UpdateTool(
+ google::cloud::ces::v1::UpdateToolRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateTool(request);
+}
+
+Status AgentServiceClient::DeleteTool(std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteToolRequest request;
+ request.set_name(name);
+ return connection_->DeleteTool(request);
+}
+
+Status AgentServiceClient::DeleteTool(
+ google::cloud::ces::v1::DeleteToolRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteTool(request);
+}
+
+StreamRange
+AgentServiceClient::ListGuardrails(std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListGuardrailsRequest request;
+ request.set_parent(parent);
+ return connection_->ListGuardrails(request);
+}
+
+StreamRange
+AgentServiceClient::ListGuardrails(
+ google::cloud::ces::v1::ListGuardrailsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListGuardrails(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetGuardrail(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetGuardrailRequest request;
+ request.set_name(name);
+ return connection_->GetGuardrail(request);
+}
+
+StatusOr AgentServiceClient::GetGuardrail(
+ google::cloud::ces::v1::GetGuardrailRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetGuardrail(request);
+}
+
+StatusOr AgentServiceClient::CreateGuardrail(
+ std::string const& parent,
+ google::cloud::ces::v1::Guardrail const& guardrail,
+ std::string const& guardrail_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateGuardrailRequest request;
+ request.set_parent(parent);
+ *request.mutable_guardrail() = guardrail;
+ request.set_guardrail_id(guardrail_id);
+ return connection_->CreateGuardrail(request);
+}
+
+StatusOr AgentServiceClient::CreateGuardrail(
+ std::string const& parent,
+ google::cloud::ces::v1::Guardrail const& guardrail, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateGuardrailRequest request;
+ request.set_parent(parent);
+ *request.mutable_guardrail() = guardrail;
+ return connection_->CreateGuardrail(request);
+}
+
+StatusOr AgentServiceClient::CreateGuardrail(
+ google::cloud::ces::v1::CreateGuardrailRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateGuardrail(request);
+}
+
+StatusOr AgentServiceClient::UpdateGuardrail(
+ google::cloud::ces::v1::Guardrail const& guardrail,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateGuardrailRequest request;
+ *request.mutable_guardrail() = guardrail;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateGuardrail(request);
+}
+
+StatusOr AgentServiceClient::UpdateGuardrail(
+ google::cloud::ces::v1::UpdateGuardrailRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateGuardrail(request);
+}
+
+Status AgentServiceClient::DeleteGuardrail(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteGuardrailRequest request;
+ request.set_name(name);
+ return connection_->DeleteGuardrail(request);
+}
+
+Status AgentServiceClient::DeleteGuardrail(
+ google::cloud::ces::v1::DeleteGuardrailRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteGuardrail(request);
+}
+
+StreamRange
+AgentServiceClient::ListDeployments(std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListDeploymentsRequest request;
+ request.set_parent(parent);
+ return connection_->ListDeployments(request);
+}
+
+StreamRange
+AgentServiceClient::ListDeployments(
+ google::cloud::ces::v1::ListDeploymentsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListDeployments(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetDeployment(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetDeploymentRequest request;
+ request.set_name(name);
+ return connection_->GetDeployment(request);
+}
+
+StatusOr AgentServiceClient::GetDeployment(
+ google::cloud::ces::v1::GetDeploymentRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetDeployment(request);
+}
+
+StatusOr
+AgentServiceClient::CreateDeployment(
+ std::string const& parent,
+ google::cloud::ces::v1::Deployment const& deployment,
+ std::string const& deployment_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateDeploymentRequest request;
+ request.set_parent(parent);
+ *request.mutable_deployment() = deployment;
+ request.set_deployment_id(deployment_id);
+ return connection_->CreateDeployment(request);
+}
+
+StatusOr
+AgentServiceClient::CreateDeployment(
+ std::string const& parent,
+ google::cloud::ces::v1::Deployment const& deployment, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateDeploymentRequest request;
+ request.set_parent(parent);
+ *request.mutable_deployment() = deployment;
+ return connection_->CreateDeployment(request);
+}
+
+StatusOr
+AgentServiceClient::CreateDeployment(
+ google::cloud::ces::v1::CreateDeploymentRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateDeployment(request);
+}
+
+StatusOr
+AgentServiceClient::UpdateDeployment(
+ google::cloud::ces::v1::Deployment const& deployment,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateDeploymentRequest request;
+ *request.mutable_deployment() = deployment;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateDeployment(request);
+}
+
+StatusOr
+AgentServiceClient::UpdateDeployment(
+ google::cloud::ces::v1::UpdateDeploymentRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateDeployment(request);
+}
+
+Status AgentServiceClient::DeleteDeployment(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteDeploymentRequest request;
+ request.set_name(name);
+ return connection_->DeleteDeployment(request);
+}
+
+Status AgentServiceClient::DeleteDeployment(
+ google::cloud::ces::v1::DeleteDeploymentRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteDeployment(request);
+}
+
+StreamRange AgentServiceClient::ListToolsets(
+ std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListToolsetsRequest request;
+ request.set_parent(parent);
+ return connection_->ListToolsets(request);
+}
+
+StreamRange AgentServiceClient::ListToolsets(
+ google::cloud::ces::v1::ListToolsetsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListToolsets(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetToolset(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetToolsetRequest request;
+ request.set_name(name);
+ return connection_->GetToolset(request);
+}
+
+StatusOr AgentServiceClient::GetToolset(
+ google::cloud::ces::v1::GetToolsetRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetToolset(request);
+}
+
+StatusOr AgentServiceClient::CreateToolset(
+ std::string const& parent, google::cloud::ces::v1::Toolset const& toolset,
+ std::string const& toolset_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateToolsetRequest request;
+ request.set_parent(parent);
+ *request.mutable_toolset() = toolset;
+ request.set_toolset_id(toolset_id);
+ return connection_->CreateToolset(request);
+}
+
+StatusOr AgentServiceClient::CreateToolset(
+ std::string const& parent, google::cloud::ces::v1::Toolset const& toolset,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateToolsetRequest request;
+ request.set_parent(parent);
+ *request.mutable_toolset() = toolset;
+ return connection_->CreateToolset(request);
+}
+
+StatusOr AgentServiceClient::CreateToolset(
+ google::cloud::ces::v1::CreateToolsetRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateToolset(request);
+}
+
+StatusOr AgentServiceClient::UpdateToolset(
+ google::cloud::ces::v1::Toolset const& toolset,
+ google::protobuf::FieldMask const& update_mask, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::UpdateToolsetRequest request;
+ *request.mutable_toolset() = toolset;
+ *request.mutable_update_mask() = update_mask;
+ return connection_->UpdateToolset(request);
+}
+
+StatusOr AgentServiceClient::UpdateToolset(
+ google::cloud::ces::v1::UpdateToolsetRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->UpdateToolset(request);
+}
+
+Status AgentServiceClient::DeleteToolset(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteToolsetRequest request;
+ request.set_name(name);
+ return connection_->DeleteToolset(request);
+}
+
+Status AgentServiceClient::DeleteToolset(
+ google::cloud::ces::v1::DeleteToolsetRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteToolset(request);
+}
+
+StreamRange
+AgentServiceClient::ListAppVersions(std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListAppVersionsRequest request;
+ request.set_parent(parent);
+ return connection_->ListAppVersions(request);
+}
+
+StreamRange
+AgentServiceClient::ListAppVersions(
+ google::cloud::ces::v1::ListAppVersionsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListAppVersions(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetAppVersion(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetAppVersionRequest request;
+ request.set_name(name);
+ return connection_->GetAppVersion(request);
+}
+
+StatusOr AgentServiceClient::GetAppVersion(
+ google::cloud::ces::v1::GetAppVersionRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetAppVersion(request);
+}
+
+StatusOr
+AgentServiceClient::CreateAppVersion(
+ std::string const& parent,
+ google::cloud::ces::v1::AppVersion const& app_version,
+ std::string const& app_version_id, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAppVersionRequest request;
+ request.set_parent(parent);
+ *request.mutable_app_version() = app_version;
+ request.set_app_version_id(app_version_id);
+ return connection_->CreateAppVersion(request);
+}
+
+StatusOr
+AgentServiceClient::CreateAppVersion(
+ std::string const& parent,
+ google::cloud::ces::v1::AppVersion const& app_version, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::CreateAppVersionRequest request;
+ request.set_parent(parent);
+ *request.mutable_app_version() = app_version;
+ return connection_->CreateAppVersion(request);
+}
+
+StatusOr
+AgentServiceClient::CreateAppVersion(
+ google::cloud::ces::v1::CreateAppVersionRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CreateAppVersion(request);
+}
+
+Status AgentServiceClient::DeleteAppVersion(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::DeleteAppVersionRequest request;
+ request.set_name(name);
+ return connection_->DeleteAppVersion(request);
+}
+
+Status AgentServiceClient::DeleteAppVersion(
+ google::cloud::ces::v1::DeleteAppVersionRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteAppVersion(request);
+}
+
+future>
+AgentServiceClient::RestoreAppVersion(std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::RestoreAppVersionRequest request;
+ request.set_name(name);
+ return connection_->RestoreAppVersion(request);
+}
+
+StatusOr AgentServiceClient::RestoreAppVersion(
+ NoAwaitTag, std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::RestoreAppVersionRequest request;
+ request.set_name(name);
+ return connection_->RestoreAppVersion(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::RestoreAppVersion(
+ google::cloud::ces::v1::RestoreAppVersionRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->RestoreAppVersion(request);
+}
+
+StatusOr AgentServiceClient::RestoreAppVersion(
+ NoAwaitTag, google::cloud::ces::v1::RestoreAppVersionRequest const& request,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->RestoreAppVersion(NoAwaitTag{}, request);
+}
+
+future>
+AgentServiceClient::RestoreAppVersion(
+ google::longrunning::Operation const& operation, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->RestoreAppVersion(operation);
+}
+
+StreamRange
+AgentServiceClient::ListChangelogs(std::string const& parent, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::ListChangelogsRequest request;
+ request.set_parent(parent);
+ return connection_->ListChangelogs(request);
+}
+
+StreamRange
+AgentServiceClient::ListChangelogs(
+ google::cloud::ces::v1::ListChangelogsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListChangelogs(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetChangelog(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::cloud::ces::v1::GetChangelogRequest request;
+ request.set_name(name);
+ return connection_->GetChangelog(request);
+}
+
+StatusOr AgentServiceClient::GetChangelog(
+ google::cloud::ces::v1::GetChangelogRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetChangelog(request);
+}
+
+StreamRange
+AgentServiceClient::ListLocations(
+ google::cloud::location::ListLocationsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListLocations(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetLocation(
+ google::cloud::location::GetLocationRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetLocation(request);
+}
+
+StreamRange AgentServiceClient::ListOperations(
+ std::string const& name, std::string const& filter, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::longrunning::ListOperationsRequest request;
+ request.set_name(name);
+ request.set_filter(filter);
+ return connection_->ListOperations(request);
+}
+
+StreamRange AgentServiceClient::ListOperations(
+ google::longrunning::ListOperationsRequest request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->ListOperations(std::move(request));
+}
+
+StatusOr AgentServiceClient::GetOperation(
+ std::string const& name, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::longrunning::GetOperationRequest request;
+ request.set_name(name);
+ return connection_->GetOperation(request);
+}
+
+StatusOr AgentServiceClient::GetOperation(
+ google::longrunning::GetOperationRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->GetOperation(request);
+}
+
+Status AgentServiceClient::DeleteOperation(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::longrunning::DeleteOperationRequest request;
+ request.set_name(name);
+ return connection_->DeleteOperation(request);
+}
+
+Status AgentServiceClient::DeleteOperation(
+ google::longrunning::DeleteOperationRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->DeleteOperation(request);
+}
+
+Status AgentServiceClient::CancelOperation(std::string const& name,
+ Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ google::longrunning::CancelOperationRequest request;
+ request.set_name(name);
+ return connection_->CancelOperation(request);
+}
+
+Status AgentServiceClient::CancelOperation(
+ google::longrunning::CancelOperationRequest const& request, Options opts) {
+ internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_));
+ return connection_->CancelOperation(request);
+}
+
+GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
+} // namespace ces_v1
+} // namespace cloud
+} // namespace google
diff --git a/google/cloud/ces/v1/agent_client.h b/google/cloud/ces/v1/agent_client.h
new file mode 100644
index 0000000000000..a69a768ef7e5a
--- /dev/null
+++ b/google/cloud/ces/v1/agent_client.h
@@ -0,0 +1,3912 @@
+// 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
+//
+// https://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.
+
+// Generated by the Codegen C++ plugin.
+// If you make any local changes, they will be lost.
+// source: google/cloud/ces/v1/agent_service.proto
+
+#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CLIENT_H
+#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CLIENT_H
+
+#include "google/cloud/ces/v1/agent_connection.h"
+#include "google/cloud/future.h"
+#include "google/cloud/no_await_tag.h"
+#include "google/cloud/options.h"
+#include "google/cloud/polling_policy.h"
+#include "google/cloud/status_or.h"
+#include "google/cloud/version.h"
+#include "google/longrunning/operations.grpc.pb.h"
+#include