memory-journal-mcp 7.7.0 → 8.0.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/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +7 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -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 +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -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 +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -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 +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -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 +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -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 +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -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 +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Patterns & Use Cases
|
|
2
|
+
|
|
3
|
+
## AI Chat w/Tools
|
|
4
|
+
|
|
5
|
+
**Server (AIChatAgent):**
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { AIChatAgent } from 'agents'
|
|
9
|
+
import { openai } from '@ai-sdk/openai'
|
|
10
|
+
import { tool } from 'ai'
|
|
11
|
+
import { z } from 'zod'
|
|
12
|
+
|
|
13
|
+
export class ChatAgent extends AIChatAgent<Env> {
|
|
14
|
+
async onChatMessage(onFinish) {
|
|
15
|
+
return this.streamText({
|
|
16
|
+
model: openai('gpt-4'),
|
|
17
|
+
messages: this.messages, // Auto-managed
|
|
18
|
+
tools: {
|
|
19
|
+
getWeather: tool({
|
|
20
|
+
description: 'Get current weather',
|
|
21
|
+
parameters: z.object({ city: z.string() }),
|
|
22
|
+
execute: async ({ city }) => `Weather in ${city}: Sunny, 72°F`,
|
|
23
|
+
}),
|
|
24
|
+
searchDocs: tool({
|
|
25
|
+
description: 'Search documentation',
|
|
26
|
+
parameters: z.object({ query: z.string() }),
|
|
27
|
+
execute: async ({ query }) =>
|
|
28
|
+
JSON.stringify(
|
|
29
|
+
this.sql<{
|
|
30
|
+
title
|
|
31
|
+
content
|
|
32
|
+
}>`SELECT title, content FROM docs WHERE content LIKE ${'%' + query + '%'}`
|
|
33
|
+
),
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
onFinish,
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Client (React):**
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
import { useAgent } from 'agents/react'
|
|
46
|
+
import { useAgentChat } from 'agents/ai-react'
|
|
47
|
+
|
|
48
|
+
function ChatUI() {
|
|
49
|
+
const agent = useAgent({ agent: 'ChatAgent' })
|
|
50
|
+
const { messages, input, handleInputChange, handleSubmit, isLoading } = useAgentChat({ agent })
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<div>
|
|
54
|
+
{messages.map((m) => (
|
|
55
|
+
<div key={m.id}>
|
|
56
|
+
{m.role}: {m.content}
|
|
57
|
+
</div>
|
|
58
|
+
))}
|
|
59
|
+
<form onSubmit={handleSubmit}>
|
|
60
|
+
<input value={input} onChange={handleInputChange} disabled={isLoading} />
|
|
61
|
+
<button disabled={isLoading}>Send</button>
|
|
62
|
+
</form>
|
|
63
|
+
</div>
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Human-in-the-Loop (Client Tools)
|
|
69
|
+
|
|
70
|
+
Server defines tool, client executes:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
// Server
|
|
74
|
+
export class ChatAgent extends AIChatAgent<Env> {
|
|
75
|
+
async onChatMessage(onFinish) {
|
|
76
|
+
return this.streamText({
|
|
77
|
+
model: openai('gpt-4'),
|
|
78
|
+
messages: this.messages,
|
|
79
|
+
tools: {
|
|
80
|
+
confirmAction: tool({
|
|
81
|
+
description: 'Ask user to confirm',
|
|
82
|
+
parameters: z.object({ action: z.string() }),
|
|
83
|
+
execute: 'client', // Client-side execution
|
|
84
|
+
}),
|
|
85
|
+
},
|
|
86
|
+
onFinish,
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Client
|
|
92
|
+
const { messages } = useAgentChat({
|
|
93
|
+
agent,
|
|
94
|
+
onToolCall: async (toolCall) => {
|
|
95
|
+
if (toolCall.toolName === 'confirmAction') {
|
|
96
|
+
return { confirmed: window.confirm(`Confirm: ${toolCall.args.action}?`) }
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
})
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Task Queue & Scheduled Processing
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
export class TaskAgent extends Agent<Env> {
|
|
106
|
+
onStart() {
|
|
107
|
+
this.schedule('*/5 * * * *', 'processQueue', {}) // Every 5 min
|
|
108
|
+
this.schedule('0 0 * * *', 'dailyCleanup', {}) // Daily
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async onRequest(req: Request) {
|
|
112
|
+
await this.queue('processVideo', { videoId: (await req.json()).videoId })
|
|
113
|
+
return Response.json({ queued: true })
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async processQueue() {
|
|
117
|
+
const tasks = await this.dequeue(10)
|
|
118
|
+
for (const task of tasks) {
|
|
119
|
+
if (task.name === 'processVideo') await this.processVideo(task.data.videoId)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async dailyCleanup() {
|
|
124
|
+
this.sql`DELETE FROM logs WHERE created_at < ${Date.now() - 86400000}`
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Manual WebSocket Chat
|
|
130
|
+
|
|
131
|
+
Custom protocols (non-AI):
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
export class ChatAgent extends Agent<Env> {
|
|
135
|
+
async onConnect(conn: Connection, ctx: ConnectionContext) {
|
|
136
|
+
conn.accept()
|
|
137
|
+
conn.setState({ userId: ctx.request.headers.get('X-User-ID') || 'anon' })
|
|
138
|
+
conn.send(JSON.stringify({ type: 'history', messages: this.state.messages }))
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async onMessage(conn: Connection, msg: WSMessage) {
|
|
142
|
+
const newMsg = {
|
|
143
|
+
userId: conn.state.userId,
|
|
144
|
+
text: JSON.parse(msg as string).text,
|
|
145
|
+
timestamp: Date.now(),
|
|
146
|
+
}
|
|
147
|
+
this.setState({ messages: [...this.state.messages, newMsg] })
|
|
148
|
+
this.connections.forEach((c) => c.send(JSON.stringify(newMsg)))
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Email Processing w/AI
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
export class EmailAgent extends Agent<Env> {
|
|
157
|
+
async onEmail(email: AgentEmail) {
|
|
158
|
+
const [text, from, subject] = [
|
|
159
|
+
await email.text(),
|
|
160
|
+
email.from,
|
|
161
|
+
email.headers.get('subject') || '',
|
|
162
|
+
]
|
|
163
|
+
this.sql`INSERT INTO emails (from_addr, subject, body) VALUES (${from}, ${subject}, ${text})`
|
|
164
|
+
|
|
165
|
+
const { text: summary } = await generateText({
|
|
166
|
+
model: openai('gpt-4o-mini'),
|
|
167
|
+
prompt: `Summarize: ${subject}\n\n${text}`,
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
this.connections.forEach((c) => c.send(JSON.stringify({ type: 'new_email', from, summary })))
|
|
171
|
+
if (summary.includes('urgent')) await this.schedule(0, 'sendAutoReply', { to: from })
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Real-time Collaboration
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
export class GameAgent extends Agent<Env> {
|
|
180
|
+
initialState = { players: [], gameStarted: false }
|
|
181
|
+
|
|
182
|
+
async onConnect(conn: Connection, ctx: ConnectionContext) {
|
|
183
|
+
conn.accept()
|
|
184
|
+
const playerId = ctx.request.headers.get('X-Player-ID') || crypto.randomUUID()
|
|
185
|
+
conn.setState({ playerId })
|
|
186
|
+
|
|
187
|
+
const newPlayer = { id: playerId, score: 0 }
|
|
188
|
+
this.setState({ ...this.state, players: [...this.state.players, newPlayer] })
|
|
189
|
+
this.connections.forEach((c) =>
|
|
190
|
+
c.send(JSON.stringify({ type: 'player_joined', player: newPlayer }))
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
async onMessage(conn: Connection, msg: WSMessage) {
|
|
195
|
+
const m = JSON.parse(msg as string)
|
|
196
|
+
|
|
197
|
+
if (m.type === 'move') {
|
|
198
|
+
this.setState({
|
|
199
|
+
...this.state,
|
|
200
|
+
players: this.state.players.map((p) =>
|
|
201
|
+
p.id === conn.state.playerId ? { ...p, score: p.score + m.points } : p
|
|
202
|
+
),
|
|
203
|
+
})
|
|
204
|
+
this.connections.forEach((c) =>
|
|
205
|
+
c.send(JSON.stringify({ type: 'player_moved', playerId: conn.state.playerId }))
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (m.type === 'start' && this.state.players.length >= 2) {
|
|
210
|
+
this.setState({ ...this.state, gameStarted: true })
|
|
211
|
+
this.connections.forEach((c) => c.send(JSON.stringify({ type: 'game_started' })))
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Cloudflare AI Gateway
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing Cloudflare AI Gateway - a universal gateway for AI model providers with analytics, caching, rate limiting, and routing capabilities.
|
|
4
|
+
|
|
5
|
+
## When to Use This Reference
|
|
6
|
+
|
|
7
|
+
- Setting up AI Gateway for any AI provider (OpenAI, Anthropic, Workers AI, etc.)
|
|
8
|
+
- Implementing caching, rate limiting, or request retry/fallback
|
|
9
|
+
- Configuring dynamic routing with A/B testing or model fallbacks
|
|
10
|
+
- Managing provider API keys securely with BYOK
|
|
11
|
+
- Adding security features (guardrails, DLP)
|
|
12
|
+
- Setting up observability with logging and custom metadata
|
|
13
|
+
- Debugging AI Gateway requests or optimizing configurations
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
**What's your setup?**
|
|
18
|
+
|
|
19
|
+
- **Using Vercel AI SDK** → Pattern 1 (recommended) - see [sdk-integration.md](./sdk-integration.md)
|
|
20
|
+
- **Using OpenAI SDK** → Pattern 2 - see [sdk-integration.md](./sdk-integration.md)
|
|
21
|
+
- **Cloudflare Worker + Workers AI** → Pattern 3 - see [sdk-integration.md](./sdk-integration.md)
|
|
22
|
+
- **Direct HTTP (any language)** → Pattern 4 - see [configuration.md](./configuration.md)
|
|
23
|
+
- **Framework (LangChain, etc.)** → See [sdk-integration.md](./sdk-integration.md)
|
|
24
|
+
|
|
25
|
+
## Pattern 1: Vercel AI SDK (Recommended)
|
|
26
|
+
|
|
27
|
+
Most modern pattern using official `ai-gateway-provider` package with automatic fallbacks.
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { createAiGateway } from 'ai-gateway-provider'
|
|
31
|
+
import { createOpenAI } from '@ai-sdk/openai'
|
|
32
|
+
import { generateText } from 'ai'
|
|
33
|
+
|
|
34
|
+
const gateway = createAiGateway({
|
|
35
|
+
accountId: process.env.CF_ACCOUNT_ID,
|
|
36
|
+
gateway: process.env.CF_GATEWAY_ID,
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const openai = createOpenAI({
|
|
40
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
// Single model
|
|
44
|
+
const { text } = await generateText({
|
|
45
|
+
model: gateway(openai('gpt-4o')),
|
|
46
|
+
prompt: 'Hello',
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
// Automatic fallback array
|
|
50
|
+
const { text } = await generateText({
|
|
51
|
+
model: gateway([
|
|
52
|
+
openai('gpt-4o'), // Try first
|
|
53
|
+
anthropic('claude-sonnet-4-5'), // Fallback
|
|
54
|
+
]),
|
|
55
|
+
prompt: 'Hello',
|
|
56
|
+
})
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Install:** `npm install ai-gateway-provider ai @ai-sdk/openai @ai-sdk/anthropic`
|
|
60
|
+
|
|
61
|
+
## Pattern 2: OpenAI SDK
|
|
62
|
+
|
|
63
|
+
Drop-in replacement for OpenAI API with multi-provider support.
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import OpenAI from 'openai'
|
|
67
|
+
|
|
68
|
+
const client = new OpenAI({
|
|
69
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
70
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/compat`,
|
|
71
|
+
defaultHeaders: {
|
|
72
|
+
'cf-aig-authorization': `Bearer ${cfToken}`, // For authenticated gateways
|
|
73
|
+
},
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
// Switch providers by changing model format: {provider}/{model}
|
|
77
|
+
const response = await client.chat.completions.create({
|
|
78
|
+
model: 'openai/gpt-4o', // or 'anthropic/claude-sonnet-4-5'
|
|
79
|
+
messages: [{ role: 'user', content: 'Hello!' }],
|
|
80
|
+
})
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Pattern 3: Workers AI Binding
|
|
84
|
+
|
|
85
|
+
For Cloudflare Workers using Workers AI.
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
export default {
|
|
89
|
+
async fetch(request, env, ctx) {
|
|
90
|
+
const response = await env.AI.run(
|
|
91
|
+
'@cf/meta/llama-3-8b-instruct',
|
|
92
|
+
{ messages: [{ role: 'user', content: 'Hello!' }] },
|
|
93
|
+
{
|
|
94
|
+
gateway: {
|
|
95
|
+
id: 'my-gateway',
|
|
96
|
+
metadata: { userId: '123', team: 'engineering' },
|
|
97
|
+
},
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
return Response.json(response)
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Headers Quick Reference
|
|
107
|
+
|
|
108
|
+
| Header | Purpose | Example | Notes |
|
|
109
|
+
| ---------------------- | ---------------- | ---------------- | -------------------------------------- |
|
|
110
|
+
| `cf-aig-authorization` | Gateway auth | `Bearer {token}` | Required for authenticated gateways |
|
|
111
|
+
| `cf-aig-metadata` | Tracking | `{"userId":"x"}` | Max 5 entries, flat structure |
|
|
112
|
+
| `cf-aig-cache-ttl` | Cache duration | `3600` | Seconds, min 60, max 2592000 (30 days) |
|
|
113
|
+
| `cf-aig-skip-cache` | Bypass cache | `true` | - |
|
|
114
|
+
| `cf-aig-cache-key` | Custom cache key | `my-key` | Must be unique per response |
|
|
115
|
+
| `cf-aig-collect-log` | Skip logging | `false` | Default: true |
|
|
116
|
+
| `cf-aig-cache-status` | Cache hit/miss | Response only | `HIT` or `MISS` |
|
|
117
|
+
|
|
118
|
+
## In This Reference
|
|
119
|
+
|
|
120
|
+
| File | Purpose |
|
|
121
|
+
| ------------------------------------------ | ------------------------------------------------------------ |
|
|
122
|
+
| [sdk-integration.md](./sdk-integration.md) | Vercel AI SDK, OpenAI SDK, Workers binding patterns |
|
|
123
|
+
| [configuration.md](./configuration.md) | Dashboard setup, wrangler, API tokens |
|
|
124
|
+
| [features.md](./features.md) | Caching, rate limits, guardrails, DLP, BYOK, unified billing |
|
|
125
|
+
| [dynamic-routing.md](./dynamic-routing.md) | Fallbacks, A/B testing, conditional routing |
|
|
126
|
+
| [troubleshooting.md](./troubleshooting.md) | Debugging, errors, observability, gotchas |
|
|
127
|
+
|
|
128
|
+
## Reading Order
|
|
129
|
+
|
|
130
|
+
| Task | Files |
|
|
131
|
+
| ---------------- | --------------------------------------------------- |
|
|
132
|
+
| First-time setup | README + [configuration.md](./configuration.md) |
|
|
133
|
+
| SDK integration | README + [sdk-integration.md](./sdk-integration.md) |
|
|
134
|
+
| Enable caching | README + [features.md](./features.md) |
|
|
135
|
+
| Setup fallbacks | README + [dynamic-routing.md](./dynamic-routing.md) |
|
|
136
|
+
| Debug errors | README + [troubleshooting.md](./troubleshooting.md) |
|
|
137
|
+
|
|
138
|
+
## Architecture
|
|
139
|
+
|
|
140
|
+
AI Gateway acts as a proxy between your application and AI providers:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Your App → AI Gateway → AI Provider (OpenAI, Anthropic, etc.)
|
|
144
|
+
↓
|
|
145
|
+
Analytics, Caching, Rate Limiting, Logging
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Key URL patterns:**
|
|
149
|
+
|
|
150
|
+
- Unified API (OpenAI-compatible): `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions`
|
|
151
|
+
- Provider-specific: `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/{provider}/{endpoint}`
|
|
152
|
+
- Dynamic routes: Use route name instead of model: `dynamic/{route-name}`
|
|
153
|
+
|
|
154
|
+
## Gateway Types
|
|
155
|
+
|
|
156
|
+
1. **Unauthenticated Gateway**: Open access (not recommended for production)
|
|
157
|
+
2. **Authenticated Gateway**: Requires `cf-aig-authorization` header with Cloudflare API token (recommended)
|
|
158
|
+
|
|
159
|
+
## Provider Authentication Options
|
|
160
|
+
|
|
161
|
+
1. **Unified Billing**: Use AI Gateway billing to pay for inference (keyless mode - no provider API key needed)
|
|
162
|
+
2. **BYOK (Store Keys)**: Store provider API keys in Cloudflare dashboard
|
|
163
|
+
3. **Request Headers**: Include provider API key in each request
|
|
164
|
+
|
|
165
|
+
## Related Skills
|
|
166
|
+
|
|
167
|
+
- [Workers AI](../workers-ai/README.md) - For `env.AI.run()` details
|
|
168
|
+
- [Agents SDK](../agents-sdk/README.md) - For stateful AI patterns
|
|
169
|
+
- [Vectorize](../vectorize/README.md) - For RAG patterns with embeddings
|
|
170
|
+
|
|
171
|
+
## Resources
|
|
172
|
+
|
|
173
|
+
- [Official Docs](https://developers.cloudflare.com/ai-gateway/)
|
|
174
|
+
- [API Reference](https://developers.cloudflare.com/api/resources/ai_gateway/)
|
|
175
|
+
- [Provider Guides](https://developers.cloudflare.com/ai-gateway/usage/providers/)
|
|
176
|
+
- [Discord Community](https://discord.cloudflare.com)
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Configuration & Setup
|
|
2
|
+
|
|
3
|
+
## Creating a Gateway
|
|
4
|
+
|
|
5
|
+
### Dashboard
|
|
6
|
+
|
|
7
|
+
AI > AI Gateway > Create Gateway > Configure (auth, caching, rate limiting, logging)
|
|
8
|
+
|
|
9
|
+
### API
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/ai-gateway/gateways \
|
|
13
|
+
-H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" \
|
|
14
|
+
-d '{"id":"my-gateway","cache_ttl":3600,"rate_limiting_interval":60,"rate_limiting_limit":100,"collect_logs":true}'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Naming:** lowercase alphanumeric + hyphens (e.g., `prod-api`, `dev-chat`)
|
|
18
|
+
|
|
19
|
+
## Wrangler Integration
|
|
20
|
+
|
|
21
|
+
```toml
|
|
22
|
+
[ai]
|
|
23
|
+
binding = "AI"
|
|
24
|
+
|
|
25
|
+
[[ai.gateway]]
|
|
26
|
+
id = "my-gateway"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
wrangler secret put CF_API_TOKEN
|
|
31
|
+
wrangler secret put OPENAI_API_KEY # If not using BYOK
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Authentication
|
|
35
|
+
|
|
36
|
+
### Gateway Auth (protects gateway access)
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
const client = new OpenAI({
|
|
40
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
41
|
+
defaultHeaders: { 'cf-aig-authorization': `Bearer ${cfToken}` },
|
|
42
|
+
})
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Provider Auth Options
|
|
46
|
+
|
|
47
|
+
**1. Unified Billing (keyless)** - pay through Cloudflare, no provider key:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
const client = new OpenAI({
|
|
51
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
52
|
+
defaultHeaders: { 'cf-aig-authorization': `Bearer ${cfToken}` },
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Supports: OpenAI, Anthropic, Google AI Studio
|
|
57
|
+
|
|
58
|
+
**2. BYOK** - store keys in dashboard (Provider Keys > Add), no key in code
|
|
59
|
+
|
|
60
|
+
**3. Request Headers** - pass provider key per request:
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
const client = new OpenAI({
|
|
64
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
65
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
66
|
+
defaultHeaders: { 'cf-aig-authorization': `Bearer ${cfToken}` },
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## API Token Permissions
|
|
71
|
+
|
|
72
|
+
- **Gateway management:** AI Gateway - Read + Edit
|
|
73
|
+
- **Gateway access:** AI Gateway - Read (minimum)
|
|
74
|
+
|
|
75
|
+
## Gateway Management API
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# List
|
|
79
|
+
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/ai-gateway/gateways \
|
|
80
|
+
-H "Authorization: Bearer $CF_API_TOKEN"
|
|
81
|
+
|
|
82
|
+
# Get
|
|
83
|
+
curl .../gateways/{gateway_id}
|
|
84
|
+
|
|
85
|
+
# Update
|
|
86
|
+
curl -X PUT .../gateways/{gateway_id} \
|
|
87
|
+
-d '{"cache_ttl":7200,"rate_limiting_limit":200}'
|
|
88
|
+
|
|
89
|
+
# Delete
|
|
90
|
+
curl -X DELETE .../gateways/{gateway_id}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Getting IDs
|
|
94
|
+
|
|
95
|
+
- **Account ID:** Dashboard > Overview > Copy
|
|
96
|
+
- **Gateway ID:** AI Gateway > Gateway name column
|
|
97
|
+
|
|
98
|
+
## Python Example
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from openai import OpenAI
|
|
102
|
+
import os
|
|
103
|
+
|
|
104
|
+
client = OpenAI(
|
|
105
|
+
api_key=os.environ.get("OPENAI_API_KEY"),
|
|
106
|
+
base_url=f"https://gateway.ai.cloudflare.com/v1/{os.environ['CF_ACCOUNT_ID']}/{os.environ['GATEWAY_ID']}/openai",
|
|
107
|
+
default_headers={"cf-aig-authorization": f"Bearer {os.environ['CF_API_TOKEN']}"}
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Best Practices
|
|
112
|
+
|
|
113
|
+
1. **Always authenticate gateways in production**
|
|
114
|
+
2. **Use BYOK or unified billing** - secrets out of code
|
|
115
|
+
3. **Environment-specific gateways** - separate dev/staging/prod
|
|
116
|
+
4. **Set rate limits** - prevent runaway costs
|
|
117
|
+
5. **Enable logging** - track usage, debug issues
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Dynamic Routing
|
|
2
|
+
|
|
3
|
+
Configure complex routing in dashboard without code changes. Use route names instead of model names.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
const response = await client.chat.completions.create({
|
|
9
|
+
model: 'dynamic/smart-chat', // Route name from dashboard
|
|
10
|
+
messages: [{ role: 'user', content: 'Hello!' }],
|
|
11
|
+
})
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Node Types
|
|
15
|
+
|
|
16
|
+
| Node | Purpose | Use Case |
|
|
17
|
+
| ---------------- | ------------------ | ------------------------------- |
|
|
18
|
+
| **Conditional** | Branch on metadata | Paid vs free users, geo routing |
|
|
19
|
+
| **Percentage** | A/B split traffic | Model testing, gradual rollouts |
|
|
20
|
+
| **Rate Limit** | Enforce quotas | Per-user/team limits |
|
|
21
|
+
| **Budget Limit** | Cost quotas | Per-user spending caps |
|
|
22
|
+
| **Model** | Call provider | Final destination |
|
|
23
|
+
|
|
24
|
+
## Metadata
|
|
25
|
+
|
|
26
|
+
Pass via header (max 5 entries, flat only):
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
headers: {
|
|
30
|
+
'cf-aig-metadata': JSON.stringify({
|
|
31
|
+
userId: 'user-123',
|
|
32
|
+
tier: 'pro',
|
|
33
|
+
region: 'us-east'
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Common Patterns
|
|
39
|
+
|
|
40
|
+
**Multi-model fallback:**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Start → GPT-4 → On error: Claude → On error: Llama
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Tiered access:**
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Conditional: tier == 'enterprise' → GPT-4 (no limit)
|
|
50
|
+
Conditional: tier == 'pro' → Rate Limit 1000/hr → GPT-4o
|
|
51
|
+
Conditional: tier == 'free' → Rate Limit 10/hr → GPT-4o-mini
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Gradual rollout:**
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Percentage: 10% → New model, 90% → Old model
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Cost-based fallback:**
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Budget Limit: $100/day per teamId
|
|
64
|
+
< 80%: GPT-4
|
|
65
|
+
>= 80%: GPT-4o-mini
|
|
66
|
+
>= 100%: Error
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Version Management
|
|
70
|
+
|
|
71
|
+
- Save changes as new version
|
|
72
|
+
- Test with `model: 'dynamic/route@v2'`
|
|
73
|
+
- Roll back by deploying previous version
|
|
74
|
+
|
|
75
|
+
## Monitoring
|
|
76
|
+
|
|
77
|
+
Dashboard → Gateway → Dynamic Routes:
|
|
78
|
+
|
|
79
|
+
- Request count per path
|
|
80
|
+
- Success/error rates
|
|
81
|
+
- Latency/cost by path
|
|
82
|
+
|
|
83
|
+
## Limitations
|
|
84
|
+
|
|
85
|
+
- Max 5 metadata entries
|
|
86
|
+
- Values: string/number/boolean/null only
|
|
87
|
+
- No nested objects
|
|
88
|
+
- Route names: alphanumeric + hyphens
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Features & Capabilities
|
|
2
|
+
|
|
3
|
+
## Caching
|
|
4
|
+
|
|
5
|
+
Dashboard: Settings → Cache Responses → Enable
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// Custom TTL (1 hour)
|
|
9
|
+
headers: { 'cf-aig-cache-ttl': '3600' }
|
|
10
|
+
|
|
11
|
+
// Skip cache
|
|
12
|
+
headers: { 'cf-aig-skip-cache': 'true' }
|
|
13
|
+
|
|
14
|
+
// Custom cache key
|
|
15
|
+
headers: { 'cf-aig-cache-key': 'greeting-en' }
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Limits:** TTL 60s - 30 days. **Does NOT work with streaming.**
|
|
19
|
+
|
|
20
|
+
## Rate Limiting
|
|
21
|
+
|
|
22
|
+
Dashboard: Settings → Rate-limiting → Enable
|
|
23
|
+
|
|
24
|
+
- **Fixed window:** Resets at intervals
|
|
25
|
+
- **Sliding window:** Rolling window (more accurate)
|
|
26
|
+
- Returns `429` when exceeded
|
|
27
|
+
|
|
28
|
+
## Guardrails
|
|
29
|
+
|
|
30
|
+
Dashboard: Settings → Guardrails → Enable
|
|
31
|
+
|
|
32
|
+
Filter prompts/responses for inappropriate content. Actions: Flag (log) or Block (reject).
|
|
33
|
+
|
|
34
|
+
## Data Loss Prevention (DLP)
|
|
35
|
+
|
|
36
|
+
Dashboard: Settings → DLP → Enable
|
|
37
|
+
|
|
38
|
+
Detect PII (emails, SSNs, credit cards). Actions: Flag, Block, or Redact.
|
|
39
|
+
|
|
40
|
+
## Billing Modes
|
|
41
|
+
|
|
42
|
+
| Mode | Description | Setup |
|
|
43
|
+
| ------------------- | ---------------------------------------- | -------------------------------------- |
|
|
44
|
+
| **Unified Billing** | Pay through Cloudflare, no provider keys | Use `cf-aig-authorization` header only |
|
|
45
|
+
| **BYOK** | Store provider keys in dashboard | Add keys in Provider Keys section |
|
|
46
|
+
| **Pass-through** | Send provider key with each request | Include provider's auth header |
|
|
47
|
+
|
|
48
|
+
## Zero Data Retention
|
|
49
|
+
|
|
50
|
+
Dashboard: Settings → Privacy → Zero Data Retention
|
|
51
|
+
|
|
52
|
+
No prompts/responses stored. Request counts and costs still tracked.
|
|
53
|
+
|
|
54
|
+
## Logging
|
|
55
|
+
|
|
56
|
+
Dashboard: Settings → Logs → Enable (up to 10M logs)
|
|
57
|
+
|
|
58
|
+
Each entry: prompt, response, provider, model, tokens, cost, duration, cache status, metadata.
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// Skip logging for request
|
|
62
|
+
headers: { 'cf-aig-collect-log': 'false' }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Export:** Use Logpush to S3, GCS, Datadog, Splunk, etc.
|
|
66
|
+
|
|
67
|
+
## Custom Cost Tracking
|
|
68
|
+
|
|
69
|
+
For models not in Cloudflare's pricing database:
|
|
70
|
+
|
|
71
|
+
Dashboard: Gateway → Settings → Custom Costs
|
|
72
|
+
|
|
73
|
+
Or via API: set `model`, `input_cost`, `output_cost`.
|
|
74
|
+
|
|
75
|
+
## Supported Providers (22+)
|
|
76
|
+
|
|
77
|
+
| Provider | Unified API | Notes |
|
|
78
|
+
| ---------------------------------------------------- | ----------------------------------- | ---------------- |
|
|
79
|
+
| OpenAI | `openai/gpt-4o` | Full support |
|
|
80
|
+
| Anthropic | `anthropic/claude-sonnet-4-5` | Full support |
|
|
81
|
+
| Google AI | `google-ai-studio/gemini-2.0-flash` | Full support |
|
|
82
|
+
| Workers AI | `workersai/@cf/meta/llama-3` | Native |
|
|
83
|
+
| Azure OpenAI | `azure-openai/*` | Deployment names |
|
|
84
|
+
| AWS Bedrock | Provider endpoint only | `/bedrock/*` |
|
|
85
|
+
| Groq | `groq/*` | Fast inference |
|
|
86
|
+
| Mistral, Cohere, Perplexity, xAI, DeepSeek, Cerebras | Full support | - |
|
|
87
|
+
|
|
88
|
+
## Best Practices
|
|
89
|
+
|
|
90
|
+
1. Enable caching for deterministic prompts
|
|
91
|
+
2. Set rate limits to prevent abuse
|
|
92
|
+
3. Use guardrails for user-facing AI
|
|
93
|
+
4. Enable DLP for sensitive data
|
|
94
|
+
5. Use unified billing or BYOK for simpler key management
|
|
95
|
+
6. Enable logging for debugging
|
|
96
|
+
7. Use zero data retention when privacy required
|