pi-cloudflare 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +67 -0
- package/bin/setup.mjs +103 -0
- package/dist/auth-flow.d.ts +15 -0
- package/dist/auth-flow.d.ts.map +1 -0
- package/dist/auth-flow.js +90 -0
- package/dist/auth-flow.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +47 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +44 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +135 -0
- package/dist/oauth.js.map +1 -0
- package/dist/proxy.d.ts +29 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +39 -0
- package/dist/proxy.js.map +1 -0
- package/dist/servers.d.ts +19 -0
- package/dist/servers.d.ts.map +1 -0
- package/dist/servers.js +40 -0
- package/dist/servers.js.map +1 -0
- package/dist/token-store.d.ts +23 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +47 -0
- package/dist/token-store.js.map +1 -0
- package/package.json +67 -0
- package/skills/agents-sdk/SKILL.md +221 -0
- package/skills/agents-sdk/references/browse-the-web.md +63 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/client-sdk.md +110 -0
- package/skills/agents-sdk/references/codemode.md +110 -0
- package/skills/agents-sdk/references/configuration.md +72 -0
- package/skills/agents-sdk/references/durable-execution.md +51 -0
- package/skills/agents-sdk/references/email.md +146 -0
- package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
- package/skills/agents-sdk/references/mcp.md +188 -0
- package/skills/agents-sdk/references/observability.md +44 -0
- package/skills/agents-sdk/references/queue-retries.md +79 -0
- package/skills/agents-sdk/references/routing.md +75 -0
- package/skills/agents-sdk/references/server-driven-messages.md +63 -0
- package/skills/agents-sdk/references/state-scheduling.md +171 -0
- package/skills/agents-sdk/references/streaming-chat.md +198 -0
- package/skills/agents-sdk/references/think.md +112 -0
- package/skills/agents-sdk/references/voice.md +68 -0
- package/skills/agents-sdk/references/webhooks-push.md +86 -0
- package/skills/agents-sdk/references/workflows.md +132 -0
- package/skills/cloudflare/SKILL.md +248 -0
- package/skills/cloudflare/references/agents-sdk/README.md +89 -0
- package/skills/cloudflare/references/agents-sdk/api.md +190 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
- package/skills/cloudflare/references/ai-gateway/README.md +175 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
- package/skills/cloudflare/references/ai-search/README.md +138 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +88 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
- package/skills/cloudflare/references/ai-search/patterns.md +85 -0
- package/skills/cloudflare/references/analytics-engine/README.md +94 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +204 -0
- package/skills/cloudflare/references/api/configuration.md +160 -0
- package/skills/cloudflare/references/api/gotchas.md +225 -0
- package/skills/cloudflare/references/api/patterns.md +204 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +141 -0
- package/skills/cloudflare/references/api-shield/configuration.md +192 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
- package/skills/cloudflare/references/api-shield/patterns.md +180 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
- package/skills/cloudflare/references/artifacts/README.md +79 -0
- package/skills/cloudflare/references/artifacts/api.md +128 -0
- package/skills/cloudflare/references/artifacts/configuration.md +92 -0
- package/skills/cloudflare/references/bindings/README.md +122 -0
- package/skills/cloudflare/references/bindings/api.md +203 -0
- package/skills/cloudflare/references/bindings/configuration.md +188 -0
- package/skills/cloudflare/references/bindings/gotchas.md +208 -0
- package/skills/cloudflare/references/bindings/patterns.md +200 -0
- package/skills/cloudflare/references/bot-management/README.md +94 -0
- package/skills/cloudflare/references/bot-management/api.md +169 -0
- package/skills/cloudflare/references/bot-management/configuration.md +163 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
- package/skills/cloudflare/references/bot-management/patterns.md +182 -0
- package/skills/cloudflare/references/browser-rendering/README.md +78 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +81 -0
- package/skills/cloudflare/references/c3/gotchas.md +92 -0
- package/skills/cloudflare/references/c3/patterns.md +82 -0
- package/skills/cloudflare/references/cache-reserve/README.md +147 -0
- package/skills/cloudflare/references/cache-reserve/api.md +194 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +85 -0
- package/skills/cloudflare/references/containers/api.md +187 -0
- package/skills/cloudflare/references/containers/configuration.md +188 -0
- package/skills/cloudflare/references/containers/gotchas.md +178 -0
- package/skills/cloudflare/references/containers/patterns.md +202 -0
- package/skills/cloudflare/references/cron-triggers/README.md +99 -0
- package/skills/cloudflare/references/cron-triggers/api.md +196 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
- package/skills/cloudflare/references/d1/README.md +133 -0
- package/skills/cloudflare/references/d1/api.md +196 -0
- package/skills/cloudflare/references/d1/configuration.md +191 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +189 -0
- package/skills/cloudflare/references/ddos/README.md +41 -0
- package/skills/cloudflare/references/ddos/api.md +164 -0
- package/skills/cloudflare/references/ddos/configuration.md +93 -0
- package/skills/cloudflare/references/ddos/gotchas.md +107 -0
- package/skills/cloudflare/references/ddos/patterns.md +174 -0
- package/skills/cloudflare/references/do-storage/README.md +75 -0
- package/skills/cloudflare/references/do-storage/api.md +102 -0
- package/skills/cloudflare/references/do-storage/configuration.md +112 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
- package/skills/cloudflare/references/do-storage/patterns.md +194 -0
- package/skills/cloudflare/references/do-storage/testing.md +183 -0
- package/skills/cloudflare/references/durable-objects/README.md +185 -0
- package/skills/cloudflare/references/durable-objects/api.md +187 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +195 -0
- package/skills/cloudflare/references/email-routing/configuration.md +186 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
- package/skills/cloudflare/references/email-routing/patterns.md +229 -0
- package/skills/cloudflare/references/email-workers/README.md +151 -0
- package/skills/cloudflare/references/email-workers/api.md +237 -0
- package/skills/cloudflare/references/email-workers/configuration.md +112 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
- package/skills/cloudflare/references/email-workers/patterns.md +102 -0
- package/skills/cloudflare/references/flagship/README.md +59 -0
- package/skills/cloudflare/references/flagship/api.md +390 -0
- package/skills/cloudflare/references/flagship/configuration.md +202 -0
- package/skills/cloudflare/references/flagship/gotchas.md +178 -0
- package/skills/cloudflare/references/flagship/patterns.md +469 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
- package/skills/cloudflare/references/hyperdrive/README.md +82 -0
- package/skills/cloudflare/references/hyperdrive/api.md +143 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
- package/skills/cloudflare/references/images/README.md +61 -0
- package/skills/cloudflare/references/images/api.md +96 -0
- package/skills/cloudflare/references/images/configuration.md +211 -0
- package/skills/cloudflare/references/images/gotchas.md +99 -0
- package/skills/cloudflare/references/images/patterns.md +115 -0
- package/skills/cloudflare/references/kv/README.md +89 -0
- package/skills/cloudflare/references/kv/api.md +160 -0
- package/skills/cloudflare/references/kv/configuration.md +144 -0
- package/skills/cloudflare/references/kv/gotchas.md +131 -0
- package/skills/cloudflare/references/kv/patterns.md +196 -0
- package/skills/cloudflare/references/miniflare/README.md +105 -0
- package/skills/cloudflare/references/miniflare/api.md +187 -0
- package/skills/cloudflare/references/miniflare/configuration.md +173 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
- package/skills/cloudflare/references/miniflare/patterns.md +181 -0
- package/skills/cloudflare/references/network-interconnect/README.md +99 -0
- package/skills/cloudflare/references/network-interconnect/api.md +199 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
- package/skills/cloudflare/references/observability/README.md +88 -0
- package/skills/cloudflare/references/observability/api.md +164 -0
- package/skills/cloudflare/references/observability/configuration.md +169 -0
- package/skills/cloudflare/references/observability/gotchas.md +115 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +88 -0
- package/skills/cloudflare/references/pages/api.md +204 -0
- package/skills/cloudflare/references/pages/configuration.md +201 -0
- package/skills/cloudflare/references/pages/gotchas.md +203 -0
- package/skills/cloudflare/references/pages/patterns.md +204 -0
- package/skills/cloudflare/references/pages-functions/README.md +98 -0
- package/skills/cloudflare/references/pages-functions/api.md +143 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
- package/skills/cloudflare/references/pipelines/README.md +90 -0
- package/skills/cloudflare/references/pipelines/api.md +124 -0
- package/skills/cloudflare/references/pipelines/configuration.md +155 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
- package/skills/cloudflare/references/pipelines/patterns.md +130 -0
- package/skills/cloudflare/references/pulumi/README.md +100 -0
- package/skills/cloudflare/references/pulumi/api.md +200 -0
- package/skills/cloudflare/references/pulumi/configuration.md +198 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
- package/skills/cloudflare/references/pulumi/patterns.md +191 -0
- package/skills/cloudflare/references/queues/README.md +96 -0
- package/skills/cloudflare/references/queues/api.md +206 -0
- package/skills/cloudflare/references/queues/configuration.md +144 -0
- package/skills/cloudflare/references/queues/gotchas.md +206 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +95 -0
- package/skills/cloudflare/references/r2/api.md +200 -0
- package/skills/cloudflare/references/r2/configuration.md +165 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +193 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
- package/skills/cloudflare/references/r2-sql/README.md +64 -0
- package/skills/cloudflare/references/r2-sql/api.md +121 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
- package/skills/cloudflare/references/realtimekit/README.md +113 -0
- package/skills/cloudflare/references/realtimekit/api.md +212 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
- package/skills/cloudflare/references/sandbox/README.md +96 -0
- package/skills/cloudflare/references/sandbox/api.md +198 -0
- package/skills/cloudflare/references/sandbox/configuration.md +143 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
- package/skills/cloudflare/references/sandbox/patterns.md +201 -0
- package/skills/cloudflare/references/secrets-store/README.md +74 -0
- package/skills/cloudflare/references/secrets-store/api.md +200 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
- package/skills/cloudflare/references/smart-placement/README.md +138 -0
- package/skills/cloudflare/references/smart-placement/api.md +183 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
- package/skills/cloudflare/references/snippets/README.md +68 -0
- package/skills/cloudflare/references/snippets/api.md +198 -0
- package/skills/cloudflare/references/snippets/configuration.md +227 -0
- package/skills/cloudflare/references/snippets/gotchas.md +86 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +181 -0
- package/skills/cloudflare/references/spectrum/configuration.md +194 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
- package/skills/cloudflare/references/spectrum/patterns.md +196 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +199 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +114 -0
- package/skills/cloudflare/references/stream/api-live.md +195 -0
- package/skills/cloudflare/references/stream/api.md +199 -0
- package/skills/cloudflare/references/stream/configuration.md +141 -0
- package/skills/cloudflare/references/stream/gotchas.md +130 -0
- package/skills/cloudflare/references/stream/patterns.md +184 -0
- package/skills/cloudflare/references/tail-workers/README.md +89 -0
- package/skills/cloudflare/references/tail-workers/api.md +200 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
- package/skills/cloudflare/references/terraform/README.md +102 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +129 -0
- package/skills/cloudflare/references/tunnel/api.md +193 -0
- package/skills/cloudflare/references/tunnel/configuration.md +157 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
- package/skills/cloudflare/references/tunnel/networking.md +168 -0
- package/skills/cloudflare/references/tunnel/patterns.md +192 -0
- package/skills/cloudflare/references/turn/README.md +82 -0
- package/skills/cloudflare/references/turn/api.md +239 -0
- package/skills/cloudflare/references/turn/configuration.md +179 -0
- package/skills/cloudflare/references/turn/gotchas.md +231 -0
- package/skills/cloudflare/references/turn/patterns.md +213 -0
- package/skills/cloudflare/references/turnstile/README.md +99 -0
- package/skills/cloudflare/references/turnstile/api.md +240 -0
- package/skills/cloudflare/references/turnstile/configuration.md +222 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
- package/skills/cloudflare/references/turnstile/patterns.md +193 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +88 -0
- package/skills/cloudflare/references/vectorize/configuration.md +88 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
- package/skills/cloudflare/references/vectorize/patterns.md +90 -0
- package/skills/cloudflare/references/waf/README.md +113 -0
- package/skills/cloudflare/references/waf/api.md +202 -0
- package/skills/cloudflare/references/waf/configuration.md +203 -0
- package/skills/cloudflare/references/waf/gotchas.md +204 -0
- package/skills/cloudflare/references/waf/patterns.md +197 -0
- package/skills/cloudflare/references/web-analytics/README.md +141 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
- package/skills/cloudflare/references/web-analytics/integration.md +60 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
- package/skills/cloudflare/references/workerd/README.md +78 -0
- package/skills/cloudflare/references/workerd/api.md +185 -0
- package/skills/cloudflare/references/workerd/configuration.md +183 -0
- package/skills/cloudflare/references/workerd/gotchas.md +139 -0
- package/skills/cloudflare/references/workerd/patterns.md +192 -0
- package/skills/cloudflare/references/workers/README.md +108 -0
- package/skills/cloudflare/references/workers/api.md +195 -0
- package/skills/cloudflare/references/workers/configuration.md +185 -0
- package/skills/cloudflare/references/workers/frameworks.md +197 -0
- package/skills/cloudflare/references/workers/gotchas.md +137 -0
- package/skills/cloudflare/references/workers/patterns.md +198 -0
- package/skills/cloudflare/references/workers-ai/README.md +197 -0
- package/skills/cloudflare/references/workers-ai/api.md +112 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
- package/skills/cloudflare/references/workers-playground/README.md +127 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
- package/skills/cloudflare/references/workers-vpc/README.md +127 -0
- package/skills/cloudflare/references/workers-vpc/api.md +202 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
- package/skills/cloudflare/references/workflows/README.md +77 -0
- package/skills/cloudflare/references/workflows/api.md +218 -0
- package/skills/cloudflare/references/workflows/configuration.md +152 -0
- package/skills/cloudflare/references/workflows/gotchas.md +90 -0
- package/skills/cloudflare/references/workflows/patterns.md +175 -0
- package/skills/cloudflare/references/wrangler/README.md +135 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +197 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
- package/skills/cloudflare/references/wrangler/patterns.md +209 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
- package/skills/cloudflare/references/zaraz/README.md +111 -0
- package/skills/cloudflare/references/zaraz/api.md +112 -0
- package/skills/cloudflare/references/zaraz/configuration.md +90 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
- package/skills/cloudflare/references/zaraz/patterns.md +74 -0
- package/skills/cloudflare-email-service/SKILL.md +103 -0
- package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
- package/skills/cloudflare-email-service/references/deliverability.md +285 -0
- package/skills/cloudflare-email-service/references/rest-api.md +184 -0
- package/skills/cloudflare-email-service/references/routing.md +199 -0
- package/skills/cloudflare-email-service/references/sending.md +252 -0
- package/skills/cloudflare-one/SKILL.md +176 -0
- package/skills/cloudflare-one-migrations/SKILL.md +110 -0
- package/skills/durable-objects/SKILL.md +186 -0
- package/skills/durable-objects/references/rules.md +295 -0
- package/skills/durable-objects/references/testing.md +264 -0
- package/skills/durable-objects/references/workers.md +346 -0
- package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
- package/skills/sandbox-next/SKILL.md +91 -0
- package/skills/sandbox-next/references/api-quick-ref.md +94 -0
- package/skills/sandbox-next/references/examples.md +15 -0
- package/skills/sandbox-stable/SKILL.md +110 -0
- package/skills/turnstile-spin/README.md +51 -0
- package/skills/turnstile-spin/SKILL.md +330 -0
- package/skills/turnstile-spin/references/astro.md +199 -0
- package/skills/turnstile-spin/references/hugo.md +114 -0
- package/skills/turnstile-spin/references/nextjs-app.md +261 -0
- package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
- package/skills/turnstile-spin/references/sveltekit.md +191 -0
- package/skills/turnstile-spin/references/vanilla-html.md +157 -0
- package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
- package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
- package/skills/turnstile-spin/scripts/validate.sh +137 -0
- package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
- package/skills/turnstile-spin/tests/validation.md +62 -0
- package/skills/workers-best-practices/SKILL.md +127 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +467 -0
- package/skills/wrangler/SKILL.md +922 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Durable Execution
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/durable-execution/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
Fibers let agent work survive Durable Object eviction. Progress is checkpointed to SQLite; on recovery, you decide what to do.
|
|
6
|
+
|
|
7
|
+
## `runFiber`
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
export class MyAgent extends Agent<Env, State> {
|
|
11
|
+
async onRequest(request: Request) {
|
|
12
|
+
await this.runFiber("process-data", async (ctx) => {
|
|
13
|
+
const step1 = await fetchData();
|
|
14
|
+
ctx.stash({ step: 1, data: step1 });
|
|
15
|
+
|
|
16
|
+
const step2 = await transform(step1);
|
|
17
|
+
ctx.stash({ step: 2, result: step2 });
|
|
18
|
+
|
|
19
|
+
this.setState({ result: step2 });
|
|
20
|
+
});
|
|
21
|
+
return new Response("Started");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async onFiberRecovered(ctx) {
|
|
25
|
+
const checkpoint = ctx.stash;
|
|
26
|
+
if (checkpoint.step === 1) {
|
|
27
|
+
const step2 = await transform(checkpoint.data);
|
|
28
|
+
this.setState({ result: step2 });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Key APIs
|
|
35
|
+
|
|
36
|
+
| API | Purpose |
|
|
37
|
+
|-----|---------|
|
|
38
|
+
| `this.runFiber(name, fn)` | Start a named fiber |
|
|
39
|
+
| `ctx.stash` / `this.stash` | Read latest checkpoint |
|
|
40
|
+
| `ctx.stash = data` | Write checkpoint (JSON-serializable) |
|
|
41
|
+
| `onFiberRecovered(ctx)` | Called on DO restart if fiber was in-flight |
|
|
42
|
+
| `keepAlive()` | Prevent hibernation while fiber runs |
|
|
43
|
+
| `keepAliveWhile(fn)` | Keep alive for duration of async function |
|
|
44
|
+
|
|
45
|
+
## Important
|
|
46
|
+
|
|
47
|
+
- `stash` replaces the entire checkpoint — not a merge
|
|
48
|
+
- The lambda is NOT restored on recovery — only the stash data is. You must re-derive what to do in `onFiberRecovered`
|
|
49
|
+
- No auto-retry on throw — handle errors yourself
|
|
50
|
+
- For long-running pipelines with automatic retries, use Workflows instead
|
|
51
|
+
- Filter concurrent fibers by `ctx.name` in `onFiberRecovered`
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Email Handling
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/email/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Agents receive and reply to emails via Cloudflare Email Routing.
|
|
8
|
+
|
|
9
|
+
## Wrangler Configuration
|
|
10
|
+
|
|
11
|
+
```jsonc
|
|
12
|
+
{
|
|
13
|
+
"durable_objects": {
|
|
14
|
+
"bindings": [{ "name": "EmailAgent", "class_name": "EmailAgent" }]
|
|
15
|
+
},
|
|
16
|
+
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["EmailAgent"] }],
|
|
17
|
+
"send_email": [
|
|
18
|
+
{ "name": "SEB", "destination_address": "reply@yourdomain.com" }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Basic Email Handler
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { Agent } from "agents";
|
|
27
|
+
import { type AgentEmail } from "agents/email";
|
|
28
|
+
import PostalMime from "postal-mime";
|
|
29
|
+
|
|
30
|
+
export class EmailAgent extends Agent<Env, State> {
|
|
31
|
+
async onEmail(email: AgentEmail) {
|
|
32
|
+
const raw = await email.getRaw();
|
|
33
|
+
const parsed = await PostalMime.parse(raw);
|
|
34
|
+
|
|
35
|
+
console.log("From:", email.from);
|
|
36
|
+
console.log("Subject:", parsed.subject);
|
|
37
|
+
|
|
38
|
+
await this.replyToEmail(email, {
|
|
39
|
+
fromName: "My Agent",
|
|
40
|
+
subject: `Re: ${parsed.subject}`,
|
|
41
|
+
body: "Thanks for your email!"
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Routing Emails
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { routeAgentRequest, routeAgentEmail } from "agents";
|
|
51
|
+
import { createAddressBasedEmailResolver } from "agents/email";
|
|
52
|
+
|
|
53
|
+
export default {
|
|
54
|
+
async email(message, env) {
|
|
55
|
+
await routeAgentEmail(message, env, {
|
|
56
|
+
resolver: createAddressBasedEmailResolver("EmailAgent")
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
async fetch(request, env) {
|
|
61
|
+
return routeAgentRequest(request, env) ?? new Response("Not found", { status: 404 });
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Resolvers
|
|
67
|
+
|
|
68
|
+
### Address-Based (Inbound Mail)
|
|
69
|
+
|
|
70
|
+
Routes based on recipient address:
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { createAddressBasedEmailResolver } from "agents/email";
|
|
74
|
+
|
|
75
|
+
const resolver = createAddressBasedEmailResolver("EmailAgent");
|
|
76
|
+
// support@example.com → EmailAgent, instance "support"
|
|
77
|
+
// NotificationAgent+user123@example.com → NotificationAgent, instance "user123"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Secure Reply (Reply Flows)
|
|
81
|
+
|
|
82
|
+
Verifies replies are authentic using HMAC-SHA256 signatures:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { createSecureReplyEmailResolver } from "agents/email";
|
|
86
|
+
|
|
87
|
+
const resolver = createSecureReplyEmailResolver(env.EMAIL_SECRET, {
|
|
88
|
+
maxAge: 7 * 24 * 60 * 60, // 7 days (default: 30 days)
|
|
89
|
+
onInvalidSignature: (email, reason) => {
|
|
90
|
+
console.warn(`Invalid signature from ${email.from}: ${reason}`);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Sign outbound emails to enable secure reply routing:
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
await this.replyToEmail(email, {
|
|
99
|
+
fromName: "My Agent",
|
|
100
|
+
body: "Thanks!",
|
|
101
|
+
secret: this.env.EMAIL_SECRET // Signs headers for secure reply routing
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Catch-All (Single Instance)
|
|
106
|
+
|
|
107
|
+
Routes all emails to one agent instance:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { createCatchAllEmailResolver } from "agents/email";
|
|
111
|
+
|
|
112
|
+
const resolver = createCatchAllEmailResolver("EmailAgent", "default");
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Combining Resolvers
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
async email(message, env) {
|
|
119
|
+
const secureReply = createSecureReplyEmailResolver(env.EMAIL_SECRET);
|
|
120
|
+
const addressBased = createAddressBasedEmailResolver("EmailAgent");
|
|
121
|
+
|
|
122
|
+
await routeAgentEmail(message, env, {
|
|
123
|
+
resolver: async (email, env) => {
|
|
124
|
+
// Try secure reply first
|
|
125
|
+
const result = await secureReply(email, env);
|
|
126
|
+
if (result) return result;
|
|
127
|
+
// Fall back to address-based
|
|
128
|
+
return addressBased(email, env);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Utilities
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { isAutoReplyEmail } from "agents/email";
|
|
138
|
+
|
|
139
|
+
async onEmail(email: AgentEmail) {
|
|
140
|
+
if (isAutoReplyEmail(email.headers)) {
|
|
141
|
+
// Skip auto-replies (vacation, out-of-office, etc.)
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Process email...
|
|
145
|
+
}
|
|
146
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Human-in-the-Loop
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/concepts/human-in-the-loop/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
Multiple patterns for adding human approval to agent actions.
|
|
6
|
+
|
|
7
|
+
## Decision Guide
|
|
8
|
+
|
|
9
|
+
| Pattern | Best for |
|
|
10
|
+
|---------|----------|
|
|
11
|
+
| Workflows `waitForApproval` | Long-running background tasks |
|
|
12
|
+
| AI SDK `needsApproval` on tools | Chat tool calls requiring approval |
|
|
13
|
+
| Client tools (`onToolCall`) | Tools that execute in the browser |
|
|
14
|
+
| MCP `elicitInput` | Gathering structured input from MCP clients |
|
|
15
|
+
|
|
16
|
+
## Workflow Approvals
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// In AgentWorkflow:
|
|
20
|
+
const approved = await step.waitForEvent<{ approved: boolean }>("approval", {
|
|
21
|
+
timeout: "7d"
|
|
22
|
+
});
|
|
23
|
+
if (!approved.approved) throw new Error("Rejected");
|
|
24
|
+
|
|
25
|
+
// From agent:
|
|
26
|
+
await this.approveWorkflow(workflowId);
|
|
27
|
+
await this.rejectWorkflow(workflowId);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Chat Tool Approvals (`needsApproval`)
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
const tools = {
|
|
34
|
+
deleteItem: tool({
|
|
35
|
+
description: "Delete an item",
|
|
36
|
+
parameters: z.object({ id: z.string() }),
|
|
37
|
+
execute: async ({ id }) => { /* delete */ },
|
|
38
|
+
needsApproval: true // or a function: (toolCall) => boolean
|
|
39
|
+
})
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Client handles approval:
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
const { addToolApprovalResponse, addToolOutput } = useAgentChat({
|
|
47
|
+
agent,
|
|
48
|
+
onToolCall: async ({ toolCall }) => {
|
|
49
|
+
if (confirm(`Allow ${toolCall.toolName}?`)) {
|
|
50
|
+
return { approve: true };
|
|
51
|
+
}
|
|
52
|
+
return { approve: false };
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
To deny with a custom message:
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
addToolOutput(toolCallId, "output-error", "User rejected this action");
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Important
|
|
64
|
+
|
|
65
|
+
- `waitForApproval` may return `undefined` on timeout — handle it
|
|
66
|
+
- `addToolOutput` with `output-error` does NOT auto-continue the LLM — you may need `sendMessage` after
|
|
67
|
+
- For OpenAI Agents SDK, use `needsApproval` on the tool definition (same pattern)
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# MCP Integration
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/mcp-client-api/ and https://developers.cloudflare.com/agents/api-reference/mcp-agent-api/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
Agents include a multi-server MCP client for connecting to external MCP servers, and `McpAgent` for building MCP servers.
|
|
6
|
+
|
|
7
|
+
## Add an MCP Server
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { Agent, callable } from "agents";
|
|
11
|
+
|
|
12
|
+
export class MyAgent extends Agent<Env, State> {
|
|
13
|
+
@callable()
|
|
14
|
+
async addServer(name: string, url: string) {
|
|
15
|
+
// Options-based API (recommended)
|
|
16
|
+
const result = await this.addMcpServer(name, url, {
|
|
17
|
+
callbackHost: "https://my-worker.workers.dev",
|
|
18
|
+
transport: { headers: { Authorization: "Bearer ..." } }
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
if (result.state === "authenticating") {
|
|
22
|
+
// OAuth required - redirect user to result.authUrl
|
|
23
|
+
return { needsAuth: true, authUrl: result.authUrl };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return { ready: true, id: result.id };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Use MCP Tools
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
async onChatMessage() {
|
|
35
|
+
// Get AI-compatible tools from all connected MCP servers
|
|
36
|
+
const mcpTools = this.mcp.getAITools();
|
|
37
|
+
|
|
38
|
+
const allTools = {
|
|
39
|
+
...localTools,
|
|
40
|
+
...mcpTools
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const result = streamText({
|
|
44
|
+
model: openai("gpt-4o"),
|
|
45
|
+
messages: await convertToModelMessages(this.messages),
|
|
46
|
+
tools: allTools
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return result.toUIMessageStreamResponse();
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## List MCP Resources
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
// List all registered servers
|
|
57
|
+
const servers = this.mcp.listServers();
|
|
58
|
+
|
|
59
|
+
// List tools from all servers
|
|
60
|
+
const tools = this.mcp.listTools();
|
|
61
|
+
|
|
62
|
+
// List resources
|
|
63
|
+
const resources = this.mcp.listResources();
|
|
64
|
+
|
|
65
|
+
// List prompts
|
|
66
|
+
const prompts = this.mcp.listPrompts();
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Remove Server
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
await this.removeMcpServer(serverId);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Building an MCP Server
|
|
76
|
+
|
|
77
|
+
Use `McpAgent` from the SDK to create an MCP server.
|
|
78
|
+
|
|
79
|
+
**Install dependencies:**
|
|
80
|
+
```bash
|
|
81
|
+
npm install @modelcontextprotocol/sdk zod
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Wrangler config:**
|
|
85
|
+
```jsonc
|
|
86
|
+
{
|
|
87
|
+
"durable_objects": {
|
|
88
|
+
"bindings": [{ "name": "MyMCP", "class_name": "MyMCP" }]
|
|
89
|
+
},
|
|
90
|
+
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyMCP"] }]
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Server implementation:**
|
|
95
|
+
```typescript
|
|
96
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
97
|
+
import { McpAgent } from "agents/mcp";
|
|
98
|
+
import { z } from "zod";
|
|
99
|
+
|
|
100
|
+
type State = { counter: number };
|
|
101
|
+
|
|
102
|
+
export class MyMCP extends McpAgent<Env, State, {}> {
|
|
103
|
+
server = new McpServer({
|
|
104
|
+
name: "MyMCPServer",
|
|
105
|
+
version: "1.0.0"
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
initialState = { counter: 0 };
|
|
109
|
+
|
|
110
|
+
async init() {
|
|
111
|
+
// Register a resource
|
|
112
|
+
this.server.resource("counter", "mcp://resource/counter", (uri) => ({
|
|
113
|
+
contents: [{ text: String(this.state.counter), uri: uri.href }]
|
|
114
|
+
}));
|
|
115
|
+
|
|
116
|
+
// Register a tool
|
|
117
|
+
this.server.registerTool(
|
|
118
|
+
"increment",
|
|
119
|
+
{
|
|
120
|
+
description: "Increment the counter",
|
|
121
|
+
inputSchema: { amount: z.number().default(1) }
|
|
122
|
+
},
|
|
123
|
+
async ({ amount }) => {
|
|
124
|
+
this.setState({ counter: this.state.counter + amount });
|
|
125
|
+
return {
|
|
126
|
+
content: [{ text: `Counter: ${this.state.counter}`, type: "text" }]
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Serve MCP Server
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
export default {
|
|
138
|
+
fetch(request: Request, env: Env, ctx: ExecutionContext) {
|
|
139
|
+
const url = new URL(request.url);
|
|
140
|
+
|
|
141
|
+
// Streamable HTTP transport (recommended)
|
|
142
|
+
if (url.pathname.startsWith("/mcp")) {
|
|
143
|
+
return MyMCP.serve("/mcp", { binding: "MyMCP" }).fetch(request, env, ctx);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// SSE transport (legacy, deprecated)
|
|
147
|
+
if (url.pathname.startsWith("/sse")) {
|
|
148
|
+
return MyMCP.serveSSE("/sse", { binding: "MyMCP" }).fetch(request, env, ctx);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return new Response("Not found", { status: 404 });
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Transports
|
|
157
|
+
|
|
158
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/mcp-transports/ for complete documentation.
|
|
159
|
+
|
|
160
|
+
| Transport | Use for |
|
|
161
|
+
|-----------|---------|
|
|
162
|
+
| Streamable HTTP (`serve`) | External/public clients (recommended) |
|
|
163
|
+
| SSE (`serveSSE`) | Legacy clients only (deprecated) |
|
|
164
|
+
| RPC (`addMcpServer(name, env.Binding)`) | Same-Worker internal calls (fastest) |
|
|
165
|
+
|
|
166
|
+
### RPC Transport (Same Worker)
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
async onStart() {
|
|
170
|
+
await this.addMcpServer("internal-tools", this.env.MyMCPBinding, {
|
|
171
|
+
props: { userId: this.name }
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Retry on MCP Connections
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
await this.addMcpServer("tools", url, {
|
|
180
|
+
retry: { maxAttempts: 3, baseDelayMs: 500 }
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Securing MCP Servers
|
|
185
|
+
|
|
186
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/securing-mcp-servers/ for complete documentation.
|
|
187
|
+
|
|
188
|
+
Use `@cloudflare/workers-oauth-provider` to add OAuth in front of your MCP server. See the securing docs for proxy patterns and `redirect_uri` validation.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Observability
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/observability/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
Agents emit structured events via Node.js `diagnostics_channel`. Subscribe in development or forward via Tail Workers in production.
|
|
6
|
+
|
|
7
|
+
## Subscribe to Events
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { subscribe } from "agents/observability";
|
|
11
|
+
|
|
12
|
+
subscribe("agents:rpc", (event) => {
|
|
13
|
+
console.log(`RPC call: ${event.payload.method}`);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
subscribe("agents:state", (event) => {
|
|
17
|
+
console.log(`State change on ${event.agent}`);
|
|
18
|
+
});
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Available Channels
|
|
22
|
+
|
|
23
|
+
| Channel | Events |
|
|
24
|
+
|---------|--------|
|
|
25
|
+
| `agents:state` | State changes |
|
|
26
|
+
| `agents:rpc` | `@callable` invocations |
|
|
27
|
+
| `agents:message` | WebSocket messages |
|
|
28
|
+
| `agents:schedule` | Schedule triggers |
|
|
29
|
+
| `agents:lifecycle` | Agent start, connect, disconnect |
|
|
30
|
+
| `agents:workflow` | Workflow progress, completion, errors |
|
|
31
|
+
| `agents:mcp` | MCP server connections, tool calls |
|
|
32
|
+
| `agents:email` | Email received |
|
|
33
|
+
|
|
34
|
+
## Per-Agent Override
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
export class MyAgent extends Agent<Env, State> {
|
|
38
|
+
observability = undefined; // disable for this agent
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Production: Tail Workers
|
|
43
|
+
|
|
44
|
+
In production, events appear as `diagnosticsChannelEvents` on the Tail Worker `event` object. Attach a Tail Worker to your agent's Worker to forward events to your observability platform.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Queue & Retries
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/queue-tasks/ and https://developers.cloudflare.com/agents/api-reference/retries/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
## Built-in Queue
|
|
6
|
+
|
|
7
|
+
FIFO queue persisted in SQLite. Sequential processing, one item at a time.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
export class MyAgent extends Agent<Env, State> {
|
|
11
|
+
async onRequest(request: Request) {
|
|
12
|
+
this.queue("processItem", { id: "abc", data: "..." });
|
|
13
|
+
this.queue("processItem", { id: "def", data: "..." }, { retry: { maxAttempts: 5 } });
|
|
14
|
+
return new Response("Queued");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async processItem(payload: { id: string; data: string }, queueItem: QueueItem) {
|
|
18
|
+
await doWork(payload);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Queue Management
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
const items = this.getQueue();
|
|
27
|
+
const byCallback = this.getQueues("processItem");
|
|
28
|
+
this.dequeue(itemId);
|
|
29
|
+
this.dequeueAll();
|
|
30
|
+
this.dequeueAllByCallback("processItem");
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Retries
|
|
34
|
+
|
|
35
|
+
Exponential backoff with full jitter. Defaults: 3 attempts, 100ms base, 3000ms max.
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
const result = await this.retry(
|
|
39
|
+
async () => {
|
|
40
|
+
const res = await fetch("https://api.example.com/data");
|
|
41
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
42
|
+
return res.json();
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
maxAttempts: 5,
|
|
46
|
+
baseDelayMs: 200,
|
|
47
|
+
maxDelayMs: 5000,
|
|
48
|
+
shouldRetry: (err, nextAttempt) => {
|
|
49
|
+
if (err.message.includes("429")) return true;
|
|
50
|
+
if (err.message.includes("401")) return false;
|
|
51
|
+
return nextAttempt <= 3;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Retry on Schedules and Queue
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
await this.schedule(60, "task", payload, { retry: { maxAttempts: 3 } });
|
|
61
|
+
await this.scheduleEvery(30, "poll", undefined, { retry: { maxAttempts: 2 } });
|
|
62
|
+
this.queue("handler", payload, { retry: { maxAttempts: 5 } });
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Class-level Defaults
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
export class MyAgent extends Agent<Env, State> {
|
|
69
|
+
static options = {
|
|
70
|
+
retry: { maxAttempts: 5, baseDelayMs: 200, maxDelayMs: 10000 }
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Important
|
|
76
|
+
|
|
77
|
+
- `shouldRetry` only works on `this.retry()` — not on schedule/queue (callbacks aren't serializable)
|
|
78
|
+
- Queue retries block head-of-line; long delays keep the DO awake — use `schedule` for long waits instead
|
|
79
|
+
- No dead-letter queue — failed items are removed after retries exhausted
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Routing
|
|
2
|
+
|
|
3
|
+
Fetch https://developers.cloudflare.com/agents/api-reference/routing/ for complete documentation.
|
|
4
|
+
|
|
5
|
+
## Default URL Pattern
|
|
6
|
+
|
|
7
|
+
`/agents/{kebab-class-name}/{instance-name}`
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { routeAgentRequest } from "agents";
|
|
11
|
+
|
|
12
|
+
export default {
|
|
13
|
+
fetch: (req, env) =>
|
|
14
|
+
routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 })
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| Class | URL |
|
|
19
|
+
|-------|-----|
|
|
20
|
+
| `Counter` | `/agents/counter/user-123` |
|
|
21
|
+
| `ChatRoom` | `/agents/chat-room/lobby` |
|
|
22
|
+
| `MyAgent` | `/agents/my-agent/default` |
|
|
23
|
+
|
|
24
|
+
Subpaths after the instance name (e.g. `/agents/my-agent/default/api/data`) route to `onRequest`.
|
|
25
|
+
|
|
26
|
+
## Custom Routing with `getAgentByName`
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { getAgentByName } from "agents";
|
|
30
|
+
|
|
31
|
+
export default {
|
|
32
|
+
async fetch(req, env) {
|
|
33
|
+
const url = new URL(req.url);
|
|
34
|
+
if (url.pathname.startsWith("/api/")) {
|
|
35
|
+
const agent = getAgentByName(env.MyAgent, "singleton");
|
|
36
|
+
return agent.fetch(req);
|
|
37
|
+
}
|
|
38
|
+
return routeAgentRequest(req, env);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Options
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
routeAgentRequest(req, env, {
|
|
47
|
+
cors: true,
|
|
48
|
+
prefix: "/api/agents",
|
|
49
|
+
locationHint: "enam",
|
|
50
|
+
jurisdiction: "eu",
|
|
51
|
+
props: { userId: "123" },
|
|
52
|
+
onBeforeConnect: async (req) => { /* auth check */ },
|
|
53
|
+
onBeforeRequest: async (req) => { /* auth check */ }
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`props` are delivered to `onStart(props)` on first access.
|
|
58
|
+
|
|
59
|
+
## Client Side
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
useAgent({
|
|
63
|
+
agent: "MyAgent",
|
|
64
|
+
name: "instance-1",
|
|
65
|
+
host: "https://my-worker.workers.dev",
|
|
66
|
+
basePath: "/api/agents",
|
|
67
|
+
path: "/custom-subpath"
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Common Mistakes
|
|
72
|
+
|
|
73
|
+
- Class name `MyAgent` becomes kebab `my-agent` in URLs — match exactly
|
|
74
|
+
- "Namespace not found" error = the `class_name` in wrangler doesn't match your exported class
|
|
75
|
+
- If `sendIdentityOnConnect: false`, the `ready` promise on the client may never resolve — use state sync instead
|