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

@@ -12,7 +12,7 @@ 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.
| Topic | Doc | Use for |
|-------|-----|---------|
| ------------------- | ----------------------------- | ---------------------------------------------- |
| Getting started | `docs/getting-started.md` | First agent, project setup |
| State | `docs/state.md` | `setState`, `validateStateChange`, persistence |
| Routing | `docs/routing.md` | URL patterns, `routeAgentRequest`, `basePath` |
@@ -49,6 +49,7 @@ npm ls agents # Should show agents package
```
If not installed:
```bash
npm install agents
```
@@ -58,42 +59,42 @@ npm install agents
```jsonc
{
"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
```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> {
initialState = { count: 0 };
initialState = { count: 0 }
// Validation hook - runs before state persists (sync, throwing rejects the update)
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)
onStateUpdate(state: State, source: Connection | "server") {
console.log("State updated:", state);
console.log("State updated:", state)
}
@callable()
increment() {
this.setState({ count: this.state.count + 1 });
return this.state.count;
this.setState({ count: this.state.count + 1 })
return this.state.count
}
}
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
@@ -101,7 +102,7 @@ export default {
Requests route to `/agents/{agent-name}/{instance-name}`:
| Class | URL |
|-------|-----|
| ---------- | -------------------------- |
| `Counter` | `/agents/counter/user-123` |
| `ChatRoom` | `/agents/chat-room/lobby` |
@@ -110,7 +111,7 @@ Client: `useAgent({ agent: "Counter", name: "user-123" })`
## Core APIs
| Task | API |
|------|-----|
| ------------------- | ------------------------------------------------------ |
| Read state | `this.state.count` |
| Write state | `this.setState({ count: 1 })` |
| SQL query | `` this.sql`SELECT * FROM users WHERE id = ${id}` `` |
@@ -124,23 +125,19 @@ Client: `useAgent({ agent: "Counter", name: "user-123" })`
## React Client
```tsx
import { useAgent } from "agents/react";
import { useAgent } from "agents/react"
function App() {
const [state, setLocalState] = useState({ count: 0 });
const [state, setLocalState] = useState({ count: 0 })
const agent = useAgent({
agent: "Counter",
name: "my-instance",
onStateUpdate: (newState) => setLocalState(newState),
onIdentity: (name, agentType) => console.log(`Connected to ${name}`)
});
onIdentity: (name, agentType) => console.log(`Connected to ${name}`),
})
return (
<button onClick={() => agent.setState({ count: state.count + 1 })}>
Count: {state.count}
</button>
);
return <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.
```typescript
import { Agent, callable } from "agents";
import { Agent, callable } from "agents"
export class MyAgent extends Agent<Env, State> {
@callable()
async greet(name: string): Promise<string> {
return `Hello, ${name}!`;
return `Hello, ${name}!`
}
@callable()
async processData(data: unknown): Promise<Result> {
// Long-running work
return result;
return result
}
}
```
@@ -27,26 +27,26 @@ export class MyAgent extends Agent<Env, State> {
```typescript
// Basic call
const greeting = await agent.call("greet", ["World"]);
const greeting = await agent.call("greet", ["World"])
// With timeout
const result = await agent.call("processData", [data], {
timeout: 5000 // 5 second timeout
});
timeout: 5000, // 5 second timeout
})
```
## Streaming Responses
```typescript
import { Agent, callable, StreamingResponse } from "agents";
import { Agent, callable, StreamingResponse } from "agents"
export class MyAgent extends Agent<Env, State> {
@callable({ streaming: true })
async streamResults(stream: StreamingResponse, query: string) {
for await (const item of fetchResults(query)) {
stream.send(JSON.stringify(item));
stream.send(JSON.stringify(item))
}
stream.close();
stream.close()
}
@callable({ streaming: true })
@@ -54,10 +54,10 @@ export class MyAgent extends Agent<Env, State> {
try {
// ... work
} catch (error) {
stream.error(error.message); // Signal error to client
return;
stream.error(error.message) // Signal error to client
return
}
stream.close();
stream.close()
}
}
```
@@ -69,23 +69,23 @@ await agent.call("streamResults", ["search term"], {
stream: {
onChunk: (data) => console.log("Chunk:", data),
onDone: () => console.log("Complete"),
onError: (error) => console.error("Error:", error)
}
});
onError: (error) => console.error("Error:", error),
},
})
```
## Introspection
```typescript
// Get list of callable methods on an agent
const methods = await agent.call("getCallableMethods", []);
const methods = await agent.call("getCallableMethods", [])
// Returns: ["greet", "processData", "streamResults", ...]
```
## When to Use
| Scenario | Use |
|----------|-----|
| ------------------------------------ | --------------------------- |
| Browser/mobile calling agent | `@callable()` |
| External service calling agent | `@callable()` |
| Worker calling agent (same codebase) | DO RPC directly |

View File

@@ -101,8 +101,9 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
## Product Index
### Compute & Runtime
| Product | Reference |
|---------|-----------|
| --------------------- | ----------------------------------- |
| Workers | `references/workers/` |
| Pages | `references/pages/` |
| Pages Functions | `references/pages-functions/` |
@@ -116,8 +117,9 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
| Smart Placement | `references/smart-placement/` |
### Storage & Data
| Product | Reference |
|---------|-----------|
| --------------- | ----------------------------- |
| KV | `references/kv/` |
| D1 | `references/d1/` |
| R2 | `references/r2/` |
@@ -130,8 +132,9 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
| R2 SQL | `references/r2-sql/` |
### AI & Machine Learning
| Product | Reference |
|---------|-----------|
| ---------- | ------------------------ |
| Workers AI | `references/workers-ai/` |
| Vectorize | `references/vectorize/` |
| Agents SDK | `references/agents-sdk/` |
@@ -139,8 +142,9 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
| AI Search | `references/ai-search/` |
### Networking & Connectivity
| Product | Reference |
|---------|-----------|
| -------------------- | ---------------------------------- |
| Tunnel | `references/tunnel/` |
| Spectrum | `references/spectrum/` |
| TURN | `references/turn/` |
@@ -149,8 +153,9 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
| Workers VPC | `references/workers-vpc/` |
### Security
| Product | Reference |
|---------|-----------|
| --------------- | ---------------------------- |
| WAF | `references/waf/` |
| DDoS Protection | `references/ddos/` |
| Bot Management | `references/bot-management/` |
@@ -158,22 +163,25 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
| Turnstile | `references/turnstile/` |
### Media & Content
| Product | Reference |
|---------|-----------|
| ----------------- | ------------------------------- |
| Images | `references/images/` |
| Stream | `references/stream/` |
| Browser Rendering | `references/browser-rendering/` |
| Zaraz | `references/zaraz/` |
### Real-Time Communication
| Product | Reference |
|---------|-----------|
| ------------ | -------------------------- |
| RealtimeKit | `references/realtimekit/` |
| Realtime SFU | `references/realtime-sfu/` |
### Developer Tools
| Product | Reference |
|---------|-----------|
| ------------------ | -------------------------------- |
| Wrangler | `references/wrangler/` |
| Miniflare | `references/miniflare/` |
| C3 | `references/c3/` |
@@ -185,15 +193,17 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
| Workers Playground | `references/workers-playground/` |
### Infrastructure as Code
| Product | Reference |
|---------|-----------|
| --------- | ----------------------- |
| Pulumi | `references/pulumi/` |
| Terraform | `references/terraform/` |
| API | `references/api/` |
### Other Services
| Product | Reference |
|---------|-----------|
| ------------- | --------------------------- |
| Email Routing | `references/email-routing/` |
| Email Workers | `references/email-workers/` |
| Static Assets | `references/static-assets/` |