opencodekit 0.15.4 → 0.15.5
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/dist/index.js +1 -1
- package/dist/template/.opencode/command/cloudflare.md +70 -0
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
- package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
- package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
- package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
- package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
- package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
- package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
- package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
- package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
- package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
- package/package.json +1 -1
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
# Cloudflare AI Gateway Skill
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing and configuring Cloudflare AI Gateway - a universal gateway for AI model providers with analytics, caching, rate limiting, and routing capabilities.
|
|
4
|
+
|
|
5
|
+
## When to Use This Skill
|
|
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
|
+
- Setting up observability with logging and custom metadata
|
|
12
|
+
- Integrating AI Gateway with Cloudflare Workers or external applications
|
|
13
|
+
- Debugging AI Gateway requests or optimizing configurations
|
|
14
|
+
|
|
15
|
+
## Core Concepts
|
|
16
|
+
|
|
17
|
+
### Gateway Architecture
|
|
18
|
+
|
|
19
|
+
AI Gateway acts as a proxy between your application and AI providers:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Your App → AI Gateway → AI Provider (OpenAI, Anthropic, etc.)
|
|
23
|
+
↓
|
|
24
|
+
Analytics, Caching, Rate Limiting, Logging
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Key URL patterns:**
|
|
28
|
+
- Unified API (OpenAI-compatible): `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions`
|
|
29
|
+
- Provider-specific: `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/{provider}/{endpoint}`
|
|
30
|
+
- Dynamic routes: Use route name instead of model: `dynamic/{route-name}`
|
|
31
|
+
|
|
32
|
+
### Gateway Types
|
|
33
|
+
|
|
34
|
+
1. **Unauthenticated Gateway**: Open access (not recommended for production)
|
|
35
|
+
2. **Authenticated Gateway**: Requires `cf-aig-authorization` header with Cloudflare API token (recommended)
|
|
36
|
+
|
|
37
|
+
### Provider Authentication Options
|
|
38
|
+
|
|
39
|
+
1. **Unified Billing**: Use AI Gateway billing to pay for inference
|
|
40
|
+
2. **BYOK (Store Keys)**: Store provider API keys in Cloudflare dashboard
|
|
41
|
+
3. **Request Headers**: Include provider API key in each request
|
|
42
|
+
|
|
43
|
+
## Common Patterns
|
|
44
|
+
|
|
45
|
+
### Pattern 1: OpenAI SDK with Unified API Endpoint
|
|
46
|
+
|
|
47
|
+
Most common pattern - drop-in replacement for OpenAI API with multi-provider support.
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import OpenAI from 'openai';
|
|
51
|
+
|
|
52
|
+
const client = new OpenAI({
|
|
53
|
+
apiKey: process.env.OPENAI_API_KEY, // or any provider's key
|
|
54
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/compat`,
|
|
55
|
+
defaultHeaders: {
|
|
56
|
+
// Only needed for authenticated gateways
|
|
57
|
+
'cf-aig-authorization': `Bearer ${cfToken}`
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Switch providers by changing model format: {provider}/{model}
|
|
62
|
+
const response = await client.chat.completions.create({
|
|
63
|
+
model: 'openai/gpt-4o-mini', // or 'anthropic/claude-sonnet-4-5'
|
|
64
|
+
messages: [{ role: 'user', content: 'Hello!' }]
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Benefits:**
|
|
69
|
+
- Works with existing OpenAI SDK tooling
|
|
70
|
+
- Switch providers without code changes (just change model param)
|
|
71
|
+
- Compatible with most OpenAI-compatible tools
|
|
72
|
+
|
|
73
|
+
### Pattern 2: Provider-Specific Endpoints
|
|
74
|
+
|
|
75
|
+
Use when you need the original provider's API schema.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import OpenAI from 'openai';
|
|
79
|
+
|
|
80
|
+
const client = new OpenAI({
|
|
81
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
82
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Standard OpenAI request - AI Gateway features still apply
|
|
86
|
+
const response = await client.chat.completions.create({
|
|
87
|
+
model: 'gpt-4o-mini',
|
|
88
|
+
messages: [{ role: 'user', content: 'Hello!' }]
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Pattern 3: Workers AI Binding with Gateway
|
|
93
|
+
|
|
94
|
+
For Cloudflare Workers using Workers AI.
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
export default {
|
|
98
|
+
async fetch(request, env, ctx) {
|
|
99
|
+
const response = await env.AI.run(
|
|
100
|
+
'@cf/meta/llama-3-8b-instruct',
|
|
101
|
+
{
|
|
102
|
+
messages: [{ role: 'user', content: 'Hello!' }]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
gateway: {
|
|
106
|
+
id: 'my-gateway',
|
|
107
|
+
metadata: { userId: '123', team: 'engineering' }
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
return new Response(JSON.stringify(response));
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Pattern 4: Custom Metadata for Tracking
|
|
118
|
+
|
|
119
|
+
Tag requests with user IDs, teams, or other identifiers (max 5 metadata entries).
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
const response = await openai.chat.completions.create(
|
|
123
|
+
{
|
|
124
|
+
model: 'gpt-4o-mini',
|
|
125
|
+
messages: [{ role: 'user', content: 'Hello!' }]
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
headers: {
|
|
129
|
+
'cf-aig-metadata': JSON.stringify({
|
|
130
|
+
userId: 'user123',
|
|
131
|
+
team: 'engineering',
|
|
132
|
+
environment: 'production',
|
|
133
|
+
requestType: 'chat',
|
|
134
|
+
internal: true
|
|
135
|
+
})
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Pattern 5: Per-Request Caching Control
|
|
142
|
+
|
|
143
|
+
Override default gateway caching settings per request.
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Skip cache for this request
|
|
147
|
+
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai/chat/completions \
|
|
148
|
+
--header 'Authorization: Bearer $TOKEN' \
|
|
149
|
+
--header 'cf-aig-skip-cache: true' \
|
|
150
|
+
--data '{"model": "gpt-4o-mini", "messages": [...]}'
|
|
151
|
+
|
|
152
|
+
# Custom cache TTL (1 hour)
|
|
153
|
+
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai/chat/completions \
|
|
154
|
+
--header 'Authorization: Bearer $TOKEN' \
|
|
155
|
+
--header 'cf-aig-cache-ttl: 3600' \
|
|
156
|
+
--data '{"model": "gpt-4o-mini", "messages": [...]}'
|
|
157
|
+
|
|
158
|
+
# Custom cache key for deterministic caching
|
|
159
|
+
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai/chat/completions \
|
|
160
|
+
--header 'Authorization: Bearer $TOKEN' \
|
|
161
|
+
--header 'cf-aig-cache-key: greeting-response' \
|
|
162
|
+
--data '{"model": "gpt-4o-mini", "messages": [...]}'
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Cache headers:**
|
|
166
|
+
- `cf-aig-skip-cache: true` - Bypass cache
|
|
167
|
+
- `cf-aig-cache-ttl: <seconds>` - Custom TTL (min: 60s, max: 1 month)
|
|
168
|
+
- `cf-aig-cache-key: <key>` - Custom cache key
|
|
169
|
+
- Response header `cf-aig-cache-status: HIT|MISS` indicates cache status
|
|
170
|
+
|
|
171
|
+
### Pattern 6: BYOK (Bring Your Own Keys)
|
|
172
|
+
|
|
173
|
+
Store provider keys in dashboard, remove from code.
|
|
174
|
+
|
|
175
|
+
**Setup:**
|
|
176
|
+
1. Enable authentication on gateway
|
|
177
|
+
2. Dashboard → AI Gateway → Select gateway → Provider Keys → Add API Key
|
|
178
|
+
3. Remove provider API keys from code:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
// Before BYOK: Include provider key in every request
|
|
182
|
+
const client = new OpenAI({
|
|
183
|
+
apiKey: process.env.OPENAI_API_KEY, // Provider key
|
|
184
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
185
|
+
defaultHeaders: {
|
|
186
|
+
'cf-aig-authorization': `Bearer ${cfToken}` // Gateway auth
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// After BYOK: Only gateway auth needed
|
|
191
|
+
const client = new OpenAI({
|
|
192
|
+
// No apiKey needed - stored in dashboard
|
|
193
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
194
|
+
defaultHeaders: {
|
|
195
|
+
'cf-aig-authorization': `Bearer ${cfToken}` // Only gateway auth
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Pattern 7: Dynamic Routing with Fallbacks
|
|
201
|
+
|
|
202
|
+
Configure routing logic in dashboard, not code.
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// Use route name instead of model
|
|
206
|
+
const response = await client.chat.completions.create({
|
|
207
|
+
model: 'dynamic/support', // Route name from dashboard
|
|
208
|
+
messages: [{ role: 'user', content: 'Hello!' }]
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Dynamic routing use cases:**
|
|
213
|
+
- A/B testing between models
|
|
214
|
+
- Rate/budget limits per user/team
|
|
215
|
+
- Model fallbacks on errors
|
|
216
|
+
- Conditional routing (paid vs free users)
|
|
217
|
+
|
|
218
|
+
**Route configuration (in dashboard):**
|
|
219
|
+
1. Create route: Dashboard → Gateway → Dynamic Routes → Add Route
|
|
220
|
+
2. Define flow with nodes:
|
|
221
|
+
- **Conditional**: Branch on metadata (e.g., `user.plan == "paid"`)
|
|
222
|
+
- **Percentage**: A/B split (e.g., 80% model A, 20% model B)
|
|
223
|
+
- **Rate Limit**: Quota enforcement, fallback when exceeded
|
|
224
|
+
- **Budget Limit**: Cost quota enforcement
|
|
225
|
+
- **Model**: Call specific provider/model
|
|
226
|
+
3. Save & deploy version
|
|
227
|
+
|
|
228
|
+
### Pattern 8: Error Handling
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
try {
|
|
232
|
+
const response = await client.chat.completions.create({
|
|
233
|
+
model: 'gpt-4o-mini',
|
|
234
|
+
messages: [{ role: 'user', content: 'Hello!' }]
|
|
235
|
+
});
|
|
236
|
+
} catch (error) {
|
|
237
|
+
// Rate limit exceeded
|
|
238
|
+
if (error.status === 429) {
|
|
239
|
+
console.error('Rate limit exceeded:', error.message);
|
|
240
|
+
// Implement backoff or use dynamic routing with fallback
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Gateway authentication failed
|
|
244
|
+
if (error.status === 401) {
|
|
245
|
+
console.error('Gateway authentication failed - check cf-aig-authorization token');
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Provider authentication failed
|
|
249
|
+
if (error.status === 403) {
|
|
250
|
+
console.error('Provider authentication failed - check API key or BYOK setup');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Configuration Reference
|
|
258
|
+
|
|
259
|
+
### Dashboard Setup
|
|
260
|
+
|
|
261
|
+
**Create gateway:**
|
|
262
|
+
```bash
|
|
263
|
+
# Via Dashboard: AI > AI Gateway > Create Gateway
|
|
264
|
+
# Or via API:
|
|
265
|
+
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/ai-gateway/gateways \
|
|
266
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
267
|
+
-H "Content-Type: application/json" \
|
|
268
|
+
-d '{
|
|
269
|
+
"id": "my-gateway",
|
|
270
|
+
"cache_ttl": 3600,
|
|
271
|
+
"cache_invalidate_on_update": true,
|
|
272
|
+
"rate_limiting_interval": 60,
|
|
273
|
+
"rate_limiting_limit": 100,
|
|
274
|
+
"rate_limiting_technique": "sliding",
|
|
275
|
+
"collect_logs": true
|
|
276
|
+
}'
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Feature Configuration
|
|
280
|
+
|
|
281
|
+
**Caching:**
|
|
282
|
+
- Dashboard: Settings → Cache Responses → Enable
|
|
283
|
+
- Default TTL: Set in gateway settings
|
|
284
|
+
- Cache behavior: Only for identical requests (text & image responses)
|
|
285
|
+
- Use case: Support bots with limited prompt options
|
|
286
|
+
|
|
287
|
+
**Rate Limiting:**
|
|
288
|
+
- Dashboard: Settings → Rate-limiting → Enable
|
|
289
|
+
- Parameters:
|
|
290
|
+
- Limit: Number of requests
|
|
291
|
+
- Interval: Time period (seconds)
|
|
292
|
+
- Technique: `fixed` or `sliding` window
|
|
293
|
+
- Response: `429 Too Many Requests` when exceeded
|
|
294
|
+
|
|
295
|
+
**Logging:**
|
|
296
|
+
- Dashboard: Settings → Logs
|
|
297
|
+
- Default: Enabled (up to 10M logs per gateway)
|
|
298
|
+
- Per-request: `cf-aig-collect-log: false` to skip
|
|
299
|
+
- Auto-delete: Enable to remove oldest logs when limit reached
|
|
300
|
+
- Filter logs by: status, cache, provider, model, cost, tokens, duration, metadata
|
|
301
|
+
|
|
302
|
+
### Wrangler Integration
|
|
303
|
+
|
|
304
|
+
**Gateway with Workers AI:**
|
|
305
|
+
|
|
306
|
+
```toml
|
|
307
|
+
# wrangler.toml
|
|
308
|
+
name = "my-worker"
|
|
309
|
+
main = "src/index.ts"
|
|
310
|
+
compatibility_date = "2024-01-01"
|
|
311
|
+
|
|
312
|
+
[ai]
|
|
313
|
+
binding = "AI"
|
|
314
|
+
|
|
315
|
+
[[ai.gateway]]
|
|
316
|
+
id = "my-gateway"
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// src/index.ts
|
|
321
|
+
export default {
|
|
322
|
+
async fetch(request, env, ctx): Promise<Response> {
|
|
323
|
+
const response = await env.AI.run(
|
|
324
|
+
'@cf/meta/llama-3-8b-instruct',
|
|
325
|
+
{ prompt: 'Hello!' },
|
|
326
|
+
{ gateway: { id: 'my-gateway' } }
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
return Response.json(response);
|
|
330
|
+
}
|
|
331
|
+
} satisfies ExportedHandler<Env>;
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**Environment variables for gateways:**
|
|
335
|
+
|
|
336
|
+
```toml
|
|
337
|
+
# wrangler.toml
|
|
338
|
+
[vars]
|
|
339
|
+
CF_ACCOUNT_ID = "your-account-id"
|
|
340
|
+
GATEWAY_ID = "my-gateway"
|
|
341
|
+
|
|
342
|
+
# Secrets (use wrangler secret put)
|
|
343
|
+
# CF_API_TOKEN - for authenticated gateways
|
|
344
|
+
# OPENAI_API_KEY - if not using BYOK
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Set secrets
|
|
349
|
+
wrangler secret put CF_API_TOKEN
|
|
350
|
+
wrangler secret put OPENAI_API_KEY
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### API Token Permissions
|
|
354
|
+
|
|
355
|
+
**For gateway management:**
|
|
356
|
+
- AI Gateway - Read
|
|
357
|
+
- AI Gateway - Edit
|
|
358
|
+
|
|
359
|
+
**For authenticated gateway access:**
|
|
360
|
+
- Create API token with appropriate permissions
|
|
361
|
+
- Pass in `cf-aig-authorization: Bearer {token}` header
|
|
362
|
+
|
|
363
|
+
## Supported Providers
|
|
364
|
+
|
|
365
|
+
AI Gateway works with 15+ providers via unified API or provider-specific endpoints:
|
|
366
|
+
|
|
367
|
+
| Provider | Unified API | Provider Endpoint | Notes |
|
|
368
|
+
|----------|-------------|-------------------|-------|
|
|
369
|
+
| OpenAI | ✅ `openai/gpt-4o` | `/openai/*` | Full support |
|
|
370
|
+
| Anthropic | ✅ `anthropic/claude-3-5-sonnet` | `/anthropic/*` | Full support |
|
|
371
|
+
| Google AI Studio | ✅ `google-ai-studio/gemini-2.0-flash` | `/google-ai-studio/*` | Full support |
|
|
372
|
+
| Workers AI | ✅ `workersai/@cf/meta/llama-3` | `/workers-ai/*` | Native integration |
|
|
373
|
+
| Azure OpenAI | ✅ `azure-openai/*` | `/azure-openai/*` | Deployment names |
|
|
374
|
+
| AWS Bedrock | ❌ | `/bedrock/*` | Provider endpoint only |
|
|
375
|
+
| Groq | ✅ `groq/*` | `/groq/*` | Fast inference |
|
|
376
|
+
| Mistral | ✅ `mistral/*` | `/mistral/*` | Full support |
|
|
377
|
+
| Cohere | ✅ `cohere/*` | `/cohere/*` | Full support |
|
|
378
|
+
| Perplexity | ✅ `perplexity/*` | `/perplexity/*` | Full support |
|
|
379
|
+
| xAI (Grok) | ✅ `grok/*` | `/grok/*` | Full support |
|
|
380
|
+
| DeepSeek | ✅ `deepseek/*` | `/deepseek/*` | Full support |
|
|
381
|
+
| Cerebras | ✅ `cerebras/*` | `/cerebras/*` | Fast inference |
|
|
382
|
+
| Replicate | ❌ | `/replicate/*` | Provider endpoint only |
|
|
383
|
+
| HuggingFace | ❌ | `/huggingface/*` | Provider endpoint only |
|
|
384
|
+
|
|
385
|
+
See [full provider list](https://developers.cloudflare.com/ai-gateway/usage/providers/)
|
|
386
|
+
|
|
387
|
+
## Observability
|
|
388
|
+
|
|
389
|
+
### Analytics Dashboard
|
|
390
|
+
|
|
391
|
+
View in Dashboard → AI Gateway → Select gateway:
|
|
392
|
+
- Request count over time
|
|
393
|
+
- Token usage (input/output)
|
|
394
|
+
- Cost tracking (estimated or custom)
|
|
395
|
+
- Cache hit rate
|
|
396
|
+
- Error rates by provider/model
|
|
397
|
+
- Latency percentiles
|
|
398
|
+
|
|
399
|
+
### Log Structure
|
|
400
|
+
|
|
401
|
+
Each log entry contains:
|
|
402
|
+
- User prompt & model response
|
|
403
|
+
- Provider & model
|
|
404
|
+
- Timestamp
|
|
405
|
+
- Request status (success/error)
|
|
406
|
+
- Token usage (input/output/total)
|
|
407
|
+
- Cost
|
|
408
|
+
- Duration (ms)
|
|
409
|
+
- Cache status (HIT/MISS)
|
|
410
|
+
- Custom metadata
|
|
411
|
+
- Request/Event ID
|
|
412
|
+
|
|
413
|
+
### Custom Cost Tracking
|
|
414
|
+
|
|
415
|
+
For custom models or providers not in Cloudflare's pricing database:
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
# Dashboard: Gateway → Settings → Custom Costs
|
|
419
|
+
# Or via API:
|
|
420
|
+
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/ai-gateway/gateways/{gateway_id}/custom-costs \
|
|
421
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
422
|
+
-d '{
|
|
423
|
+
"model": "custom-model-v1",
|
|
424
|
+
"input_cost": 0.01,
|
|
425
|
+
"output_cost": 0.03
|
|
426
|
+
}'
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
## Advanced Use Cases
|
|
430
|
+
|
|
431
|
+
### Multi-Model Chat with Fallbacks
|
|
432
|
+
|
|
433
|
+
```typescript
|
|
434
|
+
// Configure in dashboard:
|
|
435
|
+
// Route: dynamic/smart-chat
|
|
436
|
+
// - Try GPT-4 first
|
|
437
|
+
// - Fallback to Claude if error
|
|
438
|
+
// - Fallback to Llama if both fail
|
|
439
|
+
|
|
440
|
+
const response = await client.chat.completions.create({
|
|
441
|
+
model: 'dynamic/smart-chat',
|
|
442
|
+
messages: [{ role: 'user', content: 'Complex reasoning task' }]
|
|
443
|
+
});
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### A/B Testing Models
|
|
447
|
+
|
|
448
|
+
```typescript
|
|
449
|
+
// Dashboard: Create route with Percentage node
|
|
450
|
+
// - 50% to gpt-4o-mini
|
|
451
|
+
// - 50% to claude-sonnet-4-5
|
|
452
|
+
// Analyze logs to compare quality/cost/latency
|
|
453
|
+
|
|
454
|
+
const response = await client.chat.completions.create({
|
|
455
|
+
model: 'dynamic/ab-test',
|
|
456
|
+
messages: [{ role: 'user', content: prompt }],
|
|
457
|
+
// Add metadata to track experiments
|
|
458
|
+
headers: {
|
|
459
|
+
'cf-aig-metadata': JSON.stringify({ experiment: 'model-comparison-v1' })
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### User-Based Rate Limiting
|
|
465
|
+
|
|
466
|
+
```typescript
|
|
467
|
+
// Dashboard: Create route with Rate Limit node
|
|
468
|
+
// - Condition: Check metadata.userId
|
|
469
|
+
// - Limit: 100 requests/hour per user
|
|
470
|
+
// - Fallback: Return error or use cheaper model
|
|
471
|
+
|
|
472
|
+
const response = await client.chat.completions.create(
|
|
473
|
+
{
|
|
474
|
+
model: 'dynamic/user-limited',
|
|
475
|
+
messages: [{ role: 'user', content: prompt }]
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
headers: {
|
|
479
|
+
'cf-aig-metadata': JSON.stringify({ userId })
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
);
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Semantic Caching (Future)
|
|
486
|
+
|
|
487
|
+
Currently, caching requires identical requests. Semantic caching (similar but not identical requests) is planned.
|
|
488
|
+
|
|
489
|
+
**Current workaround:**
|
|
490
|
+
```typescript
|
|
491
|
+
// Use cf-aig-cache-key for grouped responses
|
|
492
|
+
const normalizedPrompt = normalizePrompt(userInput); // Your logic
|
|
493
|
+
const cacheKey = hashPrompt(normalizedPrompt);
|
|
494
|
+
|
|
495
|
+
const response = await fetch(gatewayUrl, {
|
|
496
|
+
headers: {
|
|
497
|
+
'cf-aig-cache-key': cacheKey,
|
|
498
|
+
'cf-aig-cache-ttl': '3600'
|
|
499
|
+
},
|
|
500
|
+
// ... rest of request
|
|
501
|
+
});
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
## Debugging & Troubleshooting
|
|
505
|
+
|
|
506
|
+
### Check Gateway Status
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
# List all gateways
|
|
510
|
+
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/ai-gateway/gateways \
|
|
511
|
+
-H "Authorization: Bearer $CF_API_TOKEN"
|
|
512
|
+
|
|
513
|
+
# Get specific gateway
|
|
514
|
+
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/ai-gateway/gateways/{gateway_id} \
|
|
515
|
+
-H "Authorization: Bearer $CF_API_TOKEN"
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
### Inspect Request Logs
|
|
519
|
+
|
|
520
|
+
Dashboard → Gateway → Logs
|
|
521
|
+
|
|
522
|
+
**Filter examples:**
|
|
523
|
+
- `status: error` - All failed requests
|
|
524
|
+
- `provider: openai` - OpenAI requests only
|
|
525
|
+
- `metadata.userId: user123` - Specific user
|
|
526
|
+
- `cache: not cached` - Cache misses only
|
|
527
|
+
- `cost > 0.01` - Expensive requests
|
|
528
|
+
|
|
529
|
+
### Common Issues
|
|
530
|
+
|
|
531
|
+
**401 Unauthorized:**
|
|
532
|
+
- Authenticated gateway without `cf-aig-authorization` header
|
|
533
|
+
- Invalid/expired CF API token
|
|
534
|
+
- Check token permissions (AI Gateway - Read)
|
|
535
|
+
|
|
536
|
+
**403 Forbidden:**
|
|
537
|
+
- Provider API key invalid/missing
|
|
538
|
+
- BYOK key not configured or expired
|
|
539
|
+
- Provider quota exceeded
|
|
540
|
+
|
|
541
|
+
**429 Rate Limited:**
|
|
542
|
+
- Gateway rate limit exceeded
|
|
543
|
+
- Check settings: Dashboard → Gateway → Settings → Rate-limiting
|
|
544
|
+
- Implement backoff or use dynamic routing
|
|
545
|
+
|
|
546
|
+
**Cache not working:**
|
|
547
|
+
- Requests must be identical (body, model, parameters)
|
|
548
|
+
- Caching only supports text/image responses
|
|
549
|
+
- Check `cf-aig-cache-status` header in response
|
|
550
|
+
- Verify caching enabled: Dashboard → Settings → Cache Responses
|
|
551
|
+
|
|
552
|
+
**Logs not appearing:**
|
|
553
|
+
- Check log limit (default: 10M per gateway)
|
|
554
|
+
- Verify logs enabled: Dashboard → Settings → Logs
|
|
555
|
+
- Per-request `cf-aig-collect-log: false` bypasses logging
|
|
556
|
+
- Wait 30-60s for logs to appear
|
|
557
|
+
|
|
558
|
+
## API Reference
|
|
559
|
+
|
|
560
|
+
### Gateway Management
|
|
561
|
+
|
|
562
|
+
```bash
|
|
563
|
+
# Create gateway
|
|
564
|
+
POST /accounts/{account_id}/ai-gateway/gateways
|
|
565
|
+
|
|
566
|
+
# Update gateway
|
|
567
|
+
PUT /accounts/{account_id}/ai-gateway/gateways/{gateway_id}
|
|
568
|
+
|
|
569
|
+
# Delete gateway
|
|
570
|
+
DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}
|
|
571
|
+
|
|
572
|
+
# List gateways
|
|
573
|
+
GET /accounts/{account_id}/ai-gateway/gateways
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
### Log Management
|
|
577
|
+
|
|
578
|
+
```bash
|
|
579
|
+
# Get logs
|
|
580
|
+
GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs
|
|
581
|
+
|
|
582
|
+
# Delete logs
|
|
583
|
+
DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs
|
|
584
|
+
|
|
585
|
+
# Filter logs (query params)
|
|
586
|
+
?status=error&provider=openai&cache=not_cached
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
### Headers Reference
|
|
590
|
+
|
|
591
|
+
**Gateway authentication:**
|
|
592
|
+
- `cf-aig-authorization: Bearer {token}` - Required for authenticated gateways
|
|
593
|
+
|
|
594
|
+
**Caching:**
|
|
595
|
+
- `cf-aig-cache-ttl: {seconds}` - Cache duration (60s - 1 month)
|
|
596
|
+
- `cf-aig-skip-cache: true` - Bypass cache
|
|
597
|
+
- `cf-aig-cache-key: {key}` - Custom cache key
|
|
598
|
+
- Response: `cf-aig-cache-status: HIT|MISS`
|
|
599
|
+
|
|
600
|
+
**Logging:**
|
|
601
|
+
- `cf-aig-collect-log: false` - Skip logging for this request
|
|
602
|
+
|
|
603
|
+
**Metadata:**
|
|
604
|
+
- `cf-aig-metadata: {json}` - Custom tracking data (max 5 entries, string/number/boolean values)
|
|
605
|
+
|
|
606
|
+
## Best Practices
|
|
607
|
+
|
|
608
|
+
1. **Always use authenticated gateways in production**
|
|
609
|
+
- Prevents unauthorized access
|
|
610
|
+
- Protects against log storage abuse
|
|
611
|
+
- Required for BYOK
|
|
612
|
+
|
|
613
|
+
2. **Use BYOK for provider keys**
|
|
614
|
+
- Removes keys from codebase
|
|
615
|
+
- Easier key rotation
|
|
616
|
+
- Centralized management
|
|
617
|
+
|
|
618
|
+
3. **Add custom metadata to all requests**
|
|
619
|
+
- Track users, teams, environments
|
|
620
|
+
- Filter logs effectively
|
|
621
|
+
- Debug production issues faster
|
|
622
|
+
|
|
623
|
+
4. **Configure appropriate rate limits**
|
|
624
|
+
- Prevent runaway costs
|
|
625
|
+
- Use dynamic routing for per-user limits
|
|
626
|
+
- Combine with budget limits
|
|
627
|
+
|
|
628
|
+
5. **Enable caching for deterministic prompts**
|
|
629
|
+
- Support bots with fixed options
|
|
630
|
+
- Static content generation
|
|
631
|
+
- Reduces costs & latency
|
|
632
|
+
|
|
633
|
+
6. **Use dynamic routing for resilience**
|
|
634
|
+
- Model fallbacks on errors
|
|
635
|
+
- A/B testing without code changes
|
|
636
|
+
- Gradual rollouts
|
|
637
|
+
|
|
638
|
+
7. **Monitor logs regularly**
|
|
639
|
+
- Set up automatic log deletion
|
|
640
|
+
- Export logs for long-term analysis
|
|
641
|
+
- Track cost trends
|
|
642
|
+
|
|
643
|
+
8. **Test with provider-specific endpoints first**
|
|
644
|
+
- Validates provider integration
|
|
645
|
+
- Easier debugging
|
|
646
|
+
- Migrate to unified API after validation
|
|
647
|
+
|
|
648
|
+
## Examples Repository
|
|
649
|
+
|
|
650
|
+
See real-world usage:
|
|
651
|
+
- [NextChat](https://github.com/ChatGPTNextWeb/NextChat/blob/main/app/utils/cloudflare.ts) - URL parsing utilities
|
|
652
|
+
- [LibreChat](https://github.com/danny-avila/LibreChat) - Multi-provider chat with AI Gateway
|
|
653
|
+
- [Continue.dev](https://github.com/continuedev/continue/blob/main/core/llm/llms/Cloudflare.ts) - IDE integration
|
|
654
|
+
- [Big-AGI](https://github.com/enricoros/big-AGI) - Complex gateway path handling
|
|
655
|
+
|
|
656
|
+
## Resources
|
|
657
|
+
|
|
658
|
+
- [Official Docs](https://developers.cloudflare.com/ai-gateway/)
|
|
659
|
+
- [API Reference](https://developers.cloudflare.com/api/resources/ai_gateway/)
|
|
660
|
+
- [Provider Guides](https://developers.cloudflare.com/ai-gateway/usage/providers/)
|
|
661
|
+
- [Workers AI Integration](https://developers.cloudflare.com/workers-ai/)
|
|
662
|
+
- [Discord Community](https://discord.cloudflare.com)
|
|
663
|
+
|
|
664
|
+
## Quick Reference
|
|
665
|
+
|
|
666
|
+
**Create gateway:**
|
|
667
|
+
```bash
|
|
668
|
+
Dashboard → AI → AI Gateway → Create Gateway
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
**Basic request:**
|
|
672
|
+
```typescript
|
|
673
|
+
const client = new OpenAI({
|
|
674
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/compat`
|
|
675
|
+
});
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
**Check cache status:**
|
|
679
|
+
```bash
|
|
680
|
+
# Response header: cf-aig-cache-status: HIT|MISS
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
**Get account/gateway IDs:**
|
|
684
|
+
```bash
|
|
685
|
+
# Account ID: Dashboard → Overview → Account ID
|
|
686
|
+
# Gateway ID: Dashboard → AI Gateway → Gateway name/ID
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
**Required env vars:**
|
|
690
|
+
```bash
|
|
691
|
+
CF_ACCOUNT_ID=xxx
|
|
692
|
+
GATEWAY_ID=xxx
|
|
693
|
+
CF_API_TOKEN=xxx # For authenticated gateways
|
|
694
|
+
PROVIDER_API_KEY=xxx # If not using BYOK
|
|
695
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Cloudflare AI Search Skill Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing Cloudflare AI Search (formerly AutoRAG), Cloudflare's managed semantic search and RAG service....
|
|
4
|
+
|
|
5
|
+
## In This Reference
|
|
6
|
+
|
|
7
|
+
- **[configuration.md](./configuration.md)** - Setup, deployment, configuration
|
|
8
|
+
- **[api.md](./api.md)** - API endpoints, methods, interfaces
|
|
9
|
+
- **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
|
|
10
|
+
- **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
|
|
11
|
+
|
|
12
|
+
## See Also
|
|
13
|
+
|
|
14
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/)
|