mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-21 18:11:27 -07:00
update skills
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
# Configuration
|
||||
|
||||
## Wrangler Setup
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"name": "my-agents-app",
|
||||
"durable_objects": {
|
||||
"bindings": [
|
||||
{"name": "MyAgent", "class_name": "MyAgent"}
|
||||
]
|
||||
},
|
||||
"migrations": [
|
||||
{"tag": "v1", "new_sqlite_classes": ["MyAgent"]}
|
||||
],
|
||||
"ai": {
|
||||
"binding": "AI"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Environment Bindings
|
||||
|
||||
**Type-safe pattern:**
|
||||
|
||||
```typescript
|
||||
interface Env {
|
||||
AI?: Ai; // Workers AI
|
||||
MyAgent?: DurableObjectNamespace<MyAgent>;
|
||||
ChatAgent?: DurableObjectNamespace<ChatAgent>;
|
||||
DB?: D1Database; // D1 database
|
||||
KV?: KVNamespace; // KV storage
|
||||
R2?: R2Bucket; // R2 bucket
|
||||
OPENAI_API_KEY?: string; // Secrets
|
||||
GITHUB_CLIENT_ID?: string; // MCP OAuth credentials
|
||||
GITHUB_CLIENT_SECRET?: string;
|
||||
QUEUE?: Queue; // Queues
|
||||
}
|
||||
```
|
||||
|
||||
**Best practice:** Define all DO bindings in Env interface for type safety.
|
||||
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
# Local dev
|
||||
npx wrangler dev
|
||||
|
||||
# Deploy production
|
||||
npx wrangler deploy
|
||||
|
||||
# Set secrets
|
||||
npx wrangler secret put OPENAI_API_KEY
|
||||
```
|
||||
|
||||
## Agent Routing
|
||||
|
||||
**Recommended: Use route helpers**
|
||||
|
||||
```typescript
|
||||
import { routeAgent } from "agents";
|
||||
|
||||
export default {
|
||||
fetch(request: Request, env: Env) {
|
||||
return routeAgent(request, env);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Helper routes requests to agents automatically based on URL patterns.
|
||||
|
||||
**Manual routing (advanced):**
|
||||
|
||||
```typescript
|
||||
export default {
|
||||
async fetch(request: Request, env: Env) {
|
||||
const url = new URL(request.url);
|
||||
|
||||
// Named ID (deterministic)
|
||||
const id = env.MyAgent.idFromName("user-123");
|
||||
|
||||
// Random ID (from URL param)
|
||||
// const id = env.MyAgent.idFromString(url.searchParams.get("id"));
|
||||
|
||||
const stub = env.MyAgent.get(id);
|
||||
return stub.fetch(request);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Multi-agent setup:**
|
||||
|
||||
```typescript
|
||||
import { routeAgent } from "agents";
|
||||
|
||||
export default {
|
||||
fetch(request: Request, env: Env) {
|
||||
const url = new URL(request.url);
|
||||
|
||||
// Route by path
|
||||
if (url.pathname.startsWith("/chat")) {
|
||||
return routeAgent(request, env, "ChatAgent");
|
||||
}
|
||||
if (url.pathname.startsWith("/task")) {
|
||||
return routeAgent(request, env, "TaskAgent");
|
||||
}
|
||||
|
||||
return new Response("Not found", { status: 404 });
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Email Routing
|
||||
|
||||
**Code setup:**
|
||||
|
||||
```typescript
|
||||
import { routeAgentEmail } from "agents";
|
||||
|
||||
export default {
|
||||
fetch: (req: Request, env: Env) => routeAgent(req, env),
|
||||
email: (message: ForwardableEmailMessage, env: Env) => {
|
||||
return routeAgentEmail(message, env);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Dashboard setup:**
|
||||
|
||||
Configure email routing in Cloudflare dashboard:
|
||||
|
||||
```
|
||||
Destination: Workers with Durable Objects
|
||||
Worker: my-agents-app
|
||||
```
|
||||
|
||||
Then handle in agent:
|
||||
|
||||
```typescript
|
||||
export class EmailAgent extends Agent<Env> {
|
||||
async onEmail(email: AgentEmail) {
|
||||
const text = await email.text();
|
||||
// Process email
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## AI Gateway (Optional)
|
||||
|
||||
```typescript
|
||||
// Enable caching/routing through AI Gateway
|
||||
const response = await this.env.AI.run(
|
||||
"@cf/meta/llama-3.1-8b-instruct",
|
||||
{ prompt },
|
||||
{
|
||||
gateway: {
|
||||
id: "my-gateway-id",
|
||||
skipCache: false,
|
||||
cacheTtl: 3600
|
||||
}
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## MCP Configuration (Optional)
|
||||
|
||||
For exposing tools via Model Context Protocol:
|
||||
|
||||
```typescript
|
||||
// wrangler.jsonc - Add MCP OAuth secrets
|
||||
{
|
||||
"vars": {
|
||||
"MCP_SERVER_URL": "https://mcp.example.com"
|
||||
}
|
||||
}
|
||||
|
||||
// Set secrets via CLI
|
||||
// npx wrangler secret put GITHUB_CLIENT_ID
|
||||
// npx wrangler secret put GITHUB_CLIENT_SECRET
|
||||
```
|
||||
|
||||
Then register in agent code (see api.md MCP section).
|
||||
Reference in New Issue
Block a user