chore: generate

This commit is contained in:
opencode-agent[bot]
2026-02-19 20:12:16 +00:00
parent 00c079868a
commit 1867f1acaa
3 changed files with 145 additions and 138 deletions

View File

@@ -11,21 +11,21 @@ description: Build AI agents on Cloudflare Workers using the Agents SDK. Load wh
Fetch current docs from `https://github.com/cloudflare/agents/tree/main/docs` before implementing. Fetch current docs from `https://github.com/cloudflare/agents/tree/main/docs` before implementing.
| Topic | Doc | Use for | | Topic | Doc | Use for |
|-------|-----|---------| | ------------------- | ----------------------------- | ---------------------------------------------- |
| Getting started | `docs/getting-started.md` | First agent, project setup | | Getting started | `docs/getting-started.md` | First agent, project setup |
| State | `docs/state.md` | `setState`, `validateStateChange`, persistence | | State | `docs/state.md` | `setState`, `validateStateChange`, persistence |
| Routing | `docs/routing.md` | URL patterns, `routeAgentRequest`, `basePath` | | Routing | `docs/routing.md` | URL patterns, `routeAgentRequest`, `basePath` |
| Callable methods | `docs/callable-methods.md` | `@callable`, RPC, streaming, timeouts | | Callable methods | `docs/callable-methods.md` | `@callable`, RPC, streaming, timeouts |
| Scheduling | `docs/scheduling.md` | `schedule()`, `scheduleEvery()`, cron | | Scheduling | `docs/scheduling.md` | `schedule()`, `scheduleEvery()`, cron |
| Workflows | `docs/workflows.md` | `AgentWorkflow`, durable multi-step tasks | | Workflows | `docs/workflows.md` | `AgentWorkflow`, durable multi-step tasks |
| HTTP/WebSockets | `docs/http-websockets.md` | Lifecycle hooks, hibernation | | HTTP/WebSockets | `docs/http-websockets.md` | Lifecycle hooks, hibernation |
| Email | `docs/email.md` | Email routing, secure reply resolver | | Email | `docs/email.md` | Email routing, secure reply resolver |
| MCP client | `docs/mcp-client.md` | Connecting to MCP servers | | MCP client | `docs/mcp-client.md` | Connecting to MCP servers |
| MCP server | `docs/mcp-servers.md` | Building MCP servers with `McpAgent` | | MCP server | `docs/mcp-servers.md` | Building MCP servers with `McpAgent` |
| Client SDK | `docs/client-sdk.md` | `useAgent`, `useAgentChat`, React hooks | | Client SDK | `docs/client-sdk.md` | `useAgent`, `useAgentChat`, React hooks |
| Human-in-the-loop | `docs/human-in-the-loop.md` | Approval flows, pausing workflows | | Human-in-the-loop | `docs/human-in-the-loop.md` | Approval flows, pausing workflows |
| Resumable streaming | `docs/resumable-streaming.md` | Stream recovery on disconnect | | Resumable streaming | `docs/resumable-streaming.md` | Stream recovery on disconnect |
Cloudflare docs: https://developers.cloudflare.com/agents/ Cloudflare docs: https://developers.cloudflare.com/agents/
@@ -49,6 +49,7 @@ npm ls agents # Should show agents package
``` ```
If not installed: If not installed:
```bash ```bash
npm install agents npm install agents
``` ```
@@ -58,89 +59,85 @@ npm install agents
```jsonc ```jsonc
{ {
"durable_objects": { "durable_objects": {
"bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }] "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }],
}, },
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }] "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }],
} }
``` ```
## Agent Class ## Agent Class
```typescript ```typescript
import { Agent, routeAgentRequest, callable } from "agents"; import { Agent, routeAgentRequest, callable } from "agents"
type State = { count: number }; type State = { count: number }
export class Counter extends Agent<Env, State> { export class Counter extends Agent<Env, State> {
initialState = { count: 0 }; initialState = { count: 0 }
// Validation hook - runs before state persists (sync, throwing rejects the update) // Validation hook - runs before state persists (sync, throwing rejects the update)
validateStateChange(nextState: State, source: Connection | "server") { validateStateChange(nextState: State, source: Connection | "server") {
if (nextState.count < 0) throw new Error("Count cannot be negative"); if (nextState.count < 0) throw new Error("Count cannot be negative")
} }
// Notification hook - runs after state persists (async, non-blocking) // Notification hook - runs after state persists (async, non-blocking)
onStateUpdate(state: State, source: Connection | "server") { onStateUpdate(state: State, source: Connection | "server") {
console.log("State updated:", state); console.log("State updated:", state)
} }
@callable() @callable()
increment() { increment() {
this.setState({ count: this.state.count + 1 }); this.setState({ count: this.state.count + 1 })
return this.state.count; return this.state.count
} }
} }
export default { export default {
fetch: (req, env) => routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 }) fetch: (req, env) => routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 }),
}; }
``` ```
## Routing ## Routing
Requests route to `/agents/{agent-name}/{instance-name}`: Requests route to `/agents/{agent-name}/{instance-name}`:
| Class | URL | | Class | URL |
|-------|-----| | ---------- | -------------------------- |
| `Counter` | `/agents/counter/user-123` | | `Counter` | `/agents/counter/user-123` |
| `ChatRoom` | `/agents/chat-room/lobby` | | `ChatRoom` | `/agents/chat-room/lobby` |
Client: `useAgent({ agent: "Counter", name: "user-123" })` Client: `useAgent({ agent: "Counter", name: "user-123" })`
## Core APIs ## Core APIs
| Task | API | | Task | API |
|------|-----| | ------------------- | ------------------------------------------------------ |
| Read state | `this.state.count` | | Read state | `this.state.count` |
| Write state | `this.setState({ count: 1 })` | | Write state | `this.setState({ count: 1 })` |
| SQL query | `` this.sql`SELECT * FROM users WHERE id = ${id}` `` | | SQL query | `` this.sql`SELECT * FROM users WHERE id = ${id}` `` |
| Schedule (delay) | `await this.schedule(60, "task", payload)` | | Schedule (delay) | `await this.schedule(60, "task", payload)` |
| Schedule (cron) | `await this.schedule("0 * * * *", "task", payload)` | | Schedule (cron) | `await this.schedule("0 * * * *", "task", payload)` |
| Schedule (interval) | `await this.scheduleEvery(30, "poll")` | | Schedule (interval) | `await this.scheduleEvery(30, "poll")` |
| RPC method | `@callable() myMethod() { ... }` | | RPC method | `@callable() myMethod() { ... }` |
| Streaming RPC | `@callable({ streaming: true }) stream(res) { ... }` | | Streaming RPC | `@callable({ streaming: true }) stream(res) { ... }` |
| Start workflow | `await this.runWorkflow("ProcessingWorkflow", params)` | | Start workflow | `await this.runWorkflow("ProcessingWorkflow", params)` |
## React Client ## React Client
```tsx ```tsx
import { useAgent } from "agents/react"; import { useAgent } from "agents/react"
function App() { function App() {
const [state, setLocalState] = useState({ count: 0 }); const [state, setLocalState] = useState({ count: 0 })
const agent = useAgent({ const agent = useAgent({
agent: "Counter", agent: "Counter",
name: "my-instance", name: "my-instance",
onStateUpdate: (newState) => setLocalState(newState), onStateUpdate: (newState) => setLocalState(newState),
onIdentity: (name, agentType) => console.log(`Connected to ${name}`) onIdentity: (name, agentType) => console.log(`Connected to ${name}`),
}); })
return ( return <button onClick={() => agent.setState({ count: state.count + 1 })}>Count: {state.count}</button>
<button onClick={() => agent.setState({ count: state.count + 1 })}>
Count: {state.count}
</button>
);
} }
``` ```

View File

@@ -7,18 +7,18 @@ Fetch `docs/callable-methods.md` from `https://github.com/cloudflare/agents/tree
`@callable()` exposes agent methods to clients via WebSocket RPC. `@callable()` exposes agent methods to clients via WebSocket RPC.
```typescript ```typescript
import { Agent, callable } from "agents"; import { Agent, callable } from "agents"
export class MyAgent extends Agent<Env, State> { export class MyAgent extends Agent<Env, State> {
@callable() @callable()
async greet(name: string): Promise<string> { async greet(name: string): Promise<string> {
return `Hello, ${name}!`; return `Hello, ${name}!`
} }
@callable() @callable()
async processData(data: unknown): Promise<Result> { async processData(data: unknown): Promise<Result> {
// Long-running work // Long-running work
return result; return result
} }
} }
``` ```
@@ -27,26 +27,26 @@ export class MyAgent extends Agent<Env, State> {
```typescript ```typescript
// Basic call // Basic call
const greeting = await agent.call("greet", ["World"]); const greeting = await agent.call("greet", ["World"])
// With timeout // With timeout
const result = await agent.call("processData", [data], { const result = await agent.call("processData", [data], {
timeout: 5000 // 5 second timeout timeout: 5000, // 5 second timeout
}); })
``` ```
## Streaming Responses ## Streaming Responses
```typescript ```typescript
import { Agent, callable, StreamingResponse } from "agents"; import { Agent, callable, StreamingResponse } from "agents"
export class MyAgent extends Agent<Env, State> { export class MyAgent extends Agent<Env, State> {
@callable({ streaming: true }) @callable({ streaming: true })
async streamResults(stream: StreamingResponse, query: string) { async streamResults(stream: StreamingResponse, query: string) {
for await (const item of fetchResults(query)) { for await (const item of fetchResults(query)) {
stream.send(JSON.stringify(item)); stream.send(JSON.stringify(item))
} }
stream.close(); stream.close()
} }
@callable({ streaming: true }) @callable({ streaming: true })
@@ -54,10 +54,10 @@ export class MyAgent extends Agent<Env, State> {
try { try {
// ... work // ... work
} catch (error) { } catch (error) {
stream.error(error.message); // Signal error to client stream.error(error.message) // Signal error to client
return; return
} }
stream.close(); stream.close()
} }
} }
``` ```
@@ -69,24 +69,24 @@ await agent.call("streamResults", ["search term"], {
stream: { stream: {
onChunk: (data) => console.log("Chunk:", data), onChunk: (data) => console.log("Chunk:", data),
onDone: () => console.log("Complete"), onDone: () => console.log("Complete"),
onError: (error) => console.error("Error:", error) onError: (error) => console.error("Error:", error),
} },
}); })
``` ```
## Introspection ## Introspection
```typescript ```typescript
// Get list of callable methods on an agent // Get list of callable methods on an agent
const methods = await agent.call("getCallableMethods", []); const methods = await agent.call("getCallableMethods", [])
// Returns: ["greet", "processData", "streamResults", ...] // Returns: ["greet", "processData", "streamResults", ...]
``` ```
## When to Use ## When to Use
| Scenario | Use | | Scenario | Use |
|----------|-----| | ------------------------------------ | --------------------------- |
| Browser/mobile calling agent | `@callable()` | | Browser/mobile calling agent | `@callable()` |
| External service calling agent | `@callable()` | | External service calling agent | `@callable()` |
| Worker calling agent (same codebase) | DO RPC directly | | Worker calling agent (same codebase) | DO RPC directly |
| Agent calling another agent | `getAgentByName()` + DO RPC | | Agent calling another agent | `getAgentByName()` + DO RPC |

View File

@@ -101,101 +101,111 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
## Product Index ## Product Index
### Compute & Runtime ### Compute & Runtime
| Product | Reference |
|---------|-----------| | Product | Reference |
| Workers | `references/workers/` | | --------------------- | ----------------------------------- |
| Pages | `references/pages/` | | Workers | `references/workers/` |
| Pages Functions | `references/pages-functions/` | | Pages | `references/pages/` |
| Durable Objects | `references/durable-objects/` | | Pages Functions | `references/pages-functions/` |
| Workflows | `references/workflows/` | | Durable Objects | `references/durable-objects/` |
| Containers | `references/containers/` | | Workflows | `references/workflows/` |
| Containers | `references/containers/` |
| Workers for Platforms | `references/workers-for-platforms/` | | Workers for Platforms | `references/workers-for-platforms/` |
| Cron Triggers | `references/cron-triggers/` | | Cron Triggers | `references/cron-triggers/` |
| Tail Workers | `references/tail-workers/` | | Tail Workers | `references/tail-workers/` |
| Snippets | `references/snippets/` | | Snippets | `references/snippets/` |
| Smart Placement | `references/smart-placement/` | | Smart Placement | `references/smart-placement/` |
### Storage & Data ### Storage & Data
| Product | Reference |
|---------|-----------| | Product | Reference |
| KV | `references/kv/` | | --------------- | ----------------------------- |
| D1 | `references/d1/` | | KV | `references/kv/` |
| R2 | `references/r2/` | | D1 | `references/d1/` |
| Queues | `references/queues/` | | R2 | `references/r2/` |
| Hyperdrive | `references/hyperdrive/` | | Queues | `references/queues/` |
| DO Storage | `references/do-storage/` | | Hyperdrive | `references/hyperdrive/` |
| Secrets Store | `references/secrets-store/` | | DO Storage | `references/do-storage/` |
| Pipelines | `references/pipelines/` | | Secrets Store | `references/secrets-store/` |
| Pipelines | `references/pipelines/` |
| R2 Data Catalog | `references/r2-data-catalog/` | | R2 Data Catalog | `references/r2-data-catalog/` |
| R2 SQL | `references/r2-sql/` | | R2 SQL | `references/r2-sql/` |
### AI & Machine Learning ### AI & Machine Learning
| Product | Reference |
|---------|-----------| | Product | Reference |
| ---------- | ------------------------ |
| Workers AI | `references/workers-ai/` | | Workers AI | `references/workers-ai/` |
| Vectorize | `references/vectorize/` | | Vectorize | `references/vectorize/` |
| Agents SDK | `references/agents-sdk/` | | Agents SDK | `references/agents-sdk/` |
| AI Gateway | `references/ai-gateway/` | | AI Gateway | `references/ai-gateway/` |
| AI Search | `references/ai-search/` | | AI Search | `references/ai-search/` |
### Networking & Connectivity ### Networking & Connectivity
| Product | Reference |
|---------|-----------| | Product | Reference |
| Tunnel | `references/tunnel/` | | -------------------- | ---------------------------------- |
| Spectrum | `references/spectrum/` | | Tunnel | `references/tunnel/` |
| TURN | `references/turn/` | | Spectrum | `references/spectrum/` |
| TURN | `references/turn/` |
| Network Interconnect | `references/network-interconnect/` | | Network Interconnect | `references/network-interconnect/` |
| Argo Smart Routing | `references/argo-smart-routing/` | | Argo Smart Routing | `references/argo-smart-routing/` |
| Workers VPC | `references/workers-vpc/` | | Workers VPC | `references/workers-vpc/` |
### Security ### Security
| Product | Reference |
|---------|-----------| | Product | Reference |
| WAF | `references/waf/` | | --------------- | ---------------------------- |
| DDoS Protection | `references/ddos/` | | WAF | `references/waf/` |
| Bot Management | `references/bot-management/` | | DDoS Protection | `references/ddos/` |
| API Shield | `references/api-shield/` | | Bot Management | `references/bot-management/` |
| Turnstile | `references/turnstile/` | | API Shield | `references/api-shield/` |
| Turnstile | `references/turnstile/` |
### Media & Content ### Media & Content
| Product | Reference |
|---------|-----------| | Product | Reference |
| Images | `references/images/` | | ----------------- | ------------------------------- |
| Stream | `references/stream/` | | Images | `references/images/` |
| Stream | `references/stream/` |
| Browser Rendering | `references/browser-rendering/` | | Browser Rendering | `references/browser-rendering/` |
| Zaraz | `references/zaraz/` | | Zaraz | `references/zaraz/` |
### Real-Time Communication ### Real-Time Communication
| Product | Reference |
|---------|-----------| | Product | Reference |
| RealtimeKit | `references/realtimekit/` | | ------------ | -------------------------- |
| RealtimeKit | `references/realtimekit/` |
| Realtime SFU | `references/realtime-sfu/` | | Realtime SFU | `references/realtime-sfu/` |
### Developer Tools ### Developer Tools
| Product | Reference |
|---------|-----------| | Product | Reference |
| Wrangler | `references/wrangler/` | | ------------------ | -------------------------------- |
| Miniflare | `references/miniflare/` | | Wrangler | `references/wrangler/` |
| C3 | `references/c3/` | | Miniflare | `references/miniflare/` |
| Observability | `references/observability/` | | C3 | `references/c3/` |
| Analytics Engine | `references/analytics-engine/` | | Observability | `references/observability/` |
| Web Analytics | `references/web-analytics/` | | Analytics Engine | `references/analytics-engine/` |
| Sandbox | `references/sandbox/` | | Web Analytics | `references/web-analytics/` |
| Workerd | `references/workerd/` | | Sandbox | `references/sandbox/` |
| Workerd | `references/workerd/` |
| Workers Playground | `references/workers-playground/` | | Workers Playground | `references/workers-playground/` |
### Infrastructure as Code ### Infrastructure as Code
| Product | Reference |
|---------|-----------| | Product | Reference |
| Pulumi | `references/pulumi/` | | --------- | ----------------------- |
| Pulumi | `references/pulumi/` |
| Terraform | `references/terraform/` | | Terraform | `references/terraform/` |
| API | `references/api/` | | API | `references/api/` |
### Other Services ### Other Services
| Product | Reference |
|---------|-----------| | Product | Reference |
| ------------- | --------------------------- |
| Email Routing | `references/email-routing/` | | Email Routing | `references/email-routing/` |
| Email Workers | `references/email-workers/` | | Email Workers | `references/email-workers/` |
| Static Assets | `references/static-assets/` | | Static Assets | `references/static-assets/` |
| Bindings | `references/bindings/` | | Bindings | `references/bindings/` |
| Cache Reserve | `references/cache-reserve/` | | Cache Reserve | `references/cache-reserve/` |