GCP.CES reference
Source:
src/GCP/CES/App.ts
A Customer Engagement Suite (CES) app — the top-level container for agents, tools, toolsets, guardrails, examples, versions, and deployments.
App create and delete are long-running operations. Location and app id
are immutable. CES apps have no labels API, so Alchemy stamps
ownership into metadata and description so list / nuke can find
them.
App: Creating an App
Section titled “App: Creating an App”Generated name
const app = yield* GCP.CES.App("Support", { displayName: "support",});Named app with a time zone and model
const app = yield* GCP.CES.App("Support", { appId: "support-desk", location: "us-central1", displayName: "Support desk", timeZone: "America/Los_Angeles", model: "gemini-2.0-flash",});AppsAgent
Section titled “AppsAgent”Source:
src/GCP/CES/AppsAgent.ts
A Customer Engagement Suite agent inside an app. Agents give the LLM instructions, tools, and transfer rules for a task.
Agents have no labels field, and the description reaches the model, so
Alchemy writes no ownership marker: a generated agent id identifies the
agent, and read reports an explicit id it has no state for as
unowned. Parent app, location, and agent id are immutable.
AppsAgent: Creating an Agent
Section titled “AppsAgent: Creating an Agent”const agent = yield* GCP.CES.AppsAgent("Greeter", { app: app.name, displayName: "greeter", instruction: "Greet the user and offer help.",});AppsDeployment
Section titled “AppsDeployment”Source:
src/GCP/CES/AppsDeployment.ts
A Customer Engagement Suite deployment — an immutable, queryable channel binding of an app version.
Deployments have no labels or description field — Alchemy stamps
ownership into displayName so list / nuke can find them. Parent
app, location, and deployment id are immutable.
AppsDeployment: Creating a Deployment
Section titled “AppsDeployment: Creating a Deployment”const version = yield* GCP.CES.AppsVersion("V1", { app: app.name });const deployment = yield* GCP.CES.AppsDeployment("Prod", { app: app.name, appVersion: version.name, displayName: "prod", channelProfile: { channelType: "API", profileId: "api" },});AppsExample
Section titled “AppsExample”Source:
src/GCP/CES/AppsExample.ts
A Customer Engagement Suite few-shot example conversation inside an app.
Examples have no labels field — Alchemy stamps ownership into
description so list / nuke can find them. Parent app, location,
and example id are immutable.
AppsExample: Creating an Example
Section titled “AppsExample: Creating an Example”const example = yield* GCP.CES.AppsExample("Hello", { app: app.name, displayName: "hello", messages: [ { role: "user", chunks: [{ text: "Hi" }] }, { role: "agent", chunks: [{ text: "Hello! How can I help?" }] }, ],});AppsGuardrail
Section titled “AppsGuardrail”Source:
src/GCP/CES/AppsGuardrail.ts
A Customer Engagement Suite guardrail — content filter, LLM policy, model safety, or callback checks attached to an app or agent.
Guardrails have no labels field — Alchemy stamps ownership into
description so list / nuke can find them. Parent app, location,
and guardrail id are immutable.
AppsGuardrail: Creating a Guardrail
Section titled “AppsGuardrail: Creating a Guardrail”const guardrail = yield* GCP.CES.AppsGuardrail("Safety", { app: app.name, displayName: "safety", contentFilter: { matchType: "SIMPLE_STRING_MATCH", bannedContents: ["forbidden"], },});AppsTool
Section titled “AppsTool”Source:
src/GCP/CES/AppsTool.ts
A Customer Engagement Suite tool inside an app (client function, Python, OpenAPI, Google Search, widget, and related variants).
Tools have no labels field, and a tool’s description tells the model
when to call it, so Alchemy writes no ownership marker: a generated
tool id identifies the tool, and read reports an explicit id it has no
state for as unowned. Parent app, location, tool id, and tool kind are
immutable.
AppsTool: Creating a Tool
Section titled “AppsTool: Creating a Tool”const tool = yield* GCP.CES.AppsTool("Lookup", { app: app.name, clientFunction: { name: "lookup_order", description: "Look up an order by id.", parameters: { type: "OBJECT", properties: { orderId: { type: "STRING" } }, }, },});AppsToolset
Section titled “AppsToolset”Source:
src/GCP/CES/AppsToolset.ts
A Customer Engagement Suite toolset — a dynamically managed group of tools defined by OpenAPI, MCP, or Integration Connectors.
Toolsets have no labels field, and the description reaches the model,
so Alchemy writes no ownership marker: a generated toolset id
identifies the toolset, and read reports an explicit id it has no
state for as unowned. Parent app, location, toolset id, and toolset
kind are immutable.
AppsToolset: Creating a Toolset
Section titled “AppsToolset: Creating a Toolset”const toolset = yield* GCP.CES.AppsToolset("Ping", { app: app.name, displayName: "ping", openApiToolset: { openApiSchema: JSON.stringify({ openapi: "3.0.0", info: { title: "Ping", version: "1.0.0" }, paths: { "/ping": { get: { operationId: "ping", responses: { "200": { description: "ok" } }, }, }, }, }), },});AppsVersion
Section titled “AppsVersion”Source:
src/GCP/CES/AppsVersion.ts
A Customer Engagement Suite app version — an immutable snapshot of an app at a point in time.
Versions have no labels field and no patch RPC. Alchemy stamps
ownership into description so list / nuke can find them. Reconcile
is observe-ensure: if the snapshot is missing it is created; later
description edits are ignored.
AppsVersion: Creating an App Version
Section titled “AppsVersion: Creating an App Version”const version = yield* GCP.CES.AppsVersion("v1", { app: app.name, displayName: "v1", description: "initial",});